From 6294755f323ccf00a3d152f578c3247a66051b71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Mon, 24 Feb 2020 16:23:58 -0800 Subject: [PATCH 1/5] [ios, macos] Cleaned up iOS, macOS CMake configuration --- platform/ios/ios.cmake | 6 +- platform/macos/macos.cmake | 115 ++++++++----------------------------- 2 files changed, 27 insertions(+), 94 deletions(-) diff --git a/platform/ios/ios.cmake b/platform/ios/ios.cmake index 91489dbba98..a662cac13f6 100644 --- a/platform/ios/ios.cmake +++ b/platform/ios/ios.cmake @@ -33,12 +33,11 @@ target_sources( PRIVATE ${PROJECT_SOURCE_DIR}/platform/darwin/src/async_task.cpp ${PROJECT_SOURCE_DIR}/platform/darwin/src/collator.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/native_apple_interface.m ${PROJECT_SOURCE_DIR}/platform/darwin/src/http_file_source.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/native_apple_interface.m ${PROJECT_SOURCE_DIR}/platform/darwin/src/image.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/local_glyph_rasterizer.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/logging_nslog.mm + ${PROJECT_SOURCE_DIR}/platform/darwin/src/native_apple_interface.m ${PROJECT_SOURCE_DIR}/platform/darwin/src/nsthread.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/number_format.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/reachability.m @@ -47,6 +46,7 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/darwin/src/timer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_backend.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_frontend.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/map/map_snapshotter.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/asset_file_source.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/database_file_source.cpp @@ -66,8 +66,6 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/png_writer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/thread_local.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/utf.cpp - ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/thread_local.cpp - ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp ) target_include_directories( diff --git a/platform/macos/macos.cmake b/platform/macos/macos.cmake index da89a67fff4..61b6a33be9f 100644 --- a/platform/macos/macos.cmake +++ b/platform/macos/macos.cmake @@ -1,98 +1,47 @@ -find_package(OpenGL REQUIRED) +if(NOT DEFINED MACOSX_DEPLOYMENT_TARGET) + set(MACOSX_DEPLOYMENT_TARGET "10.11") +endif() -target_compile_definitions( - mbgl-core - PUBLIC GL_SILENCE_DEPRECATION -) +set_target_properties(mbgl-core PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES) + +if(MBGL_WITH_OPENGL) + find_package(OpenGL REQUIRED) + + target_compile_definitions( + mbgl-core + PUBLIC GL_SILENCE_DEPRECATION + ) + target_sources( + mbgl-core + PRIVATE + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gl/headless_backend.cpp + ${PROJECT_SOURCE_DIR}/platform/darwin/src/gl_functions.cpp ${PROJECT_SOURCE_DIR}/platform/darwin/src/headless_backend_cgl.mm + ) + target_link_libraries( + mbgl-core + PRIVATE OpenGL::GL + ) +endif() target_sources( mbgl-core PRIVATE - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLAccountManager.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLAttributedExpression.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLAttributionInfo.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLBackgroundStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLCircleStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLClockDirectionFormatter.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLCompassDirectionFormatter.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLComputedShapeSource.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLCoordinateFormatter.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLDistanceFormatter.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLFeature.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLFillExtrusionStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLFillStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLForegroundStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLFoundation.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLGeometry.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLHeatmapStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLHillshadeStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLImageSource.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLLight.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLLineStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLLoggingConfiguration.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLMapCamera.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLMapSnapshotter.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLMultiPoint.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLNetworkConfiguration.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLOfflinePack.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLOfflineStorage.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLOpenGLStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLPointAnnotation.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLPointCollection.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLPolygon.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLPolyline.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLRasterDEMSource.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLRasterStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLRasterTileSource.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLRendererConfiguration.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLSDKMetricsManager.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLShape.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLShapeCollection.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLShapeOfflineRegion.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLShapeSource.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLSource.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLStyle.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLStyleLayerManager.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLStyleValue.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLSymbolStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLTilePyramidOfflineRegion.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLTileSource.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLTypes.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLVectorStyleLayer.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLVectorTileSource.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSArray+MGLAdditions.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSBundle+MGLAdditions.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSCoder+MGLAdditions.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSCompoundPredicate+MGLAdditions.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSDate+MGLAdditions.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSDictionary+MGLAdditions.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSExpression+MGLAdditions.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSPredicate+MGLAdditions.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSString+MGLAdditions.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSURL+MGLAdditions.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSValue+MGLAdditions.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/NSValue+MGLStyleAttributeAdditions.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/async_task.cpp ${PROJECT_SOURCE_DIR}/platform/darwin/src/collator.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/gl_functions.cpp - ${PROJECT_SOURCE_DIR}/platform/darwin/src/headless_backend_cgl.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/http_file_source.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/image.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/local_glyph_rasterizer.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/logging_nslog.mm + ${PROJECT_SOURCE_DIR}/platform/darwin/src/native_apple_interface.m ${PROJECT_SOURCE_DIR}/platform/darwin/src/nsthread.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/number_format.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/reachability.m ${PROJECT_SOURCE_DIR}/platform/darwin/src/run_loop.cpp ${PROJECT_SOURCE_DIR}/platform/darwin/src/string_nsstring.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/timer.cpp - ${PROJECT_SOURCE_DIR}/platform/darwin/src/native_apple_interface.m - ${PROJECT_SOURCE_DIR}/platform/darwin/src/MGLNetworkIntegrationManager.m ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_backend.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_frontend.cpp - ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gl/headless_backend.cpp + ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/map/map_snapshotter.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/asset_file_source.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/database_file_source.cpp @@ -112,21 +61,8 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/png_writer.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/thread_local.cpp ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/utf.cpp - ${PROJECT_SOURCE_DIR}/platform/macos/src/MGLAnnotationImage.m - ${PROJECT_SOURCE_DIR}/platform/macos/src/MGLAttributionButton.mm - ${PROJECT_SOURCE_DIR}/platform/macos/src/MGLCompassCell.m - ${PROJECT_SOURCE_DIR}/platform/macos/src/MGLMapView+IBAdditions.mm - ${PROJECT_SOURCE_DIR}/platform/macos/src/MGLMapView+Impl.mm - ${PROJECT_SOURCE_DIR}/platform/macos/src/MGLMapView+OpenGL.mm - ${PROJECT_SOURCE_DIR}/platform/macos/src/MGLMapView.mm - ${PROJECT_SOURCE_DIR}/platform/macos/src/MGLOpenGLLayer.mm - ${PROJECT_SOURCE_DIR}/platform/macos/src/NSColor+MGLAdditions.mm - ${PROJECT_SOURCE_DIR}/platform/macos/src/NSImage+MGLAdditions.mm - ${PROJECT_SOURCE_DIR}/platform/macos/src/NSProcessInfo+MGLAdditions.m ) -set_target_properties(mbgl-core PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES) - target_compile_options(mbgl-core PRIVATE -fobjc-arc) # FIXME: Should not be needed, but now needed by node because of the headless frontend. @@ -150,7 +86,6 @@ target_link_libraries( "-framework CoreGraphics" "-framework CoreLocation" "-framework SystemConfiguration" - OpenGL::GL mbgl-vendor-icu sqlite3 z From f82f7a11d3db91ebf4ef5ac7330b4af168971f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Thu, 27 Feb 2020 13:09:39 -0800 Subject: [PATCH 2/5] [ios, macos] Deleted iOS/macOS map SDK sources, resources, scripts --- .gitmodules | 6 - circle.yml | 6 - platform/darwin/app/LimeGreenStyleLayer.h | 5 - platform/darwin/app/LimeGreenStyleLayer.m | 58 - .../docs/guides/For Style Authors.md.ejs | 446 - .../guides/Migrating to Expressions.md.ejs | 212 - .../docs/guides/Predicates and Expressions.md | 950 - .../docs/guides/Tile URL Templates.md.ejs | 109 - .../docs/guides/Working with GeoJSON Data.md | 101 - .../docs/img/data-driven-styling/cast.png | Bin 49974 -> 0 bytes .../exponential-function-1.png | Bin 34835 -> 0 bytes .../exponential-function.png | Bin 34933 -> 0 bytes .../docs/img/data-driven-styling/identity.png | Bin 70278 -> 0 bytes .../docs/img/data-driven-styling/multiply.png | Bin 50375 -> 0 bytes platform/darwin/docs/theme | 1 - .../resources/Base.lproj/Foundation.strings | 306 - .../resources/ar.lproj/Foundation.stringsdict | 78 - .../resources/bg.lproj/Foundation.strings | 296 - .../resources/bg.lproj/Foundation.stringsdict | 54 - .../resources/ca.lproj/Foundation.strings | 297 - .../resources/ca.lproj/Foundation.stringsdict | 54 - .../resources/cs.lproj/Foundation.strings | 306 - .../resources/cs.lproj/Foundation.stringsdict | 54 - .../resources/da.lproj/Foundation.strings | 297 - .../resources/da.lproj/Foundation.stringsdict | 54 - .../resources/de.lproj/Foundation.strings | 297 - .../resources/de.lproj/Foundation.stringsdict | 54 - .../resources/en.lproj/Foundation.stringsdict | 54 - .../resources/es.lproj/Foundation.strings | 297 - .../resources/es.lproj/Foundation.stringsdict | 54 - .../resources/fr.lproj/Foundation.strings | 303 - .../resources/fr.lproj/Foundation.stringsdict | 54 - .../resources/gl.lproj/Foundation.strings | 306 - .../resources/gl.lproj/Foundation.stringsdict | 54 - .../resources/he.lproj/Foundation.strings | 297 - .../resources/hu.lproj/Foundation.stringsdict | 54 - .../resources/ja.lproj/Foundation.strings | 297 - .../resources/ko.lproj/Foundation.strings | 297 - .../resources/ko.lproj/Foundation.stringsdict | 48 - .../resources/lt.lproj/Foundation.strings | 297 - .../resources/lt.lproj/Foundation.stringsdict | 60 - .../resources/pl.lproj/Foundation.stringsdict | 66 - .../resources/pt-BR.lproj/Foundation.strings | 297 - .../pt-BR.lproj/Foundation.stringsdict | 54 - .../pt-PT.lproj/Foundation.stringsdict | 54 - .../resources/ru.lproj/Foundation.strings | 297 - .../resources/ru.lproj/Foundation.stringsdict | 66 - .../resources/sv.lproj/Foundation.strings | 297 - .../resources/sv.lproj/Foundation.stringsdict | 54 - .../resources/uk.lproj/Foundation.strings | 297 - .../resources/uk.lproj/Foundation.stringsdict | 60 - .../resources/vi.lproj/Foundation.strings | 297 - .../resources/vi.lproj/Foundation.stringsdict | 48 - .../zh-Hans.lproj/Foundation.strings | 297 - .../zh-Hant.lproj/Foundation.strings | 297 - .../darwin/scripts/check-public-symbols.js | 83 - .../darwin/scripts/generate-style-code.js | 925 - .../style-spec-cocoa-conventions-v8.json | 56 - .../scripts/style-spec-overrides-v8.json | 148 - platform/darwin/scripts/update-examples.js | 148 - platform/darwin/src/MGLAccountManager.h | 41 - platform/darwin/src/MGLAccountManager.m | 112 - .../darwin/src/MGLAccountManager_Private.h | 26 - platform/darwin/src/MGLAnnotation.h | 65 - platform/darwin/src/MGLAttributedExpression.h | 87 - platform/darwin/src/MGLAttributedExpression.m | 68 - platform/darwin/src/MGLAttributionInfo.h | 94 - platform/darwin/src/MGLAttributionInfo.mm | 279 - .../darwin/src/MGLAttributionInfo_Private.h | 65 - platform/darwin/src/MGLBackgroundStyleLayer.h | 149 - .../darwin/src/MGLBackgroundStyleLayer.mm | 146 - .../src/MGLBackgroundStyleLayer_Private.h | 17 - platform/darwin/src/MGLCircleStyleLayer.h | 540 - platform/darwin/src/MGLCircleStyleLayer.mm | 477 - .../darwin/src/MGLCircleStyleLayer_Private.h | 17 - .../darwin/src/MGLClockDirectionFormatter.h | 46 - .../darwin/src/MGLClockDirectionFormatter.m | 60 - platform/darwin/src/MGLCluster.h | 53 - .../darwin/src/MGLCompassDirectionFormatter.h | 43 - .../darwin/src/MGLCompassDirectionFormatter.m | 125 - platform/darwin/src/MGLComputedShapeSource.h | 167 - platform/darwin/src/MGLComputedShapeSource.mm | 249 - .../src/MGLComputedShapeSource_Private.h | 12 - platform/darwin/src/MGLConversion.h | 159 - platform/darwin/src/MGLCoordinateFormatter.h | 56 - platform/darwin/src/MGLCoordinateFormatter.m | 127 - platform/darwin/src/MGLDistanceFormatter.h | 26 - platform/darwin/src/MGLDistanceFormatter.m | 35 - platform/darwin/src/MGLFeature.h | 300 - platform/darwin/src/MGLFeature.mm | 542 - platform/darwin/src/MGLFeature_Private.h | 85 - .../darwin/src/MGLFillExtrusionStyleLayer.h | 388 - .../darwin/src/MGLFillExtrusionStyleLayer.mm | 363 - .../src/MGLFillExtrusionStyleLayer_Private.h | 17 - platform/darwin/src/MGLFillStyleLayer.h | 371 - platform/darwin/src/MGLFillStyleLayer.mm | 330 - .../darwin/src/MGLFillStyleLayer_Private.h | 17 - platform/darwin/src/MGLForegroundStyleLayer.h | 36 - .../darwin/src/MGLForegroundStyleLayer.mm | 26 - platform/darwin/src/MGLFoundation.h | 5 - platform/darwin/src/MGLFoundation.mm | 6 - platform/darwin/src/MGLFoundation_Private.h | 19 - platform/darwin/src/MGLGeometry.h | 243 - platform/darwin/src/MGLGeometry.mm | 122 - platform/darwin/src/MGLGeometry_Private.h | 152 - platform/darwin/src/MGLHeatmapStyleLayer.h | 220 - platform/darwin/src/MGLHeatmapStyleLayer.mm | 220 - .../darwin/src/MGLHeatmapStyleLayer_Private.h | 17 - platform/darwin/src/MGLHillshadeStyleLayer.h | 324 - platform/darwin/src/MGLHillshadeStyleLayer.mm | 245 - .../src/MGLHillshadeStyleLayer_Private.h | 17 - platform/darwin/src/MGLImageSource.h | 99 - platform/darwin/src/MGLImageSource.mm | 112 - platform/darwin/src/MGLLight.h | 242 - platform/darwin/src/MGLLight.h.ejs | 105 - platform/darwin/src/MGLLight.mm | 133 - platform/darwin/src/MGLLight.mm.ejs | 120 - platform/darwin/src/MGLLight_Private.h | 23 - platform/darwin/src/MGLLineStyleLayer.h | 671 - platform/darwin/src/MGLLineStyleLayer.mm | 568 - .../darwin/src/MGLLineStyleLayer_Private.h | 17 - platform/darwin/src/MGLLocationManager.h | 203 - platform/darwin/src/MGLLocationManager.m | 116 - .../darwin/src/MGLLocationManager_Private.h | 5 - platform/darwin/src/MGLLoggingConfiguration.h | 99 - .../darwin/src/MGLLoggingConfiguration.mm | 161 - .../src/MGLLoggingConfiguration_Private.h | 67 - platform/darwin/src/MGLMapCamera.h | 152 - platform/darwin/src/MGLMapCamera.mm | 196 - platform/darwin/src/MGLMapSnapshotter.h | 281 - platform/darwin/src/MGLMapSnapshotter.mm | 752 - .../darwin/src/MGLMapSnapshotter_Private.h | 14 - platform/darwin/src/MGLMultiPoint.h | 167 - platform/darwin/src/MGLMultiPoint.mm | 204 - platform/darwin/src/MGLMultiPoint_Private.h | 46 - platform/darwin/src/MGLNetworkConfiguration.h | 37 - platform/darwin/src/MGLNetworkConfiguration.m | 162 - .../src/MGLNetworkConfiguration_Private.h | 25 - .../darwin/src/MGLNetworkIntegrationManager.h | 8 - .../darwin/src/MGLNetworkIntegrationManager.m | 54 - platform/darwin/src/MGLOfflinePack.h | 203 - platform/darwin/src/MGLOfflinePack.mm | 282 - platform/darwin/src/MGLOfflinePack_Private.h | 23 - platform/darwin/src/MGLOfflineRegion.h | 37 - .../darwin/src/MGLOfflineRegion_Private.h | 24 - platform/darwin/src/MGLOfflineStorage.h | 474 - platform/darwin/src/MGLOfflineStorage.mm | 652 - .../darwin/src/MGLOfflineStorage_Private.h | 36 - platform/darwin/src/MGLOpenGLStyleLayer.h | 51 - platform/darwin/src/MGLOpenGLStyleLayer.mm | 206 - .../darwin/src/MGLOpenGLStyleLayer_Private.h | 15 - platform/darwin/src/MGLOverlay.h | 57 - platform/darwin/src/MGLPointAnnotation.h | 55 - platform/darwin/src/MGLPointAnnotation.mm | 72 - platform/darwin/src/MGLPointCollection.h | 65 - platform/darwin/src/MGLPointCollection.mm | 136 - .../darwin/src/MGLPointCollection_Private.h | 11 - platform/darwin/src/MGLPolygon.h | 129 - platform/darwin/src/MGLPolygon.mm | 240 - platform/darwin/src/MGLPolygon_Private.h | 11 - platform/darwin/src/MGLPolyline.h | 112 - platform/darwin/src/MGLPolyline.mm | 228 - platform/darwin/src/MGLPolyline_Private.h | 12 - platform/darwin/src/MGLRasterDEMSource.h | 50 - platform/darwin/src/MGLRasterDEMSource.mm | 16 - platform/darwin/src/MGLRasterStyleLayer.h | 347 - platform/darwin/src/MGLRasterStyleLayer.mm | 339 - .../darwin/src/MGLRasterStyleLayer_Private.h | 17 - platform/darwin/src/MGLRasterTileSource.h | 139 - platform/darwin/src/MGLRasterTileSource.mm | 85 - .../darwin/src/MGLRasterTileSource_Private.h | 23 - .../darwin/src/MGLRendererConfiguration.h | 54 - .../darwin/src/MGLRendererConfiguration.mm | 119 - platform/darwin/src/MGLRendererFrontend.h | 75 - platform/darwin/src/MGLSDKMetricsManager.h | 79 - platform/darwin/src/MGLSDKMetricsManager.m | 134 - .../darwin/src/MGLSDKMetricsManager_Private.h | 11 - platform/darwin/src/MGLShape.h | 115 - platform/darwin/src/MGLShape.mm | 121 - platform/darwin/src/MGLShapeCollection.h | 56 - platform/darwin/src/MGLShapeCollection.mm | 80 - platform/darwin/src/MGLShapeOfflineRegion.h | 86 - platform/darwin/src/MGLShapeOfflineRegion.mm | 150 - .../src/MGLShapeOfflineRegion_Private.h | 22 - platform/darwin/src/MGLShapeSource.h | 400 - platform/darwin/src/MGLShapeSource.mm | 355 - platform/darwin/src/MGLShapeSource_Private.h | 33 - platform/darwin/src/MGLShape_Private.h | 26 - platform/darwin/src/MGLSource.h | 56 - platform/darwin/src/MGLSource.mm | 120 - platform/darwin/src/MGLSource_Private.h | 89 - platform/darwin/src/MGLStyle.h | 542 - platform/darwin/src/MGLStyle.mm | 636 - platform/darwin/src/MGLStyleLayer.h | 66 - platform/darwin/src/MGLStyleLayer.h.ejs | 199 - platform/darwin/src/MGLStyleLayer.mm | 123 - platform/darwin/src/MGLStyleLayer.mm.ejs | 265 - platform/darwin/src/MGLStyleLayerManager.h | 47 - platform/darwin/src/MGLStyleLayerManager.mm | 147 - platform/darwin/src/MGLStyleLayer_Private.h | 104 - .../darwin/src/MGLStyleLayer_Private.h.ejs | 24 - platform/darwin/src/MGLStyleValue.h | 48 - platform/darwin/src/MGLStyleValue.mm | 59 - platform/darwin/src/MGLStyleValue_Private.h | 348 - platform/darwin/src/MGLStyle_Private.h | 40 - platform/darwin/src/MGLSymbolStyleLayer.h | 2488 - platform/darwin/src/MGLSymbolStyleLayer.mm | 1670 - .../darwin/src/MGLSymbolStyleLayer_Private.h | 17 - .../darwin/src/MGLTilePyramidOfflineRegion.h | 88 - .../darwin/src/MGLTilePyramidOfflineRegion.mm | 154 - .../src/MGLTilePyramidOfflineRegion_Private.h | 22 - platform/darwin/src/MGLTileSource.h | 206 - platform/darwin/src/MGLTileSource.mm | 152 - platform/darwin/src/MGLTileSource_Private.h | 38 - platform/darwin/src/MGLTypes.h | 140 - platform/darwin/src/MGLTypes.m | 5 - platform/darwin/src/MGLValueEvaluator.h | 49 - platform/darwin/src/MGLVectorStyleLayer.h | 58 - platform/darwin/src/MGLVectorStyleLayer.mm | 34 - platform/darwin/src/MGLVectorTileSource.h | 150 - platform/darwin/src/MGLVectorTileSource.mm | 154 - .../darwin/src/MGLVectorTileSource_Private.h | 16 - platform/darwin/src/NSArray+MGLAdditions.h | 27 - platform/darwin/src/NSArray+MGLAdditions.mm | 66 - platform/darwin/src/NSBundle+MGLAdditions.h | 45 - platform/darwin/src/NSBundle+MGLAdditions.m | 50 - platform/darwin/src/NSCoder+MGLAdditions.h | 16 - platform/darwin/src/NSCoder+MGLAdditions.mm | 26 - .../src/NSComparisonPredicate+MGLAdditions.h | 7 - .../src/NSComparisonPredicate+MGLAdditions.mm | 157 - .../src/NSCompoundPredicate+MGLAdditions.h | 7 - .../src/NSCompoundPredicate+MGLAdditions.mm | 50 - platform/darwin/src/NSDate+MGLAdditions.h | 17 - platform/darwin/src/NSDate+MGLAdditions.mm | 11 - .../darwin/src/NSDictionary+MGLAdditions.h | 13 - .../darwin/src/NSDictionary+MGLAdditions.mm | 24 - .../darwin/src/NSException+MGLAdditions.h | 4 - .../darwin/src/NSExpression+MGLAdditions.h | 237 - .../darwin/src/NSExpression+MGLAdditions.mm | 1605 - .../src/NSExpression+MGLPrivateAdditions.h | 84 - .../darwin/src/NSPredicate+MGLAdditions.h | 44 - .../darwin/src/NSPredicate+MGLAdditions.mm | 220 - .../src/NSPredicate+MGLPrivateAdditions.h | 25 - platform/darwin/src/NSString+MGLAdditions.h | 46 - platform/darwin/src/NSString+MGLAdditions.m | 82 - platform/darwin/src/NSURL+MGLAdditions.h | 15 - platform/darwin/src/NSURL+MGLAdditions.m | 14 - platform/darwin/src/NSValue+MGLAdditions.h | 148 - platform/darwin/src/NSValue+MGLAdditions.m | 104 - .../src/NSValue+MGLStyleAttributeAdditions.h | 14 - .../src/NSValue+MGLStyleAttributeAdditions.mm | 76 - .../darwin/test/MGLAttributionInfoTests.m | 137 - .../test/MGLBackgroundStyleLayerTests.mm | 197 - .../darwin/test/MGLCircleStyleLayerTests.mm | 804 - .../test/MGLClockDirectionFormatterTests.m | 72 - platform/darwin/test/MGLCodingTests.mm | 615 - .../test/MGLCompassDirectionFormatterTests.m | 88 - .../darwin/test/MGLComputedShapeSourceTests.m | 24 - .../darwin/test/MGLCoordinateFormatterTests.m | 48 - .../darwin/test/MGLDistanceFormatterTests.m | 30 - .../test/MGLDocumentationExampleTests.swift | 592 - .../test/MGLDocumentationGuideTests.swift | 270 - platform/darwin/test/MGLExpressionTests.mm | 1408 - platform/darwin/test/MGLFeatureTests.mm | 364 - .../test/MGLFillExtrusionStyleLayerTests.mm | 541 - .../darwin/test/MGLFillStyleLayerTests.mm | 487 - platform/darwin/test/MGLGeometryTests.mm | 211 - platform/darwin/test/MGLHeatmapColorTests.mm | 62 - .../darwin/test/MGLHeatmapStyleLayerTests.mm | 313 - .../test/MGLHillshadeStyleLayerTests.mm | 349 - platform/darwin/test/MGLImageSourceTests.m | 42 - platform/darwin/test/MGLLightTest.mm | 133 - platform/darwin/test/MGLLightTest.mm.ejs | 91 - .../darwin/test/MGLLineStyleLayerTests.mm | 904 - platform/darwin/test/MGLMapCameraTests.m | 106 - platform/darwin/test/MGLMapViewTests.m | 155 - .../darwin/test/MGLNSDateAdditionsTests.mm | 40 - .../darwin/test/MGLNSStringAdditionsTests.m | 89 - platform/darwin/test/MGLOfflinePackTests.mm | 58 - platform/darwin/test/MGLOfflineRegionTests.m | 71 - .../darwin/test/MGLOfflineStorageTests.mm | 671 - platform/darwin/test/MGLPredicateTests.mm | 426 - .../darwin/test/MGLRasterStyleLayerTests.mm | 430 - .../test/MGLRendererConfigurationTests.mm | 197 - platform/darwin/test/MGLResourceTests.mm | 85 - platform/darwin/test/MGLSDKTestHelpers.swift | 48 - platform/darwin/test/MGLShapeSourceTests.mm | 330 - platform/darwin/test/MGLSourceQueryTests.m | 25 - platform/darwin/test/MGLStyleLayerTests.h | 28 - platform/darwin/test/MGLStyleLayerTests.m | 125 - .../darwin/test/MGLStyleLayerTests.mm.ejs | 232 - platform/darwin/test/MGLStyleTests.mm | 500 - .../darwin/test/MGLSymbolStyleLayerTests.mm | 3204 - .../darwin/test/MGLTestAssertionHandler.h | 18 - .../darwin/test/MGLTestAssertionHandler.m | 77 - platform/darwin/test/MGLTestUtility.h | 27 - platform/darwin/test/MGLTileSetTests.mm | 149 - platform/darwin/test/MGLVersionNumber.m | 15 - .../darwin/test/Media.xcassets/Contents.json | 6 - .../RadarImage.imageset/Contents.json | 21 - .../RadarImage.imageset/radar.png | Bin 44094 -> 0 bytes .../Contents.json | 26 - .../TrackingLocationMask.png | Bin 407 -> 0 bytes .../TrackingLocationMask@2x.png | Bin 680 -> 0 bytes .../TrackingLocationMask@3x.png | Bin 903 -> 0 bytes platform/darwin/test/amsterdam.geojson | 2283 - platform/darwin/test/one-liner.json | 1 - platform/darwin/test/test-Bridging-Header.h | 4 - .../Integration Test Harness/AppDelegate.h | 8 - .../Integration Test Harness/AppDelegate.m | 14 - .../AppIcon.appiconset/Contents.json | 98 - .../Base.lproj/LaunchScreen.storyboard | 25 - .../ios/Integration Test Harness/Info.plist | 45 - platform/ios/Integration Test Harness/main.m | 8 - .../MGLAnnotationViewIntegrationTests.mm | 818 - .../MGLCameraTransitionFinishTests.mm | 109 - .../Camera Tests/MGLCameraTransitionTests.mm | 394 - platform/ios/Integration Tests/Info.plist | 22 - .../Integration Tests/MBGLIntegrationTests.mm | 252 - .../MGLMapViewIntegrationTest.h | 45 - .../MGLMapViewIntegrationTest.m | 200 - .../MGLMapViewPendingBlockTests.m | 366 - .../Integration Tests/MGLShapeSourceTests.m | 163 - .../Integration Tests/MGLSourceTests.swift | 45 - .../MGLStyleLayerIntegrationTests.m | 112 - .../MGLStyleURLIntegrationTest.m | 38 - .../MGLTestLocationManager.h | 10 - .../MGLTestLocationManager.m | 44 - .../MGLMapSnapshotterSwiftTests.swift | 77 - .../Snapshotter Tests/MGLMapSnapshotterTest.m | 537 - .../integration-Bridging-Header.h | 5 - .../Mapbox-iOS-SDK-snapshot-dynamic.podspec | 32 - platform/ios/Mapbox-iOS-SDK-stripped.podspec | 32 - platform/ios/Mapbox-iOS-SDK.podspec | 32 - platform/ios/Mapbox.playground/Contents.swift | 154 - .../Mapbox.playground/contents.xcplayground | 4 - platform/ios/WorkspaceSettings.xcsettings | 22 - .../AppIcon.appiconset/Contents.json | 112 - .../AppIcon.appiconset/Icon-1024.png | Bin 12225 -> 0 bytes .../AppIcon.appiconset/Icon-29@2x-1.png | Bin 1745 -> 0 bytes .../AppIcon.appiconset/Icon-29@2x.png | Bin 1745 -> 0 bytes .../AppIcon.appiconset/Icon-29@3x.png | Bin 2580 -> 0 bytes .../AppIcon.appiconset/Icon-40.png | Bin 1270 -> 0 bytes .../AppIcon.appiconset/Icon-40@2x-1.png | Bin 2351 -> 0 bytes .../AppIcon.appiconset/Icon-40@2x.png | Bin 2351 -> 0 bytes .../AppIcon.appiconset/Icon-60@2x.png | Bin 3497 -> 0 bytes .../AppIcon.appiconset/Icon-60@3x.png | Bin 5275 -> 0 bytes .../AppIcon.appiconset/Icon-76.png | Bin 2250 -> 0 bytes .../AppIcon.appiconset/Icon-76@2x.png | Bin 4425 -> 0 bytes .../AppIcon.appiconset/Icon-83.5@2x.png | Bin 4895 -> 0 bytes .../AppIcon.appiconset/Icon-Small.png | Bin 907 -> 0 bytes .../Icon-Spotlight-40@3x.png | Bin 3497 -> 0 bytes .../ios/app/Assets.xcassets/Contents.json | 6 - .../Contents.json | 26 - .../TrackingHeadingMask.png | Bin 250 -> 0 bytes .../TrackingHeadingMask@2x.png | Bin 467 -> 0 bytes .../TrackingHeadingMask@3x.png | Bin 672 -> 0 bytes .../Contents.json | 26 - .../TrackingLocationMask.png | Bin 407 -> 0 bytes .../TrackingLocationMask@2x.png | Bin 680 -> 0 bytes .../TrackingLocationMask@3x.png | Bin 903 -> 0 bytes .../Contents.json | 26 - .../TrackingLocationOffMask.png | Bin 493 -> 0 bytes .../TrackingLocationOffMask@2x.png | Bin 973 -> 0 bytes .../TrackingLocationOffMask@3x.png | Bin 1407 -> 0 bytes .../settings.imageset/Contents.json | 12 - .../settings.imageset/settings.pdf | Bin 9177 -> 0 bytes .../ios/app/Base.lproj/Localizable.strings | 0 platform/ios/app/Info.plist | 68 - platform/ios/app/LaunchScreen.storyboard | 31 - platform/ios/app/MBXAnnotationView.h | 4 - platform/ios/app/MBXAnnotationView.m | 52 - platform/ios/app/MBXAppDelegate.h | 7 - platform/ios/app/MBXAppDelegate.m | 48 - platform/ios/app/MBXCustomCalloutView.h | 13 - platform/ios/app/MBXCustomCalloutView.m | 110 - .../ios/app/MBXCustomLocationViewController.h | 5 - .../ios/app/MBXCustomLocationViewController.m | 175 - .../ios/app/MBXEmbeddedMapViewController.h | 5 - .../ios/app/MBXEmbeddedMapViewController.m | 90 - platform/ios/app/MBXFrameTimeGraphView.h | 11 - platform/ios/app/MBXFrameTimeGraphView.m | 145 - .../app/MBXOfflinePacksTableViewController.h | 9 - .../app/MBXOfflinePacksTableViewController.m | 284 - platform/ios/app/MBXOrnamentsViewController.h | 5 - platform/ios/app/MBXOrnamentsViewController.m | 96 - platform/ios/app/MBXSnapshotsViewController.h | 5 - platform/ios/app/MBXSnapshotsViewController.m | 67 - platform/ios/app/MBXState.h | 33 - platform/ios/app/MBXState.m | 80 - platform/ios/app/MBXStateManager.h | 19 - platform/ios/app/MBXStateManager.m | 43 - .../ios/app/MBXUserLocationAnnotationView.h | 5 - .../ios/app/MBXUserLocationAnnotationView.m | 165 - platform/ios/app/MBXViewController.h | 5 - platform/ios/app/MBXViewController.m | 2369 - platform/ios/app/Main.storyboard | 473 - .../Settings.bundle/Base.lproj/Root.strings | 3 - platform/ios/app/Settings.bundle/Root.plist | 33 - .../app/Settings.bundle/ar.lproj/Root.strings | 3 - .../app/Settings.bundle/bg.lproj/Root.strings | 3 - .../app/Settings.bundle/ca.lproj/Root.strings | 3 - .../app/Settings.bundle/cs.lproj/Root.strings | 3 - .../app/Settings.bundle/da.lproj/Root.strings | 3 - .../app/Settings.bundle/de.lproj/Root.strings | 3 - .../app/Settings.bundle/en.lproj/Root.strings | 3 - .../app/Settings.bundle/es.lproj/Root.strings | 3 - .../app/Settings.bundle/fi.lproj/Root.strings | 3 - .../app/Settings.bundle/fr.lproj/Root.strings | 3 - .../app/Settings.bundle/gl.lproj/Root.strings | Bin 488 -> 0 bytes .../app/Settings.bundle/he.lproj/Root.strings | 3 - .../app/Settings.bundle/hu.lproj/Root.strings | 3 - .../app/Settings.bundle/it.lproj/Root.strings | Bin 502 -> 0 bytes .../app/Settings.bundle/ko.lproj/Root.strings | 3 - .../app/Settings.bundle/lt.lproj/Root.strings | 3 - .../app/Settings.bundle/nl.lproj/Root.strings | 3 - .../app/Settings.bundle/pl.lproj/Root.strings | 3 - .../Settings.bundle/pt-BR.lproj/Root.strings | 3 - .../Settings.bundle/pt-PT.lproj/Root.strings | 3 - .../app/Settings.bundle/ru.lproj/Root.strings | 3 - .../app/Settings.bundle/sv.lproj/Root.strings | 3 - .../app/Settings.bundle/uk.lproj/Root.strings | 3 - .../app/Settings.bundle/vi.lproj/Root.strings | 3 - .../zh-Hans.lproj/Root.strings | 3 - .../zh-Hant.lproj/Root.strings | 3 - platform/ios/app/ar.lproj/Localizable.strings | 0 platform/ios/app/bg.lproj/Localizable.strings | 0 platform/ios/app/ca.lproj/Localizable.strings | 0 platform/ios/app/cs.lproj/Localizable.strings | 0 platform/ios/app/da.lproj/Localizable.strings | 0 platform/ios/app/de.lproj/Localizable.strings | 0 platform/ios/app/es.lproj/Localizable.strings | 0 platform/ios/app/fi.lproj/Localizable.strings | 0 platform/ios/app/fill_filter_style.json | 10976 -- platform/ios/app/fr.lproj/Localizable.strings | 0 platform/ios/app/gl.lproj/Localizable.strings | 0 platform/ios/app/he.lproj/Localizable.strings | 0 platform/ios/app/hu.lproj/Localizable.strings | 0 platform/ios/app/insert_access_token.sh | 17 - platform/ios/app/ja.lproj/Localizable.strings | 0 platform/ios/app/ko.lproj/Localizable.strings | 0 platform/ios/app/line_filter_style.json | 8746 - platform/ios/app/lt.lproj/Localizable.strings | 0 platform/ios/app/main.m | 10 - platform/ios/app/missing_icon.json | 40 - platform/ios/app/nl.lproj/Localizable.strings | 0 platform/ios/app/numeric_filter_style.json | 8734 - platform/ios/app/pl.lproj/Localizable.strings | 0 platform/ios/app/points.geojson | 136346 --------------- platform/ios/app/polyline.geojson | 14187 -- .../ios/app/pt-BR.lproj/Localizable.strings | 0 .../ios/app/pt-PT.lproj/Localizable.strings | 0 platform/ios/app/ru.lproj/Localizable.strings | 0 platform/ios/app/simple_route.json | 184 - platform/ios/app/sv.lproj/Localizable.strings | 0 platform/ios/app/threestates.geojson | 1612 - platform/ios/app/uk.lproj/Localizable.strings | 0 platform/ios/app/vi.lproj/Localizable.strings | 0 .../ios/app/zh-Hans.lproj/Localizable.strings | 0 .../ios/app/zh-Hant.lproj/Localizable.strings | 0 .../AppIcon.appiconset/Contents.json | 98 - .../AppIcon.appiconset/Icon-1.png | Bin 2296 -> 0 bytes .../AppIcon.appiconset/Icon-2.png | Bin 5596 -> 0 bytes .../AppIcon.appiconset/Icon-3.png | Bin 1640 -> 0 bytes .../AppIcon.appiconset/Icon-4.png | Bin 5073 -> 0 bytes .../AppIcon.appiconset/Icon-40.png | Bin 1295 -> 0 bytes .../AppIcon.appiconset/Icon-40@2x.png | Bin 2971 -> 0 bytes .../AppIcon.appiconset/Icon-40@3x.png | Bin 5936 -> 0 bytes .../AppIcon.appiconset/Icon-76.png | Bin 2841 -> 0 bytes .../AppIcon.appiconset/Icon-76@2x.png | Bin 8633 -> 0 bytes .../AppIcon.appiconset/Icon-Small.png | Bin 1009 -> 0 bytes .../AppIcon.appiconset/Icon-Small@2x.png | Bin 2046 -> 0 bytes .../AppIcon.appiconset/Icon-Small@3x.png | Bin 3371 -> 0 bytes .../AppIcon.appiconset/Icon.png | Bin 3559 -> 0 bytes .../AppIcon.appiconset/iTunesArtwork.png | Bin 113442 -> 0 bytes .../AppIcon.appiconset/iTunesArtwork@2x.png | Bin 399202 -> 0 bytes .../Base.lproj/LaunchScreen.storyboard | 27 - platform/ios/benchmark/Info.plist | 53 - platform/ios/benchmark/MBXBenchAppDelegate.h | 7 - platform/ios/benchmark/MBXBenchAppDelegate.m | 16 - .../ios/benchmark/MBXBenchViewController.h | 5 - .../ios/benchmark/MBXBenchViewController.mm | 151 - .../ios/benchmark/assets/glyphs/download.sh | 29 - .../assets/sprites/mapbox-streets.json | 2034 - .../assets/sprites/mapbox-streets.png | Bin 81643 -> 0 bytes .../assets/sprites/mapbox-streets@2x.json | 2034 - .../assets/sprites/mapbox-streets@2x.png | Bin 192103 -> 0 bytes .../benchmark/assets/styles/streets-v8.json | 8935 - .../ios/benchmark/assets/tiles/download.sh | 96 - ...x-terrain-v2,mapbox.mapbox-streets-v6.json | 1 - platform/ios/benchmark/locations.cpp | 18 - platform/ios/benchmark/locations.hpp | 20 - platform/ios/benchmark/main.m | 10 - platform/ios/docs/guides/For Style Authors.md | 434 - .../ios/docs/guides/Gesture Recognizers.md | 38 - platform/ios/docs/guides/Info.plist Keys.md | 42 - .../docs/guides/Migrating to Expressions.md | 266 - .../ios/docs/guides/Tile URL Templates.md | 99 - platform/ios/docs/img/screenshot.png | Bin 327733 -> 0 bytes .../img/user-interaction/RotateSydney.gif | Bin 693038 -> 0 bytes .../docs/img/user-interaction/quickzoom.gif | Bin 793787 -> 0 bytes platform/ios/docs/pod-README.md | 99 - platform/ios/framework/Info-static.plist | 26 - platform/ios/framework/Info.plist | 30 - platform/ios/framework/Mapbox-static.h | 5 - platform/ios/framework/modulemap | 8 - platform/ios/framework/strip-frameworks.sh | 73 - platform/ios/ios.cmake | 1 - platform/ios/ios.xcodeproj/project.pbxproj | 4768 - .../contents.xcworkspacedata | 7 - .../xcshareddata/xcschemes/CI.xcscheme | 148 - .../Integration Test Harness.xcscheme | 101 - .../xcshareddata/xcschemes/bench.xcscheme | 91 - .../xcschemes/dynamic+static.xcscheme | 127 - .../xcshareddata/xcschemes/dynamic.xcscheme | 112 - .../xcshareddata/xcschemes/iosapp.xcscheme | 91 - .../xcshareddata/xcschemes/static.xcscheme | 89 - .../ios.xcworkspace/contents.xcworkspacedata | 10 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcdebugger/Breakpoints_v2.xcbkptlist | 25 - platform/ios/jazzy.yml | 140 - platform/ios/originals/compass.sketch | Bin 4881 -> 0 bytes platform/ios/originals/screenshot.sketch | Bin 1310720 -> 0 bytes .../resources/Base.lproj/Localizable.strings | 111 - .../Compass.imageset/Contents.json | 12 - .../Compass.imageset/compass.pdf | Bin 4574 -> 0 bytes .../resources/Images.xcassets/Contents.json | 6 - .../default_marker.imageset/Contents.json | 12 - .../default_marker.pdf | Bin 4354 -> 0 bytes .../mapbox.imageset/Contents.json | 12 - .../mapbox.imageset/mapbox.pdf | Bin 8823 -> 0 bytes .../mapbox_helmet.imageset/Contents.json | 12 - .../mapbox_helmet.imageset/mapbox_helmet.pdf | Bin 65112 -> 0 bytes platform/ios/resources/README | 5 - .../ar.lproj/Localizable.stringsdict | 78 - .../resources/bg.lproj/Localizable.strings | 114 - .../bg.lproj/Localizable.stringsdict | 54 - .../resources/ca.lproj/Localizable.strings | 93 - .../ca.lproj/Localizable.stringsdict | 34 - .../resources/cs.lproj/Localizable.strings | 111 - .../cs.lproj/Localizable.stringsdict | 54 - .../resources/da.lproj/Localizable.strings | 117 - .../da.lproj/Localizable.stringsdict | 54 - .../resources/de.lproj/Localizable.strings | 93 - .../de.lproj/Localizable.stringsdict | 34 - .../en.lproj/Localizable.stringsdict | 54 - .../resources/es.lproj/Localizable.strings | 117 - .../es.lproj/Localizable.stringsdict | 54 - .../resources/fr.lproj/Localizable.strings | 111 - .../fr.lproj/Localizable.stringsdict | 54 - .../resources/gl.lproj/Localizable.strings | 111 - .../gl.lproj/Localizable.stringsdict | 54 - .../resources/he.lproj/Localizable.strings | 117 - .../resources/hu.lproj/Localizable.strings | 93 - .../hu.lproj/Localizable.stringsdict | 54 - .../resources/ja.lproj/Localizable.strings | 78 - .../resources/ko.lproj/Localizable.strings | 117 - .../ko.lproj/Localizable.stringsdict | 48 - .../resources/lt.lproj/Localizable.strings | 93 - .../lt.lproj/Localizable.stringsdict | 38 - .../resources/pt-BR.lproj/Localizable.strings | 93 - .../pt-BR.lproj/Localizable.stringsdict | 34 - .../resources/pt-PT.lproj/Localizable.strings | 117 - .../pt-PT.lproj/Localizable.stringsdict | 54 - .../resources/ru.lproj/Localizable.strings | 117 - .../ru.lproj/Localizable.stringsdict | 66 - .../resources/sv.lproj/Localizable.strings | 117 - .../sv.lproj/Localizable.stringsdict | 54 - .../resources/uk.lproj/Localizable.strings | 117 - .../uk.lproj/Localizable.stringsdict | 60 - .../resources/vi.lproj/Localizable.strings | 117 - .../vi.lproj/Localizable.stringsdict | 48 - .../zh-Hans.lproj/Localizable.strings | 93 - .../zh-Hant.lproj/Localizable.strings | 93 - .../zh-Hant.lproj/Localizable.stringsdict | 30 - platform/ios/scripts/check-events-symbols.sh | 37 - platform/ios/scripts/deploy-packages.sh | 112 - platform/ios/scripts/deploy-snapshot.sh | 17 - platform/ios/scripts/deploy-to-cocoapods.sh | 44 - platform/ios/scripts/document.sh | 50 - .../scripts/install-packaging-dependencies.sh | 64 - platform/ios/scripts/ios-code-coverage.sh | 31 - platform/ios/scripts/lint-podspecs.js | 79 - platform/ios/scripts/metrics.sh | 26 - platform/ios/scripts/package.sh | 249 - platform/ios/scripts/publish.sh | 79 - .../ios/scripts/release-notes-github.md.ejs | 9 - .../ios/scripts/release-notes-jazzy.md.ejs | 23 - platform/ios/scripts/release-notes.js | 103 - .../ios/scripts/validate-framework-zip.sh | 131 - platform/ios/src/MGLAnnotationContainerView.h | 17 - platform/ios/src/MGLAnnotationContainerView.m | 52 - .../src/MGLAnnotationContainerView_Private.h | 14 - platform/ios/src/MGLAnnotationImage.h | 62 - platform/ios/src/MGLAnnotationImage.m | 77 - platform/ios/src/MGLAnnotationImage_Private.h | 21 - platform/ios/src/MGLAnnotationView.h | 286 - platform/ios/src/MGLAnnotationView.mm | 387 - platform/ios/src/MGLAnnotationView_Private.h | 15 - platform/ios/src/MGLCalloutView.h | 140 - platform/ios/src/MGLCameraChangeReason.h | 65 - platform/ios/src/MGLCompactCalloutView.h | 14 - platform/ios/src/MGLCompactCalloutView.m | 39 - platform/ios/src/MGLCompassButton.h | 22 - platform/ios/src/MGLCompassButton.mm | 135 - platform/ios/src/MGLCompassButton_Private.h | 19 - .../src/MGLFaux3DUserLocationAnnotationView.h | 15 - .../src/MGLFaux3DUserLocationAnnotationView.m | 469 - platform/ios/src/MGLMapAccessibilityElement.h | 54 - .../ios/src/MGLMapAccessibilityElement.mm | 195 - platform/ios/src/MGLMapView+IBAdditions.h | 51 - platform/ios/src/MGLMapView+Impl.h | 77 - platform/ios/src/MGLMapView+Impl.mm | 114 - platform/ios/src/MGLMapView+OpenGL.h | 60 - platform/ios/src/MGLMapView+OpenGL.mm | 277 - platform/ios/src/MGLMapView.h | 1968 - platform/ios/src/MGLMapView.mm | 7010 - platform/ios/src/MGLMapViewDelegate.h | 775 - platform/ios/src/MGLMapView_Experimental.h | 32 - platform/ios/src/MGLMapView_Private.h | 74 - platform/ios/src/MGLMapboxEvents.h | 21 - platform/ios/src/MGLMapboxEvents.m | 200 - platform/ios/src/MGLSDKUpdateChecker.h | 13 - platform/ios/src/MGLSDKUpdateChecker.mm | 37 - platform/ios/src/MGLScaleBar.h | 9 - platform/ios/src/MGLScaleBar.mm | 556 - platform/ios/src/MGLTelemetryConfig.h | 18 - platform/ios/src/MGLTelemetryConfig.m | 35 - platform/ios/src/MGLUserLocation.h | 57 - platform/ios/src/MGLUserLocation.m | 124 - .../ios/src/MGLUserLocationAnnotationView.h | 64 - .../ios/src/MGLUserLocationAnnotationView.m | 100 - .../MGLUserLocationAnnotationView_Private.h | 15 - .../src/MGLUserLocationHeadingArrowLayer.h | 11 - .../src/MGLUserLocationHeadingArrowLayer.m | 59 - .../ios/src/MGLUserLocationHeadingBeamLayer.h | 11 - .../ios/src/MGLUserLocationHeadingBeamLayer.m | 104 - .../ios/src/MGLUserLocationHeadingIndicator.h | 10 - platform/ios/src/MGLUserLocation_Private.h | 19 - platform/ios/src/Mapbox-Prefix.pch | 1 - platform/ios/src/Mapbox.h | 77 - platform/ios/src/NSOrthography+MGLAdditions.h | 18 - platform/ios/src/NSOrthography+MGLAdditions.m | 37 - platform/ios/src/UIColor+MGLAdditions.h | 22 - platform/ios/src/UIColor+MGLAdditions.mm | 86 - platform/ios/src/UIDevice+MGLAdditions.h | 7 - platform/ios/src/UIDevice+MGLAdditions.m | 53 - platform/ios/src/UIImage+MGLAdditions.h | 25 - platform/ios/src/UIImage+MGLAdditions.mm | 64 - platform/ios/src/UIView+MGLAdditions.h | 19 - platform/ios/src/UIView+MGLAdditions.m | 69 - .../ios/src/UIViewController+MGLAdditions.h | 11 - .../ios/src/UIViewController+MGLAdditions.m | 22 - platform/ios/test/Info.plist | 24 - platform/ios/test/MGLAccountManagerTests.m | 25 - .../MGLAnnotationViewIntegrationTests.swift | 23 - platform/ios/test/MGLAnnotationViewTests.m | 273 - .../test/MGLMapAccessibilityElementTests.m | 87 - .../ios/test/MGLMapViewCompassViewTests.mm | 98 - .../ios/test/MGLMapViewContentInsetTests.m | 177 - .../MGLMapViewDelegateIntegrationTests.swift | 103 - platform/ios/test/MGLMapViewDirectionTests.mm | 126 - .../test/MGLMapViewGestureRecognizerTests.mm | 280 - platform/ios/test/MGLMapViewLayoutTests.m | 317 - platform/ios/test/MGLMapViewPitchTests.m | 190 - platform/ios/test/MGLMapViewScaleBarTests.m | 70 - platform/ios/test/MGLMapViewZoomTests.mm | 192 - platform/ios/test/MGLMockGestureRecognizers.h | 29 - platform/ios/test/MGLMockGestureRecognizers.m | 55 - .../ios/test/MGLNSOrthographyAdditionsTests.m | 19 - .../ios/test/MGLNetworkConfigurationTests.m | 43 - .../ios/vendor/SMCalloutView/SMCalloutView.h | 217 - .../ios/vendor/SMCalloutView/SMCalloutView.m | 939 - .../vendor/mapbox-accounts-ios/MBXSKUToken.h | 36 - .../mapbox-accounts-ios/libmbxaccounts.a | Bin 97472 -> 0 bytes platform/ios/vendor/mapbox-events-ios | 1 - platform/macos/ExportOptions.plist | 10 - .../macos/Mapbox-macOS-SDK-symbols.podspec | 30 - platform/macos/Mapbox-macOS-SDK.podspec | 30 - platform/macos/WorkspaceSettings.xcsettings | 22 - platform/macos/app/AppDelegate.h | 26 - platform/macos/app/AppDelegate.m | 332 - .../AppIcon.appiconset/AppIcon128x128.png | Bin 8183 -> 0 bytes .../AppIcon.appiconset/AppIcon128x128@2x.png | Bin 17649 -> 0 bytes .../AppIcon.appiconset/AppIcon16x16.png | Bin 917 -> 0 bytes .../AppIcon.appiconset/AppIcon16x16@2x.png | Bin 2009 -> 0 bytes .../AppIcon.appiconset/AppIcon256x256.png | Bin 17649 -> 0 bytes .../AppIcon.appiconset/AppIcon256x256@2x.png | Bin 38577 -> 0 bytes .../AppIcon.appiconset/AppIcon32x32.png | Bin 1730 -> 0 bytes .../AppIcon.appiconset/AppIcon32x32@2x.png | Bin 3905 -> 0 bytes .../AppIcon.appiconset/AppIcon512x512.png | Bin 38577 -> 0 bytes .../AppIcon.appiconset/AppIcon512x512@2x.png | Bin 85668 -> 0 bytes .../AppIcon.appiconset/Contents.json | 68 - .../macos/app/Assets.xcassets/Contents.json | 6 - .../app/Assets.xcassets/Layers/Contents.json | 6 - .../Layers/background.imageset/Contents.json | 20 - .../Layers/background.imageset/background.pdf | Bin 1312 -> 0 bytes .../Layers/circle.imageset/Contents.json | 15 - .../Layers/circle.imageset/circle.pdf | Bin 1026 -> 0 bytes .../fill-extrusion.imageset/Contents.json | 15 - .../fill-extrusion.pdf | Bin 1284 -> 0 bytes .../Layers/fill.imageset/Contents.json | 15 - .../Layers/fill.imageset/fill.pdf | Bin 1046 -> 0 bytes .../Layers/heatmap.imageset/Contents.json | 20 - .../Layers/heatmap.imageset/heatmap.pdf | Bin 1262 -> 0 bytes .../Layers/hillshade.imageset/Contents.json | 20 - .../Layers/hillshade.imageset/hillshade.pdf | Bin 1070 -> 0 bytes .../Layers/symbol.imageset/Contents.json | 15 - .../Layers/symbol.imageset/symbol.pdf | Bin 1039 -> 0 bytes .../app/Assets.xcassets/Radar/Contents.json | 6 - .../Radar/southeast_0.imageset/Contents.json | 21 - .../southeast_radar_0.png | Bin 172489 -> 0 bytes .../Radar/southeast_1.imageset/Contents.json | 21 - .../southeast_radar_1.png | Bin 177163 -> 0 bytes .../Radar/southeast_2.imageset/Contents.json | 21 - .../southeast_radar_2.png | Bin 179236 -> 0 bytes .../Radar/southeast_3.imageset/Contents.json | 21 - .../southeast_radar_3.png | Bin 177074 -> 0 bytes .../macos/app/Base.lproj/Localizable.strings | 0 platform/macos/app/Base.lproj/MainMenu.xib | 982 - platform/macos/app/Base.lproj/MapDocument.xib | 497 - platform/macos/app/Credits.rtf | 9 - platform/macos/app/DroppedPinAnnotation.h | 15 - platform/macos/app/DroppedPinAnnotation.m | 73 - platform/macos/app/Info.plist | 58 - .../app/LocationCoordinate2DTransformer.h | 5 - .../app/LocationCoordinate2DTransformer.m | 31 - platform/macos/app/MGLStyle+MBXAdditions.h | 7 - platform/macos/app/MGLStyle+MBXAdditions.m | 42 - platform/macos/app/MapDocument.h | 14 - platform/macos/app/MapDocument.m | 1507 - .../app/OfflinePackNameValueTransformer.h | 5 - .../app/OfflinePackNameValueTransformer.m | 33 - .../macos/app/StyleLayerIconTransformer.h | 5 - .../macos/app/StyleLayerIconTransformer.m | 47 - platform/macos/app/TimeIntervalTransformer.h | 5 - platform/macos/app/TimeIntervalTransformer.m | 53 - .../macos/app/ar.lproj/Localizable.strings | 0 .../macos/app/bg.lproj/Localizable.strings | 0 .../macos/app/ca.lproj/Localizable.strings | 0 .../macos/app/cs.lproj/Localizable.strings | 0 .../macos/app/da.lproj/Localizable.strings | 0 .../macos/app/de.lproj/Localizable.strings | 0 .../macos/app/es.lproj/Localizable.strings | 0 .../macos/app/fi.lproj/Localizable.strings | 0 .../macos/app/fr.lproj/Localizable.strings | 0 .../macos/app/gl.lproj/Localizable.strings | 0 .../macos/app/he.lproj/Localizable.strings | 0 platform/macos/app/heatmap.json | 809 - .../macos/app/hu.lproj/Localizable.strings | 0 .../macos/app/ja.lproj/Localizable.strings | 0 .../macos/app/ko.lproj/Localizable.strings | 0 .../macos/app/lt.lproj/Localizable.strings | 0 platform/macos/app/main.m | 5 - .../macos/app/nl.lproj/Localizable.strings | 0 .../macos/app/pl.lproj/Localizable.strings | 0 .../macos/app/pt-BR.lproj/Localizable.strings | 0 .../macos/app/pt-PT.lproj/Localizable.strings | 0 platform/macos/app/resources/background.svg | 90 - platform/macos/app/resources/circle.svg | 67 - .../macos/app/resources/fill-extrusion.svg | 125 - platform/macos/app/resources/fill.svg | 68 - platform/macos/app/resources/heatmap.svg | 72 - platform/macos/app/resources/hillshade.svg | 87 - platform/macos/app/resources/symbol.svg | 66 - .../macos/app/ru.lproj/Localizable.strings | 0 .../macos/app/sv.lproj/Localizable.strings | 0 .../macos/app/uk.lproj/Localizable.strings | 0 .../macos/app/vi.lproj/Localizable.strings | 0 platform/macos/app/wms.json | 21 - .../app/zh-Hans.lproj/Localizable.strings | 0 .../app/zh-Hant.lproj/Localizable.strings | 0 platform/macos/docs/doc-README.md | 9 - .../macos/docs/guides/For Style Authors.md | 427 - platform/macos/docs/guides/Info.plist Keys.md | 35 - .../docs/guides/Migrating to Expressions.md | 267 - .../macos/docs/guides/Tile URL Templates.md | 98 - platform/macos/docs/img/screenshot.jpg | Bin 411181 -> 0 bytes platform/macos/docs/pod-README.md | 98 - platform/macos/jazzy.yml | 118 - platform/macos/macos.cmake | 1 - .../macos/macos.xcodeproj/project.pbxproj | 2332 - .../contents.xcworkspacedata | 7 - .../xcshareddata/xcschemes/CI.xcscheme | 154 - .../xcshareddata/xcschemes/dynamic.xcscheme | 111 - .../xcshareddata/xcschemes/macosapp.xcscheme | 99 - .../contents.xcworkspacedata | 10 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcdebugger/Breakpoints_v2.xcbkptlist | 25 - platform/macos/scripts/deploy-packages.sh | 144 - platform/macos/scripts/document.sh | 52 - platform/macos/scripts/metrics.sh | 7 - platform/macos/scripts/package.sh | 130 - .../macos/sdk/Base.lproj/Localizable.strings | 27 - .../sdk/Base.lproj/MGLAnnotationCallout.xib | 69 - platform/macos/sdk/Info.plist | 28 - .../macos/sdk/ar.lproj/Localizable.strings | 27 - .../macos/sdk/bg.lproj/Localizable.strings | 27 - .../macos/sdk/ca.lproj/Localizable.strings | 27 - .../macos/sdk/cs.lproj/Localizable.strings | 27 - .../macos/sdk/da.lproj/Localizable.strings | 27 - .../macos/sdk/de.lproj/Localizable.strings | 15 - platform/macos/sdk/default_marker.pdf | Bin 4354 -> 0 bytes .../macos/sdk/es.lproj/Localizable.strings | 27 - .../macos/sdk/fi.lproj/Localizable.strings | 15 - .../macos/sdk/fr.lproj/Localizable.strings | 27 - .../macos/sdk/gl.lproj/Localizable.strings | 27 - .../macos/sdk/he.lproj/Localizable.strings | 27 - .../macos/sdk/hu.lproj/Localizable.strings | 27 - .../macos/sdk/ja.lproj/Localizable.strings | 15 - .../macos/sdk/lt.lproj/Localizable.strings | 27 - platform/macos/sdk/mapbox.pdf | Bin 26280 -> 0 bytes platform/macos/sdk/mapbox_helmet.pdf | Bin 65112 -> 0 bytes .../macos/sdk/nl.lproj/Localizable.strings | 15 - .../macos/sdk/pl.lproj/Localizable.strings | 15 - .../macos/sdk/pt-BR.lproj/Localizable.strings | 27 - .../macos/sdk/pt-PT.lproj/Localizable.strings | 27 - .../macos/sdk/ru.lproj/Localizable.strings | 27 - .../macos/sdk/sv.lproj/Localizable.strings | 27 - .../macos/sdk/uk.lproj/Localizable.strings | 27 - .../macos/sdk/vi.lproj/Localizable.strings | 27 - .../sdk/zh-Hans.lproj/Localizable.strings | 15 - .../sdk/zh-Hant.lproj/Localizable.strings | 27 - platform/macos/src/MGLAnnotationImage.h | 65 - platform/macos/src/MGLAnnotationImage.m | 63 - .../macos/src/MGLAnnotationImage_Private.h | 8 - platform/macos/src/MGLAttributionButton.h | 25 - platform/macos/src/MGLAttributionButton.mm | 55 - platform/macos/src/MGLCompassCell.h | 5 - platform/macos/src/MGLCompassCell.m | 34 - platform/macos/src/MGLMapView+IBAdditions.h | 68 - platform/macos/src/MGLMapView+IBAdditions.mm | 120 - platform/macos/src/MGLMapView+Impl.h | 44 - platform/macos/src/MGLMapView+Impl.mm | 101 - platform/macos/src/MGLMapView+OpenGL.h | 45 - platform/macos/src/MGLMapView+OpenGL.mm | 89 - platform/macos/src/MGLMapView.h | 1247 - platform/macos/src/MGLMapView.mm | 3081 - platform/macos/src/MGLMapViewDelegate.h | 352 - platform/macos/src/MGLMapView_Private.h | 62 - platform/macos/src/MGLOpenGLLayer.h | 10 - platform/macos/src/MGLOpenGLLayer.mm | 58 - platform/macos/src/Mapbox.h | 71 - platform/macos/src/NSColor+MGLAdditions.h | 28 - platform/macos/src/NSColor+MGLAdditions.mm | 124 - platform/macos/src/NSImage+MGLAdditions.h | 19 - platform/macos/src/NSImage+MGLAdditions.mm | 49 - .../macos/src/NSProcessInfo+MGLAdditions.h | 11 - .../macos/src/NSProcessInfo+MGLAdditions.m | 10 - platform/macos/test/Info.plist | 24 - platform/macos/test/MGLAnnotationTests.m | 52 - .../macos/test/MGLAttributionButtonTests.m | 31 - .../MGLMapViewDelegateIntegrationTests.swift | 63 - 853 files changed, 305833 deletions(-) delete mode 100644 platform/darwin/app/LimeGreenStyleLayer.h delete mode 100644 platform/darwin/app/LimeGreenStyleLayer.m delete mode 100644 platform/darwin/docs/guides/For Style Authors.md.ejs delete mode 100644 platform/darwin/docs/guides/Migrating to Expressions.md.ejs delete mode 100644 platform/darwin/docs/guides/Predicates and Expressions.md delete mode 100644 platform/darwin/docs/guides/Tile URL Templates.md.ejs delete mode 100644 platform/darwin/docs/guides/Working with GeoJSON Data.md delete mode 100644 platform/darwin/docs/img/data-driven-styling/cast.png delete mode 100644 platform/darwin/docs/img/data-driven-styling/exponential-function-1.png delete mode 100644 platform/darwin/docs/img/data-driven-styling/exponential-function.png delete mode 100644 platform/darwin/docs/img/data-driven-styling/identity.png delete mode 100644 platform/darwin/docs/img/data-driven-styling/multiply.png delete mode 160000 platform/darwin/docs/theme delete mode 100644 platform/darwin/resources/Base.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/ar.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/bg.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/bg.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/ca.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/ca.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/cs.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/cs.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/da.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/da.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/de.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/de.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/en.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/es.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/es.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/fr.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/fr.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/gl.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/gl.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/he.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/hu.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/ja.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/ko.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/ko.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/lt.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/lt.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/pl.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/pt-BR.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/pt-BR.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/pt-PT.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/ru.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/ru.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/sv.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/sv.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/uk.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/uk.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/vi.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/vi.lproj/Foundation.stringsdict delete mode 100644 platform/darwin/resources/zh-Hans.lproj/Foundation.strings delete mode 100644 platform/darwin/resources/zh-Hant.lproj/Foundation.strings delete mode 100755 platform/darwin/scripts/check-public-symbols.js delete mode 100755 platform/darwin/scripts/generate-style-code.js delete mode 100644 platform/darwin/scripts/style-spec-cocoa-conventions-v8.json delete mode 100644 platform/darwin/scripts/style-spec-overrides-v8.json delete mode 100755 platform/darwin/scripts/update-examples.js delete mode 100644 platform/darwin/src/MGLAccountManager.h delete mode 100644 platform/darwin/src/MGLAccountManager.m delete mode 100644 platform/darwin/src/MGLAccountManager_Private.h delete mode 100644 platform/darwin/src/MGLAnnotation.h delete mode 100644 platform/darwin/src/MGLAttributedExpression.h delete mode 100644 platform/darwin/src/MGLAttributedExpression.m delete mode 100644 platform/darwin/src/MGLAttributionInfo.h delete mode 100644 platform/darwin/src/MGLAttributionInfo.mm delete mode 100644 platform/darwin/src/MGLAttributionInfo_Private.h delete mode 100644 platform/darwin/src/MGLBackgroundStyleLayer.h delete mode 100644 platform/darwin/src/MGLBackgroundStyleLayer.mm delete mode 100644 platform/darwin/src/MGLBackgroundStyleLayer_Private.h delete mode 100644 platform/darwin/src/MGLCircleStyleLayer.h delete mode 100644 platform/darwin/src/MGLCircleStyleLayer.mm delete mode 100644 platform/darwin/src/MGLCircleStyleLayer_Private.h delete mode 100644 platform/darwin/src/MGLClockDirectionFormatter.h delete mode 100644 platform/darwin/src/MGLClockDirectionFormatter.m delete mode 100644 platform/darwin/src/MGLCluster.h delete mode 100644 platform/darwin/src/MGLCompassDirectionFormatter.h delete mode 100644 platform/darwin/src/MGLCompassDirectionFormatter.m delete mode 100644 platform/darwin/src/MGLComputedShapeSource.h delete mode 100644 platform/darwin/src/MGLComputedShapeSource.mm delete mode 100644 platform/darwin/src/MGLComputedShapeSource_Private.h delete mode 100644 platform/darwin/src/MGLConversion.h delete mode 100644 platform/darwin/src/MGLCoordinateFormatter.h delete mode 100644 platform/darwin/src/MGLCoordinateFormatter.m delete mode 100644 platform/darwin/src/MGLDistanceFormatter.h delete mode 100644 platform/darwin/src/MGLDistanceFormatter.m delete mode 100644 platform/darwin/src/MGLFeature.h delete mode 100644 platform/darwin/src/MGLFeature.mm delete mode 100644 platform/darwin/src/MGLFeature_Private.h delete mode 100644 platform/darwin/src/MGLFillExtrusionStyleLayer.h delete mode 100644 platform/darwin/src/MGLFillExtrusionStyleLayer.mm delete mode 100644 platform/darwin/src/MGLFillExtrusionStyleLayer_Private.h delete mode 100644 platform/darwin/src/MGLFillStyleLayer.h delete mode 100644 platform/darwin/src/MGLFillStyleLayer.mm delete mode 100644 platform/darwin/src/MGLFillStyleLayer_Private.h delete mode 100644 platform/darwin/src/MGLForegroundStyleLayer.h delete mode 100644 platform/darwin/src/MGLForegroundStyleLayer.mm delete mode 100644 platform/darwin/src/MGLFoundation.h delete mode 100644 platform/darwin/src/MGLFoundation.mm delete mode 100644 platform/darwin/src/MGLFoundation_Private.h delete mode 100644 platform/darwin/src/MGLGeometry.h delete mode 100644 platform/darwin/src/MGLGeometry.mm delete mode 100644 platform/darwin/src/MGLGeometry_Private.h delete mode 100644 platform/darwin/src/MGLHeatmapStyleLayer.h delete mode 100644 platform/darwin/src/MGLHeatmapStyleLayer.mm delete mode 100644 platform/darwin/src/MGLHeatmapStyleLayer_Private.h delete mode 100644 platform/darwin/src/MGLHillshadeStyleLayer.h delete mode 100644 platform/darwin/src/MGLHillshadeStyleLayer.mm delete mode 100644 platform/darwin/src/MGLHillshadeStyleLayer_Private.h delete mode 100644 platform/darwin/src/MGLImageSource.h delete mode 100644 platform/darwin/src/MGLImageSource.mm delete mode 100644 platform/darwin/src/MGLLight.h delete mode 100644 platform/darwin/src/MGLLight.h.ejs delete mode 100644 platform/darwin/src/MGLLight.mm delete mode 100644 platform/darwin/src/MGLLight.mm.ejs delete mode 100644 platform/darwin/src/MGLLight_Private.h delete mode 100644 platform/darwin/src/MGLLineStyleLayer.h delete mode 100644 platform/darwin/src/MGLLineStyleLayer.mm delete mode 100644 platform/darwin/src/MGLLineStyleLayer_Private.h delete mode 100644 platform/darwin/src/MGLLocationManager.h delete mode 100644 platform/darwin/src/MGLLocationManager.m delete mode 100644 platform/darwin/src/MGLLocationManager_Private.h delete mode 100644 platform/darwin/src/MGLLoggingConfiguration.h delete mode 100644 platform/darwin/src/MGLLoggingConfiguration.mm delete mode 100644 platform/darwin/src/MGLLoggingConfiguration_Private.h delete mode 100644 platform/darwin/src/MGLMapCamera.h delete mode 100644 platform/darwin/src/MGLMapCamera.mm delete mode 100644 platform/darwin/src/MGLMapSnapshotter.h delete mode 100644 platform/darwin/src/MGLMapSnapshotter.mm delete mode 100644 platform/darwin/src/MGLMapSnapshotter_Private.h delete mode 100644 platform/darwin/src/MGLMultiPoint.h delete mode 100644 platform/darwin/src/MGLMultiPoint.mm delete mode 100644 platform/darwin/src/MGLMultiPoint_Private.h delete mode 100644 platform/darwin/src/MGLNetworkConfiguration.h delete mode 100644 platform/darwin/src/MGLNetworkConfiguration.m delete mode 100644 platform/darwin/src/MGLNetworkConfiguration_Private.h delete mode 100644 platform/darwin/src/MGLNetworkIntegrationManager.h delete mode 100644 platform/darwin/src/MGLNetworkIntegrationManager.m delete mode 100644 platform/darwin/src/MGLOfflinePack.h delete mode 100644 platform/darwin/src/MGLOfflinePack.mm delete mode 100644 platform/darwin/src/MGLOfflinePack_Private.h delete mode 100644 platform/darwin/src/MGLOfflineRegion.h delete mode 100644 platform/darwin/src/MGLOfflineRegion_Private.h delete mode 100644 platform/darwin/src/MGLOfflineStorage.h delete mode 100644 platform/darwin/src/MGLOfflineStorage.mm delete mode 100644 platform/darwin/src/MGLOfflineStorage_Private.h delete mode 100644 platform/darwin/src/MGLOpenGLStyleLayer.h delete mode 100644 platform/darwin/src/MGLOpenGLStyleLayer.mm delete mode 100644 platform/darwin/src/MGLOpenGLStyleLayer_Private.h delete mode 100644 platform/darwin/src/MGLOverlay.h delete mode 100644 platform/darwin/src/MGLPointAnnotation.h delete mode 100644 platform/darwin/src/MGLPointAnnotation.mm delete mode 100644 platform/darwin/src/MGLPointCollection.h delete mode 100644 platform/darwin/src/MGLPointCollection.mm delete mode 100644 platform/darwin/src/MGLPointCollection_Private.h delete mode 100644 platform/darwin/src/MGLPolygon.h delete mode 100644 platform/darwin/src/MGLPolygon.mm delete mode 100644 platform/darwin/src/MGLPolygon_Private.h delete mode 100644 platform/darwin/src/MGLPolyline.h delete mode 100644 platform/darwin/src/MGLPolyline.mm delete mode 100644 platform/darwin/src/MGLPolyline_Private.h delete mode 100644 platform/darwin/src/MGLRasterDEMSource.h delete mode 100644 platform/darwin/src/MGLRasterDEMSource.mm delete mode 100644 platform/darwin/src/MGLRasterStyleLayer.h delete mode 100644 platform/darwin/src/MGLRasterStyleLayer.mm delete mode 100644 platform/darwin/src/MGLRasterStyleLayer_Private.h delete mode 100644 platform/darwin/src/MGLRasterTileSource.h delete mode 100644 platform/darwin/src/MGLRasterTileSource.mm delete mode 100644 platform/darwin/src/MGLRasterTileSource_Private.h delete mode 100644 platform/darwin/src/MGLRendererConfiguration.h delete mode 100644 platform/darwin/src/MGLRendererConfiguration.mm delete mode 100644 platform/darwin/src/MGLRendererFrontend.h delete mode 100644 platform/darwin/src/MGLSDKMetricsManager.h delete mode 100644 platform/darwin/src/MGLSDKMetricsManager.m delete mode 100644 platform/darwin/src/MGLSDKMetricsManager_Private.h delete mode 100644 platform/darwin/src/MGLShape.h delete mode 100644 platform/darwin/src/MGLShape.mm delete mode 100644 platform/darwin/src/MGLShapeCollection.h delete mode 100644 platform/darwin/src/MGLShapeCollection.mm delete mode 100644 platform/darwin/src/MGLShapeOfflineRegion.h delete mode 100644 platform/darwin/src/MGLShapeOfflineRegion.mm delete mode 100644 platform/darwin/src/MGLShapeOfflineRegion_Private.h delete mode 100644 platform/darwin/src/MGLShapeSource.h delete mode 100644 platform/darwin/src/MGLShapeSource.mm delete mode 100644 platform/darwin/src/MGLShapeSource_Private.h delete mode 100644 platform/darwin/src/MGLShape_Private.h delete mode 100644 platform/darwin/src/MGLSource.h delete mode 100644 platform/darwin/src/MGLSource.mm delete mode 100644 platform/darwin/src/MGLSource_Private.h delete mode 100644 platform/darwin/src/MGLStyle.h delete mode 100644 platform/darwin/src/MGLStyle.mm delete mode 100644 platform/darwin/src/MGLStyleLayer.h delete mode 100644 platform/darwin/src/MGLStyleLayer.h.ejs delete mode 100644 platform/darwin/src/MGLStyleLayer.mm delete mode 100644 platform/darwin/src/MGLStyleLayer.mm.ejs delete mode 100644 platform/darwin/src/MGLStyleLayerManager.h delete mode 100644 platform/darwin/src/MGLStyleLayerManager.mm delete mode 100644 platform/darwin/src/MGLStyleLayer_Private.h delete mode 100644 platform/darwin/src/MGLStyleLayer_Private.h.ejs delete mode 100644 platform/darwin/src/MGLStyleValue.h delete mode 100644 platform/darwin/src/MGLStyleValue.mm delete mode 100644 platform/darwin/src/MGLStyleValue_Private.h delete mode 100644 platform/darwin/src/MGLStyle_Private.h delete mode 100644 platform/darwin/src/MGLSymbolStyleLayer.h delete mode 100644 platform/darwin/src/MGLSymbolStyleLayer.mm delete mode 100644 platform/darwin/src/MGLSymbolStyleLayer_Private.h delete mode 100644 platform/darwin/src/MGLTilePyramidOfflineRegion.h delete mode 100644 platform/darwin/src/MGLTilePyramidOfflineRegion.mm delete mode 100644 platform/darwin/src/MGLTilePyramidOfflineRegion_Private.h delete mode 100644 platform/darwin/src/MGLTileSource.h delete mode 100644 platform/darwin/src/MGLTileSource.mm delete mode 100644 platform/darwin/src/MGLTileSource_Private.h delete mode 100644 platform/darwin/src/MGLTypes.h delete mode 100644 platform/darwin/src/MGLTypes.m delete mode 100644 platform/darwin/src/MGLValueEvaluator.h delete mode 100644 platform/darwin/src/MGLVectorStyleLayer.h delete mode 100644 platform/darwin/src/MGLVectorStyleLayer.mm delete mode 100644 platform/darwin/src/MGLVectorTileSource.h delete mode 100644 platform/darwin/src/MGLVectorTileSource.mm delete mode 100644 platform/darwin/src/MGLVectorTileSource_Private.h delete mode 100644 platform/darwin/src/NSArray+MGLAdditions.h delete mode 100644 platform/darwin/src/NSArray+MGLAdditions.mm delete mode 100644 platform/darwin/src/NSBundle+MGLAdditions.h delete mode 100644 platform/darwin/src/NSBundle+MGLAdditions.m delete mode 100644 platform/darwin/src/NSCoder+MGLAdditions.h delete mode 100644 platform/darwin/src/NSCoder+MGLAdditions.mm delete mode 100644 platform/darwin/src/NSComparisonPredicate+MGLAdditions.h delete mode 100644 platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm delete mode 100644 platform/darwin/src/NSCompoundPredicate+MGLAdditions.h delete mode 100644 platform/darwin/src/NSCompoundPredicate+MGLAdditions.mm delete mode 100644 platform/darwin/src/NSDate+MGLAdditions.h delete mode 100644 platform/darwin/src/NSDate+MGLAdditions.mm delete mode 100644 platform/darwin/src/NSDictionary+MGLAdditions.h delete mode 100644 platform/darwin/src/NSDictionary+MGLAdditions.mm delete mode 100644 platform/darwin/src/NSException+MGLAdditions.h delete mode 100644 platform/darwin/src/NSExpression+MGLAdditions.h delete mode 100644 platform/darwin/src/NSExpression+MGLAdditions.mm delete mode 100644 platform/darwin/src/NSExpression+MGLPrivateAdditions.h delete mode 100644 platform/darwin/src/NSPredicate+MGLAdditions.h delete mode 100644 platform/darwin/src/NSPredicate+MGLAdditions.mm delete mode 100644 platform/darwin/src/NSPredicate+MGLPrivateAdditions.h delete mode 100644 platform/darwin/src/NSString+MGLAdditions.h delete mode 100644 platform/darwin/src/NSString+MGLAdditions.m delete mode 100644 platform/darwin/src/NSURL+MGLAdditions.h delete mode 100644 platform/darwin/src/NSURL+MGLAdditions.m delete mode 100644 platform/darwin/src/NSValue+MGLAdditions.h delete mode 100644 platform/darwin/src/NSValue+MGLAdditions.m delete mode 100644 platform/darwin/src/NSValue+MGLStyleAttributeAdditions.h delete mode 100644 platform/darwin/src/NSValue+MGLStyleAttributeAdditions.mm delete mode 100644 platform/darwin/test/MGLAttributionInfoTests.m delete mode 100644 platform/darwin/test/MGLBackgroundStyleLayerTests.mm delete mode 100644 platform/darwin/test/MGLCircleStyleLayerTests.mm delete mode 100644 platform/darwin/test/MGLClockDirectionFormatterTests.m delete mode 100644 platform/darwin/test/MGLCodingTests.mm delete mode 100644 platform/darwin/test/MGLCompassDirectionFormatterTests.m delete mode 100644 platform/darwin/test/MGLComputedShapeSourceTests.m delete mode 100644 platform/darwin/test/MGLCoordinateFormatterTests.m delete mode 100644 platform/darwin/test/MGLDistanceFormatterTests.m delete mode 100644 platform/darwin/test/MGLDocumentationExampleTests.swift delete mode 100644 platform/darwin/test/MGLDocumentationGuideTests.swift delete mode 100644 platform/darwin/test/MGLExpressionTests.mm delete mode 100644 platform/darwin/test/MGLFeatureTests.mm delete mode 100644 platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm delete mode 100644 platform/darwin/test/MGLFillStyleLayerTests.mm delete mode 100644 platform/darwin/test/MGLGeometryTests.mm delete mode 100644 platform/darwin/test/MGLHeatmapColorTests.mm delete mode 100644 platform/darwin/test/MGLHeatmapStyleLayerTests.mm delete mode 100644 platform/darwin/test/MGLHillshadeStyleLayerTests.mm delete mode 100644 platform/darwin/test/MGLImageSourceTests.m delete mode 100644 platform/darwin/test/MGLLightTest.mm delete mode 100644 platform/darwin/test/MGLLightTest.mm.ejs delete mode 100644 platform/darwin/test/MGLLineStyleLayerTests.mm delete mode 100644 platform/darwin/test/MGLMapCameraTests.m delete mode 100644 platform/darwin/test/MGLMapViewTests.m delete mode 100644 platform/darwin/test/MGLNSDateAdditionsTests.mm delete mode 100644 platform/darwin/test/MGLNSStringAdditionsTests.m delete mode 100644 platform/darwin/test/MGLOfflinePackTests.mm delete mode 100644 platform/darwin/test/MGLOfflineRegionTests.m delete mode 100644 platform/darwin/test/MGLOfflineStorageTests.mm delete mode 100644 platform/darwin/test/MGLPredicateTests.mm delete mode 100644 platform/darwin/test/MGLRasterStyleLayerTests.mm delete mode 100644 platform/darwin/test/MGLRendererConfigurationTests.mm delete mode 100644 platform/darwin/test/MGLResourceTests.mm delete mode 100644 platform/darwin/test/MGLSDKTestHelpers.swift delete mode 100644 platform/darwin/test/MGLShapeSourceTests.mm delete mode 100644 platform/darwin/test/MGLSourceQueryTests.m delete mode 100644 platform/darwin/test/MGLStyleLayerTests.h delete mode 100644 platform/darwin/test/MGLStyleLayerTests.m delete mode 100644 platform/darwin/test/MGLStyleLayerTests.mm.ejs delete mode 100644 platform/darwin/test/MGLStyleTests.mm delete mode 100644 platform/darwin/test/MGLSymbolStyleLayerTests.mm delete mode 100644 platform/darwin/test/MGLTestAssertionHandler.h delete mode 100644 platform/darwin/test/MGLTestAssertionHandler.m delete mode 100644 platform/darwin/test/MGLTestUtility.h delete mode 100644 platform/darwin/test/MGLTileSetTests.mm delete mode 100644 platform/darwin/test/MGLVersionNumber.m delete mode 100644 platform/darwin/test/Media.xcassets/Contents.json delete mode 100644 platform/darwin/test/Media.xcassets/RadarImage.imageset/Contents.json delete mode 100644 platform/darwin/test/Media.xcassets/RadarImage.imageset/radar.png delete mode 100644 platform/darwin/test/Media.xcassets/TrackingLocationMask.imageset/Contents.json delete mode 100644 platform/darwin/test/Media.xcassets/TrackingLocationMask.imageset/TrackingLocationMask.png delete mode 100644 platform/darwin/test/Media.xcassets/TrackingLocationMask.imageset/TrackingLocationMask@2x.png delete mode 100644 platform/darwin/test/Media.xcassets/TrackingLocationMask.imageset/TrackingLocationMask@3x.png delete mode 100644 platform/darwin/test/amsterdam.geojson delete mode 100644 platform/darwin/test/one-liner.json delete mode 100644 platform/darwin/test/test-Bridging-Header.h delete mode 100644 platform/ios/Integration Test Harness/AppDelegate.h delete mode 100644 platform/ios/Integration Test Harness/AppDelegate.m delete mode 100644 platform/ios/Integration Test Harness/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 platform/ios/Integration Test Harness/Base.lproj/LaunchScreen.storyboard delete mode 100644 platform/ios/Integration Test Harness/Info.plist delete mode 100644 platform/ios/Integration Test Harness/main.m delete mode 100644 platform/ios/Integration Tests/Annotation Tests/MGLAnnotationViewIntegrationTests.mm delete mode 100644 platform/ios/Integration Tests/Camera Tests/MGLCameraTransitionFinishTests.mm delete mode 100644 platform/ios/Integration Tests/Camera Tests/MGLCameraTransitionTests.mm delete mode 100644 platform/ios/Integration Tests/Info.plist delete mode 100644 platform/ios/Integration Tests/MBGLIntegrationTests.mm delete mode 100644 platform/ios/Integration Tests/MGLMapViewIntegrationTest.h delete mode 100644 platform/ios/Integration Tests/MGLMapViewIntegrationTest.m delete mode 100644 platform/ios/Integration Tests/MGLMapViewPendingBlockTests.m delete mode 100644 platform/ios/Integration Tests/MGLShapeSourceTests.m delete mode 100644 platform/ios/Integration Tests/MGLSourceTests.swift delete mode 100644 platform/ios/Integration Tests/MGLStyleLayerIntegrationTests.m delete mode 100644 platform/ios/Integration Tests/MGLStyleURLIntegrationTest.m delete mode 100644 platform/ios/Integration Tests/MGLTestLocationManager.h delete mode 100644 platform/ios/Integration Tests/MGLTestLocationManager.m delete mode 100644 platform/ios/Integration Tests/Snapshotter Tests/MGLMapSnapshotterSwiftTests.swift delete mode 100644 platform/ios/Integration Tests/Snapshotter Tests/MGLMapSnapshotterTest.m delete mode 100644 platform/ios/Integration Tests/integration-Bridging-Header.h delete mode 100644 platform/ios/Mapbox-iOS-SDK-snapshot-dynamic.podspec delete mode 100644 platform/ios/Mapbox-iOS-SDK-stripped.podspec delete mode 100644 platform/ios/Mapbox-iOS-SDK.podspec delete mode 100644 platform/ios/Mapbox.playground/Contents.swift delete mode 100644 platform/ios/Mapbox.playground/contents.xcplayground delete mode 100644 platform/ios/WorkspaceSettings.xcsettings delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-1024.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-40.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-40@2x-1.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-76.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-Small.png delete mode 100644 platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png delete mode 100644 platform/ios/app/Assets.xcassets/Contents.json delete mode 100644 platform/ios/app/Assets.xcassets/TrackingHeadingMask.imageset/Contents.json delete mode 100644 platform/ios/app/Assets.xcassets/TrackingHeadingMask.imageset/TrackingHeadingMask.png delete mode 100644 platform/ios/app/Assets.xcassets/TrackingHeadingMask.imageset/TrackingHeadingMask@2x.png delete mode 100644 platform/ios/app/Assets.xcassets/TrackingHeadingMask.imageset/TrackingHeadingMask@3x.png delete mode 100644 platform/ios/app/Assets.xcassets/TrackingLocationMask.imageset/Contents.json delete mode 100644 platform/ios/app/Assets.xcassets/TrackingLocationMask.imageset/TrackingLocationMask.png delete mode 100644 platform/ios/app/Assets.xcassets/TrackingLocationMask.imageset/TrackingLocationMask@2x.png delete mode 100644 platform/ios/app/Assets.xcassets/TrackingLocationMask.imageset/TrackingLocationMask@3x.png delete mode 100644 platform/ios/app/Assets.xcassets/TrackingLocationOffMask.imageset/Contents.json delete mode 100644 platform/ios/app/Assets.xcassets/TrackingLocationOffMask.imageset/TrackingLocationOffMask.png delete mode 100644 platform/ios/app/Assets.xcassets/TrackingLocationOffMask.imageset/TrackingLocationOffMask@2x.png delete mode 100644 platform/ios/app/Assets.xcassets/TrackingLocationOffMask.imageset/TrackingLocationOffMask@3x.png delete mode 100644 platform/ios/app/Assets.xcassets/settings.imageset/Contents.json delete mode 100644 platform/ios/app/Assets.xcassets/settings.imageset/settings.pdf delete mode 100644 platform/ios/app/Base.lproj/Localizable.strings delete mode 100644 platform/ios/app/Info.plist delete mode 100644 platform/ios/app/LaunchScreen.storyboard delete mode 100644 platform/ios/app/MBXAnnotationView.h delete mode 100644 platform/ios/app/MBXAnnotationView.m delete mode 100644 platform/ios/app/MBXAppDelegate.h delete mode 100644 platform/ios/app/MBXAppDelegate.m delete mode 100644 platform/ios/app/MBXCustomCalloutView.h delete mode 100644 platform/ios/app/MBXCustomCalloutView.m delete mode 100644 platform/ios/app/MBXCustomLocationViewController.h delete mode 100644 platform/ios/app/MBXCustomLocationViewController.m delete mode 100644 platform/ios/app/MBXEmbeddedMapViewController.h delete mode 100644 platform/ios/app/MBXEmbeddedMapViewController.m delete mode 100644 platform/ios/app/MBXFrameTimeGraphView.h delete mode 100644 platform/ios/app/MBXFrameTimeGraphView.m delete mode 100644 platform/ios/app/MBXOfflinePacksTableViewController.h delete mode 100644 platform/ios/app/MBXOfflinePacksTableViewController.m delete mode 100644 platform/ios/app/MBXOrnamentsViewController.h delete mode 100644 platform/ios/app/MBXOrnamentsViewController.m delete mode 100644 platform/ios/app/MBXSnapshotsViewController.h delete mode 100644 platform/ios/app/MBXSnapshotsViewController.m delete mode 100644 platform/ios/app/MBXState.h delete mode 100644 platform/ios/app/MBXState.m delete mode 100644 platform/ios/app/MBXStateManager.h delete mode 100644 platform/ios/app/MBXStateManager.m delete mode 100644 platform/ios/app/MBXUserLocationAnnotationView.h delete mode 100644 platform/ios/app/MBXUserLocationAnnotationView.m delete mode 100644 platform/ios/app/MBXViewController.h delete mode 100644 platform/ios/app/MBXViewController.m delete mode 100644 platform/ios/app/Main.storyboard delete mode 100644 platform/ios/app/Settings.bundle/Base.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/Root.plist delete mode 100644 platform/ios/app/Settings.bundle/ar.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/bg.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/ca.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/cs.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/da.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/de.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/en.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/es.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/fi.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/fr.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/gl.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/he.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/hu.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/it.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/ko.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/lt.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/nl.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/pl.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/pt-BR.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/pt-PT.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/ru.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/sv.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/uk.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/vi.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/zh-Hans.lproj/Root.strings delete mode 100644 platform/ios/app/Settings.bundle/zh-Hant.lproj/Root.strings delete mode 100644 platform/ios/app/ar.lproj/Localizable.strings delete mode 100644 platform/ios/app/bg.lproj/Localizable.strings delete mode 100644 platform/ios/app/ca.lproj/Localizable.strings delete mode 100644 platform/ios/app/cs.lproj/Localizable.strings delete mode 100644 platform/ios/app/da.lproj/Localizable.strings delete mode 100644 platform/ios/app/de.lproj/Localizable.strings delete mode 100644 platform/ios/app/es.lproj/Localizable.strings delete mode 100644 platform/ios/app/fi.lproj/Localizable.strings delete mode 100644 platform/ios/app/fill_filter_style.json delete mode 100644 platform/ios/app/fr.lproj/Localizable.strings delete mode 100644 platform/ios/app/gl.lproj/Localizable.strings delete mode 100644 platform/ios/app/he.lproj/Localizable.strings delete mode 100644 platform/ios/app/hu.lproj/Localizable.strings delete mode 100755 platform/ios/app/insert_access_token.sh delete mode 100644 platform/ios/app/ja.lproj/Localizable.strings delete mode 100644 platform/ios/app/ko.lproj/Localizable.strings delete mode 100644 platform/ios/app/line_filter_style.json delete mode 100644 platform/ios/app/lt.lproj/Localizable.strings delete mode 100644 platform/ios/app/main.m delete mode 100644 platform/ios/app/missing_icon.json delete mode 100644 platform/ios/app/nl.lproj/Localizable.strings delete mode 100644 platform/ios/app/numeric_filter_style.json delete mode 100644 platform/ios/app/pl.lproj/Localizable.strings delete mode 100644 platform/ios/app/points.geojson delete mode 100644 platform/ios/app/polyline.geojson delete mode 100644 platform/ios/app/pt-BR.lproj/Localizable.strings delete mode 100644 platform/ios/app/pt-PT.lproj/Localizable.strings delete mode 100644 platform/ios/app/ru.lproj/Localizable.strings delete mode 100644 platform/ios/app/simple_route.json delete mode 100644 platform/ios/app/sv.lproj/Localizable.strings delete mode 100644 platform/ios/app/threestates.geojson delete mode 100644 platform/ios/app/uk.lproj/Localizable.strings delete mode 100644 platform/ios/app/vi.lproj/Localizable.strings delete mode 100644 platform/ios/app/zh-Hans.lproj/Localizable.strings delete mode 100644 platform/ios/app/zh-Hant.lproj/Localizable.strings delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-1.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-2.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-3.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-4.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-40.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-76.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-Small.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/iTunesArtwork.png delete mode 100644 platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png delete mode 100644 platform/ios/benchmark/Base.lproj/LaunchScreen.storyboard delete mode 100644 platform/ios/benchmark/Info.plist delete mode 100644 platform/ios/benchmark/MBXBenchAppDelegate.h delete mode 100644 platform/ios/benchmark/MBXBenchAppDelegate.m delete mode 100644 platform/ios/benchmark/MBXBenchViewController.h delete mode 100644 platform/ios/benchmark/MBXBenchViewController.mm delete mode 100755 platform/ios/benchmark/assets/glyphs/download.sh delete mode 100644 platform/ios/benchmark/assets/sprites/mapbox-streets.json delete mode 100644 platform/ios/benchmark/assets/sprites/mapbox-streets.png delete mode 100644 platform/ios/benchmark/assets/sprites/mapbox-streets@2x.json delete mode 100644 platform/ios/benchmark/assets/sprites/mapbox-streets@2x.png delete mode 100644 platform/ios/benchmark/assets/styles/streets-v8.json delete mode 100755 platform/ios/benchmark/assets/tiles/download.sh delete mode 100644 platform/ios/benchmark/assets/tiles/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6.json delete mode 100644 platform/ios/benchmark/locations.cpp delete mode 100644 platform/ios/benchmark/locations.hpp delete mode 100644 platform/ios/benchmark/main.m delete mode 100644 platform/ios/docs/guides/For Style Authors.md delete mode 100644 platform/ios/docs/guides/Gesture Recognizers.md delete mode 100644 platform/ios/docs/guides/Info.plist Keys.md delete mode 100644 platform/ios/docs/guides/Migrating to Expressions.md delete mode 100644 platform/ios/docs/guides/Tile URL Templates.md delete mode 100644 platform/ios/docs/img/screenshot.png delete mode 100644 platform/ios/docs/img/user-interaction/RotateSydney.gif delete mode 100644 platform/ios/docs/img/user-interaction/quickzoom.gif delete mode 100644 platform/ios/docs/pod-README.md delete mode 100644 platform/ios/framework/Info-static.plist delete mode 100644 platform/ios/framework/Info.plist delete mode 100644 platform/ios/framework/Mapbox-static.h delete mode 100644 platform/ios/framework/modulemap delete mode 100755 platform/ios/framework/strip-frameworks.sh delete mode 100644 platform/ios/ios.xcodeproj/project.pbxproj delete mode 100644 platform/ios/ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme delete mode 100644 platform/ios/ios.xcodeproj/xcshareddata/xcschemes/Integration Test Harness.xcscheme delete mode 100644 platform/ios/ios.xcodeproj/xcshareddata/xcschemes/bench.xcscheme delete mode 100644 platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic+static.xcscheme delete mode 100644 platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme delete mode 100644 platform/ios/ios.xcodeproj/xcshareddata/xcschemes/iosapp.xcscheme delete mode 100644 platform/ios/ios.xcodeproj/xcshareddata/xcschemes/static.xcscheme delete mode 100644 platform/ios/ios.xcworkspace/contents.xcworkspacedata delete mode 100644 platform/ios/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 platform/ios/ios.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist delete mode 100644 platform/ios/jazzy.yml delete mode 100644 platform/ios/originals/compass.sketch delete mode 100644 platform/ios/originals/screenshot.sketch delete mode 100644 platform/ios/resources/Base.lproj/Localizable.strings delete mode 100644 platform/ios/resources/Images.xcassets/Compass.imageset/Contents.json delete mode 100644 platform/ios/resources/Images.xcassets/Compass.imageset/compass.pdf delete mode 100644 platform/ios/resources/Images.xcassets/Contents.json delete mode 100644 platform/ios/resources/Images.xcassets/default_marker.imageset/Contents.json delete mode 100644 platform/ios/resources/Images.xcassets/default_marker.imageset/default_marker.pdf delete mode 100644 platform/ios/resources/Images.xcassets/mapbox.imageset/Contents.json delete mode 100644 platform/ios/resources/Images.xcassets/mapbox.imageset/mapbox.pdf delete mode 100644 platform/ios/resources/Images.xcassets/mapbox_helmet.imageset/Contents.json delete mode 100644 platform/ios/resources/Images.xcassets/mapbox_helmet.imageset/mapbox_helmet.pdf delete mode 100644 platform/ios/resources/README delete mode 100644 platform/ios/resources/ar.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/bg.lproj/Localizable.strings delete mode 100644 platform/ios/resources/bg.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/ca.lproj/Localizable.strings delete mode 100644 platform/ios/resources/ca.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/cs.lproj/Localizable.strings delete mode 100644 platform/ios/resources/cs.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/da.lproj/Localizable.strings delete mode 100644 platform/ios/resources/da.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/de.lproj/Localizable.strings delete mode 100644 platform/ios/resources/de.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/en.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/es.lproj/Localizable.strings delete mode 100644 platform/ios/resources/es.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/fr.lproj/Localizable.strings delete mode 100644 platform/ios/resources/fr.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/gl.lproj/Localizable.strings delete mode 100644 platform/ios/resources/gl.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/he.lproj/Localizable.strings delete mode 100644 platform/ios/resources/hu.lproj/Localizable.strings delete mode 100644 platform/ios/resources/hu.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/ja.lproj/Localizable.strings delete mode 100644 platform/ios/resources/ko.lproj/Localizable.strings delete mode 100644 platform/ios/resources/ko.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/lt.lproj/Localizable.strings delete mode 100644 platform/ios/resources/lt.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/pt-BR.lproj/Localizable.strings delete mode 100644 platform/ios/resources/pt-BR.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/pt-PT.lproj/Localizable.strings delete mode 100644 platform/ios/resources/pt-PT.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/ru.lproj/Localizable.strings delete mode 100644 platform/ios/resources/ru.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/sv.lproj/Localizable.strings delete mode 100644 platform/ios/resources/sv.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/uk.lproj/Localizable.strings delete mode 100644 platform/ios/resources/uk.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/vi.lproj/Localizable.strings delete mode 100644 platform/ios/resources/vi.lproj/Localizable.stringsdict delete mode 100644 platform/ios/resources/zh-Hans.lproj/Localizable.strings delete mode 100644 platform/ios/resources/zh-Hant.lproj/Localizable.strings delete mode 100644 platform/ios/resources/zh-Hant.lproj/Localizable.stringsdict delete mode 100755 platform/ios/scripts/check-events-symbols.sh delete mode 100755 platform/ios/scripts/deploy-packages.sh delete mode 100755 platform/ios/scripts/deploy-snapshot.sh delete mode 100755 platform/ios/scripts/deploy-to-cocoapods.sh delete mode 100755 platform/ios/scripts/document.sh delete mode 100755 platform/ios/scripts/install-packaging-dependencies.sh delete mode 100755 platform/ios/scripts/ios-code-coverage.sh delete mode 100755 platform/ios/scripts/lint-podspecs.js delete mode 100755 platform/ios/scripts/metrics.sh delete mode 100755 platform/ios/scripts/package.sh delete mode 100755 platform/ios/scripts/publish.sh delete mode 100644 platform/ios/scripts/release-notes-github.md.ejs delete mode 100644 platform/ios/scripts/release-notes-jazzy.md.ejs delete mode 100755 platform/ios/scripts/release-notes.js delete mode 100755 platform/ios/scripts/validate-framework-zip.sh delete mode 100644 platform/ios/src/MGLAnnotationContainerView.h delete mode 100644 platform/ios/src/MGLAnnotationContainerView.m delete mode 100644 platform/ios/src/MGLAnnotationContainerView_Private.h delete mode 100644 platform/ios/src/MGLAnnotationImage.h delete mode 100644 platform/ios/src/MGLAnnotationImage.m delete mode 100644 platform/ios/src/MGLAnnotationImage_Private.h delete mode 100644 platform/ios/src/MGLAnnotationView.h delete mode 100644 platform/ios/src/MGLAnnotationView.mm delete mode 100644 platform/ios/src/MGLAnnotationView_Private.h delete mode 100644 platform/ios/src/MGLCalloutView.h delete mode 100644 platform/ios/src/MGLCameraChangeReason.h delete mode 100644 platform/ios/src/MGLCompactCalloutView.h delete mode 100644 platform/ios/src/MGLCompactCalloutView.m delete mode 100644 platform/ios/src/MGLCompassButton.h delete mode 100644 platform/ios/src/MGLCompassButton.mm delete mode 100644 platform/ios/src/MGLCompassButton_Private.h delete mode 100644 platform/ios/src/MGLFaux3DUserLocationAnnotationView.h delete mode 100644 platform/ios/src/MGLFaux3DUserLocationAnnotationView.m delete mode 100644 platform/ios/src/MGLMapAccessibilityElement.h delete mode 100644 platform/ios/src/MGLMapAccessibilityElement.mm delete mode 100644 platform/ios/src/MGLMapView+IBAdditions.h delete mode 100644 platform/ios/src/MGLMapView+Impl.h delete mode 100644 platform/ios/src/MGLMapView+Impl.mm delete mode 100644 platform/ios/src/MGLMapView+OpenGL.h delete mode 100644 platform/ios/src/MGLMapView+OpenGL.mm delete mode 100644 platform/ios/src/MGLMapView.h delete mode 100644 platform/ios/src/MGLMapView.mm delete mode 100644 platform/ios/src/MGLMapViewDelegate.h delete mode 100644 platform/ios/src/MGLMapView_Experimental.h delete mode 100644 platform/ios/src/MGLMapView_Private.h delete mode 100644 platform/ios/src/MGLMapboxEvents.h delete mode 100644 platform/ios/src/MGLMapboxEvents.m delete mode 100644 platform/ios/src/MGLSDKUpdateChecker.h delete mode 100644 platform/ios/src/MGLSDKUpdateChecker.mm delete mode 100644 platform/ios/src/MGLScaleBar.h delete mode 100644 platform/ios/src/MGLScaleBar.mm delete mode 100644 platform/ios/src/MGLTelemetryConfig.h delete mode 100644 platform/ios/src/MGLTelemetryConfig.m delete mode 100644 platform/ios/src/MGLUserLocation.h delete mode 100644 platform/ios/src/MGLUserLocation.m delete mode 100644 platform/ios/src/MGLUserLocationAnnotationView.h delete mode 100644 platform/ios/src/MGLUserLocationAnnotationView.m delete mode 100644 platform/ios/src/MGLUserLocationAnnotationView_Private.h delete mode 100644 platform/ios/src/MGLUserLocationHeadingArrowLayer.h delete mode 100644 platform/ios/src/MGLUserLocationHeadingArrowLayer.m delete mode 100644 platform/ios/src/MGLUserLocationHeadingBeamLayer.h delete mode 100644 platform/ios/src/MGLUserLocationHeadingBeamLayer.m delete mode 100644 platform/ios/src/MGLUserLocationHeadingIndicator.h delete mode 100644 platform/ios/src/MGLUserLocation_Private.h delete mode 100644 platform/ios/src/Mapbox-Prefix.pch delete mode 100644 platform/ios/src/Mapbox.h delete mode 100644 platform/ios/src/NSOrthography+MGLAdditions.h delete mode 100644 platform/ios/src/NSOrthography+MGLAdditions.m delete mode 100644 platform/ios/src/UIColor+MGLAdditions.h delete mode 100644 platform/ios/src/UIColor+MGLAdditions.mm delete mode 100644 platform/ios/src/UIDevice+MGLAdditions.h delete mode 100644 platform/ios/src/UIDevice+MGLAdditions.m delete mode 100644 platform/ios/src/UIImage+MGLAdditions.h delete mode 100644 platform/ios/src/UIImage+MGLAdditions.mm delete mode 100644 platform/ios/src/UIView+MGLAdditions.h delete mode 100644 platform/ios/src/UIView+MGLAdditions.m delete mode 100644 platform/ios/src/UIViewController+MGLAdditions.h delete mode 100644 platform/ios/src/UIViewController+MGLAdditions.m delete mode 100644 platform/ios/test/Info.plist delete mode 100644 platform/ios/test/MGLAccountManagerTests.m delete mode 100644 platform/ios/test/MGLAnnotationViewIntegrationTests.swift delete mode 100644 platform/ios/test/MGLAnnotationViewTests.m delete mode 100644 platform/ios/test/MGLMapAccessibilityElementTests.m delete mode 100644 platform/ios/test/MGLMapViewCompassViewTests.mm delete mode 100644 platform/ios/test/MGLMapViewContentInsetTests.m delete mode 100644 platform/ios/test/MGLMapViewDelegateIntegrationTests.swift delete mode 100644 platform/ios/test/MGLMapViewDirectionTests.mm delete mode 100644 platform/ios/test/MGLMapViewGestureRecognizerTests.mm delete mode 100644 platform/ios/test/MGLMapViewLayoutTests.m delete mode 100644 platform/ios/test/MGLMapViewPitchTests.m delete mode 100644 platform/ios/test/MGLMapViewScaleBarTests.m delete mode 100644 platform/ios/test/MGLMapViewZoomTests.mm delete mode 100644 platform/ios/test/MGLMockGestureRecognizers.h delete mode 100644 platform/ios/test/MGLMockGestureRecognizers.m delete mode 100644 platform/ios/test/MGLNSOrthographyAdditionsTests.m delete mode 100644 platform/ios/test/MGLNetworkConfigurationTests.m delete mode 100755 platform/ios/vendor/SMCalloutView/SMCalloutView.h delete mode 100755 platform/ios/vendor/SMCalloutView/SMCalloutView.m delete mode 100644 platform/ios/vendor/mapbox-accounts-ios/MBXSKUToken.h delete mode 100644 platform/ios/vendor/mapbox-accounts-ios/libmbxaccounts.a delete mode 160000 platform/ios/vendor/mapbox-events-ios delete mode 100644 platform/macos/ExportOptions.plist delete mode 100644 platform/macos/Mapbox-macOS-SDK-symbols.podspec delete mode 100644 platform/macos/Mapbox-macOS-SDK.podspec delete mode 100644 platform/macos/WorkspaceSettings.xcsettings delete mode 100644 platform/macos/app/AppDelegate.h delete mode 100644 platform/macos/app/AppDelegate.m delete mode 100644 platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon128x128.png delete mode 100644 platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon128x128@2x.png delete mode 100644 platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon16x16.png delete mode 100644 platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon16x16@2x.png delete mode 100644 platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256.png delete mode 100644 platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256@2x.png delete mode 100644 platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon32x32.png delete mode 100644 platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon32x32@2x.png delete mode 100644 platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon512x512.png delete mode 100644 platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon512x512@2x.png delete mode 100644 platform/macos/app/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Layers/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Layers/background.imageset/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Layers/background.imageset/background.pdf delete mode 100644 platform/macos/app/Assets.xcassets/Layers/circle.imageset/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Layers/circle.imageset/circle.pdf delete mode 100644 platform/macos/app/Assets.xcassets/Layers/fill-extrusion.imageset/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Layers/fill-extrusion.imageset/fill-extrusion.pdf delete mode 100644 platform/macos/app/Assets.xcassets/Layers/fill.imageset/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Layers/fill.imageset/fill.pdf delete mode 100644 platform/macos/app/Assets.xcassets/Layers/heatmap.imageset/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Layers/heatmap.imageset/heatmap.pdf delete mode 100644 platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/hillshade.pdf delete mode 100644 platform/macos/app/Assets.xcassets/Layers/symbol.imageset/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Layers/symbol.imageset/symbol.pdf delete mode 100644 platform/macos/app/Assets.xcassets/Radar/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/southeast_radar_0.png delete mode 100644 platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/southeast_radar_1.png delete mode 100644 platform/macos/app/Assets.xcassets/Radar/southeast_2.imageset/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Radar/southeast_2.imageset/southeast_radar_2.png delete mode 100644 platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/Contents.json delete mode 100644 platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/southeast_radar_3.png delete mode 100644 platform/macos/app/Base.lproj/Localizable.strings delete mode 100644 platform/macos/app/Base.lproj/MainMenu.xib delete mode 100644 platform/macos/app/Base.lproj/MapDocument.xib delete mode 100644 platform/macos/app/Credits.rtf delete mode 100644 platform/macos/app/DroppedPinAnnotation.h delete mode 100644 platform/macos/app/DroppedPinAnnotation.m delete mode 100644 platform/macos/app/Info.plist delete mode 100644 platform/macos/app/LocationCoordinate2DTransformer.h delete mode 100644 platform/macos/app/LocationCoordinate2DTransformer.m delete mode 100644 platform/macos/app/MGLStyle+MBXAdditions.h delete mode 100644 platform/macos/app/MGLStyle+MBXAdditions.m delete mode 100644 platform/macos/app/MapDocument.h delete mode 100644 platform/macos/app/MapDocument.m delete mode 100644 platform/macos/app/OfflinePackNameValueTransformer.h delete mode 100644 platform/macos/app/OfflinePackNameValueTransformer.m delete mode 100644 platform/macos/app/StyleLayerIconTransformer.h delete mode 100644 platform/macos/app/StyleLayerIconTransformer.m delete mode 100644 platform/macos/app/TimeIntervalTransformer.h delete mode 100644 platform/macos/app/TimeIntervalTransformer.m delete mode 100644 platform/macos/app/ar.lproj/Localizable.strings delete mode 100644 platform/macos/app/bg.lproj/Localizable.strings delete mode 100644 platform/macos/app/ca.lproj/Localizable.strings delete mode 100644 platform/macos/app/cs.lproj/Localizable.strings delete mode 100644 platform/macos/app/da.lproj/Localizable.strings delete mode 100644 platform/macos/app/de.lproj/Localizable.strings delete mode 100644 platform/macos/app/es.lproj/Localizable.strings delete mode 100644 platform/macos/app/fi.lproj/Localizable.strings delete mode 100644 platform/macos/app/fr.lproj/Localizable.strings delete mode 100644 platform/macos/app/gl.lproj/Localizable.strings delete mode 100644 platform/macos/app/he.lproj/Localizable.strings delete mode 100644 platform/macos/app/heatmap.json delete mode 100644 platform/macos/app/hu.lproj/Localizable.strings delete mode 100644 platform/macos/app/ja.lproj/Localizable.strings delete mode 100644 platform/macos/app/ko.lproj/Localizable.strings delete mode 100644 platform/macos/app/lt.lproj/Localizable.strings delete mode 100644 platform/macos/app/main.m delete mode 100644 platform/macos/app/nl.lproj/Localizable.strings delete mode 100644 platform/macos/app/pl.lproj/Localizable.strings delete mode 100644 platform/macos/app/pt-BR.lproj/Localizable.strings delete mode 100644 platform/macos/app/pt-PT.lproj/Localizable.strings delete mode 100644 platform/macos/app/resources/background.svg delete mode 100644 platform/macos/app/resources/circle.svg delete mode 100644 platform/macos/app/resources/fill-extrusion.svg delete mode 100644 platform/macos/app/resources/fill.svg delete mode 100644 platform/macos/app/resources/heatmap.svg delete mode 100644 platform/macos/app/resources/hillshade.svg delete mode 100644 platform/macos/app/resources/symbol.svg delete mode 100644 platform/macos/app/ru.lproj/Localizable.strings delete mode 100644 platform/macos/app/sv.lproj/Localizable.strings delete mode 100644 platform/macos/app/uk.lproj/Localizable.strings delete mode 100644 platform/macos/app/vi.lproj/Localizable.strings delete mode 100644 platform/macos/app/wms.json delete mode 100644 platform/macos/app/zh-Hans.lproj/Localizable.strings delete mode 100644 platform/macos/app/zh-Hant.lproj/Localizable.strings delete mode 100644 platform/macos/docs/doc-README.md delete mode 100644 platform/macos/docs/guides/For Style Authors.md delete mode 100644 platform/macos/docs/guides/Info.plist Keys.md delete mode 100644 platform/macos/docs/guides/Migrating to Expressions.md delete mode 100644 platform/macos/docs/guides/Tile URL Templates.md delete mode 100644 platform/macos/docs/img/screenshot.jpg delete mode 100644 platform/macos/docs/pod-README.md delete mode 100644 platform/macos/jazzy.yml delete mode 100644 platform/macos/macos.xcodeproj/project.pbxproj delete mode 100644 platform/macos/macos.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 platform/macos/macos.xcodeproj/xcshareddata/xcschemes/CI.xcscheme delete mode 100644 platform/macos/macos.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme delete mode 100644 platform/macos/macos.xcodeproj/xcshareddata/xcschemes/macosapp.xcscheme delete mode 100644 platform/macos/macos.xcworkspace/contents.xcworkspacedata delete mode 100644 platform/macos/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 platform/macos/macos.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist delete mode 100755 platform/macos/scripts/deploy-packages.sh delete mode 100755 platform/macos/scripts/document.sh delete mode 100755 platform/macos/scripts/metrics.sh delete mode 100755 platform/macos/scripts/package.sh delete mode 100644 platform/macos/sdk/Base.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/Base.lproj/MGLAnnotationCallout.xib delete mode 100644 platform/macos/sdk/Info.plist delete mode 100644 platform/macos/sdk/ar.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/bg.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/ca.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/cs.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/da.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/de.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/default_marker.pdf delete mode 100644 platform/macos/sdk/es.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/fi.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/fr.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/gl.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/he.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/hu.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/ja.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/lt.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/mapbox.pdf delete mode 100644 platform/macos/sdk/mapbox_helmet.pdf delete mode 100644 platform/macos/sdk/nl.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/pl.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/pt-BR.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/pt-PT.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/ru.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/sv.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/uk.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/vi.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/zh-Hans.lproj/Localizable.strings delete mode 100644 platform/macos/sdk/zh-Hant.lproj/Localizable.strings delete mode 100644 platform/macos/src/MGLAnnotationImage.h delete mode 100644 platform/macos/src/MGLAnnotationImage.m delete mode 100644 platform/macos/src/MGLAnnotationImage_Private.h delete mode 100644 platform/macos/src/MGLAttributionButton.h delete mode 100644 platform/macos/src/MGLAttributionButton.mm delete mode 100644 platform/macos/src/MGLCompassCell.h delete mode 100644 platform/macos/src/MGLCompassCell.m delete mode 100644 platform/macos/src/MGLMapView+IBAdditions.h delete mode 100644 platform/macos/src/MGLMapView+IBAdditions.mm delete mode 100644 platform/macos/src/MGLMapView+Impl.h delete mode 100644 platform/macos/src/MGLMapView+Impl.mm delete mode 100644 platform/macos/src/MGLMapView+OpenGL.h delete mode 100644 platform/macos/src/MGLMapView+OpenGL.mm delete mode 100644 platform/macos/src/MGLMapView.h delete mode 100644 platform/macos/src/MGLMapView.mm delete mode 100644 platform/macos/src/MGLMapViewDelegate.h delete mode 100644 platform/macos/src/MGLMapView_Private.h delete mode 100644 platform/macos/src/MGLOpenGLLayer.h delete mode 100644 platform/macos/src/MGLOpenGLLayer.mm delete mode 100644 platform/macos/src/Mapbox.h delete mode 100644 platform/macos/src/NSColor+MGLAdditions.h delete mode 100644 platform/macos/src/NSColor+MGLAdditions.mm delete mode 100644 platform/macos/src/NSImage+MGLAdditions.h delete mode 100644 platform/macos/src/NSImage+MGLAdditions.mm delete mode 100644 platform/macos/src/NSProcessInfo+MGLAdditions.h delete mode 100644 platform/macos/src/NSProcessInfo+MGLAdditions.m delete mode 100644 platform/macos/test/Info.plist delete mode 100644 platform/macos/test/MGLAnnotationTests.m delete mode 100644 platform/macos/test/MGLAttributionButtonTests.m delete mode 100644 platform/macos/test/MGLMapViewDelegateIntegrationTests.swift diff --git a/.gitmodules b/.gitmodules index 93a163d230a..22a5f023791 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,6 @@ [submodule "mapbox-gl-js"] path = mapbox-gl-js url = https://github.com/mapbox/mapbox-gl-js.git -[submodule "platform/ios/vendor/mapbox-events-ios"] - path = platform/ios/vendor/mapbox-events-ios - url = https://github.com/mapbox/mapbox-events-ios.git [submodule "vendor/nunicode"] path = vendor/nunicode url = https://bitbucket.org/alekseyt/nunicode.git @@ -55,9 +52,6 @@ [submodule "platform/android/vendor/mapbox-events-android"] path = platform/android/vendor/mapbox-events-android url = https://github.com/mapbox/mapbox-events-android.git -[submodule "platform/darwin/docs/theme"] - path = platform/darwin/docs/theme - url = https://github.com/mapbox/jazzy-theme.git [submodule "vendor/mapbox-base"] path = vendor/mapbox-base url = https://github.com/mapbox/mapbox-base.git diff --git a/circle.yml b/circle.yml index 4504d8ab323..a53b2c1a412 100644 --- a/circle.yml +++ b/circle.yml @@ -225,12 +225,6 @@ commands: command: | brew install cmake ccache glfw ninja pkgconfig qt chargepoint/xcparse/xcparse brew cask install google-cloud-sdk - - run: - name: Code Generators macOS - command: | - platform/darwin/scripts/generate-style-code.js - platform/darwin/scripts/update-examples.js - git add -A && git diff --staged --exit-code | tee nitpick.patch config: parameters: config_params: diff --git a/platform/darwin/app/LimeGreenStyleLayer.h b/platform/darwin/app/LimeGreenStyleLayer.h deleted file mode 100644 index 35480963a47..00000000000 --- a/platform/darwin/app/LimeGreenStyleLayer.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface LimeGreenStyleLayer : MGLOpenGLStyleLayer - -@end diff --git a/platform/darwin/app/LimeGreenStyleLayer.m b/platform/darwin/app/LimeGreenStyleLayer.m deleted file mode 100644 index 98e96381b60..00000000000 --- a/platform/darwin/app/LimeGreenStyleLayer.m +++ /dev/null @@ -1,58 +0,0 @@ -#import "LimeGreenStyleLayer.h" -@import GLKit; - -@implementation LimeGreenStyleLayer { - GLuint _program; - GLuint _vertexShader; - GLuint _fragmentShader; - GLuint _buffer; - GLuint _aPos; -} - -- (void)didMoveToMapView:(MGLMapView *)mapView { - static const GLchar *vertexShaderSource = "attribute vec2 a_pos; void main() { gl_Position = vec4(a_pos, 1, 1); }"; - static const GLchar *fragmentShaderSource = "void main() { gl_FragColor = vec4(0, 0.5, 0, 0.5); }"; - - _program = glCreateProgram(); - _vertexShader = glCreateShader(GL_VERTEX_SHADER); - _fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); - - glShaderSource(_vertexShader, 1, &vertexShaderSource, NULL); - glCompileShader(_vertexShader); - glAttachShader(_program, _vertexShader); - glShaderSource(_fragmentShader, 1, &fragmentShaderSource, NULL); - glCompileShader(_fragmentShader); - glAttachShader(_program, _fragmentShader); - glLinkProgram(_program); - _aPos = glGetAttribLocation(_program, "a_pos"); - - GLfloat triangle[] = { 0, 0.5, 0.5, -0.5, -0.5, -0.5 }; - glGenBuffers(1, &_buffer); - glBindBuffer(GL_ARRAY_BUFFER, _buffer); - glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(GLfloat), triangle, GL_STATIC_DRAW); -} - -- (void)drawInMapView:(MGLMapView *)mapView withContext:(MGLStyleLayerDrawingContext)context { - glUseProgram(_program); - glBindBuffer(GL_ARRAY_BUFFER, _buffer); - glEnableVertexAttribArray(_aPos); - glVertexAttribPointer(_aPos, 2, GL_FLOAT, GL_FALSE, 0, NULL); - glDisable(GL_STENCIL_TEST); - glDisable(GL_DEPTH_TEST); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); -} - -- (void)willMoveFromMapView:(MGLMapView *)mapView { - if (!_program) { - return; - } - - glDeleteBuffers(1, &_buffer); - glDetachShader(_program, _vertexShader); - glDetachShader(_program, _fragmentShader); - glDeleteShader(_vertexShader); - glDeleteShader(_fragmentShader); - glDeleteProgram(_program); -} - -@end diff --git a/platform/darwin/docs/guides/For Style Authors.md.ejs b/platform/darwin/docs/guides/For Style Authors.md.ejs deleted file mode 100644 index 8df541d0f7a..00000000000 --- a/platform/darwin/docs/guides/For Style Authors.md.ejs +++ /dev/null @@ -1,446 +0,0 @@ -<% - const os = locals.os; - const iOS = os === 'iOS'; - const macOS = os === 'macOS'; - const cocoaPrefix = iOS ? 'UI' : 'NS'; - const layers = locals.layers; - const renamedProperties = locals.renamedProperties; --%> - -# Information for Style Authors - -A _style_ defines a map view’s content and appearance. If you’ve authored a -style using -[Mapbox Studio’s Styles editor](https://www.mapbox.com/studio/styles/) or as -JSON in a text editor, you can use that style in this SDK and manipulate it -afterwards in code. This document provides information you can use to ensure a -seamless transition from Mapbox Studio to your application. - -<% if (iOS) { -%> -## Designing for iOS -<% } else { -%> -## Designing for macOS -<% } -%> - -When designing your style, consider the context in which your application shows -the style. There are a number of considerations specific to <%- os %> that may -not be obvious when designing your style in Mapbox Studio on the Web. A map view -is essentially a graphical user interface element, so many of same issues in -user interface design also apply when designing a map style. - -### Color - -Ensure sufficient contrast in your application’s user interface when your map -style is present. Standard user interface elements such as toolbars, sidebars, -and sheets often overlap the map view with a translucent, blurred background, so -make sure the contents of these elements remain legible with the map view -underneath. -<% if (iOS) { -%> -The user location annotation view, the attribution button, any buttons in -callout views, and any items in the navigation bar are influenced by your -application’s tint color, so choose a tint color that contrasts well with your -map style. -<% } -%> -If you intend your style to be used in the dark, consider the impact that Night -Shift may have on your style’s colors. - -### Typography and graphics - -<% if (iOS) { -%> -Choose font and icon sizes appropriate to iOS devices. iPhones and iPads have -smaller screens than the typical browser window in which you would use Mapbox -Studio, especially when multitasking is enabled. Your user’s viewing distance -may be shorter than on a desktop computer. Some of your users may use the Larger -Dynamic Type and Accessibility Text features to increase the size of all text on -the device. You can use the -[runtime styling API](#manipulating-the-style-at-runtime) to adjust your style’s - font and icon sizes accordingly. -<% } -%> - -Design sprite images and choose font weights that look crisp on both -standard-resolution displays and Retina displays. This SDK supports the same -resolutions as <%- os %>. -<% if (iOS) { -%> -Standard-resolution displays are limited to older devices that your application -may or may not support, depending on its minimum deployment target. -<% } else { -%> -Standard-resolution displays are often found on external monitors. Even with -built-in screens, some of your users may use the Larger Text option in Display -Preferences, which is essentially standard resolution, to make text easier to -read. -<% } -%> - -Icon and text labels should be legible regardless of the map’s orientation. -<% if (iOS) { -%> -By default, this SDK makes it easy for your users to rotate or tilt the map -using multitouch gestures. -<% } else { -%> -By default, this SDK makes it easy for your users to rotate or tilt the map -using multitouch trackpad gestures or keyboard shortcuts. -<% } -%> -If you do not intend your design to accommodate rotation and tilting, disable -these gestures using the `MGLMapView.rotateEnabled` and -`MGLMapView.pitchEnabled` properties, respectively, or the corresponding -inspectables in Interface Builder. - -### Interactivity - -Pay attention to whether elements of your style appear to be interactive. -<% if (iOS) { -%> -A text label may look like a tappable button merely due to matching your -application’s tint color or the default blue tint color. -<% } else { -%> -An icon with a shadow or shading effect may appear to be clickable. -<% } -%> -You can make an icon or text label interactive by installing a gesture -recognizer and performing feature querying (e.g., -`-[MGLMapView visibleFeaturesAtPoint:]`) to get details about the selected -feature. -<% if (macOS) { -%> -You can install cursor or tooltip tracking rectangles to indicate interactive -features as an alternative to prominent hover effects. -<% } -%> - -<% if (iOS) { -%> -Make sure your users can easily distinguish any interactive elements from the -surrounding map, such as pins, the user location annotation view, or a route -line. Avoid relying on hover effects to indicate interactive elements. Leave -enough room between interactive elements to accommodate imprecise tapping -gestures. -<% } else { -%> -Make sure your users can easily distinguish any interactive elements from the -surrounding map, such as pins or a route line. If your application supports -printing, consider using the -[runtime styling API](#manipulating-the-style-at-runtime) to optimize your style -for ink economy before printing the map view. -<% } -%> - -<% if (iOS) { -%> -For more information about user interface design, consult Apple’s -[_iOS Human Interface Guidelines_](https://developer.apple.com/ios/human-interface-guidelines/). -To learn more about designing maps for mobile devices, see [Nathaniel Slaughter's blog post](https://www.mapbox.com/blog/designing-maps-for-mobile-devices/) on -the subject. -<% } else { -%> -For more information about user interface design, consult Apple’s -[_macOS Human Interface Guidelines_](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/OSXHIGuidelines/). -<% } -%> - -## Applying your style - -You set an `MGLMapView` object’s style either in code, by setting the -`MGLMapView.styleURL` property, or in Interface Builder, by setting the “Style -URL” inspectable. The URL must point to a local or remote style JSON file. The -style JSON file format is defined by the -[Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/). This -SDK supports the functionality defined by version 8 of the specification unless -otherwise noted in the -[style specification documentation](https://www.mapbox.com/mapbox-gl-style-spec/). - -## Manipulating the style at runtime - -The _runtime styling API_ enables you to modify every aspect of a style -dynamically as a user interacts with your application. The style itself is -represented at runtime by an `MGLStyle` object, which provides access to various -`MGLSource` and `MGLStyleLayer` objects that represent content sources and style -layers, respectively. -<% if (iOS) { -%> -For more information about the capabilities exposed by the runtime styling API, -see “[Runtime Styling](https://www.mapbox.com/ios-sdk/maps/overview/runtime-styling/)”. -<% } -%> - -The names of runtime styling classes and properties on <%- os %> are generally -consistent with the style specification and Mapbox Studio’s Styles editor. Any -exceptions are listed in this document. - -To avoid conflicts with Objective-C keywords or Cocoa terminology, this SDK uses -the following terms for concepts defined in the style specification: - -In the style specification | In the SDK ----------------------------|--------- -bounds | coordinate bounds -filter | predicate -function type | interpolation mode -id | identifier -image | style image -layer | style layer -property | attribute -SDF icon | template image -source | content source - -## Specifying the map’s content - -Each source defined by a style JSON file is represented at runtime by a content -source object that you can use to initialize new style layers. The content -source object is a member of one of the following subclasses of `MGLSource`: - -In style JSON | In the SDK ---------------|----------- -`vector` | `MGLVectorTileSource` -`raster` | `MGLRasterTileSource` -`raster-dem` | `MGLRasterDEMSource` -`geojson` | `MGLShapeSource` -`image` | `MGLImageSource` - -`canvas` and `video` sources are not supported. - -### Tile sources - -Raster and vector tile sources may be defined in TileJSON configuration files. -This SDK supports the properties defined in the style specification, which are a -subset of the keys defined in version 2.1.0 of the -[TileJSON](https://github.com/mapbox/tilejson-spec/tree/master/2.1.0) -specification. As an alternative to authoring a custom TileJSON file, you may -supply various tile source options when creating a raster or vector tile source. -These options are detailed in the `MGLTileSourceOption` documentation: - -In style JSON | In TileJSON | In the SDK ---------------|---------------|----------- -`url` | — | `configurationURL` parameter in `-[MGLTileSource initWithIdentifier:configurationURL:]` -`tiles` | `tiles` | `tileURLTemplates` parameter in `-[MGLTileSource initWithIdentifier:tileURLTemplates:options:]` -`minzoom` | `minzoom` | `MGLTileSourceOptionMinimumZoomLevel` -`maxzoom` | `maxzoom` | `MGLTileSourceOptionMaximumZoomLevel` -`bounds` | `bounds` | `MGLTileSourceOptionCoordinateBounds` -`tileSize` | — | `MGLTileSourceOptionTileSize` -`attribution` | `attribution` | `MGLTileSourceOptionAttributionHTMLString` (but consider specifying `MGLTileSourceOptionAttributionInfos` instead for improved security) -`scheme` | `scheme` | `MGLTileSourceOptionTileCoordinateSystem` -`encoding` | – | `MGLTileSourceOptionDEMEncoding` - -### Shape sources - -Shape sources also accept various options. These options are detailed in the -`MGLShapeSourceOption` documentation: - -In style JSON | In the SDK ------------------|----------- -`data` | `url` parameter in `-[MGLShapeSource initWithIdentifier:URL:options:]` -`maxzoom` | `MGLShapeSourceOptionMaximumZoomLevel` -`buffer` | `MGLShapeSourceOptionBuffer` -`tolerance` | `MGLShapeSourceOptionSimplificationTolerance` -`cluster` | `MGLShapeSourceOptionClustered` -`clusterRadius` | `MGLShapeSourceOptionClusterRadius` -`clusterMaxZoom` | `MGLShapeSourceOptionMaximumZoomLevelForClustering` -`lineMetrics` | `MGLShapeSourceOptionLineDistanceMetrics` - -To create a shape source from local GeoJSON data, first -[convert the GeoJSON data into a shape](working-with-geojson-data.html#converting-geojson-data-into-shape-objects), -then use the `-[MGLShapeSource initWithIdentifier:shape:options:]` method. - -### Image sources - -Image sources accept a non-axis aligned quadrilateral as their geographic coordinates. -These coordinates, in `MGLCoordinateQuad`, are described in counterclockwise order, -in contrast to the clockwise order defined in the style specification. - -## Configuring the map content’s appearance - -Each layer defined by the style JSON file is represented at runtime by a style -layer object, which you can use to refine the map’s appearance. The style layer -object is a member of one of the following subclasses of `MGLStyleLayer`: - -In style JSON | In the SDK ---------------|----------- -<% for (const layer of layers) { -%> -`<%- layer.type %>` | `MGL<%- camelize(layer.type) %>StyleLayer` -<% } -%> - -You configure layout and paint attributes by setting properties on these style -layer objects. The property names generally correspond to the style JSON -properties, except for the use of camelCase instead of kebab-case. Properties -whose names differ from the style specification are listed below: -<% for (const type in renamedProperties) { -%> -<% if (renamedProperties.hasOwnProperty(type)) { -%> - -### <%- camelize(unhyphenate(type)) %> style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -<% for (const name in renamedProperties[type]) { -%> -<% if (renamedProperties[type].hasOwnProperty(name)) { -%> -`<%- originalPropertyName(renamedProperties[type][name]) %>` | `MGL<%- camelize(type) %>StyleLayer.<%- objCName(renamedProperties[type][name]) %>` | `MGL<%- camelize(type) %>StyleLayer.<%- objCGetter(renamedProperties[type][name]) %>` -<% } -%> -<% } -%> -<% } -%> -<% } -%> - -## Setting attribute values - -Each property representing a layout or paint attribute is set to an -`NSExpression` object. `NSExpression` objects play the same role as -[expressions in the Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions), -but you create the former using a very different syntax. `NSExpression`’s format -string syntax is reminiscent of a spreadsheet formula or an expression in a -database query. See the -“[Predicates and Expressions](predicates-and-expressions.html)” guide for an -overview of the expression support in this SDK. This SDK no longer supports -style functions; use expressions instead. - -### Constant values in expressions - -In contrast to the JSON type that the style specification defines for each -layout or paint property, the style value object often contains a more specific -Foundation or Cocoa type. General rules for attribute types are listed below. -Pay close attention to the SDK documentation for the attribute you want to get -or set. - -In style JSON | In Objective-C | In Swift ---------------|-----------------------|--------- -Color | `<%- cocoaPrefix %>Color` | `<%- cocoaPrefix %>Color` -Enum | `NSString` | `String` -String | `NSString` | `String` -Boolean | `NSNumber.boolValue` | `NSNumber.boolValue` -Number | `NSNumber.floatValue` | `NSNumber.floatValue` -Array (`-dasharray`) | `NSArray` | `[Float]` -Array (`-font`) | `NSArray` | `[String]` -<% if (iOS) { -%> -Array (`-offset`, `-translate`) | `NSValue.CGVectorValue` | `NSValue.cgVectorValue` -Array (`-padding`) | `NSValue.UIEdgeInsetsValue` | `NSValue.uiEdgeInsetsValue` -<% } else { -%> -Array (`-offset`, `-translate`) | `NSValue` containing `CGVector` | `NSValue` containing `CGVector` -Array (`-padding`) | `NSValue.edgeInsetsValue` | `NSValue.edgeInsetsValue` -<% } -%> - -For padding attributes, note that the arguments to -<% if (iOS) { -%> -`UIEdgeInsetsMake()` in Objective-C and `UIEdgeInsets(top:left:bottom:right:)` -in Swift -<% } else { -%> -`NSEdgeInsetsMake()` in Objective-C and `EdgeInsets(top:left:bottom:right:)` in -Swift -<% } -%> -are specified in counterclockwise order, in contrast to the clockwise order -defined by the style specification. - -<% if (macOS) { -%> -Additionally, on macOS, a screen coordinate of (0, 0) is located at the -lower-left corner of the screen. Therefore, a positive `CGVector.dy` means an -offset or translation upward, while a negative `CGVector.dy` means an offset or -translation downward. This is the reverse of how `CGVector` is interpreted on -iOS. - -<% } -%> -### Expression operators - -Many expression operators defined in the style specification have corresponding -symbols to be used with the `+[NSExpression expressionWithFormat:]`, -`+[NSExpression expressionForFunction:arguments:]`, or -`+[NSExpression expressionForFunction:selectorName:arguments:]` method: - -In style specification | Method, function, or predicate type | Format string syntax ------------------------|-------------------------------------|--------------------- -`array` | | -`boolean` | | -`collator` | `NSComparisonPredicateOptions` | `'Québec' =[cd] 'QUEBEC'` -`literal` | `+[NSExpression expressionForConstantValue:]` | `%@` representing `NSArray` or `NSDictionary` -`number` | | -`string` | | -`to-boolean` | `boolValue` | -`to-color` | | `CAST(var, '<%- cocoaPrefix %>Color')` -`to-number` | `mgl_numberWithFallbackValues:` | `CAST(zipCode, 'NSNumber')` -`to-string` | `stringValue` | `CAST(ele, 'NSString')` -`typeof` | | -`geometry-type` | `NSExpression.geometryTypeVariableExpression` | `$geometryType` -`id` | `NSExpression.featureIdentifierVariableExpression` | `$featureIdentifier` -`properties` | `NSExpression.featureAttributesVariableExpression` | `$featureAttributes` -`at` | `objectFrom:withIndex:` | `array[n]` -`get` | `+[NSExpression expressionForKeyPath:]` | Key path -`has` | `mgl_does:have:` | `mgl_does:have:(self, 'key')` -`length` | `count:` | `count({1, 2, 2, 3, 4, 7, 9})` -`!` | `NSNotPredicateType` | `NOT (p0 OR … OR pn)` -`!=` | `NSNotEqualToPredicateOperatorType` | `key != value` -`<` | `NSLessThanPredicateOperatorType` | `key < value` -`<=` | `NSLessThanOrEqualToPredicateOperatorType` | `key <= value` -`==` | `NSEqualToPredicateOperatorType` | `key == value` -`>` | `NSGreaterThanPredicateOperatorType` | `key > value` -`>=` | `NSGreaterThanOrEqualToPredicateOperatorType` | `key >= value` -`all` | `NSAndPredicateType` | `p0 AND … AND pn` -`any` | `NSOrPredicateType` | `p0 OR … OR pn` -`case` | `+[NSExpression expressionForConditional:trueExpression:falseExpression:]` or `MGL_IF` or `+[NSExpression mgl_expressionForConditional:trueExpression:falseExpresssion:]` | `TERNARY(1 = 2, YES, NO)` or `MGL_IF(1 = 2, YES, 2 = 2, YES, NO)` -`coalesce` | `mgl_coalesce:` | `mgl_coalesce({x, y, z})` -`match` | `MGL_MATCH` or `+[NSExpression mgl_expressionForMatchingExpression:inDictionary:defaultExpression:]` | `MGL_MATCH(x, 0, 'zero match', 1, 'one match', 'two match', 'default')` -`interpolate` | `mgl_interpolate:withCurveType:parameters:stops:` or `+[NSExpression mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` | -`step` | `mgl_step:from:stops:` or `+[NSExpression mgl_expressionForSteppingExpression:fromExpression:stops:]` | -`let` | `mgl_expressionWithContext:` | `MGL_LET('ios', 11, 'macos', 10.13, $ios + $macos)` -`var` | `+[NSExpression expressionForVariable:]` | `$variable` -`concat` | `mgl_join:` or `-[NSExpression mgl_expressionByAppendingExpression:]` | `mgl_join({'Old', ' ', 'MacDonald'})` -`downcase` | `lowercase:` | `lowercase('DOWNTOWN')` -`upcase` | `uppercase:` | `uppercase('Elysian Fields')` -<% if (macOS) { -%> -`rgb` | `+[NSColor colorWithCalibratedRed:green:blue:alpha:]` | -`rgba` | `+[NSColor colorWithCalibratedRed:green:blue:alpha:]` | -<% } else { -%> -`rgb` | `+[UIColor colorWithRed:green:blue:alpha:]` | -`rgba` | `+[UIColor colorWithRed:green:blue:alpha:]` | -<% } -%> -`to-rgba` | | `CAST(noindex(var), 'NSArray')` -`-` | `from:subtract:` | `2 - 1` -`*` | `multiply:by:` | `1 * 2` -`/` | `divide:by:` | `1 / 2` -`%` | `modulus:by:` | -`^` | `raise:toPower:` | `2 ** 2` -`+` | `add:to:` | `1 + 2` -`abs` | `abs:` | `abs(-1)` -`acos` | `mgl_acos:` | `mgl_acos(1)` -`asin` | `mgl_asin:` | `mgl_asin(0)` -`atan` | `mgl_atan:` | `mgl_atan(20)` -`ceil` | `ceiling:` | `ceiling(0.99999)` -`cos` | `mgl_cos:` | `mgl_cos(0)` -`e` | | `%@` representing `NSNumber` containing `M_E` -`floor` | `floor:` | `floor(-0.99999)` -`ln` | `ln:` | `ln(2)` -`ln2` | | `%@` representing `NSNumber` containing `M_LN2` -`log10` | `log:` | `log(1)` -`log2` | `mgl_log2:` | `mgl_log2(1024)` -`max` | `max:` | `max({1, 2, 2, 3, 4, 7, 9})` -`min` | `min:` | `min({1, 2, 2, 3, 4, 7, 9})` -`pi` | | `%@` representing `NSNumber` containing `M_PI` -`round` | `mgl_round:` | `mgl_round(1.5)` -`sin` | `mgl_sin:` | `mgl_sin(0)` -`sqrt` | `sqrt:` | `sqrt(2)` -`tan` | `mgl_tan:` | `mgl_tan(0)` -`zoom` | `NSExpression.zoomLevelVariableExpression` | `$zoomLevel` -`heatmap-density` | `NSExpression.heatmapDensityVariableExpression` | `$heatmapDensity` -`line-progress` | `NSExpression.lineProgressVariableExpression` | `$lineProgress` -`format` | `+[NSExpression mgl_expressionForAttributedExpressions:]` or `mgl_attributed:` | `mgl_attributed({x, y, z})` - -For operators that have no corresponding `NSExpression` symbol, use the -`MGL_FUNCTION()` format string syntax. - -## Filtering sources - -You can filter a shape or vector tile source by setting the -`MGLVectorStyleLayer.predicate` property to an `NSPredicate` object. Below is a -table of style JSON operators and the corresponding operators used in the -predicate format string: - -In style JSON | In the format string ---------------------------|--------------------- -`["has", key]` | `key != nil` -`["!has", key]` | `key == nil` -`["==", key, value]` | `key == value` -`["!=", key, value]` | `key != value` -`[">", key, value]` | `key > value` -`[">=", key, value]` | `key >= value` -`["<", key, value]` | `key < value` -`["<=", key, value]` | `key <= value` -`["in", key, v0, …, vn]` | `key IN {v0, …, vn}` -`["!in", key, v0, …, vn]` | `NOT key IN {v0, …, vn}` -`["all", f0, …, fn]` | `p0 AND … AND pn` -`["any", f0, …, fn]` | `p0 OR … OR pn` -`["none", f0, …, fn]` | `NOT (p0 OR … OR pn)` - -## Specifying the text format - -The following format attributes are defined as `NSString` constans that you -can use to update the formatting of `MGLSymbolStyleLayer.text` property. - -In style JSON | In Objective-C | In Swift ---------------|-----------------------|--------- -`text-font` | `MGLFontNamesAttribute` | `.fontNamesAttribute` -`font-scale` | `MGLFontScaleAttribute` | `.fontScaleAttribute` -`text-color` | `MGLFontColorAttribute` | `.fontColorAttribute` - -See the “[Predicates and Expressions](predicates-and-expressions.html)” guide for -a full description of the supported operators and operand types. diff --git a/platform/darwin/docs/guides/Migrating to Expressions.md.ejs b/platform/darwin/docs/guides/Migrating to Expressions.md.ejs deleted file mode 100644 index 3ea5b33d734..00000000000 --- a/platform/darwin/docs/guides/Migrating to Expressions.md.ejs +++ /dev/null @@ -1,212 +0,0 @@ -<% - const os = locals.os; - const iOS = os === 'iOS'; - const macOS = os === 'macOS'; - const cocoaPrefix = iOS ? 'UI' : 'NS'; - const guide = 'MigratingToExpressions'; --%> - - -# Migrating from Style Functions to Expressions - -[Runtime Styling](https://www.mapbox.com/ios-sdk/maps/overview/runtime-styling/) enables you to modify every aspect of the map’s appearance dynamically as a user interacts with your application. Developers can specify in advance how a layout or paint attribute will vary as the zoom level changes or how the appearance of individual features vary based on metadata provided by a content source. - -With Mapbox Maps SDK for <%- iOS ? 'iOS v4.0.0' : 'macOS v0.7.0' %>, style functions have been replaced with expressions. These provide even more tools for developers who want to style their maps dynamically. This guide outlines some tips for migrating from style functions to expressions, and offers an overview of some things that developers can do with expressions. - -An expression is represented at runtime by the `NSExpression` class. Expressions can be used to style paint and layout properties based on zoom level, data attributes, or a combination of the two. - -A constant expression can also be assigned to a style property. For example, the opacity of a fill style layer can be set to a constant value between 0 and 1. - -The documentation for each individual style layer property notes which non-constant expressions are enabled for that property. Style functions supported four interpolation modes: exponential, interval, categorical, and identity. - -This guide uses earthquake data from the [U.S. Geological Survey](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php). Under each interpolation mode, the style function implementation will be shown, followed by the current syntax. - -For more information about how to work with GeoJSON data in our <%- os %> SDK, please see our [working with GeoJSON data](working-with-geojson-data.html) guide. To learn more about supported expressions, see our ["Predicates and Expressions"](predicates-and-expressions.html) guide. The "Predicates and Expressions" guide also outlines Mapbox custom functions that can be used to dynamically style a map. - -## Stops -Stops are dictionary keys that are associated with layer attribute values. Constant values no longer need to be wrapped as style values when they are values in a stops dictionary. - - -Style function syntax: - -```swift -let stops = [ - 0: MGLStyleValue(rawValue: .yellow), - 2.5: MGLStyleValue(rawValue: .orange), - 5: MGLStyleValue(rawValue: .red), - 7.5: MGLStyleValue(rawValue: .blue), - 10: MGLStyleValue(rawValue: .white), -] -``` - -Current syntax: -<%- guideExample(guide, 'Stops', os) %> - - -## Interpolation mode - -Style functions supported four interpolation modes: exponential/linear, interval, categorical, and identity. For more information about supported custom expressions, please see the "Predicates and Expressions" guide. - -### Linear - -`+[NSExpression(MGLAdditions) mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` takes the interpolation type as a parameter. If you previously used the default interpolation base, use the curve type `MGLExpressionInterpolationMode.linear`. See the [`mgl_interpolate:withCurveType:parameters:stops:`](predicates-and-expressions.html#code-mgl_interpolate-withcurvetype-parameters-stops-code) documentation for more details. - -The stops dictionary below, shows colors that continuously shift from yellow to orange to red to blue to white based on the attribute value. - -Style function syntax: - -```swift -let url = URL(string: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson")! -let symbolSource = MGLSource(identifier: "source") -let symbolLayer = MGLSymbolStyleLayer(identifier: "place-city-sm", source: symbolSource) - -let source = MGLShapeSource(identifier: "earthquakes", url: url, options: nil) -mapView.style?.addSource(source) - -let stops = [ - 0: MGLStyleValue(rawValue: .yellow), - 2.5: MGLStyleValue(rawValue: .orange), - 5: MGLStyleValue(rawValue: .red), - 7.5: MGLStyleValue(rawValue: .blue), - 10: MGLStyleValue(rawValue: .white), -] - -let layer = MGLCircleStyleLayer(identifier: "circles", source: source) -layer.circleColor = MGLStyleValue(interpolationMode: .exponential, - sourceStops: stops, - attributeName: "mag", - options: [.defaultValue: MGLStyleValue(rawValue: .green)]) -layer.circleRadius = MGLStyleValue(rawValue: 10) -mapView.style?.insertLayer(layer, below: symbolLayer) -``` - -Current syntax: - -<%- guideExample(guide, 'Linear', os) %> - -### Exponential - -If you previously used an interpolation base greater than `0` (other than `1`), you can use `MGLExpressionInterpolationMode.exponential` as the curve type for `+[NSExpression(MGLAdditions) mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` or `'exponential'` as the curve type for [`mgl_interpolate:withCurveType:parameters:stops:`](predicates-and-expressions.html#code-mgl_interpolate-withcurvetype-parameters-stops-code). The `parameters` argument takes that interpolation base. This interpolates between values exponentially, creating an accelerated ramp effect. - -Here’s a visualization from Mapbox Studio (see [Mapbox Studio and iOS](https://www.mapbox.com/ios-sdk/maps/overview/mapbox-studio/)) comparing interpolation base values of `1.5` and `0.5` based on zoom. In order to convert camera style functions, use `$zoomLevel` or `MGL_FUNCTION('zoomLevel')` as the attribute key. - - - - -The example below increases a layer’s `circleRadius` exponentially based on a map’s zoom level. The interpolation base is `1.5`. - -Style function syntax: - -```swift -let stops = [ - 12: MGLStyleValue(rawValue: 0.5), - 14: MGLStyleValue(rawValue: 2), - 18: MGLStyleValue(rawValue: 18), -] - -layer.circleRadius = MGLStyleValue(interpolationMode: .exponential, - cameraStops: stops, - options: [.interpolationBase: 1.5]) -``` - -Current syntax: - -<%- guideExample(guide, 'Exponential', os) %> - -### Interval - -Steps, or intervals, create a range using the keys from the stops dictionary. The range is from the given key to just less than the next key. The attribute values that fall into that range are then styled using the layout or paint value assigned to that key. You can use the `+[NSExpression(MGLAdditions) mgl_expressionForSteppingExpression:fromExpression:stops:]` method or the custom function [`mgl_step:from:stops:`](predicates-and-expressions.html#code-mgl_step-from-stops-code) for cases where you previously used interval interpolation mode. The first parameter takes the feature attribute name and the second parameter (`from:`) optionally takes the default or fallback value for that function. The final parameter takes a stops dictionary as an argument. - -When we use the stops dictionary given above with an `'mgl_step:from:stops:'`, we create ranges where earthquakes with a magnitude of 0 to just less than 2.5 would be yellow, 2.5 to just less than 5 would be orange, and so on. - -Style function syntax: - -```swift -let stops = [ - 0: MGLStyleValue(rawValue: .yellow), - 2.5: MGLStyleValue(rawValue: .orange), - 5: MGLStyleValue(rawValue: .red), - 7.5: MGLStyleValue(rawValue: .blue), - 10: MGLStyleValue(rawValue: .white), -] - -layer.circleColor = MGLStyleValue(interpolationMode: .interval, - sourceStops: stops, - attributeName: "mag", - options: [.defaultValue: MGLStyleValue(rawValue: .green)]) -```` - -Current syntax: - -<%- guideExample(guide, 'Interval', os) %> - -### Categorical - -Categorical interpolation mode took a stops dictionary. If the value for a specified feature attribute name matched one in that stops dictionary, the style value for that attribute value would be used. Categorical style functions can now be replaced with `MGL_MATCH`. - -`MGL_MATCH` takes an initial condition, which in this case is an attribute key. This is followed by possible matches for that key and the value to assign to the layer property if there is a match. The final argument can be a default style value that is to be used if none of the specified values match. - -There are three main types of events in the USGS dataset: earthquakes, explosions, and quarry blasts. In this case, the color of the circle layer will be determined by the type of event, with a default value of blue to catch any events that do not fall into any of those categories. - -Style function syntax: - -```swift -let categoricalStops = [ - "earthquake": MGLStyleValue(rawValue: .orange), - "explosion": MGLStyleValue(rawValue: .red), - "quarry blast": MGLStyleValue(rawValue: .yellow), -] - -layer.circleColor = MGLStyleValue(interpolationMode: .categorical, - sourceStops: categoricalStops, - attributeName: "type", - options: [.defaultValue: MGLStyleValue(rawValue: .blue)]) -``` - -Current syntax: -<%- guideExample(guide, 'Categorical', os) %> - -If your use case does not require a default value, you can either apply a predicate to your layer prior to styling it, or use the format string `"valueForKeyPath:"`. - -### Identity - -Identity interpolation mode used the attribute’s value as the style layer property value. In this example, you might set the `circleRadius` to the earthquake’s magnitude. In order to use a feature attribute value to style a layer property, set the property value to `[NSExpression expressionForKeyPath:]`, which take the feature attribute name as an argument. - -Style function syntax: - -```swift -layer.circleRadius = MGLStyleValue(interpolationMode: .identity, - sourceStops: nil, - attributeName: "mag", - options: [.defaultValue: MGLStyleValue(rawValue: 0)]) -``` - -Current syntax: -<%- guideExample(guide, 'Identity', os) %> - -![identity mode](img/data-driven-styling/identity.png) - -Some built-in functions can be applied to attribute values to style layer property values. To set the circle radius to three times the earthquake’s magnitude, create a `multiply:by:` function that takes the attribute value and the multiplier as arguments, or use a format string. - -<%- guideExample(guide, 'Multiply', os) %> - -![multiply magnitude](img/data-driven-styling/multiply.png) - -You can also cast attribute values in order to use them. One example is to cast an integer as an `NSString` and use it as a text value. - -<%- guideExample(guide, 'Cast', os) %> - -![cast a value](img/data-driven-styling/cast.png) - -### Constant Values - -For constant values that do not necessarily change based on camera or attribute values, use `[NSExpression expressionForConstantValue:]` (previously `[MGLStyleValue valueWithRawValue:]`). - -## Resources - -* [USGS Earthquake Feed](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php) -* [For Style Authors](for-style-authors.html) -* [Predicates and Expressions](predicates-and-expressions.html) diff --git a/platform/darwin/docs/guides/Predicates and Expressions.md b/platform/darwin/docs/guides/Predicates and Expressions.md deleted file mode 100644 index b2e01b94db3..00000000000 --- a/platform/darwin/docs/guides/Predicates and Expressions.md +++ /dev/null @@ -1,950 +0,0 @@ -# Predicates and expressions - -Style layers use predicates and expressions to determine what to display and how -to format it. _Predicates_ are represented by the same `NSPredicate` class that -filters results from Core Data or items in an `NSArray` in Objective-C. -Predicates are based on _expressions_, represented by the `NSExpression` class. -Somewhat unusually, style layers also use expressions on their own. - -This document discusses the specific subset of the predicate and expression -syntax supported by this SDK. For a more general introduction to predicates and -expressions, consult the -_[Predicate Programming Guide](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Predicates/AdditionalChapters/Introduction.html)_ -in Apple developer documentation. For additional detail on how this SDK has -extended the `NSExpression` class, consult the [`NSExpression(MGLAdditions)`](./Categories/NSExpression(MGLAdditions).html) -section of this documentation. - -## Using predicates to filter vector data - -Most style layer classes display `MGLFeature` objects that you can show or hide -based on the feature’s attributes. Use the `MGLVectorStyleLayer.predicate` -property to include only the features in the source layer that satisfy a -condition that you define. - -### Operators - -The following comparison operators are supported: - -`NSPredicateOperatorType` | Format string syntax -----------------------------------------------|--------------------- -`NSEqualToPredicateOperatorType` | `key = value`
`key == value` -`NSGreaterThanOrEqualToPredicateOperatorType` | `key >= value`
`key => value` -`NSLessThanOrEqualToPredicateOperatorType` | `key <= value`
`key =< value` -`NSGreaterThanPredicateOperatorType` | `key > value` -`NSLessThanPredicateOperatorType` | `key < value` -`NSNotEqualToPredicateOperatorType` | `key != value`
`key <> value` -`NSBetweenPredicateOperatorType` | `key BETWEEN { 32, 212 }` - -To test whether a feature has or lacks a specific attribute, compare the -attribute to `NULL` or `NIL`. Predicates created using the -`+[NSPredicate predicateWithValue:]` method are also supported. String -operators and custom operators are not supported. - -The following compound operators are supported: - -`NSCompoundPredicateType` | Format string syntax ---------------------------|--------------------- -`NSAndPredicateType` | `predicate1 AND predicate2`
`predicate1 && predicate2` -`NSOrPredicateType` | `predicate1 OR predicate2`
predicate1 || predicate2 -`NSNotPredicateType` | `NOT predicate`
`!predicate` - -The following aggregate operators are supported: - -`NSPredicateOperatorType` | Format string syntax -----------------------------------|--------------------- -`NSInPredicateOperatorType` | `key IN { 'iOS', 'macOS', 'tvOS', 'watchOS' }` -`NSContainsPredicateOperatorType` | `{ 'iOS', 'macOS', 'tvOS', 'watchOS' } CONTAINS key` - -The following comparison predicate options are supported for comparison and -aggregate operators that are used in the predicate: - -`NSComparisonPredicateOptions` | Format string syntax -----------------------------------------|--------------------- -`NSCaseInsensitivePredicateOption` | `'QUEBEC' =[c] 'Quebec'` -`NSDiacriticInsensitivePredicateOption` | `'Québec' =[d] 'Quebec'` - -Other comparison predicate options are unsupported, namely `l` -(for locale sensitivity) and `n` (for normalization). A comparison is -locale-sensitive as long as it is case- or diacritic-insensitive. - -### Operands - -Operands in predicates can be [variables](#variables), [key paths](#key-paths), -or almost anything else that can appear -[inside an expression](#using-expressions-to-configure-layout-and-paint-attributes). - -Automatic type casting is not performed. Therefore, a feature only matches a -predicate if its value for the attribute in question is of the same type as the -value specified in the predicate. Use the `CAST()` operator to convert a key -path or variable into a matching type: - -* To cast a value to a number, use `CAST(key, 'NSNumber')`. -* To cast a value to a string, use `CAST(key, 'NSString')`. -* To cast a value to a color, use `CAST(key, 'UIColor')` on iOS and `CAST(key, 'NSColor')` on macOS. -* To cast an `NSColor` or `UIColor` object to an array, use `CAST(noindex(color), 'NSArray')`. - -For details about the predicate format string syntax, consult the “Predicate -Format String Syntax” chapter of the -_[Predicate Programming Guide](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Predicates/AdditionalChapters/Introduction.html)_ -in Apple developer documentation. - -## Using expressions to configure layout and paint attributes - -An expression can contain subexpressions of various types. Each of the supported -types of expressions is discussed below. - -### Constant values - -A constant value can be of any of the following types: - -In Objective-C | In Swift -----------------------|--------- -`NSColor` (macOS)
`UIColor` (iOS) | `NSColor` (macOS)
`UIColor` (iOS) -`NSString` | `String` -`NSString` | `String` -`NSNumber.boolValue` | `NSNumber.boolValue` -`NSNumber.doubleValue` | `NSNumber.doubleValue` -`NSArray` | `[Float]` -`NSArray` | `[String]` -`NSValue.CGVectorValue` (iOS)
`NSValue` containing `CGVector` (macOS) | `NSValue.cgVectorValue` (iOS)
`NSValue` containing `CGVector` (macOS) -`NSValue.UIEdgeInsetsValue` (iOS)
`NSValue.edgeInsetsValue` (macOS) | `NSValue.uiEdgeInsetsValue` (iOS)
`NSValue.edgeInsetsValue` (macOS) - -For literal floating-point values, use `-[NSNumber numberWithDouble:]` instead -of `-[NSNumber numberWithFloat:]` to avoid precision issues. - -### Key paths - -A key path expression refers to an attribute of the `MGLFeature` object being -evaluated for display. For example, if a polygon’s `MGLFeature.attributes` -dictionary contains the `floorCount` key, then the key path `floorCount` refers -to the value of the `floorCount` attribute when evaluating that particular -polygon. - -The following special attributes are also available on features that are produced -as a result of clustering multiple point features together in a shape source: - - - - - - - - - - - - - - - - - - - - - - -
AttributeTypeMeaning
clusterBoolTrue if the feature is a point cluster. If the attribute is false (or not present) then the feature should not be considered a cluster.
cluster_idNumberIdentifier for the point cluster.
point_countNumberThe number of point features in a given cluster.
- -Some characters may not be used directly as part of a key path in a format -string. For example, if a feature’s attribute is named `ISO 3166-1:2006`, an -expression format string of `lowercase(ISO 3166-1:2006)` or a predicate format -string of `ISO 3166-1:2006 == 'US-OH'` would raise an exception. Instead, use a -`%K` placeholder or the `+[NSExpression expressionForKeyPath:]` initializer: - -```objc -[NSPredicate predicateWithFormat:@"%K == 'US-OH'", @"ISO 3166-1:2006"]; -[NSExpression expressionForFunction:@"lowercase:" - arguments:@[[NSExpression expressionForKeyPath:@"ISO 3166-1:2006"]]] -``` - -```swift -NSPredicate(format: "%K == 'US-OH'", "ISO 3166-1:2006") -NSExpression(forFunction: "lowercase:", - arguments: [NSExpression(forKeyPath: "ISO 3166-1:2006")]) -``` - -### Functions - -Of the -[functions predefined](https://developer.apple.com/documentation/foundation/nsexpression/1413747-init#discussion) -by the -[`+[NSExpression expressionForFunction:arguments:]` method](https://developer.apple.com/documentation/foundation/nsexpression/1413747-init), -the following subset is supported in layer attribute values: - -Initializer parameter | Format string syntax -----------------------|--------------------- -`average:` | `average({1, 2, 2, 3, 4, 7, 9})` -`sum:` | `sum({1, 2, 2, 3, 4, 7, 9})` -`count:` | `count({1, 2, 2, 3, 4, 7, 9})` -`min:` | `min({1, 2, 2, 3, 4, 7, 9})` -`max:` | `max({1, 2, 2, 3, 4, 7, 9})` -`add:to:` | `1 + 2` -`from:subtract:` | `2 - 1` -`multiply:by:` | `1 * 2` -`divide:by:` | `1 / 2` -`modulus:by:` | `modulus:by:(1, 2)` -`sqrt:` | `sqrt(2)` -`log:` | `log(10)` -`ln:` | `ln(2)` -`raise:toPower:` | `2 ** 2` -`exp:` | `exp(0)` -`ceiling:` | `ceiling(0.99999)` -`abs:` | `abs(-1)` -`trunc:` | `trunc(6378.1370)` -`floor:` | `floor(-0.99999)` -`uppercase:` | `uppercase('Elysian Fields')` -`lowercase:` | `lowercase('DOWNTOWN')` -`noindex:` | `noindex(0 + 2 + c)` -`length:` | `length('Wapakoneta')` -`castObject:toType:` | `CAST(ele, 'NSString')`
`CAST(ele, 'NSNumber')` - -A number of [Mapbox-specific functions](#mapbox-specific-functions) are also -available. - -The following predefined functions are **not** supported: - -Initializer parameter | Format string syntax -----------------------|--------------------- -`median:` | `median({1, 2, 2, 3, 4, 7, 9})` -`mode:` | `mode({1, 2, 2, 3, 4, 7, 9})` -`stddev:` | `stddev({1, 2, 2, 3, 4, 7, 9})` -`random` | `random()` -`randomn:` | `randomn(10)` -`now` | `now()` -`bitwiseAnd:with:` | `bitwiseAnd:with:(5, 3)` -`bitwiseOr:with:` | `bitwiseOr:with:(5, 3)` -`bitwiseXor:with:` | `bitwiseXor:with:(5, 3)` -`leftshift:by:` | `leftshift:by:(23, 1)` -`rightshift:by:` | `rightshift:by:(23, 1)` -`onesComplement:` | `onesComplement(255)` -`distanceToLocation:fromLocation:` | `distanceToLocation:fromLocation:(there, here)` - -### Conditionals - -Conditionals are supported via the built-in -`+[NSExpression expressionForConditional:trueExpression:falseExpression:]` -method and `TERNARY()` operator. If you need to express multiple cases -(“else-if”), you can either nest a conditional within a conditional or use the -[`MGL_IF()`](#code-mgl_if-code) or [`MGL_MATCH()`](#code-mgl_match-code) function. - -### Aggregates - -Aggregate expressions can contain arrays of expressions. In some cases, it is -possible to use the array itself instead of wrapping the array in an aggregate -expression. - -### Variables - -The following variables are defined by this SDK for use with style layers: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VariableTypeMeaning
$featureIdentifier - Any - GeoJSON data type - - A value that uniquely identifies the feature in the containing source. - This variable corresponds to the - NSExpression.featureIdentifierVariableExpression property. -
$geometryTypeString - The type of geometry represented by the feature. A feature’s type is one - of the following strings: -
    -
  • - Point for point features, corresponding to the - MGLPointAnnotation class -
  • -
  • - LineString for polyline features, corresponding to - the MGLPolyline class -
  • -
  • - Polygon for polygon features, corresponding to the - MGLPolygon class -
  • -
- This variable corresponds to the - NSExpression.geometryTypeVariableExpression property. -
$heatmapDensityNumber - The - kernel density estimation - of a screen point in a heatmap layer; in other words, a relative measure - of how many data points are crowded around a particular pixel. This - variable can only be used with the heatmapColor property. - This variable corresponds to the - NSExpression.heatmapDensityVariableExpression property. -
$zoomLevelNumber - The current zoom level. In style layout and paint properties, this - variable may only appear as the target of a top-level interpolation or - step expression. This variable corresponds to the - NSExpression.zoomLevelVariableExpression property. -
$lineProgressNumber - A number that indicates the relative distance along a line at a given - point along the line. This variable evaluates to 0 at the beginning of the - line and 1 at the end of the line. It can only be used with the - `MGLLineStyleLayer.lineGradient` property. It corresponds to the - NSExpression.lineProgressVariableExpression property. -
- -In addition to these variables, you can define your own variables and refer to -them elsewhere in the expression. The syntax for defining a variable makes use -of a [Mapbox-specific function](#mapbox-specific-functions) that takes an -`NSDictionary` as an argument: - -```objc -[NSExpression expressionWithFormat:@"MGL_LET('floorCount', 2, $floorCount + 1)"]; -``` - -```swift -NSExpression(format: "MGL_LET(floorCount, 2, $floorCount + 1)") -``` - -## Mapbox-specific functions - -For compatibility with the Mapbox Style Specification, the following functions -are defined by this SDK. When setting a style layer property, you can call these -functions just like the predefined functions above, using either the -`+[NSExpression expressionForFunction:arguments:]` method or a convenient format -string syntax: - -### `mgl_does:have:` - -
-
Selector:
-
mgl_does:have:
-
Format string syntax:
-
mgl_does:have:(SELF, '🧀🍔') or mgl_does:have:(%@, '🧀🍔')
-
- -Returns a Boolean value indicating whether the dictionary has a value for the -key or whether the evaluated object (`SELF`) has a value for the feature -attribute. Compared to the [`mgl_has:`](#code-mgl_has-code) custom function, -that function’s target is instead passed in as the first argument to this -function. Both functions are equivalent to the syntax `key != NIL` or -`%@[key] != NIL` but can be used outside of a predicate. - -### `mgl_interpolate:withCurveType:parameters:stops:` - -
-
Selector:
-
mgl_interpolate:withCurveType:parameters:stops:
-
Format string syntax:
-
mgl_interpolate:withCurveType:parameters:stops:(x, 'linear', nil, %@)
-
- -Produces continuous, smooth results by interpolating between pairs of input and -output values (“stops”). Compared to the -[`mgl_interpolateWithCurveType:parameters:stops:`](#code-mgl_interpolatewithcurvetype-parameters-stops-code) -custom function, the input expression (that function’s target) is instead passed -in as the first argument to this function. - -### `mgl_step:from:stops:` - -
-
Selector:
-
mgl_step:from:stops:
-
Format string syntax:
-
mgl_step:from:stops:(x, 11, %@)
-
- -Produces discrete, stepped results by evaluating a piecewise-constant function -defined by pairs of input and output values ("stops"). Compared to the -[`mgl_stepWithMinimum:stops:`](#code-mgl_stepwithminimum-stops-code) custom -function, the input expression (that function’s target) is instead passed in as -the first argument to this function. - -### `mgl_join:` - -
-
Selector:
-
mgl_join:
-
Format string syntax:
-
mgl_join({'Old', 'MacDonald'})
-
- -Returns the result of concatenating together all the elements of an array in -order. Compared to the -[`stringByAppendingString:`](#code-stringbyappendingstring-code) custom -function, this function takes only one argument, which is an aggregate -expression containing the strings to concatenate. - -### `mgl_acos:` - -
-
Selector:
-
mgl_acos:
-
Format string syntax:
-
mgl_acos(1)
-
- -Returns the arccosine of the number. - -This function corresponds to the -[`acos`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-acos) -operator in the Mapbox Style Specification. - -### `mgl_asin:` - -
-
Selector:
-
mgl_asin:
-
Format string syntax:
-
mgl_asin(0)
-
- -Returns the arcsine of the number. - -This function corresponds to the -[`asin`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-asin) -operator in the Mapbox Style Specification. - -### `mgl_atan:` - -
-
Selector:
-
mgl_atan:
-
Format string syntax:
-
mgl_atan(20)
-
- -Returns the arctangent of the number. - -This function corresponds to the -[`atan`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-atan) -operator in the Mapbox Style Specification. - -### `mgl_cos:` - -
-
Selector:
-
mgl_cos:
-
Format string syntax:
-
mgl_cos(0)
-
- -Returns the cosine of the number. - -This function corresponds to the -[`cos`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-cos) -operator in the Mapbox Style Specification. - -### `mgl_log2:` - -
-
Selector:
-
mgl_log2:
-
Format string syntax:
-
mgl_log2(1024)
-
- -Returns the base-2 logarithm of the number. - -This function corresponds to the -[`log2`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-log2) -operator in the Mapbox Style Specification. - -### `mgl_round:` - -
-
Selector:
-
mgl_round:
-
Format string syntax:
-
mgl_round(1.5)
-
- -Returns the number rounded to the nearest integer. If the number is halfway -between two integers, this function rounds it away from zero. - -This function corresponds to the -[`round`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-round) -operator in the Mapbox Style Specification. - -### `mgl_sin:` - -
-
Selector:
-
mgl_sin:
-
Format string syntax:
-
mgl_sin(0)
-
- -Returns the sine of the number. - -This function corresponds to the -[`sin`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-sin) -operator in the Mapbox Style Specification. - -### `mgl_tan:` - -
-
Selector:
-
mgl_tan:
-
Format string syntax:
-
mgl_tan(0)
-
- -Returns the tangent of the number. - -This function corresponds to the -[`tan`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-tan) -operator in the Mapbox Style Specification. - -### `mgl_coalesce:` - -
-
Selector:
-
mgl_coalesce:
-
Format string syntax:
-
mgl_coalesce({x, y, z})
-
- -Returns the first non-`nil` value from an array of expressions. - -This function corresponds to the -[`coalesce`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-coalesce) -operator in the Mapbox Style Specification. - -### `mgl_attributed:` - -
-
Selector:
-
mgl_attributed:
-
Format string syntax:
-
mgl_attributed({x, y, z})
-
- -Concatenates and returns the array of `MGLAttributedExpression` objects, for use -with the `MGLSymbolStyleLayer.text` property. - -`MGLAttributedExpression.attributes` valid attributes. - - Key | Value Type - --- | --- - `MGLFontNamesAttribute` | An `NSExpression` evaluating to an `NSString` array. - `MGLFontScaleAttribute` | An `NSExpression` evaluating to an `NSNumber` value. - `MGLFontColorAttribute` | An `NSExpression` evaluating to an `UIColor` (iOS) or `NSColor` (macOS). - -This function corresponds to the -[`format`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-types-format) -operator in the Mapbox Style Specification. - -### `MGL_LET` - -
-
Selector:
-
MGL_LET:
-
Format string syntax:
-
MGL_LET('age', uppercase('old'), 'name', uppercase('MacDonald'), mgl_join({$age, $name}))
-
Arguments:
-
- Any number of variable names interspersed with their assigned - NSExpression values, followed by an NSExpression - that may contain references to those variables. -
-
- -Returns the result of evaluating an expression with the given variable values. -Compared to the -[`mgl_expressionWithContext:`](#code-mgl_expressionwithcontext-code) custom -function, this function takes the variable names and values inline before the -expression that contains references to those variables. - -### `MGL_MATCH` - -
-
Selector:
-
MGL_MATCH:
-
Format string syntax:
-
MGL_MATCH(x, 0, 'zero match', 1, 'one match', 2, 'two match', 'default')
-
Arguments:
-
- An input expression, then any number of argument pairs, followed by a default - expression. Each argument pair consists of a constant value followed by an - expression to produce as a result of matching that constant value. - If the input value is an aggregate expression, then any of the constant values within - that aggregate expression result in the following argument. This is shorthand for - specifying an argument pair for each of the constant values within that aggregate - expression. It is not possible to match the aggregate expression itself. -
-
- -Returns the result of matching the input expression against the given constant -values. - -This function corresponds to the -`+[NSExpression(MGLAdditions) mgl_expressionForMatchingExpression:inDictionary:defaultExpression:]` -method and the -[`match`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-match) -operator in the Mapbox Style Specification. - -### `MGL_IF` - -
-
Selector:
-
MGL_IF:
-
Format string syntax:
-
MGL_IF(1 = 2, YES, 2 = 2, YES, NO)
-
Arguments:
-
- Alternating NSPredicate conditionals and resulting expressions, - followed by a default expression. -
-
- -Returns the first expression that meets the condition; otherwise, the default -value. Unlike -`+[NSExpression expressionForConditional:trueExpression:falseExpression:]` or -the `TERNARY()` syntax, this function can accept multiple “if else” conditions -and is supported on iOS 8._x_ and macOS 10.10._x_; however, each conditional -passed into this function must be wrapped in a constant expression. - -This function corresponds to the -`+[NSExpression(MGLAdditions) mgl_expressionForConditional:trueExpression:falseExpresssion:]` -method and the -[`case`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-case) -operator in the Mapbox Style Specification. - -### `MGL_FUNCTION` - -
-
Selector:
-
MGL_FUNCTION:
-
Format string syntax:
-
MGL_FUNCTION('typeof', mystery)
-
Arguments:
-
- Any arguments required by the expression operator. -
-
- -An expression exactly as defined by the -[Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions). - -## Custom functions - -The following custom functions are also available with the -`+[NSExpression expressionForFunction:selectorName:arguments:]` method or the -`FUNCTION()` format string syntax. - -Some of these functions are defined as methods on their respective target -classes, but you should not call them directly outside the context of an -expression, because the result may differ from the evaluated expression’s result -or may result in undefined behavior. - -The Mapbox Style Specification defines some operators for which no custom -function is available. To use these operators in an `NSExpression`, call the -[`MGL_FUNCTION()`](#code-mgl_function-code) function with the same arguments -that the operator expects. - -### `boolValue` - -
-
Selector:
-
boolValue
-
Format string syntax:
-
FUNCTION(1, 'boolValue')
-
Target:
-
- An NSExpression that evaluates to a number or string. -
-
Arguments:
-
None.
-
- -A Boolean representation of the target: FALSE when then input is an -empty string, 0, FALSE, NIL, or NaN, -otherwise TRUE. - -### `mgl_has:` - -
-
Selector:
-
mgl_has:
-
Format string syntax:
-
FUNCTION($featureAttributes, 'mgl_has:', '🧀🍔')
-
Target:
-
- An NSExpression that evaluates to an NSDictionary - or the evaluated object (SELF). -
-
Arguments:
-
- An NSExpression that evaluates to an NSString - representing the key to look up in the dictionary or the feature attribute to - look up in the evaluated object (see MGLFeature.attributes). -
-
- -true if the dictionary has a value for the key or if the evaluated -object has a value for the feature attribute. - -This function corresponds to the -[`has`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-has) -operator in the Mapbox Style Specification. See also the -[`mgl_does:have:`](#code-mgl_does-have-code) function, which is used on its own -without the `FUNCTION()` operator. You can also check whether an object has an -attribute by comparing the key path to `NIL`, for example `cheeseburger != NIL` -or `burger.cheese != NIL` - -### `mgl_expressionWithContext:` - -
-
Selector:
-
mgl_expressionWithContext:
-
Format string syntax:
-
- FUNCTION($ios + $macos, 'mgl_expressionWithContext:', %@) with - a dictionary containing ios and macos keys -
-
Target:
-
- An NSExpression that may contain references to the variables - defined in the context dictionary. -
-
Arguments:
-
- An NSDictionary with NSStrings as keys and - NSExpressions as values. Each key is a variable name and each - value is the variable’s value within the target expression. -
-
- -The target expression with variable subexpressions replaced with the values -defined in the context dictionary. - -This function corresponds to the -[`let`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-let) -operator in the Mapbox Style Specification. See also the -[`MGL_LET`](#code-mgl_let-code) function, which is used on its own without the -`FUNCTION()` operator. - -### `mgl_interpolateWithCurveType:parameters:stops:` - -
-
Selector:
-
mgl_interpolateWithCurveType:parameters:stops:
-
Format string syntax:
-
- FUNCTION($zoomLevel, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', NIL, %@) - with a dictionary containing zoom levels or other constant values as keys -
-
Target:
-
- An NSExpression that evaluates to a number and contains a - variable or key path expression. -
-
Arguments:
-
- The first argument is one of the following strings denoting curve types: - linear, exponential, or cubic-bezier. - - The second argument is an expression providing parameters for the curve: - -
    -
  • If the curve type is linear, the argument is NIL.
  • -
  • - If the curve type is exponential, the argument is an - expression that evaluates to a number, specifying the base of the - exponential interpolation. -
  • -
  • - If the curve type is cubic-bezier, the argument is an - array or aggregate expression containing four expressions, each - evaluating to a number. The four numbers are control points for the - cubic Bézier curve. -
  • -
- - The third argument is an NSDictionary object representing the - interpolation’s stops, with numeric zoom levels as keys and expressions as - values. -
-
- -A value interpolated along the continuous mathematical function defined by the -arguments, with the target as the input to the function. - -The input expression is matched against the keys in the stop dictionary. The -keys may be feature attribute values, zoom levels, or heatmap densities. The -values may be constant values or `NSExpression` objects. For example, you can -use a stop dictionary with the zoom levels 0, 10, and 20 as keys and the colors -yellow, orange, and red as the values. - -This function corresponds to the -`+[NSExpression(MGLAdditions) mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` -method and the -[`interpolate`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-interpolate) -operator in the Mapbox Style Specification. See also the -[`mgl_interpolate:withCurveType:parameters:stops:`](#code-mgl_interpolate-withcurvetype-parameters-stops-code) -function, which is used on its own without the `FUNCTION()` operator. - -### `mgl_numberWithFallbackValues:` - -
-
Selector:
-
- mgl_numberWithFallbackValues:, - doubleValue, - floatValue, or - decimalValue -
-
Format string syntax:
-
FUNCTION(ele, 'mgl_numberWithFallbackValues:', 0)
-
Target:
-
- An NSExpression that evaluates to a Boolean value, number, or - string. -
-
Arguments:
-
- Zero or more NSExpressions, each evaluating to a Boolean value - or string. -
-
- -A numeric representation of the target: - -* If the target is NIL or FALSE, the result is 0. -* If the target is true, the result is 1. - * If the target is a string, it is converted to a number as specified by the - “[ToNumber Applied to the String Type](https://tc39.github.io/ecma262/#sec-tonumber-applied-to-the-string-type)” - algorithm of the ECMAScript Language Specification. - * If multiple values are provided, each one is evaluated in order until the - first successful conversion is obtained. - -This function corresponds to the -[`to-number`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-types-to-number) -operator in the Mapbox Style Specification. You can also cast a value to a -number by passing the value and the string `NSNumber` into the `CAST()` -operator. - -### `mgl_stepWithMinimum:stops:` - -
-
Selector:
-
mgl_stepWithMinimum:stops:
-
Format string syntax:
-
- FUNCTION($zoomLevel, 'mgl_stepWithMinimum:stops:', 0, %@) with - a dictionary with zoom levels or other constant values as keys -
-
Target:
-
- An NSExpression that evaluates to a number and contains a - variable or key path expression. -
-
Arguments:
-
- The first argument is an expression that evaluates to a number, specifying - the minimum value in case the target is less than any of the stops in the - second argument. - - The second argument is an NSDictionary object representing the - interpolation’s stops, with numeric zoom levels as keys and expressions as - values. -
-
- -The output value of the stop whose key is just less than the evaluated target, -or the minimum value if the target is less than the least of the stops’ keys. - -The input expression is matched against the keys in the stop dictionary. The -keys may be feature attribute values, zoom levels, or heatmap densities. The -values may be constant values or `NSExpression` objects. For example, you can -use a stop dictionary with the zoom levels 0, 10, and 20 as keys and the colors -yellow, orange, and red as the values. - -This function corresponds to the -`+[NSExpression(MGLAdditions) mgl_expressionForSteppingExpression:fromExpression:stops:]` -method and the -[`step`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-step) -operator in the Mapbox Style Specification. - -### `stringByAppendingString:` - -
-
Selector:
-
stringByAppendingString:
-
Format string syntax:
-
FUNCTION('Old', 'stringByAppendingString:', 'MacDonald')
-
Target:
-
An NSExpression that evaluates to a string.
-
Arguments:
-
One or more NSExpressions, each evaluating to a string.
-
- -The target string with each of the argument strings appended in order. - -This function corresponds to the -`-[NSExpression(MGLAdditions) mgl_expressionByAppendingExpression:]` -method and is similar to the -[`concat`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-concat) -operator in the Mapbox Style Specification. See also the -[`mgl_join:`](#code-mgl_join-code) function, which concatenates multiple -expressions and is used on its own without the `FUNCTION()` operator. - -### `stringValue` - -
-
Selector:
-
stringValue
-
Format string syntax:
-
FUNCTION(ele, 'stringValue')
-
Target:
-
- An NSExpression that evaluates to a Boolean value, number, or - string. -
-
Arguments:
-
None.
-
- -A string representation of the target: - -* If the target is NIL, the result is the empty string. -* If the target is a Boolean value, the result is the string `true` or `false`. -* If the target is a number, it is converted to a string as specified by the - “[NumberToString](https://tc39.github.io/ecma262/#sec-tostring-applied-to-the-number-type)” - algorithm of the ECMAScript Language Specification. -* If the target is a color, it is converted to a string of the form - `rgba(r,g,b,a)`, where r, g, and b are - numerals ranging from 0 to 255 and a ranges from 0 to 1. -* Otherwise, the target is converted to a string in the format specified by the - [`JSON.stringify()`](https://tc39.github.io/ecma262/#sec-json.stringify) - function of the ECMAScript Language Specification. - -This function corresponds to the -[`to-string`](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-types-to-string) -operator in the Mapbox Style Specification. You can also cast a value to a -string by passing the value and the string `NSString` into the `CAST()` -operator. diff --git a/platform/darwin/docs/guides/Tile URL Templates.md.ejs b/platform/darwin/docs/guides/Tile URL Templates.md.ejs deleted file mode 100644 index 2b1de65b422..00000000000 --- a/platform/darwin/docs/guides/Tile URL Templates.md.ejs +++ /dev/null @@ -1,109 +0,0 @@ -<% - const os = locals.os; - const iOS = os === 'iOS'; - //const macOS = os === 'macOS'; - //const cocoaPrefix = iOS ? 'UI' : 'NS'; --%> - -# Tile URL Templates - -`MGLTileSource` objects, specifically `MGLRasterTileSource` and -`MGLVectorTileSource` objects, can be created using an initializer that accepts -an array of tile URL templates. Tile URL templates are strings that specify the -URLs of the vector tiles or raster tile images to load. A template resembles an -absolute URL, but with any number of placeholder strings that the source -evaluates based on the tile it needs to load. For example: - -* `http://www.example.com/tiles/{z}/{x}/{y}.pbf` could be - evaluated as `http://www.example.com/tiles/14/6/9.pbf`. -* `http://www.example.com/tiles/{z}/{x}/{y}{ratio}.png` could be - evaluated as `http://www.example.com/tiles/14/6/9@2x.png`. - -Tile URL templates are also used to define tilesets in TileJSON manifests or -[`raster`](https://www.mapbox.com/mapbox-gl-js/style-spec/#sources-raster-tiles) -and -[`vector`](https://www.mapbox.com/mapbox-gl-js/style-spec/#sources-vector-tiles) -sources in style JSON files. See the -[TileJSON specification](https://github.com/mapbox/tilejson-spec/tree/master/2.2.0) -for information about tile URL templates in the context of a TileJSON or style -JSON file. - -Tile sources support the following placeholder strings in tile URL templates, -all of which are optional: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Placeholder stringDescription
{x}The index of the tile along the map’s x axis according to Spherical - Mercator projection. If the value is 0, the tile’s left edge corresponds - to the 180th meridian west. If the value is 2z−1, - the tile’s right edge corresponds to the 180th meridian east.
{y}The index of the tile along the map’s y axis according to Spherical - Mercator projection. If the value is 0, the tile’s tile edge corresponds - to arctan(sinh(π)), or approximately 85.0511 degrees north. If the value - is 2z−1, the tile’s bottom edge corresponds to - −arctan(sinh(π)), or approximately 85.0511 degrees south. The y axis is - inverted if the options parameter contains - MGLTileSourceOptionTileCoordinateSystem with a value of - MGLTileCoordinateSystemTMS.
{z}The tile’s zoom level. At zoom level 0, each tile covers the entire - world map; at zoom level 1, it covers ¼ of the world; at zoom level 2, - 1⁄16 of the world, and so on. For tiles loaded by - a MGLRasterTileSource object, whether the tile zoom level - matches the map’s current zoom level depends on the value of the - source’s tile size as specified in the - MGLTileSourceOptionTileSize key of the options - parameter.
{bbox-epsg-3857}The tile’s bounding box, expressed as a comma-separated list of the - tile’s western, southern, eastern, and northern extents according to - Spherical Mercator (EPSG:3857) projection. The bounding box is typically - used with map services conforming to the - Web Map Service - protocol.
{quadkey}A quadkey indicating both the tile’s location and its zoom level. The - quadkey is typically used with - Bing Maps. -
{ratio}A suffix indicating the resolution of the tile image. The suffix is the - empty string for standard resolution displays and @2x for -<% if (iOS) { -%> - Retina displays, including displays for which UIScreen.scale - is 3. -<% } else { -%> - Retina displays. -<% } -%> -
{prefix}Two hexadecimal digits chosen such that each visible tile has a - different prefix. The prefix is typically used for domain sharding.
- -For more information about the `{x}`, `{y}`, and `{z}` placeholder strings, -consult the -[OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames). diff --git a/platform/darwin/docs/guides/Working with GeoJSON Data.md b/platform/darwin/docs/guides/Working with GeoJSON Data.md deleted file mode 100644 index 269bb86039d..00000000000 --- a/platform/darwin/docs/guides/Working with GeoJSON Data.md +++ /dev/null @@ -1,101 +0,0 @@ -# Working with GeoJSON Data - -This SDK offers several ways to work with [GeoJSON](http://geojson.org/) files. -GeoJSON is a standard file format for representing geographic data. - -## Adding a GeoJSON file to the map - -You can use -[Mapbox Studio’s Datasets editor](https://www.mapbox.com/studio/datasets/) to -upload a GeoJSON file and include it in your custom map style. The GeoJSON data -will be hosted on Mapbox servers. When a user loads your style, the SDK -automatically loads the GeoJSON data for display. - -Alternatively, if you need to host the GeoJSON file elsewhere or bundle it with -your application, you can use a GeoJSON file as the basis of an `MGLShapeSource` -object. Pass the file’s URL into the -`-[MGLShapeSource initWithIdentifier:URL:options:]` initializer and add the -shape source to the map using the `-[MGLStyle addSource:]` method. The URL may -be a local file URL, an HTTP URL, or an HTTPS URL. - -Once you’ve added the GeoJSON file to the map via an `MGLShapeSource` object, -you can configure the appearance of its data and control what data is visible -using `MGLStyleLayer` objects. You can also -[access the data programmatically](#extracting-geojson-data-from-the-map). - -## Converting GeoJSON data into shape objects - -If you have GeoJSON data in the form of source code (also known as “GeoJSON -text”), you can convert it into an `MGLShape`, `MGLFeature`, or -`MGLShapeCollectionFeature` object that the `MGLShapeSource` class understands -natively. First, create an `NSData` object out of the source code string or file -contents, then pass that data object into the -`+[MGLShape shapeWithData:encoding:error:]` method. Finally, you can pass the -resulting shape or feature object into the -`-[MGLShapeSource initWithIdentifier:shape:options:]` initializer and add it to -the map, or you can use the object and its properties to power non-map-related -functionality in your application. - -To include multiple shapes in the source, create and pass an `MGLShapeCollection` or - `MGLShapeCollectionFeature` object to - `-[MGLShapeSource initWithIdentifier:shape:options:]`. Alternatively, use the - `-[MGLShapeSource initWithIdentifier:features:options:]` or - `-[MGLShapeSource initWithIdentifier:shapes:options:]` method to create a shape source - with an array. `-[MGLShapeSource initWithIdentifier:features:options:]` accepts only `MGLFeature` - instances, such as `MGLPointFeature` objects, whose attributes you can use when - applying a predicate to `MGLVectorStyleLayer` or configuring a style layer’s - appearance. - -## Extracting GeoJSON data from the map - -Any `MGLShape`, `MGLFeature`, or `MGLShapeCollectionFeature` object has an -`-[MGLShape geoJSONDataUsingEncoding:]` method that you can use to create a -GeoJSON source code representation of the object. You can extract a feature -object from the map using a method such as -`-[MGLMapView visibleFeaturesAtPoint:]`. - -## About GeoJSON deserialization - -The process of converting GeoJSON text into `MGLShape`, `MGLFeature`, or -`MGLShapeCollectionFeature` objects is known as “GeoJSON deserialization”. -GeoJSON geometries, features, and feature collections are known in this SDK as -shapes, features, and shape collection features, respectively. - -Each GeoJSON object type corresponds to a type provided by either this SDK or -the Core Location framework: - -GeoJSON object type | SDK type ---------------------|--------- -`Position` (longitude, latitude) | `CLLocationCoordinate2D` (latitude, longitude) -`Point` | `MGLPointAnnotation` -`MultiPoint` | `MGLPointCollection` -`LineString` | `MGLPolyline` -`MultiLineString` | `MGLMultiPolyline` -`Polygon` | `MGLPolygon` -Linear ring | `MGLPolygon.coordinates`, `MGLPolygon.interiorPolygons` -`MultiPolygon` | `MGLMultiPolygon` -`GeometryCollection` | `MGLShapeCollection` -`Feature` | `MGLFeature` -`FeatureCollection` | `MGLShapeCollectionFeature` - -A `Feature` object in GeoJSON corresponds to an instance of an `MGLShape` -subclass conforming to the `MGLFeature` protocol. There is a distinct -`MGLFeature`-conforming class for each type of geometry that a GeoJSON feature -can contain. This allows features to be used as raw shapes where convenient. For -example, some features can be added to a map view as annotations. Note that -identifiers and attributes will not be available for feature querying when a -feature is used as an annotation. - -In contrast to the GeoJSON standard, it is possible for `MGLShape` subclasses -other than `MGLPointAnnotation` to straddle the antimeridian. - -The following GeoJSON data types correspond straightforwardly to Foundation data -types when they occur as feature identifiers or property values: - -GeoJSON data type | Objective-C representation | Swift representation --------------------|----------------------------|--------------------- -`null` | `NSNull` | `NSNull` -`true`, `false` | `NSNumber.boolValue` | `Bool` -Integer | `NSNumber.unsignedLongLongValue`, `NSNumber.longLongValue` | `UInt64`, `Int64` -Floating-point number | `NSNumber.doubleValue` | `Double` -String | `NSString` | `String` diff --git a/platform/darwin/docs/img/data-driven-styling/cast.png b/platform/darwin/docs/img/data-driven-styling/cast.png deleted file mode 100644 index e5b40b4ffabb374329e0f106ef8e5f17e04278ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49974 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 RW&mH8w77y;m55=${{ZtUa+d%A diff --git a/platform/darwin/docs/img/data-driven-styling/exponential-function-1.png b/platform/darwin/docs/img/data-driven-styling/exponential-function-1.png deleted file mode 100644 index 39a8a2a1e490681259cd4151f52169ba04b22ef0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34835 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�unC&AB48QjNbfhWn&03|Mh~G4t$k{j2Osu2390R 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 {(R}L@-i!^%jPS|0jJju}QMuUbI z^4k-zv(+RScrvT^UupKaiM`vzhG7V(+8BjBq#$G0eC}p_r)?_%ox+wTbj{O0W-v*6 z*+%$)`e#yzxJ$ItBJVtr+1v5eJ1{*B*e&Z77M%VSB$3guQ{Z-SW~Qjy)};$&eYCVZ zZ_2oV=-y0dT?bDYtoxe~^F?ghU*R|Imfy1D+Zc!Fw2Bf^O!TxegXhjWJvbF|s9HOp z^&GcpCBEdaeOWS8(((Jl(>&M6+U|Glc<3#m?0pzKcP{|3-mbsK{i$5NQOZLmE~E?Iw^L(G*1ApAt?#`V%b7tnunRCwjeJQZOPZEya2_)3FU8J>PCwBNsFDSRA zkrTH3Nwu~TG8Z!GiDadHyPVmXGl>3?V)f12!2BKQME7||**~M_z+^JPGyzTNyXzaB z_*5ideL5Yh<02O9eUG@yGk%5SJ6}H%!Dc#VQD?VX?ISS#)>Y_afSG0iJ^WR#W+sUL zD{=9Z?|WYv&%}C`f9A53vD3Vy3KaIqc#jZPt<)zvKTY?P0GQvGLPnH4kLBNnyJ9y# zisT~Q7w%Y5{N5+7bvf}@4!ZH`A#y|JH~jZX$nm+Ohf&J(sp7!k`d4fMnArHFz6*Svj3Lx1D5Yi(F! zR$*H38-5?>upe==hw_C>@T zMxsN^Rn0kL6a&q46OA_SK*#!5SKDbKZ_IB_LsB1sgXwzoG4##{&N}y(Gt(2YpuEGE zWNS}pxLl=}VkE4;b+xllK`SOb_(4a?`7U<>#`HnW(*a!Y$FOAfwaZIAD2=X#GmnaF z0h3WdFo~~SSZ_F?{Do0}CXU_F@~8aZq@291&BKX6v-iz;{RydwqJy|+#qE_m+6h6w zj&YOVyG2KFlO3vq;;{g>bcgNLo7vGdT00wVFQXzl{rLd{S{wc5By)oon38A7!_*d1 z@46#rHUdM=gx=<=?6Rc-YTgI?S$7h*f>BDr;MW7W-#FM$o??L3>rR@h3(Ve56@2P& zl0B<^&@pyLKrJ@CIMKnRJ2f`>v#FK8gLriHLAZlnrMjh^yUV6{jV#dayM$vrqLb@G$PF4FTR&V-}1kqoViB-?v03mc&%0^5;Ga z#?q=Rf}Yh792PbsSB0kuyl44jz_6BzFCI+)3*H*$ab3L75Hd|TK51QwNmi&6hWfw) zETp9A2Oy-7&c4_y3YZ&5w@0OtMHoWEJz# zJYG!S^Pk`v#V#p_QZa%kxS>P4CJqc2>g6tqp1w2tPJFnZl+k&$=`)FSjZVe!CuvMx z=y(42n9_t##Sx<(S}~@*Bwv*eaGF>iz+xjkpx414zrQ|I?@dP>*A|Z8d`Yua^o)8m zC<_+zPjCrZ{=`(ncJ1KE>g9G6(F`Ou(^K*B(-*G#Sd%Br~Y>QkuD}0veEYB zzzKYFy4M>0Z^ltAPF3z=7}UNNI4%G2xFs(&O$5 zB;!k`{X%M$XrIuex-yDle-?`}j`!I+(iuE)IMK7B$nd#%%laCa@ts~%H*q}`Za$Oq zw$Pb^K*Famg6OVmb?+`q1afzLE>pbRrJt5*!Kka-K%S1<(?Wfsu{n%pYy&ExM7pmf z!iUG89<4SiB=+ztMk-a6TEQUEQP^qyTqrg=>^5Ve{w9Co$H+@t^53DqwnYT40gqC{ zLVXkKYa;~GS3GoVs=7kl}vUEYlH_iW@pD~w zzNk|6o7lO&6`Zfz?)z3G+_CUv+Cy}AzsJc$IBOafZ@SeLlADVNV}gH9|2}tf!!eZ@ zL>HSTETEOYwr{ zWbne?5VV#WX`7}Y5vO>e6$;TLLIyFclc2x`Z;iLvX)Sr>KH`v*06%sEE_85pVxGXXT*|yc2%)Z12g);$Z;ZU~T zo4xmChPOcAiLB%Xj?1E?n|>uJ8%Msrxz!C7fTi6WnHBtwYr{WCEO6D@8R zvgKFtSPNP`hgEmIL&&}llQWuLt|Bv(;0u2*5&YQ{Q;ptBBfwz;xNZjip0VEDT(m+o zPpg`D($D!PdPw7)>_MozZmUs+bo+RBO5{)mv$a&~bPo$AkW?SPcw!i|GXziQ<%;i3 zdI#p3OG)D@cQ?5xr_TG3q2G#t-0t7q+WSJ;3~g4&AEI@sMb~}Fr^;+{w@Mul7BXeq zu>&P-2X~FdX%~~2LpAM1d*QSeA>6KOcrOfNOqG~j z-*7YgpCw(D=_IZ4u5Q{^ovjV zf_XdUXctnZSyJtgsjTRz2-?O69D{hVS%|~0n#%ttZNc>DLJtcfz?GcbdBM> zRRV&zU1O&S_VWi`757#2SAj`OuInFs`vagLqN9D&T+>UsoV<%=f4%-u zTDjdfw0n{t2T8?5Lwnsu&dR(P|vo)(l`I^06H z@vd6c8fc%8pxUHsM*JJQUMEpXFJV>v@;#ttLh!0jIO-#RX;)>M1u1Z>7)k0qno~a|C1l%r!J?~=CUrH zoxIlF>5i(#USgn28nLxiI{-Xl4xYXk=@VaER{US-V^On(1F!etW@@Iy;15(&|2=f} zWjM;J<$gZY9Ju7@d`+mFyl*1X$l*`gARZ3(nj7e9Tn%cOu61_rEYFvZ>T;^BFYc;L z%*%{Iwfs-ha~Z#6m^z8T#*_^Ui%Yg?fFL})I=HZuQt>Jg(g>KfmWT2GwN6PO4#KHb zHwV}I0b}n|FJX!*b-nKl4_T%h+c;0sy{tSY&Xfvx+y0YPnq@d@VmFT%>BgKfxbxd{ z!Q_6T34h6ro*T})mM|Rl$=DQ(J-Z)DEHW^Iv3C-EahKtNFX83G<|IkMM^cR$=_+iv|%3UV(;%499(9g*bW3SIBmVT6w)=BTd z;A`l`{PmwGIPL%ro0-ljV{9UX*%J`K)zBFU*e`b%iZ9R=N~MM790d_qZF_&QI@PNt zs~?VnzAo=_;-h5Uc7dX7mt;Yxf&i{PG*cs=4aY~^Q(-92!@8-ivAlO*1RLj~tVLi> zhhx$y(PKu_K1!gayKaAnPiHqV903jQKxxbShNR#RdU9+c!}4?-@EtsyB~$*hwI7Qg zK-!+4w0=mQ|NPfAu+Z^u`PZ;qhIov)x73XnhmFL@O&<`^!~!>!z>*=T?Qt{u>K4O& zQw~=^pGP027F? zmM^lZV~Vc{`&X6$mNe7S1i4+b*Y3}=EgYZmi0@y3lo^%^56gpWJ#~^Gfe>^+k_*NiLALyUMQ*D}CK#~JfnF4AuBH8|ZA4faj@26gD!;)C z?tqY@EDZehrxl~}-G5!_Qd8JGT)rG$gecqf)S~hd3Mesi;~mCIwLk#O{|^N`ePM74 zY6yD1Jy*R0YQ2T5Q-v4NpA6Y6J*9}uS2#a?a`@Mr#?who&gx#@WcYp4paa^0F7 zSwOM>6-FIf{n;KAm?;uk#E84^{YM)H*lv9Sgnz=2_Noo{-N?P<&_<`}U`H2H&>4;p zVx)hi`?FzN4oRxpq~n3eY_`<|AaCQ}UxTr^x$?lE-_lw^YGfR%rmEAK*4Pi_=$*_H z%d=C>I&>9uWP5^jbP!X_(R~In08%Pc$ue-X2U6^Sh~~!repW()%iZk_kVGr+@#h=f zL^-1wz-K>Eq6K80NHCfTU}(X4}j3c3?v_7;{KF=@hQK`C?z%l8^n9W6M$Oy z#?cnijZ24JseD$S4)&$;x>8vSk>vk^cR+(a1w#UXw6tk_m9Wwyq;Fns>p14zIZ zcG>s|H-iQ-zl#ZF`lu);XY^gv`!sU2^PPf%0uuJ}b;RZMMO8`QGcJSDaOpd45Rh_) z?yjd1rteZg4a$Y84ZtGS9wM9+B6834>5N5;fVDKZ5{tQHeCiBiIF88Q0-sDah5?;VI0AbnFI{?qZp3Plwaf%G>S z!mic+kQblKk6>pnRDd2^T3Y_D0B{+Auc3$prniF& zoBW|$a!2q~R`M4hX~%+`pu$e#sf*R#nE6keL0Czt4~|gC=OreXkd?SCrLS^E{YiZq z%>09Avt|4?2CAGDkxB}5l&3oF*}B=i>1bdE9J~rXEltg587~`US3Xe42*i9w0VD}z zH0#3|AC#y%c6N5k4cnlM!pBXlswQ&msE<^!I=RTd+5v(?xH8YRjA&KiaBE{3MX@8%NwDYHZ0UXtc8Xpf^*BK56d#9w~X)Xu}n^Z=3*Htq3+c>akfX}TLC z$hg6z7vC$cU_(&N>xSrLcW%lTGB&d<5GHW-+!)Bllz-P(s$Dg`Hw|aV!;pz*R_gTl zyV9MdctB4}IjeyK?$Z&!t2J!%BfHRj-Q=<<^+BfduVnx1qkOm4i>KJ2lSrD9l{eml z+V6rpk)_SJ%B+QSPa)#Crv!41J4F>c6D7~>n2aIU;9jNz;Q3KxuR8zF^ZT8MdWiR< ze`OvVIPkb6lW2{@VrV5MOT%7+=T*LMJhjXDa+f9H->L(N^VVDJODP3NGyvCjquEMV zI4IC+u~~>xSX-txv0cq9@h(8{=d%i2<%Xw(RFo8?hH5&ULfyiF78VHZF>buWpt4X)0^v3zi3KHGg$6 zm??VXAQcPSANhd3nIw&U-EQc8J6 z6?9lPlS~H@{1d$+y`{StE^OY*!rYu#jgsFcS+fQMhK>ZHu)Hw3abQNMqzh(8GACZWqz`RO`b8+?d36P=Yl6N}|9*R)gGY*1vJyAH zn21npVYGCpCouqKsi=ti+yg-LtP0||OFtVIO(7tc2g?sjWL*S*=+@ygkaF`mHwe%V zc(IgZGO6nAT-tDcHO{F_CwarK`p z(=QPK;yMHkDNj(hF>8=SK1SjhDp;5LLVEL>X5w&d5L5cf8^b4eHAp%w$+PDq zG&m&Gc;N1205n<|as7A*uYZh4TR1Rm`f2F<%>s577|)}Niwnltg#F1}S%N8djneah zFZgdmic`HW1k2~G@qokT{yRyin8}w31SKRmV zS9HaiyOA`>Ohv=ROghv{x!4P%ddRq+bW10tPiGBbrj%wCcm7Sd0)i(JuOh(yT}|r^ zqYU;>VC@AkSvLnf!{Kyxb`Dp3Z;`COhd2aQDXyHkm?shD8n8KNm_5|kTcUz7?t^ry zAG2PbpC2#=;F+m~hHBl)A^!PY zHFus(Apoh&=ms#J*u-0Psc2c?({-43*K?$3x-cy1J`Kl!wNb**xVV`gzbP| zVFbD*S11qh?0ec59*-#I9Dv54T z>Nh!Mw%FOvLvt^TTn$B=UG6Gq))6iV%t4HUD|Ar{tkpLatHF({X)ueAZP}vauH!Ad zdVtY#VO!S~ziNbP%bInw*= z6_}cWJ$4-rMG3R0xhdGK)i2-mR^D*T#=IBV!$_3b`V=wpXp(EO?yFaoy9twkrp}Zq z;)^0%!6q9@d%%(+12(fsrbMo+FC=RIPtICjas)r`?hQZ`n3-Tn8HO7ElV2aA1J!|r zJZu~EZm%dIpl2gl5=+~VOdW}Mh=EYsKikyW_DbZIw4cP+_^A(d}`NOvt z1V^&ONZq@bE+;HN5H;^WL&y7OpzUSDFcdyu)LKVD_*dEz;CyjyL`Z7j7&J)%PgwOD zfNbq#brAzr=MP&#g{t$GqXD&3MfnywbHaD>hj?Iz`!DuUo|+n< z7~n5J_J7MnnrQSm3FDnH!tT!e@7ys&Up&oC^?Y>SB@;tA(8D&)6dyoSv4=AWpdYlB zG?ET-+;^>Nuy)RZ7}?Q2Qv%6MPj_et5zs1E3{O43K6+yGg9zDP4hAjko!DgVMVc9y zCUzZ8+?XFGUB$&9f3rSJK@-^{y0rPPbulTZ$2H5;pFTS z0<$^f6qowkv4Yk7a3(L|#9?of`4B*7H#Gpqqvp5u z=c7$X8H{M4#KJ>O)R=g<*8q-{-)LDgJ2G73Hb39{A@NuFQikHn7x$F0bXKf%j77t= zwox}XEj}Tp$z-!hYN@sP@x1&@f&lXy=!a&-E=p02rGpYz_N7Q1hQi|}gLJ$V9vHAb z8Ec@PhG3!EnZq^Tbh>1&LNjKI?&;GYC1%~)XuFw?bq7GsRM9UMaB)co*Q$Rky_PJ;c*J8CY>mn?khM#9w8hE)PP#^`{X zGFKujZTII-$+s7N(`iEjX9KNYR!mAxoLbW{H&5|(ky_au@3unm01rr{`aA#RdcTi4 zlAc&L{A4JZ+u~@?RykQQuJF0xKR-}cAIm2OIVDcCW$(R+`{(E906T>2`HTK61Lgq5 zpjnQ=lH&Whz8tNwyuP zh?zqCx}&)m9b(<()Vo+Qu1(RSTJqGjMNk2nK{mAWhc{~^4qV*}LEM+3xi2+UfT7f% z7db)(Zs7R+*h88b^Qaiz=!Zra#OdS?;TW9csUdd18Zp!qE-p;^zdjd{1d3R--M1`1 zTBG~$u?NAQ37QA@>Lt{o%ZcSb-GfxjBtkCykCu5s{7+q+(ZkH>?oajsvnE|mPn$c~ z?vK&$ixb20t8GP;&HgEst~iJkpj&{8AK`yj;N(gN>pDby`ga916&jooMhl#i@2`Mz z0=(ka4s@_{z+wNph?}I_@!GIaft3+m9h;aaFu(xqQ++-9<41((`x4*ZNFEa;@IN%F z!h1M)Ff3yC+t}TzBW($5$1R$$j?3r~dKeQ_`-dh#b92u+vEKQSo6N^LWFM=`NswyK ztqF-b^bj3hKk{lRo3L8RLVp7yLVC5d&e-IzzSwmTOkTRQ)qZA~p)A{se~z_(b`{^h z242MyKMa-mf`Y>7Udj_sxys`pD&}^-%md!Ne04&Mgh1KmpXZ>i!xZ_Eqth#2bC6aE z>Hg87HymSc1@tK9$x|>JYSV=x2B1JniD@y|_Yfr>-F17~@PH21y8m=ke1SBjuMg3n z{YhbbetpTUcyPY!a=;N!+G zaJ4@?OqP!~Q&JiNpe9F0RRWvU@28jM<|xU@vu7pv`FpJP1_yD!1_wVnk_Iy98uajk zo@t6Cw=1#~JtkTf&M#^W3Dm8B#jLFW^Z5n9cmDo;HD$&QHc>cB>oeu)FzYuxLmpIw z$DwX-#rFr7m+7Z&E9YlsEI)p%=vZ7d2)woo0Wv#rm0D7%Tzq}06Dc0t*?cy&6!Gfp zjEXZ;tP~Xz^7QgjC>%F?2~PXaqr#tt#|dU`G7Je-iUu_`HOX_ZA>s`E*ulb|ae|7} ztpH$u(9dszTnr}F|u;7_E$477`eOq^3ilz8D~h=KxJWJA?xrZYHzPhiB_IfOG~StEyYH>N{WyjacIa! zOKcZjgv+75I6oizl!TMS(7=Ev-sRJ_Iy;lL-)B?#S$9|0ZaZX0hh&JPseE<~tGKAB zV*0bp&iGehKOd~AlS$!;Z^m{_{btbqSLCJSU~&1TMOhnhAQ55V!bxw!*z8thKcKtA!x3FMsh|vS%+VR1`jCXG} zQbIhtp6nWL5Cq*Bz17ZeR)4~W@NP9f1gKxIq4HD!!wMbn&q5EocnjhJScxtUQ8;eB zuK=bMY0v|J<3$*%e|Tjns9NdX$V53T9JCd17q&PbdCyZDETdw z$RJIrX-$;*9^7X&O5h1M9qzkf=SOZzAVk*F(A}$&%`S6+a>(sXFk1S=kbhZwSvYE} z$uN@ElwhiI^kg{Vxgm-S>C|w2HU8Sho-AB}8~5Mc{yH6e}tF?=x=in&Z{zyVH*i3^24V00qzN-zuNI=GF7^H@X_G7{>oEV6T8QgdM{wAK+x>`=%~o6yf$$@RcRHli|?Ds zue~oeqijEv_xGOvi}OT0!{*p}ZgVJw5s2#$BJ*!8K13PViZlqN(KNR`2bvUS=CRZd zRFbxsEPuMR6aj4ET~66oo9elSbMjJLS*=a~l{$B>94*;p7AVkdx@j4(^Z>?4Azuv` z;AYt4wo7g_V_bH}w_;jGQ!8Cguk>1RTjnhnlI=8=3-mZcm-Lop2}9^3rJ4GCfq~0N zhlH3^F8)CL?jPK*-s0YA-G4v+Jr#qb(>3u=k-@_(!?(^M79K;S z^$u*XQE!7cWRX;Vp6tvz5F;2_m}^E;CkF@ zQI20khWmguQZu#tJ%%J6MJyT^3t#3NHqoDgf{^6%{h@=!i(9Jy|DKBs2s*GL@0SDA zli>faI8FqZ?DyR=&lf~e-)l}6!EELBY6>QiHIs|p!zs?E58%}t08{}W z!kX3*S#O>Z3ewuh;f}lm_r4jBYi%I;B+d9aFU&qNkC2=d?cubxuJ$W_2Bw5gDNtTQ z)B_RhS7+Xh_8E3P$tmUA{IdJ@+1^>s(bj^)tgoP=d1poB%^#xF! zGGc&^4W8gWe$K|l1t1-O$Ly5 z8FE^2CT;KT;sIbE`Jx{`ZqCm={QXCe$fuF{?avp8-o#hnyRMTWDzpKeyzI|H@_;Wp zs5{2As=2xO*sG@6* z1Hci;$;DMyTl=DB^REYC=kDg_CmumTxh!E`-tqOL4oOsOU?957890qVyG-T~O>mKBXqm!} zj*b9yjhZyxOKG3PrDt^{l|3{rPEN!Cfw+E%>J-RKMy1*4o056IIkt|DP6ccelZ%Us zCPucK{liODOFKKa`&N&J>4=qVG{2~l{#v2krR)NQLTzjm*{P|i0TMd^^Iji2Jix7x zhC(2MZVipTQ3JJYItaSCxxFt4J8}p!qnD^|ZH?ZT0c@rLfzQGpv2iv1-3Px_J$tyK zOLE^zfQBv0WsNHd23tENq8#}9*Kvn!RNGF2{M`vRD2~J{-6%}S7{U)$*L@=)D#{lD z7)pfjZsRJ`s%mG0ui7tuQnbDe<^+3u4|x29Jpco7or9hw;RrSSM39Es+G0Nj;IviK zb8|S3wzg4-3aXGAX9Jm8?H7JH`sP+}0U32Sb92lW69ji4T!j6Ban=0%{O9N=2$g+< zPxUP=LyyGuew(ZV-N#+>>U05wjj{#U2LT&k%f`|4Y0R7OQX{gHp}0W!D`u{s4m#mE z3z!Y;`)H`2qoeUN0MkiVR$6*6N+d1}y{{xaH8l>4}q58XAcs0mLxn!l(T6OG{h?*3X_lH+lRd3xx@qb9Gw0G{V6VAC+0> zFS5ILo!naT*woa?Z?VR9PH^Yopdvu&DR`=CeqljONJvOb?4de^xN3MBKvH1pY5dIHECief94KphRj?w>dYX+p7G=TE&56b@)q>M(582aBIl}W&8 z(;q=5z#;p8xI529;pvmQCgdFB_q+FSjqQ~;i2yqqgdE9=!s_J_*X$P)6$QO>%ta5V z>*7(ku!Bb?+JXS3`#iT^6}7&xu`#y+sP1lKU=tWOzPh?1MYE1j^HT(96alWME8tB7 z$SqP}K0eC@Rx4>J9-@NmwbF+NSp-n>?TD^JfS3O7%I0QK*|raqoIrlHtroEOkt09? zj`~0zz@G?ISf7g$TU=ZOsHOnkh4aJKeGarmCfJ9qu0vXHi{DS?o^>z#@5-TLC!&QZ z$b6OBC?X_9f1p4@_v8@<8oj}r7evzN$6>K&)|x*Gs;U+mc-kP9M~6!4`YhXVnU{;Q+d62bv@bGU|sa_@%e6tm?@D+ke0PQB?G4?E2=$ z+uPfb<5KSInXpAt_=>m<_uyio z;I|wh##biA&D+YZz8u>TwL7d zmKK@Mp1|u1nwx(iot&HwKYUV~i;l+skgl%uydXb+8K7{XeU?o7CrwL3L)FLGd7RJ5 z+`Pv@5<`-(FM$GhxfMT>I5eX&4{>g?p;UC1Z!F;F=a)w{Fzw^(`}O&XicN@-nCr#y zu`~g2Fb;$0NxZmWY zqymj81L+>W08m{v_$L;O#%$*a!>7!^2Yr z*efO+UIQ{X_FfRuhIzQgfxfEl?(F!m`sie5b~DxgtVlzl%)Bs`qT+?}LP#uaZ1Ns6 z+gx-WAG=si)EmQBma4QiK?irkiDt#J`LC`ui6a8s(fw-~e-yM3SBZ?`*j<_zMZpkff~;Hk?dl)3pZ6!^q0b^8wn^ zkT3VM+3EMv!w6=A);J~u|7Z|$U_iX)rzV=-0-}L=-=w{=i{{Om{zrm+&*WALSa?JP zB`vLmbFRn-E^tDv8kLqK;Ufh-AJaHgUtd_N_UYLfWmyPNYk|Eq1339mz%2Z1X@EGC z66s`Z9YOQynqb(Zwyus17}p?U85tQp2E-IUA7An$h>Mex6+OmD_pz(PmRWySZ?7{G zk*!cfiATsJAFmT^oL{b(O5NlL$e=bnEqNhl4oQSdgCANgP=ADRd{ zn^%Du8yg=#E`6Qz7`BRb^Hr4L3*Re2L9&Tr(X5oz)GtpcYAKM!g%G2S1!--T2#@$*?|cb-A#b;$^&$sHmy- zVFDXvLi-_0SJ79d0W(L1M?*=Xn6~T%Rq78g+EQnQC&IO1O#a+}>Kb?W08BJsrM0nx z=aJ&tD-IUgmAe&A{gO3pP!Esf<8Yfe3i7{z{SY7>%THybjqbt;ZHcuIhp&ZyR$%~} zRs+toc`+$XL=fu_#-Bd@3$H!+8o_@*W<~~Ue!V?ZU}?okdJYE_;XiII9Etf`85BeJ zxGX|vA=kdrr5WUSEmjF^);HAw0zFF)60lv3pB>M=&^7w_zLxoo<`)XuS<2HA|EzHJ zIE7I4P6R?#qohY0HmyqFzY=f4DAqZ2KWVW)2y4K$6ibiHRoOPG z4RU?Ul?xfb7k~*$NMx}UnLk3i3tp-7KBYj$4iX}f+gAe*(9o*2$?eZbdez+9fnD|6 zIS!KG>?+#q7nlY3Xw;H$6_#(#LyB}$-LAQd`H>`?b^moC7sx##AJnDxu;De#>x2}@ zYgEYW&;fCk`$IslomSyCvod}lL>gRx6KGICqSF_M4p&pd91v4_e;sV*39@wr+0OoZ z1YKLgoJkQSj}Qfz8mO8oIncz+5A-^A6SB2cw&Yz>a9Y`#p#i*1D3;Ys6J#a?x5-g- zBkKvBe93D@EWQ`|i6od^ebb4vm9RY7S#wtyi88M27m(B^o-cqb8hCpV0?&D)XQ|v%y zs-WEdqSJk#2N{565%4|XqIcjBV#S=~-^DZk88Xm&Uqf{QdGEkAWKy3BDHy*zYcB>n z9QE2{1oBkZXgFLo2Lxf2qY(au9>|sy$c!E)d@tR0g%s~n;Dt-(Jkj}fVlW=9`EHb;Y` zkLOr0;mWmSE8l~085jVZ28vrdCu!dkt|IeGSz*Fa`H=`FG^1G)Gfy^w?n=w`TzEn- z1V2APAcDsG!Z$yvnzCgI(t2|oY@qxIjTO~2V(89kMukkfasgev3u)ub_yTlozHg28 zBiB_%OQWE;5XzSptzCky;j5y#sIL+Y$2k0YVbS+x;n!+Bs# z!*oJ+;x{z*-dWV6#ILI{x8k2~`Tu<4LJ(Q(Khac6daGrS)jdW-1fuWaq3R%RQ4GCH zd#M=wG~_m#8TPA*FdD&BJv?3{*|o?fvL7g*Vs-t|%DAOyG~;7S5ltB#jm4b3!axci z>zm8(gC1V>_+FL=PL0N{?G&Ch1LZGu!Z@Pu2tD);qNO(YMg-U3-w|H|7L3?kp1%buqK`M zlxpxequ=J-SRiKjTLezc>+D_iPDi(fZ<>pm=N$bD2>!=13$U!2i79@640L%ZS-I~7 zCou%?)$CkLr9s(v5Va|36YOBlQS#+vBWxnjDEM;Z=a{Klb}C=`j?Z2Wcv1LA_-aa& zE3*^#*DGEIJ?;eOYl8O(`2j@ED?3|KQ6{RT{)Dxs$v;@L`0kQpf3*GC*L<8#`nMV6 z^P`N(gJm3l%v#0LtLR3(F5YvQQTyikX6gQ~}{ch;=! zxSHhYN1`#>G7d4mdqrND(7ksk1Ca`2qQHLmn2VxC@ojZd_D7!n9MxZurt1ccB&A0o zd?_N+9(J2SmqvDFW>`bb2M;mUC7e5L(?r>g)g%n#l<9_5mRV-JoL=VZ-aZ_b)@}~K z;e2e*F)K4J|9Al;nvW_x(;o7|3RsxDRZuBFT)?C_ZIJoUn z6OluR7}nVVDaDD*CssKOPreL+Y0SMlKJuI&{6!R=)12*V6;S%w9B@!9bMz5o=&WO%0NhkXG@z6A~9hXFv|c=6nGogkmqd`Xh*YRAPlbXEGe^ zIZ`U8tImcdGc(NZHw~>VTK#C;YBc^O6gjeTz1jHxXS4j)(99L z2k|D(ifXh3XHk-?2wa7S!yoA@%}`}N19>=aSn4Oqbr0{PkrX-SgZ;gb(Lnw2dr zmn9Ac!>P68YCTM98f~9F&y_KIxVSDG4=dz;V^r^L-G%&))gn~knAJeEpaKVJiZ`@U zCMhe06P~MVxjDHbU$>A@Ss72`+oiwv%w2Kg|zAbOL{pE%(J1Hi4_zHoK ziP%G2O{@#jtag(D&W5+gK(Oq!^mP4cqlOwM4_P>_jNtnoIu!6O0~{ix1G#&oN&WnR z^|uzr=rPl=QHL>~o;f$Q!#|{ToJ=H&((Z%f5HGPzqoNaQu8vAO0|aAwR-hwD#*pHw zILsT%jmzx$n;rWRR*UHp^9;0jtl;(SUlUQlS7mBp9#s- zeTGU(jJHS!ebrNh)oiOs%BkTVYRkB2=0VDbU$#G3$~-+sNsO<)$cu!qQn1l6aFf?1 zq`^Ob1iiX0FE9qtqN0hwkKxh`j*);aOI5s73dd&=$tl%8oD?xgdD&8P>AXPWcq<+7 z4lI&BXBp0J)6{z!X#vhiNK?+Cqj6k(8M(^7GG<*91e!eFE53XkhHemO{J!?4mNjc? zkaAdMwXRzise&M`n9RDV%QL9H8H|Pn^&2NPdkoZef$a$A?dmseB_7?&{2-HCZ`yBU z6l55Cr|_!z+kW}pb3=oJ^W%&7rETA|4}T}#5Z!pym(+T6P%1XjHiZqo$@yxdXa|cE z*Q_+b77Jzie7~Sy@rd4*9E6gj9FSj%L4g+-lz}@G4rhH(quQ%52~zph#HYjCPI0iW zHIcmQGb_zaIWE7P;%BRgO;lk8SrdDvS*4F0D5f55^5Hq~-{Fw9(OlUrga3vgJFZRX zAKzYam$v5C7@0#}^wQQelg!}`o_)77NL(}Vgna&+Jw>yJ4e{R+{=~A~`W+(~<&|rB zhfErgs1$#9^lG@kD@2Gm@7pIPkH3Mur*+P1oR#GAybTP%DmdYcG8+JlDPzQ~sH}J= z@xW*2TlQ_`PTChRMzT;uu-x}Qnr?faGz32^Vyl2>(u(%-qSVAgnJ%j}P9sZ7rtr2g zGjH!m!0gH@N#pW*5wPC88$iuc`HP*y#EP>06ZsY?ZMK=$t!W1fBK<@9m)V!EK{w5Z5V z#-{rjlw*WV5Btdg0w8rnvD`fb@ME1{bDvgO9V!_HekB^^Gx|F2k1HjW@h%6ZU?}bB z3zzrydufhVU6yWfezuJdg6cQ$zr!O#;J$ih=IW)|nigR&RR5rTY^hK2_xdWHd58&Z zsT6xyA>JAPsm5;*So1+l3X5^Qk`D`BD6-Zc3z#ut(}etddi9#U>WV6AB9Nareo!x; z%fr##(|*RvWlG;6iU_Ad$pO|*Pq4)j>5L4Z{wey0f#$2iKl20I8T>OLm>4Rr zc1AeK3G_Q@uz}y4)g)f}9nX)u2Pv*s)CgQ6tp~}*q-xqNzpq`I!3P;Os^UTYC4XKY zG2*%xZ#Hvqunc^EygIc=KmC*+D=l1vM{(q94QKyf;eCnuyTN0!;U2-5(O0|S7;Fp7 z>Ob4O$j?Ih%NTUp+f5T5GAT5WBh~C>jOFw4Din3!b`h70M>4%4zVD6NaN0`p=W-Zx zd_uOAU~U~H+mFE0(uCE-U1iVnlf6M_cwVvLuR&y65EB;Y>!48?*`5H8Ms8DmR;6b{ zz2Uc{)NM4FocYY!i0JJy_F(fQHC*3!&`i4V@ILCuLIuL6oK8Kt?fOoWrSf=8X- z>B;RpPquEXW4ho&w)7t@^?g?9q1<>J*Fns9D8aL;pJTq*KFEYhzqqVx(LSUjkdU#x z!|y3?d0X*PI(+A)+lbmRjb&x>ZRhd%IV$MsaX(`!N|#|Mb0Busdcx+mG=JAvB>$tS z0C9@xxk`CjzG(-s!2|_N`^?%HRCUW3$%GAO1SU-E;6}%oO^e>ZmrdXE3LoWx<*|eH z6>~OvaXGkgksBCqwTa;*vOHS+(Dz(66#5 z?XdrkKcLX=BqZtSb4hKRYBfhMuK0?%2-6nXNqpm+33il zOoiX)Bz%QeWAed1%Ts`V6T-VD;d#xBTwGU?se%P<)pupmB`6nhUmeLaS}zrTz0H>V zF~gz=f{u_~BFL`V~n8)3-p7O@G6++x=$9fZF zu`mMUQZfx~YjfQ-eTwuMxQXf2O*jJgPP0!FM{x$t*EReDI`_wEf@T zFb~wLk#4bH+;0owrMWn^f~QBi!(J(d;qK3Z;YpupSGh(OmlbjD7PRUwas& mPScHgv~M~^nr-uz0N(cgu`z4T2#`gICNHBbT_$A|`2PX95PvKH diff --git a/platform/darwin/docs/img/data-driven-styling/exponential-function.png b/platform/darwin/docs/img/data-driven-styling/exponential-function.png deleted file mode 100644 index f9824fc5e495278ee880e906675bda133c4d00de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34933 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

?TD+TVy0oDB?K^CB@ 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

6%BrS%j|5w1M(Q68G`|_F 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 - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - zero - 0 درجة - one - درجة واحدة - two - درجتان - few - %d درجات - many - %d درجة - other - %d درجة - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - zero - أقل من دقيقة - one - دقيقة واحدة - two - دقيقتان - few - %d دقائق - many - %d دقيقة - other - %d دقيقة - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - zero - أقل من ثانية - one - ثانية واحدة - two - ثانيتان - few - %d ثوان - many - %d ثانية - other - %d ثانية - - - - diff --git a/platform/darwin/resources/bg.lproj/Foundation.strings b/platform/darwin/resources/bg.lproj/Foundation.strings deleted file mode 100644 index 677e4de4446..00000000000 --- a/platform/darwin/resources/bg.lproj/Foundation.strings +++ /dev/null @@ -1,296 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@ часа"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@ часа"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "изток"; - -/* East, short */ -"COMPASS_E_SHORT" = "И"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "ийст-тен-уест"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "EbN"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "ийст-тен-саут"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "EbS"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "север-североизток"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "ССИ"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "изток-югоизток"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "ИЮИ"; - -/* North, long */ -"COMPASS_N_LONG" = "север"; - -/* North, short */ -"COMPASS_N_SHORT" = "С"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "норд-тен-ийст"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "NbE"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "норд-тен-уест"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "NbW"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "североизток"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "СИ"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "нордийст-тен-ийст"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "NEbE"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "нордийст-тен-норд"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "NEnN"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "север-североизток"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "ССИ"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "север-северозапад"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "ССЗ"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "северозапад"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "СЗ"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "нордуест-тен-норд"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "NWbN"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "нордуест-тен-уест"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "NWbW"; - -/* South, long */ -"COMPASS_S_LONG" = "юг"; - -/* South, short */ -"COMPASS_S_SHORT" = "Ю"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "саут-тен-ийст"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "SbE"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "саут-тен-уест"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "SbW"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "югоизток"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "ЮИ"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "саутийст-тен-ийст"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "SEbE"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "саутийст-тен-саут"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "SEbS"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "юг-югоизток"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "ЮЮИ"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "юг-югозапад"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "ЮЮЗ"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "югозапад"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "ЮЗ"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "саутуест-тен-саут"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "SWbS"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "саутуест-тен-уест"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "SWbW"; - -/* West, long */ -"COMPASS_W_LONG" = "запад"; - -/* West, short */ -"COMPASS_W_SHORT" = "З"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "уест-тен-норд"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "WbN"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "уест-тен-саут"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "WbS"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "запад-северозапад"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "ЗСЗ"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "запад-югозапад"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "ЗСЗ"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d градус(а)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ и %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@ и %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ изток"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ изток"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@И"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@ на %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d минута(и)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ север"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ север"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@С"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ юг"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ юг"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@Ю"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d секунда(и)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ запад"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ запад"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@З"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; diff --git a/platform/darwin/resources/bg.lproj/Foundation.stringsdict b/platform/darwin/resources/bg.lproj/Foundation.stringsdict deleted file mode 100644 index fcaf0a48c16..00000000000 --- a/platform/darwin/resources/bg.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d градус - other - %d градуса - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d минута - other - %d минути - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d секунда - other - %d секунди - - - - diff --git a/platform/darwin/resources/ca.lproj/Foundation.strings b/platform/darwin/resources/ca.lproj/Foundation.strings deleted file mode 100644 index 06bd2e82611..00000000000 --- a/platform/darwin/resources/ca.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "a les %@"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "a les %@"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "est"; - -/* East, short */ -"COMPASS_E_SHORT" = "E"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "est per nord"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "EpN"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "est per sud"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "EpS"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "est-nord-est"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "ENE"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "est-sud-est"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "ESE"; - -/* North, long */ -"COMPASS_N_LONG" = "nord"; - -/* North, short */ -"COMPASS_N_SHORT" = "N"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "nord per est"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "NpE"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "nord per oest"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "NpO"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "nord-est"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "NE"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "nord-est per est"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "NEpE"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "nord-est per nord"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "NEpN"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "nord-nord-est"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "NNE"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "nord-nord-oest"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "NNO"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "nord-oest"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "NO"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "nord-oest per nord"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "NOpN"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "nord-oest per oest"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "NOpO"; - -/* South, long */ -"COMPASS_S_LONG" = "sud"; - -/* South, short */ -"COMPASS_S_SHORT" = "S"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "sud per est"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "SpE"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "sud per oest"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "SpO"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "sud-est"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "SE"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "sud-est per est"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "SEpE"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "sud-est per sud"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "SEpS"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "sud-sud-est"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "SSE"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "sud-sud-oest"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "SSO"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "sud-oest"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "SO"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "sud-oest per sud"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "SOpS"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "sud-oest per oest"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "SOpO"; - -/* West, long */ -"COMPASS_W_LONG" = "oest"; - -/* West, short */ -"COMPASS_W_SHORT" = "O"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "oest per nord"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "OpN"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "oest per sud"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "OpS"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "oest-nord-oest"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "ONO"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "oest-sud-oest"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "OSO"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d grau(s)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ i %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@, i %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ est"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ est"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@E"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@ per %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d minut(s)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ nord"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ nord"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ sud"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ sud"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d segon(s)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ oest"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ oest"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@O"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/ca.lproj/Foundation.stringsdict b/platform/darwin/resources/ca.lproj/Foundation.stringsdict deleted file mode 100644 index 8bacec946f3..00000000000 --- a/platform/darwin/resources/ca.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d grau - other - %d graus - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d minut - other - %d minuts - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d segon - other - %d segons - - - - diff --git a/platform/darwin/resources/cs.lproj/Foundation.strings b/platform/darwin/resources/cs.lproj/Foundation.strings deleted file mode 100644 index f092bdab30f..00000000000 --- a/platform/darwin/resources/cs.lproj/Foundation.strings +++ /dev/null @@ -1,306 +0,0 @@ -/* User-friendly error description */ -"ADD_FILE_CONTENTS_FAILED_DESC" = "Unable to add offline packs from the file at %@."; - -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@ o’clock"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@ o’clock"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "east"; - -/* East, short */ -"COMPASS_E_SHORT" = "E"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "east by north"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "EbN"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "east by south"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "EbS"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "east-northeast"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "ENE"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "east-southeast"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "ESE"; - -/* North, long */ -"COMPASS_N_LONG" = "north"; - -/* North, short */ -"COMPASS_N_SHORT" = "N"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "north by east"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "NbE"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "north by west"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "NbW"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "northeast"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "NE"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "northeast by east"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "NEbE"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "northeast by north"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "NEbN"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "north-northeast"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "NNE"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "north-northwest"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "NNW"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "northwest"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "NW"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "northwest by north"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "NWbN"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "northwest by west"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "NWbW"; - -/* South, long */ -"COMPASS_S_LONG" = "south"; - -/* South, short */ -"COMPASS_S_SHORT" = "S"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "south by east"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "SbE"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "south by west"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "SbW"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "southeast"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "SE"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "southeast by east"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "SEbE"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "southeast by south"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "SEbS"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "south-southeast"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "SSE"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "south-southwest"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "SSW"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "southwest"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "SW"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "southwest by south"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "SWbS"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "southwest by west"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "SWbW"; - -/* West, long */ -"COMPASS_W_LONG" = "west"; - -/* West, short */ -"COMPASS_W_SHORT" = "W"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "west by north"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "WbN"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "west by south"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "WbS"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "west-northwest"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "WNW"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "west-southwest"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "WSW"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d degree(s)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ and %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@, and %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ east"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ east"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@E"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@ by %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d minute(s)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ north"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ north"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ south"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ south"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d second(s)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ west"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ west"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@W"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - -/* User-friendly error description; first placeholder is the source’s identifier */ -"REMOVE_SRC_FAIL_IN_USE_FMT" = "The source “%@” can’t be removed while it is in use."; - -/* User-friendly error description */ -"REMOVE_SRC_FAIL_MISMATCH_FMT" = "The source can’t be removed because its identifier, “%@”, belongs to a different source in this style."; - diff --git a/platform/darwin/resources/cs.lproj/Foundation.stringsdict b/platform/darwin/resources/cs.lproj/Foundation.stringsdict deleted file mode 100644 index 5f23fff93b3..00000000000 --- a/platform/darwin/resources/cs.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d degree - other - %d degrees - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d minute - other - %d minutes - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d second - other - %d seconds - - - - diff --git a/platform/darwin/resources/da.lproj/Foundation.strings b/platform/darwin/resources/da.lproj/Foundation.strings deleted file mode 100644 index d8d18f453cd..00000000000 --- a/platform/darwin/resources/da.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@ klokken"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@ klokken"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "øst"; - -/* East, short */ -"COMPASS_E_SHORT" = "Ø"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "øst via nord"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "ØvN"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "øst via syd"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "ØvS"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "øst-nordøst"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "ØNØ"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "øst-sydøst"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "ØSØ"; - -/* North, long */ -"COMPASS_N_LONG" = "nord"; - -/* North, short */ -"COMPASS_N_SHORT" = "N"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "nord via øst"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "NvØ"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "nord via vest"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "NvV"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "nordøst"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "NØ"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "nordøst via øst"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "NØvØ"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "nordøst via nord"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "NØvN"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "nord-nordøst"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "NNØ"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "nord-nordvest"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "NNV"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "nordvest"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "NV"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "nordvest via nord"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "NVvN"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "nordvest via vest"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "NVvW"; - -/* South, long */ -"COMPASS_S_LONG" = "syd"; - -/* South, short */ -"COMPASS_S_SHORT" = "S"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "syd via øst"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "SvØ"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "syd via vest"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "SvV"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "sydøst"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "SØ"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "sydøst via øst"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "SØvØ"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "sydøst via syd"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "SØvS"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "syd-sydøst"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "SSØ"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "syd-sydvest"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "SSV"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "sydvest"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "SV"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "sydvest via syd"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "SVvS"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "sydvest via vest"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "SVvV"; - -/* West, long */ -"COMPASS_W_LONG" = "vest"; - -/* West, short */ -"COMPASS_W_SHORT" = "V"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "vest via nord"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "VvN"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "vest via syd"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "VvS"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "vest-nordvest"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "VNV"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "vest-sydvest"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "VSV"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d grad(er)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ og %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@, og %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ øst"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ øst"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@Ø"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@ via %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d minut(ter)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ nord"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ nord"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ syd"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ syd"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d sekunde(r)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ vest"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ vest"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@V"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/da.lproj/Foundation.stringsdict b/platform/darwin/resources/da.lproj/Foundation.stringsdict deleted file mode 100644 index 17983b8aa87..00000000000 --- a/platform/darwin/resources/da.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d grad - other - %d grader - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d minut - other - %d minutter - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d sekund - other - %d sekunder - - - - diff --git a/platform/darwin/resources/de.lproj/Foundation.strings b/platform/darwin/resources/de.lproj/Foundation.strings deleted file mode 100644 index 9c7242bb72a..00000000000 --- a/platform/darwin/resources/de.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@ Uhr"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@ Uhr"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "Osten"; - -/* East, short */ -"COMPASS_E_SHORT" = "O"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "Ost zu Nord"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "OzN"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "Ost zu Süd"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "OzS"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "Ostnordost"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "ONO"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "Ostsüdost"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "OSO"; - -/* North, long */ -"COMPASS_N_LONG" = "Nord"; - -/* North, short */ -"COMPASS_N_SHORT" = "N"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "Nord zu Ost"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "NzO"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "Nord zu West"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "NzW"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "Nordost"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "NO"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "Nordost zu Ost"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "NOzO"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "Nordost zu Nord"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "NOzN"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "Nordnordost"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "NNO"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "Nordnordwest"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "NNW"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "Nordwest"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "NW"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "Nordwest zu Nord"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "NWzN"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "Nordwest zu West"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "NWzW"; - -/* South, long */ -"COMPASS_S_LONG" = "Süd"; - -/* South, short */ -"COMPASS_S_SHORT" = "S"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "Süd zu Ost"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "SzO"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "Süd zu West"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "SzW"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "Südost"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "SO"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "Südost zu Ost"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "SOzO"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "Südost zu Süd"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "SOzS"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "Südsüdost"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "SSO"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "Südsüdwest"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "SSW"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "Südwest"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "SW"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "Südwest zu Süd"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "SWzS"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "Südwest zu West"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "SWzW"; - -/* West, long */ -"COMPASS_W_LONG" = "West"; - -/* West, short */ -"COMPASS_W_SHORT" = "W"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "West zu Nord"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "WzN"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "West zu Süd"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "WzS"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "Westnordwest"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "WNW"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "Westsüdwest"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "WSW"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d Grad"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ und %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@ und %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ Ost"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ Ost"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@O"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@ zu %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d Minute(n)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ Nord"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ Nord"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ Süd"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ Süd"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d Sekunde(n)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ West"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ West"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@W"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/de.lproj/Foundation.stringsdict b/platform/darwin/resources/de.lproj/Foundation.stringsdict deleted file mode 100644 index fb9073fa968..00000000000 --- a/platform/darwin/resources/de.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d Grad - other - %d Grad - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d Minute - other - %d Minuten - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d Sekunde - other - %d Sekunden - - - - diff --git a/platform/darwin/resources/en.lproj/Foundation.stringsdict b/platform/darwin/resources/en.lproj/Foundation.stringsdict deleted file mode 100644 index 5f23fff93b3..00000000000 --- a/platform/darwin/resources/en.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d degree - other - %d degrees - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d minute - other - %d minutes - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d second - other - %d seconds - - - - diff --git a/platform/darwin/resources/es.lproj/Foundation.strings b/platform/darwin/resources/es.lproj/Foundation.strings deleted file mode 100644 index 760fb5d5c81..00000000000 --- a/platform/darwin/resources/es.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@ en punto"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@ en punto"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "este"; - -/* East, short */ -"COMPASS_E_SHORT" = "E"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "este por el norte"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "EpN"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "este por el sur"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "EpS"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "estenordeste"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "ENE"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "estesudeste"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "ESE"; - -/* North, long */ -"COMPASS_N_LONG" = "norte"; - -/* North, short */ -"COMPASS_N_SHORT" = "N"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "norte por el este"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "NpE"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "norte por el oeste"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "NpO"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "nordeste"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "NE"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "nordeste por el este"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "NEpE"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "nordeste por el norte"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "NEpN"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "nornordeste"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "NNE"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "nornoroeste"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "NNO"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "noroeste"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "NO"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "noroeste por el norte"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "NOpN"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "noroeste por el oeste"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "NOpO"; - -/* South, long */ -"COMPASS_S_LONG" = "sur"; - -/* South, short */ -"COMPASS_S_SHORT" = "S"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "sur por el este"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "SpE"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "sur por el oeste"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "SpO"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "sudeste"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "SE"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "sudeste por el este"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "SEpE"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "sudeste por el sur"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "SEpS"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "sudsudeste"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "SSE"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "sudsudoeste"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "SSO"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "sudoeste"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "SO"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "sudoeste por el sur"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "SOpS"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "sudoeste por el oeste"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "SOpO"; - -/* West, long */ -"COMPASS_W_LONG" = "oeste"; - -/* West, short */ -"COMPASS_W_SHORT" = "O"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "oeste por el norte"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "OpN"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "oeste por el sur"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "OpS"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "oesnoroeste"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "ONO"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "oesudoeste"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "OSO"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d grado(s)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ y %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@ y %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ este"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ este"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@E"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@ por %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d minuto(s)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ norte"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ norte"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ sur"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ sur"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d segundo(s)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ oeste"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ oeste"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@O"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/es.lproj/Foundation.stringsdict b/platform/darwin/resources/es.lproj/Foundation.stringsdict deleted file mode 100644 index 1c599f8bc17..00000000000 --- a/platform/darwin/resources/es.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d grado - other - %d grados - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d minuto - other - %d minutos - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d segundo - other - %d segundos - - - - diff --git a/platform/darwin/resources/fr.lproj/Foundation.strings b/platform/darwin/resources/fr.lproj/Foundation.strings deleted file mode 100644 index 1926da6bb42..00000000000 --- a/platform/darwin/resources/fr.lproj/Foundation.strings +++ /dev/null @@ -1,303 +0,0 @@ -/* User-friendly error description */ -"ADD_FILE_CONTENTS_FAILED_DESC" = "Impossible d’ajouter le contenu hors ligne à partir du fichier %@."; - -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@ h"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@ h"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@ h 00"; - -/* East, long */ -"COMPASS_E_LONG" = "est"; - -/* East, short */ -"COMPASS_E_SHORT" = "E"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "est par le nord"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "EpN"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "est par le sud"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "EpS"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "est-nord-est"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "ENE"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "est-sud-est"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "ESE"; - -/* North, long */ -"COMPASS_N_LONG" = "nord"; - -/* North, short */ -"COMPASS_N_SHORT" = "N"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "nord par l’est"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "NpE"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "nord par l’ouest"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "NpO"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "nord-est"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "NE"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "nord-est par l’est"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "NEpE"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "nord-est par le nord"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "NEpN"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "nord-nord-est"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "NNE"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "nord-nord-ouest"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "NNO"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "nord-ouest"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "NO"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "nord-ouest par le nord"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "NOpN"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "nord-ouest par l’ouest"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "NOpO"; - -/* South, long */ -"COMPASS_S_LONG" = "sud"; - -/* South, short */ -"COMPASS_S_SHORT" = "S"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "sud par l’est"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "SpE"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "sud par l’ouest"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "SpO"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "sud-est"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "SE"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "sud-est par l’est"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "SEpE"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "sud-est par le sud"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "SEpS"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "sud-sud-est"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "SSE"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "sud-sud-ouest"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "SSO"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "sud-ouest"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "SO"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "sud-ouest par le sud"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "SOpS"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "sud-ouest par l’ouest"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "SOpO"; - -/* West, long */ -"COMPASS_W_LONG" = "ouest"; - -/* West, short */ -"COMPASS_W_SHORT" = "O"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "ouest par le nord"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "OpN"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "ouest par le sud"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "OpS"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "ouest-nord-ouest"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "ONO"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "ouest-sud-ouest"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "OSO"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d degré(s)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ et %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@ et %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@ %2$@ %3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ est"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ est"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@E"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@, %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d minute(s)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ nord"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ nord"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ sud"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ sud"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d seconde(s)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ ouest"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ ouest"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@O"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - -/* User-friendly error description */ -"REMOVE_SRC_FAIL_IN_USE_FMT" = "La source « %@ » est en cours d’utilisation, impossible de la supprimer."; - diff --git a/platform/darwin/resources/fr.lproj/Foundation.stringsdict b/platform/darwin/resources/fr.lproj/Foundation.stringsdict deleted file mode 100644 index 82cb954df67..00000000000 --- a/platform/darwin/resources/fr.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d degré - other - %d degrés - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d minute - other - %d minutes - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d seconde - other - %d secondes - - - - diff --git a/platform/darwin/resources/gl.lproj/Foundation.strings b/platform/darwin/resources/gl.lproj/Foundation.strings deleted file mode 100644 index fdd9502cbd3..00000000000 --- a/platform/darwin/resources/gl.lproj/Foundation.strings +++ /dev/null @@ -1,306 +0,0 @@ -/* User-friendly error description */ -"ADD_FILE_CONTENTS_FAILED_DESC" = "Non se poden engadir paquetes sen conexión dende o ficheiro en %@."; - -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@ en punto"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@ en punto"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "leste"; - -/* East, short */ -"COMPASS_E_SHORT" = "L"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "leste polo norte"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "LpN"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "leste polo sur"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "LpS"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "leste-nordés"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "LNL"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "leste-sueste"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "LSL"; - -/* North, long */ -"COMPASS_N_LONG" = "norte"; - -/* North, short */ -"COMPASS_N_SHORT" = "N"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "norte polo leste"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "NpL"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "norte polo oeste"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "NpO"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "nordés"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "NL"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "nordés polo leste"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "NLpL"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "nordés polo norte"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "NLpN"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "norte-nordés"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "NNL"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "norte-noroeste"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "NNO"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "noroeste"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "NO"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "noroeste polo norte"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "NOpN"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "noroeste polo oeste"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "NOpO"; - -/* South, long */ -"COMPASS_S_LONG" = "sur"; - -/* South, short */ -"COMPASS_S_SHORT" = "S"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "sur polo leste"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "SpL"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "sur polo oeste"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "SpO"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "sueste"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "SL"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "sueste polo leste"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "SLpL"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "sueste polo sur"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "SLpS"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "sur-sueste"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "SSL"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "sur-suroeste"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "SSO"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "suroeste"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "SO"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "suroeste polo sur"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "SOpS"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "suroeste polo oeste"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "SOpO"; - -/* West, long */ -"COMPASS_W_LONG" = "oeste"; - -/* West, short */ -"COMPASS_W_SHORT" = "O"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "oeste polo norte"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "OpN"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "oeste polo sur"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "OpS"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "oeste-noroeste"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "ONO"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "oeste-suroeste"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "OSO"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d grao(s)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ e %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@ e %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ leste"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ leste"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@L"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@ por %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d minuto(s)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ norte"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ norte"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ sur"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ sur"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d segundo(s)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ oeste"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ oeste"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@O"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - -/* User-friendly error description; first placeholder is the source’s identifier */ -"REMOVE_SRC_FAIL_IN_USE_FMT" = "A fonte “%@” non se pode eliminar mentres está en uso."; - -/* User-friendly error description */ -"REMOVE_SRC_FAIL_MISMATCH_FMT" = "A fonte non se pode eliminar porque o seu identificador, “%@”, pertence a unha fonte diferente neste estilo."; - diff --git a/platform/darwin/resources/gl.lproj/Foundation.stringsdict b/platform/darwin/resources/gl.lproj/Foundation.stringsdict deleted file mode 100644 index 324fc987d23..00000000000 --- a/platform/darwin/resources/gl.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d grao - other - %d graos - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d minuto - other - %d minutos - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d segundo - other - %d segundos - - - - diff --git a/platform/darwin/resources/he.lproj/Foundation.strings b/platform/darwin/resources/he.lproj/Foundation.strings deleted file mode 100644 index 2f6e24d6e67..00000000000 --- a/platform/darwin/resources/he.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "שעה %@"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "שעה %@"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "מזרח"; - -/* East, short */ -"COMPASS_E_SHORT" = "מז"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "east by north"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "EbN"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "east by south"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "EbS"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "מזרח-צפון מזרח"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "מז-צ-מז"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "מזרח-דרום מזרח"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "מז-ד-מז"; - -/* North, long */ -"COMPASS_N_LONG" = "צפון"; - -/* North, short */ -"COMPASS_N_SHORT" = "צ"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "north by east"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "NbE"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "north by west"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "NbW"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "צפון מזרח"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "צ-מז"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "northeast by east"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "NEbE"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "northeast by north"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "NEbN"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "צפון-צפון מזרח"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "צ-צ-מז"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "צפון-צפון מערב"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "צ-צ-מע"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "צפון מערב"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "צ-מע"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "northwest by north"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "NWbN"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "northwest by west"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "NWbW"; - -/* South, long */ -"COMPASS_S_LONG" = "דרום"; - -/* South, short */ -"COMPASS_S_SHORT" = "ד"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "south by east"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "SbE"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "south by west"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "SbW"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "דרום מזרח"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "ד-מז"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "southeast by east"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "SEbE"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "southeast by south"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "SEbS"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "דרום-דרום מזרח"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "ד-ד-מז"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "דרום-דרום מערב"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "ד-ד-מע"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "דרום מערב"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "ד-מע"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "southwest by south"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "SWbS"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "southwest by west"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "SWbW"; - -/* West, long */ -"COMPASS_W_LONG" = "מערב"; - -/* West, short */ -"COMPASS_W_SHORT" = "מע"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "west by north"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "WbN"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "west by south"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "WbS"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "מערב-צפון מערב"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "מע-צ-מע"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "מערב-דרום מערב"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "מע-ד-מע"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d מעלה(ות)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ ו %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@, ו %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ מזרחה"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ מזרחה"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@מז"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@ על %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d דקה(ות)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ צפונה"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ צפונה"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@צ"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ דרומה"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ דרומה"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@ד"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d שניה(ות)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ מערב"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ מערב"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@מע"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/hu.lproj/Foundation.stringsdict b/platform/darwin/resources/hu.lproj/Foundation.stringsdict deleted file mode 100644 index a594100046c..00000000000 --- a/platform/darwin/resources/hu.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d fok - other - %d fok - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d perc - other - %d perc - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d másodperc - other - %d másodperc - - - - diff --git a/platform/darwin/resources/ja.lproj/Foundation.strings b/platform/darwin/resources/ja.lproj/Foundation.strings deleted file mode 100644 index 3588f38e48b..00000000000 --- a/platform/darwin/resources/ja.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@時方向"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@時方向"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "東"; - -/* East, short */ -"COMPASS_E_SHORT" = "東"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "東微北"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "東微北"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "東微南"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "東微南"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "東北東"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "東北東"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "東南東"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "東南東"; - -/* North, long */ -"COMPASS_N_LONG" = "北"; - -/* North, short */ -"COMPASS_N_SHORT" = "北"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "北微東"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "北微東"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "北微西"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "北微西"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "東北"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "東北"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "東北微東"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "東北微東"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "東北微北"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "東北微北"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "北北東"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "北北東"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "北北西"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "北北西"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "西北"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "西北"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "西北微北"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "西北微北"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "西北微西"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "西北微西"; - -/* South, long */ -"COMPASS_S_LONG" = "南"; - -/* South, short */ -"COMPASS_S_SHORT" = "南"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "南微東"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "南微東"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "南微西"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "南微西"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "東南"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "東南"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "東南微東"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "東南微東"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "東南微南"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "東南微南"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "南南東"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "南南東"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "南南西"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "南南西"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "西南"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "西南"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "西南微南"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "西南微南"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "西南微西"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "西南微西"; - -/* West, long */ -"COMPASS_W_LONG" = "西"; - -/* West, short */ -"COMPASS_W_SHORT" = "西"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "西微北"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "西微北"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "西微南"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "西微南"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "西北西"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "西北西"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "西南西"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "西南西"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d度"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@度%2$@分"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@度%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%度2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@度%2$@分%3$@秒"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@度%2$@分%3$@秒"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%度2$@分%3$@秒"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "東%@"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "東%@"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@E"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@,%2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@,%2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@,%2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d分"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "北%@"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "北%@"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "南%@"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "南%@"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d秒"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "西%@"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "西%@"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@W"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/ko.lproj/Foundation.strings b/platform/darwin/resources/ko.lproj/Foundation.strings deleted file mode 100644 index 68e6cf86fce..00000000000 --- a/platform/darwin/resources/ko.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@ 시"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@ 시"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "동쪽"; - -/* East, short */ -"COMPASS_E_SHORT" = "동"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "동미북쪽"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "동미북"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "동미남쪽"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "동미남"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "동북동쪽"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "동북동"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "동남동쪽"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "동남동"; - -/* North, long */ -"COMPASS_N_LONG" = "북쪽"; - -/* North, short */ -"COMPASS_N_SHORT" = "북"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "북미동쪽"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "북미동"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "북미서쪽"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "북미서"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "북동쪽"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "북동"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "북동미동쪽"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "북동미동"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "북동미북쪽"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "북동미북"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "북북동쪽"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "북북동"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "북북서쪽"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "북북서"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "북서쪽"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "북서"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "북서미북쪽"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "북서미북"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "북서미서쪽"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "북서미서"; - -/* South, long */ -"COMPASS_S_LONG" = "남쪽"; - -/* South, short */ -"COMPASS_S_SHORT" = "남"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "남미동쪽"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "남미동"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "남미서"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "남미서"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "남동쪽"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "남동"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "남동미동쪽"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "남동미동"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "남동미남쪽"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "남동미남"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "남남동쪽"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "남남동"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "남남서쪽"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "남남서"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "남서쪽"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "남서"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "남서미남쪽"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "남서미남"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "남서미서쪽"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "남서미서"; - -/* West, long */ -"COMPASS_W_LONG" = "서쪽"; - -/* West, short */ -"COMPASS_W_SHORT" = "서"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "서미북쪽"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "서미북"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "서미남쪽"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "서미남"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "서북서쪽"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "서북서"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "서남서쪽"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "서남서"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d 도"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ 와 %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@, 와 %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ 동쪽"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ 동쪽"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@동"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@ by %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d 분"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ 북쪽"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ 북쪽"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@북"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ 남쪽"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ 남쪽"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@남"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d 초"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ 서쪽"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ 서쪽"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@서"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "오픈스트리트맵"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "오픈스트리트맵"; - diff --git a/platform/darwin/resources/ko.lproj/Foundation.stringsdict b/platform/darwin/resources/ko.lproj/Foundation.stringsdict deleted file mode 100644 index 56d26aa949c..00000000000 --- a/platform/darwin/resources/ko.lproj/Foundation.stringsdict +++ /dev/null @@ -1,48 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - other - %d 도 - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - other - %d 분 - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - other - %d 초 - - - - diff --git a/platform/darwin/resources/lt.lproj/Foundation.strings b/platform/darwin/resources/lt.lproj/Foundation.strings deleted file mode 100644 index 2bd0baa2106..00000000000 --- a/platform/darwin/resources/lt.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "Laikas: %@"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "Laikas: %@"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "rytai"; - -/* East, short */ -"COMPASS_E_SHORT" = "R"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "rytai į šiaurę"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "RįŠ"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "rytai į pietus"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "RįP"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "rytai - šiaurės rytai"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "R-ŠR"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "rytai - pietryčiai"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "R-PR"; - -/* North, long */ -"COMPASS_N_LONG" = "šiaurė"; - -/* North, short */ -"COMPASS_N_SHORT" = "Š"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "šiaurė į rytus"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "ŠįR"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "šiaurė į vakarus"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "ŠįV"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "šiaurės rytai"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "ŠR"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "šiaurės rytai į rytus"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "ŠRįR"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "šiaurės rytai į šiaurę"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "ŠRįŠ"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "šiaurė - šiaurės rytai"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "ŠŠR"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "šiaurė - šiaurės vakarai"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "ŠŠV"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "šiaurės vakarai"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "ŠV"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "šiaurės vakarai į šiaurę"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "ŠVįŠ"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "šiaurės vakarai į vakarus"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "ŠVįV"; - -/* South, long */ -"COMPASS_S_LONG" = "pietūs"; - -/* South, short */ -"COMPASS_S_SHORT" = "P"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "pietūs į rytus"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "PįR"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "pietūs į vakarus"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "PįV"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "pietryčiai"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "PR"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "pietryčiai į rytus"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "PRįR"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "pietryčiai į pietus"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "PRįP"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "pietūs - pietryčiai"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "PPR"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "pietūs - pietvakariai"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "PPV"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "pietvakariai"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "PV"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "pietvakariai į pietus"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "PVįP"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "pietvakariai į vakarus"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "PVįV"; - -/* West, long */ -"COMPASS_W_LONG" = "vakarai"; - -/* West, short */ -"COMPASS_W_SHORT" = "V"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "vakarai į šiaurę"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "VįŠ"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "vakarai į pietus"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "VįP"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "vakarai - šiaurės vakarai"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "VŠV"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "vakarai - pietvakariai"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "VPV"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d laipsniai(-ių)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ ir %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@ ir %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ ritų ilgumos"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ į rytus"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@R"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@, %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d minutė(s)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ šiaurės platumos"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ į šiaurę"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@Š"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ pietų platumos"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ į pietus"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@P"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d sekundės(-ių)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ vakarų ilgumos"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ į vakarus"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@V"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/lt.lproj/Foundation.stringsdict b/platform/darwin/resources/lt.lproj/Foundation.stringsdict deleted file mode 100644 index 4ab9d4a8bf6..00000000000 --- a/platform/darwin/resources/lt.lproj/Foundation.stringsdict +++ /dev/null @@ -1,60 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d laipsniai - few - %d laipsniai - other - %d laipsnių - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d minutė - few - %d minutės - other - %d minučių - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d sekundė - few - %d sekundės - other - %d sekundžių - - - - diff --git a/platform/darwin/resources/pl.lproj/Foundation.stringsdict b/platform/darwin/resources/pl.lproj/Foundation.stringsdict deleted file mode 100644 index 5a4f2085624..00000000000 --- a/platform/darwin/resources/pl.lproj/Foundation.stringsdict +++ /dev/null @@ -1,66 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d stopień - few - %d stopnie - many - %d stopni - other - %d stopnia - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d minuta - few - %d minuty - many - %d minut - other - %d minuty - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d sekunda - few - %d sekundy - many - %d sekund - other - %d sekundy - - - - diff --git a/platform/darwin/resources/pt-BR.lproj/Foundation.strings b/platform/darwin/resources/pt-BR.lproj/Foundation.strings deleted file mode 100644 index 331b61dd772..00000000000 --- a/platform/darwin/resources/pt-BR.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "São %@ horas"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "São %@ horas"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "leste"; - -/* East, short */ -"COMPASS_E_SHORT" = "L"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "lest pelo norte"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "LpN"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "leste pelo sul"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "LpS"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "lés-nordeste"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "ENE"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "lés-sudeste"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "ESE"; - -/* North, long */ -"COMPASS_N_LONG" = "norte"; - -/* North, short */ -"COMPASS_N_SHORT" = "N"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "norte pelo leste"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "NpL"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "norte pelo oeste"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "NpO"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "nordeste"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "NE"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "nordeste pelo leste"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "NEpL"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "nordeste pelo norte"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "NEpN"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "nor-nordeste"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "NNE"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "nor-noroeste"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "NNO"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "noroeste"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "NO"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "noroeste pelo norte"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "NOpN"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "noroeste pelo oeste"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "NOpO"; - -/* South, long */ -"COMPASS_S_LONG" = "sul"; - -/* South, short */ -"COMPASS_S_SHORT" = "S"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "sul pelo leste"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "SpL"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "sul pelo oeste"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "SbO"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "sudeste"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "SE"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "sudeste pelo leste"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "SEpL"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "sudeste pelo sul"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "SEpS"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "sul-sudeste"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "SSE"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "su-sudoeste"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "SSO"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "sudoeste"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "SO"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "sudoeste pelo sul"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "SOpS"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "sudoeste pelo oeste"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "SOpO"; - -/* West, long */ -"COMPASS_W_LONG" = "oeste"; - -/* West, short */ -"COMPASS_W_SHORT" = "O"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "oeste pelo norte"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "OpN"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "oeste pelo sul"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "OpS"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "oés-noroeste"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "ONO"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "oés-sudoeste"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "OSO"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d grau(s)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ e %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@, e %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ leste"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ leste"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@L"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@ por %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d minuto(s)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ norte"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ norte"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ sul"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ sul"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d segundo(s)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ oeste"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ oeste"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@O"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/pt-BR.lproj/Foundation.stringsdict b/platform/darwin/resources/pt-BR.lproj/Foundation.stringsdict deleted file mode 100644 index e99e86d98d1..00000000000 --- a/platform/darwin/resources/pt-BR.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d grau - other - %d graus - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d minuto - other - %d minutos - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d segundo - other - %d segundos - - - - diff --git a/platform/darwin/resources/pt-PT.lproj/Foundation.stringsdict b/platform/darwin/resources/pt-PT.lproj/Foundation.stringsdict deleted file mode 100644 index e99e86d98d1..00000000000 --- a/platform/darwin/resources/pt-PT.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d grau - other - %d graus - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d minuto - other - %d minutos - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d segundo - other - %d segundos - - - - diff --git a/platform/darwin/resources/ru.lproj/Foundation.strings b/platform/darwin/resources/ru.lproj/Foundation.strings deleted file mode 100644 index 48424963770..00000000000 --- a/platform/darwin/resources/ru.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@ часов"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@ час."; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "восток"; - -/* East, short */ -"COMPASS_E_SHORT" = "В"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "северо-восток"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "СВ"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "юго-восток"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "ЮВ"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "восток-северо-восток"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "ВСВ"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "юго-юго-восток"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "ЮЮВ"; - -/* North, long */ -"COMPASS_N_LONG" = "север"; - -/* North, short */ -"COMPASS_N_SHORT" = "С"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "северо-восток"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "СВ"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "северо-запад"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "СЗ"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "северо-восток"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "СВ"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "восток-северо-восток"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "ВСВ"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "северо-северо-восток"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "ССВ"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "северо-северо-восток"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "ССВ"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "северо-северо-запад"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "ССЗ"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "северо-запад"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "СЗ"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "северо-северо-запад"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "ССЗ"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "запад-северо-запад"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "ЗСЗ"; - -/* South, long */ -"COMPASS_S_LONG" = "юг"; - -/* South, short */ -"COMPASS_S_SHORT" = "Ю"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "юго-восток"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "ЮВ"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "юго-запад"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "ЮЗ"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "юго-восток"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "ЮВ"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "восток-юго-восток"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "ВЮВ"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "юго-юго-восток"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "ЮЮВ"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "юго-юго-восток"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "ЮЮВ"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "юго-юго-запад"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "ЮЮЗ"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "юго-запад"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "ЮЗ"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "юго-юго-запад"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "ЮЮЗ"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "восток-юго-восток"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "ВЮВ"; - -/* West, long */ -"COMPASS_W_LONG" = "запад"; - -/* West, short */ -"COMPASS_W_SHORT" = "З"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "северо-запад"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "СЗ"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "юго-запад"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "ЮГ"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "запад-северо-запад"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "ЗСЗ"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "запад-юго-запад"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "ЗЮЗ"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d градус(ов)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ и %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@, и %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@восточной долготы"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@восточной долготы"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@E"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@,%2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d минут(а)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@северной широты"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@северной широты"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@южной широты"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@южной широты"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d секунд(а)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@западной долготы"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@западной долготы"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@W"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/ru.lproj/Foundation.stringsdict b/platform/darwin/resources/ru.lproj/Foundation.stringsdict deleted file mode 100644 index 337cea01644..00000000000 --- a/platform/darwin/resources/ru.lproj/Foundation.stringsdict +++ /dev/null @@ -1,66 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d градус - few - %d градуса - many - %d градусов - other - %d градуса - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d минута - few - %d минуты - many - %d минут - other - %d минуты - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d секунда - few - %d секунды - many - %d секунд - other - %d секунды - - - - diff --git a/platform/darwin/resources/sv.lproj/Foundation.strings b/platform/darwin/resources/sv.lproj/Foundation.strings deleted file mode 100644 index e3e7f931a80..00000000000 --- a/platform/darwin/resources/sv.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "Öst"; - -/* East, short */ -"COMPASS_E_SHORT" = "O"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "Ost till Nord"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "OtN"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "Ost till Syd"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "OtS"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "Ostnordost"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "ONO"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "Ostsydost"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "OSO"; - -/* North, long */ -"COMPASS_N_LONG" = "Nord"; - -/* North, short */ -"COMPASS_N_SHORT" = "N"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "Nord till Ost"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "NtO"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "Nord till Väst"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "NtV"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "Nordost"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "NO"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "Nordost till ost"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "NOtO"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "Nordost till nord"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "NOtN"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "Nordnordost"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "NNO"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "Nordnordväst"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "NNV"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "Nordväst"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "NV"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "Nordväst till nord"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "NVtN"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "Nordväst till väst"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "NVtV"; - -/* South, long */ -"COMPASS_S_LONG" = "Syd"; - -/* South, short */ -"COMPASS_S_SHORT" = "S"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "Syd till ost"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "StO"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "Syd till väst"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "StV"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "Sydost"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "SO"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "Sydost till ost"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "SOtO"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "Sydost till syd"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "SOtS"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "Sydsydost"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "SSO"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "Sydsydväst"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "SSV"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "Sydväst"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "SV"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "Sydväst till syd"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "SVtS"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "Sydväst till väst"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "SVtV"; - -/* West, long */ -"COMPASS_W_LONG" = "Väst"; - -/* West, short */ -"COMPASS_W_SHORT" = "V"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "Väst till nord"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "VtN"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "Väst till syd"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "VtS"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "Västnordväst"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "VNV"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "Västsydväst"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "VSV"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d grad(er)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ och %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@ och %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ Öst"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ Öst"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@O"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@ till %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d minut(er)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%dm"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%dm"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ Nord"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ Nord"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ Syd"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ Syd"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d sekund(er)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%ds"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%ds"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ Väst"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ Väst"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@W"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/sv.lproj/Foundation.stringsdict b/platform/darwin/resources/sv.lproj/Foundation.stringsdict deleted file mode 100644 index e438ca02bfd..00000000000 --- a/platform/darwin/resources/sv.lproj/Foundation.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d grad - other - %d grader - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d minut - other - %d minuter - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d sekund - other - %d sekunder - - - - diff --git a/platform/darwin/resources/uk.lproj/Foundation.strings b/platform/darwin/resources/uk.lproj/Foundation.strings deleted file mode 100644 index ded065c5648..00000000000 --- a/platform/darwin/resources/uk.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@год."; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@г."; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "схід"; - -/* East, short */ -"COMPASS_E_SHORT" = "Сх"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "північний схід"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "ПнСх"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "південний схід"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "ПдСх"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "схід - північний схід"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "Сх-ПнСх"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "схід - південний схід"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "Сх-ПдСх"; - -/* North, long */ -"COMPASS_N_LONG" = "північ"; - -/* North, short */ -"COMPASS_N_SHORT" = "Пн"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "північний схід"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "ПнСх"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "північний захід"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "ПнЗх"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "північний схід"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "ПнСх"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "північний схід - схід"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "ПнСх-Сх"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "північний счхід - північ"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "ПнСх-Пн"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "північ - північний схід"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "Пн-ПнСх"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "північ - північний захід"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "Пн-ПнЗх"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "північний захід"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "ПнЗх"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "північний захід - північ"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "ПнЗх-Пн"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "північний захід - захід"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "ПнЗх-Зх"; - -/* South, long */ -"COMPASS_S_LONG" = "південь"; - -/* South, short */ -"COMPASS_S_SHORT" = "Пд"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "південний схід"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "ПдСх"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "південний захід"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "ПдЗх"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "південний схід"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "ПдСх"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "південний схід - схід"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "ПдСх-Сх"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "південний схід - південь"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "ПдСх-Пд"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "південь - південний схід"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "Пд-ПдСх"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "південь - південний захід"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "Пд-ПдЗх"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "південний захід"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "ПдЗх"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "південний захід - південь"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "ПдЗх-Пд"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "південний захід - захід"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "ПдЗх-Зх"; - -/* West, long */ -"COMPASS_W_LONG" = "захід"; - -/* West, short */ -"COMPASS_W_SHORT" = "Зх"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "північний захід"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "ПнЗх"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "південний захід"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "ПдЗх"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "захід - північний захід"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "Зх-ПнЗх"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "захід - південний захід"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "Зх-ПдЗх"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d градус(ів)"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ та %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@, та %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ східної довготи"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ східної довготи"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@Сх"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@, %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d хвилин(а)"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ північної широти"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ північної широти"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@Пн"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ південної широти"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ південної широти"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@Пд"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d секунд(а)"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ західної довготи"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ західної довготи"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@Зх"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/uk.lproj/Foundation.stringsdict b/platform/darwin/resources/uk.lproj/Foundation.stringsdict deleted file mode 100644 index fdad193d4dd..00000000000 --- a/platform/darwin/resources/uk.lproj/Foundation.stringsdict +++ /dev/null @@ -1,60 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d градус - few - %d градуси - other - %d градусів - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d хвилина - few - %d хвилини - other - %d хвилин - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %d секунда - few - %d секунди - other - %d секунд - - - - diff --git a/platform/darwin/resources/vi.lproj/Foundation.strings b/platform/darwin/resources/vi.lproj/Foundation.strings deleted file mode 100644 index d6b161585c4..00000000000 --- a/platform/darwin/resources/vi.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@ giờ"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@ giờ"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "đông"; - -/* East, short */ -"COMPASS_E_SHORT" = "Đ"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "đông về bắc"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "ĐvB"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "đông về nam"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "ĐvN"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "đông đông bắc"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "ĐĐB"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "đông đông nam"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "ĐĐN"; - -/* North, long */ -"COMPASS_N_LONG" = "bắc"; - -/* North, short */ -"COMPASS_N_SHORT" = "B"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "bắc về đông"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "BvĐ"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "bắc về tây"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "BvT"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "đông bắc"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "ĐB"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "đông bắc về đông"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "ĐBvĐ"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "đông bắc về bắc"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "ĐBvB"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "bắc đông bắc"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "BĐB"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "bắc tây bắc"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "BTB"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "tây bắc"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "TB"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "tây bắc về bắc"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "TBvB"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "tây bắc về tây"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "TBvT"; - -/* South, long */ -"COMPASS_S_LONG" = "nam"; - -/* South, short */ -"COMPASS_S_SHORT" = "N"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "nam về đông"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "NvĐ"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "nam về tây"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "NvT"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "đông nam"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "ĐN"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "đông nam về đông"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "ĐNvĐ"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "đông nam về nam"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "ĐNvN"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "nam đông nam"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "NĐN"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "nam tây nam"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "NTN"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "tây nam"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "TN"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "tây nam về nam"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "TNvN"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "tây nam về tây"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "TNvT"; - -/* West, long */ -"COMPASS_W_LONG" = "tây"; - -/* West, short */ -"COMPASS_W_SHORT" = "T"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "tây về bắc"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "TvB"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "tây về nam"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "TvN"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "tây tây bắc"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "TTB"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "tây tây nam"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "TTN"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d độ"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@ %2$@"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@, %2$@, %3$@"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@%2$@%3$@"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%2$@%3$@"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "%@ kinh độ đông"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "%@ đông"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@Đ"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@ và %2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@, %2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@, %2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d phút"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "%@ vĩ độ bắc"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "%@ bắc"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "%@ vĩ độ nam"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "%@ nam"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@N"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d giây"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "%@ kinh độ tây"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "%@ tây"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@T"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/vi.lproj/Foundation.stringsdict b/platform/darwin/resources/vi.lproj/Foundation.stringsdict deleted file mode 100644 index d85707f7ffb..00000000000 --- a/platform/darwin/resources/vi.lproj/Foundation.stringsdict +++ /dev/null @@ -1,48 +0,0 @@ - - - - - COORD_DEG_LONG - - NSStringLocalizedFormatKey - %#@degrees@ - degrees - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - other - %d độ - - - COORD_MIN_LONG - - NSStringLocalizedFormatKey - %#@minutes@ - minutes - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - other - %d phút - - - COORD_SEC_LONG - - NSStringLocalizedFormatKey - %#@seconds@ - seconds - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - other - %d giây - - - - diff --git a/platform/darwin/resources/zh-Hans.lproj/Foundation.strings b/platform/darwin/resources/zh-Hans.lproj/Foundation.strings deleted file mode 100644 index 0c57a70d8a5..00000000000 --- a/platform/darwin/resources/zh-Hans.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@点"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@点"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "东"; - -/* East, short */ -"COMPASS_E_SHORT" = "东"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "东微北"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "东微北"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "东微南"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "东微南"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "东北偏东"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "东北偏东"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "东南偏东"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "东南偏东"; - -/* North, long */ -"COMPASS_N_LONG" = "北"; - -/* North, short */ -"COMPASS_N_SHORT" = "北"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "北微东"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "北微东"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "北微西"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "北微西"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "东北"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "东北"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "东北微东"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "东北微东"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "东北微北"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "东北微北"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "东北偏北"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "东北偏北"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "西北偏北"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "西北偏北"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "西北"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "西北"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "西北微北"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "西北微北"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "西北微西"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "西北微西"; - -/* South, long */ -"COMPASS_S_LONG" = "南"; - -/* South, short */ -"COMPASS_S_SHORT" = "南"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "南微东"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "南微东"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "南微西"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "南微西"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "东南"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "东南"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "东南微东"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "东南微东"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "东南微南"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "东南微南"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "东南偏南"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "东南偏南"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "西南偏南"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "西南偏南"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "西南"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "西南"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "西南偏南"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "西南偏南"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "西南偏西"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "西南偏西"; - -/* West, long */ -"COMPASS_W_LONG" = "西"; - -/* West, short */ -"COMPASS_W_SHORT" = "西"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "西微北"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "西微北"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "西微南"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "西微南"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "西北偏西"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "西北偏西"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "西南偏西"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "西南偏西"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d度"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@度%2$@分"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@度%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%度2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@度%2$@分%3$@秒"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@度%2$@分%3$@秒"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%度2$@分%3$@秒"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "东经%@"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "东经%@"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@E"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@,%2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@,%2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@,%2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d分"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "北纬%@"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "北纬%@"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "南纬%@"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "南纬%@"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d秒"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "西经%@"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "西经%@"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@W"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/resources/zh-Hant.lproj/Foundation.strings b/platform/darwin/resources/zh-Hant.lproj/Foundation.strings deleted file mode 100644 index 7946dcf7cda..00000000000 --- a/platform/darwin/resources/zh-Hant.lproj/Foundation.strings +++ /dev/null @@ -1,297 +0,0 @@ -/* Clock position format, long: {hours} o’clock */ -"CLOCK_FMT_LONG" = "%@點"; - -/* Clock position format, medium: {hours} o’clock */ -"CLOCK_FMT_MEDIUM" = "%@點"; - -/* Clock position format, short: {hours}:00 */ -"CLOCK_FMT_SHORT" = "%@:00"; - -/* East, long */ -"COMPASS_E_LONG" = "東"; - -/* East, short */ -"COMPASS_E_SHORT" = "東"; - -/* East by north, long */ -"COMPASS_EbN_LONG" = "東微北"; - -/* East by north, short */ -"COMPASS_EbN_SHORT" = "東微北"; - -/* East by south, long */ -"COMPASS_EbS_LONG" = "東微南"; - -/* East by south, short */ -"COMPASS_EbS_SHORT" = "東微南"; - -/* East-northeast, long */ -"COMPASS_ENE_LONG" = "東北東"; - -/* East-northeast, short */ -"COMPASS_ENE_SHORT" = "東北東"; - -/* East-southeast, long */ -"COMPASS_ESE_LONG" = "東南東"; - -/* East-southeast, short */ -"COMPASS_ESE_SHORT" = "東南東"; - -/* North, long */ -"COMPASS_N_LONG" = "北"; - -/* North, short */ -"COMPASS_N_SHORT" = "北"; - -/* North by east, long */ -"COMPASS_NbE_LONG" = "北微東"; - -/* North by east, short */ -"COMPASS_NbE_SHORT" = "北微東"; - -/* North by west, long */ -"COMPASS_NbW_LONG" = "北微西"; - -/* North by west, short */ -"COMPASS_NbW_SHORT" = "北微西"; - -/* Northeast, long */ -"COMPASS_NE_LONG" = "東北"; - -/* Northeast, short */ -"COMPASS_NE_SHORT" = "東北"; - -/* Northeast by east, long */ -"COMPASS_NEbE_LONG" = "東北微東"; - -/* Northeast by east, short */ -"COMPASS_NEbE_SHORT" = "東北微東"; - -/* Northeast by north, long */ -"COMPASS_NEbN_LONG" = "東北微北"; - -/* Northeast by north, short */ -"COMPASS_NEbN_SHORT" = "東北微北"; - -/* North-northeast, long */ -"COMPASS_NNE_LONG" = "北北東"; - -/* North-northeast, short */ -"COMPASS_NNE_SHORT" = "北北東"; - -/* North-northwest, long */ -"COMPASS_NNW_LONG" = "北北西"; - -/* North-northwest, short */ -"COMPASS_NNW_SHORT" = "北北西"; - -/* Northwest, long */ -"COMPASS_NW_LONG" = "西北"; - -/* Northwest, short */ -"COMPASS_NW_SHORT" = "西北"; - -/* Northwest by north, long */ -"COMPASS_NWbN_LONG" = "西北微北"; - -/* Northwest by north, short */ -"COMPASS_NWbN_SHORT" = "西北微北"; - -/* Northwest by west, long */ -"COMPASS_NWbW_LONG" = "西北微西"; - -/* Northwest by west, short */ -"COMPASS_NWbW_SHORT" = "西北微西"; - -/* South, long */ -"COMPASS_S_LONG" = "南"; - -/* South, short */ -"COMPASS_S_SHORT" = "南"; - -/* South by east, long */ -"COMPASS_SbE_LONG" = "南微東"; - -/* South by east, short */ -"COMPASS_SbE_SHORT" = "南微東"; - -/* South by west, long */ -"COMPASS_SbW_LONG" = "南微西"; - -/* South by west, short */ -"COMPASS_SbW_SHORT" = "南微西"; - -/* Southeast, long */ -"COMPASS_SE_LONG" = "東南"; - -/* Southeast, short */ -"COMPASS_SE_SHORT" = "東南"; - -/* Southeast by east, long */ -"COMPASS_SEbE_LONG" = "東南微東"; - -/* Southeast by east, short */ -"COMPASS_SEbE_SHORT" = "東南微東"; - -/* Southeast by south, long */ -"COMPASS_SEbS_LONG" = "東南微南"; - -/* Southeast by south, short */ -"COMPASS_SEbS_SHORT" = "東南微南"; - -/* South-southeast, long */ -"COMPASS_SSE_LONG" = "南南東"; - -/* South-southeast, short */ -"COMPASS_SSE_SHORT" = "南南東"; - -/* South-southwest, long */ -"COMPASS_SSW_LONG" = "南南西"; - -/* South-southwest, short */ -"COMPASS_SSW_SHORT" = "南南西"; - -/* Southwest, long */ -"COMPASS_SW_LONG" = "西南"; - -/* Southwest, short */ -"COMPASS_SW_SHORT" = "西南"; - -/* Southwest by south, long */ -"COMPASS_SWbS_LONG" = "西南微南"; - -/* Southwest by south, short */ -"COMPASS_SWbS_SHORT" = "西南微南"; - -/* Southwest by west, long */ -"COMPASS_SWbW_LONG" = "西南微西"; - -/* Southwest by west, short */ -"COMPASS_SWbW_SHORT" = "西南微西"; - -/* West, long */ -"COMPASS_W_LONG" = "西"; - -/* West, short */ -"COMPASS_W_SHORT" = "西"; - -/* West by north, long */ -"COMPASS_WbN_LONG" = "西微北"; - -/* West by north, short */ -"COMPASS_WbN_SHORT" = "西微北"; - -/* West by south, long */ -"COMPASS_WbS_LONG" = "西微南"; - -/* West by south, short */ -"COMPASS_WbS_SHORT" = "西微南"; - -/* West-northwest, long */ -"COMPASS_WNW_LONG" = "西北西"; - -/* West-northwest, short */ -"COMPASS_WNW_SHORT" = "西北西"; - -/* West-southwest, long */ -"COMPASS_WSW_LONG" = "西南西"; - -/* West-southwest, short */ -"COMPASS_WSW_SHORT" = "西南西"; - -/* Degrees format, long */ -"COORD_DEG_LONG" = "%d度"; - -/* Degrees format, medium: {degrees} */ -"COORD_DEG_MEDIUM" = "%d°"; - -/* Degrees format, short: {degrees} */ -"COORD_DEG_SHORT" = "%d°"; - -/* Coordinate format, long: {degrees}{minutes} */ -"COORD_DM_LONG" = "%1$@度%2$@分"; - -/* Coordinate format, medium: {degrees}{minutes} */ -"COORD_DM_MEDIUM" = "%1$@度%2$@"; - -/* Coordinate format, short: {degrees}{minutes} */ -"COORD_DM_SHORT" = "%1$@%度2$@"; - -/* Coordinate format, long: {degrees}{minutes}{seconds} */ -"COORD_DMS_LONG" = "%1$@度%2$@分%3$@秒"; - -/* Coordinate format, medium: {degrees}{minutes}{seconds} */ -"COORD_DMS_MEDIUM" = "%1$@度%2$@分%3$@秒"; - -/* Coordinate format, short: {degrees}{minutes}{seconds} */ -"COORD_DMS_SHORT" = "%1$@%度2$@分%3$@秒"; - -/* East longitude format, long: {longitude} */ -"COORD_E_LONG" = "東經%@"; - -/* East longitude format, medium: {longitude} */ -"COORD_E_MEDIUM" = "東經%@"; - -/* East longitude format, short: {longitude} */ -"COORD_E_SHORT" = "%@E"; - -/* Coordinate pair format, long: {latitude}, {longitude} */ -"COORD_FMT_LONG" = "%1$@,%2$@"; - -/* Coordinate pair format, medium: {latitude}, {longitude} */ -"COORD_FMT_MEDIUM" = "%1$@,%2$@"; - -/* Coordinate pair format, short: {latitude}, {longitude} */ -"COORD_FMT_SHORT" = "%1$@,%2$@"; - -/* Minutes format, long */ -"COORD_MIN_LONG" = "%d分"; - -/* Minutes format, medium: {minutes} */ -"COORD_MIN_MEDIUM" = "%d′"; - -/* Minutes format, short: {minutes} */ -"COORD_MIN_SHORT" = "%d′"; - -/* North latitude format, long: {latitude} */ -"COORD_N_LONG" = "北緯%@"; - -/* North latitude format, medium: {latitude} */ -"COORD_N_MEDIUM" = "北緯%@"; - -/* North latitude format, short: {latitude} */ -"COORD_N_SHORT" = "%@N"; - -/* South latitude format, long: {latitude} */ -"COORD_S_LONG" = "南緯%@"; - -/* South latitude format, medium: {latitude} */ -"COORD_S_MEDIUM" = "南緯%@"; - -/* South latitude format, short: {latitude} */ -"COORD_S_SHORT" = "%@S"; - -/* Seconds format, long */ -"COORD_SEC_LONG" = "%d秒"; - -/* Seconds format, medium: {seconds} */ -"COORD_SEC_MEDIUM" = "%d″"; - -/* Seconds format, short: {seconds} */ -"COORD_SEC_SHORT" = "%d″"; - -/* West longitude format, long: {longitude} */ -"COORD_W_LONG" = "西經%@"; - -/* West longitude format, medium: {longitude} */ -"COORD_W_MEDIUM" = "西經%@"; - -/* West longitude format, short: {longitude} */ -"COORD_W_SHORT" = "%@W"; - -/* OpenStreetMap full name attribution */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/darwin/scripts/check-public-symbols.js b/platform/darwin/scripts/check-public-symbols.js deleted file mode 100755 index a2045f81ec8..00000000000 --- a/platform/darwin/scripts/check-public-symbols.js +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env node - -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const execFileSync = require('child_process').execFileSync; -const _ = require('lodash'); - -const keyword = /\bMGL_EXPORT\b/; - -let scanned = []; - -function hasMissingSymbols(os) { - let missing = false; - let sdk = os === 'iOS' ? 'iphonesimulator' : 'macosx'; - let sysroot = execFileSync('xcrun', ['--show-sdk-path', '--sdk', sdk]).toString().trim(); - let umbrellaPath = `platform/${os.toLowerCase()}/src/Mapbox.h`; - let docArgs = ['doc', '--objc', umbrellaPath, '--', - '-x', 'objective-c', '-I', 'platform/darwin/src/', '-isysroot', sysroot]; - let docStr = execFileSync('sourcekitten', docArgs, { maxBuffer: Infinity }).toString().trim(); - let docJson = JSON.parse(docStr); - _.forEach(docJson, function (result) { - _.forEach(result, function (structure, path) { - // Prevent multiple scans of the same file. - if (scanned.indexOf(path) >= 0) return; - scanned.push(path); - - const src = fs.readFileSync(path, 'utf8').split('\n'); - _.forEach(structure['key.substructure'], function (substructure) { - switch (substructure['key.kind']) { - case 'sourcekitten.source.lang.objc.decl.class': - if (!(keyword.test(src[substructure['key.doc.line'] - 1]) || keyword.test(src[substructure['key.doc.line'] - 2]))) { - console.warn(`- missing symbol export for class ${substructure['key.name']} in ${path}:${substructure['key.doc.line']}:${substructure['key.doc.column']}`); - missing = true; - } - break; - case 'sourcekitten.source.lang.objc.decl.constant': - if (!keyword.test(src[substructure['key.doc.line'] - 1])) { - console.warn(`- missing symbol export for constant ${substructure['key.name']} in ${path}:${substructure['key.doc.line']}:${substructure['key.doc.column']}`); - missing = true; - } - break; - } - }); - }); - }); - - return missing; -} - -function ensureSourceKittenIsInstalled() { - try { - execFileSync('which', ['sourcekitten']); - } catch (e) { - console.log(`Installing SourceKitten via Homebrew…`); - execFileSync('brew', ['install', 'sourcekitten']); - } -} - -if (process.argv.length < 3) { - console.warn(`Usage: ${path.relative(process.cwd(), process.argv[1])} [macOS|iOS] ...`); - process.exit(1); -} - -ensureSourceKittenIsInstalled(); - -let missing = false; -for (var i = 2; i < process.argv.length; i++) { - let os = process.argv[i]; - if (os == 'iOS' || os == 'macOS') { - missing |= hasMissingSymbols(os); - } else { - console.warn(`Argument must be one of iOS or macOS`); - process.exit(1); - } -} - -if (missing) { - process.exit(1); -} else { - console.warn(`All symbols are correctly exported.`); -} diff --git a/platform/darwin/scripts/generate-style-code.js b/platform/darwin/scripts/generate-style-code.js deleted file mode 100755 index bd5adb96856..00000000000 --- a/platform/darwin/scripts/generate-style-code.js +++ /dev/null @@ -1,925 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -const fs = require('fs'); -const ejs = require('ejs'); -const _ = require('lodash'); -const colorParser = require('csscolorparser'); -const assert = require('assert'); - -require('../../../scripts/style-code'); - -const cocoaConventions = require('./style-spec-cocoa-conventions-v8.json'); -const prefix = 'MGL'; -const suffix = 'StyleLayer'; - -let spec = _.merge(require('../../../scripts/style-spec'), require('./style-spec-overrides-v8.json')); - -// FIXME: https://github.com/mapbox/mapbox-gl-native/issues/15008 -delete spec.layout_circle["circle-sort-key"] -delete spec.layout_line["line-sort-key"] -delete spec.layout_fill["fill-sort-key"] - -class ConventionOverride { - constructor(val) { - if (typeof val === 'string') { - this.name_ = val; - this.enumName_ = null; - } else if (val instanceof Object) { - this.name_ = val.name; - this.enumName_ = val.enumName; - } else { - assert(false); - } - } - - set name(name_) { this.name_ = name_; } - get name() { return this.name_; } - get enumName() { return this.enumName_ || this.name_; } -} - -// Rename properties and keep `original` for use with setters and getters -_.forOwn(cocoaConventions, function (properties, kind) { - _.forOwn(properties, function (newConvention, oldName) { - let conventionOverride = new ConventionOverride(newConvention); - let property = spec[kind][oldName]; - if (conventionOverride.name.startsWith('is-')) { - property.getter = conventionOverride.name; - conventionOverride.name = conventionOverride.name.substr(3); - } - - // Override enum name based on style-spec-cocoa-conventions-v8.json - property.enumName = conventionOverride.enumName; - - if (conventionOverride.name !== oldName) { - property.original = oldName; - delete spec[kind][oldName]; - spec[kind][conventionOverride.name] = property; - } - - // Update cross-references to this property in other properties' - // documentation and requirements. - let renameCrossReferences = function (property, name) { - property.doc = property.doc.replace(new RegExp('`' + oldName + '`', 'g'), '`' + conventionOverride.name + '`'); - let requires = property.requires || []; - for (let i = 0; i < requires.length; i++) { - if (requires[i] === oldName) { - property.requires[i] = conventionOverride.name; - } - if (typeof requires[i] !== 'string') { - _.forOwn(requires[i], function (values, name, require) { - if (name === oldName) { - require[conventionOverride.name] = values; - delete require[name]; - } - }); - } - } - }; - _.forOwn(spec[kind.replace(/^layout_/, 'paint_')], renameCrossReferences); - _.forOwn(spec[kind.replace(/^paint_/, 'layout_')], renameCrossReferences); - }) -}); - -String.prototype.wrap = function (cols, indent) { - let wrapRe = new RegExp(`(.{1,${cols - indent}})(?: +|\n|$)`, "gm"); - return this.replace(wrapRe, "$1\n").replace(/\s+$/, "").indent(indent); -}; - -String.prototype.indent = function (cols) { - return this.replace(/^|\n/g, "$&" + " ".repeat(cols)); -}; - -global.camelize = function (str) { - return str.replace(/(?:^|-)(.)/g, function (_, x) { - return x.toUpperCase(); - }); -}; - -global.camelizeWithLeadingLowercase = function (str) { - return str.replace(/-(.)/g, function (_, x) { - return x.toUpperCase(); - }); -}; - -// Returns true only if property is an enum or if it is an array -// property with uniquely defined enum. -global.definesEnum = function(property, allProperties) { - if (property.type === "enum") { - return true; - } - - if (property.type === 'array' && property.value === 'enum') { - const uniqueArrayEnum = (prop, enums) => { - if (prop.value !== 'enum') return false; - const enumsEqual = (val1, val2) => val1.length === val1.length && val1.every((val, i) => val === val2[i]); - return enums.filter(e => enumsEqual(Object.keys(prop.values).sort(), Object.keys(e.values).sort())).length == 0; - }; - - const allEnumProperties = _(allProperties).filter({'type': 'enum'}).value(); - const uniqueArrayEnumProperties = _(allProperties).filter({'type': 'array'}).filter(prop => uniqueArrayEnum(prop, allEnumProperties)).value(); - return _(uniqueArrayEnumProperties).filter({'name': property.name}).value().length != 0; - } - - return false; -} - -global.objCName = function (property) { - return camelizeWithLeadingLowercase(property.name); -}; - -global.objCGetter = function (property) { - return camelizeWithLeadingLowercase(property.getter || property.name); -}; - -global.objCType = function (layerType, propertyName) { - return `${prefix}${camelize(propertyName)}`; -}; - -global.arrayType = function (property) { - return property.type === 'array' ? originalPropertyName(property).split('-').pop() : false; -}; - -global.testImplementation = function (property, layerType, isFunction) { - let helperMsg = testHelperMessage(property, layerType, isFunction); - return `layer.${objCName(property)} = [MGLRuntimeStylingHelper ${helperMsg}];`; -}; - -global.objCTestValue = function (property, layerType, arraysAsStructs, indent) { - let propertyName = originalPropertyName(property); - switch (property.type) { - case 'boolean': - return property.default ? '@"false"' : '@"true"'; - case 'number': - return '@"1"'; - case 'formatted': - // Special 'string' case to handle constant expression text-field that automatically - // converts Formatted back to string. - return layerType === 'string' ? - `@"'${_.startCase(propertyName)}'"` : - `@"${_.startCase(propertyName)}"`; - case 'resolvedImage': - return layerType === 'string' ? - `@"${_.startCase(propertyName)}"` : - `@"MGL_FUNCTION('image', '${_.startCase(propertyName)}')"`; - case 'string': - return `@"'${_.startCase(propertyName)}'"`; - case 'enum': - return `@"'${_.last(_.keys(property.values))}'"`; - case 'color': - return '@"%@", [MGLColor redColor]'; - case 'array': - switch (arrayType(property)) { - case 'dasharray': - return '@"{1, 2}"'; - case 'font': - return `@"{'${_.startCase(propertyName)}', '${_.startCase(_.reverse(propertyName.split('')).join(''))}'}"`; - case 'padding': { - if (arraysAsStructs) { - let iosValue = '[NSValue valueWithUIEdgeInsets:UIEdgeInsetsMake(1, 1, 1, 1)]'.indent(indent * 4); - let macosValue = '[NSValue valueWithEdgeInsets:NSEdgeInsetsMake(1, 1, 1, 1)]'.indent(indent * 4); - return `@"%@",\n#if TARGET_OS_IPHONE\n${iosValue}\n#else\n${macosValue}\n#endif\n${''.indent((indent - 1) * 4)}`; - } - return '@"{1, 1, 1, 1}"'; - } - case 'offset': - case 'translate': { - if (arraysAsStructs) { - let iosValue = '[NSValue valueWithCGVector:CGVectorMake(1, 1)]'.indent(indent * 4); - let macosValue = '[NSValue valueWithMGLVector:CGVectorMake(1, -1)]'.indent(indent * 4); - return `@"%@",\n#if TARGET_OS_IPHONE\n${iosValue}\n#else\n${macosValue}\n#endif\n${''.indent((indent - 1) * 4)}`; - } - return '@"{1, 1}"'; - } - case 'anchor': - return `@"{'top','bottom'}"`; - case 'mode': - return `@"{'horizontal','vertical'}"`; - default: - throw new Error(`unknown array type for ${property.name}`); - } - default: - throw new Error(`unknown type for ${property.name}`); - } -}; - -global.mbglTestValue = function (property, layerType) { - let propertyName = originalPropertyName(property); - switch (property.type) { - case 'boolean': - return property.default ? 'false' : 'true'; - case 'number': - return '1.0'; - case 'formatted': - case 'string': - case 'resolvedImage': - return `"${_.startCase(propertyName)}"`; - case 'enum': { - let type = camelize(originalPropertyName(property)); - if (/-translate-anchor$/.test(originalPropertyName(property))) { - type = 'TranslateAnchor'; - } - if (/-(rotation|pitch)-alignment$/.test(originalPropertyName(property))) { - type = 'Alignment'; - } - if (/^(text|icon)-anchor$/.test(originalPropertyName(property))) { - type = 'SymbolAnchor' - } - let value = camelize(_.last(_.keys(property.values))); - if (property['light-property']) { - return `mbgl::style::Light${type}Type::${value}`; - } - return `mbgl::style::${type}Type::${value}`; - } - case 'color': - return '{ 1, 0, 0, 1 }'; - case 'array': - switch (arrayType(property)) { - case 'dasharray': - return '{1, 2}'; - case 'font': - return `{ "${_.startCase(propertyName)}", "${_.startCase(_.reverse(propertyName.split('')).join(''))}" }`; - case 'padding': - return '{ 1, 1, 1, 1 }'; - case 'offset': - case 'translate': - return '{ 1, 1 }'; - case 'anchor': - return '{ mbgl::style::SymbolAnchorType::Top, mbgl::style::SymbolAnchorType::Bottom }'; - case 'mode': - return '{ mbgl::style::TextWritingModeType::Horizontal, mbgl::style::TextWritingModeType::Vertical }'; - default: - throw new Error(`unknown array type for ${property.name}`); - } - default: - throw new Error(`unknown type for ${property.name}`); - } -}; - -global.mbglExpressionTestValue = function (property, layerType) { - let propertyName = originalPropertyName(property); - switch (property.type) { - case 'enum': - return `"${_.last(_.keys(property.values))}"`; - case 'color': - return 'mbgl::Color(1, 0, 0, 1)'; - case 'array': - switch (arrayType(property)) { - case 'anchor': - return `{"top", "bottom"}`; - case 'mode': - return `{"horizontal", "vertical"}`; - default: - break; - } - default: - return global.mbglTestValue(property, layerType); - } -}; - -global.testGetterImplementation = function (property, layerType, isFunction) { - let helperMsg = testHelperMessage(property, layerType, isFunction); - let value = `[MGLRuntimeStylingHelper ${helperMsg}]`; - if (property.type === 'enum') { - if (isFunction) { - return `XCTAssertEqualObjects(gLayer.${objCName(property)}, ${value});`; - } - return `XCTAssert([gLayer.${objCName(property)} isKindOfClass:[MGLConstantStyleValue class]]); - XCTAssertEqualObjects(gLayer.${objCName(property)}, ${value});`; - } - return `XCTAssertEqualObjects(gLayer.${objCName(property)}, ${value});`; -}; - -global.testHelperMessage = function (property, layerType, isFunction) { - let fnSuffix = isFunction ? 'Function' : ''; - switch (property.type) { - case 'boolean': - return 'testBool' + fnSuffix; - case 'number': - return 'testNumber' + fnSuffix; - case 'formatted': - case 'string': - case 'resolvedImage': - return 'testString' + fnSuffix; - case 'enum': - let objCType = global.objCType(layerType, property.name); - let objCEnum = `${objCType}${camelize(Object.keys(property.values)[Object.keys(property.values).length-1])}`; - return `testEnum${fnSuffix}:${objCEnum} type:@encode(${objCType})`; - case 'color': - return 'testColor' + fnSuffix; - case 'array': - switch (arrayType(property)) { - case 'dasharray': - return 'testDashArray' + fnSuffix; - case 'font': - return 'testFont' + fnSuffix; - case 'padding': - return 'testPadding' + fnSuffix; - case 'offset': - case 'translate': - return 'testOffset' + fnSuffix; - default: - throw new Error(`unknown array type for ${property.name}`); - } - default: - throw new Error(`unknown type for ${property.name}`); - } -}; - -global.propertyDoc = function (propertyName, property, layerType, kind) { - // Match references to other property names & values. - // Requires the format 'When `foo` is set to `bar`,'. - let doc = property.doc.replace(/`([^`]+?)` is set to `([^`]+?)`(?: or `([^`]+?)`)?/g, function (m, peerPropertyName, propertyValue, secondPropertyValue, offset, str) { - let otherProperty = camelizeWithLeadingLowercase(peerPropertyName); - let otherValue = objCType(layerType, peerPropertyName) + camelize(propertyValue); - if (property.type == 'array' && kind == 'light') { - otherValue = propertyValue; - } - const firstPropertyValue = '`' + `${otherProperty}` + '` is set to `' + `${otherValue}` + '`'; - if (secondPropertyValue) { - return firstPropertyValue + ' or `' + - objCType(layerType, peerPropertyName) + camelize(secondPropertyValue) + - '`'; - } else { - return firstPropertyValue; - } - }); - // Match references to our own property values. - // Requires the format 'is equivalent to `bar`'. - doc = doc.replace(/is equivalent to `(.+?)`/g, function(m, propertyValue, offset, str) { - propertyValue = objCType(layerType, propertyName) + camelize(propertyValue); - return 'is equivalent to `' + propertyValue + '`'; - }); - // Format everything else: our property name & its possible values. - // Requires symbols to be surrounded by backticks. - doc = doc.replace(/`(.+?)`/g, function (m, symbol, offset, str) { - if (kind === 'enum') { - let layoutProperties = spec[`layout_${layerType}`] || []; - let paintProperties = spec[`paint_${layerType}`] || []; - if (symbol in layoutProperties || symbol in paintProperties) { - return '`MGL' + camelize(layerType) + 'StyleLayer.' + camelizeWithLeadingLowercase(symbol) + '`'; - } - } - if ('values' in property && Object.keys(property.values).indexOf(symbol) !== -1) { - let objCType = global.objCType(layerType, property.name); - return '`' + `${objCType}${camelize(symbol)}` + '`'; - } - if (str.substr(offset - 4, 3) !== 'CSS') { - symbol = camelizeWithLeadingLowercase(symbol); - } - return '`' + symbol + '`'; - }); - // Format references to units. - if ('units' in property) { - if (!property.units.match(/s$/)) { - property.units += 's'; - } - doc += `\n\nThis property is measured in ${property.units}.`; - } - doc = doc.replace(/(p)ixel/gi, '$1oint').replace(/(\d)px\b/g, '$1pt'); - if (kind !== 'enum') { - if ('default' in property) { - doc += `\n\nThe default value of this property is ${propertyDefault(property, layerType)}.`; - if (!property.required && kind != 'light') { - doc += ' Set this property to `nil` to reset it to the default value.'; - } - } - if ('requires' in property) { - doc += '\n\n' + propertyReqs(property, spec[`${kind}_${layerType}`], layerType); - } - if ('original' in property) { - let anchor; - switch (kind) { - case 'layout': - anchor = `layout-${layerType}-${property.original}`; - break; - case 'paint': - anchor = `paint-${property.original}`; - break; - } - doc += `\n\nThis attribute corresponds to the ${property.original} layout property in the Mapbox Style Specification.`; - } - doc += '\n\nYou can set this property to an expression containing any of the following:\n\n'; - doc += `* Constant ${describeType(property)} values`; - if ('minimum' in property) { - if ('maximum' in property) { - doc += ` between ${formatNumber(property.minimum)} and ${formatNumber(property.maximum)} inclusive`; - } else { - doc += ` no less than ${formatNumber(property.minimum)}`; - } - } else if ('maximum' in property) { - doc += ` no greater than ${formatNumber(property.maximum)}`; - } - doc += '\n'; - if (property.type === 'enum') { - doc += '* Any of the following constant string values:\n'; - doc += Object.keys(property.values).map(value => ' * `' + value + '`: ' + property.values[value].doc).join('\n') + '\n'; - } else if (property.type === 'array' && property.value === 'enum') { - doc += '* Constant array, in which each element is any of the following constant string values:\n'; - doc += Object.keys(property.values).map(value => ' * `' + value + '`: ' + property.values[value].doc).join('\n') + '\n'; - } - if (property.type === 'formatted') { - doc += '* Formatted expressions.\n'; - } - doc += '* Predefined functions, including mathematical and string operators\n' + - '* Conditional expressions\n' + - '* Variable assignments and references to assigned variables\n'; - const inputVariable = property.expression && property['property-type'] === 'color-ramp' ? - '$' + camelizeWithLeadingLowercase(property.expression.parameters[0]) : '$zoomLevel'; - if (isDataDriven(property)) { - doc += `* Interpolation and step functions applied to the \`${inputVariable}\` variable and/or feature attributes\n`; - } else if (property.expression && property.expression.interpolated) { - doc += `* Interpolation and step functions applied to the \`${inputVariable}\` variable\n\n` + - 'This property does not support applying interpolation or step functions to feature attributes.'; - } else { - doc += `* Step functions applied to the \`${inputVariable}\` variable\n\n` + - `This property does not support applying interpolation functions to the \`${inputVariable}\` variable or applying interpolation or step functions to feature attributes.`; - } - } - return doc; -}; - -global.propertyExample = function (property) { - return property.examples; -}; - -global.isDataDriven = function (property) { - return property['property-type'] === 'data-driven' || property['property-type'] === 'cross-faded-data-driven'; -}; - -global.propertyReqs = function (property, propertiesByName, type) { - return 'This property is only applied to the style if ' + property.requires.map(function (req) { - if (typeof req === 'string') { - return '`' + camelizeWithLeadingLowercase(req) + '` is non-`nil`'; - } else if ('!' in req) { - return '`' + camelizeWithLeadingLowercase(req['!']) + '` is set to `nil`'; - } else { - let name = Object.keys(req)[0]; - if (name === 'source') - return 'the data source requirements are met'; - return '`' + camelizeWithLeadingLowercase(name) + '` is set to an expression that evaluates to ' + describeValue(req[name], propertiesByName[name], type); - } - }).join(', and ') + '. Otherwise, it is ignored.'; -}; - -global.parseColor = function (str) { - let color = colorParser.parseCSSColor(str); - return { - r: color[0] / 255, - g: color[1] / 255, - b: color[2] / 255, - a: color[3], - }; -}; - -global.describeType = function (property) { - switch (property.type) { - case 'boolean': - return 'Boolean'; - case 'number': - return 'numeric'; - case 'formatted': - case 'string': - case 'resolvedImage': - return 'string'; - case 'enum': - return '`MGL' + camelize(property.name) + '`'; - case 'color': - return '`UIColor`'; - case 'array': - switch (arrayType(property)) { - case 'padding': - return '`UIEdgeInsets`'; - case 'offset': - case 'translate': - return '`CGVector`'; - case 'position': - return '`MGLSphericalPosition`'; - case 'anchor': - return '`MGLTextAnchor` array'; - case 'mode': - return '`MGLTextWritingMode` array'; - default: - return 'array'; - } - break; - default: - throw new Error(`unknown type for ${property.name}`); - } -} - -global.describeValue = function (value, property, layerType) { - if (Array.isArray(value) && property.type !== 'array' && property.type !== 'enum') { - switch (value[0]) { - case 'interpolate': { - let curveType = value[1][0]; - let minimum = describeValue(value[3 + value.length % 2], property, layerType); - let maximum = describeValue(_.last(value), property, layerType); - return `${curveType.match(/^[aeiou]/i) ? 'an' : 'a'} ${curveType} interpolation expression ranging from ${minimum} to ${maximum}`; - } - default: - throw new Error(`No description available for ${value[0]} expression in ${property.name} of ${layerType}.`); - } - } - - switch (property.type) { - case 'boolean': - return value ? '`YES`' : '`NO`'; - case 'number': - return 'the float ' + '`' + formatNumber(value) + '`'; - case 'formatted': - case 'string': - case 'resolvedImage': - if (value === '') { - return 'the empty string'; - } - return 'the string `' + value + '`'; - case 'enum': - let displayValue; - if (Array.isArray(value)) { - let separator = (value.length === 2) ? ' ' : ', '; - displayValue = value.map((possibleValue, i) => { - let conjunction = ''; - if (value.length === 2 && i === 0) conjunction = 'either '; - if (i === value.length - 1) conjunction = 'or '; - let objCType = global.objCType(layerType, property.name); - return `${conjunction}\`${objCType}${camelize(possibleValue)}\``; - }).join(separator); - } else { - displayValue = `\`${value}\``; - } - return displayValue; - case 'color': - let color = parseColor(value); - if (!color) { - throw new Error(`unrecognized color format in default value of ${property.name}`); - } - if (color.r === 0 && color.g === 0 && color.b === 0 && color.a === 0) { - return '`UIColor.clearColor`'; - } - if (color.r === 0 && color.g === 0 && color.b === 0 && color.a === 1) { - return '`UIColor.blackColor`'; - } - if (color.r === 1 && color.g === 1 && color.b === 1 && color.a === 1) { - return '`UIColor.whiteColor`'; - } - return 'a `UIColor`' + ` object whose RGB value is ${formatNumber(color.r)}, ${formatNumber(color.g)}, ${formatNumber(color.b)} and whose alpha value is ${formatNumber(color.a)}`; - case 'array': - let units = property.units || ''; - if (units) { - units = ` ${units}`.replace(/pixel/, 'point'); - } - switch (arrayType(property)) { - case 'padding': - if (value[0] === 0 && value[1] === 0 && value[2] === 0 && value[3] === 0) { - return 'an `NSValue` object containing `UIEdgeInsetsZero`'; - } - return 'an `NSValue` object containing a `UIEdgeInsets` struct set to' + ` ${formatNumber(value[0])}${units} on the top, ${formatNumber(value[3])}${units} on the left, ${formatNumber(value[2])}${units} on the bottom, and ${formatNumber(value[1])}${units} on the right`; - case 'offset': - case 'translate': - return 'an `NSValue` object containing a `CGVector` struct set to' + ` ${formatNumber(value[0])}${units} rightward and ${formatNumber(value[1])}${units} downward`; - case 'position': - return 'an `MGLSphericalPosition` struct set to' + ` ${formatNumber(value[0])} radial, ${formatNumber(value[1])} azimuthal and ${formatNumber(value[2])} polar`; - default: - return 'the array `' + value.join('`, `') + '`'; - } - default: - throw new Error(`unknown type for ${property.name}`); - } -}; - -global.formatNumber = function (num) { - return num.toLocaleString().replace('-', '\u2212'); -} - -global.propertyDefault = function (property, layerType) { - if (property.name === 'heatmap-color') { - return 'an expression that evaluates to a rainbow color scale from blue to red'; - } else { - return 'an expression that evaluates to ' + describeValue(property.default, property, layerType); - } -}; - -global.originalPropertyName = function (property) { - return property.original || property.name; -}; - -global.enumName = function (property) { - return property.enumName || property.name; -}; - -global.propertyType = function (property) { - switch (property.type) { - case 'boolean': - return 'NSNumber *'; - case 'number': - return 'NSNumber *'; - case 'formatted': - case 'string': - case 'resolvedImage': - return 'NSString *'; - case 'enum': - return 'NSValue *'; - case 'color': - return 'MGLColor *'; - case 'array': - switch (arrayType(property)) { - case 'dasharray': - return 'NSArray *'; - case 'font': - return 'NSArray *'; - case 'padding': - case 'position': - case 'offset': - case 'translate': - return 'NSValue *'; - case 'anchor': - case 'mode': - return 'NSArray *'; - default: - throw new Error(`unknown array type for ${property.name}`); - } - default: - throw new Error(`unknown type for ${property.name}`); - } -}; - -global.isInterpolatable = function (property) { - const type = property.type === 'array' ? property.value : property.type; - return type !== 'boolean' && - type !== 'enum' && - type !== 'string' && - type !== 'resolvedImage' && - type !== 'formatted'; -}; - -global.valueTransformerArguments = function (property) { - let objCType = propertyType(property); - switch (property.type) { - case 'boolean': - return ['bool', objCType]; - case 'number': - return ['float', objCType]; - case 'formatted': - return ['mbgl::style::expression::Formatted', objCType]; - case 'resolvedImage': - return ['mbgl::style::expression::Image', objCType]; - case 'string': - return ['std::string', objCType]; - case 'enum': - return [mbglType(property), 'NSValue *', mbglType(property), `MGL${camelize(property.name)}`]; - case 'color': - return ['mbgl::Color', objCType]; - case 'array': - switch (arrayType(property)) { - case 'dasharray': - return ['std::vector', objCType, 'float']; - case 'font': - return ['std::vector', objCType, 'std::string']; - case 'padding': - return ['std::array', objCType]; - case 'position': - return ['mbgl::style::Position', objCType]; - case 'offset': - case 'translate': - return ['std::array', objCType]; - case 'anchor': - return ['std::vector', objCType, 'mbgl::style::SymbolAnchorType', 'MGLTextAnchor']; - case 'mode': - return ['std::vector', objCType, 'mbgl::style::TextWritingModeType', 'MGLTextWritingMode']; - default: - throw new Error(`unknown array type for ${property.name}`); - } - default: - throw new Error(`unknown type for ${property.name}`); - } -}; - -global.mbglType = function(property) { - switch (property.type) { - case 'boolean': - return 'bool'; - case 'number': - return 'float'; - case 'formatted': - return 'mbgl::style::expression::Formatted'; - case 'resolvedImage': - return 'mbgl::style::expression::Image'; - case 'string': - return 'std::string'; - case 'enum': { - let type = camelize(originalPropertyName(property)); - if (property['light-property']) { - return `mbgl::style::Light${type}Type`; - } - if (/-translate-anchor$/.test(originalPropertyName(property))) { - type = 'TranslateAnchor'; - } - if (/-(rotation|pitch)-alignment$/.test(originalPropertyName(property))) { - type = 'Alignment'; - } - if (/^(text|icon)-anchor$/.test(originalPropertyName(property))) { - type = 'SymbolAnchor' - } - return `mbgl::style::${type}Type`; - } - case 'color': - return 'mbgl::Color'; - case 'array': - switch (arrayType(property)) { - case 'dasharray': - return 'std::vector'; - case 'font': - return 'std::vector'; - case 'padding': - return 'std::array'; - case 'offset': - case 'translate': - return 'std::array'; - case 'position': - return 'mbgl::style::Position'; - case 'anchor': - return 'std::vector'; - case 'mode': - return 'std::vector'; - default: - throw new Error(`unknown array type for ${property.name}`); - } - default: - throw new Error(`unknown type for ${property.name}`); - } -}; - -global.initLayer = function (layerType) { - if (layerType == "background") { - return `_layer = new mbgl::style::${camelize(layerType)}Layer(identifier.UTF8String);` - } else { - return `_layer = new mbgl::style::${camelize(layerType)}Layer(identifier.UTF8String, source.identifier.UTF8String);` - } -}; - -global.setSourceLayer = function() { - return `_layer->setSourceLayer(sourceLayer.UTF8String);` -}; - -const lightProperties = Object.keys(spec['light']).reduce((memo, name) => { - var property = spec['light'][name]; - property.name = name; - property['light-property'] = true; - memo.push(property); - return memo; -}, []); - -const lightDoc = spec['light-cocoa-doc']; -const lightType = 'light'; - -const layerH = ejs.compile(fs.readFileSync('platform/darwin/src/MGLStyleLayer.h.ejs', 'utf8'), { strict: true }); -const layerPrivateH = ejs.compile(fs.readFileSync('platform/darwin/src/MGLStyleLayer_Private.h.ejs', 'utf8'), { strict: true }); -const layerM = ejs.compile(fs.readFileSync('platform/darwin/src/MGLStyleLayer.mm.ejs', 'utf8'), { strict: true}); -const testLayers = ejs.compile(fs.readFileSync('platform/darwin/test/MGLStyleLayerTests.mm.ejs', 'utf8'), { strict: true}); -const forStyleAuthorsMD = ejs.compile(fs.readFileSync('platform/darwin/docs/guides/For Style Authors.md.ejs', 'utf8'), { strict: true }); -const ddsGuideMD = ejs.compile(fs.readFileSync('platform/darwin/docs/guides/Migrating to Expressions.md.ejs', 'utf8'), { strict: true }); -const templatesMD = ejs.compile(fs.readFileSync('platform/darwin/docs/guides/Tile URL Templates.md.ejs', 'utf8'), { strict: true }); - -const lightH = ejs.compile(fs.readFileSync('platform/darwin/src/MGLLight.h.ejs', 'utf8'), {strict: true}); -const lightM = ejs.compile(fs.readFileSync('platform/darwin/src/MGLLight.mm.ejs', 'utf8'), {strict: true}); -const testLight = ejs.compile(fs.readFileSync('platform/darwin/test/MGLLightTest.mm.ejs', 'utf8'), { strict: true}); -writeIfModified(`platform/darwin/src/MGLLight.h`, duplicatePlatformDecls(lightH({ properties: lightProperties, doc: lightDoc, type: lightType }))); -writeIfModified(`platform/darwin/src/MGLLight.mm`, lightM({ properties: lightProperties, doc: lightDoc, type: lightType })); -writeIfModified(`platform/darwin/test/MGLLightTest.mm`, testLight({ properties: lightProperties, doc: lightDoc, type: lightType })); - - -const layers = _(spec.layer.type.values).map((value, layerType) => { - const layoutProperties = Object.keys(spec[`layout_${layerType}`]).reduce((memo, name) => { - if (name !== 'visibility') { - spec[`layout_${layerType}`][name].name = name; - memo.push(spec[`layout_${layerType}`][name]); - } - return memo; - }, []); - - const paintProperties = Object.keys(spec[`paint_${layerType}`]).reduce((memo, name) => { - spec[`paint_${layerType}`][name].name = name; - memo.push(spec[`paint_${layerType}`][name]); - return memo; - }, []); - - return { - doc: spec.layer.type.values[layerType].doc, - examples: spec.layer.type.values[layerType].examples, - type: layerType, - layoutProperties: _.sortBy(layoutProperties, ['name']), - paintProperties: _.sortBy(paintProperties, ['name']), - }; -}).sortBy(['type']).value(); - -function duplicatePlatformDecls(src) { - // Look for a documentation comment that contains “MGLColor” or “UIColor” - // and the subsequent function, method, or property declaration. Try not to - // match greedily. - return src.replace(/(\/\*\*(?:\*[^\/]|[^*])*?\b(?:MGL|NS|UI)Color\b[\s\S]*?\*\/)(\s*.+?;)/g, - (match, comment, decl) => { - let macosComment = comment.replace(/\b(?:MGL|UI)Color\b/g, 'NSColor') - // Use the correct indefinite article. - .replace(/\ba(\s+`?NSColor)\b/gi, 'an$1'); - let iosDecl = decl.replace(/\bMGLColor\b/g, 'UIColor'); - let macosDecl = decl.replace(/\b(?:MGL|UI)Color\b/g, 'NSColor'); - return `\ -#if TARGET_OS_IPHONE -${comment}${iosDecl} -#else -${macosComment}${macosDecl} -#endif`; - }) - // Do the same for CGVector-typed properties. - .replace(/(\/\*\*(?:\*[^\/]|[^*])*?\b(?:CGVector|UIEdgeInsets(?:Zero)?)\b[\s\S]*?\*\/)(\s*.+?;)/g, - (match, comment, decl) => { - let macosComment = comment.replace(/\bdownward\b/g, 'upward') - .replace(/\bUI(EdgeInsets(?:Zero)?)\b/g, 'NS$1'); - return `\ -#if TARGET_OS_IPHONE -${comment}${decl} -#else -${macosComment}${decl} -#endif`; - }); -} - -var renamedPropertiesByLayerType = {}; - -for (var layer of layers) { - layer.properties = _.concat(layer.layoutProperties, layer.paintProperties); - let enumProperties = _.filter(layer.properties, prop => definesEnum(prop, layer.properties)); - if (enumProperties.length) { - layer.enumProperties = enumProperties; - } - - let renamedProperties = {}; - _.assign(renamedProperties, _.filter(layer.properties, prop => 'original' in prop || 'getter' in prop)); - if (!_.isEmpty(renamedProperties)) { - renamedPropertiesByLayerType[layer.type] = renamedProperties; - } - - writeIfModified(`platform/darwin/src/${prefix}${camelize(layer.type)}${suffix}.h`, duplicatePlatformDecls(layerH(layer))); - writeIfModified(`platform/darwin/src/${prefix}${camelize(layer.type)}${suffix}_Private.h`, duplicatePlatformDecls(layerPrivateH(layer))); - writeIfModified(`platform/darwin/src/${prefix}${camelize(layer.type)}${suffix}.mm`, layerM(layer)); - writeIfModified(`platform/darwin/test/${prefix}${camelize(layer.type)}${suffix}Tests.mm`, testLayers(layer)); -} - -// Extract examples for guides from unit tests. -let examplesSrc = fs.readFileSync('platform/darwin/test/MGLDocumentationGuideTests.swift', 'utf8'); -const exampleRegex = /func test([\w$]+)\s*\(\)\s*\{[^]*?\n([ \t]+)\/\/#-example-code\n([^]+?)\n\2\/\/#-end-example-code\n/gm; - -let examples = {}; -let match; -while ((match = exampleRegex.exec(examplesSrc)) !== null) { - let testMethodName = match[1], - indentation = match[2], - exampleCode = match[3]; - - // Trim leading whitespace from the example code. - exampleCode = exampleCode.replace(new RegExp('^' + indentation, 'gm'), ''); - - examples[testMethodName] = exampleCode; -} - -global.guideExample = function (guide, exampleId, os) { - // Get the contents of the test method whose name matches the symbol path. - let testMethodName = `${guide}$${exampleId}`; - let example = examples[testMethodName]; - if (!example) { - console.error(`MGLDocumentationExampleTests.test${testMethodName}() not found.`); - process.exit(1); - } - - // Resolve conditional compilation blocks. - example = example.replace(/^(\s*)#if\s+os\((iOS|macOS)\)\n([^]*?)(?:^\1#else\n([^]*?))?^\1#endif\b\n?/gm, - function (m, indentation, ifOs, ifCase, elseCase) { - return (os === ifOs ? ifCase : elseCase).replace(new RegExp('^ ', 'gm'), ''); - }).replace(/\n$/, ''); - - return '```swift\n' + example + '\n```'; -}; - -writeIfModified(`platform/ios/docs/guides/For Style Authors.md`, forStyleAuthorsMD({ - os: 'iOS', - renamedProperties: renamedPropertiesByLayerType, - layers: layers, -})); -writeIfModified(`platform/macos/docs/guides/For Style Authors.md`, forStyleAuthorsMD({ - os: 'macOS', - renamedProperties: renamedPropertiesByLayerType, - layers: layers, -})); -writeIfModified(`platform/ios/docs/guides/Migrating to Expressions.md`, ddsGuideMD({ - os: 'iOS', -})); -writeIfModified(`platform/macos/docs/guides/Migrating to Expressions.md`, ddsGuideMD({ - os: 'macOS', -})); -writeIfModified(`platform/ios/docs/guides/Tile URL Templates.md`, templatesMD({ - os: 'iOS', -})); -writeIfModified(`platform/macos/docs/guides/Tile URL Templates.md`, templatesMD({ - os: 'macOS', -})); diff --git a/platform/darwin/scripts/style-spec-cocoa-conventions-v8.json b/platform/darwin/scripts/style-spec-cocoa-conventions-v8.json deleted file mode 100644 index c781879bc54..00000000000 --- a/platform/darwin/scripts/style-spec-cocoa-conventions-v8.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "layout_symbol": { - "icon-allow-overlap": "icon-allows-overlap", - "icon-image": "icon-image-name", - "icon-ignore-placement": "icon-ignores-placement", - "icon-keep-upright": "keeps-icon-upright", - "icon-optional": "is-icon-optional", - "icon-rotate": "icon-rotation", - "icon-size": "icon-scale", - "symbol-avoid-edges": "symbol-avoids-edges", - "text-allow-overlap": "text-allows-overlap", - "text-field": "text", - "text-font": "text-font-names", - "text-ignore-placement": "text-ignores-placement", - "text-justify": "text-justification", - "text-keep-upright": "keeps-text-upright", - "text-max-angle": "maximum-text-angle", - "text-max-width": "maximum-text-width", - "text-optional": "is-text-optional", - "text-rotate": "text-rotation", - "text-size": "text-font-size", - "text-writing-mode": {"name": "text-writing-modes", "enumName": "text-writing-mode"} - }, - "paint_circle": { - "circle-pitch-scale": "circle-scale-alignment", - "circle-translate": "circle-translation", - "circle-translate-anchor": "circle-translation-anchor" - }, - "paint_fill": { - "fill-antialias": "is-fill-antialiased", - "fill-translate": "fill-translation", - "fill-translate-anchor": "fill-translation-anchor" - }, - "paint_fill-extrusion": { - "fill-extrusion-translate": "fill-extrusion-translation", - "fill-extrusion-translate-anchor": "fill-extrusion-translation-anchor", - "fill-extrusion-vertical-gradient": "fill-extrusion-has-vertical-gradient" - }, - "paint_raster": { - "raster-brightness-min": "minimum-raster-brightness", - "raster-brightness-max": "maximum-raster-brightness", - "raster-hue-rotate": "raster-hue-rotation", - "raster-resampling": "raster-resampling-mode" - }, - "paint_line": { - "line-dasharray": "line-dash-pattern", - "line-translate": "line-translation", - "line-translate-anchor": "line-translation-anchor" - }, - "paint_symbol": { - "icon-translate": "icon-translation", - "icon-translate-anchor": "icon-translation-anchor", - "text-translate": "text-translation", - "text-translate-anchor": "text-translation-anchor" - } -} \ No newline at end of file diff --git a/platform/darwin/scripts/style-spec-overrides-v8.json b/platform/darwin/scripts/style-spec-overrides-v8.json deleted file mode 100644 index 0ba2b77dc57..00000000000 --- a/platform/darwin/scripts/style-spec-overrides-v8.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "light-cocoa-doc": "An `MGLLight` object represents the light source for extruded geometries in `MGLStyle`.\n\n### Example\n```swift\n```\n\n#### Related examples\nSee the Adjust light of 3D buildings to learn how to create and modify the light source for 3D geometries.", - "light": { - "position": { - "doc": "Position of the `MGLLight` source relative to lit (extruded) geometries, in a `MGLSphericalPosition` struct [radial coordinate, azimuthal angle, polar angle] where radial indicates the distance from the center of the base of an object to its light, azimuthal indicates the position of the light relative to 0° (0° when `MGLLight.anchor` is set to `MGLLightAnchorViewport` corresponds to the top of the viewport, or 0° when `MGLLight.anchor` is set to `MGLLightAnchorMap` corresponds to due north, and degrees proceed clockwise), and polar indicates the height of the light (from 0°, directly above, to 180°, directly below).", - "examples": "See the Adjust light of 3D buildings example to learn how to create and modify the position of value of an `MGLLight` object for 3D geometries." - } - }, - "layer": { - "type": { - "values": { - "fill": { - "doc": "An `MGLFillStyleLayer` is a style layer that renders one or more filled (and optionally stroked) polygons on the map.\n\nUse a fill style layer to configure the visual appearance of polygon or multipolygon features. These features can come from vector tiles loaded by an `MGLVectorTileSource` object, or they can be `MGLPolygon`, `MGLPolygonFeature`, `MGLMultiPolygon`, or `MGLMultiPolygonFeature` instances in an `MGLShapeSource` or `MGLComputedShapeSource` object.", - "examples": "See the Select a feature within a layer example to learn how to use a `TERNARY` expression to modify the `fillOpacity` of an `MGLFillStyleLayer` object. See the Add a pattern to a polygon example to learn how to use an image to add pattern to the features styled by a `MGLFillStyleLayer`." - }, - "fill-extrusion": { - "doc": "An `MGLFillExtrusionStyleLayer` is a style layer that renders one or more 3D extruded polygons on the map.\n\nUse a fill-extrusion style layer to configure the visual appearance of polygon or multipolygon features. These features can come from vector tiles loaded by an `MGLVectorTileSource` object, or they can be `MGLPolygon`, `MGLPolygonFeature`, `MGLMultiPolygon`, or `MGLMultiPolygonFeature` instances in an `MGLShapeSource` or `MGLComputedShapeSource` object.", - "examples": "See the Display 3D buildings example to learn how to add and style 3D layers on a map." - }, - "line": { - "doc": "An `MGLLineStyleLayer` is a style layer that renders one or more stroked polylines on the map.\n\nUse a line style layer to configure the visual appearance of polyline or multipolyline features. These features can come from vector tiles loaded by an `MGLVectorTileSource` object, or they can be `MGLPolyline`, `MGLPolylineFeature`, `MGLMultiPolyline`, or `MGLMultiPolylineFeature` instances in an `MGLShapeSource` or `MGLComputedShapeSource` object.", - "examples": "See the Add multiple shapes from a single shape source example to learn how to add a line to your map using this style layer. See the Add a line style layer from GeoJSON example to learn how to add and style line data to an `MGLMapView` object at runtime." - }, - "symbol": { - "doc": "An `MGLSymbolStyleLayer` is a style layer that renders icon and text labels at points or along lines on the map.\n\nUse a symbol style layer to configure the visual appearance of feature labels. These features can come from vector tiles loaded by an `MGLVectorTileSource` object, or they can be `MGLShape` or `MGLFeature` instances in an `MGLShapeSource` or `MGLComputedShapeSource` object.", - "examples": "See the Dynamically style interactive points and Use images to cluster point data examples learn how to style data on your map using this layer." - }, - "circle": { - "doc": "An `MGLCircleStyleLayer` is a style layer that renders one or more filled circles on the map.\n\nUse a circle style layer to configure the visual appearance of point or point collection features. These features can come from vector tiles loaded by an `MGLVectorTileSource` object, or they can be `MGLPointAnnotation`, `MGLPointFeature`, `MGLPointCollection`, or `MGLPointCollectionFeature` instances in an `MGLShapeSource` or `MGLComputedShapeSource` object.\n\nA circle style layer renders circles whose radii are measured in screen units. To display circles on the map whose radii correspond to real-world distances, use many-sided regular polygons and configure their appearance using an `MGLFillStyleLayer` object.", - "examples": "See the Data-driven circles, Add multiple shapes from a single shape source, and Cluster point data examples to learn how to add circles to your map using this style layer." - }, - "heatmap": { - "doc": "An `MGLHeatmapStyleLayer` is a style layer that renders a heatmap.\n\nA heatmap visualizes the spatial distribution of a large, dense set of point data, using color to avoid cluttering the map with individual points at low zoom levels. The points are weighted by an attribute you specify. Use a heatmap style layer in conjunction with point or point collection features. These features can come from vector tiles loaded by an `MGLVectorTileSource` object, or they can be `MGLPointAnnotation`, `MGLPointFeature`, `MGLPointCollection`, or `MGLPointCollectionFeature` instances in an `MGLShapeSource` or `MGLComputedShapeSource` object.\n\nConsider accompanying a heatmap style layer with an `MGLCircleStyleLayer` or `MGLSymbolStyleLayer` at high zoom levels. If you are unsure whether the point data in an `MGLShapeSource` is dense enough to warrant a heatmap, you can alternatively cluster the source using the `MGLShapeSourceOptionClustered` option and render the data using an `MGLCircleStyleLayer` or `MGLSymbolStyleLayer`.", - "examples": "See the Create a heatmap layer example to learn how to add this style layer to your map." - }, - "raster": { - "doc": "An `MGLRasterStyleLayer` is a style layer that renders georeferenced raster imagery on the map, especially raster tiles.\n\nUse a raster style layer to configure the color parameters of raster tiles loaded by an `MGLRasterTileSource` object or raster images loaded by an `MGLImageSource` object. For example, you could use a raster style layer to render Mapbox Satellite imagery, a raster tile set uploaded to Mapbox Studio, or a raster map authored in TileMill, the classic Mapbox Editor, or Mapbox Studio Classic.\n\nRaster images may also be used as icons or patterns in a style layer. To register an image for use as an icon or pattern, use the `-[MGLStyle setImage:forName:]` method. To configure a point annotation’s image, use the `MGLAnnotationImage` class.", - "examples": "See the Add an image and Add raster imagery examples to learn how to add imagery with this style layer." - }, - "hillshade": { - "doc": "An `MGLHillshadeStyleLayer` is a style layer that renders raster digital elevation model (DEM) tiles on the map.\n\nUse a hillshade style layer to configure the color parameters of raster tiles loaded by an `MGLRasterDEMSource` object. For example, you could use a hillshade style layer to render Mapbox Terrain-RGB data.\n\nTo display posterized hillshading based on vector shapes, as with the Mapbox Terrain source, use an `MGLVectorTileSource` object in conjunction with several `MGLFillStyleLayer` objects." - }, - "background": { - "doc": "An `MGLBackgroundStyleLayer` is a style layer that covers the entire map. Use a background style layer to configure a color or pattern to show below all other map content. If the style’s other layers use the Mapbox Streets source, the background style layer is responsible for drawing land, whereas the oceans and other bodies of water are drawn by `MGLFillStyleLayer` objects.\n\nA background style layer is typically the bottommost layer in a style, because it covers the entire map and can occlude any layers below it. You can therefore access it by getting the last item in the `MGLStyle.layers` array.\n\nIf the background style layer is transparent or omitted from the style, any portion of the map view that does not show another style layer is transparent." - } - } - } - }, - "layout_symbol": { - "symbol-z-order": { - "values": { - "viewport-y": { - "doc": "Specify this z order if symbols’ appearance relies on lower features overlapping higher features. For example, symbols with a pin-like appearance would require this z order." - }, - "source": { - "doc": "Specify this z order if the order in which features appear in the source is significant." - } - } - }, - "icon-text-fit-padding": { - "doc": "Size of the additional area added to dimensions determined by `icon-text-fit`." - }, - "icon-offset": { - "doc": "Offset distance of icon from its anchor." - }, - "icon-image": { - "doc": "Name of a style image to use for drawing an image background.\n\nUse the `+[MGLStyle setImage:forName:]` method to associate an image with a name that you can set this property to.\n\nWithin a constant string value, a feature attribute name enclosed in curly braces (e.g., `{token}`) is replaced with the value of the named attribute. Tokens inside non-constant expressions are ignored; instead, use `mgl_join:` and key path expressions.", - "examples": "See the Use images to cluster point data example to learn how to dynamically set your icons with an expression." - }, - "text-field": { - "doc": "Value to use for a text label.\n\nWithin a constant string value, a feature attribute name enclosed in curly braces (e.g., `{token}`) is replaced with the value of the named attribute. Tokens inside non-constant expressions are ignored; instead, use `mgl_join:` and key path expressions.", - "examples": "See the Cluster point data and Use images to cluster point data to learn how to use an expression to set this attribute to the number of markers within a cluster." - }, - "text-font": { - "doc": "An array of font face names used to display the text.\n\nEach font name must be included in the `{fontstack}` portion of the JSON stylesheet’s glyphs property. You can register a custom font when designing the style in Mapbox Studio. Fonts installed on the system are not used.\n\nThe first font named in the array is applied to the text. For each character in the text, if the first font lacks a glyph for the character, the next font is applied as a fallback, and so on." - }, - "text-offset": { - "doc": "Offset distance of text from its anchor." - }, - "text-transform": { - "doc": "Specifies how to capitalize text." - } - }, - "paint_background": { - "background-pattern": { - "doc": "Name of image in style images to use for drawing an image background. For seamless patterns, image width and height must be a factor of two (2, 4, 8, ..., 512)." - } - }, - "paint_fill": { - "fill-pattern": { - "doc": "Name of image in style images to use for drawing image fills. For seamless patterns, image width and height must be a factor of two (2, 4, 8, ..., 512)." - } - }, - "paint_fill-extrusion": { - "fill-extrusion-pattern": { - "doc": "Name of image in style images to use for drawing image fill-extrusions. For seamless patterns, image width and height must be a factor of two (2, 4, 8, ..., 512)." - }, - "fill-extrusion-translate": { - "doc": "The geometry's offset." - }, - "fill-extrusion-color": { - "doc": "The base color of this layer. The extrusion's surfaces will be shaded differently based on this color in combination with the `light` settings. If this color is specified with an alpha component, the alpha component will be ignored; use `fill-extrusion-opacity` to set layer opacityco." - } - }, - "paint_heatmap": { - "heatmap-color": { - "doc": "The color of each screen point based on its density value in a heatmap. This property is normally set to an interpolation or step expression with the `$heatmapDensity` value as its input." - } - }, - "paint_line": { - "line-gradient": { - "doc": "The color gradient with which the line will be drawn. This property only has an effect on lines defined by an `MGLShapeSource` whose `MGLShapeSourceOptionLineDistanceMetrics` option is set to `YES`." - }, - "line-pattern": { - "doc": "Name of image in style images to use for drawing image lines. For seamless patterns, image width must be a factor of two (2, 4, 8, ..., 512)." - }, - "line-translate": { - "doc": "The geometry's offset." - } - }, - "paint_circle": { - "circle-translate": { - "doc": "The geometry's offset." - } - }, - "paint_fill": { - "fill-translate": { - "doc": "The geometry's offset." - }, - "fill-color": { - "doc": "The color of the filled part of this layer." - } - }, - "paint_symbol": { - "icon-color": { - "doc": "The tint color to apply to the icon. The `icon-image-name` property must be set to a template image." - }, - "icon-halo-color": { - "doc": "The color of the icon’s halo. The `icon-image-name` property must be set to a template image." - }, - "icon-translate": { - "doc": "Distance that the icon's anchor is moved from its original placement." - }, - "text-translate": { - "doc": "Distance that the text's anchor is moved from its original placement." - } - } -} diff --git a/platform/darwin/scripts/update-examples.js b/platform/darwin/scripts/update-examples.js deleted file mode 100755 index 885b26248c1..00000000000 --- a/platform/darwin/scripts/update-examples.js +++ /dev/null @@ -1,148 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -const fs = require('fs'); -const execFileSync = require('child_process').execFileSync; -const _ = require('lodash'); - -require('../../../scripts/style-code'); - -const examplesSrc = fs.readFileSync('platform/darwin/test/MGLDocumentationExampleTests.swift', 'utf8'); - -// Regex extracts the following block -// /** Front matter to describe the example. **/ -// func testMGLClass$member() { -// ... -// // #-example-code -// let sampleCode: String? -// // #-end-example-code -// ... -// } -// -// into the following regex groups: -// 1 (test method name): "MGLClass" or "MGLClass$member" or "MGLClass$initWithArg_anotherArg_" -// 2 (indentation): " " -// 3 (sample code): "let sampleCode: String?" -const exampleRegex = /func test([\w$]+)\s*\(\)\s*\{[^]*?\n([ \t]+)\/\/#-example-code\n([^]+?)\n\2\/\/#-end-example-code\n/gm; - -/** - * Returns the given source with example code inserted into the documentation - * comment for the symbol at the given one-based line. - * - * @param {String} src Source code to insert the example code into. - * @param {Number} line One-based line number of the symbol being documented. - * @param {String} exampleCode Example code to insert. - * @returns {String} `src` with `exampleCode` inserted just above `line`. - */ -function completeSymbolInSource(src, line, exampleCode) { - // Split the file contents right before the symbol declaration (but after its documentation comment). - let srcUpToSymbol = src.split('\n', line - 1).join('\n'); - let srcFromSymbol = src.substr(srcUpToSymbol.length); - - // Match the documentation comment block that is not followed by the beginning or end of a declaration. - let commentMatch = srcUpToSymbol.match(/\/\*\*\s*(?:[^*]|\*(?!\/))+?\s*\*\/[^;{}]*?$/); - - // Replace the Swift code block with the test method’s contents. - let completedComment = commentMatch[0].replace(/^([ \t]*)```swift\n[^]*?```/m, function (m, indentation) { - // Apply the original indentation to each line. - return ('```swift\n' + exampleCode + '\n```').replace(/^/gm, indentation); - }); - - // Splice the modified comment into the overall file contents. - srcUpToSymbol = (srcUpToSymbol.substr(0, commentMatch.index) + completedComment + - srcUpToSymbol.substr(commentMatch.index + commentMatch[0].length)); - return srcUpToSymbol + srcFromSymbol; -} - -let examples = {}; -let match; -while ((match = exampleRegex.exec(examplesSrc)) !== null) { - let testMethodName = match[1], - indentation = match[2], - exampleCode = match[3]; - - // Trim leading whitespace from the example code. - exampleCode = exampleCode.replace(new RegExp('^' + indentation, 'gm'), ''); - - examples[testMethodName] = exampleCode; -} - -function completeExamples(os) { - console.log(`Installing ${os} SDK examples…`); - - let sdk = os === 'iOS' ? 'iphonesimulator' : 'macosx'; - let sysroot = execFileSync('xcrun', ['--show-sdk-path', '--sdk', sdk]).toString().trim(); - let umbrellaPath = `platform/${os.toLowerCase()}/src/Mapbox.h`; - let docArgs = ['doc', '--objc', umbrellaPath, '--', - '-x', 'objective-c', '-I', 'platform/darwin/src/', '-isysroot', sysroot]; - let docStr = execFileSync('sourcekitten', docArgs, { maxBuffer: Infinity }).toString().trim(); - let docJson = JSON.parse(docStr); - _.forEach(docJson, function (result) { - _.forEach(result, function (structure, path) { - let src; - let newSrc; - // Recursively search for code blocks in documentation comments and populate - // them with example code from the test methods. Find and replace the code - // blocks in reverse to keep the SourceKitten line numbers accurate. - _.forEachRight(structure['key.substructure'], function completeSubstructure(substructure, idx, substructures, symbolPath) { - if (!symbolPath) { - symbolPath = [substructure['key.name']]; - } - _.forEachRight(substructure['key.substructure'], function (substructure, idx, substructures) { - completeSubstructure(substructure, idx, substructures, _.concat(symbolPath, substructure['key.name'])); - }); - - let comment = substructure['key.doc.comment']; - if (!comment || !comment.match(/^(?:\s*)```swift\n/m)) { - return; - } - - // Lazily read in the existing file. - if (!src) { - newSrc = src = fs.readFileSync(path, 'utf8'); - } - - // Get the contents of the test method whose name matches the symbol path. - let testMethodName = symbolPath.join('$').replace(/\$[+-]/, '$').replace(/:/g, '_'); - let example = examples[testMethodName]; - if (!example) { - console.error(`MGLDocumentationExampleTests.test${testMethodName}() not found.`); - process.exit(1); - } - - // Resolve conditional compilation blocks. - example = example.replace(/^(\s*)#if\s+os\((iOS|macOS)\)\n([^]*?)(?:^\1#else\n([^]*?))?^\1#endif\b\n?/gm, - function (m, indentation, ifOs, ifCase, elseCase) { - return (os === ifOs ? ifCase : elseCase).replace(new RegExp('^ ', 'gm'), ''); - }).replace(/\n$/, ''); - - // Insert the test method contents into the documentation comment just - // above the substructure. - let startLine = substructure['key.parsed_scope.start']; - newSrc = completeSymbolInSource(newSrc, startLine, example); - }); - - if (!src) { - return; - } - - // Write out the modified file contents. - writeIfModified(path, newSrc) - }); - }); -} - -function ensureSourceKittenIsInstalled() { - try { - execFileSync('which', ['sourcekitten']); - } catch (e) { - console.log(`Installing SourceKitten via Homebrew…`); - execFileSync('brew', ['install', 'sourcekitten']); - } -} - -ensureSourceKittenIsInstalled(); - -// Where a particular comment is part of both SDKs, prefer the iOS example. -completeExamples('macOS'); -completeExamples('iOS'); diff --git a/platform/darwin/src/MGLAccountManager.h b/platform/darwin/src/MGLAccountManager.h deleted file mode 100644 index d1983a4ddce..00000000000 --- a/platform/darwin/src/MGLAccountManager.h +++ /dev/null @@ -1,41 +0,0 @@ -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The `MGLAccountManager` object provides a global way to set a Mapbox API access - token. - */ -MGL_EXPORT -@interface MGLAccountManager : NSObject - -#pragma mark Authorizing Access - -/** - The - Mapbox access token - used by all instances of `MGLMapView` in the current application. - - Mapbox-hosted vector tiles and styles require an API access token, which you - can obtain from the - Mapbox account page. - Access tokens associate requests to Mapbox’s vector tile and style APIs with - your Mapbox account. They also deter other developers from using your styles - without your permission. - - Setting this property to a value of `nil` has no effect. - - @note You must set the access token before attempting to load any Mapbox-hosted - style. Therefore, you should generally set it before creating an instance of - `MGLMapView`. The recommended way to set an access token is to add an entry - to your application’s Info.plist file with the key `MGLMapboxAccessToken` - and the type `String`. Alternatively, you may call this method from your - application delegate’s `-applicationDidFinishLaunching:` method. - */ -@property (class, assign, nullable) NSString *accessToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLAccountManager.m b/platform/darwin/src/MGLAccountManager.m deleted file mode 100644 index c37195967a0..00000000000 --- a/platform/darwin/src/MGLAccountManager.m +++ /dev/null @@ -1,112 +0,0 @@ -#import "MGLAccountManager_Private.h" -#import "NSBundle+MGLAdditions.h" - -#if TARGET_OS_OSX -#import "NSProcessInfo+MGLAdditions.h" -#endif - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -#import "MGLMapboxEvents.h" -#import "MBXSKUToken.h" - -static NSString * const MGLAccountManagerExternalClassName = @"MBXAccounts"; -static NSString * const MGLAccountManagerExternalMethodName = @"skuToken"; -#endif - -NSString * const MGLMapboxAccountTypeKey = @"MGLMapboxAccountType"; - -@interface MGLAccountManager () - -@property (atomic) NSString *accessToken; -@property (nonatomic) NSURL *apiBaseURL; - -@end - -@implementation MGLAccountManager - -#pragma mark - Internal - -+ (void)load { - // Read the initial configuration from Info.plist. - NSString *accessToken = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"MGLMapboxAccessToken"]; - if (accessToken.length) { - self.accessToken = accessToken; - } - - NSString *apiBaseURL = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"MGLMapboxAPIBaseURL"]; - - // If apiBaseURL is not a valid URL, [NSURL URLWithString:] will be `nil`. - if (apiBaseURL.length && [NSURL URLWithString:apiBaseURL]) { - [self setAPIBaseURL:[NSURL URLWithString:apiBaseURL]]; - } -} - -+ (instancetype)sharedManager { -#if TARGET_OS_OSX - if (NSProcessInfo.processInfo.mgl_isInterfaceBuilderDesignablesAgent) { - return nil; - } -#endif - - static dispatch_once_t onceToken; - static MGLAccountManager *_sharedManager; - void (^setupBlock)(void) = ^{ - dispatch_once(&onceToken, ^{ - _sharedManager = [[self alloc] init]; - }); - }; - if (![[NSThread currentThread] isMainThread]) { - dispatch_sync(dispatch_get_main_queue(), ^{ - setupBlock(); - }); - } else { - setupBlock(); - } - return _sharedManager; -} - -+ (void)setAccessToken:(NSString *)accessToken { - accessToken = [accessToken stringByTrimmingCharactersInSet: - [NSCharacterSet whitespaceAndNewlineCharacterSet]]; - if (!accessToken.length) { - return; - } - - [MGLAccountManager sharedManager].accessToken = accessToken; - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - dispatch_async(dispatch_get_main_queue(), ^{ - [MGLMapboxEvents setupWithAccessToken:accessToken]; - }); -#endif -} - -+ (NSString *)accessToken { - return [MGLAccountManager sharedManager].accessToken; -} - -+ (void)setAPIBaseURL:(NSURL *)apiBaseURL { - [MGLAccountManager sharedManager].apiBaseURL = apiBaseURL; -} - -+ (NSURL *)apiBaseURL { - return [MGLAccountManager sharedManager].apiBaseURL; -} - -#pragma mark - SKU Tokens - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - -+ (NSString *)skuToken { - Class mbx = NSClassFromString(MGLAccountManagerExternalClassName); - - if ([mbx respondsToSelector:NSSelectorFromString(MGLAccountManagerExternalMethodName)]) { - return (NSString *)[mbx valueForKeyPath:MGLAccountManagerExternalMethodName]; - } - - return MBXSKUToken.skuToken; -} - -#endif - -@end diff --git a/platform/darwin/src/MGLAccountManager_Private.h b/platform/darwin/src/MGLAccountManager_Private.h deleted file mode 100644 index 4bf79631822..00000000000 --- a/platform/darwin/src/MGLAccountManager_Private.h +++ /dev/null @@ -1,26 +0,0 @@ -#import "MGLAccountManager.h" - -NS_ASSUME_NONNULL_BEGIN - -/// NSUserDefaults key that controls developer account type -FOUNDATION_EXTERN NSString * const MGLMapboxAccountTypeKey; - -@interface MGLAccountManager (Private) - -/// Returns the shared instance of the `MGLAccountManager` class. -@property (class, nonatomic, readonly) MGLAccountManager *sharedManager; - -/// The current global access token. -@property (atomic, nullable) NSString *accessToken; - -/// The API base URL that is used to access Mapbox resources. The default base URL is `https://api.mapbox.com`. If `nil`, the Mapbox default base API URL is in use. -@property (atomic, readwrite, nullable) NSURL *apiBaseURL; - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -/// The current global SKU. -@property (class, atomic, readonly) NSString *skuToken; -#endif - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLAnnotation.h b/platform/darwin/src/MGLAnnotation.h deleted file mode 100644 index a8ac1e7e500..00000000000 --- a/platform/darwin/src/MGLAnnotation.h +++ /dev/null @@ -1,65 +0,0 @@ -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - The `MGLAnnotation` protocol is used to provide annotation-related information - to a map view. To use this protocol, you adopt it in any custom objects that - store or represent annotation data. Each object then serves as the source of - information about a single map annotation and provides critical information, - such as the annotation’s location on the map. Annotation objects do not provide - the visual representation of the annotation but typically coordinate (in - conjunction with the map view’s delegate) the creation of an appropriate - objects to handle the display. - - An object that adopts this protocol must implement the `coordinate` property. - The other methods of this protocol are optional. - - #### Related examples - See the - Annotation models and - Annotation views examples to learn how to add objects that follow the - `MGLAnnotation` protocol. - */ -@protocol MGLAnnotation - -#pragma mark Position Attributes - -/** - The center point (specified as a map coordinate) of the annotation. (required) - (read-only) - */ -@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; - -@optional - -#pragma mark Title Attributes - -/** - The string containing the annotation’s title. - - Although this property is optional, if you support the selection of annotations - in your map view, you are expected to provide this property. This string is - displayed in the callout for the associated annotation. - */ -@property (nonatomic, readonly, copy, nullable) NSString *title; - -/** - The string containing the annotation’s subtitle. - - This string is displayed in the callout for the associated annotation. - */ -@property (nonatomic, readonly, copy, nullable) NSString *subtitle; - -#if !TARGET_OS_IPHONE - -/** The string containing the annotation’s tooltip. */ -@property (nonatomic, readonly, copy, nullable) NSString *toolTip; - -#endif - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLAttributedExpression.h b/platform/darwin/src/MGLAttributedExpression.h deleted file mode 100644 index ea298c7a441..00000000000 --- a/platform/darwin/src/MGLAttributedExpression.h +++ /dev/null @@ -1,87 +0,0 @@ -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** Options for `MGLAttributedExpression.attributes`. */ -typedef NSString * MGLAttributedExpressionKey NS_TYPED_ENUM; - -/** The font name string array expression used to format the text. */ -FOUNDATION_EXTERN MGL_EXPORT MGLAttributedExpressionKey const MGLFontNamesAttribute; - -/** The font scale number expression relative to `MGLSymbolStyleLayer.textFontSize` used to format the text. */ -FOUNDATION_EXTERN MGL_EXPORT MGLAttributedExpressionKey const MGLFontScaleAttribute; - -/** The font color expression used to format the text. */ -FOUNDATION_EXTERN MGL_EXPORT MGLAttributedExpressionKey const MGLFontColorAttribute; - -/** - An `MGLAttributedExpression` object associates text formatting attibutes (such as font size or - font names) to an `NSExpression`. - - ### Example - ```swift - let redColor = UIColor.red - let expression = NSExpression(forConstantValue: "Foo") - let attributes: [MGLAttributedExpressionKey: NSExpression] = [.fontNamesAttribute : NSExpression(forConstantValue: ["DIN Offc Pro Italic", - "Arial Unicode MS Regular"]), - .fontScaleAttribute: NSExpression(forConstantValue: 1.2), - .fontColorAttribute: NSExpression(forConstantValue: redColor)] - let attributedExpression = MGLAttributedExpression(expression, attributes:attributes) - ``` - - */ -MGL_EXPORT -@interface MGLAttributedExpression : NSObject - -/** - The expression content of the receiver as `NSExpression`. - */ -@property (strong, nonatomic) NSExpression *expression; - -#if TARGET_OS_IPHONE -/** - The formatting attributes dictionary. - Key | Value Type - --- | --- - `MGLFontNamesAttribute` | An `NSExpression` evaluating to an `NSString` array. - `MGLFontScaleAttribute` | An `NSExpression` evaluating to an `NSNumber` value. - `MGLFontColorAttribute` | An `NSExpression` evaluating to an `UIColor`. - - */ -@property (strong, nonatomic, readonly) NSDictionary *attributes; -#else -/** - The formatting attributes dictionary. - Key | Value Type - --- | --- - `MGLFontNamesAttribute` | An `NSExpression` evaluating to an `NSString` array. - `MGLFontScaleAttribute` | An `NSExpression` evaluating to an `NSNumber` value. - `MGLFontColorAttribute` | An `NSExpression` evaluating to an `NSColor` on macos. - */ -@property (strong, nonatomic, readonly) NSDictionary *attributes; -#endif - - -/** - Returns an `MGLAttributedExpression` object initialized with an expression and no attribute information. - */ -- (instancetype)initWithExpression:(NSExpression *)expression; - -/** - Returns an `MGLAttributedExpression` object initialized with an expression and text format attributes. - */ -- (instancetype)initWithExpression:(NSExpression *)expression attributes:(nonnull NSDictionary *)attrs; - -/** - Creates an `MGLAttributedExpression` object initialized with an expression and the format attributes for font names and font size. - */ -+ (instancetype)attributedExpression:(NSExpression *)expression fontNames:(nullable NSArray *)fontNames fontScale:(nullable NSNumber *)fontScale; - -/** - Creates an `MGLAttributedExpression` object initialized with an expression and the format attributes dictionary. - */ -+ (instancetype)attributedExpression:(NSExpression *)expression attributes:(nonnull NSDictionary *)attrs; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLAttributedExpression.m b/platform/darwin/src/MGLAttributedExpression.m deleted file mode 100644 index a34480a957f..00000000000 --- a/platform/darwin/src/MGLAttributedExpression.m +++ /dev/null @@ -1,68 +0,0 @@ -#import "MGLAttributedExpression.h" -#import "MGLLoggingConfiguration_Private.h" - -const MGLAttributedExpressionKey MGLFontNamesAttribute = @"text-font"; -const MGLAttributedExpressionKey MGLFontScaleAttribute = @"font-scale"; -const MGLAttributedExpressionKey MGLFontColorAttribute = @"text-color"; - -@implementation MGLAttributedExpression - -- (instancetype)initWithExpression:(NSExpression *)expression { - self = [self initWithExpression:expression attributes:@{}]; - return self; -} - -+ (instancetype)attributedExpression:(NSExpression *)expression fontNames:(nullable NSArray *)fontNames fontScale:(nullable NSNumber *)fontScale { - MGLAttributedExpression *attributedExpression; - - NSMutableDictionary *attrs = [NSMutableDictionary dictionary]; - - if (fontNames && fontNames.count > 0) { - attrs[MGLFontNamesAttribute] = [NSExpression expressionForConstantValue:fontNames]; - } - - if (fontScale) { - attrs[MGLFontScaleAttribute] = [NSExpression expressionForConstantValue:fontScale]; - } - - attributedExpression = [[self alloc] initWithExpression:expression attributes:attrs]; - return attributedExpression; -} - -+ (instancetype)attributedExpression:(NSExpression *)expression attributes:(nonnull NSDictionary *)attrs { - MGLAttributedExpression *attributedExpression; - - attributedExpression = [[self alloc] initWithExpression:expression attributes:attrs]; - - return attributedExpression; -} - -- (instancetype)initWithExpression:(NSExpression *)expression attributes:(nonnull NSDictionary *)attrs { - if (self = [super init]) - { - MGLLogInfo(@"Starting %@ initialization.", NSStringFromClass([self class])); - _expression = expression; - _attributes = attrs; - - MGLLogInfo(@"Finalizing %@ initialization.", NSStringFromClass([self class])); - } - return self; -} - -- (BOOL)isEqual:(id)object { - BOOL result = NO; - - if ([object isKindOfClass:[self class]]) { - MGLAttributedExpression *otherObject = object; - result = [self.expression isEqual:otherObject.expression] && - [_attributes isEqual:otherObject.attributes]; - } - - return result; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"MGLAttributedExpression", self.expression, self.attributes]; -} - -@end diff --git a/platform/darwin/src/MGLAttributionInfo.h b/platform/darwin/src/MGLAttributionInfo.h deleted file mode 100644 index 1de37c3b24a..00000000000 --- a/platform/darwin/src/MGLAttributionInfo.h +++ /dev/null @@ -1,94 +0,0 @@ -#import -#import -#import - -#import "MGLFoundation.h" -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The attribution info is represented in the longest format available. - */ -typedef NS_ENUM(NSUInteger, MGLAttributionInfoStyle) { - /** - Specifies a short attribution info style. - */ - MGLAttributionInfoStyleShort = 1, - /** - Specifies a medium attribution info style. - */ - MGLAttributionInfoStyleMedium, - /** - Specifies a long attribution info style. - */ - MGLAttributionInfoStyleLong -}; - -/** - Information about an attribution statement, usually a copyright or trademark - statement, associated with a map content source. - */ -MGL_EXPORT -@interface MGLAttributionInfo : NSObject - -/** - Returns an initialized attribution info object with the given title and URL. - - @param title The attribution statement’s title. - @param URL A URL to more information about the entity named in the attribution. - @return An initialized attribution info object. - */ -- (instancetype)initWithTitle:(NSAttributedString *)title URL:(nullable NSURL *)URL; - -/** - The attribution statement’s attributed title text. - */ -@property (nonatomic) NSAttributedString *title; - -/** - The URL to more information about the entity named in the attribution. - - If this property is set, the attribution statement should be displayed as a - hyperlink or action button. Otherwise, if it is `nil`, the attribution - statement should be displayed as plain text. - */ -@property (nonatomic, nullable) NSURL *URL; - -/** - A Boolean value indicating whether the attribution statement is a shortcut to a - feedback tool. - - If this property is set, the statement should be treated as a way for the user - to provide feedback rather than an attribution statement. - */ -@property (nonatomic, getter=isFeedbackLink) BOOL feedbackLink; - -/** - Returns a copy of the `URL` property modified to account for the given center - coordinate and zoom level. - - @param centerCoordinate The map’s center coordinate. - @param zoomLevel The map’s zoom level. See the `MGLMapView.zoomLevel` property - for more information. - @return A modified URL containing a fragment that points to the specified - viewport. If the `feedbackLink` property is set to `NO`, this method returns - `nil`. - */ -- (nullable NSURL *)feedbackURLAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(double)zoomLevel; - -/** - Returns a copy of the current `title` formatted accordingly to `style`. - - Example: If the `style` property is set to `MGLAttributionInfoStyleShort` and the - `title` property is set to `OpenStreetMap`, then this method returns `OSM`. - - @param style The attribution info style. - - @return The `NSAttributedString` styled title. - */ -- (NSAttributedString *)titleWithStyle:(MGLAttributionInfoStyle)style; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLAttributionInfo.mm b/platform/darwin/src/MGLAttributionInfo.mm deleted file mode 100644 index 17d159f6606..00000000000 --- a/platform/darwin/src/MGLAttributionInfo.mm +++ /dev/null @@ -1,279 +0,0 @@ -#import "MGLAttributionInfo_Private.h" - -#if TARGET_OS_IPHONE - #import -#else - #import -#endif - -#import "MGLAccountManager.h" -#import "MGLMapCamera.h" -#import "NSArray+MGLAdditions.h" -#import "NSBundle+MGLAdditions.h" -#import "NSString+MGLAdditions.h" -#import "MGLLoggingConfiguration_Private.h" - -#include - -@implementation MGLAttributionInfo - -+ (NSArray *)attributionInfosFromHTMLString:(nullable NSString *)htmlString fontSize:(CGFloat)fontSize linkColor:(nullable MGLColor *)linkColor { - if (!htmlString) { - return @[]; - } - - NSDictionary *options = @{ - NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, - NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding), - }; - // Apply a bogus, easily detectable style rule to any feedback link, since - // NSAttributedString doesn’t preserve the class attribute. - NSMutableString *css = [NSMutableString stringWithString: - @"html { font-family: -apple-system, -apple-system-font, sans-serif; }" - @".mapbox-improve-map { -webkit-text-stroke-width: 1000px; }"]; - if (fontSize) { - NSString *sizeRule = [NSString stringWithFormat:@"font-size: %.1fpx;", fontSize]; -#if !TARGET_OS_IPHONE - if (fontSize == [NSFont systemFontSizeForControlSize:NSMiniControlSize]) { - sizeRule = @"font: -webkit-mini-control"; - } else if (fontSize == [NSFont systemFontSizeForControlSize:NSSmallControlSize]) { - sizeRule = @"font: -webkit-small-control"; - } else if (fontSize == [NSFont systemFontSizeForControlSize:NSRegularControlSize]) { - sizeRule = @"font: -webkit-control"; - } -#endif - [css appendFormat:@"html { %@ }", sizeRule]; - } - if (linkColor) { - CGFloat red; - CGFloat green; - CGFloat blue; - CGFloat alpha; -#if !TARGET_OS_IPHONE - // CSS uses the sRGB color space. - if ([NSColor redColor].colorSpaceName == NSCalibratedRGBColorSpace) { - linkColor = [linkColor colorUsingColorSpaceName:NSCalibratedRGBColorSpace]; - } else { - linkColor = [linkColor colorUsingColorSpace:[NSColorSpace sRGBColorSpace]]; - } -#endif - [linkColor getRed:&red green:&green blue:&blue alpha:&alpha]; - [css appendFormat: - @"a:link { color: rgba(%f%%, %f%%, %f%%, %f); }", - red * 100, green * 100, blue * 100, alpha]; - } - NSString *styledHTML = [NSString stringWithFormat:@"%@", css, htmlString]; - NSData *htmlData = [styledHTML dataUsingEncoding:NSUTF8StringEncoding]; - -#if TARGET_OS_IPHONE - __block NSMutableAttributedString *attributedString; - dispatch_block_t initialization = ^{ - // This initializer should be called from a global or main queue. https://developer.apple.com/documentation/foundation/nsattributedstring/1524613-initwithdata - attributedString = [[NSMutableAttributedString alloc] initWithData:htmlData - options:options - documentAttributes:nil - error:NULL]; - }; - - if (![[NSThread currentThread] isMainThread]) { - dispatch_sync(dispatch_get_main_queue(), initialization); - } else { - initialization(); - } -#else - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithHTML:htmlData - options:options - documentAttributes:nil]; -#endif - - NSMutableArray *infos = [NSMutableArray array]; - [attributedString enumerateAttribute:NSLinkAttributeName - inRange:attributedString.mgl_wholeRange - options:0 - usingBlock: - ^(id _Nullable value, NSRange range, BOOL * _Nonnull stop) { - MGLCAssert(!value || [value isKindOfClass:[NSURL class]], @"If present, URL attribute must be an NSURL."); - - // Detect feedback links by the bogus style rule applied above. - NSNumber *strokeWidth = [attributedString attribute:NSStrokeWidthAttributeName - atIndex:range.location - effectiveRange:NULL]; - BOOL isFeedbackLink = NO; - if ([strokeWidth floatValue] > 100) { - isFeedbackLink = YES; - [attributedString removeAttribute:NSStrokeWidthAttributeName range:range]; - } - - // Omit whitespace-only strings. - NSAttributedString *title = [[attributedString attributedSubstringFromRange:range] - mgl_attributedStringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - if (!title.length) { - return; - } - - // Remove the link, because it forces the text to be blue on macOS 10.12 - // and above. - NSMutableAttributedString *unlinkedTitle = [title mutableCopy]; - [unlinkedTitle removeAttribute:NSLinkAttributeName range:unlinkedTitle.mgl_wholeRange]; - - MGLAttributionInfo *info = [[MGLAttributionInfo alloc] initWithTitle:unlinkedTitle URL:value]; - info.feedbackLink = isFeedbackLink; - [infos addObject:info]; - }]; - return infos; -} - -+ (NSAttributedString *)attributedStringForAttributionInfos:(NSArray *)attributionInfos { - NSMutableArray *titles = [NSMutableArray arrayWithCapacity:attributionInfos.count]; - for (MGLAttributionInfo *info in attributionInfos) { - NSMutableAttributedString *title = info.title.mutableCopy; - if (info.URL) { - [title addAttribute:NSLinkAttributeName value:info.URL range:title.mgl_wholeRange]; - } - [titles addObject:title]; - } - return [titles mgl_attributedComponentsJoinedByString:@" "]; -} - -- (instancetype)initWithTitle:(NSAttributedString *)title URL:(NSURL *)URL { - if (self = [super init]) { - _title = title; - _URL = URL; - } - return self; -} - -- (id)copyWithZone:(nullable NSZone *)zone -{ - MGLAttributionInfo *info = [[[self class] allocWithZone:zone] initWithTitle:_title - URL:_URL]; - info.feedbackLink = _feedbackLink; - - return info; -} - -- (nullable NSURL *)feedbackURLAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(double)zoomLevel { - return [self feedbackURLForStyleURL:nil atCenterCoordinate:centerCoordinate zoomLevel:zoomLevel direction:0 pitch:0]; -} - -- (nullable NSURL *)feedbackURLForStyleURL:(nullable NSURL *)styleURL atCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(double)zoomLevel direction:(CLLocationDirection)direction pitch:(CGFloat)pitch { - if (!self.feedbackLink) { - return nil; - } - - NSURLComponents *components = [NSURLComponents componentsWithString:@"https://apps.mapbox.com/feedback/"]; - components.fragment = [NSString stringWithFormat:@"/%.5f/%.5f/%.2f/%.1f/%i", - centerCoordinate.longitude, centerCoordinate.latitude, zoomLevel, - direction, (int)round(pitch)]; - - NSURLQueryItem *referrerQueryItem = [NSURLQueryItem queryItemWithName:@"referrer" - value:[NSBundle mgl_applicationBundleIdentifier]]; - NSMutableArray *queryItems = [NSMutableArray arrayWithObject:referrerQueryItem]; - if ([styleURL.scheme isEqualToString:@"mapbox"] && [styleURL.host isEqualToString:@"styles"]) { - NSArray *stylePathComponents = styleURL.pathComponents; - if (stylePathComponents.count >= 3) { - [queryItems addObjectsFromArray:@[ - [NSURLQueryItem queryItemWithName:@"owner" value:stylePathComponents[1]], - [NSURLQueryItem queryItemWithName:@"id" value:stylePathComponents[2]], - [NSURLQueryItem queryItemWithName:@"access_token" value:[MGLAccountManager accessToken]], - [NSURLQueryItem queryItemWithName:@"map_sdk_version" value:[NSBundle mgl_frameworkInfoDictionary][@"MGLSemanticVersionString"]], - ]]; - } - } - components.queryItems = queryItems; - - return components.URL; -} - -- (NSAttributedString *)titleWithStyle:(MGLAttributionInfoStyle)style -{ - NSString *openStreetMap = NSLocalizedStringWithDefaultValue(@"OSM_FULL_NAME", @"Foundation", nil, @"OpenStreetMap", @"OpenStreetMap full name attribution"); - NSString *OSM = NSLocalizedStringWithDefaultValue(@"OSM_SHORT_NAME", @"Foundation", nil, @"OSM", @"OpenStreetMap short name attribution"); - - NSMutableAttributedString *title = [[NSMutableAttributedString alloc] initWithAttributedString:self.title]; - [title removeAttribute:NSUnderlineStyleAttributeName range:NSMakeRange(0, [title.string length])]; - - BOOL isAbbreviated = (style == MGLAttributionInfoStyleShort); - - if ([title.string rangeOfString:@"OpenStreetMap"].location != NSNotFound) { - [title.mutableString replaceOccurrencesOfString:@"OpenStreetMap" withString:isAbbreviated ? OSM : openStreetMap - options:NSCaseInsensitiveSearch - range:NSMakeRange(0, [title.mutableString length])]; - } - - return title; -} - -- (BOOL)isEqual:(id)object { - return [object isKindOfClass:[self class]] && [[object title] isEqual:self.title] && [[object URL] isEqual:self.URL]; -} - -- (NSUInteger)hash { - return self.title.hash + self.URL.hash; -} - -/** - Returns whether the given attribution info object overlaps with the receiver by - its plain text title. - - @return `NSOrderedAscending` if the given object is a superset of the receiver, - `NSOrderedDescending` if it is a subset of the receiver, or `NSOrderedSame` - if there is no overlap. - */ -- (NSComparisonResult)subsetCompare:(MGLAttributionInfo *)otherInfo { - NSString *title = self.title.string; - NSString *otherTitle = otherInfo.title.string; - if ([title containsString:otherTitle]) { - return NSOrderedDescending; - } - if ([otherTitle containsString:title]) { - return NSOrderedAscending; - } - return NSOrderedSame; -} - -@end - -@implementation NSMutableArray (MGLAttributionInfoAdditions) - -- (void)growArrayByAddingAttributionInfo:(MGLAttributionInfo *)info { - __block BOOL didInsertInfo = NO; - __block BOOL shouldAddInfo = YES; - [self enumerateObjectsUsingBlock:^(MGLAttributionInfo * _Nonnull existingInfo, NSUInteger idx, BOOL * _Nonnull stop) { - switch ([info subsetCompare:existingInfo]) { - case NSOrderedDescending: - // The existing info object is a subset of the one we’re adding. - // Replace the existing object the first time we find a subset; - // remove the existing object every time after that. - if (didInsertInfo) { - [self removeObjectAtIndex:idx]; - } else { - [self replaceObjectAtIndex:idx withObject:info]; - didInsertInfo = YES; - } - break; - - case NSOrderedAscending: - // The info object we’re adding is a subset of the existing one. - // Don’t add the object and stop looking. - shouldAddInfo = NO; - *stop = YES; - break; - - default: - break; - } - }]; - if (shouldAddInfo && !didInsertInfo) { - // No overlapping infos were found, so append the info object. - [self addObject:info]; - } -} - -- (void)growArrayByAddingAttributionInfosFromArray:(NSArray *)infos { - for (MGLAttributionInfo *info in infos) { - [self growArrayByAddingAttributionInfo:info]; - } -} - -@end diff --git a/platform/darwin/src/MGLAttributionInfo_Private.h b/platform/darwin/src/MGLAttributionInfo_Private.h deleted file mode 100644 index 85c9ed796f6..00000000000 --- a/platform/darwin/src/MGLAttributionInfo_Private.h +++ /dev/null @@ -1,65 +0,0 @@ -#import -#import -#import - -#import "MGLAttributionInfo.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLAttributionInfo (Private) - -/** - Parses and returns the attribution infos contained in the given HTML source - code string. - - @param htmlString The HTML source code to parse. - @param fontSize The default text size in points. - @param linkColor The default link color. - */ -+ (NSArray *)attributionInfosFromHTMLString:(nullable NSString *)htmlString fontSize:(CGFloat)fontSize linkColor:(nullable MGLColor *)linkColor; - -+ (NSAttributedString *)attributedStringForAttributionInfos:(NSArray *)attributionInfos; - -/** - Returns a copy of the `URL` property modified to account for the given style - URL, center coordinate, and zoom level. - - @param styleURL The map’s style URL. - @param centerCoordinate The map’s center coordinate. - @param zoomLevel The map’s zoom level. See the `MGLMapView.zoomLevel` property - for more information. - @param direction The heading of the map, measured in degrees clockwise from - true north. - @param pitch Pitch toward the horizon measured in degrees, with 0 degrees - resulting in a two-dimensional map. - @return A modified URL containing a fragment that points to the specified - viewport. If the `feedbackLink` property is set to `NO`, this method returns - `nil`. - */ -- (nullable NSURL *)feedbackURLForStyleURL:(nullable NSURL *)styleURL atCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(double)zoomLevel direction:(CLLocationDirection)direction pitch:(CGFloat)pitch; - -@end - -@interface NSMutableArray (MGLAttributionInfoAdditions) - -/** - Adds the given attribution info object to the receiver as long as it isn’t - redundant to any object already in the receiver. Any existing object that is - redundant to the given object is replaced by the given object. - - @param info The info object to add to the receiver. - */ -- (void)growArrayByAddingAttributionInfo:(MGLAttributionInfo *)info; - -/** - Adds each of the given attribution info objects to the receiver as long as it - isn’t redundant to any object already in the receiver. Any existing object that - is redundant to the given object is replaced by the given object. - - @param infos An array of info objects to add to the receiver. - */ -- (void)growArrayByAddingAttributionInfosFromArray:(NSArray *)infos; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLBackgroundStyleLayer.h b/platform/darwin/src/MGLBackgroundStyleLayer.h deleted file mode 100644 index 31755c8bad7..00000000000 --- a/platform/darwin/src/MGLBackgroundStyleLayer.h +++ /dev/null @@ -1,149 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLFoundation.h" -#import "MGLStyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - An `MGLBackgroundStyleLayer` is a style layer that covers the entire map. Use a - background style layer to configure a color or pattern to show below all other - map content. If the style’s other layers use the Mapbox Streets source, the - background style layer is responsible for drawing land, whereas the oceans and - other bodies of water are drawn by `MGLFillStyleLayer` objects. - - A background style layer is typically the bottommost layer in a style, because - it covers the entire map and can occlude any layers below it. You can therefore - access it by getting the last item in the `MGLStyle.layers` array. - - If the background style layer is transparent or omitted from the style, any - portion of the map view that does not show another style layer is transparent. - */ -MGL_EXPORT -@interface MGLBackgroundStyleLayer : MGLStyleLayer - -/** -Returns a background style layer initialized with an identifier. - -After initializing and configuring the style layer, add it to a map view’s -style using the `-[MGLStyle addLayer:]` or -`-[MGLStyle insertLayer:belowLayer:]` method. - -@param identifier A string that uniquely identifies the source in the style to -which it is added. -*/ -- (instancetype)initWithIdentifier:(NSString *)identifier; - -#pragma mark - Accessing the Paint Attributes - -#if TARGET_OS_IPHONE -/** - The color with which the background will be drawn. - - The default value of this property is an expression that evaluates to - `UIColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `backgroundPattern` is set to - `nil`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *backgroundColor; -#else -/** - The color with which the background will be drawn. - - The default value of this property is an expression that evaluates to - `NSColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `backgroundPattern` is set to - `nil`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *backgroundColor; -#endif - -/** - The transition affecting any changes to this layer’s `backgroundColor` property. - - This property corresponds to the `background-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition backgroundColorTransition; - -/** - The opacity at which the background will be drawn. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *backgroundOpacity; - -/** - The transition affecting any changes to this layer’s `backgroundOpacity` property. - - This property corresponds to the `background-opacity-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition backgroundOpacityTransition; - -/** - Name of image in style images to use for drawing an image background. For - seamless patterns, image width and height must be a factor of two (2, 4, 8, - ..., 512). - - You can set this property to an expression containing any of the following: - - * Constant string values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *backgroundPattern; - -/** - The transition affecting any changes to this layer’s `backgroundPattern` property. - - This property corresponds to the `background-pattern-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition backgroundPatternTransition; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLBackgroundStyleLayer.mm b/platform/darwin/src/MGLBackgroundStyleLayer.mm deleted file mode 100644 index 053e05c5c4a..00000000000 --- a/platform/darwin/src/MGLBackgroundStyleLayer.mm +++ /dev/null @@ -1,146 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLSource.h" -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLStyleLayer_Private.h" -#import "MGLStyleValue_Private.h" -#import "MGLBackgroundStyleLayer.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLBackgroundStyleLayer_Private.h" - -#include -#include - - -@interface MGLBackgroundStyleLayer () - -@property (nonatomic, readonly) mbgl::style::BackgroundLayer *rawLayer; - -@end - -@implementation MGLBackgroundStyleLayer - -- (instancetype)initWithIdentifier:(NSString *)identifier -{ - MGLLogDebug(@"Initializing %@ with identifier: %@", NSStringFromClass([self class]), identifier); - auto layer = std::make_unique(identifier.UTF8String); - return self = [super initWithPendingLayer:std::move(layer)]; -} - -- (mbgl::style::BackgroundLayer *)rawLayer -{ - return (mbgl::style::BackgroundLayer *)super.rawLayer; -} - -#pragma mark - Accessing the Paint Attributes - -- (void)setBackgroundColor:(NSExpression *)backgroundColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting backgroundColor: %@", backgroundColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(backgroundColor, false); - self.rawLayer->setBackgroundColor(mbglValue); -} - -- (NSExpression *)backgroundColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getBackgroundColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultBackgroundColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setBackgroundColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting backgroundColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setBackgroundColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)backgroundColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getBackgroundColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setBackgroundOpacity:(NSExpression *)backgroundOpacity { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting backgroundOpacity: %@", backgroundOpacity); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(backgroundOpacity, false); - self.rawLayer->setBackgroundOpacity(mbglValue); -} - -- (NSExpression *)backgroundOpacity { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getBackgroundOpacity(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultBackgroundOpacity(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setBackgroundOpacityTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting backgroundOpacityTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setBackgroundOpacityTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)backgroundOpacityTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getBackgroundOpacityTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setBackgroundPattern:(NSExpression *)backgroundPattern { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting backgroundPattern: %@", backgroundPattern); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(backgroundPattern, false); - self.rawLayer->setBackgroundPattern(mbglValue); -} - -- (NSExpression *)backgroundPattern { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getBackgroundPattern(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultBackgroundPattern(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setBackgroundPatternTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting backgroundPatternTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setBackgroundPatternTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)backgroundPatternTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getBackgroundPatternTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -@end - -namespace mbgl { - -MGLStyleLayer* BackgroundStyleLayerPeerFactory::createPeer(style::Layer* rawLayer) { - return [[MGLBackgroundStyleLayer alloc] initWithRawLayer:rawLayer]; -} - -} // namespace mbgl diff --git a/platform/darwin/src/MGLBackgroundStyleLayer_Private.h b/platform/darwin/src/MGLBackgroundStyleLayer_Private.h deleted file mode 100644 index b50a681b41f..00000000000 --- a/platform/darwin/src/MGLBackgroundStyleLayer_Private.h +++ /dev/null @@ -1,17 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -#pragma once - -#include "MGLStyleLayer_Private.h" - -#include - -namespace mbgl { - -class BackgroundStyleLayerPeerFactory : public LayerPeerFactory, public mbgl::BackgroundLayerFactory { - // LayerPeerFactory overrides. - LayerFactory* getCoreLayerFactory() final { return this; } - virtual MGLStyleLayer* createPeer(style::Layer*) final; -}; - -} // namespace mbgl diff --git a/platform/darwin/src/MGLCircleStyleLayer.h b/platform/darwin/src/MGLCircleStyleLayer.h deleted file mode 100644 index e2b043a7296..00000000000 --- a/platform/darwin/src/MGLCircleStyleLayer.h +++ /dev/null @@ -1,540 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLFoundation.h" -#import "MGLVectorStyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Orientation of circle when map is pitched. - - Values of this type are used in the `MGLCircleStyleLayer.circlePitchAlignment` - property. - */ -typedef NS_ENUM(NSUInteger, MGLCirclePitchAlignment) { - /** - The circle is aligned to the plane of the map. - */ - MGLCirclePitchAlignmentMap, - /** - The circle is aligned to the plane of the viewport. - */ - MGLCirclePitchAlignmentViewport, -}; - -/** - Controls the scaling behavior of the circle when the map is pitched. - - Values of this type are used in the `MGLCircleStyleLayer.circleScaleAlignment` - property. - */ -typedef NS_ENUM(NSUInteger, MGLCircleScaleAlignment) { - /** - Circles are scaled according to their apparent distance to the camera. - */ - MGLCircleScaleAlignmentMap, - /** - Circles are not scaled. - */ - MGLCircleScaleAlignmentViewport, -}; - -/** - Controls the frame of reference for `MGLCircleStyleLayer.circleTranslation`. - - Values of this type are used in the `MGLCircleStyleLayer.circleTranslationAnchor` - property. - */ -typedef NS_ENUM(NSUInteger, MGLCircleTranslationAnchor) { - /** - The circle is translated relative to the map. - */ - MGLCircleTranslationAnchorMap, - /** - The circle is translated relative to the viewport. - */ - MGLCircleTranslationAnchorViewport, -}; - -/** - An `MGLCircleStyleLayer` is a style layer that renders one or more filled - circles on the map. - - Use a circle style layer to configure the visual appearance of point or point - collection features. These features can come from vector tiles loaded by an - `MGLVectorTileSource` object, or they can be `MGLPointAnnotation`, - `MGLPointFeature`, `MGLPointCollection`, or `MGLPointCollectionFeature` - instances in an `MGLShapeSource` or `MGLComputedShapeSource` object. - - A circle style layer renders circles whose radii are measured in screen units. - To display circles on the map whose radii correspond to real-world distances, - use many-sided regular polygons and configure their appearance using an - `MGLFillStyleLayer` object. - - You can access an existing circle style layer using the - `-[MGLStyle layerWithIdentifier:]` method if you know its identifier; - otherwise, find it using the `MGLStyle.layers` property. You can also create a - new circle style layer and add it to the style using a method such as - `-[MGLStyle addLayer:]`. - - #### Related examples - See the Data-driven - circles, Add multiple - shapes from a single shape source, and Cluster point - data examples to learn how to add circles to your map using this style - layer. - - ### Example - - ```swift - let layer = MGLCircleStyleLayer(identifier: "circles", source: population) - layer.sourceLayerIdentifier = "population" - layer.circleColor = NSExpression(forConstantValue: UIColor.green) - layer.circleRadius = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.75, %@)", - [12: 2, - 22: 180]) - layer.circleOpacity = NSExpression(forConstantValue: 0.7) - layer.predicate = NSPredicate(format: "%K == %@", "marital-status", "married") - mapView.style?.addLayer(layer) - ``` - */ -MGL_EXPORT -@interface MGLCircleStyleLayer : MGLVectorStyleLayer - -/** - Returns a circle style layer initialized with an identifier and source. - - After initializing and configuring the style layer, add it to a map view’s - style using the `-[MGLStyle addLayer:]` or - `-[MGLStyle insertLayer:belowLayer:]` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param source The source from which to obtain the data to style. If the source - has not yet been added to the current style, the behavior is undefined. - @return An initialized foreground style layer. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source; - -#pragma mark - Accessing the Paint Attributes - -/** - Amount to blur the circle. 1 blurs the circle such that only the centerpoint is - full opacity. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *circleBlur; - -/** - The transition affecting any changes to this layer’s `circleBlur` property. - - This property corresponds to the `circle-blur-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition circleBlurTransition; - -#if TARGET_OS_IPHONE -/** - The fill color of the circle. - - The default value of this property is an expression that evaluates to - `UIColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *circleColor; -#else -/** - The fill color of the circle. - - The default value of this property is an expression that evaluates to - `NSColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *circleColor; -#endif - -/** - The transition affecting any changes to this layer’s `circleColor` property. - - This property corresponds to the `circle-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition circleColorTransition; - -/** - The opacity at which the circle will be drawn. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *circleOpacity; - -/** - The transition affecting any changes to this layer’s `circleOpacity` property. - - This property corresponds to the `circle-opacity-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition circleOpacityTransition; - -/** - Orientation of circle when map is pitched. - - The default value of this property is an expression that evaluates to - `viewport`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant `MGLCirclePitchAlignment` values - * Any of the following constant string values: - * `map`: The circle is aligned to the plane of the map. - * `viewport`: The circle is aligned to the plane of the viewport. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *circlePitchAlignment; - -/** - Circle radius. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `5`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *circleRadius; - -/** - The transition affecting any changes to this layer’s `circleRadius` property. - - This property corresponds to the `circle-radius-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition circleRadiusTransition; - -/** - Controls the scaling behavior of the circle when the map is pitched. - - The default value of this property is an expression that evaluates to `map`. - Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the circle-pitch-scale - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `MGLCircleScaleAlignment` values - * Any of the following constant string values: - * `map`: Circles are scaled according to their apparent distance to the - camera. - * `viewport`: Circles are not scaled. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *circleScaleAlignment; - -@property (nonatomic, null_resettable) NSExpression *circlePitchScale __attribute__((unavailable("Use circleScaleAlignment instead."))); - -#if TARGET_OS_IPHONE -/** - The stroke color of the circle. - - The default value of this property is an expression that evaluates to - `UIColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *circleStrokeColor; -#else -/** - The stroke color of the circle. - - The default value of this property is an expression that evaluates to - `NSColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *circleStrokeColor; -#endif - -/** - The transition affecting any changes to this layer’s `circleStrokeColor` property. - - This property corresponds to the `circle-stroke-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition circleStrokeColorTransition; - -/** - The opacity of the circle's stroke. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *circleStrokeOpacity; - -/** - The transition affecting any changes to this layer’s `circleStrokeOpacity` property. - - This property corresponds to the `circle-stroke-opacity-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition circleStrokeOpacityTransition; - -/** - The width of the circle's stroke. Strokes are placed outside of the - `circleRadius`. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *circleStrokeWidth; - -/** - The transition affecting any changes to this layer’s `circleStrokeWidth` property. - - This property corresponds to the `circle-stroke-width-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition circleStrokeWidthTransition; - -#if TARGET_OS_IPHONE -/** - The geometry's offset. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 - points downward. Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the circle-translate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *circleTranslation; -#else -/** - The geometry's offset. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 - points upward. Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the circle-translate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *circleTranslation; -#endif - -/** - The transition affecting any changes to this layer’s `circleTranslation` property. - - This property corresponds to the `circle-translate-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition circleTranslationTransition; - -@property (nonatomic, null_resettable) NSExpression *circleTranslate __attribute__((unavailable("Use circleTranslation instead."))); - -/** - Controls the frame of reference for `circleTranslation`. - - The default value of this property is an expression that evaluates to `map`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `circleTranslation` is non-`nil`. - Otherwise, it is ignored. - - This attribute corresponds to the circle-translate-anchor - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `MGLCircleTranslationAnchor` values - * Any of the following constant string values: - * `map`: The circle is translated relative to the map. - * `viewport`: The circle is translated relative to the viewport. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *circleTranslationAnchor; - -@property (nonatomic, null_resettable) NSExpression *circleTranslateAnchor __attribute__((unavailable("Use circleTranslationAnchor instead."))); - -@end - -/** - Methods for wrapping an enumeration value for a style layer attribute in an - `MGLCircleStyleLayer` object and unwrapping its raw value. - */ -@interface NSValue (MGLCircleStyleLayerAdditions) - -#pragma mark Working with Circle Style Layer Attribute Values - -/** - Creates a new value object containing the given `MGLCirclePitchAlignment` enumeration. - - @param circlePitchAlignment The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLCirclePitchAlignment:(MGLCirclePitchAlignment)circlePitchAlignment; - -/** - The `MGLCirclePitchAlignment` enumeration representation of the value. - */ -@property (readonly) MGLCirclePitchAlignment MGLCirclePitchAlignmentValue; - -/** - Creates a new value object containing the given `MGLCircleScaleAlignment` enumeration. - - @param circleScaleAlignment The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLCircleScaleAlignment:(MGLCircleScaleAlignment)circleScaleAlignment; - -/** - The `MGLCircleScaleAlignment` enumeration representation of the value. - */ -@property (readonly) MGLCircleScaleAlignment MGLCircleScaleAlignmentValue; - -/** - Creates a new value object containing the given `MGLCircleTranslationAnchor` enumeration. - - @param circleTranslationAnchor The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLCircleTranslationAnchor:(MGLCircleTranslationAnchor)circleTranslationAnchor; - -/** - The `MGLCircleTranslationAnchor` enumeration representation of the value. - */ -@property (readonly) MGLCircleTranslationAnchor MGLCircleTranslationAnchorValue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLCircleStyleLayer.mm b/platform/darwin/src/MGLCircleStyleLayer.mm deleted file mode 100644 index 6f82d85ce10..00000000000 --- a/platform/darwin/src/MGLCircleStyleLayer.mm +++ /dev/null @@ -1,477 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLSource.h" -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLStyleLayer_Private.h" -#import "MGLStyleValue_Private.h" -#import "MGLCircleStyleLayer.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLCircleStyleLayer_Private.h" - -#include -#include - - -namespace mbgl { - - MBGL_DEFINE_ENUM(MGLCirclePitchAlignment, { - { MGLCirclePitchAlignmentMap, "map" }, - { MGLCirclePitchAlignmentViewport, "viewport" }, - }); - - MBGL_DEFINE_ENUM(MGLCircleScaleAlignment, { - { MGLCircleScaleAlignmentMap, "map" }, - { MGLCircleScaleAlignmentViewport, "viewport" }, - }); - - MBGL_DEFINE_ENUM(MGLCircleTranslationAnchor, { - { MGLCircleTranslationAnchorMap, "map" }, - { MGLCircleTranslationAnchorViewport, "viewport" }, - }); - -} - -@interface MGLCircleStyleLayer () - -@property (nonatomic, readonly) mbgl::style::CircleLayer *rawLayer; - -@end - -@implementation MGLCircleStyleLayer - -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source -{ - MGLLogDebug(@"Initializing %@ with identifier: %@ source: %@", NSStringFromClass([self class]), identifier, source); - auto layer = std::make_unique(identifier.UTF8String, source.identifier.UTF8String); - return self = [super initWithPendingLayer:std::move(layer)]; -} - -- (mbgl::style::CircleLayer *)rawLayer -{ - return (mbgl::style::CircleLayer *)super.rawLayer; -} - -- (NSString *)sourceIdentifier -{ - MGLAssertStyleLayerIsValid(); - - return @(self.rawLayer->getSourceID().c_str()); -} - -- (NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - - auto layerID = self.rawLayer->getSourceLayer(); - return layerID.empty() ? nil : @(layerID.c_str()); -} - -- (void)setSourceLayerIdentifier:(NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting sourceLayerIdentifier: %@", sourceLayerIdentifier); - - self.rawLayer->setSourceLayer(sourceLayerIdentifier.UTF8String ?: ""); -} - -- (void)setPredicate:(NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting predicate: %@", predicate); - - self.rawLayer->setFilter(predicate ? predicate.mgl_filter : mbgl::style::Filter()); -} - -- (NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - - return [NSPredicate mgl_predicateWithFilter:self.rawLayer->getFilter()]; -} - -#pragma mark - Accessing the Paint Attributes - -- (void)setCircleBlur:(NSExpression *)circleBlur { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleBlur: %@", circleBlur); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(circleBlur, true); - self.rawLayer->setCircleBlur(mbglValue); -} - -- (NSExpression *)circleBlur { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getCircleBlur(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultCircleBlur(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setCircleBlurTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleBlurTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setCircleBlurTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)circleBlurTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getCircleBlurTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setCircleColor:(NSExpression *)circleColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleColor: %@", circleColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(circleColor, true); - self.rawLayer->setCircleColor(mbglValue); -} - -- (NSExpression *)circleColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getCircleColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultCircleColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setCircleColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setCircleColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)circleColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getCircleColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setCircleOpacity:(NSExpression *)circleOpacity { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleOpacity: %@", circleOpacity); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(circleOpacity, true); - self.rawLayer->setCircleOpacity(mbglValue); -} - -- (NSExpression *)circleOpacity { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getCircleOpacity(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultCircleOpacity(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setCircleOpacityTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleOpacityTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setCircleOpacityTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)circleOpacityTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getCircleOpacityTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setCirclePitchAlignment:(NSExpression *)circlePitchAlignment { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circlePitchAlignment: %@", circlePitchAlignment); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(circlePitchAlignment, false); - self.rawLayer->setCirclePitchAlignment(mbglValue); -} - -- (NSExpression *)circlePitchAlignment { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getCirclePitchAlignment(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultCirclePitchAlignment(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setCircleRadius:(NSExpression *)circleRadius { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleRadius: %@", circleRadius); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(circleRadius, true); - self.rawLayer->setCircleRadius(mbglValue); -} - -- (NSExpression *)circleRadius { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getCircleRadius(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultCircleRadius(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setCircleRadiusTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleRadiusTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setCircleRadiusTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)circleRadiusTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getCircleRadiusTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setCircleScaleAlignment:(NSExpression *)circleScaleAlignment { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleScaleAlignment: %@", circleScaleAlignment); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(circleScaleAlignment, false); - self.rawLayer->setCirclePitchScale(mbglValue); -} - -- (NSExpression *)circleScaleAlignment { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getCirclePitchScale(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultCirclePitchScale(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setCirclePitchScale:(NSExpression *)circlePitchScale { -} - -- (NSExpression *)circlePitchScale { - return self.circleScaleAlignment; -} - -- (void)setCircleStrokeColor:(NSExpression *)circleStrokeColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleStrokeColor: %@", circleStrokeColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(circleStrokeColor, true); - self.rawLayer->setCircleStrokeColor(mbglValue); -} - -- (NSExpression *)circleStrokeColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getCircleStrokeColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultCircleStrokeColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setCircleStrokeColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleStrokeColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setCircleStrokeColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)circleStrokeColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getCircleStrokeColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setCircleStrokeOpacity:(NSExpression *)circleStrokeOpacity { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleStrokeOpacity: %@", circleStrokeOpacity); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(circleStrokeOpacity, true); - self.rawLayer->setCircleStrokeOpacity(mbglValue); -} - -- (NSExpression *)circleStrokeOpacity { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getCircleStrokeOpacity(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultCircleStrokeOpacity(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setCircleStrokeOpacityTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleStrokeOpacityTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setCircleStrokeOpacityTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)circleStrokeOpacityTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getCircleStrokeOpacityTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setCircleStrokeWidth:(NSExpression *)circleStrokeWidth { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleStrokeWidth: %@", circleStrokeWidth); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(circleStrokeWidth, true); - self.rawLayer->setCircleStrokeWidth(mbglValue); -} - -- (NSExpression *)circleStrokeWidth { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getCircleStrokeWidth(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultCircleStrokeWidth(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setCircleStrokeWidthTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleStrokeWidthTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setCircleStrokeWidthTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)circleStrokeWidthTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getCircleStrokeWidthTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setCircleTranslation:(NSExpression *)circleTranslation { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleTranslation: %@", circleTranslation); - - auto mbglValue = MGLStyleValueTransformer, NSValue *>().toPropertyValue>>(circleTranslation, false); - self.rawLayer->setCircleTranslate(mbglValue); -} - -- (NSExpression *)circleTranslation { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getCircleTranslate(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultCircleTranslate(); - } - return MGLStyleValueTransformer, NSValue *>().toExpression(propertyValue); -} - -- (void)setCircleTranslationTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleTranslationTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setCircleTranslateTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)circleTranslationTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getCircleTranslateTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setCircleTranslate:(NSExpression *)circleTranslate { -} - -- (NSExpression *)circleTranslate { - return self.circleTranslation; -} - -- (void)setCircleTranslationAnchor:(NSExpression *)circleTranslationAnchor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting circleTranslationAnchor: %@", circleTranslationAnchor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(circleTranslationAnchor, false); - self.rawLayer->setCircleTranslateAnchor(mbglValue); -} - -- (NSExpression *)circleTranslationAnchor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getCircleTranslateAnchor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultCircleTranslateAnchor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setCircleTranslateAnchor:(NSExpression *)circleTranslateAnchor { -} - -- (NSExpression *)circleTranslateAnchor { - return self.circleTranslationAnchor; -} - -@end - -@implementation NSValue (MGLCircleStyleLayerAdditions) - -+ (NSValue *)valueWithMGLCirclePitchAlignment:(MGLCirclePitchAlignment)circlePitchAlignment { - return [NSValue value:&circlePitchAlignment withObjCType:@encode(MGLCirclePitchAlignment)]; -} - -- (MGLCirclePitchAlignment)MGLCirclePitchAlignmentValue { - MGLCirclePitchAlignment circlePitchAlignment; - [self getValue:&circlePitchAlignment]; - return circlePitchAlignment; -} - -+ (NSValue *)valueWithMGLCircleScaleAlignment:(MGLCircleScaleAlignment)circleScaleAlignment { - return [NSValue value:&circleScaleAlignment withObjCType:@encode(MGLCircleScaleAlignment)]; -} - -- (MGLCircleScaleAlignment)MGLCircleScaleAlignmentValue { - MGLCircleScaleAlignment circleScaleAlignment; - [self getValue:&circleScaleAlignment]; - return circleScaleAlignment; -} - -+ (NSValue *)valueWithMGLCircleTranslationAnchor:(MGLCircleTranslationAnchor)circleTranslationAnchor { - return [NSValue value:&circleTranslationAnchor withObjCType:@encode(MGLCircleTranslationAnchor)]; -} - -- (MGLCircleTranslationAnchor)MGLCircleTranslationAnchorValue { - MGLCircleTranslationAnchor circleTranslationAnchor; - [self getValue:&circleTranslationAnchor]; - return circleTranslationAnchor; -} - -@end - -namespace mbgl { - -MGLStyleLayer* CircleStyleLayerPeerFactory::createPeer(style::Layer* rawLayer) { - return [[MGLCircleStyleLayer alloc] initWithRawLayer:rawLayer]; -} - -} // namespace mbgl diff --git a/platform/darwin/src/MGLCircleStyleLayer_Private.h b/platform/darwin/src/MGLCircleStyleLayer_Private.h deleted file mode 100644 index 788de6274fc..00000000000 --- a/platform/darwin/src/MGLCircleStyleLayer_Private.h +++ /dev/null @@ -1,17 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -#pragma once - -#include "MGLStyleLayer_Private.h" - -#include - -namespace mbgl { - -class CircleStyleLayerPeerFactory : public LayerPeerFactory, public mbgl::CircleLayerFactory { - // LayerPeerFactory overrides. - LayerFactory* getCoreLayerFactory() final { return this; } - virtual MGLStyleLayer* createPeer(style::Layer*) final; -}; - -} // namespace mbgl diff --git a/platform/darwin/src/MGLClockDirectionFormatter.h b/platform/darwin/src/MGLClockDirectionFormatter.h deleted file mode 100644 index 86a9452846b..00000000000 --- a/platform/darwin/src/MGLClockDirectionFormatter.h +++ /dev/null @@ -1,46 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The `MGLClockDirectionFormatter` class provides properly formatted descriptions - of headings relative to the user, known as clock positions. For - example, a value of `90` may be formatted as “3 o’clock”, depending on the - locale. - - Use this class to create localized heading strings when displaying directions - relative to the user’s current location and heading. To format a direction - irrespective of the user’s orientation, use `MGLCompassDirectionFormatter` - instead. - */ -MGL_EXPORT -@interface MGLClockDirectionFormatter : NSFormatter - -/** - The unit style used by this formatter. - - This property defaults to `NSFormattingUnitStyleMedium`. - */ -@property (nonatomic) NSFormattingUnitStyle unitStyle; - -/** - Returns a clock position string for the provided value. - - @param direction The heading, measured in degrees, where 0° means “straight - ahead” and 90° means “directly to your right”. - @return The clock position string appropriately formatted for the receiver’s - locale. - */ -- (NSString *)stringFromDirection:(CLLocationDirection)direction; - -/** - This method is not supported for the `MGLDirectionFormatter` class. - */ -- (BOOL)getObjectValue:(out id __nullable * __nullable)obj forString:(NSString *)string errorDescription:(out NSString * __nullable * __nullable)error; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLClockDirectionFormatter.m b/platform/darwin/src/MGLClockDirectionFormatter.m deleted file mode 100644 index 922a1db9a2e..00000000000 --- a/platform/darwin/src/MGLClockDirectionFormatter.m +++ /dev/null @@ -1,60 +0,0 @@ -#import "MGLClockDirectionFormatter.h" - -#import "NSBundle+MGLAdditions.h" -#import "MGLLoggingConfiguration_Private.h" - -#define wrap(value, min, max) \ - (fmod((fmod((value - min), (max - min)) + (max - min)), (max - min)) + min) - -@implementation MGLClockDirectionFormatter { - NSNumberFormatter *_numberFormatter; -} - -- (instancetype)init { - if (self = [super init]) { - _unitStyle = NSFormattingUnitStyleMedium; - _numberFormatter = [[NSNumberFormatter alloc] init]; - _numberFormatter.numberStyle = NSNumberFormatterDecimalStyle; - } - return self; -} - -- (NSString *)stringFromDirection:(CLLocationDirection)direction { - NSInteger hour = round(wrap(direction, 0, 360) / 360 * 12); - if (hour == 0) { - hour = 12; - } - NSString *format; - switch (self.unitStyle) { - case NSFormattingUnitStyleShort: - format = NSLocalizedStringWithDefaultValue(@"CLOCK_FMT_SHORT", @"Foundation", nil, @"%@:00", @"Clock position format, short: {hours}:00"); - break; - - case NSFormattingUnitStyleMedium: - format = NSLocalizedStringWithDefaultValue(@"CLOCK_FMT_MEDIUM", @"Foundation", nil, @"%@ o’clock", @"Clock position format, medium: {hours} o’clock"); - - break; - - case NSFormattingUnitStyleLong: - format = NSLocalizedStringWithDefaultValue(@"CLOCK_FMT_LONG", @"Foundation", nil, @"%@ o’clock", @"Clock position format, long: {hours} o’clock"); - break; - - default: - break; - } - return [NSString stringWithFormat:format, [_numberFormatter stringFromNumber:@(hour)]]; -} - -- (nullable NSString *)stringForObjectValue:(id)obj { - if (![obj isKindOfClass:[NSValue class]]) { - return nil; - } - return [self stringFromDirection:[obj doubleValue]]; -} - -- (BOOL)getObjectValue:(out id __nullable * __nullable)obj forString:(NSString *)string errorDescription:(out NSString * __nullable * __nullable)error { - MGLAssert(NO, @"-getObjectValue:forString:errorDescription: has not been implemented"); - return NO; -} - -@end diff --git a/platform/darwin/src/MGLCluster.h b/platform/darwin/src/MGLCluster.h deleted file mode 100644 index 2b99119b262..00000000000 --- a/platform/darwin/src/MGLCluster.h +++ /dev/null @@ -1,53 +0,0 @@ -#import "MGLFoundation.h" - -@protocol MGLFeature; - -NS_ASSUME_NONNULL_BEGIN - -/** - An `NSUInteger` constant used to indicate an invalid cluster identifier. - This indicates a missing cluster feature. - */ -FOUNDATION_EXTERN MGL_EXPORT const NSUInteger MGLClusterIdentifierInvalid; - -/** - A protocol that feature subclasses (i.e. those already conforming to - the `MGLFeature` protocol) conform to if they represent clusters. - - Currently the only class that conforms to `MGLCluster` is - `MGLPointFeatureCluster` (a subclass of `MGLPointFeature`). - - To check if a feature is a cluster, check conformity to `MGLCluster`, for - example: - - ```swift - let shape = try! MGLShape(data: clusterShapeData, encoding: String.Encoding.utf8.rawValue) - - guard let pointFeature = shape as? MGLPointFeature else { - throw ExampleError.unexpectedFeatureType - } - - // Check for cluster conformance - guard let cluster = pointFeature as? MGLCluster else { - throw ExampleError.featureIsNotACluster - } - - // Currently the only supported class that conforms to `MGLCluster` is - // `MGLPointFeatureCluster` - guard cluster is MGLPointFeatureCluster else { - throw ExampleError.unexpectedFeatureType - } - ``` - */ -MGL_EXPORT -@protocol MGLCluster - -/** The identifier for the cluster. */ -@property (nonatomic, readonly) NSUInteger clusterIdentifier; - -/** The number of points within this cluster */ -@property (nonatomic, readonly) NSUInteger clusterPointCount; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLCompassDirectionFormatter.h b/platform/darwin/src/MGLCompassDirectionFormatter.h deleted file mode 100644 index b4a30875092..00000000000 --- a/platform/darwin/src/MGLCompassDirectionFormatter.h +++ /dev/null @@ -1,43 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The `MGLCompassDirectionFormatter` class provides properly formatted - descriptions of absolute headings. For example, a value of `90` may be - formatted as “east”, depending on the locale. - - Use this class to create localized heading strings when displaying directions - irrespective of the user’s current location. To format a direction relative to - the user’s current location, use `MGLClockDirectionFormatter` instead. - */ -MGL_EXPORT -@interface MGLCompassDirectionFormatter : NSFormatter - -/** - The unit style used by this formatter. - - This property defaults to `NSFormattingUnitStyleMedium`. - */ -@property (nonatomic) NSFormattingUnitStyle unitStyle; - -/** - Returns a heading string for the provided value. - - @param direction The heading, measured in degrees, where 0° means “due north” - and 90° means “due east”. - @return The heading string appropriately formatted for the formatter’s locale. - */ -- (NSString *)stringFromDirection:(CLLocationDirection)direction; - -/** - This method is not supported for the `MGLDirectionFormatter` class. - */ -- (BOOL)getObjectValue:(out id __nullable * __nullable)obj forString:(NSString *)string errorDescription:(out NSString * __nullable * __nullable)error; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLCompassDirectionFormatter.m b/platform/darwin/src/MGLCompassDirectionFormatter.m deleted file mode 100644 index 99de32b7770..00000000000 --- a/platform/darwin/src/MGLCompassDirectionFormatter.m +++ /dev/null @@ -1,125 +0,0 @@ -#import "MGLCompassDirectionFormatter.h" - -#import "NSBundle+MGLAdditions.h" -#import "MGLLoggingConfiguration_Private.h" - -#define wrap(value, min, max) \ - (fmod((fmod((value - min), (max - min)) + (max - min)), (max - min)) + min) - -@implementation MGLCompassDirectionFormatter - -- (instancetype)init { - if (self = [super init]) { - _unitStyle = NSFormattingUnitStyleMedium; - } - return self; -} - -- (NSString *)stringFromDirection:(CLLocationDirection)direction { - static NSArray *shortStrings; - static NSArray *longStrings; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - shortStrings = @[ - NSLocalizedStringWithDefaultValue(@"COMPASS_N_SHORT", @"Foundation", nil, @"N", @"North, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NbE_SHORT", @"Foundation", nil, @"NbE", @"North by east, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NNE_SHORT", @"Foundation", nil, @"NNE", @"North-northeast, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NEbN_SHORT", @"Foundation", nil, @"NEbN", @"Northeast by north, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NE_SHORT", @"Foundation", nil, @"NE", @"Northeast, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NEbE_SHORT", @"Foundation", nil, @"NEbE", @"Northeast by east, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_ENE_SHORT", @"Foundation", nil, @"ENE", @"East-northeast, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_EbN_SHORT", @"Foundation", nil, @"EbN", @"East by north, short"), - - NSLocalizedStringWithDefaultValue(@"COMPASS_E_SHORT", @"Foundation", nil, @"E", @"East, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_EbS_SHORT", @"Foundation", nil, @"EbS", @"East by south, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_ESE_SHORT", @"Foundation", nil, @"ESE", @"East-southeast, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SEbE_SHORT", @"Foundation", nil, @"SEbE", @"Southeast by east, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SE_SHORT", @"Foundation", nil, @"SE", @"Southeast, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SEbS_SHORT", @"Foundation", nil, @"SEbS", @"Southeast by south, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SSE_SHORT", @"Foundation", nil, @"SSE", @"South-southeast, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SbE_SHORT", @"Foundation", nil, @"SbE", @"South by east, short"), - - NSLocalizedStringWithDefaultValue(@"COMPASS_S_SHORT", @"Foundation", nil, @"S", @"South, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SbW_SHORT", @"Foundation", nil, @"SbW", @"South by west, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SSW_SHORT", @"Foundation", nil, @"SSW", @"South-southwest, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SWbS_SHORT", @"Foundation", nil, @"SWbS", @"Southwest by south, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SW_SHORT", @"Foundation", nil, @"SW", @"Southwest, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SWbW_SHORT", @"Foundation", nil, @"SWbW", @"Southwest by west, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_WSW_SHORT", @"Foundation", nil, @"WSW", @"West-southwest, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_WbS_SHORT", @"Foundation", nil, @"WbS", @"West by south, short"), - - NSLocalizedStringWithDefaultValue(@"COMPASS_W_SHORT", @"Foundation", nil, @"W", @"West, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_WbN_SHORT", @"Foundation", nil, @"WbN", @"West by north, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_WNW_SHORT", @"Foundation", nil, @"WNW", @"West-northwest, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NWbW_SHORT", @"Foundation", nil, @"NWbW", @"Northwest by west, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NW_SHORT", @"Foundation", nil, @"NW", @"Northwest, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NWbN_SHORT", @"Foundation", nil, @"NWbN", @"Northwest by north, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NNW_SHORT", @"Foundation", nil, @"NNW", @"North-northwest, short"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NbW_SHORT", @"Foundation", nil, @"NbW", @"North by west, short"), - ]; - - longStrings = @[ - NSLocalizedStringWithDefaultValue(@"COMPASS_N_LONG", @"Foundation", nil, @"north", @"North, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NbE_LONG", @"Foundation", nil, @"north by east", @"North by east, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NNE_LONG", @"Foundation", nil, @"north-northeast", @"North-northeast, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NEbN_LONG", @"Foundation", nil, @"northeast by north", @"Northeast by north, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NE_LONG", @"Foundation", nil, @"northeast", @"Northeast, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NEbE_LONG", @"Foundation", nil, @"northeast by east", @"Northeast by east, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_ENE_LONG", @"Foundation", nil, @"east-northeast", @"East-northeast, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_EbN_LONG", @"Foundation", nil, @"east by north", @"East by north, long"), - - NSLocalizedStringWithDefaultValue(@"COMPASS_E_LONG", @"Foundation", nil, @"east", @"East, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_EbS_LONG", @"Foundation", nil, @"east by south", @"East by south, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_ESE_LONG", @"Foundation", nil, @"east-southeast", @"East-southeast, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SEbE_LONG", @"Foundation", nil, @"southeast by east", @"Southeast by east, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SE_LONG", @"Foundation", nil, @"southeast", @"Southeast, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SEbS_LONG", @"Foundation", nil, @"southeast by south", @"Southeast by south, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SSE_LONG", @"Foundation", nil, @"south-southeast", @"South-southeast, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SbE_LONG", @"Foundation", nil, @"south by east", @"South by east, long"), - - NSLocalizedStringWithDefaultValue(@"COMPASS_S_LONG", @"Foundation", nil, @"south", @"South, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SbW_LONG", @"Foundation", nil, @"south by west", @"South by west, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SSW_LONG", @"Foundation", nil, @"south-southwest", @"South-southwest, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SWbS_LONG", @"Foundation", nil, @"southwest by south", @"Southwest by south, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SW_LONG", @"Foundation", nil, @"southwest", @"Southwest, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_SWbW_LONG", @"Foundation", nil, @"southwest by west", @"Southwest by west, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_WSW_LONG", @"Foundation", nil, @"west-southwest", @"West-southwest, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_WbS_LONG", @"Foundation", nil, @"west by south", @"West by south, long"), - - NSLocalizedStringWithDefaultValue(@"COMPASS_W_LONG", @"Foundation", nil, @"west", @"West, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_WbN_LONG", @"Foundation", nil, @"west by north", @"West by north, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_WNW_LONG", @"Foundation", nil, @"west-northwest", @"West-northwest, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NWbW_LONG", @"Foundation", nil, @"northwest by west", @"Northwest by west, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NW_LONG", @"Foundation", nil, @"northwest", @"Northwest, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NWbN_LONG", @"Foundation", nil, @"northwest by north", @"Northwest by north, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NNW_LONG", @"Foundation", nil, @"north-northwest", @"North-northwest, long"), - NSLocalizedStringWithDefaultValue(@"COMPASS_NbW_LONG", @"Foundation", nil, @"north by west", @"North by west, long"), - ]; - - MGLAssert(shortStrings.count == longStrings.count, @"Long and short compass direction string arrays must have the same size."); - }); - - NSInteger cardinalPoint = wrap(round(wrap(direction, 0, 360) / 360 * shortStrings.count), 0, shortStrings.count); - switch (self.unitStyle) { - case NSFormattingUnitStyleShort: - return shortStrings[cardinalPoint]; - - case NSFormattingUnitStyleMedium: - case NSFormattingUnitStyleLong: - return longStrings[cardinalPoint]; - } -} - -- (nullable NSString *)stringForObjectValue:(id)obj { - if (![obj isKindOfClass:[NSValue class]]) { - return nil; - } - return [self stringFromDirection:[obj doubleValue]]; -} - -- (BOOL)getObjectValue:(out id __nullable * __nullable)obj forString:(NSString *)string errorDescription:(out NSString * __nullable * __nullable)error { - MGLAssert(NO, @"-getObjectValue:forString:errorDescription: has not been implemented"); - return NO; -} - -@end diff --git a/platform/darwin/src/MGLComputedShapeSource.h b/platform/darwin/src/MGLComputedShapeSource.h deleted file mode 100644 index 84dc4801a7a..00000000000 --- a/platform/darwin/src/MGLComputedShapeSource.h +++ /dev/null @@ -1,167 +0,0 @@ -#import "MGLFoundation.h" -#import "MGLGeometry.h" -#import "MGLTypes.h" -#import "MGLShapeSource.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol MGLFeature; - -/** - An `NSNumber` object containing a Boolean value; specifies whether the shape of - an `MGLComputedShapeSource` should be wrapped to accomodate coordinates with - longitudes beyond −180 and 180. The default value is `NO`. - - Setting this option to `YES` affects rendering performance. - - This option is used with the `MGLComputedShapeSource` class; it is ignored when - creating an `MGLShapeSource` object. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLShapeSourceOption MGLShapeSourceOptionWrapsCoordinates; - -/** - An `NSNumber` object containing a Boolean value; specifies whether the shape of - an `MGLComputedShapeSource` should be clipped at the edge of each tile. The - default value is `NO`. - - Setting this option to `YES` affects rendering performance. Use this option to - clip `MGLPolyline`s and `MGLPolygon`s at tile boundaries without artifacts. - - This option is used with the `MGLComputedShapeSource` class; it is ignored when - creating an `MGLShapeSource` object. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLShapeSourceOption MGLShapeSourceOptionClipsCoordinates; - -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLInvalidDatasourceException; - -/** - Data source for `MGLComputedShapeSource`. This protocol defines two optional methods for fetching - data, one based on tile coordinates, and one based on a bounding box. Classes that implement this - protocol must implement one, and only one of the methods. Methods on this protocol will not be - called on main thread, they will be called on the caller's `requestQueue`. - */ -@protocol MGLComputedShapeSourceDataSource - -@optional -/** - Fetch features for a tile. This method will not be invoked on the main queue, it - will be invoked on the caller's `requestQueue`. - @param x Tile X coordinate. - @param y Tile Y coordinate. - @param zoomLevel Tile zoom level. - */ -- (NSArray *>*)featuresInTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)zoomLevel; - -/** - Fetch features for a tile. This method will not be invoked on the main queue, it - will be invoked on the caller's `requestQueue`. - @param bounds The bounds to fetch data for. - @param zoomLevel Tile zoom level. - */ -- (NSArray *>*)featuresInCoordinateBounds:(MGLCoordinateBounds)bounds zoomLevel:(NSUInteger)zoomLevel; - -@end - -/** - `MGLComputedShapeSource` is a map content source that supplies vector shapes, - one tile at a time, to be shown on the map on demand. You implement a class - conforming to the `MGLComputedShapeSourceDataSource` protocol that returns - instances of `MGLShape` or `MGLFeature`, then add a computed shape source to an - `MGLStyle` object along with an `MGLVectorStyleLayer` object. The vector style - layer defines the appearance of any content supplied by the computed shape - source. - - `MGLComputedShapeSource` is similar to `MGLShapeSource` but is optimized for - data sets that change dynamically or are too large to fit completely in memory. - It is also useful for data that is divided into tiles in a format other than - Mapbox Vector Tiles. For - GeoJSON data, use the `MGLShapeSource` class. - For static tiles or Mapbox Vector Tiles, use the `MGLVectorTileSource` class. - - You can add and remove sources dynamically using methods such as - `-[MGLStyle addSource:]` and `-[MGLStyle sourceWithIdentifier:]`. This class - cannot be represented in a style JSON file; you must add it ot the style at - runtime. - */ -MGL_EXPORT -@interface MGLComputedShapeSource : MGLSource - -/** - Returns a custom shape data source initialized with an identifier, and a - dictionary of options for the source according to the - style - specification. - - This class supports the following options: - `MGLShapeSourceOptionMinimumZoomLevel`, `MGLShapeSourceOptionMaximumZoomLevel`, - `MGLShapeSourceOptionBuffer`, - `MGLShapeSourceOptionSimplificationTolerance`, - `MGLShapeSourceOptionWrapsCoordinates`, and - `MGLShapeSourceOptionClipsCoordinates`. Shapes provided by a computed - shape source cannot be clustered. - - @param identifier A string that uniquely identifies the source. - @param options An `NSDictionary` of options for this source. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier options:(nullable NSDictionary *)options NS_DESIGNATED_INITIALIZER; - -/** - Returns a custom shape data source initialized with an identifier, data source, and a - dictionary of options for the source according to the - style - specification. - - This class supports the following options: - `MGLShapeSourceOptionMinimumZoomLevel`, `MGLShapeSourceOptionMaximumZoomLevel`, - `MGLShapeSourceOptionBuffer`, - `MGLShapeSourceOptionSimplificationTolerance`, - `MGLShapeSourceOptionWrapsCoordinates`, and - `MGLShapeSourceOptionClipsCoordinates`. Shapes provided by a computed shape - source cannot be clustered. - - @param identifier A string that uniquely identifies the source. - @param options An `NSDictionary` of options for this source. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier dataSource:(id)dataSource options:(nullable NSDictionary *)options; - -/** - Invalidates all the features and properties intersecting with or contained in - the specified bounds. New fetch requests will immediately be invoked on the - `MGLComputedShapeSourceDataSource`. - @param bounds Coordinate bounds to invalidate. - */ -- (void) invalidateBounds:(MGLCoordinateBounds)bounds; - -/** - Invalidates all the feautres and properties of a given tile. A new fetch request - will immediately be invoked on the `MGLComputedShapeSourceDataSource`. - @param x Tile X coordinate. - @param y Tile Y coordinate. - @param zoomLevel Tile zoom level. - */ -- (void) invalidateTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)zoomLevel; - -/** - Set a new set of features for a tile. This method can be invkoed from background threads. - For best performance, use this method only to update tiles that have already been requested - through `MGLComputedShapeSourceDataSource.` - @param features Features for the tile. - @param x Tile X coordinate. - @param y Tile Y coordinate. - @param zoomLevel Tile zoom level. - */ -- (void) setFeatures:(NSArray *>*)features inTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)zoomLevel; - -/** - An object that implements the `MGLComputedShapeSourceDataSource` protocol that will be queried for tile data. - */ -@property (nonatomic, weak, nullable) id dataSource; - -/** - A queue that calls to the data source will be made on. - */ -@property (nonatomic, readonly) NSOperationQueue *requestQueue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLComputedShapeSource.mm b/platform/darwin/src/MGLComputedShapeSource.mm deleted file mode 100644 index ceb83b37403..00000000000 --- a/platform/darwin/src/MGLComputedShapeSource.mm +++ /dev/null @@ -1,249 +0,0 @@ -#import "MGLComputedShapeSource_Private.h" - -#import "MGLMapView_Private.h" -#import "MGLSource_Private.h" -#import "MGLShape_Private.h" -#import "MGLGeometry_Private.h" -#import "MGLShapeCollection.h" - -#include -#include -#include -#include - -const MGLExceptionName MGLInvalidDatasourceException = @"MGLInvalidDatasourceException"; - -const MGLShapeSourceOption MGLShapeSourceOptionWrapsCoordinates = @"MGLShapeSourceOptionWrapsCoordinates"; -const MGLShapeSourceOption MGLShapeSourceOptionClipsCoordinates = @"MGLShapeSourceOptionClipsCoordinates"; - -mbgl::style::CustomGeometrySource::Options MBGLCustomGeometrySourceOptionsFromDictionary(NSDictionary *options) { - mbgl::style::CustomGeometrySource::Options sourceOptions; - - if (NSNumber *value = options[MGLShapeSourceOptionMinimumZoomLevel]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionMinimumZoomLevel must be an NSNumber."]; - } - sourceOptions.zoomRange.min = value.integerValue; - } - - if (NSNumber *value = options[MGLShapeSourceOptionMaximumZoomLevel]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionMaximumZoomLevel must be an NSNumber."]; - } - sourceOptions.zoomRange.max = value.integerValue; - } - - if (NSNumber *value = options[MGLShapeSourceOptionBuffer]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionBuffer must be an NSNumber."]; - } - sourceOptions.tileOptions.buffer = value.integerValue; - } - - if (NSNumber *value = options[MGLShapeSourceOptionSimplificationTolerance]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionSimplificationTolerance must be an NSNumber."]; - } - sourceOptions.tileOptions.tolerance = value.doubleValue; - } - - if (NSNumber *value = options[MGLShapeSourceOptionWrapsCoordinates]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionWrapsCoordinates must be an NSNumber."]; - } - sourceOptions.tileOptions.wrap = value.boolValue; - } - - if (NSNumber *value = options[MGLShapeSourceOptionClipsCoordinates]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionClipsCoordinates must be an NSNumber."]; - } - sourceOptions.tileOptions.clip = value.boolValue; - } - - return sourceOptions; -} - -@interface MGLComputedShapeSource () { - std::unique_ptr _pendingSource; -} - -@property (nonatomic, readwrite) NSDictionary *options; -@property (nonatomic, assign) BOOL dataSourceImplementsFeaturesForTile; -@property (nonatomic, assign) BOOL dataSourceImplementsFeaturesForBounds; - -@end - -@interface MGLComputedShapeSourceFetchOperation : NSOperation - -@property (nonatomic, readonly) uint8_t z; -@property (nonatomic, readonly) uint32_t x; -@property (nonatomic, readonly) uint32_t y; -@property (nonatomic, assign) BOOL dataSourceImplementsFeaturesForTile; -@property (nonatomic, assign) BOOL dataSourceImplementsFeaturesForBounds; -@property (nonatomic, weak, nullable) id dataSource; -@property (nonatomic, nullable) mbgl::style::CustomGeometrySource *rawSource; - -- (instancetype)initForSource:(MGLComputedShapeSource*)source tile:(const mbgl::CanonicalTileID&)tileId; - -@end - -@implementation MGLComputedShapeSourceFetchOperation - -- (instancetype)initForSource:(MGLComputedShapeSource*)source tile:(const mbgl::CanonicalTileID&)tileID { - self = [super init]; - _z = tileID.z; - _x = tileID.x; - _y = tileID.y; - _dataSourceImplementsFeaturesForTile = source.dataSourceImplementsFeaturesForTile; - _dataSourceImplementsFeaturesForBounds = source.dataSourceImplementsFeaturesForBounds; - _dataSource = source.dataSource; - mbgl::style::CustomGeometrySource *rawSource = static_cast(source.rawSource); - _rawSource = rawSource; - return self; -} - -- (void)main { - if ([self isCancelled]) { - return; - } - - NSArray *> *data; - if(!self.dataSource) { - data = nil; - } else if(self.dataSourceImplementsFeaturesForTile) { - data = [self.dataSource featuresInTileAtX:self.x - y:self.y - zoomLevel:self.z]; - } else { - mbgl::CanonicalTileID tileID = mbgl::CanonicalTileID(self.z, self.x, self.y); - mbgl::LatLngBounds tileBounds = mbgl::LatLngBounds(tileID); - data = [self.dataSource featuresInCoordinateBounds:MGLCoordinateBoundsFromLatLngBounds(tileBounds) - zoomLevel:self.z]; - } - - if(![self isCancelled]) { - mbgl::FeatureCollection featureCollection; - featureCollection.reserve(data.count); - for (MGLShape * feature in data) { - if ([feature isMemberOfClass:[MGLShapeCollection class]]) { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSLog(@"MGLShapeCollection initialized with MGLFeatures will not retain attributes." - @"Use MGLShapeCollectionFeature to retain attributes instead." - @"This will be logged only once."); - }); - } - mbgl::GeoJSONFeature geoJsonObject = [feature geoJSONObject].get(); - featureCollection.push_back(geoJsonObject); - } - const auto geojson = mbgl::GeoJSON{featureCollection}; - if(![self isCancelled] && self.rawSource) { - self.rawSource->setTileData(mbgl::CanonicalTileID(self.z, self.x, self.y), geojson); - } - } -} - -- (void)cancel { - [super cancel]; - self.rawSource = NULL; -} - -@end - -@implementation MGLComputedShapeSource - -- (instancetype)initWithIdentifier:(NSString *)identifier options:(NSDictionary *)options { - NSOperationQueue *requestQueue = [[NSOperationQueue alloc] init]; - requestQueue.name = [NSString stringWithFormat:@"mgl.MGLComputedShapeSource.%@", identifier]; - requestQueue.qualityOfService = NSQualityOfServiceUtility; - requestQueue.maxConcurrentOperationCount = 4; - - auto sourceOptions = MBGLCustomGeometrySourceOptionsFromDictionary(options); - sourceOptions.fetchTileFunction = ^void(const mbgl::CanonicalTileID& tileID) { - NSOperation *operation = [[MGLComputedShapeSourceFetchOperation alloc] initForSource:self tile:tileID]; - [requestQueue addOperation:operation]; - }; - - sourceOptions.cancelTileFunction = ^void(const mbgl::CanonicalTileID& tileID) { - for (MGLComputedShapeSourceFetchOperation *operation in requestQueue.operations) { - if (operation.x == tileID.x && operation.y == tileID.y && operation.z == tileID.z) { - [operation cancel]; - } - } - }; - - auto source = std::make_unique(identifier.UTF8String, sourceOptions); - - if (self = [super initWithPendingSource:std::move(source)]) { - _requestQueue = requestQueue; - } - return self; -} - -- (instancetype)initWithIdentifier:(NSString *)identifier dataSource:(id)dataSource options:(NSDictionary *)options { - if (self = [self initWithIdentifier:identifier options:options]) { - [self setDataSource:dataSource]; - } - return self; -} - -- (void)dealloc { - [self.requestQueue cancelAllOperations]; -} - -- (void)setFeatures:(NSArray *>*)features inTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)zoomLevel { - MGLAssertStyleSourceIsValid(); - mbgl::CanonicalTileID tileID = mbgl::CanonicalTileID((uint8_t)zoomLevel, (uint32_t)x, (uint32_t)y); - mbgl::FeatureCollection featureCollection; - featureCollection.reserve(features.count); - for (MGLShape * feature in features) { - mbgl::GeoJSONFeature geoJsonObject = [feature geoJSONObject].get(); - featureCollection.push_back(geoJsonObject); - if ([feature isMemberOfClass:[MGLShapeCollection class]]) { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSLog(@"MGLShapeCollection initialized with MGLFeatures will not retain attributes." - @"Use MGLShapeCollectionFeature to retain attributes instead." - @"This will be logged only once."); - }); - } - } - const auto geojson = mbgl::GeoJSON{featureCollection}; - static_cast(self.rawSource)->setTileData(tileID, geojson); -} - -- (void)setDataSource:(id)dataSource { - [self.requestQueue cancelAllOperations]; - // Check which method the datasource implements, to avoid having to check for each tile - self.dataSourceImplementsFeaturesForTile = [dataSource respondsToSelector:@selector(featuresInTileAtX:y:zoomLevel:)]; - self.dataSourceImplementsFeaturesForBounds = [dataSource respondsToSelector:@selector(featuresInCoordinateBounds:zoomLevel:)]; - - if (!self.dataSourceImplementsFeaturesForBounds && !self.dataSourceImplementsFeaturesForTile) { - [NSException raise:MGLInvalidDatasourceException - format:@"Datasource does not implement any MGLComputedShapeSourceDataSource methods"]; - } else if (self.dataSourceImplementsFeaturesForBounds && self.dataSourceImplementsFeaturesForTile) { - [NSException raise:MGLInvalidDatasourceException - format:@"Datasource implements multiple MGLComputedShapeSourceDataSource methods"]; - } - - _dataSource = dataSource; -} - -- (void) invalidateBounds:(MGLCoordinateBounds)bounds { - MGLAssertStyleSourceIsValid(); - ((mbgl::style::CustomGeometrySource *)self.rawSource)->invalidateRegion(MGLLatLngBoundsFromCoordinateBounds(bounds)); -} - -- (void) invalidateTileAtX:(NSUInteger)x y:(NSUInteger)y zoomLevel:(NSUInteger)z { - MGLAssertStyleSourceIsValid(); - ((mbgl::style::CustomGeometrySource *)self.rawSource)->invalidateTile(mbgl::CanonicalTileID(z, (unsigned int)x, (unsigned int)y)); -} - -@end diff --git a/platform/darwin/src/MGLComputedShapeSource_Private.h b/platform/darwin/src/MGLComputedShapeSource_Private.h deleted file mode 100644 index ec075e4bd7b..00000000000 --- a/platform/darwin/src/MGLComputedShapeSource_Private.h +++ /dev/null @@ -1,12 +0,0 @@ -#import "MGLFoundation.h" -#import "MGLTypes.h" -#import "MGLComputedShapeSource.h" - -#include - -NS_ASSUME_NONNULL_BEGIN - -MGL_EXPORT -mbgl::style::CustomGeometrySource::Options MBGLCustomGeometrySourceOptionsFromDictionary(NSDictionary *options); - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLConversion.h b/platform/darwin/src/MGLConversion.h deleted file mode 100644 index 3f7ffdd0c1f..00000000000 --- a/platform/darwin/src/MGLConversion.h +++ /dev/null @@ -1,159 +0,0 @@ -#include - -NS_ASSUME_NONNULL_BEGIN - -namespace mbgl { -namespace style { -namespace conversion { - -// A wrapper class for `id`, so as not to confuse ARC. -class Holder { -public: - Holder(const id v) : value(v) {} - const id value; -}; - -template <> -class ConversionTraits { -public: - static bool isUndefined(const Holder& holder) { - const id value = holder.value; - return !value || value == [NSNull null]; - } - - static bool isArray(const Holder& holder) { - const id value = holder.value; - return [value isKindOfClass:[NSArray class]]; - } - - static bool isObject(const Holder& holder) { - const id value = holder.value; - return [value isKindOfClass:[NSDictionary class]]; - } - - static std::size_t arrayLength(const Holder& holder) { - const id value = holder.value; - NSCAssert([value isKindOfClass:[NSArray class]], @"Value must be an NSArray for getLength()."); - NSArray *array = value; - auto length = [array count]; - NSCAssert(length <= std::numeric_limits::max(), @"Array length out of bounds."); - return length; - } - - static Holder arrayMember(const Holder& holder, std::size_t i) { - const id value = holder.value; - NSCAssert([value isKindOfClass:[NSArray class]], @"Value must be an NSArray for get(int)."); - NSCAssert(i < NSUIntegerMax, @"Index must be less than NSUIntegerMax"); - return {[value objectAtIndex: i]}; - } - - static optional objectMember(const Holder& holder, const char *key) { - const id value = holder.value; - NSCAssert([value isKindOfClass:[NSDictionary class]], @"Value must be an NSDictionary for get(string)."); - NSObject *member = [value objectForKey: @(key)]; - if (member && member != [NSNull null]) { - return {member}; - } else { - return {}; - } - } - -// Compiler is wrong about `Fn` parameter missing a nullability specifier. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wnullability-completeness" - template - static optional eachMember(const Holder& holder, Fn&& visit) { -#pragma clang diagnostic pop - [holder.value enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { - auto result = visit(std::string(static_cast([key UTF8String])), obj); - if (result) { - *stop = YES; - } - }]; - return {}; - } - - static optional toBool(const Holder& holder) { - const id value = holder.value; - if (_isBool(value)) { - return ((NSNumber *)value).boolValue; - } else { - return {}; - } - } - - static optional toNumber(const Holder& holder) { - const id value = holder.value; - if (_isNumber(value)) { - return ((NSNumber *)value).floatValue; - } else { - return {}; - } - } - - static optional toDouble(const Holder& holder) { - const id value = holder.value; - if (_isNumber(value)) { - return ((NSNumber *)value).doubleValue; - } else { - return {}; - } - } - - static optional toString(const Holder& holder) { - const id value = holder.value; - if (_isString(value)) { - return std::string(static_cast([value UTF8String])); - } else { - return {}; - } - } - - static optional toValue(const Holder& holder) { - const id value = holder.value; - if (isUndefined(value)) { - return {}; - } else if (_isBool(value)) { - return { *toBool(holder) }; - } else if ( _isString(value)) { - return { *toString(holder) }; - } else if (_isNumber(value)) { - return { *toDouble(holder) }; - } else { - return {}; - } - } - - static optional toGeoJSON(const Holder&, Error& error) { - error = { "toGeoJSON not implemented" }; - return {}; - } - -private: - static bool _isBool(const id value) { - if (![value isKindOfClass:[NSNumber class]]) return false; - // char: 32-bit boolean - // BOOL: 64-bit boolean - NSNumber *number = value; - return ((strcmp([number objCType], @encode(char)) == 0) || - (strcmp([number objCType], @encode(BOOL)) == 0)); - } - - static bool _isNumber(const id value) { - return [value isKindOfClass:[NSNumber class]] && !_isBool(value); - } - - static bool _isString(const id value) { - return [value isKindOfClass:[NSString class]]; - } -}; - -inline Convertible makeConvertible(const id value) { - return Convertible(Holder(value)); -} - -} // namespace conversion -} // namespace style -} // namespace mbgl - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLCoordinateFormatter.h b/platform/darwin/src/MGLCoordinateFormatter.h deleted file mode 100644 index 63f0de8f192..00000000000 --- a/platform/darwin/src/MGLCoordinateFormatter.h +++ /dev/null @@ -1,56 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The `MGLCoordinateFormatter` class provides properly formatted descriptions of - geographic coordinate pairs. Use this class to create localized coordinate - strings when displaying location information to users. - */ -MGL_EXPORT -@interface MGLCoordinateFormatter : NSFormatter - -/** - Determines whether the output may contain minutes of arc when nonzero. - - The default value of this property is `YES`, causing the receiver to include - minutes of arc in its output. If `allowsSeconds` is `YES`, this property is - ignored and the output always includes minutes of arc. - */ -@property (nonatomic) BOOL allowsMinutes; - -/** - Determines whether the output may contain seconds of arc when nonzero. - - The default value of this property is `YES`, causing the receiver to include - seconds of arc in its output. - */ -@property (nonatomic) BOOL allowsSeconds; - -/** - The unit style used by this formatter. - - The default value of this property is `NSFormattingUnitStyleMedium`. - */ -@property (nonatomic) NSFormattingUnitStyle unitStyle; - -/** - Returns a coordinate string for the provided value. - - @param coordinate The coordinate’s value. - @return The coordinate string appropriately formatted for the formatter’s - locale. - */ -- (NSString *)stringFromCoordinate:(CLLocationCoordinate2D)coordinate; - -/** - This method is not supported for the `MGLCoordinateFormatter` class. - */ -- (BOOL)getObjectValue:(out id __nullable * __nullable)obj forString:(NSString *)string errorDescription:(out NSString * __nullable * __nullable)error; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLCoordinateFormatter.m b/platform/darwin/src/MGLCoordinateFormatter.m deleted file mode 100644 index aba34e470d5..00000000000 --- a/platform/darwin/src/MGLCoordinateFormatter.m +++ /dev/null @@ -1,127 +0,0 @@ -#import "MGLCoordinateFormatter.h" - -#import "NSBundle+MGLAdditions.h" -#import "NSValue+MGLAdditions.h" -#import "MGLLoggingConfiguration_Private.h" - -@implementation MGLCoordinateFormatter - -- (instancetype)init { - if (self = [super init]) { - _allowsMinutes = YES; - _allowsSeconds = YES; - _unitStyle = NSFormattingUnitStyleMedium; - } - return self; -} - -- (NSString *)stringFromCoordinate:(CLLocationCoordinate2D)coordinate { - NSString *positiveLatitudeFormat; - NSString *negativeLatitudeFormat; - NSString *positiveLongitudeFormat; - NSString *negativeLongitudeFormat; - NSString *stringFormat; - switch (self.unitStyle) { - case NSFormattingUnitStyleShort: - positiveLatitudeFormat = NSLocalizedStringWithDefaultValue(@"COORD_N_SHORT", @"Foundation", nil, @"%@N", @"North latitude format, short: {latitude}"); - negativeLatitudeFormat = NSLocalizedStringWithDefaultValue(@"COORD_S_SHORT", @"Foundation", nil, @"%@S", @"South latitude format, short: {latitude}"); - positiveLongitudeFormat = NSLocalizedStringWithDefaultValue(@"COORD_E_SHORT", @"Foundation", nil, @"%@E", @"East longitude format, short: {longitude}"); - negativeLongitudeFormat = NSLocalizedStringWithDefaultValue(@"COORD_W_SHORT", @"Foundation", nil, @"%@W", @"West longitude format, short: {longitude}"); - stringFormat = NSLocalizedStringWithDefaultValue(@"COORD_FMT_SHORT", @"Foundation", nil, @"%@, %@", @"Coordinate pair format, short: {latitude}, {longitude}"); - break; - - case NSFormattingUnitStyleMedium: - positiveLatitudeFormat = NSLocalizedStringWithDefaultValue(@"COORD_N_MEDIUM", @"Foundation", nil, @"%@ north", @"North latitude format, medium: {latitude}"); - negativeLatitudeFormat = NSLocalizedStringWithDefaultValue(@"COORD_S_MEDIUM", @"Foundation", nil, @"%@ south", @"South latitude format, medium: {latitude}"); - positiveLongitudeFormat = NSLocalizedStringWithDefaultValue(@"COORD_E_MEDIUM", @"Foundation", nil, @"%@ east", @"East longitude format, medium: {longitude}"); - negativeLongitudeFormat = NSLocalizedStringWithDefaultValue(@"COORD_W_MEDIUM", @"Foundation", nil, @"%@ west", @"West longitude format, medium: {longitude}"); - stringFormat = NSLocalizedStringWithDefaultValue(@"COORD_FMT_MEDIUM", @"Foundation", nil, @"%@, %@", @"Coordinate pair format, medium: {latitude}, {longitude}"); - break; - - case NSFormattingUnitStyleLong: - positiveLatitudeFormat = NSLocalizedStringWithDefaultValue(@"COORD_N_LONG", @"Foundation", nil, @"%@ north", @"North latitude format, long: {latitude}"); - negativeLatitudeFormat = NSLocalizedStringWithDefaultValue(@"COORD_S_LONG", @"Foundation", nil, @"%@ south", @"South latitude format, long: {latitude}"); - positiveLongitudeFormat = NSLocalizedStringWithDefaultValue(@"COORD_E_LONG", @"Foundation", nil, @"%@ east", @"East longitude format, long: {longitude}"); - negativeLongitudeFormat = NSLocalizedStringWithDefaultValue(@"COORD_W_LONG", @"Foundation", nil, @"%@ west", @"West longitude format, long: {longitude}"); - stringFormat = NSLocalizedStringWithDefaultValue(@"COORD_FMT_LONG", @"Foundation", nil, @"%@ by %@", @"Coordinate pair format, long: {latitude}, {longitude}"); - break; - } - NSString *latitudeString = [self stringFromLocationDegrees:coordinate.latitude - positiveFormat:positiveLatitudeFormat - negativeFormat:negativeLatitudeFormat]; - NSString *longitudeString = [self stringFromLocationDegrees:coordinate.longitude - positiveFormat:positiveLongitudeFormat - negativeFormat:negativeLongitudeFormat]; - return [NSString stringWithFormat:stringFormat, latitudeString, longitudeString]; -} - -- (NSString *)stringFromLocationDegrees:(CLLocationDegrees)degrees positiveFormat:(NSString *)positiveFormat negativeFormat:(NSString *)negativeFormat { - CLLocationDegrees minutes = (fabs(degrees) - floor(fabs(degrees))) * 60; - CLLocationDegrees seconds = (minutes - floor(minutes)) * 60; - - NSString *degreesFormat; - NSString *minutesFormat; - NSString *secondsFormat; - NSString *degreesMinutesFormat; - NSString *degreesMinutesSecondsFormat; - switch (self.unitStyle) { - case NSFormattingUnitStyleShort: - degreesFormat = NSLocalizedStringWithDefaultValue(@"COORD_DEG_SHORT", @"Foundation", nil, @"%d°", @"Degrees format, short: {degrees}"); - minutesFormat = NSLocalizedStringWithDefaultValue(@"COORD_MIN_SHORT", @"Foundation", nil, @"%d′", @"Minutes format, short: {minutes}"); - secondsFormat = NSLocalizedStringWithDefaultValue(@"COORD_SEC_SHORT", @"Foundation", nil, @"%d″", @"Seconds format, short: {seconds}"); - degreesMinutesFormat = NSLocalizedStringWithDefaultValue(@"COORD_DM_SHORT", @"Foundation", nil, @"%@%@", @"Coordinate format, short: {degrees}{minutes}"); - degreesMinutesSecondsFormat = NSLocalizedStringWithDefaultValue(@"COORD_DMS_SHORT", @"Foundation", nil, @"%@%@%@", @"Coordinate format, short: {degrees}{minutes}{seconds}"); - break; - - case NSFormattingUnitStyleMedium: - degreesFormat = NSLocalizedStringWithDefaultValue(@"COORD_DEG_MEDIUM", @"Foundation", nil, @"%d°", @"Degrees format, medium: {degrees}"); - minutesFormat = NSLocalizedStringWithDefaultValue(@"COORD_MIN_MEDIUM", @"Foundation", nil, @"%d′", @"Minutes format, medium: {minutes}"); - secondsFormat = NSLocalizedStringWithDefaultValue(@"COORD_SEC_MEDIUM", @"Foundation", nil, @"%d″", @"Seconds format, medium: {seconds}"); - degreesMinutesFormat = NSLocalizedStringWithDefaultValue(@"COORD_DM_MEDIUM", @"Foundation", nil, @"%@%@", @"Coordinate format, medium: {degrees}{minutes}"); - degreesMinutesSecondsFormat = NSLocalizedStringWithDefaultValue(@"COORD_DMS_MEDIUM", @"Foundation", nil, @"%@%@%@", @"Coordinate format, medium: {degrees}{minutes}{seconds}"); - break; - - case NSFormattingUnitStyleLong: - degreesFormat = NSLocalizedStringWithDefaultValue(@"COORD_DEG_LONG", @"Foundation", nil, @"%d degree(s)", @"Degrees format, long"); - minutesFormat = NSLocalizedStringWithDefaultValue(@"COORD_MIN_LONG", @"Foundation", nil, @"%d minute(s)", @"Minutes format, long"); - secondsFormat = NSLocalizedStringWithDefaultValue(@"COORD_SEC_LONG", @"Foundation", nil, @"%d second(s)", @"Seconds format, long"); - degreesMinutesFormat = NSLocalizedStringWithDefaultValue(@"COORD_DM_LONG", @"Foundation", nil, @"%@ and %@", @"Coordinate format, long: {degrees}{minutes}"); - degreesMinutesSecondsFormat = NSLocalizedStringWithDefaultValue(@"COORD_DMS_LONG", @"Foundation", nil, @"%@, %@, and %@", @"Coordinate format, long: {degrees}{minutes}{seconds}"); - break; - } - - NSString *degreesString = [NSString stringWithFormat:degreesFormat, (int)floor(fabs(degrees))]; - - NSString *string; - if (trunc(seconds) > 0 && self.allowsSeconds) { - NSString *minutesString = [NSString stringWithFormat:minutesFormat, (int)floor(minutes)]; - NSString *secondsString = [NSString stringWithFormat:secondsFormat, (int)round(seconds)]; - string = [NSString stringWithFormat:degreesMinutesSecondsFormat, - degreesString, minutesString, secondsString]; - } else if (trunc(minutes) > 0 && self.allowsMinutes) { - NSString *minutesString = [NSString stringWithFormat:minutesFormat, (int)round(minutes)]; - string = [NSString stringWithFormat:degreesMinutesFormat, - degreesString, minutesString]; - } else { - string = [NSString stringWithFormat:degreesFormat, (int)round(fabs(degrees))]; - } - - if (degrees == 0) { - return string; - } - return [NSString stringWithFormat:degrees > 0 ? positiveFormat : negativeFormat, string]; -} - -- (nullable NSString *)stringForObjectValue:(id)obj { - if (![obj isKindOfClass:[NSValue class]]) { - return nil; - } - return [self stringFromCoordinate:[obj MGLCoordinateValue]]; -} - -- (BOOL)getObjectValue:(out id __nullable * __nullable)obj forString:(NSString *)string errorDescription:(out NSString * __nullable * __nullable)error { - MGLAssert(NO, @"-getObjectValue:forString:errorDescription: has not been implemented"); - return NO; -} - -@end diff --git a/platform/darwin/src/MGLDistanceFormatter.h b/platform/darwin/src/MGLDistanceFormatter.h deleted file mode 100644 index 46aad9a940b..00000000000 --- a/platform/darwin/src/MGLDistanceFormatter.h +++ /dev/null @@ -1,26 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - `MGLDistanceFormatter` implements a formatter object meant to be used for - geographic distances. The user’s current locale will be used by default - but it can be overriden by changing the locale property of the numberFormatter. - */ -MGL_EXPORT -@interface MGLDistanceFormatter : NSLengthFormatter - -/** - Returns a localized formatted string for the provided distance. - - @param distance The distance, measured in meters. - @return A localized formatted distance string including units. - */ -- (NSString *)stringFromDistance:(CLLocationDistance)distance; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLDistanceFormatter.m b/platform/darwin/src/MGLDistanceFormatter.m deleted file mode 100644 index a7a2f9c9e17..00000000000 --- a/platform/darwin/src/MGLDistanceFormatter.m +++ /dev/null @@ -1,35 +0,0 @@ -#import "MGLDistanceFormatter.h" - -@interface MGLDistanceFormatter() -@end - -@implementation MGLDistanceFormatter - -static const CLLocationDistance METERS_PER_MILE = 1609.344; -static const double YARDS_PER_MILE = 1760.0; -static const double FEET_PER_MILE = YARDS_PER_MILE * 3.0; - -- (NSString *)stringFromDistance:(CLLocationDistance)distance { - double miles = distance / METERS_PER_MILE; - double feet = miles * FEET_PER_MILE; - - NSLengthFormatterUnit unit = NSLengthFormatterUnitMillimeter; - [self unitStringFromMeters:distance usedUnit:&unit]; - - self.numberFormatter.roundingIncrement = @0.25; - - if (unit == NSLengthFormatterUnitYard) { - if (miles > 0.2) { - unit = NSLengthFormatterUnitMile; - return [self stringFromValue:miles unit:unit]; - } else { - unit = NSLengthFormatterUnitFoot; - self.numberFormatter.roundingIncrement = @1; - return [self stringFromValue:feet unit:unit]; - } - } else { - return [self stringFromMeters:distance]; - } -} - -@end diff --git a/platform/darwin/src/MGLFeature.h b/platform/darwin/src/MGLFeature.h deleted file mode 100644 index 3f3526102e4..00000000000 --- a/platform/darwin/src/MGLFeature.h +++ /dev/null @@ -1,300 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLPolyline.h" -#import "MGLPolygon.h" -#import "MGLPointAnnotation.h" -#import "MGLPointCollection.h" -#import "MGLShapeCollection.h" -#import "MGLCluster.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The `MGLFeature` protocol is used to provide details about geographic features - contained in an `MGLShapeSource` or `MGLVectorTileSource` object. Each concrete - subclass of `MGLShape` in turn has a subclass that conforms to this protocol. A - feature object associates a shape with an optional identifier and attributes. - - You can add custom data to display on the map by creating feature objects and - adding them to an `MGLShapeSource` using the - `-[MGLShapeSource initWithIdentifier:shape:options:]` method or - `MGLShapeSource.shape` property. - - In addition to adding data to the map, you can also extract data from the map: - `-[MGLMapView visibleFeaturesAtPoint:]` and related methods return feature - objects that correspond to features in the source. This enables you to inspect - the properties of features in vector tiles loaded by `MGLVectorTileSource` - objects. You also reuse these feature objects as overlay annotations. - - While it is possible to add `MGLFeature`-conforming objects to the map as - annotations using `-[MGLMapView addAnnotations:]` and related methods, doing so - has trade-offs: - - - Features added as annotations will not have `identifier` or `attributes` - properties when used with feature querying. - - - Features added as annotations become interactive. Taps and selection can be - handled in `-[MGLMapViewDelegate mapView:didSelectAnnotation:]`. - */ -@protocol MGLFeature - -/** - An object that uniquely identifies the feature in its containing content - source. - - You can configure an `MGLVectorStyleLayer` object to include or exclude a - specific feature in an `MGLShapeSource` or `MGLVectorTileSource`. In the - `MGLVectorStyleLayer.predicate` property, compare the special `$id` attribute - to the feature’s identifier. - - In vector tiles loaded by `MGLVectorTileSource` objects, the identifier - corresponds to the - feature identifier - (`id`). If the source does not specify the feature’s identifier, the value of - this property is `nil`. If specified, the identifier may be an integer, - floating-point number, or string. These data types are mapped to instances of - the following Foundation classes: - - - - - - - - - - -
In the tile sourceThis property
Integer NSNumber (use the unsignedLongLongValue or longLongValue property)
Floating-point number NSNumber (use the doubleValue property)
String NSString
- - For details about the identifiers used in most Mapbox-provided styles, consult - the - Mapbox Streets - layer reference. - - The identifier should be set before adding the feature to an `MGLShapeSource` - object; setting it afterwards has no effect on the map’s contents. While it is - possible to change this value on feature instances obtained from - `-[MGLMapView visibleFeaturesAtPoint:]` and related methods, doing so likewise - has no effect on the map’s contents. - */ -@property (nonatomic, copy, nullable) id identifier; - -/** - A dictionary of attributes for this feature. - - You can configure an `MGLVectorStyleLayer` object to include or exclude a - specific feature in an `MGLShapeSource` or `MGLVectorTileSource`. In the - `MGLVectorStyleLayer.predicate` property, compare a key of the attribute - dictionary to the value you want to include. For example, if you want an - `MGLLineStyleLayer` object to display only important features, you might assign - a value above 50 to the important features’ `importance` attribute, then set - `MGLVectorStyleLayer.predicate` to an `NSPredicate` with the format - `importance > 50`. - - You can also configure many layout and paint attributes of an `MGLStyleLayer` - object to match the value of an attribute in this dictionary whenever it - renders this feature. For example, if you display features in an - `MGLShapeSource` using an `MGLCircleStyleLayer`, you can assign a `halfway` - attribute to each of the source’s features, then set - `MGLCircleStyleLayer.circleRadius` to an expression for the key path `halfway`. - - The `MGLSymbolStyleLayer.text` and `MGLSymbolStyleLayer.iconImageName` - properties allow you to use attributes yet another way. For example, to label - features in an `MGLShapeSource` object by their names, you can assign a `name` - attribute to each of the source’s features, then set - `MGLSymbolStyleLayer.text` to an expression for the constant string value - `{name}`. See the - Predicates and Expressions - guide for more information about expressions. - - In vector tiles loaded by `MGLVectorTileSource` objects, the keys and values of - each feature’s attribute dictionary are determined by the source. Each - attribute name is a string, while each attribute value may be a null value, - Boolean value, integer, floating-point number, or string. These data types are - mapped to instances of the following Foundation classes: - - - - - - - - - - - - -
In the tile sourceIn this dictionary
Null NSNull
Boolean NSNumber (use the boolValue property)
Integer NSNumber (use the unsignedLongLongValue or longLongValue property)
Floating-point number NSNumber (use the doubleValue property)
String NSString
- - For details about the attribute names and values found in Mapbox-provided - vector tile sources, consult the - Mapbox Streets - and - Mapbox Terrain - layer references. - - When adding a feature to an `MGLShapeSource`, use the same Foundation types - listed above for each attribute value. In addition to the Foundation types, you - may also set an attribute to an `NSColor` (macOS) or `UIColor` (iOS), which - will be converted into its - CSS string representation - when the feature is added to an `MGLShapeSource`. This can be convenient when - using the attribute to supply a value for a color-typed layout or paint - attribute via a key path expression. - - Note that while it is possible to change this value on feature - instances obtained from `-[MGLMapView visibleFeaturesAtPoint:]` and related - methods, there will be no effect on the map. Setting this value can be useful - when the feature instance is used to initialize an `MGLShapeSource` and that - source is added to the map and styled. - */ -@property (nonatomic, copy) NSDictionary *attributes; - -/** - Returns the feature attribute for the given attribute name. - - See the `attributes` property’s documentation for details on keys and values - associated with this method. - */ -- (nullable id)attributeForKey:(NSString *)key; - -/** - Returns a dictionary that can be serialized as a GeoJSON Feature representation - of an instance of an `MGLFeature` subclass. - - The dictionary includes a `geometry` key corresponding to the receiver’s - underlying geometry data, a `properties` key corresponding to the receiver’s - `attributes` property, and an `id` key corresponding to the receiver’s - `identifier` property. - */ -- (NSDictionary *)geoJSONDictionary; - -@end - -/** - An `MGLEmptyFeature` object associates an empty shape with an optional - identifier and attributes. - */ -MGL_EXPORT -@interface MGLEmptyFeature : MGLShape -@end - -/** - An `MGLPointFeature` object associates a point shape with an optional - identifier and attributes. - - #### Related examples - See the - Dynamically style interactive points example to learn how to initialize - `MGLPointFeature` objects and add them to your map. - */ -MGL_EXPORT -@interface MGLPointFeature : MGLPointAnnotation -@end - -/** - An `MGLPointFeatureCluster` object associates a point shape (with an optional - identifier and attributes) and represents a point cluster. - - @see `MGLCluster` - - #### Related examples - See the - Clustering point data example to learn how to initialize - clusters and add them to your map. - */ -MGL_EXPORT -@interface MGLPointFeatureCluster : MGLPointFeature -@end - -/** - An `MGLPolylineFeature` object associates a polyline shape with an optional - identifier and attributes. - - A polyline feature is known as a - LineString - feature in GeoJSON. - - #### Related examples - See the - Add a line annotation from GeoJSON example to learn how to initialize an - `MGLPolylineFeature` and add it to an `MGLMapView` object. - */ -MGL_EXPORT -@interface MGLPolylineFeature : MGLPolyline -@end - -/** - An `MGLPolygonFeature` object associates a polygon shape with an optional - identifier and attributes. - */ -MGL_EXPORT -@interface MGLPolygonFeature : MGLPolygon -@end - -/** - An `MGLPointCollectionFeature` object associates a point collection with an - optional identifier and attributes. - - A point collection feature is known as a - MultiPoint - feature in GeoJSON. - */ -MGL_EXPORT -@interface MGLPointCollectionFeature : MGLPointCollection -@end - -// https://github.com/mapbox/mapbox-gl-native/issues/7473 -@compatibility_alias MGLMultiPointFeature MGLPointCollectionFeature; - -/** - An `MGLMultiPolylineFeature` object associates a multipolyline shape with an - optional identifier and attributes. - - A multipolyline feature is known as a - MultiLineString - feature in GeoJSON. - */ -MGL_EXPORT -@interface MGLMultiPolylineFeature : MGLMultiPolyline -@end - -/** - An `MGLMultiPolygonFeature` object associates a multipolygon shape with an - optional identifier and attributes. - */ -MGL_EXPORT -@interface MGLMultiPolygonFeature : MGLMultiPolygon -@end - -/** - An `MGLShapeCollectionFeature` object associates a shape collection with an - optional identifier and attributes. - - `MGLShapeCollectionFeature` is most commonly used to add multiple shapes to a - single `MGLShapeSource`. Configure the appearance of an `MGLSource`’s shape - collection collectively using an `MGLSymbolStyleLayer` object, or use multiple - instances of `MGLCircleStyleLayer`, `MGLFillStyleLayer`, and - `MGLLineStyleLayer` to configure the appearance of each kind of shape inside - the collection. - - A shape collection feature is known as a - feature collection - in GeoJSON. - - #### Related examples - See the - Add multiple shapes from a single shape source example to learn how to - add shape data to your map using an `MGLShapeCollectionFeature` object. - */ -MGL_EXPORT -@interface MGLShapeCollectionFeature : MGLShapeCollection - -@property (nonatomic, copy, readonly) NSArray *> *shapes; - -+ (instancetype)shapeCollectionWithShapes:(NSArray *> *)shapes; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLFeature.mm b/platform/darwin/src/MGLFeature.mm deleted file mode 100644 index df6b1bffeaa..00000000000 --- a/platform/darwin/src/MGLFeature.mm +++ /dev/null @@ -1,542 +0,0 @@ -#import "MGLFoundation_Private.h" -#import "MGLFeature_Private.h" -#import "MGLCluster.h" - -#import "MGLPointAnnotation.h" -#import "MGLPolyline.h" -#import "MGLPolygon.h" -#import "MGLValueEvaluator.h" - -#import "MGLShape_Private.h" -#import "MGLPointCollection_Private.h" -#import "MGLPolyline_Private.h" -#import "MGLPolygon_Private.h" - -#import "NSDictionary+MGLAdditions.h" -#import "NSArray+MGLAdditions.h" -#import "NSExpression+MGLPrivateAdditions.h" -#import "MGLLoggingConfiguration_Private.h" - -#import -#import -#import - -// Cluster constants -static NSString * const MGLClusterIdentifierKey = @"cluster_id"; -static NSString * const MGLClusterCountKey = @"point_count"; -const NSUInteger MGLClusterIdentifierInvalid = NSUIntegerMax; - -@interface MGLEmptyFeature () -@end - -@implementation MGLEmptyFeature - -@synthesize identifier; -@synthesize attributes = _attributes; - -MGL_DEFINE_FEATURE_INIT_WITH_CODER(); -MGL_DEFINE_FEATURE_ENCODE(); -MGL_DEFINE_FEATURE_IS_EQUAL(); -MGL_DEFINE_FEATURE_ATTRIBUTES_GETTER(); - -- (id)attributeForKey:(NSString *)key { - MGLLogDebug(@"Retrieving attributeForKey: %@", key); - return self.attributes[key]; -} - -- (NSDictionary *)geoJSONDictionary { - return NSDictionaryFeatureForGeometry([super geoJSONDictionary], self.attributes, self.identifier); -} - -- (mbgl::GeoJSON)geoJSONObject { - return mbglFeature({[self geometryObject]}, identifier, self.attributes); -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; identifier = %@, attributes = %@>", - NSStringFromClass([self class]), (void *)self, - self.identifier ? [NSString stringWithFormat:@"\"%@\"", self.identifier] : self.identifier, - self.attributes.count ? self.attributes : @"none"]; -} - -@end - -@interface MGLPointFeature () -@end - -@implementation MGLPointFeature - -@synthesize identifier; -@synthesize attributes = _attributes; - -MGL_DEFINE_FEATURE_INIT_WITH_CODER(); -MGL_DEFINE_FEATURE_ENCODE(); -MGL_DEFINE_FEATURE_IS_EQUAL(); -MGL_DEFINE_FEATURE_ATTRIBUTES_GETTER(); - -- (id)attributeForKey:(NSString *)key { - MGLLogDebug(@"Retrieving attributeForKey: %@", key); - return self.attributes[key]; -} - -- (NSDictionary *)geoJSONDictionary { - return NSDictionaryFeatureForGeometry([super geoJSONDictionary], self.attributes, self.identifier); -} - -- (mbgl::GeoJSON)geoJSONObject { - return mbglFeature({[self geometryObject]}, identifier, self.attributes); -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; identifier = %@, coordinate = %f, %f, attributes = %@>", - NSStringFromClass([self class]), (void *)self, - self.identifier ? [NSString stringWithFormat:@"\"%@\"", self.identifier] : self.identifier, - self.coordinate.latitude, self.coordinate.longitude, - self.attributes.count ? self.attributes : @"none"]; -} - -@end - -@implementation MGLPointFeatureCluster - -- (NSUInteger)clusterIdentifier { - NSNumber *clusterNumber = MGL_OBJC_DYNAMIC_CAST([self attributeForKey:MGLClusterIdentifierKey], NSNumber); - MGLAssert(clusterNumber, @"Clusters should have a cluster_id"); - - if (!clusterNumber) { - return MGLClusterIdentifierInvalid; - } - - NSUInteger clusterIdentifier = [clusterNumber unsignedIntegerValue]; - MGLAssert(clusterIdentifier <= UINT32_MAX, @"Cluster identifiers are 32bit"); - - return clusterIdentifier; -} - -- (NSUInteger)clusterPointCount { - NSNumber *count = MGL_OBJC_DYNAMIC_CAST([self attributeForKey:MGLClusterCountKey], NSNumber); - MGLAssert(count, @"Clusters should have a point_count"); - - return [count unsignedIntegerValue]; -} -@end - - -@interface MGLPolylineFeature () -@end - -@implementation MGLPolylineFeature - -@synthesize identifier; -@synthesize attributes = _attributes; - -MGL_DEFINE_FEATURE_INIT_WITH_CODER(); -MGL_DEFINE_FEATURE_ENCODE(); -MGL_DEFINE_FEATURE_IS_EQUAL(); -MGL_DEFINE_FEATURE_ATTRIBUTES_GETTER(); - -- (id)attributeForKey:(NSString *)key { - MGLLogDebug(@"Retrieving attributeForKey: %@", key); - return self.attributes[key]; -} - -- (NSDictionary *)geoJSONDictionary { - return NSDictionaryFeatureForGeometry([super geoJSONDictionary], self.attributes, self.identifier); -} - -- (mbgl::GeoJSON)geoJSONObject { - return mbglFeature({[self geometryObject]}, identifier, self.attributes); -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; identifier = %@, count = %lu, bounds = %@, attributes = %@>", - NSStringFromClass([self class]), (void *)self, - self.identifier ? [NSString stringWithFormat:@"\"%@\"", self.identifier] : self.identifier, - (unsigned long)[self pointCount], - MGLStringFromCoordinateBounds(self.overlayBounds), - self.attributes.count ? self.attributes : @"none"]; -} - -@end - -@interface MGLPolygonFeature () -@end - -@implementation MGLPolygonFeature - -@synthesize identifier; -@synthesize attributes = _attributes; - -MGL_DEFINE_FEATURE_INIT_WITH_CODER(); -MGL_DEFINE_FEATURE_ENCODE(); -MGL_DEFINE_FEATURE_IS_EQUAL(); -MGL_DEFINE_FEATURE_ATTRIBUTES_GETTER(); - -- (id)attributeForKey:(NSString *)key { - MGLLogDebug(@"Retrieving attributeForKey: %@", key); - return self.attributes[key]; -} - -- (NSDictionary *)geoJSONDictionary { - return NSDictionaryFeatureForGeometry([super geoJSONDictionary], self.attributes, self.identifier); -} - -- (mbgl::GeoJSON)geoJSONObject { - return mbglFeature({[self geometryObject]}, identifier, self.attributes); -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; identifier = %@, count = %lu, bounds = %@, attributes = %@>", - NSStringFromClass([self class]), (void *)self, - self.identifier ? [NSString stringWithFormat:@"\"%@\"", self.identifier] : self.identifier, - (unsigned long)[self pointCount], - MGLStringFromCoordinateBounds(self.overlayBounds), - self.attributes.count ? self.attributes : @"none"]; -} - -@end - -@interface MGLPointCollectionFeature () -@end - -@implementation MGLPointCollectionFeature - -@synthesize identifier; -@synthesize attributes = _attributes; - -MGL_DEFINE_FEATURE_INIT_WITH_CODER(); -MGL_DEFINE_FEATURE_ENCODE(); -MGL_DEFINE_FEATURE_IS_EQUAL(); -MGL_DEFINE_FEATURE_ATTRIBUTES_GETTER(); - -- (id)attributeForKey:(NSString *)key { - MGLLogDebug(@"Retrieving attributeForKey: %@", key); - return self.attributes[key]; -} - -- (NSDictionary *)geoJSONDictionary { - return NSDictionaryFeatureForGeometry([super geoJSONDictionary], self.attributes, self.identifier); -} - -- (mbgl::GeoJSON)geoJSONObject { - return mbglFeature({[self geometryObject]}, identifier, self.attributes); -} - -@end - -@interface MGLMultiPolylineFeature () -@end - -@implementation MGLMultiPolylineFeature - -@synthesize identifier; -@synthesize attributes = _attributes; - -MGL_DEFINE_FEATURE_INIT_WITH_CODER(); -MGL_DEFINE_FEATURE_ENCODE(); -MGL_DEFINE_FEATURE_IS_EQUAL(); -MGL_DEFINE_FEATURE_ATTRIBUTES_GETTER(); - -- (id)attributeForKey:(NSString *)key { - MGLLogDebug(@"Retrieving attributeForKey: %@", key); - return self.attributes[key]; -} - -- (NSDictionary *)geoJSONDictionary { - return NSDictionaryFeatureForGeometry([super geoJSONDictionary], self.attributes, self.identifier); -} - -- (mbgl::GeoJSON)geoJSONObject { - return mbglFeature({[self geometryObject]}, identifier, self.attributes); -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; identifier = %@, count = %lu, bounds = %@, attributes = %@>", - NSStringFromClass([self class]), (void *)self, - self.identifier ? [NSString stringWithFormat:@"\"%@\"", self.identifier] : self.identifier, - (unsigned long)self.polylines.count, - MGLStringFromCoordinateBounds(self.overlayBounds), - self.attributes.count ? self.attributes : @"none"]; -} - -@end - -@interface MGLMultiPolygonFeature () -@end - -@implementation MGLMultiPolygonFeature - -@synthesize identifier; -@synthesize attributes = _attributes; - -MGL_DEFINE_FEATURE_INIT_WITH_CODER(); -MGL_DEFINE_FEATURE_ENCODE(); -MGL_DEFINE_FEATURE_IS_EQUAL(); -MGL_DEFINE_FEATURE_ATTRIBUTES_GETTER(); - -- (id)attributeForKey:(NSString *)key { - MGLLogDebug(@"Retrieving attributeForKey: %@", key); - return self.attributes[key]; -} - -- (NSDictionary *)geoJSONDictionary { - return NSDictionaryFeatureForGeometry([super geoJSONDictionary], self.attributes, self.identifier); -} - -- (mbgl::GeoJSON)geoJSONObject { - return mbglFeature({[self geometryObject]}, identifier, self.attributes); -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; identifier = %@, count = %lu, bounds = %@, attributes = %@>", - NSStringFromClass([self class]), (void *)self, - self.identifier ? [NSString stringWithFormat:@"\"%@\"", self.identifier] : self.identifier, - (unsigned long)self.polygons.count, - MGLStringFromCoordinateBounds(self.overlayBounds), - self.attributes.count ? self.attributes : @"none"]; -} - -@end - -@interface MGLShapeCollectionFeature () -@end - -@implementation MGLShapeCollectionFeature - -@synthesize identifier; -@synthesize attributes = _attributes; - -@dynamic shapes; - -+ (instancetype)shapeCollectionWithShapes:(NSArray *> *)shapes { - return [super shapeCollectionWithShapes:shapes]; -} - -MGL_DEFINE_FEATURE_INIT_WITH_CODER(); -MGL_DEFINE_FEATURE_ENCODE(); -MGL_DEFINE_FEATURE_IS_EQUAL(); -MGL_DEFINE_FEATURE_ATTRIBUTES_GETTER(); - -- (id)attributeForKey:(NSString *)key { - return self.attributes[key]; -} - -- (NSDictionary *)geoJSONDictionary { - return NSDictionaryFeatureForGeometry([super geoJSONDictionary], self.attributes, self.identifier); -} - -- (mbgl::GeoJSON)geoJSONObject { - mbgl::FeatureCollection featureCollection; - featureCollection.reserve(self.shapes.count); - for (MGLShape *feature in self.shapes) { - auto geoJSONObject = feature.geoJSONObject; - MGLAssert(geoJSONObject.is(), @"Feature collection must only contain features."); - featureCollection.push_back(geoJSONObject.get()); - } - return featureCollection; -} - -@end - -/** - Transforms an `mbgl::geometry::geometry` type into an instance of the - corresponding Objective-C geometry class. - */ -template -class GeometryEvaluator { -private: - const mbgl::PropertyMap *shared_properties; - -public: - GeometryEvaluator(const mbgl::PropertyMap *properties = nullptr): - shared_properties(properties) - {} - - MGLShape * operator()(const mbgl::EmptyGeometry &) const { - MGLEmptyFeature *feature = [[MGLEmptyFeature alloc] init]; - return feature; - } - - MGLShape * operator()(const mbgl::Point &geometry) const { - Class pointFeatureClass = [MGLPointFeature class]; - - // If we're dealing with a cluster, we should change the class type. - // This could be generic and build the subclass at runtime if it turns - // out we need to support more than point clusters. - if (shared_properties) { - auto clusterIt = shared_properties->find("cluster"); - if (clusterIt != shared_properties->end()) { - auto clusterValue = clusterIt->second; - if (clusterValue.template is()) { - if (clusterValue.template get()) { - pointFeatureClass = [MGLPointFeatureCluster class]; - } - } - } - } - - MGLPointFeature *feature = [[pointFeatureClass alloc] init]; - feature.coordinate = toLocationCoordinate2D(geometry); - return feature; - } - - MGLShape * operator()(const mbgl::LineString &geometry) const { - std::vector coordinates = toLocationCoordinates2D(geometry); - return [MGLPolylineFeature polylineWithCoordinates:&coordinates[0] count:coordinates.size()]; - } - - MGLShape * operator()(const mbgl::Polygon &geometry) const { - return toShape(geometry); - } - - MGLShape * operator()(const mbgl::MultiPoint &geometry) const { - std::vector coordinates = toLocationCoordinates2D(geometry); - return [[MGLPointCollectionFeature alloc] initWithCoordinates:&coordinates[0] count:coordinates.size()]; - } - - MGLShape * operator()(const mbgl::MultiLineString &geometry) const { - NSMutableArray *polylines = [NSMutableArray arrayWithCapacity:geometry.size()]; - for (auto &lineString : geometry) { - std::vector coordinates = toLocationCoordinates2D(lineString); - MGLPolyline *polyline = [MGLPolyline polylineWithCoordinates:&coordinates[0] count:coordinates.size()]; - [polylines addObject:polyline]; - } - - return [MGLMultiPolylineFeature multiPolylineWithPolylines:polylines]; - } - - MGLShape * operator()(const mbgl::MultiPolygon &geometry) const { - NSMutableArray *polygons = [NSMutableArray arrayWithCapacity:geometry.size()]; - for (auto &polygon : geometry) { - [polygons addObject:toShape(polygon)]; - } - - return [MGLMultiPolygonFeature multiPolygonWithPolygons:polygons]; - } - - MGLShape * operator()(const mapbox::geometry::geometry_collection &collection) const { - NSMutableArray *shapes = [NSMutableArray arrayWithCapacity:collection.size()]; - for (auto &geometry : collection) { - // This is very much like the transformation that happens in MGLFeaturesFromMBGLFeatures(), but these are raw geometries with no associated feature IDs or attributes. - MGLShape *shape = mapbox::geometry::geometry::visit(geometry, *this); - [shapes addObject:shape]; - } - return [MGLShapeCollectionFeature shapeCollectionWithShapes:shapes]; - } - -private: - static CLLocationCoordinate2D toLocationCoordinate2D(const mbgl::Point &point) { - return CLLocationCoordinate2DMake(point.y, point.x); - } - - static std::vector toLocationCoordinates2D(const std::vector> &points) { - std::vector coordinates; - coordinates.reserve(points.size()); - std::transform(points.begin(), points.end(), std::back_inserter(coordinates), toLocationCoordinate2D); - return coordinates; - } - - template - static U *toShape(const mbgl::Polygon &geometry) { - auto &linearRing = geometry.front(); - std::vector coordinates = toLocationCoordinates2D(linearRing); - NSMutableArray *innerPolygons; - if (geometry.size() > 1) { - innerPolygons = [NSMutableArray arrayWithCapacity:geometry.size() - 1]; - for (auto iter = geometry.begin() + 1; iter != geometry.end(); iter++) { - auto &innerRing = *iter; - std::vector innerCoordinates = toLocationCoordinates2D(innerRing); - MGLPolygon *innerPolygon = [MGLPolygon polygonWithCoordinates:&innerCoordinates[0] count:innerCoordinates.size()]; - [innerPolygons addObject:innerPolygon]; - } - } - - return [U polygonWithCoordinates:&coordinates[0] count:coordinates.size() interiorPolygons:innerPolygons]; - } -}; - -template -class GeoJSONEvaluator { -public: - MGLShape * operator()(const mbgl::Geometry &geometry) const { - GeometryEvaluator evaluator; - MGLShape *shape = mapbox::geometry::geometry::visit(geometry, evaluator); - return shape; - } - - MGLShape * operator()(const mbgl::GeoJSONFeature &feature) const { - MGLShape *shape = (MGLShape *)MGLFeatureFromMBGLFeature(feature); - return shape; - } - - MGLShape * operator()(const mbgl::FeatureCollection &collection) const { - NSMutableArray *shapes = [NSMutableArray arrayWithCapacity:collection.size()]; - for (const auto &feature : collection) { - [shapes addObject:MGLFeatureFromMBGLFeature(feature)]; - } - return [MGLShapeCollectionFeature shapeCollectionWithShapes:shapes]; - } -}; - -NSArray *> *MGLFeaturesFromMBGLFeatures(const std::vector &features) { - NSMutableArray *shapes = [NSMutableArray arrayWithCapacity:features.size()]; - for (const auto &feature : features) { - [shapes addObject:MGLFeatureFromMBGLFeature(static_cast(feature))]; - } - return shapes; -} - -NSArray *> *MGLFeaturesFromMBGLFeatures(const std::vector &features) { - NSMutableArray *shapes = [NSMutableArray arrayWithCapacity:features.size()]; - for (const auto &feature : features) { - [shapes addObject:MGLFeatureFromMBGLFeature(feature)]; - } - return shapes; -} - -id MGLFeatureFromMBGLFeature(const mbgl::GeoJSONFeature &feature) { - NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithCapacity:feature.properties.size()]; - for (auto &pair : feature.properties) { - auto &value = pair.second; - ValueEvaluator evaluator; - attributes[@(pair.first.c_str())] = mbgl::Value::visit(value, evaluator); - } - GeometryEvaluator evaluator(&feature.properties); - MGLShape *shape = mapbox::geometry::geometry::visit(feature.geometry, evaluator); - if (!feature.id.is()) { - shape.identifier = mbgl::FeatureIdentifier::visit(feature.id, ValueEvaluator()); - } - shape.attributes = attributes; - - return shape; -} - -MGLShape* MGLShapeFromGeoJSON(const mapbox::geojson::geojson &geojson) { - GeoJSONEvaluator evaluator; - MGLShape *shape = mapbox::geojson::geojson::visit(geojson, evaluator); - return shape; -} - -mbgl::GeoJSONFeature mbglFeature(mbgl::GeoJSONFeature feature, id identifier, NSDictionary *attributes) -{ - if (identifier) { - NSExpression *identifierExpression = [NSExpression expressionForConstantValue:identifier]; - feature.id = [identifierExpression mgl_featureIdentifier]; - } - feature.properties = [attributes mgl_propertyMap]; - return feature; -} - -NSDictionary *NSDictionaryFeatureForGeometry(NSDictionary *geometry, NSDictionary *attributes, id identifier) { - NSMutableDictionary *feature = [@{@"type": @"Feature", - @"properties": attributes, - @"geometry": geometry} mutableCopy]; - feature[@"id"] = identifier; - return [feature copy]; -} diff --git a/platform/darwin/src/MGLFeature_Private.h b/platform/darwin/src/MGLFeature_Private.h deleted file mode 100644 index 599633dd31b..00000000000 --- a/platform/darwin/src/MGLFeature_Private.h +++ /dev/null @@ -1,85 +0,0 @@ -#import "MGLFoundation.h" -#import "MGLFeature.h" -#import "MGLShape.h" - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Returns an array of `MGLFeature` objects converted from the given vector of - vector tile features. - */ -MGL_EXPORT -NSArray *> *MGLFeaturesFromMBGLFeatures(const std::vector &features); - -/** - Returns an array of `MGLFeature` objects converted from the given vector of - vector tile features. - */ -MGL_EXPORT -NSArray *> *MGLFeaturesFromMBGLFeatures(const std::vector &features); - -/** - Returns an `MGLFeature` object converted from the given mbgl::GeoJSONFeature - */ -MGL_EXPORT -id MGLFeatureFromMBGLFeature(const mbgl::GeoJSONFeature &feature); - -/** - Returns an `MGLShape` representing the given geojson. The shape can be - a feature, a collection of features, or a geometry. - */ -MGLShape* MGLShapeFromGeoJSON(const mapbox::geojson::geojson &geojson); - -/** - Takes an `mbgl::GeoJSONFeature` object, an identifer, and attributes dictionary and - returns the feature object with converted `mbgl::FeatureIdentifier` and - `mbgl::PropertyMap` properties. - */ -mbgl::GeoJSONFeature mbglFeature(mbgl::GeoJSONFeature feature, id identifier, NSDictionary * attributes); - -/** - Returns an `NSDictionary` representation of an `MGLFeature`. - */ -NSDictionary *NSDictionaryFeatureForGeometry(NSDictionary *geometry, NSDictionary *attributes, id identifier); - -NS_ASSUME_NONNULL_END - -#define MGL_DEFINE_FEATURE_INIT_WITH_CODER() \ - - (instancetype)initWithCoder:(NSCoder *)decoder { \ - if (self = [super initWithCoder:decoder]) { \ - NSSet *identifierClasses = [NSSet setWithArray:@[[NSString class], [NSNumber class]]]; \ - identifier = [decoder decodeObjectOfClasses:identifierClasses forKey:@"identifier"]; \ - _attributes = [decoder decodeObjectOfClass:[NSDictionary class] forKey:@"attributes"]; \ - } \ - return self; \ - } - -#define MGL_DEFINE_FEATURE_ENCODE() \ - - (void)encodeWithCoder:(NSCoder *)coder { \ - [super encodeWithCoder:coder]; \ - [coder encodeObject:identifier forKey:@"identifier"]; \ - [coder encodeObject:_attributes forKey:@"attributes"]; \ - } - -#define MGL_DEFINE_FEATURE_IS_EQUAL() \ - - (BOOL)isEqual:(id)other { \ - if (other == self) return YES; \ - if (![other isKindOfClass:[self class]]) return NO; \ - __typeof(self) otherFeature = other; \ - return [super isEqual:other] && [self geoJSONObject] == [otherFeature geoJSONObject]; \ - } \ - - (NSUInteger)hash { \ - return [super hash] + [[self geoJSONDictionary] hash]; \ - } - -#define MGL_DEFINE_FEATURE_ATTRIBUTES_GETTER() \ - - (NSDictionary *) attributes { \ - if (!_attributes) { \ - return @{}; \ - } \ - return _attributes; \ - } diff --git a/platform/darwin/src/MGLFillExtrusionStyleLayer.h b/platform/darwin/src/MGLFillExtrusionStyleLayer.h deleted file mode 100644 index adb215c413d..00000000000 --- a/platform/darwin/src/MGLFillExtrusionStyleLayer.h +++ /dev/null @@ -1,388 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLFoundation.h" -#import "MGLVectorStyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Controls the frame of reference for - `MGLFillExtrusionStyleLayer.fillExtrusionTranslation`. - - Values of this type are used in the `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor` - property. - */ -typedef NS_ENUM(NSUInteger, MGLFillExtrusionTranslationAnchor) { - /** - The fill extrusion is translated relative to the map. - */ - MGLFillExtrusionTranslationAnchorMap, - /** - The fill extrusion is translated relative to the viewport. - */ - MGLFillExtrusionTranslationAnchorViewport, -}; - -/** - An `MGLFillExtrusionStyleLayer` is a style layer that renders one or more 3D - extruded polygons on the map. - - Use a fill-extrusion style layer to configure the visual appearance of polygon - or multipolygon features. These features can come from vector tiles loaded by - an `MGLVectorTileSource` object, or they can be `MGLPolygon`, - `MGLPolygonFeature`, `MGLMultiPolygon`, or `MGLMultiPolygonFeature` instances - in an `MGLShapeSource` or `MGLComputedShapeSource` object. - - You can access an existing fill-extrusion style layer using the - `-[MGLStyle layerWithIdentifier:]` method if you know its identifier; - otherwise, find it using the `MGLStyle.layers` property. You can also create a - new fill-extrusion style layer and add it to the style using a method such as - `-[MGLStyle addLayer:]`. - - #### Related examples - See the Display - 3D buildings example to learn how to add and style 3D layers on a map. - - ### Example - - ```swift - let layer = MGLFillExtrusionStyleLayer(identifier: "buildings", source: buildings) - layer.sourceLayerIdentifier = "building" - layer.fillExtrusionHeight = NSExpression(forKeyPath: "height") - layer.fillExtrusionBase = NSExpression(forKeyPath: "min_height") - layer.predicate = NSPredicate(format: "extrude == 'true'") - mapView.style?.addLayer(layer) - ``` - */ -MGL_EXPORT -@interface MGLFillExtrusionStyleLayer : MGLVectorStyleLayer - -/** - Returns a fill-extrusion style layer initialized with an identifier and source. - - After initializing and configuring the style layer, add it to a map view’s - style using the `-[MGLStyle addLayer:]` or - `-[MGLStyle insertLayer:belowLayer:]` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param source The source from which to obtain the data to style. If the source - has not yet been added to the current style, the behavior is undefined. - @return An initialized foreground style layer. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source; - -#pragma mark - Accessing the Paint Attributes - -/** - The height with which to extrude the base of this layer. Must be less than or - equal to `fillExtrusionHeight`. - - This property is measured in meters. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `fillExtrusionHeight` is - non-`nil`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *fillExtrusionBase; - -/** - The transition affecting any changes to this layer’s `fillExtrusionBase` property. - - This property corresponds to the `fill-extrusion-base-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition fillExtrusionBaseTransition; - -#if TARGET_OS_IPHONE -/** - The base color of this layer. The extrusion's surfaces will be shaded - differently based on this color in combination with the `light` settings. If - this color is specified with an alpha component, the alpha component will be - ignored; use `fillExtrusionOpacity` to set layer opacityco. - - The default value of this property is an expression that evaluates to - `UIColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `fillExtrusionPattern` is set to - `nil`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *fillExtrusionColor; -#else -/** - The base color of this layer. The extrusion's surfaces will be shaded - differently based on this color in combination with the `light` settings. If - this color is specified with an alpha component, the alpha component will be - ignored; use `fillExtrusionOpacity` to set layer opacityco. - - The default value of this property is an expression that evaluates to - `NSColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `fillExtrusionPattern` is set to - `nil`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *fillExtrusionColor; -#endif - -/** - The transition affecting any changes to this layer’s `fillExtrusionColor` property. - - This property corresponds to the `fill-extrusion-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition fillExtrusionColorTransition; - -/** - Whether to apply a vertical gradient to the sides of a fill-extrusion layer. If - true, sides will be shaded slightly darker farther down. - - The default value of this property is an expression that evaluates to `YES`. - Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the fill-extrusion-vertical-gradient - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant Boolean values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *fillExtrusionHasVerticalGradient; - -@property (nonatomic, null_resettable) NSExpression *fillExtrusionVerticalGradient __attribute__((unavailable("Use fillExtrusionHasVerticalGradient instead."))); - -/** - The height with which to extrude this layer. - - This property is measured in meters. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *fillExtrusionHeight; - -/** - The transition affecting any changes to this layer’s `fillExtrusionHeight` property. - - This property corresponds to the `fill-extrusion-height-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition fillExtrusionHeightTransition; - -/** - The opacity of the entire fill extrusion layer. This is rendered on a - per-layer, not per-feature, basis, and data-driven styling is not available. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *fillExtrusionOpacity; - -/** - The transition affecting any changes to this layer’s `fillExtrusionOpacity` property. - - This property corresponds to the `fill-extrusion-opacity-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition fillExtrusionOpacityTransition; - -/** - Name of image in style images to use for drawing image fill-extrusions. For - seamless patterns, image width and height must be a factor of two (2, 4, 8, - ..., 512). - - You can set this property to an expression containing any of the following: - - * Constant string values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *fillExtrusionPattern; - -/** - The transition affecting any changes to this layer’s `fillExtrusionPattern` property. - - This property corresponds to the `fill-extrusion-pattern-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition fillExtrusionPatternTransition; - -#if TARGET_OS_IPHONE -/** - The geometry's offset. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 - points downward. Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the fill-extrusion-translate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *fillExtrusionTranslation; -#else -/** - The geometry's offset. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 - points upward. Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the fill-extrusion-translate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *fillExtrusionTranslation; -#endif - -/** - The transition affecting any changes to this layer’s `fillExtrusionTranslation` property. - - This property corresponds to the `fill-extrusion-translate-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition fillExtrusionTranslationTransition; - -@property (nonatomic, null_resettable) NSExpression *fillExtrusionTranslate __attribute__((unavailable("Use fillExtrusionTranslation instead."))); - -/** - Controls the frame of reference for `fillExtrusionTranslation`. - - The default value of this property is an expression that evaluates to `map`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `fillExtrusionTranslation` is - non-`nil`. Otherwise, it is ignored. - - This attribute corresponds to the fill-extrusion-translate-anchor - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `MGLFillExtrusionTranslationAnchor` values - * Any of the following constant string values: - * `map`: The fill extrusion is translated relative to the map. - * `viewport`: The fill extrusion is translated relative to the viewport. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *fillExtrusionTranslationAnchor; - -@property (nonatomic, null_resettable) NSExpression *fillExtrusionTranslateAnchor __attribute__((unavailable("Use fillExtrusionTranslationAnchor instead."))); - -@end - -/** - Methods for wrapping an enumeration value for a style layer attribute in an - `MGLFillExtrusionStyleLayer` object and unwrapping its raw value. - */ -@interface NSValue (MGLFillExtrusionStyleLayerAdditions) - -#pragma mark Working with Fill extrusion Style Layer Attribute Values - -/** - Creates a new value object containing the given `MGLFillExtrusionTranslationAnchor` enumeration. - - @param fillExtrusionTranslationAnchor The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLFillExtrusionTranslationAnchor:(MGLFillExtrusionTranslationAnchor)fillExtrusionTranslationAnchor; - -/** - The `MGLFillExtrusionTranslationAnchor` enumeration representation of the value. - */ -@property (readonly) MGLFillExtrusionTranslationAnchor MGLFillExtrusionTranslationAnchorValue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLFillExtrusionStyleLayer.mm b/platform/darwin/src/MGLFillExtrusionStyleLayer.mm deleted file mode 100644 index ed6cd584606..00000000000 --- a/platform/darwin/src/MGLFillExtrusionStyleLayer.mm +++ /dev/null @@ -1,363 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLSource.h" -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLStyleLayer_Private.h" -#import "MGLStyleValue_Private.h" -#import "MGLFillExtrusionStyleLayer.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLFillExtrusionStyleLayer_Private.h" - -#include -#include - - -namespace mbgl { - - MBGL_DEFINE_ENUM(MGLFillExtrusionTranslationAnchor, { - { MGLFillExtrusionTranslationAnchorMap, "map" }, - { MGLFillExtrusionTranslationAnchorViewport, "viewport" }, - }); - -} - -@interface MGLFillExtrusionStyleLayer () - -@property (nonatomic, readonly) mbgl::style::FillExtrusionLayer *rawLayer; - -@end - -@implementation MGLFillExtrusionStyleLayer - -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source -{ - MGLLogDebug(@"Initializing %@ with identifier: %@ source: %@", NSStringFromClass([self class]), identifier, source); - auto layer = std::make_unique(identifier.UTF8String, source.identifier.UTF8String); - return self = [super initWithPendingLayer:std::move(layer)]; -} - -- (mbgl::style::FillExtrusionLayer *)rawLayer -{ - return (mbgl::style::FillExtrusionLayer *)super.rawLayer; -} - -- (NSString *)sourceIdentifier -{ - MGLAssertStyleLayerIsValid(); - - return @(self.rawLayer->getSourceID().c_str()); -} - -- (NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - - auto layerID = self.rawLayer->getSourceLayer(); - return layerID.empty() ? nil : @(layerID.c_str()); -} - -- (void)setSourceLayerIdentifier:(NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting sourceLayerIdentifier: %@", sourceLayerIdentifier); - - self.rawLayer->setSourceLayer(sourceLayerIdentifier.UTF8String ?: ""); -} - -- (void)setPredicate:(NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting predicate: %@", predicate); - - self.rawLayer->setFilter(predicate ? predicate.mgl_filter : mbgl::style::Filter()); -} - -- (NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - - return [NSPredicate mgl_predicateWithFilter:self.rawLayer->getFilter()]; -} - -#pragma mark - Accessing the Paint Attributes - -- (void)setFillExtrusionBase:(NSExpression *)fillExtrusionBase { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionBase: %@", fillExtrusionBase); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillExtrusionBase, true); - self.rawLayer->setFillExtrusionBase(mbglValue); -} - -- (NSExpression *)fillExtrusionBase { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillExtrusionBase(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillExtrusionBase(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillExtrusionBaseTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionBaseTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setFillExtrusionBaseTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)fillExtrusionBaseTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionBaseTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setFillExtrusionColor:(NSExpression *)fillExtrusionColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionColor: %@", fillExtrusionColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillExtrusionColor, true); - self.rawLayer->setFillExtrusionColor(mbglValue); -} - -- (NSExpression *)fillExtrusionColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillExtrusionColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillExtrusionColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillExtrusionColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setFillExtrusionColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)fillExtrusionColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setFillExtrusionHasVerticalGradient:(NSExpression *)fillExtrusionHasVerticalGradient { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionHasVerticalGradient: %@", fillExtrusionHasVerticalGradient); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillExtrusionHasVerticalGradient, false); - self.rawLayer->setFillExtrusionVerticalGradient(mbglValue); -} - -- (NSExpression *)fillExtrusionHasVerticalGradient { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillExtrusionVerticalGradient(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillExtrusionVerticalGradient(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillExtrusionVerticalGradient:(NSExpression *)fillExtrusionVerticalGradient { -} - -- (NSExpression *)fillExtrusionVerticalGradient { - return self.fillExtrusionHasVerticalGradient; -} - -- (void)setFillExtrusionHeight:(NSExpression *)fillExtrusionHeight { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionHeight: %@", fillExtrusionHeight); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillExtrusionHeight, true); - self.rawLayer->setFillExtrusionHeight(mbglValue); -} - -- (NSExpression *)fillExtrusionHeight { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillExtrusionHeight(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillExtrusionHeight(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillExtrusionHeightTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionHeightTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setFillExtrusionHeightTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)fillExtrusionHeightTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionHeightTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setFillExtrusionOpacity:(NSExpression *)fillExtrusionOpacity { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionOpacity: %@", fillExtrusionOpacity); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillExtrusionOpacity, false); - self.rawLayer->setFillExtrusionOpacity(mbglValue); -} - -- (NSExpression *)fillExtrusionOpacity { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillExtrusionOpacity(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillExtrusionOpacity(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillExtrusionOpacityTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionOpacityTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setFillExtrusionOpacityTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)fillExtrusionOpacityTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionOpacityTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setFillExtrusionPattern:(NSExpression *)fillExtrusionPattern { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionPattern: %@", fillExtrusionPattern); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillExtrusionPattern, true); - self.rawLayer->setFillExtrusionPattern(mbglValue); -} - -- (NSExpression *)fillExtrusionPattern { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillExtrusionPattern(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillExtrusionPattern(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillExtrusionPatternTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionPatternTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setFillExtrusionPatternTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)fillExtrusionPatternTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionPatternTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setFillExtrusionTranslation:(NSExpression *)fillExtrusionTranslation { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionTranslation: %@", fillExtrusionTranslation); - - auto mbglValue = MGLStyleValueTransformer, NSValue *>().toPropertyValue>>(fillExtrusionTranslation, false); - self.rawLayer->setFillExtrusionTranslate(mbglValue); -} - -- (NSExpression *)fillExtrusionTranslation { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillExtrusionTranslate(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillExtrusionTranslate(); - } - return MGLStyleValueTransformer, NSValue *>().toExpression(propertyValue); -} - -- (void)setFillExtrusionTranslationTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionTranslationTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setFillExtrusionTranslateTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)fillExtrusionTranslationTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionTranslateTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setFillExtrusionTranslate:(NSExpression *)fillExtrusionTranslate { -} - -- (NSExpression *)fillExtrusionTranslate { - return self.fillExtrusionTranslation; -} - -- (void)setFillExtrusionTranslationAnchor:(NSExpression *)fillExtrusionTranslationAnchor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillExtrusionTranslationAnchor: %@", fillExtrusionTranslationAnchor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillExtrusionTranslationAnchor, false); - self.rawLayer->setFillExtrusionTranslateAnchor(mbglValue); -} - -- (NSExpression *)fillExtrusionTranslationAnchor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillExtrusionTranslateAnchor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillExtrusionTranslateAnchor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillExtrusionTranslateAnchor:(NSExpression *)fillExtrusionTranslateAnchor { -} - -- (NSExpression *)fillExtrusionTranslateAnchor { - return self.fillExtrusionTranslationAnchor; -} - -@end - -@implementation NSValue (MGLFillExtrusionStyleLayerAdditions) - -+ (NSValue *)valueWithMGLFillExtrusionTranslationAnchor:(MGLFillExtrusionTranslationAnchor)fillExtrusionTranslationAnchor { - return [NSValue value:&fillExtrusionTranslationAnchor withObjCType:@encode(MGLFillExtrusionTranslationAnchor)]; -} - -- (MGLFillExtrusionTranslationAnchor)MGLFillExtrusionTranslationAnchorValue { - MGLFillExtrusionTranslationAnchor fillExtrusionTranslationAnchor; - [self getValue:&fillExtrusionTranslationAnchor]; - return fillExtrusionTranslationAnchor; -} - -@end - -namespace mbgl { - -MGLStyleLayer* FillExtrusionStyleLayerPeerFactory::createPeer(style::Layer* rawLayer) { - return [[MGLFillExtrusionStyleLayer alloc] initWithRawLayer:rawLayer]; -} - -} // namespace mbgl diff --git a/platform/darwin/src/MGLFillExtrusionStyleLayer_Private.h b/platform/darwin/src/MGLFillExtrusionStyleLayer_Private.h deleted file mode 100644 index 2525b044afd..00000000000 --- a/platform/darwin/src/MGLFillExtrusionStyleLayer_Private.h +++ /dev/null @@ -1,17 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -#pragma once - -#include "MGLStyleLayer_Private.h" - -#include - -namespace mbgl { - -class FillExtrusionStyleLayerPeerFactory : public LayerPeerFactory, public mbgl::FillExtrusionLayerFactory { - // LayerPeerFactory overrides. - LayerFactory* getCoreLayerFactory() final { return this; } - virtual MGLStyleLayer* createPeer(style::Layer*) final; -}; - -} // namespace mbgl diff --git a/platform/darwin/src/MGLFillStyleLayer.h b/platform/darwin/src/MGLFillStyleLayer.h deleted file mode 100644 index b6f0e9bd065..00000000000 --- a/platform/darwin/src/MGLFillStyleLayer.h +++ /dev/null @@ -1,371 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLFoundation.h" -#import "MGLVectorStyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Controls the frame of reference for `MGLFillStyleLayer.fillTranslation`. - - Values of this type are used in the `MGLFillStyleLayer.fillTranslationAnchor` - property. - */ -typedef NS_ENUM(NSUInteger, MGLFillTranslationAnchor) { - /** - The fill is translated relative to the map. - */ - MGLFillTranslationAnchorMap, - /** - The fill is translated relative to the viewport. - */ - MGLFillTranslationAnchorViewport, -}; - -/** - An `MGLFillStyleLayer` is a style layer that renders one or more filled (and - optionally stroked) polygons on the map. - - Use a fill style layer to configure the visual appearance of polygon or - multipolygon features. These features can come from vector tiles loaded by an - `MGLVectorTileSource` object, or they can be `MGLPolygon`, `MGLPolygonFeature`, - `MGLMultiPolygon`, or `MGLMultiPolygonFeature` instances in an `MGLShapeSource` - or `MGLComputedShapeSource` object. - - You can access an existing fill style layer using the - `-[MGLStyle layerWithIdentifier:]` method if you know its identifier; - otherwise, find it using the `MGLStyle.layers` property. You can also create a - new fill style layer and add it to the style using a method such as - `-[MGLStyle addLayer:]`. - - #### Related examples - See the Select a feature - within a layer example to learn how to use a `TERNARY` expression to modify - the `fillOpacity` of an `MGLFillStyleLayer` object. See the Add a pattern to - a polygon example to learn how to use an image to add pattern to the - features styled by a `MGLFillStyleLayer`. - - ### Example - - ```swift - let layer = MGLFillStyleLayer(identifier: "parks", source: parks) - layer.sourceLayerIdentifier = "parks" - layer.fillColor = NSExpression(forConstantValue: UIColor.green) - layer.predicate = NSPredicate(format: "type == %@", "national-park") - mapView.style?.addLayer(layer) - ``` - */ -MGL_EXPORT -@interface MGLFillStyleLayer : MGLVectorStyleLayer - -/** - Returns a fill style layer initialized with an identifier and source. - - After initializing and configuring the style layer, add it to a map view’s - style using the `-[MGLStyle addLayer:]` or - `-[MGLStyle insertLayer:belowLayer:]` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param source The source from which to obtain the data to style. If the source - has not yet been added to the current style, the behavior is undefined. - @return An initialized foreground style layer. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source; - -#pragma mark - Accessing the Paint Attributes - -/** - Whether or not the fill should be antialiased. - - The default value of this property is an expression that evaluates to `YES`. - Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the fill-antialias - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant Boolean values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable, getter=isFillAntialiased) NSExpression *fillAntialiased; - -@property (nonatomic, null_resettable) NSExpression *fillAntialias __attribute__((unavailable("Use fillAntialiased instead."))); - -#if TARGET_OS_IPHONE -/** - The color of the filled part of this layer. - - The default value of this property is an expression that evaluates to - `UIColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `fillPattern` is set to `nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *fillColor; -#else -/** - The color of the filled part of this layer. - - The default value of this property is an expression that evaluates to - `NSColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `fillPattern` is set to `nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *fillColor; -#endif - -/** - The transition affecting any changes to this layer’s `fillColor` property. - - This property corresponds to the `fill-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition fillColorTransition; - -/** - The opacity of the entire fill layer. In contrast to the `fillColor`, this - value will also affect the 1pt stroke around the fill, if the stroke is used. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *fillOpacity; - -/** - The transition affecting any changes to this layer’s `fillOpacity` property. - - This property corresponds to the `fill-opacity-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition fillOpacityTransition; - -#if TARGET_OS_IPHONE -/** - The outline color of the fill. Matches the value of `fillColor` if unspecified. - - This property is only applied to the style if `fillPattern` is set to `nil`, - and `fillAntialiased` is set to an expression that evaluates to `YES`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *fillOutlineColor; -#else -/** - The outline color of the fill. Matches the value of `fillColor` if unspecified. - - This property is only applied to the style if `fillPattern` is set to `nil`, - and `fillAntialiased` is set to an expression that evaluates to `YES`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *fillOutlineColor; -#endif - -/** - The transition affecting any changes to this layer’s `fillOutlineColor` property. - - This property corresponds to the `fill-outline-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition fillOutlineColorTransition; - -/** - Name of image in sprite to use for drawing image fills. For seamless patterns, - image width and height must be a factor of two (2, 4, 8, ..., 512). Note that - zoom-dependent expressions will be evaluated only at integer zoom levels. - - You can set this property to an expression containing any of the following: - - * Constant string values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *fillPattern; - -/** - The transition affecting any changes to this layer’s `fillPattern` property. - - This property corresponds to the `fill-pattern-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition fillPatternTransition; - -#if TARGET_OS_IPHONE -/** - The geometry's offset. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 - points downward. Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the fill-translate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *fillTranslation; -#else -/** - The geometry's offset. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 - points upward. Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the fill-translate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *fillTranslation; -#endif - -/** - The transition affecting any changes to this layer’s `fillTranslation` property. - - This property corresponds to the `fill-translate-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition fillTranslationTransition; - -@property (nonatomic, null_resettable) NSExpression *fillTranslate __attribute__((unavailable("Use fillTranslation instead."))); - -/** - Controls the frame of reference for `fillTranslation`. - - The default value of this property is an expression that evaluates to `map`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `fillTranslation` is non-`nil`. - Otherwise, it is ignored. - - This attribute corresponds to the fill-translate-anchor - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `MGLFillTranslationAnchor` values - * Any of the following constant string values: - * `map`: The fill is translated relative to the map. - * `viewport`: The fill is translated relative to the viewport. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *fillTranslationAnchor; - -@property (nonatomic, null_resettable) NSExpression *fillTranslateAnchor __attribute__((unavailable("Use fillTranslationAnchor instead."))); - -@end - -/** - Methods for wrapping an enumeration value for a style layer attribute in an - `MGLFillStyleLayer` object and unwrapping its raw value. - */ -@interface NSValue (MGLFillStyleLayerAdditions) - -#pragma mark Working with Fill Style Layer Attribute Values - -/** - Creates a new value object containing the given `MGLFillTranslationAnchor` enumeration. - - @param fillTranslationAnchor The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLFillTranslationAnchor:(MGLFillTranslationAnchor)fillTranslationAnchor; - -/** - The `MGLFillTranslationAnchor` enumeration representation of the value. - */ -@property (readonly) MGLFillTranslationAnchor MGLFillTranslationAnchorValue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLFillStyleLayer.mm b/platform/darwin/src/MGLFillStyleLayer.mm deleted file mode 100644 index d8c5516f3a6..00000000000 --- a/platform/darwin/src/MGLFillStyleLayer.mm +++ /dev/null @@ -1,330 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLSource.h" -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLStyleLayer_Private.h" -#import "MGLStyleValue_Private.h" -#import "MGLFillStyleLayer.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLFillStyleLayer_Private.h" - -#include -#include - - -namespace mbgl { - - MBGL_DEFINE_ENUM(MGLFillTranslationAnchor, { - { MGLFillTranslationAnchorMap, "map" }, - { MGLFillTranslationAnchorViewport, "viewport" }, - }); - -} - -@interface MGLFillStyleLayer () - -@property (nonatomic, readonly) mbgl::style::FillLayer *rawLayer; - -@end - -@implementation MGLFillStyleLayer - -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source -{ - MGLLogDebug(@"Initializing %@ with identifier: %@ source: %@", NSStringFromClass([self class]), identifier, source); - auto layer = std::make_unique(identifier.UTF8String, source.identifier.UTF8String); - return self = [super initWithPendingLayer:std::move(layer)]; -} - -- (mbgl::style::FillLayer *)rawLayer -{ - return (mbgl::style::FillLayer *)super.rawLayer; -} - -- (NSString *)sourceIdentifier -{ - MGLAssertStyleLayerIsValid(); - - return @(self.rawLayer->getSourceID().c_str()); -} - -- (NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - - auto layerID = self.rawLayer->getSourceLayer(); - return layerID.empty() ? nil : @(layerID.c_str()); -} - -- (void)setSourceLayerIdentifier:(NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting sourceLayerIdentifier: %@", sourceLayerIdentifier); - - self.rawLayer->setSourceLayer(sourceLayerIdentifier.UTF8String ?: ""); -} - -- (void)setPredicate:(NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting predicate: %@", predicate); - - self.rawLayer->setFilter(predicate ? predicate.mgl_filter : mbgl::style::Filter()); -} - -- (NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - - return [NSPredicate mgl_predicateWithFilter:self.rawLayer->getFilter()]; -} - -#pragma mark - Accessing the Paint Attributes - -- (void)setFillAntialiased:(NSExpression *)fillAntialiased { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillAntialiased: %@", fillAntialiased); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillAntialiased, false); - self.rawLayer->setFillAntialias(mbglValue); -} - -- (NSExpression *)isFillAntialiased { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillAntialias(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillAntialias(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillAntialias:(NSExpression *)fillAntialias { -} - -- (NSExpression *)fillAntialias { - return self.isFillAntialiased; -} - -- (void)setFillColor:(NSExpression *)fillColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillColor: %@", fillColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillColor, true); - self.rawLayer->setFillColor(mbglValue); -} - -- (NSExpression *)fillColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setFillColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)fillColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setFillOpacity:(NSExpression *)fillOpacity { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillOpacity: %@", fillOpacity); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillOpacity, true); - self.rawLayer->setFillOpacity(mbglValue); -} - -- (NSExpression *)fillOpacity { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillOpacity(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillOpacity(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillOpacityTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillOpacityTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setFillOpacityTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)fillOpacityTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillOpacityTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setFillOutlineColor:(NSExpression *)fillOutlineColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillOutlineColor: %@", fillOutlineColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillOutlineColor, true); - self.rawLayer->setFillOutlineColor(mbglValue); -} - -- (NSExpression *)fillOutlineColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillOutlineColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillOutlineColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillOutlineColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillOutlineColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setFillOutlineColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)fillOutlineColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillOutlineColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setFillPattern:(NSExpression *)fillPattern { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillPattern: %@", fillPattern); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillPattern, true); - self.rawLayer->setFillPattern(mbglValue); -} - -- (NSExpression *)fillPattern { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillPattern(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillPattern(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillPatternTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillPatternTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setFillPatternTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)fillPatternTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillPatternTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setFillTranslation:(NSExpression *)fillTranslation { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillTranslation: %@", fillTranslation); - - auto mbglValue = MGLStyleValueTransformer, NSValue *>().toPropertyValue>>(fillTranslation, false); - self.rawLayer->setFillTranslate(mbglValue); -} - -- (NSExpression *)fillTranslation { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillTranslate(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillTranslate(); - } - return MGLStyleValueTransformer, NSValue *>().toExpression(propertyValue); -} - -- (void)setFillTranslationTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillTranslationTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setFillTranslateTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)fillTranslationTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillTranslateTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setFillTranslate:(NSExpression *)fillTranslate { -} - -- (NSExpression *)fillTranslate { - return self.fillTranslation; -} - -- (void)setFillTranslationAnchor:(NSExpression *)fillTranslationAnchor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting fillTranslationAnchor: %@", fillTranslationAnchor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(fillTranslationAnchor, false); - self.rawLayer->setFillTranslateAnchor(mbglValue); -} - -- (NSExpression *)fillTranslationAnchor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getFillTranslateAnchor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultFillTranslateAnchor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setFillTranslateAnchor:(NSExpression *)fillTranslateAnchor { -} - -- (NSExpression *)fillTranslateAnchor { - return self.fillTranslationAnchor; -} - -@end - -@implementation NSValue (MGLFillStyleLayerAdditions) - -+ (NSValue *)valueWithMGLFillTranslationAnchor:(MGLFillTranslationAnchor)fillTranslationAnchor { - return [NSValue value:&fillTranslationAnchor withObjCType:@encode(MGLFillTranslationAnchor)]; -} - -- (MGLFillTranslationAnchor)MGLFillTranslationAnchorValue { - MGLFillTranslationAnchor fillTranslationAnchor; - [self getValue:&fillTranslationAnchor]; - return fillTranslationAnchor; -} - -@end - -namespace mbgl { - -MGLStyleLayer* FillStyleLayerPeerFactory::createPeer(style::Layer* rawLayer) { - return [[MGLFillStyleLayer alloc] initWithRawLayer:rawLayer]; -} - -} // namespace mbgl diff --git a/platform/darwin/src/MGLFillStyleLayer_Private.h b/platform/darwin/src/MGLFillStyleLayer_Private.h deleted file mode 100644 index 01f8b16f328..00000000000 --- a/platform/darwin/src/MGLFillStyleLayer_Private.h +++ /dev/null @@ -1,17 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -#pragma once - -#include "MGLStyleLayer_Private.h" - -#include - -namespace mbgl { - -class FillStyleLayerPeerFactory : public LayerPeerFactory, public mbgl::FillLayerFactory { - // LayerPeerFactory overrides. - LayerFactory* getCoreLayerFactory() final { return this; } - virtual MGLStyleLayer* createPeer(style::Layer*) final; -}; - -} // namespace mbgl diff --git a/platform/darwin/src/MGLForegroundStyleLayer.h b/platform/darwin/src/MGLForegroundStyleLayer.h deleted file mode 100644 index 7e05023ef1f..00000000000 --- a/platform/darwin/src/MGLForegroundStyleLayer.h +++ /dev/null @@ -1,36 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLStyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MGLSource; - -/** - `MGLForegroundStyleLayer` is an abstract superclass for style layers whose - content is defined by an `MGLSource` object. - - Create instances of `MGLRasterStyleLayer`, `MGLHillshadeStyleLayer`, and the - concrete subclasses of `MGLVectorStyleLayer` in order to use - `MGLForegroundStyleLayer`'s methods. Do not create instances of - `MGLForegroundStyleLayer` directly, and do not create your own subclasses of - this class. - */ -MGL_EXPORT -@interface MGLForegroundStyleLayer : MGLStyleLayer - -#pragma mark Initializing a Style Layer - -- (instancetype)init __attribute__((unavailable("Use -init methods of concrete subclasses instead."))); - -#pragma mark Specifying a Style Layer’s Content - -/** - Identifier of the source from which the receiver obtains the data to style. - */ -@property (nonatomic, readonly, nullable) NSString *sourceIdentifier; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLForegroundStyleLayer.mm b/platform/darwin/src/MGLForegroundStyleLayer.mm deleted file mode 100644 index eaa5e83e591..00000000000 --- a/platform/darwin/src/MGLForegroundStyleLayer.mm +++ /dev/null @@ -1,26 +0,0 @@ -#import "MGLForegroundStyleLayer.h" -#import "MGLStyleLayer_Private.h" - -@implementation MGLForegroundStyleLayer - -- (NSString *)sourceIdentifier { - [NSException raise:MGLAbstractClassException - format:@"MGLForegroundStyleLayer is an abstract class"]; - return nil; -} - -- (NSString *)description { - if (self.rawLayer) { - return [NSString stringWithFormat: - @"<%@: %p; identifier = %@; sourceIdentifier = %@; visible = %@>", - NSStringFromClass([self class]), (void *)self, self.identifier, - self.sourceIdentifier, self.visible ? @"YES" : @"NO"]; - } - else { - return [NSString stringWithFormat: - @"<%@: %p; identifier = %@; sourceIdentifier = ; visible = NO>", - NSStringFromClass([self class]), (void *)self, self.identifier]; - } -} - -@end diff --git a/platform/darwin/src/MGLFoundation.h b/platform/darwin/src/MGLFoundation.h deleted file mode 100644 index 3400c63979f..00000000000 --- a/platform/darwin/src/MGLFoundation.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#import - -#define MGL_EXPORT __attribute__((visibility ("default"))) diff --git a/platform/darwin/src/MGLFoundation.mm b/platform/darwin/src/MGLFoundation.mm deleted file mode 100644 index 5cda1dced38..00000000000 --- a/platform/darwin/src/MGLFoundation.mm +++ /dev/null @@ -1,6 +0,0 @@ -#import "MGLFoundation_Private.h" - -/// Initializes the run loop shim that lives on the main thread. -void MGLInitializeRunLoop() { - static mbgl::util::RunLoop runLoop; -} diff --git a/platform/darwin/src/MGLFoundation_Private.h b/platform/darwin/src/MGLFoundation_Private.h deleted file mode 100644 index db81bde3dee..00000000000 --- a/platform/darwin/src/MGLFoundation_Private.h +++ /dev/null @@ -1,19 +0,0 @@ -#import "MGLFoundation.h" - -#include - -void MGLInitializeRunLoop(); - -/* Using a compound statement (GNU Extension, supported by clang) */ -#define MGL_OBJC_DYNAMIC_CAST(object, type) \ - ({ \ - __typeof__( object ) temp##__LINE__ = (object); \ - (type *)([temp##__LINE__ isKindOfClass:[type class]] ? temp##__LINE__ : nil); \ - }) - -#define MGL_OBJC_DYNAMIC_CAST_AS_PROTOCOL(object, proto) \ - ({ \ - __typeof__( object ) temp##__LINE__ = (object); \ - (id< proto >)([temp##__LINE__ conformsToProtocol:@protocol( proto )] ? temp##__LINE__ : nil); \ - }) - diff --git a/platform/darwin/src/MGLGeometry.h b/platform/darwin/src/MGLGeometry.h deleted file mode 100644 index 397cf2a1125..00000000000 --- a/platform/darwin/src/MGLGeometry.h +++ /dev/null @@ -1,243 +0,0 @@ -#import -#import -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** Defines the area spanned by an `MGLCoordinateBounds`. */ -typedef struct __attribute__((objc_boxable)) MGLCoordinateSpan { - /** Latitudes spanned by an `MGLCoordinateBounds`. */ - CLLocationDegrees latitudeDelta; - /** Longitudes spanned by an `MGLCoordinateBounds`. */ - CLLocationDegrees longitudeDelta; -} MGLCoordinateSpan; - -/* Defines a point on the map in Mercator projection for a specific zoom level. */ -typedef struct __attribute__((objc_boxable)) MGLMapPoint { - /** X coordinate representing a longitude in Mercator projection. */ - CGFloat x; - /** Y coordinate representing a latitide in Mercator projection. */ - CGFloat y; - /** Zoom level at which the X and Y coordinates are valid. */ - CGFloat zoomLevel; -} MGLMapPoint; - -/* Defines a 4x4 matrix. */ -typedef struct MGLMatrix4 { - double m00, m01, m02, m03; - double m10, m11, m12, m13; - double m20, m21, m22, m23; - double m30, m31, m32, m33; -} MGLMatrix4; - -/** - Creates a new `MGLCoordinateSpan` from the given latitudinal and longitudinal - deltas. - */ -NS_INLINE MGLCoordinateSpan MGLCoordinateSpanMake(CLLocationDegrees latitudeDelta, CLLocationDegrees longitudeDelta) { - MGLCoordinateSpan span; - span.latitudeDelta = latitudeDelta; - span.longitudeDelta = longitudeDelta; - return span; -} - -/** - Creates a new `MGLMapPoint` from the given X and Y coordinates, and zoom level. - */ -NS_INLINE MGLMapPoint MGLMapPointMake(CGFloat x, CGFloat y, CGFloat zoomLevel) { - MGLMapPoint point; - point.x = x; - point.y = y; - point.zoomLevel = zoomLevel; - return point; -} - -/** - Returns `YES` if the two coordinate spans represent the same latitudinal change - and the same longitudinal change. - */ -NS_INLINE BOOL MGLCoordinateSpanEqualToCoordinateSpan(MGLCoordinateSpan span1, MGLCoordinateSpan span2) { - return (span1.latitudeDelta == span2.latitudeDelta && - span1.longitudeDelta == span2.longitudeDelta); -} - -/** An area of zero width and zero height. */ -FOUNDATION_EXTERN MGL_EXPORT const MGLCoordinateSpan MGLCoordinateSpanZero; - -/** A rectangular area as measured on a two-dimensional map projection. */ -typedef struct __attribute__((objc_boxable)) MGLCoordinateBounds { - /** Coordinate at the southwest corner. */ - CLLocationCoordinate2D sw; - /** Coordinate at the northeast corner. */ - CLLocationCoordinate2D ne; -} MGLCoordinateBounds; - -/** - A quadrilateral area as measured on a two-dimensional map projection. - `MGLCoordinateQuad` differs from `MGLCoordinateBounds` in that it allows - representation of non-axis aligned bounds and non-rectangular quadrilaterals. - The coordinates are described in counter clockwise order from top left. - */ -typedef struct MGLCoordinateQuad { - /** Coordinate at the top left corner. */ - CLLocationCoordinate2D topLeft; - /** Coordinate at the bottom left corner. */ - CLLocationCoordinate2D bottomLeft; - /** Coordinate at the bottom right corner. */ - CLLocationCoordinate2D bottomRight; - /** Coordinate at the top right corner. */ - CLLocationCoordinate2D topRight; -} MGLCoordinateQuad; - - -/** - Creates a new `MGLCoordinateBounds` structure from the given southwest and - northeast coordinates. - */ -NS_INLINE MGLCoordinateBounds MGLCoordinateBoundsMake(CLLocationCoordinate2D sw, CLLocationCoordinate2D ne) { - MGLCoordinateBounds bounds; - bounds.sw = sw; - bounds.ne = ne; - return bounds; -} - -/** - Creates a new `MGLCoordinateQuad` structure from the given top left, - bottom left, bottom right, and top right coordinates. - */ -NS_INLINE MGLCoordinateQuad MGLCoordinateQuadMake(CLLocationCoordinate2D topLeft, CLLocationCoordinate2D bottomLeft, CLLocationCoordinate2D bottomRight, CLLocationCoordinate2D topRight) { - MGLCoordinateQuad quad; - quad.topLeft = topLeft; - quad.bottomLeft = bottomLeft; - quad.bottomRight = bottomRight; - quad.topRight = topRight; - return quad; -} - -/** - Creates a new `MGLCoordinateQuad` structure from the given `MGLCoordinateBounds`. - The returned quad uses the bounds' northeast coordinate as the top right, and the - southwest coordinate at the bottom left. - */ -NS_INLINE MGLCoordinateQuad MGLCoordinateQuadFromCoordinateBounds(MGLCoordinateBounds bounds) { - MGLCoordinateQuad quad; - quad.topLeft = CLLocationCoordinate2DMake(bounds.ne.latitude, bounds.sw.longitude); - quad.bottomLeft = bounds.sw; - quad.bottomRight = CLLocationCoordinate2DMake(bounds.sw.latitude, bounds.ne.longitude); - quad.topRight = bounds.ne; - return quad; -} - -/** Returns `YES` if the two coordinate bounds are equal to each other. */ -NS_INLINE BOOL MGLCoordinateBoundsEqualToCoordinateBounds(MGLCoordinateBounds bounds1, MGLCoordinateBounds bounds2) { - return (bounds1.sw.latitude == bounds2.sw.latitude && - bounds1.sw.longitude == bounds2.sw.longitude && - bounds1.ne.latitude == bounds2.ne.latitude && - bounds1.ne.longitude == bounds2.ne.longitude); -} - -/** Returns `YES` if the two coordinate bounds intersect. */ -NS_INLINE BOOL MGLCoordinateBoundsIntersectsCoordinateBounds(MGLCoordinateBounds bounds1, MGLCoordinateBounds bounds2) { - return (bounds1.ne.latitude > bounds2.sw.latitude && - bounds1.sw.latitude < bounds2.ne.latitude && - bounds1.ne.longitude > bounds2.sw.longitude && - bounds1.sw.longitude < bounds2.ne.longitude); -} - -/** - Returns `YES` if the coordinate is within the coordinate bounds. - - #### Related examples - See the - Restrict map panning to an area example to learn how to use - `MGLCoordinateInCoordinateBounds` to determine if a point is within, or - intersects, a given bounding box. - */ -NS_INLINE BOOL MGLCoordinateInCoordinateBounds(CLLocationCoordinate2D coordinate, MGLCoordinateBounds bounds) { - return (coordinate.latitude >= bounds.sw.latitude && - coordinate.latitude <= bounds.ne.latitude && - coordinate.longitude >= bounds.sw.longitude && - coordinate.longitude <= bounds.ne.longitude); -} - -/** Returns the area spanned by the coordinate bounds. */ -NS_INLINE MGLCoordinateSpan MGLCoordinateBoundsGetCoordinateSpan(MGLCoordinateBounds bounds) { - return MGLCoordinateSpanMake(bounds.ne.latitude - bounds.sw.latitude, - bounds.ne.longitude - bounds.sw.longitude); -} - -/** - Returns a coordinate bounds with southwest and northeast coordinates that are - offset from those of the source bounds. - */ -NS_INLINE MGLCoordinateBounds MGLCoordinateBoundsOffset(MGLCoordinateBounds bounds, MGLCoordinateSpan offset) { - MGLCoordinateBounds offsetBounds = bounds; - offsetBounds.sw.latitude += offset.latitudeDelta; - offsetBounds.sw.longitude += offset.longitudeDelta; - offsetBounds.ne.latitude += offset.latitudeDelta; - offsetBounds.ne.longitude += offset.longitudeDelta; - return offsetBounds; -} - -/** - Returns `YES` if the coordinate bounds covers no area. - - @note A bounds may be empty but have a non-zero coordinate span (e.g., when its - northeast point lies due north of its southwest point). - */ -NS_INLINE BOOL MGLCoordinateBoundsIsEmpty(MGLCoordinateBounds bounds) { - MGLCoordinateSpan span = MGLCoordinateBoundsGetCoordinateSpan(bounds); - return span.latitudeDelta == 0 || span.longitudeDelta == 0; -} - -/** Returns a formatted string for the given coordinate bounds. */ -NS_INLINE NSString *MGLStringFromCoordinateBounds(MGLCoordinateBounds bounds) { - return [NSString stringWithFormat:@"{ sw = {%.1f, %.1f}, ne = {%.1f, %.1f}}", - bounds.sw.latitude, bounds.sw.longitude, - bounds.ne.latitude, bounds.ne.longitude]; -} - -/** Returns a formatted string for the given coordinate quad. */ -NS_INLINE NSString *MGLStringFromCoordinateQuad(MGLCoordinateQuad quad) { - return [NSString stringWithFormat:@"{ topleft = {%.1f, %.1f}, bottomleft = {%.1f, %.1f}}, bottomright = {%.1f, %.1f}, topright = {%.1f, %.1f}", - quad.topLeft.latitude, quad.topLeft.longitude, - quad.bottomLeft.latitude, quad.bottomLeft.longitude, - quad.bottomRight.latitude, quad.bottomRight.longitude, - quad.topRight.latitude, quad.topRight.longitude]; -} - -/** Returns radians, converted from degrees. */ -NS_INLINE CGFloat MGLRadiansFromDegrees(CLLocationDegrees degrees) { - return (CGFloat)(degrees * M_PI) / 180; -} - -/** Returns degrees, converted from radians. */ -NS_INLINE CLLocationDegrees MGLDegreesFromRadians(CGFloat radians) { - return radians * 180 / M_PI; -} - -/** Returns Mercator projection of a WGS84 coordinate at the specified zoom level. */ -FOUNDATION_EXTERN MGL_EXPORT MGLMapPoint MGLMapPointForCoordinate(CLLocationCoordinate2D coordinate, double zoomLevel); - - -/** Converts a map zoom level to a camera altitude. - - @param zoomLevel The zoom level to convert. - @param pitch The camera pitch, measured in degrees. - @param latitude The latitude of the point at the center of the viewport. - @param size The size of the viewport. - @return An altitude measured in meters. */ -FOUNDATION_EXTERN MGL_EXPORT CLLocationDistance MGLAltitudeForZoomLevel(double zoomLevel, CGFloat pitch, CLLocationDegrees latitude, CGSize size); - -/** Converts a camera altitude to a map zoom level. - - @param altitude The altitude to convert, measured in meters. - @param pitch The camera pitch, measured in degrees. - @param latitude The latitude of the point at the center of the viewport. - @param size The size of the viewport. - @return A zero-based zoom level. */ -FOUNDATION_EXTERN MGL_EXPORT double MGLZoomLevelForAltitude(CLLocationDistance altitude, CGFloat pitch, CLLocationDegrees latitude, CGSize size); - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLGeometry.mm b/platform/darwin/src/MGLGeometry.mm deleted file mode 100644 index c6fb5a5fc2e..00000000000 --- a/platform/darwin/src/MGLGeometry.mm +++ /dev/null @@ -1,122 +0,0 @@ -#import "MGLGeometry_Private.h" - -#import "MGLFoundation.h" - -#import - -#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR -#import -#endif - -/** Vertical field of view, measured in degrees, for determining the altitude - of the viewpoint. - - TransformState::getProjMatrix() has a variable vertical field of view that - defaults to 2 arctan ⅓ rad ≈ 36.9° but MapKit uses a vertical field of view of 30°. - flyTo() assumes a field of view of 2 arctan ½ rad. */ -const CLLocationDegrees MGLAngularFieldOfView = 30; - -const MGLCoordinateSpan MGLCoordinateSpanZero = {0, 0}; - -CGRect MGLExtendRect(CGRect rect, CGPoint point) { - if (point.x < rect.origin.x) { - rect.size.width += rect.origin.x - point.x; - rect.origin.x = point.x; - } - if (point.x > rect.origin.x + rect.size.width) { - rect.size.width += point.x - (rect.origin.x + rect.size.width); - } - if (point.y < rect.origin.y) { - rect.size.height += rect.origin.y - point.y; - rect.origin.y = point.y; - } - if (point.y > rect.origin.y + rect.size.height) { - rect.size.height += point.y - (rect.origin.y + rect.size.height); - } - return rect; -} - -mbgl::LatLng MGLLatLngFromLocationCoordinate2D(CLLocationCoordinate2D coordinate) { - try { - return mbgl::LatLng(coordinate.latitude, coordinate.longitude); - } catch (std::domain_error &error) { - [NSException raise:NSInvalidArgumentException format:@"%s", error.what()]; - return {}; - } -} - -CLLocationDistance MGLAltitudeForZoomLevel(double zoomLevel, CGFloat pitch, CLLocationDegrees latitude, CGSize size) { - CLLocationDistance metersPerPixel = mbgl::Projection::getMetersPerPixelAtLatitude(latitude, zoomLevel); - CLLocationDistance metersTall = metersPerPixel * size.height; - CLLocationDistance altitude = metersTall / 2 / std::tan(MGLRadiansFromDegrees(MGLAngularFieldOfView) / 2.); - return altitude * std::sin(M_PI_2 - MGLRadiansFromDegrees(pitch)) / std::sin(M_PI_2); -} - -double MGLZoomLevelForAltitude(CLLocationDistance altitude, CGFloat pitch, CLLocationDegrees latitude, CGSize size) { - CLLocationDistance eyeAltitude = altitude / std::sin(M_PI_2 - MGLRadiansFromDegrees(pitch)) * std::sin(M_PI_2); - CLLocationDistance metersTall = eyeAltitude * 2 * std::tan(MGLRadiansFromDegrees(MGLAngularFieldOfView) / 2.); - CLLocationDistance metersPerPixel = metersTall / size.height; - CGFloat mapPixelWidthAtZoom = std::cos(MGLRadiansFromDegrees(latitude)) * mbgl::util::M2PI * mbgl::util::EARTH_RADIUS_M / metersPerPixel; - return ::log2(mapPixelWidthAtZoom / mbgl::util::tileSize); -} - -MGLRadianDistance MGLDistanceBetweenRadianCoordinates(MGLRadianCoordinate2D from, MGLRadianCoordinate2D to) { - double a = pow(sin((to.latitude - from.latitude) / 2), 2) - + pow(sin((to.longitude - from.longitude) / 2), 2) * cos(from.latitude) * cos(to.latitude); - - return 2 * atan2(sqrt(a), sqrt(1 - a)); -} - -MGLRadianDirection MGLRadianCoordinatesDirection(MGLRadianCoordinate2D from, MGLRadianCoordinate2D to) { - double a = sin(to.longitude - from.longitude) * cos(to.latitude); - double b = cos(from.latitude) * sin(to.latitude) - - sin(from.latitude) * cos(to.latitude) * cos(to.longitude - from.longitude); - return atan2(a, b); -} - -MGLRadianCoordinate2D MGLRadianCoordinateAtDistanceFacingDirection(MGLRadianCoordinate2D coordinate, - MGLRadianDistance distance, - MGLRadianDirection direction) { - double otherLatitude = asin(sin(coordinate.latitude) * cos(distance) - + cos(coordinate.latitude) * sin(distance) * cos(direction)); - double otherLongitude = coordinate.longitude + atan2(sin(direction) * sin(distance) * cos(coordinate.latitude), - cos(distance) - sin(coordinate.latitude) * sin(otherLatitude)); - return MGLRadianCoordinate2DMake(otherLatitude, otherLongitude); -} - -CLLocationDirection MGLDirectionBetweenCoordinates(CLLocationCoordinate2D firstCoordinate, CLLocationCoordinate2D secondCoordinate) { - // Ported from https://github.com/mapbox/turf-swift/blob/857e2e8060678ef4a7a9169d4971b0788fdffc37/Turf/Turf.swift#L23-L31 - MGLRadianCoordinate2D firstRadianCoordinate = MGLRadianCoordinateFromLocationCoordinate(firstCoordinate); - MGLRadianCoordinate2D secondRadianCoordinate = MGLRadianCoordinateFromLocationCoordinate(secondCoordinate); - - CGFloat a = sin(secondRadianCoordinate.longitude - firstRadianCoordinate.longitude) * cos(secondRadianCoordinate.latitude); - CGFloat b = (cos(firstRadianCoordinate.latitude) * sin(secondRadianCoordinate.latitude) - - sin(firstRadianCoordinate.latitude) * cos(secondRadianCoordinate.latitude) * cos(secondRadianCoordinate.longitude - firstRadianCoordinate.longitude)); - MGLRadianDirection radianDirection = atan2(a, b); - return radianDirection * 180 / M_PI; -} - -CGPoint MGLPointRounded(CGPoint point) { -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - CGFloat scaleFactor = [UIScreen mainScreen].nativeScale; -#elif TARGET_OS_MAC - CGFloat scaleFactor = [NSScreen mainScreen].backingScaleFactor; -#endif - return CGPointMake(round(point.x * scaleFactor) / scaleFactor, round(point.y * scaleFactor) / scaleFactor); -} - -MGLMapPoint MGLMapPointForCoordinate(CLLocationCoordinate2D coordinate, double zoomLevel) { - mbgl::Point projectedCoordinate = mbgl::Projection::project(MGLLatLngFromLocationCoordinate2D(coordinate), std::pow(2.0, zoomLevel)); - return MGLMapPointMake(projectedCoordinate.x, projectedCoordinate.y, zoomLevel); -} - -MGLMatrix4 MGLMatrix4Make(std::array array) { - MGLMatrix4 mat4 = { - .m00 = array[0], .m01 = array[1], .m02 = array[2], .m03 = array[3], - .m10 = array[4], .m11 = array[5], .m12 = array[6], .m13 = array[7], - .m20 = array[8], .m21 = array[9], .m22 = array[10], .m23 = array[11], - .m30 = array[12], .m31 = array[13], .m32 = array[14], .m33 = array[15] - }; - return mat4; -} - diff --git a/platform/darwin/src/MGLGeometry_Private.h b/platform/darwin/src/MGLGeometry_Private.h deleted file mode 100644 index a89a382c5e5..00000000000 --- a/platform/darwin/src/MGLGeometry_Private.h +++ /dev/null @@ -1,152 +0,0 @@ -#import "MGLGeometry.h" - -#import -#if TARGET_OS_IPHONE - #import -#endif - -#import -#import - -#import -typedef double MGLLocationRadians; -typedef double MGLRadianDistance; -typedef double MGLRadianDirection; - -/** Defines the coordinate by a `MGLRadianCoordinate2D`. */ -typedef struct MGLRadianCoordinate2D { - MGLLocationRadians latitude; - MGLLocationRadians longitude; -} MGLRadianCoordinate2D; - -/** - Creates a new `MGLRadianCoordinate2D` from the given latitudinal and longitudinal. - */ -NS_INLINE MGLRadianCoordinate2D MGLRadianCoordinate2DMake(MGLLocationRadians latitude, MGLLocationRadians longitude) { - MGLRadianCoordinate2D radianCoordinate; - radianCoordinate.latitude = latitude; - radianCoordinate.longitude = longitude; - return radianCoordinate; -} - -/// Returns the smallest rectangle that contains both the given rectangle and -/// the given point. -CGRect MGLExtendRect(CGRect rect, CGPoint point); - -#if TARGET_OS_IPHONE -NS_INLINE NSString *MGLStringFromSize(CGSize size) { - return NSStringFromCGSize(size); -} -#else -NS_INLINE NSString *MGLStringFromSize(NSSize size) { - return NSStringFromSize(size); -} -#endif - -NS_INLINE NSString *MGLStringFromCLLocationCoordinate2D(CLLocationCoordinate2D coordinate) { - return [NSString stringWithFormat:@"(lat: %f, lon: %f)", coordinate.latitude, coordinate.longitude]; -} - -mbgl::LatLng MGLLatLngFromLocationCoordinate2D(CLLocationCoordinate2D coordinate); - -NS_INLINE mbgl::Point MGLPointFromLocationCoordinate2D(CLLocationCoordinate2D coordinate) { - return mbgl::Point(coordinate.longitude, coordinate.latitude); -} - -NS_INLINE CLLocationCoordinate2D MGLLocationCoordinate2DFromPoint(mbgl::Point point) { - return CLLocationCoordinate2DMake(point.y, point.x); -} - -NS_INLINE CLLocationCoordinate2D MGLLocationCoordinate2DFromLatLng(mbgl::LatLng latLng) { - return CLLocationCoordinate2DMake(latLng.latitude(), latLng.longitude()); -} - -NS_INLINE MGLCoordinateBounds MGLCoordinateBoundsFromLatLngBounds(mbgl::LatLngBounds latLngBounds) { - return MGLCoordinateBoundsMake(MGLLocationCoordinate2DFromLatLng(latLngBounds.southwest()), - MGLLocationCoordinate2DFromLatLng(latLngBounds.northeast())); -} - -NS_INLINE mbgl::LatLngBounds MGLLatLngBoundsFromCoordinateBounds(MGLCoordinateBounds coordinateBounds) { - return mbgl::LatLngBounds::hull(MGLLatLngFromLocationCoordinate2D(coordinateBounds.sw), - MGLLatLngFromLocationCoordinate2D(coordinateBounds.ne)); -} - -NS_INLINE std::array MGLLatLngArrayFromCoordinateQuad(MGLCoordinateQuad quad) { - return { MGLLatLngFromLocationCoordinate2D(quad.topLeft), - MGLLatLngFromLocationCoordinate2D(quad.topRight), - MGLLatLngFromLocationCoordinate2D(quad.bottomRight), - MGLLatLngFromLocationCoordinate2D(quad.bottomLeft) }; -} - -NS_INLINE MGLCoordinateQuad MGLCoordinateQuadFromLatLngArray(std::array quad) { - return { MGLLocationCoordinate2DFromLatLng(quad[0]), - MGLLocationCoordinate2DFromLatLng(quad[3]), - MGLLocationCoordinate2DFromLatLng(quad[2]), - MGLLocationCoordinate2DFromLatLng(quad[1]) }; -} - -/** - YES if the coordinate is valid or NO if it is not. - Considers extended coordinates. - */ -NS_INLINE BOOL MGLLocationCoordinate2DIsValid(CLLocationCoordinate2D coordinate) { - return (coordinate.latitude <= 90.0 && - coordinate.latitude >= -90.0 && - coordinate.longitude <= 360.0 && - coordinate.longitude >= -360.0); -} - -#if TARGET_OS_IPHONE - #define MGLEdgeInsets UIEdgeInsets - #define MGLEdgeInsetsMake UIEdgeInsetsMake -#else - #define MGLEdgeInsets NSEdgeInsets - #define MGLEdgeInsetsMake NSEdgeInsetsMake -#endif - -NS_INLINE mbgl::EdgeInsets MGLEdgeInsetsFromNSEdgeInsets(MGLEdgeInsets insets) { - return { insets.top, insets.left, insets.bottom, insets.right }; -} - -/// Returns the combination of two edge insets. -NS_INLINE MGLEdgeInsets MGLEdgeInsetsInsetEdgeInset(MGLEdgeInsets base, MGLEdgeInsets inset) { - return MGLEdgeInsetsMake(base.top + inset.top, - base.left + inset.left, - base.bottom + inset.bottom, - base.right + inset.right); -} - -/** Returns MGLRadianCoordinate2D, converted from CLLocationCoordinate2D. */ -NS_INLINE MGLRadianCoordinate2D MGLRadianCoordinateFromLocationCoordinate(CLLocationCoordinate2D locationCoordinate) { - return MGLRadianCoordinate2DMake(MGLRadiansFromDegrees(locationCoordinate.latitude), - MGLRadiansFromDegrees(locationCoordinate.longitude)); -} - -/** - Returns the distance in radians given two coordinates. - */ -MGLRadianDistance MGLDistanceBetweenRadianCoordinates(MGLRadianCoordinate2D from, MGLRadianCoordinate2D to); - -/** - Returns direction in radians given two coordinates. - */ -MGLRadianDirection MGLRadianCoordinatesDirection(MGLRadianCoordinate2D from, MGLRadianCoordinate2D to); - -/** - Returns a coordinate at a given distance and direction away from coordinate. - */ -MGLRadianCoordinate2D MGLRadianCoordinateAtDistanceFacingDirection(MGLRadianCoordinate2D coordinate, - MGLRadianDistance distance, - MGLRadianDirection direction); - -/** - Returns the direction from one coordinate to another. - */ -CLLocationDirection MGLDirectionBetweenCoordinates(CLLocationCoordinate2D firstCoordinate, CLLocationCoordinate2D secondCoordinate); - -/** - Returns a point with coordinates rounded to the nearest logical pixel. - */ -CGPoint MGLPointRounded(CGPoint point); - -MGLMatrix4 MGLMatrix4Make(std::array mat); diff --git a/platform/darwin/src/MGLHeatmapStyleLayer.h b/platform/darwin/src/MGLHeatmapStyleLayer.h deleted file mode 100644 index 3c6dfbc2967..00000000000 --- a/platform/darwin/src/MGLHeatmapStyleLayer.h +++ /dev/null @@ -1,220 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLFoundation.h" -#import "MGLVectorStyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - An `MGLHeatmapStyleLayer` is a style layer that renders a heatmap. - - A heatmap visualizes the spatial distribution of a large, dense set of point - data, using color to avoid cluttering the map with individual points at low - zoom levels. The points are weighted by an attribute you specify. Use a heatmap - style layer in conjunction with point or point collection features. These - features can come from vector tiles loaded by an `MGLVectorTileSource` object, - or they can be `MGLPointAnnotation`, `MGLPointFeature`, `MGLPointCollection`, - or `MGLPointCollectionFeature` instances in an `MGLShapeSource` or - `MGLComputedShapeSource` object. - - Consider accompanying a heatmap style layer with an `MGLCircleStyleLayer` or - `MGLSymbolStyleLayer` at high zoom levels. If you are unsure whether the point - data in an `MGLShapeSource` is dense enough to warrant a heatmap, you can - alternatively cluster the source using the `MGLShapeSourceOptionClustered` - option and render the data using an `MGLCircleStyleLayer` or - `MGLSymbolStyleLayer`. - - You can access an existing heatmap style layer using the - `-[MGLStyle layerWithIdentifier:]` method if you know its identifier; - otherwise, find it using the `MGLStyle.layers` property. You can also create a - new heatmap style layer and add it to the style using a method such as - `-[MGLStyle addLayer:]`. - - #### Related examples - See the Create a - heatmap layer example to learn how to add this style layer to your map. - - ### Example - - ```swift - let layer = MGLHeatmapStyleLayer(identifier: "earthquake-heat", source: earthquakes) - layer.heatmapWeight = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(magnitude, 'linear', nil, %@)", - [0: 0, - 6: 1]) - layer.heatmapIntensity = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", - [0: 1, - 9: 3]) - mapView.style?.addLayer(layer) - ``` - */ -MGL_EXPORT -@interface MGLHeatmapStyleLayer : MGLVectorStyleLayer - -/** - Returns a heatmap style layer initialized with an identifier and source. - - After initializing and configuring the style layer, add it to a map view’s - style using the `-[MGLStyle addLayer:]` or - `-[MGLStyle insertLayer:belowLayer:]` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param source The source from which to obtain the data to style. If the source - has not yet been added to the current style, the behavior is undefined. - @return An initialized foreground style layer. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source; - -#pragma mark - Accessing the Paint Attributes - -#if TARGET_OS_IPHONE -/** - The color of each screen point based on its density value in a heatmap. This - property is normally set to an interpolation or step expression with the - `$heatmapDensity` value as its input. - - The default value of this property is an expression that evaluates to a rainbow - color scale from blue to red. Set this property to `nil` to reset it to the - default value. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$heatmapDensity` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *heatmapColor; -#else -/** - The color of each screen point based on its density value in a heatmap. This - property is normally set to an interpolation or step expression with the - `$heatmapDensity` value as its input. - - The default value of this property is an expression that evaluates to a rainbow - color scale from blue to red. Set this property to `nil` to reset it to the - default value. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$heatmapDensity` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *heatmapColor; -#endif - -/** - Similar to `heatmapWeight` but controls the intensity of the heatmap globally. - Primarily used for adjusting the heatmap based on zoom level. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *heatmapIntensity; - -/** - The transition affecting any changes to this layer’s `heatmapIntensity` property. - - This property corresponds to the `heatmap-intensity-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition heatmapIntensityTransition; - -/** - The global opacity at which the heatmap layer will be drawn. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *heatmapOpacity; - -/** - The transition affecting any changes to this layer’s `heatmapOpacity` property. - - This property corresponds to the `heatmap-opacity-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition heatmapOpacityTransition; - -/** - Radius of influence of one heatmap point in points. Increasing the value makes - the heatmap smoother, but less detailed. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `30`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 1 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *heatmapRadius; - -/** - The transition affecting any changes to this layer’s `heatmapRadius` property. - - This property corresponds to the `heatmap-radius-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition heatmapRadiusTransition; - -/** - A measure of how much an individual point contributes to the heatmap. A value - of 10 would be equivalent to having 10 points of weight 1 in the same spot. - Especially useful when combined with clustering. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *heatmapWeight; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLHeatmapStyleLayer.mm b/platform/darwin/src/MGLHeatmapStyleLayer.mm deleted file mode 100644 index 41d9597dd74..00000000000 --- a/platform/darwin/src/MGLHeatmapStyleLayer.mm +++ /dev/null @@ -1,220 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLSource.h" -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLStyleLayer_Private.h" -#import "MGLStyleValue_Private.h" -#import "MGLHeatmapStyleLayer.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLHeatmapStyleLayer_Private.h" - -#include -#include - - -@interface MGLHeatmapStyleLayer () - -@property (nonatomic, readonly) mbgl::style::HeatmapLayer *rawLayer; - -@end - -@implementation MGLHeatmapStyleLayer - -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source -{ - MGLLogDebug(@"Initializing %@ with identifier: %@ source: %@", NSStringFromClass([self class]), identifier, source); - auto layer = std::make_unique(identifier.UTF8String, source.identifier.UTF8String); - return self = [super initWithPendingLayer:std::move(layer)]; -} - -- (mbgl::style::HeatmapLayer *)rawLayer -{ - return (mbgl::style::HeatmapLayer *)super.rawLayer; -} - -- (NSString *)sourceIdentifier -{ - MGLAssertStyleLayerIsValid(); - - return @(self.rawLayer->getSourceID().c_str()); -} - -- (NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - - auto layerID = self.rawLayer->getSourceLayer(); - return layerID.empty() ? nil : @(layerID.c_str()); -} - -- (void)setSourceLayerIdentifier:(NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting sourceLayerIdentifier: %@", sourceLayerIdentifier); - - self.rawLayer->setSourceLayer(sourceLayerIdentifier.UTF8String ?: ""); -} - -- (void)setPredicate:(NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting predicate: %@", predicate); - - self.rawLayer->setFilter(predicate ? predicate.mgl_filter : mbgl::style::Filter()); -} - -- (NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - - return [NSPredicate mgl_predicateWithFilter:self.rawLayer->getFilter()]; -} - -#pragma mark - Accessing the Paint Attributes - -- (void)setHeatmapColor:(NSExpression *)heatmapColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting heatmapColor: %@", heatmapColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue(heatmapColor); - self.rawLayer->setHeatmapColor(mbglValue); -} - -- (NSExpression *)heatmapColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getHeatmapColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultHeatmapColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setHeatmapIntensity:(NSExpression *)heatmapIntensity { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting heatmapIntensity: %@", heatmapIntensity); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(heatmapIntensity, false); - self.rawLayer->setHeatmapIntensity(mbglValue); -} - -- (NSExpression *)heatmapIntensity { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getHeatmapIntensity(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultHeatmapIntensity(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setHeatmapIntensityTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting heatmapIntensityTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setHeatmapIntensityTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)heatmapIntensityTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getHeatmapIntensityTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setHeatmapOpacity:(NSExpression *)heatmapOpacity { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting heatmapOpacity: %@", heatmapOpacity); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(heatmapOpacity, false); - self.rawLayer->setHeatmapOpacity(mbglValue); -} - -- (NSExpression *)heatmapOpacity { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getHeatmapOpacity(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultHeatmapOpacity(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setHeatmapOpacityTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting heatmapOpacityTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setHeatmapOpacityTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)heatmapOpacityTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getHeatmapOpacityTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setHeatmapRadius:(NSExpression *)heatmapRadius { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting heatmapRadius: %@", heatmapRadius); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(heatmapRadius, true); - self.rawLayer->setHeatmapRadius(mbglValue); -} - -- (NSExpression *)heatmapRadius { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getHeatmapRadius(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultHeatmapRadius(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setHeatmapRadiusTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting heatmapRadiusTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setHeatmapRadiusTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)heatmapRadiusTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getHeatmapRadiusTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setHeatmapWeight:(NSExpression *)heatmapWeight { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting heatmapWeight: %@", heatmapWeight); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(heatmapWeight, true); - self.rawLayer->setHeatmapWeight(mbglValue); -} - -- (NSExpression *)heatmapWeight { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getHeatmapWeight(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultHeatmapWeight(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -@end - -namespace mbgl { - -MGLStyleLayer* HeatmapStyleLayerPeerFactory::createPeer(style::Layer* rawLayer) { - return [[MGLHeatmapStyleLayer alloc] initWithRawLayer:rawLayer]; -} - -} // namespace mbgl diff --git a/platform/darwin/src/MGLHeatmapStyleLayer_Private.h b/platform/darwin/src/MGLHeatmapStyleLayer_Private.h deleted file mode 100644 index 407036cedf4..00000000000 --- a/platform/darwin/src/MGLHeatmapStyleLayer_Private.h +++ /dev/null @@ -1,17 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -#pragma once - -#include "MGLStyleLayer_Private.h" - -#include - -namespace mbgl { - -class HeatmapStyleLayerPeerFactory : public LayerPeerFactory, public mbgl::HeatmapLayerFactory { - // LayerPeerFactory overrides. - LayerFactory* getCoreLayerFactory() final { return this; } - virtual MGLStyleLayer* createPeer(style::Layer*) final; -}; - -} // namespace mbgl diff --git a/platform/darwin/src/MGLHillshadeStyleLayer.h b/platform/darwin/src/MGLHillshadeStyleLayer.h deleted file mode 100644 index 1cf37973217..00000000000 --- a/platform/darwin/src/MGLHillshadeStyleLayer.h +++ /dev/null @@ -1,324 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLFoundation.h" -#import "MGLForegroundStyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Direction of light source when map is rotated. - - Values of this type are used in the `MGLHillshadeStyleLayer.hillshadeIlluminationAnchor` - property. - */ -typedef NS_ENUM(NSUInteger, MGLHillshadeIlluminationAnchor) { - /** - The hillshade illumination is relative to the north direction. - */ - MGLHillshadeIlluminationAnchorMap, - /** - The hillshade illumination is relative to the top of the viewport. - */ - MGLHillshadeIlluminationAnchorViewport, -}; - -/** - An `MGLHillshadeStyleLayer` is a style layer that renders raster digital elevation - model (DEM) tiles on the map. - - Use a hillshade style layer to configure the color parameters of raster tiles - loaded by an `MGLRasterDEMSource` object. For example, you could use a - hillshade style layer to render Mapbox - Terrain-RGB data. - - To display posterized hillshading based on vector shapes, as with the Mapbox Terrain - source, use an `MGLVectorTileSource` object in conjunction with several - `MGLFillStyleLayer` objects. - - You can access an existing hillshade style layer using the - `-[MGLStyle layerWithIdentifier:]` method if you know its identifier; - otherwise, find it using the `MGLStyle.layers` property. You can also create a - new hillshade style layer and add it to the style using a method such as - `-[MGLStyle addLayer:]`. - - ### Example - - ```swift - let layer = MGLHillshadeStyleLayer(identifier: "hills", source: source) - layer.hillshadeExaggeration = NSExpression(forConstantValue: 0.6) - if let canalShadowLayer = mapView.style?.layer(withIdentifier: "waterway-river-canal-shadow") { - mapView.style?.insertLayer(layer, below: canalShadowLayer) - } - ``` - */ -MGL_EXPORT -@interface MGLHillshadeStyleLayer : MGLForegroundStyleLayer - -/** - Returns a hillshade style layer initialized with an identifier and source. - - After initializing and configuring the style layer, add it to a map view’s - style using the `-[MGLStyle addLayer:]` or - `-[MGLStyle insertLayer:belowLayer:]` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param source The source from which to obtain the data to style. If the source - has not yet been added to the current style, the behavior is undefined. - @return An initialized foreground style layer. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source; - -#pragma mark - Accessing the Paint Attributes - -#if TARGET_OS_IPHONE -/** - The shading color used to accentuate rugged terrain like sharp cliffs and - gorges. - - The default value of this property is an expression that evaluates to - `UIColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *hillshadeAccentColor; -#else -/** - The shading color used to accentuate rugged terrain like sharp cliffs and - gorges. - - The default value of this property is an expression that evaluates to - `NSColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *hillshadeAccentColor; -#endif - -/** - The transition affecting any changes to this layer’s `hillshadeAccentColor` property. - - This property corresponds to the `hillshade-accent-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition hillshadeAccentColorTransition; - -/** - Intensity of the hillshade - - The default value of this property is an expression that evaluates to the float - `0.5`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *hillshadeExaggeration; - -/** - The transition affecting any changes to this layer’s `hillshadeExaggeration` property. - - This property corresponds to the `hillshade-exaggeration-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition hillshadeExaggerationTransition; - -#if TARGET_OS_IPHONE -/** - The shading color of areas that faces towards the light source. - - The default value of this property is an expression that evaluates to - `UIColor.whiteColor`. Set this property to `nil` to reset it to the default - value. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *hillshadeHighlightColor; -#else -/** - The shading color of areas that faces towards the light source. - - The default value of this property is an expression that evaluates to - `NSColor.whiteColor`. Set this property to `nil` to reset it to the default - value. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *hillshadeHighlightColor; -#endif - -/** - The transition affecting any changes to this layer’s `hillshadeHighlightColor` property. - - This property corresponds to the `hillshade-highlight-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition hillshadeHighlightColorTransition; - -/** - Direction of light source when map is rotated. - - The default value of this property is an expression that evaluates to - `viewport`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant `MGLHillshadeIlluminationAnchor` values - * Any of the following constant string values: - * `map`: The hillshade illumination is relative to the north direction. - * `viewport`: The hillshade illumination is relative to the top of the - viewport. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *hillshadeIlluminationAnchor; - -/** - The direction of the light source used to generate the hillshading with 0 as - the top of the viewport if `hillshadeIlluminationAnchor` is set to - `MGLHillshadeIlluminationAnchorViewport` and due north if - `hillshadeIlluminationAnchor` is set to `MGLHillshadeIlluminationAnchorMap`. - - The default value of this property is an expression that evaluates to the float - `335`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 359 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *hillshadeIlluminationDirection; - -#if TARGET_OS_IPHONE -/** - The shading color of areas that face away from the light source. - - The default value of this property is an expression that evaluates to - `UIColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *hillshadeShadowColor; -#else -/** - The shading color of areas that face away from the light source. - - The default value of this property is an expression that evaluates to - `NSColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *hillshadeShadowColor; -#endif - -/** - The transition affecting any changes to this layer’s `hillshadeShadowColor` property. - - This property corresponds to the `hillshade-shadow-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition hillshadeShadowColorTransition; - -@end - -/** - Methods for wrapping an enumeration value for a style layer attribute in an - `MGLHillshadeStyleLayer` object and unwrapping its raw value. - */ -@interface NSValue (MGLHillshadeStyleLayerAdditions) - -#pragma mark Working with Hillshade Style Layer Attribute Values - -/** - Creates a new value object containing the given `MGLHillshadeIlluminationAnchor` enumeration. - - @param hillshadeIlluminationAnchor The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLHillshadeIlluminationAnchor:(MGLHillshadeIlluminationAnchor)hillshadeIlluminationAnchor; - -/** - The `MGLHillshadeIlluminationAnchor` enumeration representation of the value. - */ -@property (readonly) MGLHillshadeIlluminationAnchor MGLHillshadeIlluminationAnchorValue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLHillshadeStyleLayer.mm b/platform/darwin/src/MGLHillshadeStyleLayer.mm deleted file mode 100644 index 6bb167d43d7..00000000000 --- a/platform/darwin/src/MGLHillshadeStyleLayer.mm +++ /dev/null @@ -1,245 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLSource.h" -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLStyleLayer_Private.h" -#import "MGLStyleValue_Private.h" -#import "MGLHillshadeStyleLayer.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLHillshadeStyleLayer_Private.h" - -#include -#include - - -namespace mbgl { - - MBGL_DEFINE_ENUM(MGLHillshadeIlluminationAnchor, { - { MGLHillshadeIlluminationAnchorMap, "map" }, - { MGLHillshadeIlluminationAnchorViewport, "viewport" }, - }); - -} - -@interface MGLHillshadeStyleLayer () - -@property (nonatomic, readonly) mbgl::style::HillshadeLayer *rawLayer; - -@end - -@implementation MGLHillshadeStyleLayer - -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source -{ - MGLLogDebug(@"Initializing %@ with identifier: %@ source: %@", NSStringFromClass([self class]), identifier, source); - auto layer = std::make_unique(identifier.UTF8String, source.identifier.UTF8String); - return self = [super initWithPendingLayer:std::move(layer)]; -} - -- (mbgl::style::HillshadeLayer *)rawLayer -{ - return (mbgl::style::HillshadeLayer *)super.rawLayer; -} - -- (NSString *)sourceIdentifier -{ - MGLAssertStyleLayerIsValid(); - - return @(self.rawLayer->getSourceID().c_str()); -} - -#pragma mark - Accessing the Paint Attributes - -- (void)setHillshadeAccentColor:(NSExpression *)hillshadeAccentColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting hillshadeAccentColor: %@", hillshadeAccentColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(hillshadeAccentColor, false); - self.rawLayer->setHillshadeAccentColor(mbglValue); -} - -- (NSExpression *)hillshadeAccentColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getHillshadeAccentColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultHillshadeAccentColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setHillshadeAccentColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting hillshadeAccentColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setHillshadeAccentColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)hillshadeAccentColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getHillshadeAccentColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setHillshadeExaggeration:(NSExpression *)hillshadeExaggeration { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting hillshadeExaggeration: %@", hillshadeExaggeration); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(hillshadeExaggeration, false); - self.rawLayer->setHillshadeExaggeration(mbglValue); -} - -- (NSExpression *)hillshadeExaggeration { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getHillshadeExaggeration(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultHillshadeExaggeration(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setHillshadeExaggerationTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting hillshadeExaggerationTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setHillshadeExaggerationTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)hillshadeExaggerationTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getHillshadeExaggerationTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setHillshadeHighlightColor:(NSExpression *)hillshadeHighlightColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting hillshadeHighlightColor: %@", hillshadeHighlightColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(hillshadeHighlightColor, false); - self.rawLayer->setHillshadeHighlightColor(mbglValue); -} - -- (NSExpression *)hillshadeHighlightColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getHillshadeHighlightColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultHillshadeHighlightColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setHillshadeHighlightColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting hillshadeHighlightColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setHillshadeHighlightColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)hillshadeHighlightColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getHillshadeHighlightColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setHillshadeIlluminationAnchor:(NSExpression *)hillshadeIlluminationAnchor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting hillshadeIlluminationAnchor: %@", hillshadeIlluminationAnchor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(hillshadeIlluminationAnchor, false); - self.rawLayer->setHillshadeIlluminationAnchor(mbglValue); -} - -- (NSExpression *)hillshadeIlluminationAnchor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getHillshadeIlluminationAnchor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultHillshadeIlluminationAnchor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setHillshadeIlluminationDirection:(NSExpression *)hillshadeIlluminationDirection { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting hillshadeIlluminationDirection: %@", hillshadeIlluminationDirection); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(hillshadeIlluminationDirection, false); - self.rawLayer->setHillshadeIlluminationDirection(mbglValue); -} - -- (NSExpression *)hillshadeIlluminationDirection { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getHillshadeIlluminationDirection(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultHillshadeIlluminationDirection(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setHillshadeShadowColor:(NSExpression *)hillshadeShadowColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting hillshadeShadowColor: %@", hillshadeShadowColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(hillshadeShadowColor, false); - self.rawLayer->setHillshadeShadowColor(mbglValue); -} - -- (NSExpression *)hillshadeShadowColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getHillshadeShadowColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultHillshadeShadowColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setHillshadeShadowColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting hillshadeShadowColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setHillshadeShadowColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)hillshadeShadowColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getHillshadeShadowColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -@end - -@implementation NSValue (MGLHillshadeStyleLayerAdditions) - -+ (NSValue *)valueWithMGLHillshadeIlluminationAnchor:(MGLHillshadeIlluminationAnchor)hillshadeIlluminationAnchor { - return [NSValue value:&hillshadeIlluminationAnchor withObjCType:@encode(MGLHillshadeIlluminationAnchor)]; -} - -- (MGLHillshadeIlluminationAnchor)MGLHillshadeIlluminationAnchorValue { - MGLHillshadeIlluminationAnchor hillshadeIlluminationAnchor; - [self getValue:&hillshadeIlluminationAnchor]; - return hillshadeIlluminationAnchor; -} - -@end - -namespace mbgl { - -MGLStyleLayer* HillshadeStyleLayerPeerFactory::createPeer(style::Layer* rawLayer) { - return [[MGLHillshadeStyleLayer alloc] initWithRawLayer:rawLayer]; -} - -} // namespace mbgl diff --git a/platform/darwin/src/MGLHillshadeStyleLayer_Private.h b/platform/darwin/src/MGLHillshadeStyleLayer_Private.h deleted file mode 100644 index 4c427f2137e..00000000000 --- a/platform/darwin/src/MGLHillshadeStyleLayer_Private.h +++ /dev/null @@ -1,17 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -#pragma once - -#include "MGLStyleLayer_Private.h" - -#include - -namespace mbgl { - -class HillshadeStyleLayerPeerFactory : public LayerPeerFactory, public mbgl::HillshadeLayerFactory { - // LayerPeerFactory overrides. - LayerFactory* getCoreLayerFactory() final { return this; } - virtual MGLStyleLayer* createPeer(style::Layer*) final; -}; - -} // namespace mbgl diff --git a/platform/darwin/src/MGLImageSource.h b/platform/darwin/src/MGLImageSource.h deleted file mode 100644 index 66acd39e853..00000000000 --- a/platform/darwin/src/MGLImageSource.h +++ /dev/null @@ -1,99 +0,0 @@ -#import "MGLSource.h" - -#import "MGLFoundation.h" -#import "MGLTypes.h" -#import "MGLGeometry.h" - -NS_ASSUME_NONNULL_BEGIN - -MGL_EXPORT -/** - `MGLImageSource` is a content source that is used for a georeferenced raster - image to be shown on the map. The georeferenced image scales and rotates as the - user zooms and rotates the map. Images may also be used as icons or patterns - in a style layer. To register an image for use as an icon or pattern, - use the `-[MGLStyle setImage:forName:]` method. To configure a point - annotation’s image, use the `MGLAnnotationImage` class. - - The geographic location of the raster image content, supplied with - `MGLCoordinateQuad`, can be non-axis aligned. - `MGLImageSource` supports raster content from `NSURL`, `NSImage` (macOS), or - `UIImage` (iOS). - An image source is added to an `MGLStyle` object along with one or more - `MGLRasterStyleLayer` objects. Use a raster style layer to control the - appearance of content supplied by the image source. - - Each - image - source defined by the style JSON file is represented at runtime by an - `MGLImageSource` object that you can use to initialize new style layers. You - can also add and remove sources dynamically using methods such as - `-[MGLStyle addSource:]` and `-[MGLStyle sourceWithIdentifier:]`. - - ### Example - - ```swift - let coordinates = MGLCoordinateQuad( - topLeft: CLLocationCoordinate2D(latitude: 46.437, longitude: -80.425), - bottomLeft: CLLocationCoordinate2D(latitude: 37.936, longitude: -80.425), - bottomRight: CLLocationCoordinate2D(latitude: 37.936, longitude: -71.516), - topRight: CLLocationCoordinate2D(latitude: 46.437, longitude: -71.516)) - let source = MGLImageSource(identifier: "radar", coordinateQuad: coordinates, url: URL(string: "https://www.mapbox.com/mapbox-gl-js/assets/radar.gif")!) - mapView.style?.addSource(source) - ``` - - #### Related examples - See the - Add an image example to learn how to add an image to your map using - `MGLImageSource`. - */ -MGL_EXPORT -@interface MGLImageSource : MGLSource - -#pragma mark Initializing a Source - -/** - Returns a georeferenced image source with an identifier, coordinates and a URL. - - @param identifier A string that uniquely identifies the source. - @param coordinateQuad the top left, top right, bottom right, and bottom left coordinates for the image. - @param url An HTTP(S) URL, absolute file URL, or local file URL relative to the - current application’s resource bundle. - @return An initialized shape source. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier coordinateQuad:(MGLCoordinateQuad)coordinateQuad URL:(NSURL *)url; - -/** - Returns a georeferenced image source with an identifier, coordinates and an image. - - @param identifier A string that uniquely identifies the source. - @param coordinateQuad The top left, top right, bottom right, and bottom left coordinates for the image. - @param image The image to display for the source. - @return An initialized shape source. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier coordinateQuad:(MGLCoordinateQuad)coordinateQuad image:(MGLImage *)image; - -#pragma mark Accessing a Source’s Content - -/** - The URL to the source image. - - If the receiver was initialized using `-initWithIdentifier:coordinateQuad:image:` or - the `image` property is set, this property is set to `nil`. - */ -@property (nonatomic, copy, nullable)NSURL *URL; - -/** - The source image. - - If the receiver was initialized using `-initWithIdentifier:coordinateQuad:URL:` or if the `URL` property is set, this property is set to `nil`. - */ -@property (nonatomic, retain, nullable)MGLImage *image; - -/** - The coordinates at which the corners of the source image will be placed. - */ -@property (nonatomic) MGLCoordinateQuad coordinates; -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLImageSource.mm b/platform/darwin/src/MGLImageSource.mm deleted file mode 100644 index 2d2f090079f..00000000000 --- a/platform/darwin/src/MGLImageSource.mm +++ /dev/null @@ -1,112 +0,0 @@ -#import "MGLImageSource.h" - -#import "MGLGeometry_Private.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLSource_Private.h" -#import "MGLTileSource_Private.h" -#import "NSURL+MGLAdditions.h" -#if TARGET_OS_IPHONE - #import "UIImage+MGLAdditions.h" -#else - #import "NSImage+MGLAdditions.h" -#endif - -#include -#include - -@interface MGLImageSource () -- (instancetype)initWithIdentifier:(NSString *)identifier coordinateQuad:(MGLCoordinateQuad)coordinateQuad NS_DESIGNATED_INITIALIZER; - -@property (nonatomic, readonly) mbgl::style::ImageSource *rawSource; - -@end - -@implementation MGLImageSource - -- (instancetype)initWithIdentifier:(NSString *)identifier coordinateQuad:(MGLCoordinateQuad)coordinateQuad { - - const auto coordsArray = MGLLatLngArrayFromCoordinateQuad(coordinateQuad); - auto source = std::make_unique(identifier.UTF8String, coordsArray); - return self = [super initWithPendingSource:std::move(source)]; -} - - -- (instancetype)initWithIdentifier:(NSString *)identifier coordinateQuad:(MGLCoordinateQuad)coordinateQuad URL:(NSURL *)url { - self = [self initWithIdentifier:identifier coordinateQuad: coordinateQuad]; - self.URL = url; - return self; -} - - -- (instancetype)initWithIdentifier:(NSString *)identifier coordinateQuad:(MGLCoordinateQuad)coordinateQuad image:(MGLImage *)image { - self = [self initWithIdentifier:identifier coordinateQuad: coordinateQuad]; - self.image = image; - - return self; -} - -- (NSURL *)URL { - MGLAssertStyleSourceIsValid(); - auto url = self.rawSource->getURL(); - return url ? [NSURL URLWithString:@(url->c_str())] : nil; -} - -- (void)setURL:(NSURL *)url { - MGLAssertStyleSourceIsValid(); - if (url) { - self.rawSource->setURL(url.mgl_URLByStandardizingScheme.absoluteString.UTF8String); - _image = nil; - } else { - self.image = nullptr; - } -} - -- (void)setImage:(MGLImage *)image { - MGLAssertStyleSourceIsValid(); - if (image != nullptr) { - self.rawSource->setImage(image.mgl_premultipliedImage); - } else { - self.rawSource->setImage(mbgl::PremultipliedImage({0,0})); - } - _image = image; -} - -- (MGLCoordinateQuad)coordinates { - MGLAssertStyleSourceIsValid(); - return MGLCoordinateQuadFromLatLngArray(self.rawSource->getCoordinates()); -} - -- (void)setCoordinates: (MGLCoordinateQuad)coordinateQuad { - MGLAssertStyleSourceIsValid(); - self.rawSource->setCoordinates(MGLLatLngArrayFromCoordinateQuad(coordinateQuad)); -} - -- (NSString *)description { - if (self.rawSource) { - return [NSString stringWithFormat:@"<%@: %p; identifier = %@; coordinates = %@; URL = %@; image = %@>", - NSStringFromClass([self class]), (void *)self, self.identifier, - MGLStringFromCoordinateQuad(self.coordinates), - self.URL, - self.image]; - } - else { - return [NSString stringWithFormat:@"<%@: %p; identifier = %@; coordinates = ; URL = ; image = %@>", - NSStringFromClass([self class]), (void *)self, self.identifier, self.image]; - } -} - -- (mbgl::style::ImageSource *)rawSource { - return (mbgl::style::ImageSource *)super.rawSource; -} - -- (NSString *)attributionHTMLString { - if (!self.rawSource) { - MGLAssert(0, @"Source with identifier `%@` was invalidated after a style change", self.identifier); - return nil; - } - - auto attribution = self.rawSource->getAttribution(); - return attribution ? @(attribution->c_str()) : nil; -} - -@end diff --git a/platform/darwin/src/MGLLight.h b/platform/darwin/src/MGLLight.h deleted file mode 100644 index 281fcc5c6e3..00000000000 --- a/platform/darwin/src/MGLLight.h +++ /dev/null @@ -1,242 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import - -#import "MGLFoundation.h" -#import "MGLStyleValue.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Whether extruded geometries are lit relative to the map or viewport. - */ -typedef NS_ENUM(NSUInteger, MGLLightAnchor) { - /** - The position of the light source is aligned to the rotation of the map. - */ - MGLLightAnchorMap, - /** - The position of the light source is aligned to the rotation of the - viewport. - */ - MGLLightAnchorViewport, -}; - -/** - A structure containing information about the position of the light source - relative to lit geometries. - */ -typedef struct __attribute__((objc_boxable)) MGLSphericalPosition { - /** Distance from the center of the base of an object to its light. */ - CGFloat radial; - /** Position of the light relative to 0° (0° when `MGLLight.anchor` is set to viewport corresponds - to the top of the viewport, or 0° when `MGLLight.anchor` is set to map corresponds to due north, - and degrees proceed clockwise). */ - CLLocationDirection azimuthal; - /** Indicates the height of the light (from 0°, directly above, to 180°, directly below). */ - CLLocationDirection polar; -} MGLSphericalPosition; - -/** - Creates a new `MGLSphericalPosition` from the given radial, azimuthal, polar. - - @param radial The radial coordinate. - @param azimuthal The azimuthal angle. - @param polar The polar angle. - - @return Returns a `MGLSphericalPosition` struct containing the position attributes. - */ -NS_INLINE MGLSphericalPosition MGLSphericalPositionMake(CGFloat radial, CLLocationDirection azimuthal, CLLocationDirection polar) { - MGLSphericalPosition position; - position.radial = radial; - position.azimuthal = azimuthal; - position.polar = polar; - - return position; -} - -/** - An `MGLLight` object represents the light source for extruded geometries in - `MGLStyle`. - - ### Example - ```swift - let light = MGLLight() - let position = MGLSphericalPosition(radial: 5, azimuthal: 180, polar: 80) - light.position = NSExpression(forConstantValue: NSValue(mglSphericalPosition: position)) - light.anchor = NSExpression(forConstantValue: "map") - mapView.style?.light = light - ``` - - #### Related examples - See the Adjust light of - 3D buildings to learn how to create and modify the light source for 3D - geometries. - */ -MGL_EXPORT -@interface MGLLight : NSObject - -/** - Whether extruded geometries are lit relative to the map or viewport. - - The default value of this property is an expression that evaluates to - `viewport`. - - You can set this property to an expression containing any of the following: - - * Constant `MGLAnchor` values - * Any of the following constant string values: - * `map`: The position of the light source is aligned to the rotation of the - map. - * `viewport`: The position of the light source is aligned to the rotation of - the viewport. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - - This property corresponds to the anchor - light property in the Mapbox Style Specification. - */ -@property (nonatomic) NSExpression *anchor; - -/** - Position of the `MGLLight` source relative to lit (extruded) geometries, in a - `MGLSphericalPosition` struct [radial coordinate, azimuthal angle, polar angle] - where radial indicates the distance from the center of the base of an object to - its light, azimuthal indicates the position of the light relative to 0° (0° - when `MGLLight.anchor` is set to `MGLLightAnchorViewport` corresponds to the - top of the viewport, or 0° when `MGLLight.anchor` is set to `MGLLightAnchorMap` - corresponds to due north, and degrees proceed clockwise), and polar indicates - the height of the light (from 0°, directly above, to 180°, directly below). - - The default value of this property is an expression that evaluates to an - `MGLSphericalPosition` struct set to 1.15 radial, 210 azimuthal and 30 polar. - - You can set this property to an expression containing any of the following: - - * Constant `MGLSphericalPosition` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - - This property corresponds to the position - light property in the Mapbox Style Specification. - - #### Related examples - See the Adjust light of - 3D buildings example to learn how to create and modify the position of - value of an `MGLLight` object for 3D geometries. - */ -@property (nonatomic) NSExpression *position; - -/** - The transition affecting any changes to this layer’s `position` property. - - This property corresponds to the `position-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition positionTransition; - -#if TARGET_OS_IPHONE -/** - Color tint for lighting extruded geometries. - - The default value of this property is an expression that evaluates to - `UIColor.whiteColor`. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - - This property corresponds to the color - light property in the Mapbox Style Specification. - */ -@property (nonatomic) NSExpression *color; -#else -/** - Color tint for lighting extruded geometries. - - The default value of this property is an expression that evaluates to - `NSColor.whiteColor`. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - - This property corresponds to the color - light property in the Mapbox Style Specification. - */ -@property (nonatomic) NSExpression *color; -#endif - -/** - The transition affecting any changes to this layer’s `color` property. - - This property corresponds to the `color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition colorTransition; - -/** - Intensity of lighting (on a scale from 0 to 1). Higher numbers will present as - more extreme contrast. - - The default value of this property is an expression that evaluates to the float - `0.5`. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - - This property corresponds to the intensity - light property in the Mapbox Style Specification. - */ -@property (nonatomic) NSExpression *intensity; - -/** - The transition affecting any changes to this layer’s `intensity` property. - - This property corresponds to the `intensity-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition intensityTransition; - - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLLight.h.ejs b/platform/darwin/src/MGLLight.h.ejs deleted file mode 100644 index 30efef79370..00000000000 --- a/platform/darwin/src/MGLLight.h.ejs +++ /dev/null @@ -1,105 +0,0 @@ -<% - const properties = locals.properties; - const type = locals.type; - const doc = locals.doc; --%> -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import - -#import "MGLFoundation.h" -#import "MGLStyleValue.h" - -NS_ASSUME_NONNULL_BEGIN - -<% for (const property of properties) { -%> -<% if (property.type == "enum") { -%> -/** -<%- propertyDoc(property.name, property, type, 'enum').wrap(80, 1) %> - */ -typedef NS_ENUM(NSUInteger, MGLLight<%- camelize(property.name) %>) { -<% for (const value in property.values) { -%> - /** -<%- propertyDoc(property.name, property.values[value], type, 'enum').wrap(80, 4+1) %> - */ - MGLLightAnchor<%- camelize(value) %>, -<% } -%> -}; -<% } -%> -<% } -%> - -/** - A structure containing information about the position of the light source - relative to lit geometries. - */ -typedef struct __attribute__((objc_boxable)) MGLSphericalPosition { - /** Distance from the center of the base of an object to its light. */ - CGFloat radial; - /** Position of the light relative to 0° (0° when `MGLLight.anchor` is set to viewport corresponds - to the top of the viewport, or 0° when `MGLLight.anchor` is set to map corresponds to due north, - and degrees proceed clockwise). */ - CLLocationDirection azimuthal; - /** Indicates the height of the light (from 0°, directly above, to 180°, directly below). */ - CLLocationDirection polar; -} MGLSphericalPosition; - -/** - Creates a new `MGLSphericalPosition` from the given radial, azimuthal, polar. - - @param radial The radial coordinate. - @param azimuthal The azimuthal angle. - @param polar The polar angle. - - @return Returns a `MGLSphericalPosition` struct containing the position attributes. - */ -NS_INLINE MGLSphericalPosition MGLSphericalPositionMake(CGFloat radial, CLLocationDirection azimuthal, CLLocationDirection polar) { - MGLSphericalPosition position; - position.radial = radial; - position.azimuthal = azimuthal; - position.polar = polar; - - return position; -} - -/** - <%- doc.wrap(80, 1) %> - */ -MGL_EXPORT -@interface MGLLight : NSObject -<% if (properties.length) { -%> - -<% for (const property of properties) { -%> -/** -<%- propertyDoc(property.name, property, type, 'light').wrap(80, 1) %> - - This property corresponds to the <%- originalPropertyName(property) %> - light property in the Mapbox Style Specification. -<% if (property.examples) { -%> - - #### Related examples -<%- propertyExample(property).wrap(80, 1) %> -<% } -%> - */ -@property (nonatomic<% if (property.getter) { %>, getter=<%- objCGetter(property) -%><% } %>) NSExpression *<%- camelizeWithLeadingLowercase(property.name) %>; - -<% if (property.transition) { -%> -/** - The transition affecting any changes to this layer’s `<%- camelizeWithLeadingLowercase(property.name) %>` property. - - This property corresponds to the `<%- originalPropertyName(property) %>-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition <%- camelizeWithLeadingLowercase(property.name) %>Transition; - -<% } -%> -<% if (property.original) { -%> -@property (nonatomic<% if (!property.required) { %>, null_resettable<% } %>) NSExpression *<%- camelizeWithLeadingLowercase(originalPropertyName(property)) %> __attribute__((unavailable("Use <%- camelizeWithLeadingLowercase(property.name) %> instead."))); - -<% } -%> -<% } -%> -<% } -%> - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLLight.mm b/platform/darwin/src/MGLLight.mm deleted file mode 100644 index b7566d57a44..00000000000 --- a/platform/darwin/src/MGLLight.mm +++ /dev/null @@ -1,133 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -// test - -#import "MGLLight.h" - -#import "MGLTypes.h" -#import "MGLStyleValue_Private.h" -#import "NSValue+MGLAdditions.h" -#import "MGLLoggingConfiguration_Private.h" - -#import -#import - -namespace mbgl { - - MBGL_DEFINE_ENUM(MGLLightAnchor, { - { MGLLightAnchorMap, "map" }, - { MGLLightAnchorViewport, "viewport" }, - }); - -} - -@interface MGLLight() - -@end - -@implementation MGLLight - -- (instancetype)initWithMBGLLight:(const mbgl::style::Light *)mbglLight -{ - if (self = [super init]) { - MGLLogInfo(@"Initializing %@.", NSStringFromClass([self class])); - auto anchor = mbglLight->getAnchor(); - NSExpression *anchorExpression; - if (anchor.isUndefined()) { - mbgl::style::PropertyValue defaultAnchor = mbglLight->getDefaultAnchor(); - anchorExpression = MGLStyleValueTransformer().toExpression(defaultAnchor); - } else { - anchorExpression = MGLStyleValueTransformer().toExpression(anchor); - } - - _anchor = anchorExpression; - - auto positionValue = mbglLight->getPosition(); - if (positionValue.isUndefined()) { - _position = MGLStyleValueTransformer().toExpression(mbglLight->getDefaultPosition()); - } else { - _position = MGLStyleValueTransformer().toExpression(positionValue); - } - _positionTransition = MGLTransitionFromOptions(mbglLight->getPositionTransition()); - auto colorValue = mbglLight->getColor(); - if (colorValue.isUndefined()) { - _color = MGLStyleValueTransformer().toExpression(mbglLight->getDefaultColor()); - } else { - _color = MGLStyleValueTransformer().toExpression(colorValue); - } - _colorTransition = MGLTransitionFromOptions(mbglLight->getColorTransition()); - auto intensityValue = mbglLight->getIntensity(); - if (intensityValue.isUndefined()) { - _intensity = MGLStyleValueTransformer().toExpression(mbglLight->getDefaultIntensity()); - } else { - _intensity = MGLStyleValueTransformer().toExpression(intensityValue); - } - _intensityTransition = MGLTransitionFromOptions(mbglLight->getIntensityTransition()); - } - - return self; -} - -- (mbgl::style::Light)mbglLight -{ - mbgl::style::Light mbglLight; - auto anchor = MGLStyleValueTransformer().toPropertyValue>(self.anchor, false); - mbglLight.setAnchor(anchor); - - auto position = MGLStyleValueTransformer().toPropertyValue>(self.position, false); - mbglLight.setPosition(position); - - mbglLight.setPositionTransition(MGLOptionsFromTransition(self.positionTransition)); - - auto color = MGLStyleValueTransformer().toPropertyValue>(self.color, false); - mbglLight.setColor(color); - - mbglLight.setColorTransition(MGLOptionsFromTransition(self.colorTransition)); - - auto intensity = MGLStyleValueTransformer().toPropertyValue>(self.intensity, false); - mbglLight.setIntensity(intensity); - - mbglLight.setIntensityTransition(MGLOptionsFromTransition(self.intensityTransition)); - - - return mbglLight; -} - - - -- (void)setAnchor:(NSExpression *)anchor { - MGLLogDebug(@"Setting anchor: %@", anchor); - _anchor = anchor; -} - -- (void)setPosition:(NSExpression *)position { - MGLLogDebug(@"Setting position: %@", position); - _position = position; -} - -- (void)setPositionTransition:(MGLTransition)transition { - MGLLogDebug(@"Setting positionTransition: %@", MGLStringFromMGLTransition(transition)); - _positionTransition = transition; -} - -- (void)setColor:(NSExpression *)color { - MGLLogDebug(@"Setting color: %@", color); - _color = color; -} - -- (void)setColorTransition:(MGLTransition)transition { - MGLLogDebug(@"Setting colorTransition: %@", MGLStringFromMGLTransition(transition)); - _colorTransition = transition; -} - -- (void)setIntensity:(NSExpression *)intensity { - MGLLogDebug(@"Setting intensity: %@", intensity); - _intensity = intensity; -} - -- (void)setIntensityTransition:(MGLTransition)transition { - MGLLogDebug(@"Setting intensityTransition: %@", MGLStringFromMGLTransition(transition)); - _intensityTransition = transition; -} - -@end diff --git a/platform/darwin/src/MGLLight.mm.ejs b/platform/darwin/src/MGLLight.mm.ejs deleted file mode 100644 index e4e455d354b..00000000000 --- a/platform/darwin/src/MGLLight.mm.ejs +++ /dev/null @@ -1,120 +0,0 @@ -<% - const properties = locals.properties; --%> -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -// test - -#import "MGLLight.h" - -#import "MGLTypes.h" -#import "MGLStyleValue_Private.h" -#import "NSValue+MGLAdditions.h" -#import "MGLLoggingConfiguration_Private.h" - -#import -#import - -namespace mbgl { - - MBGL_DEFINE_ENUM(MGLLightAnchor, { -<% for (const property of properties) { -%> -<% if (property.type == "enum") { -%> -<% for (const value in property.values) { -%> - { MGLLightAnchor<%- camelize(value) %>, "<%- value %>" }, -<% } -%> -<% } -%> -<% } -%> - }); - -} - -@interface MGLLight() - -@end - -@implementation MGLLight - -- (instancetype)initWithMBGLLight:(const mbgl::style::Light *)mbglLight -{ - if (self = [super init]) { - MGLLogInfo(@"Initializing %@.", NSStringFromClass([self class])); -<% if (properties.length) { -%> -<% for (const property of properties) { -%> -<% if (property.type == "enum") { -%> - auto <%- camelizeWithLeadingLowercase(property.name) -%> = mbglLight->get<%- camelize(property.name) -%>(); - NSExpression *<%- camelizeWithLeadingLowercase(property.name) -%>Expression; - if (<%- camelizeWithLeadingLowercase(property.name) -%>.isUndefined()) { - mbgl::style::PropertyValueType> default<%- camelize(property.name) -%> = mbglLight->getDefault<%- camelize(property.name) -%>(); - <%- camelizeWithLeadingLowercase(property.name) -%>Expression = MGLStyleValueTransformerType, MGLLight<%- camelize(property.name) -%>>().toExpression(default<%- camelize(property.name) -%>); - } else { - <%- camelizeWithLeadingLowercase(property.name) -%>Expression = MGLStyleValueTransformerType, NSValue *, mbgl::style::Light<%- camelize(property.name) -%>Type, MGLLight<%- camelize(property.name) -%>>().toExpression(<%- camelizeWithLeadingLowercase(property.name) -%>); - } - - _<%- camelizeWithLeadingLowercase(property.name) -%> = <%- camelizeWithLeadingLowercase(property.name) -%>Expression; - -<% if (property.transition) { -%> - _<%- camelizeWithLeadingLowercase(property.name) -%>Transition = MGLTransitionFromOptions(mbglLight->get<%- camelize(property.name) -%>Transition()); - -<% } -%> -<% } else {-%> - auto <%- camelizeWithLeadingLowercase(property.name) -%>Value = mbglLight->get<%- camelize(property.name) -%>(); - if (<%- camelizeWithLeadingLowercase(property.name) -%>Value.isUndefined()) { - _<%- camelizeWithLeadingLowercase(property.name) -%> = MGLStyleValueTransformer<<%- valueTransformerArguments(property).join(', ') %>>().toExpression(mbglLight->getDefault<%- camelize(property.name) -%>()); - } else { - _<%- camelizeWithLeadingLowercase(property.name) -%> = MGLStyleValueTransformer<<%- valueTransformerArguments(property).join(', ') %>>().toExpression(<%- camelizeWithLeadingLowercase(property.name) -%>Value); - } -<% if (property.transition) { -%> - _<%- camelizeWithLeadingLowercase(property.name) -%>Transition = MGLTransitionFromOptions(mbglLight->get<%- camelize(property.name) -%>Transition()); -<% } -%> -<% } -%> -<% } -%> -<% } -%> - } - - return self; -} - -- (mbgl::style::Light)mbglLight -{ - mbgl::style::Light mbglLight; -<% if (properties.length) { -%> -<% for (const property of properties) { -%> -<% if (property.type == "enum") { -%> - auto <%- camelizeWithLeadingLowercase(property.name) -%> = MGLStyleValueTransformerType, NSValue *, mbgl::style::Light<%- camelize(property.name) -%>Type, MGLLight<%- camelize(property.name) -%>>().toPropertyValue>>(self.<%- camelizeWithLeadingLowercase(property.name) -%>, false); - mbglLight.set<%- camelize(property.name) -%>(<%- camelizeWithLeadingLowercase(property.name) -%>); - -<% } else {-%> - auto <%- camelizeWithLeadingLowercase(property.name) -%> = MGLStyleValueTransformer<<%- valueTransformerArguments(property).join(', ') %>>().toPropertyValue>>(self.<%- camelizeWithLeadingLowercase(property.name) -%>, false); - mbglLight.set<%- camelize(property.name) -%>(<%- camelizeWithLeadingLowercase(property.name) -%>); - -<% } -%> -<% if (property.transition) { -%> - mbglLight.set<%- camelize(property.name) -%>Transition(MGLOptionsFromTransition(self.<%- camelizeWithLeadingLowercase(property.name) -%>Transition)); - -<% } -%> -<% } -%> -<% } -%> - - return mbglLight; -} - -<% if (properties.length) { -%> - -<% for (const property of properties) { -%> - -- (void)set<%- camelize(property.name) %>:(NSExpression *)<%- objCName(property) %> { - MGLLogDebug(@"Setting <%- objCName(property) %>: %@", <%- objCName(property) %>); - _<%- objCName(property) %> = <%- objCName(property) %>; -} -<% if (property["transition"]) { -%> - -- (void)set<%- camelize(property.name) %>Transition:(MGLTransition)transition { - MGLLogDebug(@"Setting <%- objCName(property) %>Transition: %@", MGLStringFromMGLTransition(transition)); - _<%- objCName(property) %>Transition = transition; -} -<% } -%> -<% } -%> -<% } -%> - -@end diff --git a/platform/darwin/src/MGLLight_Private.h b/platform/darwin/src/MGLLight_Private.h deleted file mode 100644 index dbc29c1eff7..00000000000 --- a/platform/darwin/src/MGLLight_Private.h +++ /dev/null @@ -1,23 +0,0 @@ -#import - -#import "MGLLight.h" - -namespace mbgl { - namespace style { - class Light; - } -} - -@interface MGLLight (Private) - -/** - Initializes and returns a `MGLLight` associated with a style's light. - */ -- (instancetype)initWithMBGLLight:(const mbgl::style::Light *)mbglLight; - -/** - Returns an `mbgl::style::Light` representation of the `MGLLight`. - */ -- (mbgl::style::Light)mbglLight; - -@end diff --git a/platform/darwin/src/MGLLineStyleLayer.h b/platform/darwin/src/MGLLineStyleLayer.h deleted file mode 100644 index 3400f7e75b1..00000000000 --- a/platform/darwin/src/MGLLineStyleLayer.h +++ /dev/null @@ -1,671 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLFoundation.h" -#import "MGLVectorStyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The display of line endings. - - Values of this type are used in the `MGLLineStyleLayer.lineCap` - property. - */ -typedef NS_ENUM(NSUInteger, MGLLineCap) { - /** - A cap with a squared-off end which is drawn to the exact endpoint of the - line. - */ - MGLLineCapButt, - /** - A cap with a rounded end which is drawn beyond the endpoint of the line at - a radius of one-half of the line's width and centered on the endpoint of - the line. - */ - MGLLineCapRound, - /** - A cap with a squared-off end which is drawn beyond the endpoint of the line - at a distance of one-half of the line's width. - */ - MGLLineCapSquare, -}; - -/** - The display of lines when joining. - - Values of this type are used in the `MGLLineStyleLayer.lineJoin` - property. - */ -typedef NS_ENUM(NSUInteger, MGLLineJoin) { - /** - A join with a squared-off end which is drawn beyond the endpoint of the - line at a distance of one-half of the line's width. - */ - MGLLineJoinBevel, - /** - A join with a rounded end which is drawn beyond the endpoint of the line at - a radius of one-half of the line's width and centered on the endpoint of - the line. - */ - MGLLineJoinRound, - /** - A join with a sharp, angled corner which is drawn with the outer sides - beyond the endpoint of the path until they meet. - */ - MGLLineJoinMiter, -}; - -/** - Controls the frame of reference for `MGLLineStyleLayer.lineTranslation`. - - Values of this type are used in the `MGLLineStyleLayer.lineTranslationAnchor` - property. - */ -typedef NS_ENUM(NSUInteger, MGLLineTranslationAnchor) { - /** - The line is translated relative to the map. - */ - MGLLineTranslationAnchorMap, - /** - The line is translated relative to the viewport. - */ - MGLLineTranslationAnchorViewport, -}; - -/** - An `MGLLineStyleLayer` is a style layer that renders one or more stroked - polylines on the map. - - Use a line style layer to configure the visual appearance of polyline or - multipolyline features. These features can come from vector tiles loaded by an - `MGLVectorTileSource` object, or they can be `MGLPolyline`, - `MGLPolylineFeature`, `MGLMultiPolyline`, or `MGLMultiPolylineFeature` - instances in an `MGLShapeSource` or `MGLComputedShapeSource` object. - - You can access an existing line style layer using the - `-[MGLStyle layerWithIdentifier:]` method if you know its identifier; - otherwise, find it using the `MGLStyle.layers` property. You can also create a - new line style layer and add it to the style using a method such as - `-[MGLStyle addLayer:]`. - - #### Related examples - See the Add multiple - shapes from a single shape source example to learn how to add a line to - your map using this style layer. See the Add a line - style layer from GeoJSON example to learn how to add and style line data to - an `MGLMapView` object at runtime. - - ### Example - - ```swift - let layer = MGLLineStyleLayer(identifier: "trails-path", source: trails) - layer.sourceLayerIdentifier = "trails" - layer.lineWidth = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.5, %@)", - [14: 2, - 18: 20]) - layer.lineColor = NSExpression(forConstantValue: UIColor.brown) - layer.lineCap = NSExpression(forConstantValue: "round") - layer.predicate = NSPredicate(format: "%K == %@", "trail-type", "mountain-biking") - mapView.style?.addLayer(layer) - ``` - */ -MGL_EXPORT -@interface MGLLineStyleLayer : MGLVectorStyleLayer - -/** - Returns a line style layer initialized with an identifier and source. - - After initializing and configuring the style layer, add it to a map view’s - style using the `-[MGLStyle addLayer:]` or - `-[MGLStyle insertLayer:belowLayer:]` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param source The source from which to obtain the data to style. If the source - has not yet been added to the current style, the behavior is undefined. - @return An initialized foreground style layer. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source; - -#pragma mark - Accessing the Layout Attributes - -/** - The display of line endings. - - The default value of this property is an expression that evaluates to `butt`. - Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant `MGLLineCap` values - * Any of the following constant string values: - * `butt`: A cap with a squared-off end which is drawn to the exact endpoint - of the line. - * `round`: A cap with a rounded end which is drawn beyond the endpoint of the - line at a radius of one-half of the line's width and centered on the endpoint - of the line. - * `square`: A cap with a squared-off end which is drawn beyond the endpoint - of the line at a distance of one-half of the line's width. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *lineCap; - -/** - The display of lines when joining. - - The default value of this property is an expression that evaluates to `miter`. - Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant `MGLLineJoin` values - * Any of the following constant string values: - * `bevel`: A join with a squared-off end which is drawn beyond the endpoint - of the line at a distance of one-half of the line's width. - * `round`: A join with a rounded end which is drawn beyond the endpoint of - the line at a radius of one-half of the line's width and centered on the - endpoint of the line. - * `miter`: A join with a sharp, angled corner which is drawn with the outer - sides beyond the endpoint of the path until they meet. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *lineJoin; - -/** - Used to automatically convert miter joins to bevel joins for sharp angles. - - The default value of this property is an expression that evaluates to the float - `2`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `lineJoin` is set to an - expression that evaluates to `miter`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *lineMiterLimit; - -/** - Used to automatically convert round joins to miter joins for shallow angles. - - The default value of this property is an expression that evaluates to the float - `1.05`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `lineJoin` is set to an - expression that evaluates to `round`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *lineRoundLimit; - -#pragma mark - Accessing the Paint Attributes - -/** - Blur applied to the line, in points. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *lineBlur; - -/** - The transition affecting any changes to this layer’s `lineBlur` property. - - This property corresponds to the `line-blur-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition lineBlurTransition; - -#if TARGET_OS_IPHONE -/** - The color with which the line will be drawn. - - The default value of this property is an expression that evaluates to - `UIColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `linePattern` is set to `nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *lineColor; -#else -/** - The color with which the line will be drawn. - - The default value of this property is an expression that evaluates to - `NSColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `linePattern` is set to `nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *lineColor; -#endif - -/** - The transition affecting any changes to this layer’s `lineColor` property. - - This property corresponds to the `line-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition lineColorTransition; - -/** - Specifies the lengths of the alternating dashes and gaps that form the dash - pattern. The lengths are later scaled by the line width. To convert a dash - length to points, multiply the length by the current line width. Note that - GeoJSON sources with `lineMetrics: true` specified won't render dashed lines to - the expected scale. Also note that zoom-dependent expressions will be evaluated - only at integer zoom levels. - - This property is measured in line widths. - - This property is only applied to the style if `linePattern` is set to `nil`. - Otherwise, it is ignored. - - This attribute corresponds to the line-dasharray - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant array values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *lineDashPattern; - -/** - The transition affecting any changes to this layer’s `lineDashPattern` property. - - This property corresponds to the `line-dasharray-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition lineDashPatternTransition; - -@property (nonatomic, null_resettable) NSExpression *lineDasharray __attribute__((unavailable("Use lineDashPattern instead."))); - -/** - Draws a line casing outside of a line's actual path. Value indicates the width - of the inner gap. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *lineGapWidth; - -/** - The transition affecting any changes to this layer’s `lineGapWidth` property. - - This property corresponds to the `line-gap-width-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition lineGapWidthTransition; - -#if TARGET_OS_IPHONE -/** - The color gradient with which the line will be drawn. This property only has an - effect on lines defined by an `MGLShapeSource` whose - `MGLShapeSourceOptionLineDistanceMetrics` option is set to `YES`. - - This property is only applied to the style if `lineDasharray` is set to `nil`, - and `linePattern` is set to `nil`, and the data source requirements are met. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$lineProgress` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *lineGradient; -#else -/** - The color gradient with which the line will be drawn. This property only has an - effect on lines defined by an `MGLShapeSource` whose - `MGLShapeSourceOptionLineDistanceMetrics` option is set to `YES`. - - This property is only applied to the style if `lineDasharray` is set to `nil`, - and `linePattern` is set to `nil`, and the data source requirements are met. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$lineProgress` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *lineGradient; -#endif - -/** - The line's offset. For linear features, a positive value offsets the line to - the right, relative to the direction of the line, and a negative value to the - left. For polygon features, a positive value results in an inset, and a - negative value results in an outset. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *lineOffset; - -/** - The transition affecting any changes to this layer’s `lineOffset` property. - - This property corresponds to the `line-offset-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition lineOffsetTransition; - -/** - The opacity at which the line will be drawn. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *lineOpacity; - -/** - The transition affecting any changes to this layer’s `lineOpacity` property. - - This property corresponds to the `line-opacity-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition lineOpacityTransition; - -/** - Name of image in style images to use for drawing image lines. For seamless - patterns, image width must be a factor of two (2, 4, 8, ..., 512). - - You can set this property to an expression containing any of the following: - - * Constant string values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *linePattern; - -/** - The transition affecting any changes to this layer’s `linePattern` property. - - This property corresponds to the `line-pattern-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition linePatternTransition; - -#if TARGET_OS_IPHONE -/** - The geometry's offset. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 - points downward. Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the line-translate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *lineTranslation; -#else -/** - The geometry's offset. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 - points upward. Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the line-translate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *lineTranslation; -#endif - -/** - The transition affecting any changes to this layer’s `lineTranslation` property. - - This property corresponds to the `line-translate-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition lineTranslationTransition; - -@property (nonatomic, null_resettable) NSExpression *lineTranslate __attribute__((unavailable("Use lineTranslation instead."))); - -/** - Controls the frame of reference for `lineTranslation`. - - The default value of this property is an expression that evaluates to `map`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `lineTranslation` is non-`nil`. - Otherwise, it is ignored. - - This attribute corresponds to the line-translate-anchor - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `MGLLineTranslationAnchor` values - * Any of the following constant string values: - * `map`: The line is translated relative to the map. - * `viewport`: The line is translated relative to the viewport. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *lineTranslationAnchor; - -@property (nonatomic, null_resettable) NSExpression *lineTranslateAnchor __attribute__((unavailable("Use lineTranslationAnchor instead."))); - -/** - Stroke thickness. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *lineWidth; - -/** - The transition affecting any changes to this layer’s `lineWidth` property. - - This property corresponds to the `line-width-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition lineWidthTransition; - -@end - -/** - Methods for wrapping an enumeration value for a style layer attribute in an - `MGLLineStyleLayer` object and unwrapping its raw value. - */ -@interface NSValue (MGLLineStyleLayerAdditions) - -#pragma mark Working with Line Style Layer Attribute Values - -/** - Creates a new value object containing the given `MGLLineCap` enumeration. - - @param lineCap The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLLineCap:(MGLLineCap)lineCap; - -/** - The `MGLLineCap` enumeration representation of the value. - */ -@property (readonly) MGLLineCap MGLLineCapValue; - -/** - Creates a new value object containing the given `MGLLineJoin` enumeration. - - @param lineJoin The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLLineJoin:(MGLLineJoin)lineJoin; - -/** - The `MGLLineJoin` enumeration representation of the value. - */ -@property (readonly) MGLLineJoin MGLLineJoinValue; - -/** - Creates a new value object containing the given `MGLLineTranslationAnchor` enumeration. - - @param lineTranslationAnchor The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLLineTranslationAnchor:(MGLLineTranslationAnchor)lineTranslationAnchor; - -/** - The `MGLLineTranslationAnchor` enumeration representation of the value. - */ -@property (readonly) MGLLineTranslationAnchor MGLLineTranslationAnchorValue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLLineStyleLayer.mm b/platform/darwin/src/MGLLineStyleLayer.mm deleted file mode 100644 index 62d778a6f3c..00000000000 --- a/platform/darwin/src/MGLLineStyleLayer.mm +++ /dev/null @@ -1,568 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLSource.h" -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLStyleLayer_Private.h" -#import "MGLStyleValue_Private.h" -#import "MGLLineStyleLayer.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLLineStyleLayer_Private.h" - -#include -#include - - -namespace mbgl { - - MBGL_DEFINE_ENUM(MGLLineCap, { - { MGLLineCapButt, "butt" }, - { MGLLineCapRound, "round" }, - { MGLLineCapSquare, "square" }, - }); - - MBGL_DEFINE_ENUM(MGLLineJoin, { - { MGLLineJoinBevel, "bevel" }, - { MGLLineJoinRound, "round" }, - { MGLLineJoinMiter, "miter" }, - }); - - MBGL_DEFINE_ENUM(MGLLineTranslationAnchor, { - { MGLLineTranslationAnchorMap, "map" }, - { MGLLineTranslationAnchorViewport, "viewport" }, - }); - -} - -@interface MGLLineStyleLayer () - -@property (nonatomic, readonly) mbgl::style::LineLayer *rawLayer; - -@end - -@implementation MGLLineStyleLayer - -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source -{ - MGLLogDebug(@"Initializing %@ with identifier: %@ source: %@", NSStringFromClass([self class]), identifier, source); - auto layer = std::make_unique(identifier.UTF8String, source.identifier.UTF8String); - return self = [super initWithPendingLayer:std::move(layer)]; -} - -- (mbgl::style::LineLayer *)rawLayer -{ - return (mbgl::style::LineLayer *)super.rawLayer; -} - -- (NSString *)sourceIdentifier -{ - MGLAssertStyleLayerIsValid(); - - return @(self.rawLayer->getSourceID().c_str()); -} - -- (NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - - auto layerID = self.rawLayer->getSourceLayer(); - return layerID.empty() ? nil : @(layerID.c_str()); -} - -- (void)setSourceLayerIdentifier:(NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting sourceLayerIdentifier: %@", sourceLayerIdentifier); - - self.rawLayer->setSourceLayer(sourceLayerIdentifier.UTF8String ?: ""); -} - -- (void)setPredicate:(NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting predicate: %@", predicate); - - self.rawLayer->setFilter(predicate ? predicate.mgl_filter : mbgl::style::Filter()); -} - -- (NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - - return [NSPredicate mgl_predicateWithFilter:self.rawLayer->getFilter()]; -} - -#pragma mark - Accessing the Layout Attributes - -- (void)setLineCap:(NSExpression *)lineCap { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineCap: %@", lineCap); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(lineCap, false); - self.rawLayer->setLineCap(mbglValue); -} - -- (NSExpression *)lineCap { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineCap(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineCap(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setLineJoin:(NSExpression *)lineJoin { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineJoin: %@", lineJoin); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(lineJoin, true); - self.rawLayer->setLineJoin(mbglValue); -} - -- (NSExpression *)lineJoin { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineJoin(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineJoin(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setLineMiterLimit:(NSExpression *)lineMiterLimit { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineMiterLimit: %@", lineMiterLimit); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(lineMiterLimit, false); - self.rawLayer->setLineMiterLimit(mbglValue); -} - -- (NSExpression *)lineMiterLimit { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineMiterLimit(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineMiterLimit(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setLineRoundLimit:(NSExpression *)lineRoundLimit { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineRoundLimit: %@", lineRoundLimit); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(lineRoundLimit, false); - self.rawLayer->setLineRoundLimit(mbglValue); -} - -- (NSExpression *)lineRoundLimit { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineRoundLimit(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineRoundLimit(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -#pragma mark - Accessing the Paint Attributes - -- (void)setLineBlur:(NSExpression *)lineBlur { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineBlur: %@", lineBlur); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(lineBlur, true); - self.rawLayer->setLineBlur(mbglValue); -} - -- (NSExpression *)lineBlur { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineBlur(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineBlur(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setLineBlurTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineBlurTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setLineBlurTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)lineBlurTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getLineBlurTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setLineColor:(NSExpression *)lineColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineColor: %@", lineColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(lineColor, true); - self.rawLayer->setLineColor(mbglValue); -} - -- (NSExpression *)lineColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setLineColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setLineColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)lineColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getLineColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setLineDashPattern:(NSExpression *)lineDashPattern { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineDashPattern: %@", lineDashPattern); - - auto mbglValue = MGLStyleValueTransformer, NSArray *, float>().toPropertyValue>>(lineDashPattern, false); - self.rawLayer->setLineDasharray(mbglValue); -} - -- (NSExpression *)lineDashPattern { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineDasharray(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineDasharray(); - } - return MGLStyleValueTransformer, NSArray *, float>().toExpression(propertyValue); -} - -- (void)setLineDashPatternTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineDashPatternTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setLineDasharrayTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)lineDashPatternTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getLineDasharrayTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setLineDasharray:(NSExpression *)lineDasharray { -} - -- (NSExpression *)lineDasharray { - return self.lineDashPattern; -} - -- (void)setLineGapWidth:(NSExpression *)lineGapWidth { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineGapWidth: %@", lineGapWidth); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(lineGapWidth, true); - self.rawLayer->setLineGapWidth(mbglValue); -} - -- (NSExpression *)lineGapWidth { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineGapWidth(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineGapWidth(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setLineGapWidthTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineGapWidthTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setLineGapWidthTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)lineGapWidthTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getLineGapWidthTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setLineGradient:(NSExpression *)lineGradient { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineGradient: %@", lineGradient); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue(lineGradient); - self.rawLayer->setLineGradient(mbglValue); -} - -- (NSExpression *)lineGradient { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineGradient(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineGradient(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setLineOffset:(NSExpression *)lineOffset { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineOffset: %@", lineOffset); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(lineOffset, true); - self.rawLayer->setLineOffset(mbglValue); -} - -- (NSExpression *)lineOffset { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineOffset(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineOffset(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setLineOffsetTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineOffsetTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setLineOffsetTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)lineOffsetTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getLineOffsetTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setLineOpacity:(NSExpression *)lineOpacity { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineOpacity: %@", lineOpacity); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(lineOpacity, true); - self.rawLayer->setLineOpacity(mbglValue); -} - -- (NSExpression *)lineOpacity { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineOpacity(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineOpacity(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setLineOpacityTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineOpacityTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setLineOpacityTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)lineOpacityTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getLineOpacityTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setLinePattern:(NSExpression *)linePattern { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting linePattern: %@", linePattern); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(linePattern, true); - self.rawLayer->setLinePattern(mbglValue); -} - -- (NSExpression *)linePattern { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLinePattern(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLinePattern(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setLinePatternTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting linePatternTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setLinePatternTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)linePatternTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getLinePatternTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setLineTranslation:(NSExpression *)lineTranslation { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineTranslation: %@", lineTranslation); - - auto mbglValue = MGLStyleValueTransformer, NSValue *>().toPropertyValue>>(lineTranslation, false); - self.rawLayer->setLineTranslate(mbglValue); -} - -- (NSExpression *)lineTranslation { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineTranslate(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineTranslate(); - } - return MGLStyleValueTransformer, NSValue *>().toExpression(propertyValue); -} - -- (void)setLineTranslationTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineTranslationTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setLineTranslateTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)lineTranslationTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getLineTranslateTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setLineTranslate:(NSExpression *)lineTranslate { -} - -- (NSExpression *)lineTranslate { - return self.lineTranslation; -} - -- (void)setLineTranslationAnchor:(NSExpression *)lineTranslationAnchor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineTranslationAnchor: %@", lineTranslationAnchor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(lineTranslationAnchor, false); - self.rawLayer->setLineTranslateAnchor(mbglValue); -} - -- (NSExpression *)lineTranslationAnchor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineTranslateAnchor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineTranslateAnchor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setLineTranslateAnchor:(NSExpression *)lineTranslateAnchor { -} - -- (NSExpression *)lineTranslateAnchor { - return self.lineTranslationAnchor; -} - -- (void)setLineWidth:(NSExpression *)lineWidth { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineWidth: %@", lineWidth); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(lineWidth, true); - self.rawLayer->setLineWidth(mbglValue); -} - -- (NSExpression *)lineWidth { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getLineWidth(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultLineWidth(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setLineWidthTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting lineWidthTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setLineWidthTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)lineWidthTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getLineWidthTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -@end - -@implementation NSValue (MGLLineStyleLayerAdditions) - -+ (NSValue *)valueWithMGLLineCap:(MGLLineCap)lineCap { - return [NSValue value:&lineCap withObjCType:@encode(MGLLineCap)]; -} - -- (MGLLineCap)MGLLineCapValue { - MGLLineCap lineCap; - [self getValue:&lineCap]; - return lineCap; -} - -+ (NSValue *)valueWithMGLLineJoin:(MGLLineJoin)lineJoin { - return [NSValue value:&lineJoin withObjCType:@encode(MGLLineJoin)]; -} - -- (MGLLineJoin)MGLLineJoinValue { - MGLLineJoin lineJoin; - [self getValue:&lineJoin]; - return lineJoin; -} - -+ (NSValue *)valueWithMGLLineTranslationAnchor:(MGLLineTranslationAnchor)lineTranslationAnchor { - return [NSValue value:&lineTranslationAnchor withObjCType:@encode(MGLLineTranslationAnchor)]; -} - -- (MGLLineTranslationAnchor)MGLLineTranslationAnchorValue { - MGLLineTranslationAnchor lineTranslationAnchor; - [self getValue:&lineTranslationAnchor]; - return lineTranslationAnchor; -} - -@end - -namespace mbgl { - -MGLStyleLayer* LineStyleLayerPeerFactory::createPeer(style::Layer* rawLayer) { - return [[MGLLineStyleLayer alloc] initWithRawLayer:rawLayer]; -} - -} // namespace mbgl diff --git a/platform/darwin/src/MGLLineStyleLayer_Private.h b/platform/darwin/src/MGLLineStyleLayer_Private.h deleted file mode 100644 index b4c7b3ee7c5..00000000000 --- a/platform/darwin/src/MGLLineStyleLayer_Private.h +++ /dev/null @@ -1,17 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -#pragma once - -#include "MGLStyleLayer_Private.h" - -#include - -namespace mbgl { - -class LineStyleLayerPeerFactory : public LayerPeerFactory, public mbgl::LineLayerFactory { - // LayerPeerFactory overrides. - LayerFactory* getCoreLayerFactory() final { return this; } - virtual MGLStyleLayer* createPeer(style::Layer*) final; -}; - -} // namespace mbgl diff --git a/platform/darwin/src/MGLLocationManager.h b/platform/darwin/src/MGLLocationManager.h deleted file mode 100644 index ecb9192981e..00000000000 --- a/platform/darwin/src/MGLLocationManager.h +++ /dev/null @@ -1,203 +0,0 @@ -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol MGLLocationManagerDelegate; - -/** - The `MGLLocationManager` protocol defines a set of methods that a class must - implement in order to serve as the location manager of an `MGLMapView`. A location - manager is responsible for notifying the map view about location-related events, - such as a change in the user’s location. This protocol is similar to the - Core Location framework’s `CLLocationManager` class, but your implementation - does not need to be based on `CLLocationManager`. - - To receive location updates from an object that conforms to the `MGLLocationManager` - protocol, use the optional methods available in the `MGLLocationManagerDelegate` protocol. - */ -@protocol MGLLocationManager - -@optional - -#pragma mark Configuring Location Update Precision - -/** - Specifies the minimum distance (measured in meters) a device must move horizontally - before a location update is generated. - - The default value of this property is `kCLDistanceFilterNone` when `MGLMapView` uses its - default location manager. - - @see `CLLocationManager.distanceFilter` - */ -- (CLLocationDistance)distanceFilter; - -/** - Sets the minimum update distance in meters. - @param distanceFilter The distance filter in meters. - */ -- (void)setDistanceFilter:(CLLocationDistance) distanceFilter; - -/** - Specifies the accuracy of the location data. - - The default value is `kCLLocationAccuracyBest` when `MGLMapView` uses its - default location manager. - - @note Determining a location with greater accuracy requires more time and more power. - - @see `CLLocationManager.desiredAccuracy` - */ -- (CLLocationAccuracy)desiredAccuracy; - -/** - Sets the desired location accuracy. - - @param desiredAccuracy The desired location accuracy. - */ -- (void)setDesiredAccuracy:(CLLocationAccuracy)desiredAccuracy; - -/** - Specifies the type of user activity associated with the location updates. - - The location manager uses this property as a cue to determine when location updates - may be automatically paused. - - The default value is `CLActivityTypeOther` when `MGLMapView` uses its - default location manager. - - @see `CLLocationManager.activityType` - */ -- (CLActivityType)activityType; - -/** - Sets the type of user activity associated with the location updates. - - @param activityType The location's manager activity type. - */ -- (void)setActivityType:(CLActivityType)activityType; - -@required - -/** - The delegate to receive location updates. - - Do not set the location manager’s delegate yourself. `MGLMapView` sets this property - after the location manager becomes `MGLMapView`’s location manager. - */ -@property (nonatomic, weak) id delegate; - -#pragma mark Requesting Authorization for Location Services - -/** - Returns the current localization authorization status. - - @see `+[CLLocationManger authorizationStatus]` - */ -@property (nonatomic, readonly) CLAuthorizationStatus authorizationStatus; - -/** - Requests permission to use the location services whenever the app is running. - */ -- (void)requestAlwaysAuthorization; - -/** - Requests permission to use the location services while the app is in - the foreground. - */ -- (void)requestWhenInUseAuthorization; - -#pragma mark Initiating Location Updates - -/** - Starts the generation of location updates that reports the user's current location. - */ -- (void)startUpdatingLocation; - -/** - Stops the generation of location updates. - */ -- (void)stopUpdatingLocation; - -#pragma mark Initiating Heading Updates - -/** - Specifies a physical device orientation. - */ -@property (nonatomic) CLDeviceOrientation headingOrientation; - -/** - Starts the generation of heading updates that reports the user's current hading. - */ -- (void)startUpdatingHeading; - -/** - Stops the generation of heading updates. - */ -- (void)stopUpdatingHeading; - -/** - Dissmisses immediately the heading calibration view from screen. - */ -- (void)dismissHeadingCalibrationDisplay; - -@end - -/** - The `MGLLocationManagerDelegate` protocol defines a set of methods that respond - to location updates from an `MGLLocationManager` object that is serving as the - location manager of an `MGLMapView`. - */ -@protocol MGLLocationManagerDelegate - -#pragma mark Responding to Location Updates - -/** - Notifies the delegate with the new location data. - - @param manager The location manager reporting the update. - @param locations An array of `CLLocation` objects in chronological order, - with the last object representing the most recent location. This array - contains multiple `CLLocation` objects when `MGLMapView` uses its - default location manager. - */ -- (void)locationManager:(id)manager - didUpdateLocations:(NSArray *)locations; - -#pragma mark Responding to Heading Updates - -/** - Notifies the delegate with the new heading data. - - @param manager The location manager reporting the update. - @param newHeading The new heading update. - */ -- (void)locationManager:(id)manager - didUpdateHeading:(CLHeading *)newHeading; - -/** - Asks the delegate if the calibration alert should be displayed. - - @param manager The location manager reporting the calibration. - */ -- (BOOL)locationManagerShouldDisplayHeadingCalibration:(id)manager; - -#pragma mark Responding to Location Updates Errors - -/** - Notifies the delegate that the location manager was unable to retrieve - location updates. - - @param manager The location manager reporting the error. - @param error An error object containing the error code that indicates - why the location manager failed. - */ -- (void)locationManager:(id)manager - didFailWithError:(nonnull NSError *)error; - -@optional - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLLocationManager.m b/platform/darwin/src/MGLLocationManager.m deleted file mode 100644 index 29e3ccaa30f..00000000000 --- a/platform/darwin/src/MGLLocationManager.m +++ /dev/null @@ -1,116 +0,0 @@ -#import "MGLLocationManager_Private.h" - -@interface MGLCLLocationManager() - -@property (nonatomic) CLLocationManager *locationManager; - -@end - -@implementation MGLCLLocationManager - -- (instancetype)init -{ - if (self = [super init]) { - _locationManager = [[CLLocationManager alloc] init]; - _locationManager.delegate = self; - } - return self; -} - -@synthesize delegate; - -- (void)setHeadingOrientation:(CLDeviceOrientation)headingOrientation -{ - self.locationManager.headingOrientation = headingOrientation; -} - -- (CLDeviceOrientation)headingOrientation -{ - return self.locationManager.headingOrientation; -} - -- (void)setDesiredAccuracy:(CLLocationAccuracy)desiredAccuracy { - self.locationManager.desiredAccuracy = desiredAccuracy; -} - -- (CLLocationAccuracy)desiredAccuracy { - return self.locationManager.desiredAccuracy; -} - -- (CLAuthorizationStatus)authorizationStatus { - return [CLLocationManager authorizationStatus]; -} - -- (void)setActivityType:(CLActivityType)activityType { - self.locationManager.activityType = activityType; -} - -- (CLActivityType)activityType { - return self.locationManager.activityType; -} - -- (void)dismissHeadingCalibrationDisplay { - [self.locationManager dismissHeadingCalibrationDisplay]; -} - -- (void)requestAlwaysAuthorization { - [self.locationManager requestAlwaysAuthorization]; -} - -- (void)requestWhenInUseAuthorization { - [self.locationManager requestWhenInUseAuthorization]; -} - -- (void)startUpdatingHeading { - [self.locationManager startUpdatingHeading]; -} - -- (void)startUpdatingLocation { - [self.locationManager startUpdatingLocation]; -} - -- (void)stopUpdatingHeading { - [self.locationManager stopUpdatingHeading]; -} - -- (void)stopUpdatingLocation { - [self.locationManager stopUpdatingLocation]; -} - -- (void)dealloc -{ - [self.locationManager stopUpdatingLocation]; - [self.locationManager stopUpdatingHeading]; - self.locationManager.delegate = nil; - self.delegate = nil; -} - -#pragma mark - CLLocationManagerDelegate - -- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { - if ([self.delegate respondsToSelector:@selector(locationManager:didUpdateLocations:)]) { - [self.delegate locationManager:self didUpdateLocations:locations]; - } -} - -- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { - if ([self.delegate respondsToSelector:@selector(locationManager:didUpdateHeading:)]) { - [self.delegate locationManager:self didUpdateHeading:newHeading]; - } -} - -- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)manager { - if ([self.delegate respondsToSelector:@selector(locationManagerShouldDisplayHeadingCalibration:)]) { - return [self.delegate locationManagerShouldDisplayHeadingCalibration:self]; - } - - return NO; -} - -- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { - if ([self.delegate respondsToSelector:@selector(locationManager:didFailWithError:)]) { - [self.delegate locationManager:self didFailWithError:error]; - } -} - -@end diff --git a/platform/darwin/src/MGLLocationManager_Private.h b/platform/darwin/src/MGLLocationManager_Private.h deleted file mode 100644 index 4f09405e719..00000000000 --- a/platform/darwin/src/MGLLocationManager_Private.h +++ /dev/null @@ -1,5 +0,0 @@ -#import "MGLLocationManager.h" - -@interface MGLCLLocationManager : NSObject - -@end diff --git a/platform/darwin/src/MGLLoggingConfiguration.h b/platform/darwin/src/MGLLoggingConfiguration.h deleted file mode 100644 index 24450785844..00000000000 --- a/platform/darwin/src/MGLLoggingConfiguration.h +++ /dev/null @@ -1,99 +0,0 @@ -#import - -#import "MGLFoundation.h" - -#ifndef MGL_LOGGING_DISABLED - #ifndef MGL_LOGGING_ENABLE_DEBUG - #ifndef NDEBUG - #define MGL_LOGGING_ENABLE_DEBUG 1 - #endif - #endif - -NS_ASSUME_NONNULL_BEGIN - -/** - Constants indicating the message's logging level. - */ -typedef NS_ENUM(NSInteger, MGLLoggingLevel) { - /** - None-level won't print any messages. - */ - MGLLoggingLevelNone = 0, - /** - Fault-level messages contain system-level error information. - */ - MGLLoggingLevelFault, - /** - Error-level messages contain information that is intended to aid in process-level - errors. - */ - MGLLoggingLevelError, - /** - Warning-level messages contain warning information for potential risks. - */ - MGLLoggingLevelWarning, - /** - Info-level messages contain information that may be helpful for flow tracing - but is not essential. - */ - MGLLoggingLevelInfo, - /** - Debug-level messages contain information that may be helpful for troubleshooting - specific problems. - */ -#if MGL_LOGGING_ENABLE_DEBUG - MGLLoggingLevelDebug, -#endif - /** - Verbose-level will print all messages. - */ - MGLLoggingLevelVerbose, -}; - -/** - A block to be called once `loggingLevel` is set to a higher value than `MGLLoggingLevelNone`. - - @param loggingLevel The message logging level. - @param filePath The description of the file and method for the calling message. - @param line The line where the message is logged. - @param message The logging message. - */ -typedef void (^MGLLoggingBlockHandler)(MGLLoggingLevel loggingLevel, NSString *filePath, NSUInteger line, NSString *message); - -/** - The `MGLLoggingConfiguration` object provides a global way to set this SDK logging levels - and logging handler. - */ -MGL_EXPORT -@interface MGLLoggingConfiguration : NSObject - -/** - The handler this SDK uses to log messages. - - If this property is set to nil or if no custom handler is provided this property - is set to the default handler. - - The default handler uses `os_log` and `NSLog` for iOS 10+ and iOS < 10 respectively. - */ -@property (nonatomic, copy, null_resettable) MGLLoggingBlockHandler handler; - -/** - The logging level. - - The default value is `MGLLoggingLevelNone`. - - Setting this property includes logging levels less than or equal to the setted value. - */ -@property (assign, nonatomic) MGLLoggingLevel loggingLevel; - -/** - Returns the shared logging object. - */ -@property (class, nonatomic, readonly) MGLLoggingConfiguration *sharedConfiguration; - -- (MGLLoggingBlockHandler)handler UNAVAILABLE_ATTRIBUTE; - -@end - -NS_ASSUME_NONNULL_END -#endif diff --git a/platform/darwin/src/MGLLoggingConfiguration.mm b/platform/darwin/src/MGLLoggingConfiguration.mm deleted file mode 100644 index 75d24393651..00000000000 --- a/platform/darwin/src/MGLLoggingConfiguration.mm +++ /dev/null @@ -1,161 +0,0 @@ -#include -#include - -#import "MGLLoggingConfiguration_Private.h" - -#ifndef MGL_LOGGING_DISABLED -#if __has_builtin(__builtin_os_log_format) -#import -#endif - -namespace mbgl { - -class MGLCoreLoggingObserver : public Log :: Observer { -public: - //Return true not print messages at core level, and filter at platform level. - bool onRecord(EventSeverity severity, Event event, int64_t code, const std::string& msg) override{ - - NSString *message = [NSString stringWithFormat:@"[event]:%s [code]:%lld [message]:%@", Enum::toString(event), code, [NSString stringWithCString:msg.c_str() encoding:NSUTF8StringEncoding]]; - switch (severity) { - case EventSeverity::Debug: - MGLLogDebug(message); - break; - case EventSeverity::Info: - MGLLogInfo(message); - break; - case EventSeverity::Warning: - MGLLogWarning(message); - break; - case EventSeverity::Error: - MGLLogError(message); - break; - } - return true; - } -}; -} - -@implementation MGLLoggingConfiguration -{ - std::unique_ptr _coreLoggingObserver; -} - -+ (instancetype)sharedConfiguration { - static dispatch_once_t once; - static id sharedConfiguration; - dispatch_once(&once, ^{ - sharedConfiguration = [[self alloc] init]; - ((MGLLoggingConfiguration *)sharedConfiguration).handler = nil; - }); - return sharedConfiguration; -} - -- (id)init{ - if(self = [super init]){ - mbgl::Log::setObserver(std::make_unique()); - } - return self; -} - -- (void)setHandler:(void (^)(MGLLoggingLevel, NSString *, NSUInteger, NSString *))handler { - - if (!handler) { - _handler = [self defaultBlockHandler]; - } else { - _handler = handler; - } -} - -- (void)logCallingFunction:(const char *)callingFunction functionLine:(NSUInteger)functionLine messageType:(MGLLoggingLevel)type format:(id)messageFormat, ... { - va_list formatList; - va_start(formatList, messageFormat); - NSString *formattedMessage = [[NSString alloc] initWithFormat:messageFormat arguments:formatList]; - va_end(formatList); - - _handler(type, @(callingFunction), functionLine, formattedMessage); - -} - -- (MGLLoggingBlockHandler)defaultBlockHandler { - MGLLoggingBlockHandler mapboxHandler = ^(MGLLoggingLevel level, NSString *fileName, NSUInteger line, NSString *message) { - - if (@available(iOS 10.0, macOS 10.12.0, *)) { - static dispatch_once_t once; - static os_log_t info_log; -#if MGL_LOGGING_ENABLE_DEBUG - static os_log_t debug_log; -#endif - static os_log_t error_log; - static os_log_t fault_log; - static os_log_type_t log_types[] = { OS_LOG_TYPE_DEFAULT, - OS_LOG_TYPE_INFO, -#if MGL_LOGGING_ENABLE_DEBUG - OS_LOG_TYPE_DEBUG, -#endif - OS_LOG_TYPE_ERROR, - OS_LOG_TYPE_FAULT }; - dispatch_once(&once, ^ { - info_log = os_log_create("com.mapbox.Mapbox", "INFO"); -#if MGL_LOGGING_ENABLE_DEBUG - debug_log = os_log_create("com.mapbox.Mapbox", "DEBUG"); -#endif - error_log = os_log_create("com.mapbox.Mapbox", "ERROR"); - fault_log = os_log_create("com.mapbox.Mapbox", "FAULT"); - }); - - os_log_t mapbox_log; - switch (level) { - case MGLLoggingLevelInfo: - case MGLLoggingLevelWarning: - mapbox_log = info_log; - break; -#if MGL_LOGGING_ENABLE_DEBUG - case MGLLoggingLevelDebug: - mapbox_log = debug_log; - break; -#endif - case MGLLoggingLevelError: - mapbox_log = error_log; - break; - case MGLLoggingLevelFault: - mapbox_log = fault_log; - break; - case MGLLoggingLevelNone: - default: - break; - } - - os_log_type_t logType = log_types[level]; - os_log_with_type(mapbox_log, logType, "%@ - %lu: %@", fileName, (unsigned long)line, message); - } else { - NSString *category; - switch (level) { - case MGLLoggingLevelInfo: - case MGLLoggingLevelWarning: - category = @"INFO"; - break; -#if MGL_LOGGING_ENABLE_DEBUG - case MGLLoggingLevelDebug: - category = @"DEBUG"; - break; -#endif - case MGLLoggingLevelError: - category = @"ERROR"; - break; - case MGLLoggingLevelFault: - category = @"FAULT"; - break; - case MGLLoggingLevelNone: - default: - break; - } - - NSLog(@"[%@] %@ - %lu: %@", category, fileName, (unsigned long)line, message); - } - }; - - return mapboxHandler; -} - -@end -#endif diff --git a/platform/darwin/src/MGLLoggingConfiguration_Private.h b/platform/darwin/src/MGLLoggingConfiguration_Private.h deleted file mode 100644 index 40b4df440d6..00000000000 --- a/platform/darwin/src/MGLLoggingConfiguration_Private.h +++ /dev/null @@ -1,67 +0,0 @@ -#import "MGLLoggingConfiguration.h" - -NS_INLINE NSString *MGLStringFromBOOL(BOOL value) { - return value ? @"YES" : @"NO"; -} - -#if TARGET_OS_OSX -NS_INLINE NSString *MGLStringFromNSEdgeInsets(NSEdgeInsets insets) { - return [NSString stringWithFormat:@"{ top: %f, left: %f, bottom: %f, right: %f", insets.top, insets.left, insets.bottom, insets.right]; -} -#endif - -#ifdef MGL_LOGGING_DISABLED - -#define MGLLogInfo(...) -#define MGLLogDebug(...) -#define MGLLogWarning(...) -#define MGLLogError(...) -#define MGLLogFault(...) - -#else - -#if MGL_LOGGING_ENABLE_DEBUG - #define MGLLogDebug(message, ...) MGLLogWithType(MGLLoggingLevelDebug, __PRETTY_FUNCTION__, __LINE__, message, ##__VA_ARGS__) -#else - #define MGLLogDebug(...) -#endif - -#define MGLLogInfo(message, ...) MGLLogWithType(MGLLoggingLevelInfo, __PRETTY_FUNCTION__, __LINE__, message, ##__VA_ARGS__) -#define MGLLogWarning(message, ...) MGLLogWithType(MGLLoggingLevelWarning, __PRETTY_FUNCTION__, __LINE__, message, ##__VA_ARGS__) -#define MGLLogError(message, ...) MGLLogWithType(MGLLoggingLevelError, __PRETTY_FUNCTION__, __LINE__, message, ##__VA_ARGS__) -#define MGLLogFault(message, ...) MGLLogWithType(MGLLoggingLevelFault, __PRETTY_FUNCTION__, __LINE__, message, ##__VA_ARGS__) - -#endif - -#define MGLAssert(expression, message, ...) \ - __extension__({ \ - if (__builtin_expect(!(expression), 0)) { \ - MGLLogFault(message, ##__VA_ARGS__); \ - } \ - NSAssert(expression, message, ##__VA_ARGS__); \ - }) -#define MGLCAssert(expression, message, ...) \ - __extension__({ \ - if (__builtin_expect(!(expression), 0)) { \ - MGLLogFault(message, ##__VA_ARGS__); \ - } \ - NSCAssert(expression, message, ##__VA_ARGS__); \ - }) - - -#ifndef MGL_LOGGING_DISABLED - -#define MGLLogWithType(type, function, line, message, ...) \ -{ \ - if ([MGLLoggingConfiguration sharedConfiguration].loggingLevel != MGLLoggingLevelNone && type <= [MGLLoggingConfiguration sharedConfiguration].loggingLevel) \ - { \ - [[MGLLoggingConfiguration sharedConfiguration] logCallingFunction:function functionLine:line messageType:type format:(message), ##__VA_ARGS__]; \ - } \ -} - -@interface MGLLoggingConfiguration (Private) - -- (void)logCallingFunction:(const char *)callingFunction functionLine:(NSUInteger)functionLine messageType:(MGLLoggingLevel)type format:(id)messageFormat, ...; - -@end -#endif diff --git a/platform/darwin/src/MGLMapCamera.h b/platform/darwin/src/MGLMapCamera.h deleted file mode 100644 index c0e40bc33b4..00000000000 --- a/platform/darwin/src/MGLMapCamera.h +++ /dev/null @@ -1,152 +0,0 @@ -#import -#import -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - An `MGLMapCamera` object represents a viewpoint from which the user observes - some point on an `MGLMapView`. - - #### Related examples - See the - Camera animation example to learn how to create a camera that rotates - around a central point. See the - Restrict map panning to an area example to learn how to restrict map - panning using `MGLMapViewDelegate`'s -`-mapView:shouldChangeFromCamera:toCamera:` method. - */ -MGL_EXPORT -@interface MGLMapCamera : NSObject - -/** Coordinate at the center of the map view. */ -@property (nonatomic) CLLocationCoordinate2D centerCoordinate; - -/** Heading measured in degrees clockwise from true north. */ -@property (nonatomic) CLLocationDirection heading; - -/** - Pitch toward the horizon measured in degrees, with 0 degrees resulting in a - two-dimensional map. - */ -@property (nonatomic) CGFloat pitch; - -/** - The altitude (measured in meters) above the map at which the camera is - situated. - - The altitude is the distance from the viewpoint to the map, perpendicular to - the map plane. This property does not account for physical elevation. - - This property’s value may be less than that of the `viewingDistance` property. - Setting this property automatically updates the `viewingDistance` property - based on the `pitch` property’s current value. - */ -@property (nonatomic) CLLocationDistance altitude; - -/** - The straight-line distance from the viewpoint to the `centerCoordinate`. - - Setting this property automatically updates the `altitude` property based on - the `pitch` property’s current value. - */ -@property (nonatomic) CLLocationDistance viewingDistance; - -/** Returns a new camera with all properties set to 0. */ -+ (instancetype)camera; - -/** - Returns a new camera based on information about the camera’s viewpoint - and focus point. - - @param centerCoordinate The geographic coordinate on which the map should be - centered. - @param eyeCoordinate The geometric coordinate at which the camera should be - situated. - @param eyeAltitude The altitude (measured in meters) above the map at which the - camera should be situated. The altitude may be less than the distance from - the camera’s viewpoint to the camera’s focus point. - */ -+ (instancetype)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate - fromEyeCoordinate:(CLLocationCoordinate2D)eyeCoordinate - eyeAltitude:(CLLocationDistance)eyeAltitude; - -/** - Returns a new camera with the given distance, pitch, and heading. - - This method interprets the distance as a straight-line distance from the - viewpoint to the center coordinate. To specify the altitude of the viewpoint, - use the `-cameraLookingAtCenterCoordinate:altitude:pitch:heading:` method. - - @param centerCoordinate The geographic coordinate on which the map should be - centered. - @param distance The straight-line distance from the viewpoint to the - `centerCoordinate`. - @param pitch The viewing angle of the camera, measured in degrees. A value of - `0` results in a camera pointed straight down at the map. Angles greater - than `0` result in a camera angled toward the horizon. - @param heading The camera’s heading, measured in degrees clockwise from true - north. A value of `0` means that the top edge of the map view corresponds to - true north. The value `90` means the top of the map is pointing due east. - The value `180` means the top of the map points due south, and so on. - */ -+ (instancetype)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate - acrossDistance:(CLLocationDistance)distance - pitch:(CGFloat)pitch - heading:(CLLocationDirection)heading; - -/** - Returns a new camera with the given altitude, pitch, and heading. - - @param centerCoordinate The geographic coordinate on which the map should be - centered. - @param altitude The altitude (measured in meters) above the map at which the - camera should be situated. The altitude may be less than the distance from - the camera’s viewpoint to the camera’s focus point. - @param pitch The viewing angle of the camera, measured in degrees. A value of - `0` results in a camera pointed straight down at the map. Angles greater - than `0` result in a camera angled toward the horizon. - @param heading The camera’s heading, measured in degrees clockwise from true - north. A value of `0` means that the top edge of the map view corresponds to - true north. The value `90` means the top of the map is pointing due east. - The value `180` means the top of the map points due south, and so on. - */ -+ (instancetype)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate - altitude:(CLLocationDistance)altitude - pitch:(CGFloat)pitch - heading:(CLLocationDirection)heading; - -/** - @note This initializer incorrectly interprets the `distance` parameter. To - specify the straight-line distance from the viewpoint to `centerCoordinate`, - use the `-cameraLookingAtCenterCoordinate:acrossDistance:pitch:heading:` - method. To specify the altitude of the viewpoint, use the - `-cameraLookingAtCenterCoordinate:altitude:pitch:heading:` method, which has - the same behavior as this initializer. - */ -+ (instancetype)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate - fromDistance:(CLLocationDistance)distance - pitch:(CGFloat)pitch - heading:(CLLocationDirection)heading -__attribute__((deprecated("Use -cameraLookingAtCenterCoordinate:acrossDistance:pitch:heading: " - "or -cameraLookingAtCenterCoordinate:altitude:pitch:heading:."))); - -/** - Returns a Boolean value indicating whether the given camera is functionally - equivalent to the receiver. - - Unlike `-isEqual:`, this method returns `YES` if the difference between the - coordinates, altitudes, pitches, or headings of the two camera objects is - negligible. - - @param otherCamera The camera with which to compare the receiver. - @return A Boolean value indicating whether the two cameras are functionally - equivalent. - */ -- (BOOL)isEqualToMapCamera:(MGLMapCamera *)otherCamera; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLMapCamera.mm b/platform/darwin/src/MGLMapCamera.mm deleted file mode 100644 index 0f5dd558a89..00000000000 --- a/platform/darwin/src/MGLMapCamera.mm +++ /dev/null @@ -1,196 +0,0 @@ -#import "MGLMapCamera.h" -#import "MGLGeometry_Private.h" -#import "MGLLoggingConfiguration_Private.h" - -#import - -#include - -BOOL MGLEqualFloatWithAccuracy(CGFloat left, CGFloat right, CGFloat accuracy) -{ - return MAX(left, right) - MIN(left, right) <= accuracy; -} - -@implementation MGLMapCamera - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -+ (instancetype)camera -{ - return [[self alloc] init]; -} - -+ (instancetype)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate - fromEyeCoordinate:(CLLocationCoordinate2D)eyeCoordinate - eyeAltitude:(CLLocationDistance)eyeAltitude -{ - CLLocationDirection heading = -1; - CGFloat pitch = -1; - if (CLLocationCoordinate2DIsValid(centerCoordinate) && CLLocationCoordinate2DIsValid(eyeCoordinate)) { - heading = MGLDirectionBetweenCoordinates(eyeCoordinate, centerCoordinate); - - CLLocation *centerLocation = [[CLLocation alloc] initWithLatitude:centerCoordinate.latitude - longitude:centerCoordinate.longitude]; - CLLocation *eyeLocation = [[CLLocation alloc] initWithLatitude:eyeCoordinate.latitude - longitude:eyeCoordinate.longitude]; - CLLocationDistance groundDistance = [eyeLocation distanceFromLocation:centerLocation]; - CGFloat radianPitch = atan2(eyeAltitude, groundDistance); - pitch = mbgl::util::wrap(90 - MGLDegreesFromRadians(radianPitch), 0.0, 360.0); - } - - return [[self alloc] initWithCenterCoordinate:centerCoordinate - altitude:eyeAltitude - pitch:pitch - heading:heading]; -} - -+ (instancetype)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate - acrossDistance:(CLLocationDistance)distance - pitch:(CGFloat)pitch - heading:(CLLocationDirection)heading -{ - // Angle at the viewpoint formed by the straight lines running perpendicular - // to the ground and toward the center coordinate. - CLLocationDirection eyeAngle = 90 - pitch; - CLLocationDistance altitude = distance * sin(MGLRadiansFromDegrees(eyeAngle)); - - return [[self alloc] initWithCenterCoordinate:centerCoordinate - altitude:altitude - pitch:pitch - heading:heading]; -} - -+ (instancetype)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate - altitude:(CLLocationDistance)altitude - pitch:(CGFloat)pitch - heading:(CLLocationDirection)heading -{ - return [[self alloc] initWithCenterCoordinate:centerCoordinate - altitude:altitude - pitch:pitch - heading:heading]; -} - -+ (instancetype)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate - fromDistance:(CLLocationDistance)distance - pitch:(CGFloat)pitch - heading:(CLLocationDirection)heading -{ - // TODO: Remove this compatibility shim in favor of `-cameraLookingAtCenterCoordinate:acrossDistance:pitch:heading:. - // https://github.com/mapbox/mapbox-gl-native/issues/12943 - return [MGLMapCamera cameraLookingAtCenterCoordinate:centerCoordinate - altitude:distance - pitch:pitch - heading:heading]; -} - -- (instancetype)initWithCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate - altitude:(CLLocationDistance)altitude - pitch:(CGFloat)pitch - heading:(CLLocationDirection)heading -{ - MGLLogDebug(@"Initializing withCenterCoordinate: %@ altitude: %.0fm pitch: %f° heading: %f°", MGLStringFromCLLocationCoordinate2D(centerCoordinate), altitude, pitch, heading); - if (self = [super init]) - { - _centerCoordinate = centerCoordinate; - _altitude = altitude; - _pitch = pitch; - _heading = heading; - } - return self; -} - -- (nullable instancetype)initWithCoder:(NSCoder *)coder -{ - MGLLogInfo(@"Initialiazing with coder."); - if (self = [super init]) - { - _centerCoordinate = CLLocationCoordinate2DMake([coder decodeDoubleForKey:@"centerLatitude"], - [coder decodeDoubleForKey:@"centerLongitude"]); - _altitude = [coder decodeDoubleForKey:@"altitude"]; - _pitch = [coder decodeDoubleForKey:@"pitch"]; - _heading = [coder decodeDoubleForKey:@"heading"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder -{ - [coder encodeDouble:_centerCoordinate.latitude forKey:@"centerLatitude"]; - [coder encodeDouble:_centerCoordinate.longitude forKey:@"centerLongitude"]; - [coder encodeDouble:_altitude forKey:@"altitude"]; - [coder encodeDouble:_pitch forKey:@"pitch"]; - [coder encodeDouble:_heading forKey:@"heading"]; -} - -- (id)copyWithZone:(nullable NSZone *)zone -{ - return [[[self class] allocWithZone:zone] initWithCenterCoordinate:_centerCoordinate - altitude:_altitude - pitch:_pitch - heading:_heading]; -} - -+ (NSSet *)keyPathsForValuesAffectingViewingDistance { - return [NSSet setWithObjects:@"altitude", @"pitch", nil]; -} - -- (CLLocationDistance)viewingDistance { - CLLocationDirection eyeAngle = 90 - self.pitch; - return self.altitude / sin(MGLRadiansFromDegrees(eyeAngle)); -} - -- (void)setViewingDistance:(CLLocationDistance)distance { - MGLLogDebug(@"Setting viewingDistance: %f", distance); - CLLocationDirection eyeAngle = 90 - self.pitch; - self.altitude = distance * sin(MGLRadiansFromDegrees(eyeAngle)); -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; centerCoordinate = %f, %f; altitude = %.0fm; heading = %.0f°; pitch = %.0f°>", - NSStringFromClass([self class]), (void *)self, _centerCoordinate.latitude, _centerCoordinate.longitude, _altitude, _heading, _pitch]; -} - -- (BOOL)isEqual:(id)other -{ - if ( ! [other isKindOfClass:[self class]]) - { - return NO; - } - if (other == self) - { - return YES; - } - - MGLMapCamera *otherCamera = other; - return (_centerCoordinate.latitude == otherCamera.centerCoordinate.latitude - && _centerCoordinate.longitude == otherCamera.centerCoordinate.longitude - && _altitude == otherCamera.altitude - && _pitch == otherCamera.pitch && _heading == otherCamera.heading); -} - -- (BOOL)isEqualToMapCamera:(MGLMapCamera *)otherCamera -{ - if (otherCamera == self) - { - return YES; - } - - return (MGLEqualFloatWithAccuracy(_centerCoordinate.latitude, otherCamera.centerCoordinate.latitude, 1e-6) - && MGLEqualFloatWithAccuracy(_centerCoordinate.longitude, otherCamera.centerCoordinate.longitude, 1e-6) - && MGLEqualFloatWithAccuracy(_altitude, otherCamera.altitude, 1e-6) - && MGLEqualFloatWithAccuracy(_pitch, otherCamera.pitch, 1) - && MGLEqualFloatWithAccuracy(_heading, otherCamera.heading, 1)); -} - -- (NSUInteger)hash -{ - return (@(_centerCoordinate.latitude).hash + @(_centerCoordinate.longitude).hash - + @(_altitude).hash + @(_pitch).hash + @(_heading).hash); -} - -@end diff --git a/platform/darwin/src/MGLMapSnapshotter.h b/platform/darwin/src/MGLMapSnapshotter.h deleted file mode 100644 index 98c8e8a3759..00000000000 --- a/platform/darwin/src/MGLMapSnapshotter.h +++ /dev/null @@ -1,281 +0,0 @@ -#import -#import "MGLTypes.h" -#import "MGLGeometry.h" -#import "MGLMapCamera.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - An overlay that is placed within a `MGLMapSnapshot`. - To access this object, use `-[MGLMapSnapshotter startWithOverlayHandler:completionHandler:]`. - */ - -MGL_EXPORT -@interface MGLMapSnapshotOverlay : NSObject - -/** - The current `CGContext` that snapshot is drawing within. You may use this context - to perform additional custom drawing. - */ -@property (nonatomic, readonly) CGContextRef context; - -#if TARGET_OS_IPHONE -/** - Converts the specified map coordinate to a point in the coordinate space of the - context. - */ -- (CGPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate; - -/** - Converts the specified context point to a map coordinate. - */ -- (CLLocationCoordinate2D)coordinateForPoint:(CGPoint)point; - -#else -/** - Converts the specified map coordinate to a point in the coordinate space of the - context. - */ -- (NSPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate; - -/** - Converts the specified context point to a map coordinate. - */ -- (CLLocationCoordinate2D)coordinateForPoint:(NSPoint)point; -#endif - -@end - -/** -A block provided during the snapshot drawing process, enabling the ability to -draw custom overlays rendered with Core Graphics. - - @param snapshotOverlay The `MGLMapSnapshotOverlay` provided during snapshot drawing. - */ -typedef void (^MGLMapSnapshotOverlayHandler)(MGLMapSnapshotOverlay * snapshotOverlay); - -/** - The options to use when creating images with the `MGLMapSnapshotter`. - */ -MGL_EXPORT -@interface MGLMapSnapshotOptions : NSObject - -/** - Creates a set of options with the minimum required information. - - @param styleURL URL of the map style to snapshot. The URL may be a full HTTP or - HTTPS URL, a Mapbox style URL - (`mapbox://styles/{user}/{style}`), or a path to a local file relative to - the application’s resource path. Specify `nil` for the default style. - @param size The image size. - */ -- (instancetype)initWithStyleURL:(nullable NSURL *)styleURL camera:(MGLMapCamera *)camera size:(CGSize)size; - -#pragma mark - Configuring the Map - -/** - URL of the map style to snapshot. - */ -@property (nonatomic, readonly) NSURL *styleURL; - -/** - The zoom level. - - The default zoom level is 0. If this property is non-zero and the camera - property is non-nil, the camera’s altitude is ignored in favor of this - property’s value. - */ -@property (nonatomic) double zoomLevel; - -/** - A camera representing the viewport visible in the snapshot. - - If this property is non-nil and the `coordinateBounds` property is set to a - non-empty coordinate bounds, the camera’s center coordinate and altitude are - ignored in favor of the `coordinateBounds` property. - */ -@property (nonatomic) MGLMapCamera *camera; - -/** - The coordinate rectangle that encompasses the bounds to capture. - - If this property is non-empty and the camera property is non-nil, the camera’s - center coordinate and altitude are ignored in favor of this property’s value. - */ -@property (nonatomic) MGLCoordinateBounds coordinateBounds; - -#pragma mark - Configuring the Image - -/** - The size of the output image, measured in points. - - */ -@property (nonatomic, readonly) CGSize size; - -/** - The scale of the output image. Defaults to the main screen scale. - - The minimum scale is 1. - */ -@property (nonatomic) CGFloat scale; - -@end - -/** - An image generated by a snapshotter object. - */ -MGL_EXPORT -@interface MGLMapSnapshot : NSObject - -#if TARGET_OS_IPHONE -/** - Converts the specified map coordinate to a point in the coordinate space of the - image. - */ -- (CGPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate; - -/** - Converts the specified image point to a map coordinate. - */ -- (CLLocationCoordinate2D)coordinateForPoint:(CGPoint)point; - -/** - The image of the map’s content. - */ -@property (nonatomic, readonly) UIImage *image; -#else -/** - Converts the specified map coordinate to a point in the coordinate space of the - image. - */ -- (NSPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate; - -/** - Converts the specified image point to a map coordinate. - */ -- (CLLocationCoordinate2D)coordinateForPoint:(NSPoint)point; - - -/** - The image of the map’s content. - */ -@property (nonatomic, readonly) NSImage *image; -#endif - -@end - -/** - A block to processes the result or error of a snapshot request. - - @param snapshot The `MGLMapSnapshot` that was generated or `nil` if an error - occurred. - @param error The error that occured or `nil` when successful. - */ -typedef void (^MGLMapSnapshotCompletionHandler)(MGLMapSnapshot* _Nullable snapshot, NSError* _Nullable error); - -/** - An `MGLMapSnapshotter` generates static raster images of the map. Each snapshot - image depicts a portion of a map defined by an `MGLMapSnapshotOptions` object - you provide. The snapshotter generates an `MGLMapSnapshot` object - asynchronously, passing it into a completion handler once tiles and other - resources needed for the snapshot are finished loading. - - You can change the snapshotter’s options at any time and reuse the snapshotter - for multiple distinct snapshots; however, the snapshotter can only generate one - snapshot at a time. If you need to generate multiple snapshots concurrently, - create multiple snapshotter objects. - - For an interactive map, use the `MGLMapView` class. Both `MGLMapSnapshotter` - and `MGLMapView` are compatible with offline packs managed by the - `MGLOfflineStorage` class. - - From a snapshot, you can obtain an image and convert geographic coordinates to - the image’s coordinate space in order to superimpose markers and overlays. If - you do not need offline map functionality, you can use the `Snapshot` class in - [MapboxStatic.swift](https://github.com/mapbox/MapboxStatic.swift/) to generate - static map images with overlays. - - ### Example - - ```swift - let camera = MGLMapCamera(lookingAtCenter: CLLocationCoordinate2D(latitude: 37.7184, longitude: -122.4365), altitude: 100, pitch: 20, heading: 0) - - let options = MGLMapSnapshotOptions(styleURL: MGLStyle.satelliteStreetsStyleURL, camera: camera, size: CGSize(width: 320, height: 480)) - options.zoomLevel = 10 - - let snapshotter = MGLMapSnapshotter(options: options) - snapshotter.start { (snapshot, error) in - if let error = error { - fatalError(error.localizedDescription) - } - - image = snapshot?.image - } - ``` - - #### Related examples - See the - Create a static map snapshot example to learn how to use the - `MGLMapSnapshotter` to generate a static image based on an `MGLMapView` - object's style, camera, and view bounds. - */ -MGL_EXPORT -@interface MGLMapSnapshotter : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -/** - Initializes and returns a map snapshotter object that produces snapshots - according to the given options. - - @param options The options to use when generating a map snapshot. - @return An initialized map snapshotter. - */ -- (instancetype)initWithOptions:(MGLMapSnapshotOptions *)options NS_DESIGNATED_INITIALIZER; - -/** - Starts the snapshot creation and executes the specified block with the result. - - @param completionHandler The block to handle the result in. - */ -- (void)startWithCompletionHandler:(MGLMapSnapshotCompletionHandler)completionHandler; - -/** - Starts the snapshot creation and executes the specified block with the result - on the specified queue. - - @param queue The queue to handle the result on. - @param completionHandler The block to handle the result in. - */ -- (void)startWithQueue:(dispatch_queue_t)queue completionHandler:(MGLMapSnapshotCompletionHandler)completionHandler; - -/** - Starts the snapshot creation and executes the specified blocks with the result - on the specified queue. Use this option if you want to add custom drawing on top of the - resulting `MGLMapSnapShot`. - @param overlayHandler The block to handle manipulation of the `MGLMapSnapshotter`'s `CGContext`. - @param completionHandler The block to handle the result in. - */ -- (void)startWithOverlayHandler:(MGLMapSnapshotOverlayHandler)overlayHandler completionHandler:(MGLMapSnapshotCompletionHandler)completionHandler; - -/** - Cancels the snapshot creation request, if any. - - Once you call this method, you cannot resume the snapshot. In order to obtain - the snapshot, create a new `MGLMapSnapshotter` object. - */ -- (void)cancel; - -/** - The options to use when generating a map snapshot. - */ -@property (nonatomic) MGLMapSnapshotOptions *options; - -/** - Indicates whether a snapshot is currently being generated. - */ -@property (nonatomic, readonly, getter=isLoading) BOOL loading; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLMapSnapshotter.mm b/platform/darwin/src/MGLMapSnapshotter.mm deleted file mode 100644 index f3e9e7a41ec..00000000000 --- a/platform/darwin/src/MGLMapSnapshotter.mm +++ /dev/null @@ -1,752 +0,0 @@ -#import "MGLMapSnapshotter.h" - -#import -#import -#import -#import -#import -#import -#import -#import - -#import "MGLOfflineStorage_Private.h" -#import "MGLGeometry_Private.h" -#import "NSBundle+MGLAdditions.h" -#import "MGLStyle.h" -#import "MGLAttributionInfo_Private.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLRendererConfiguration.h" -#import "MGLMapSnapshotter_Private.h" - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -#import "MGLMapboxEvents.h" -#endif - -#if TARGET_OS_IPHONE -#import "UIImage+MGLAdditions.h" -#else -#import "NSImage+MGLAdditions.h" -#import -#import -#endif - -const CGPoint MGLLogoImagePosition = CGPointMake(8, 8); -const CGFloat MGLSnapshotterMinimumPixelSize = 64; - - -@interface MGLMapSnapshotOverlay() -@property (nonatomic, assign) CGFloat scale; -- (instancetype)initWithContext:(CGContextRef)context scale:(CGFloat)scale pointForFn:(mbgl::MapSnapshotter::PointForFn)pointForFn latLngForFn:(mbgl::MapSnapshotter::LatLngForFn)latLngForFn; - -@end - -@implementation MGLMapSnapshotOverlay { - mbgl::MapSnapshotter::PointForFn _pointForFn; - mbgl::MapSnapshotter::LatLngForFn _latLngForFn; -} - -- (instancetype) initWithContext:(CGContextRef)context scale:(CGFloat)scale pointForFn:(mbgl::MapSnapshotter::PointForFn)pointForFn latLngForFn:(mbgl::MapSnapshotter::LatLngForFn)latLngForFn { - self = [super init]; - if (self) { - _context = context; - _scale = scale; - _pointForFn = pointForFn; - _latLngForFn = latLngForFn; - } - - return self; -} - -#if TARGET_OS_IPHONE - -- (CGPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate -{ - mbgl::ScreenCoordinate sc = _pointForFn(MGLLatLngFromLocationCoordinate2D(coordinate)); - return CGPointMake(sc.x, sc.y); -} - -- (CLLocationCoordinate2D)coordinateForPoint:(CGPoint)point -{ - mbgl::LatLng latLng = _latLngForFn(mbgl::ScreenCoordinate(point.x, point.y)); - return MGLLocationCoordinate2DFromLatLng(latLng); -} - -#else - -- (NSPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate -{ - mbgl::ScreenCoordinate sc = _pointForFn(MGLLatLngFromLocationCoordinate2D(coordinate)); - CGFloat height = ((CGFloat)CGBitmapContextGetHeight(self.context))/self.scale; - return NSMakePoint(sc.x, height - sc.y); -} - -- (CLLocationCoordinate2D)coordinateForPoint:(NSPoint)point -{ - CGFloat height = ((CGFloat)CGBitmapContextGetHeight(self.context))/self.scale; - auto screenCoord = mbgl::ScreenCoordinate(point.x, height - point.y); - mbgl::LatLng latLng = _latLngForFn(screenCoord); - return MGLLocationCoordinate2DFromLatLng(latLng); -} - -#endif -@end - -@implementation MGLMapSnapshotOptions - -- (instancetype _Nonnull)initWithStyleURL:(nullable NSURL *)styleURL camera:(MGLMapCamera *)camera size:(CGSize)size -{ - MGLLogDebug(@"Initializing withStyleURL: %@ camera: %@ size: %@", styleURL, camera, MGLStringFromSize(size)); - self = [super init]; - if (self) - { - if ( !styleURL) - { - styleURL = [MGLStyle streetsStyleURLWithVersion:MGLStyleDefaultVersion]; - } - _styleURL = styleURL; - _size = size; - _camera = camera; -#if TARGET_OS_IPHONE - _scale = [UIScreen mainScreen].scale; -#else - _scale = [NSScreen mainScreen].backingScaleFactor; -#endif - } - return self; -} - -@end - -@interface MGLMapSnapshot() -- (instancetype)initWithImage:(nullable MGLImage *)image scale:(CGFloat)scale pointForFn:(mbgl::MapSnapshotter::PointForFn)pointForFn latLngForFn:(mbgl::MapSnapshotter::LatLngForFn)latLngForFn; - -@property (nonatomic) CGFloat scale; -@end - -@implementation MGLMapSnapshot { - mbgl::MapSnapshotter::PointForFn _pointForFn; - mbgl::MapSnapshotter::LatLngForFn _latLngForFn; -} - -- (instancetype)initWithImage:(nullable MGLImage *)image scale:(CGFloat)scale pointForFn:(mbgl::MapSnapshotter::PointForFn)pointForFn latLngForFn:(mbgl::MapSnapshotter::LatLngForFn)latLngForFn -{ - self = [super init]; - if (self) { - _pointForFn = pointForFn; - _latLngForFn = latLngForFn; - _scale = scale; - _image = image; - } - return self; -} - -#if TARGET_OS_IPHONE - -- (CGPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate -{ - mbgl::ScreenCoordinate sc = _pointForFn(MGLLatLngFromLocationCoordinate2D(coordinate)); - return CGPointMake(sc.x, sc.y); -} - -- (CLLocationCoordinate2D)coordinateForPoint:(CGPoint)point -{ - mbgl::LatLng latLng = _latLngForFn(mbgl::ScreenCoordinate(point.x, point.y)); - return MGLLocationCoordinate2DFromLatLng(latLng); -} - -#else - -- (NSPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate -{ - mbgl::ScreenCoordinate sc = _pointForFn(MGLLatLngFromLocationCoordinate2D(coordinate)); - return NSMakePoint(sc.x, self.image.size.height - sc.y); -} - -- (CLLocationCoordinate2D)coordinateForPoint:(NSPoint)point -{ - auto screenCoord = mbgl::ScreenCoordinate(point.x, self.image.size.height - point.y); - mbgl::LatLng latLng = _latLngForFn(screenCoord); - return MGLLocationCoordinate2DFromLatLng(latLng); -} - -#endif - -@end - -@interface MGLMapSnapshotter() -@property (nonatomic) BOOL cancelled; -@property (nonatomic) BOOL terminated; -@property (nonatomic) dispatch_queue_t resultQueue; -@property (nonatomic, copy) MGLMapSnapshotCompletionHandler completion; -+ (void)completeWithErrorCode:(MGLErrorCode)errorCode description:(nonnull NSString*)description onQueue:(dispatch_queue_t)queue completion:(MGLMapSnapshotCompletionHandler)completion; -@end - -@implementation MGLMapSnapshotter { - std::unique_ptr _mbglMapSnapshotter; - std::unique_ptr> _snapshotCallback; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - if (_completion) { - MGLAssert(_snapshotCallback, @"Snapshot in progress - there should be a valid callback"); - - [MGLMapSnapshotter completeWithErrorCode:MGLErrorCodeSnapshotFailed - description:@"MGLMapSnapshotter deallocated prior to snapshot completion." - onQueue:_resultQueue - completion:_completion]; - } -} - - -- (instancetype)init { - NSAssert(NO, @"Please use -[MGLMapSnapshotter initWithOptions:]"); - [super doesNotRecognizeSelector:_cmd]; - return nil; -} - -- (instancetype)initWithOptions:(MGLMapSnapshotOptions *)options -{ - MGLLogDebug(@"Initializing withOptions: %@", options); - self = [super init]; - if (self) { - [self setOptions:options]; -#if TARGET_OS_IPHONE - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:nil]; -#else - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:NSApplicationWillTerminateNotification object:nil]; -#endif -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [MGLMapboxEvents pushTurnstileEvent]; -#endif - } - return self; -} - -- (void)applicationWillTerminate:(NSNotification *)notification -{ - if (self.completion) { - [self cancel]; - } - - _mbglMapSnapshotter.reset(); - _snapshotCallback.reset(); - - self.terminated = YES; -} - -- (void)startWithCompletionHandler:(MGLMapSnapshotCompletionHandler)completion -{ - MGLLogDebug(@"Starting withCompletionHandler: %@", completion); - [self startWithQueue:dispatch_get_main_queue() completionHandler:completion]; -} - -- (void)startWithQueue:(dispatch_queue_t)queue completionHandler:(MGLMapSnapshotCompletionHandler)completionHandler { - [self startWithQueue:queue overlayHandler:nil completionHandler:completionHandler]; -} - -- (void)startWithOverlayHandler:(MGLMapSnapshotOverlayHandler)overlayHandler completionHandler:(MGLMapSnapshotCompletionHandler)completion { - [self startWithQueue:dispatch_get_main_queue() overlayHandler:overlayHandler completionHandler:completion]; -} - -- (void)startWithQueue:(dispatch_queue_t)queue overlayHandler:(MGLMapSnapshotOverlayHandler)overlayHandler completionHandler:(MGLMapSnapshotCompletionHandler)completion -{ - if (!mbgl::Scheduler::GetCurrent()) { - [NSException raise:NSInvalidArgumentException - format:@"startWithQueue:completionHandler: must be called from a thread with an active run loop."]; - } - - if (self.completion) { - // Consider replacing this exception with an error passed to the completion block. - [NSException raise:NSInternalInconsistencyException - format:@"Already started this snapshotter."]; - } - - if (self.terminated) { - [NSException raise:NSInternalInconsistencyException - format:@"Starting a snapshotter after application termination is not supported."]; - } - - self.completion = completion; - self.resultQueue = queue; - self.cancelled = NO; - - __weak __typeof__(self) weakSelf = self; - // mbgl::Scheduler::GetCurrent() scheduler means "run callback on current (ie UI/main) thread" - // capture weakSelf to avoid retain cycle if callback is never called (ie snapshot cancelled) - - _snapshotCallback = std::make_unique>( - *mbgl::Scheduler::GetCurrent(), - [=](std::exception_ptr mbglError, mbgl::PremultipliedImage image, mbgl::MapSnapshotter::Attributions attributions, mbgl::MapSnapshotter::PointForFn pointForFn, mbgl::MapSnapshotter::LatLngForFn latLngForFn) { - - __typeof__(self) strongSelf = weakSelf; - // If self had died, _snapshotCallback would have been destroyed and this block would not be executed - MGLCAssert(strongSelf, @"Snapshot callback executed after being destroyed."); - - if (!strongSelf.completion) - return; - - if (mbglError) { - NSString *description = @(mbgl::util::toString(mbglError).c_str()); - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: description}; - NSError *error = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeSnapshotFailed userInfo:userInfo]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:error]; -#endif - // Dispatch to result queue - dispatch_async(queue, ^{ - strongSelf.completion(nil, error); - strongSelf.completion = nil; - }); - - } else { -#if TARGET_OS_IPHONE - MGLImage *mglImage = [[MGLImage alloc] initWithMGLPremultipliedImage:std::move(image) scale:strongSelf.options.scale]; -#else - MGLImage *mglImage = [[MGLImage alloc] initWithMGLPremultipliedImage:std::move(image)]; - mglImage.size = NSMakeSize(mglImage.size.width / strongSelf.options.scale, - mglImage.size.height / strongSelf.options.scale); -#endif - - [strongSelf drawAttributedSnapshot:attributions snapshotImage:mglImage pointForFn:pointForFn latLngForFn:latLngForFn overlayHandler:overlayHandler]; - } - strongSelf->_snapshotCallback = NULL; - - }); - - // Launches snapshot on background Thread owned by mbglMapSnapshotter - // _snapshotCallback->self() is an ActorRef: if the callback is destroyed, further messages - // to the callback are just no-ops - _mbglMapSnapshotter->snapshot(_snapshotCallback->self()); -} - -+ (MGLImage*)drawAttributedSnapshotWorker:(mbgl::MapSnapshotter::Attributions)attributions snapshotImage:(MGLImage *)mglImage pointForFn:(mbgl::MapSnapshotter::PointForFn)pointForFn latLngForFn:(mbgl::MapSnapshotter::LatLngForFn)latLngForFn scale:(CGFloat)scale size:(CGSize)size overlayHandler:(MGLMapSnapshotOverlayHandler)overlayHandler { - - NSArray* attributionInfo = [MGLMapSnapshotter generateAttributionInfos:attributions]; - -#if TARGET_OS_IPHONE - MGLAttributionInfoStyle attributionInfoStyle = MGLAttributionInfoStyleLong; - for (NSUInteger styleValue = MGLAttributionInfoStyleLong; styleValue >= MGLAttributionInfoStyleShort; styleValue--) { - attributionInfoStyle = (MGLAttributionInfoStyle)styleValue; - CGSize attributionSize = [MGLMapSnapshotter attributionSizeWithLogoStyle:attributionInfoStyle sourceAttributionStyle:attributionInfoStyle attributionInfo:attributionInfo]; - if (attributionSize.width <= mglImage.size.width) { - break; - } - } - - UIImage *logoImage = [MGLMapSnapshotter logoImageWithStyle:attributionInfoStyle]; - CGSize attributionBackgroundSize = [MGLMapSnapshotter attributionTextSizeWithStyle:attributionInfoStyle attributionInfo:attributionInfo]; - - CGRect logoImageRect = CGRectMake(MGLLogoImagePosition.x, mglImage.size.height - (MGLLogoImagePosition.y + logoImage.size.height), logoImage.size.width, logoImage.size.height); - CGPoint attributionOrigin = CGPointMake(mglImage.size.width - 10 - attributionBackgroundSize.width, - logoImageRect.origin.y + (logoImageRect.size.height / 2) - (attributionBackgroundSize.height / 2) + 1); - if (!logoImage) { - CGSize defaultLogoSize = [MGLMapSnapshotter mapboxLongStyleLogo].size; - logoImageRect = CGRectMake(0, mglImage.size.height - (MGLLogoImagePosition.y + defaultLogoSize.height), 0, defaultLogoSize.height); - attributionOrigin = CGPointMake(10, logoImageRect.origin.y + (logoImageRect.size.height / 2) - (attributionBackgroundSize.height / 2) + 1); - } - - CGRect attributionBackgroundFrame = CGRectMake(attributionOrigin.x, - attributionOrigin.y, - attributionBackgroundSize.width, - attributionBackgroundSize.height); - CGPoint attributionTextPosition = CGPointMake(attributionBackgroundFrame.origin.x + 10, - attributionBackgroundFrame.origin.y - 1); - - CGRect cropRect = CGRectMake(attributionBackgroundFrame.origin.x * mglImage.scale, - attributionBackgroundFrame.origin.y * mglImage.scale, - attributionBackgroundSize.width * mglImage.scale, - attributionBackgroundSize.height * mglImage.scale); - - - UIGraphicsBeginImageContextWithOptions(mglImage.size, NO, scale); - - [mglImage drawInRect:CGRectMake(0, 0, mglImage.size.width, mglImage.size.height)]; - - CGContextRef currentContext = UIGraphicsGetCurrentContext(); - - if (currentContext && overlayHandler) { - MGLMapSnapshotOverlay *snapshotOverlay = [[MGLMapSnapshotOverlay alloc] initWithContext:currentContext - scale:scale - pointForFn:pointForFn - latLngForFn:latLngForFn]; - CGContextSaveGState(snapshotOverlay.context); - overlayHandler(snapshotOverlay); - CGContextRestoreGState(snapshotOverlay.context); - currentContext = UIGraphicsGetCurrentContext(); - } - - if (!currentContext && overlayHandler) { - // If the current context has been corrupted by the user, - // return nil so we can generate an error later. - return nil; - } - - [logoImage drawInRect:logoImageRect]; - - UIImage *currentImage = UIGraphicsGetImageFromCurrentImageContext(); - CGImageRef attributionImageRef = CGImageCreateWithImageInRect([currentImage CGImage], cropRect); - UIImage *attributionImage = [UIImage imageWithCGImage:attributionImageRef]; - CGImageRelease(attributionImageRef); - - CIImage *ciAttributionImage = [[CIImage alloc] initWithCGImage:attributionImage.CGImage]; - - UIImage *blurredAttributionBackground = [MGLMapSnapshotter blurredAttributionBackground:ciAttributionImage]; - - [blurredAttributionBackground drawInRect:attributionBackgroundFrame]; - - [MGLMapSnapshotter drawAttributionTextWithStyle:attributionInfoStyle origin:attributionTextPosition attributionInfo:attributionInfo]; - - UIImage *compositedImage = UIGraphicsGetImageFromCurrentImageContext(); - - UIGraphicsEndImageContext(); - - return compositedImage; - -#else - - NSSize targetSize = NSMakeSize(size.width, size.height); - NSRect targetFrame = NSMakeRect(0, 0, targetSize.width, targetSize.height); - - MGLAttributionInfoStyle attributionInfoStyle = MGLAttributionInfoStyleLong; - for (NSUInteger styleValue = MGLAttributionInfoStyleLong; styleValue >= MGLAttributionInfoStyleShort; styleValue--) { - attributionInfoStyle = (MGLAttributionInfoStyle)styleValue; - CGSize attributionSize = [MGLMapSnapshotter attributionSizeWithLogoStyle:attributionInfoStyle sourceAttributionStyle:attributionInfoStyle attributionInfo:attributionInfo]; - if (attributionSize.width <= mglImage.size.width) { - break; - } - } - - NSImage *logoImage = [MGLMapSnapshotter logoImageWithStyle:attributionInfoStyle]; - CGSize attributionBackgroundSize = [MGLMapSnapshotter attributionTextSizeWithStyle:attributionInfoStyle attributionInfo:attributionInfo]; - NSImage *sourceImage = mglImage; - - CGRect logoImageRect = CGRectMake(MGLLogoImagePosition.x, MGLLogoImagePosition.y, logoImage.size.width, logoImage.size.height); - CGPoint attributionOrigin = CGPointMake(targetFrame.size.width - 10 - attributionBackgroundSize.width, - MGLLogoImagePosition.y + 1); - if (!logoImage) { - CGSize defaultLogoSize = [MGLMapSnapshotter mapboxLongStyleLogo].size; - logoImageRect = CGRectMake(0, MGLLogoImagePosition.y, 0, defaultLogoSize.height); - attributionOrigin = CGPointMake(10, attributionOrigin.y); - } - - CGRect attributionBackgroundFrame = CGRectMake(attributionOrigin.x, - attributionOrigin.y, - attributionBackgroundSize.width, - attributionBackgroundSize.height); - CGPoint attributionTextPosition = CGPointMake(attributionBackgroundFrame.origin.x + 10, - logoImageRect.origin.y + (logoImageRect.size.height / 2) - (attributionBackgroundSize.height / 2)); - - - NSImage *compositedImage = nil; - NSImageRep *sourceImageRep = [sourceImage bestRepresentationForRect:targetFrame - context:nil - hints:nil]; - compositedImage = [[NSImage alloc] initWithSize:targetSize]; - - [compositedImage lockFocus]; - - [sourceImageRep drawInRect: targetFrame]; - - NSGraphicsContext *currentContext = [NSGraphicsContext currentContext]; - if (currentContext && overlayHandler) { - MGLMapSnapshotOverlay *snapshotOverlay = [[MGLMapSnapshotOverlay alloc] initWithContext:currentContext.CGContext - scale:scale - pointForFn:pointForFn - latLngForFn:latLngForFn]; - [currentContext saveGraphicsState]; - overlayHandler(snapshotOverlay); - [currentContext restoreGraphicsState]; - currentContext = [NSGraphicsContext currentContext]; - } - - if (!currentContext && overlayHandler) { - // If the current context has been corrupted by the user, - // return nil so we can generate an error later. - return nil; - } - - if (logoImage) { - [logoImage drawInRect:logoImageRect]; - } - - NSBitmapImageRep *attributionBackground = [[NSBitmapImageRep alloc] initWithFocusedViewRect:attributionBackgroundFrame]; - - CIImage *attributionBackgroundImage = [[CIImage alloc] initWithCGImage:[attributionBackground CGImage]]; - - NSImage *blurredAttributionBackground = [MGLMapSnapshotter blurredAttributionBackground:attributionBackgroundImage]; - - [blurredAttributionBackground drawInRect:attributionBackgroundFrame]; - - [MGLMapSnapshotter drawAttributionTextWithStyle:attributionInfoStyle origin:attributionTextPosition attributionInfo:attributionInfo]; - - [compositedImage unlockFocus]; - - return compositedImage; -#endif -} - -- (void)drawAttributedSnapshot:(mbgl::MapSnapshotter::Attributions)attributions snapshotImage:(MGLImage *)mglImage pointForFn:(mbgl::MapSnapshotter::PointForFn)pointForFn latLngForFn:(mbgl::MapSnapshotter::LatLngForFn)latLngForFn overlayHandler:(MGLMapSnapshotOverlayHandler)overlayHandler { - - // Process image watermark in a work queue - dispatch_queue_t workQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - dispatch_queue_t resultQueue = self.resultQueue; - - // Capture scale and size by value to avoid accessing self from another thread - CGFloat scale = self.options.scale; - CGSize size = self.options.size; - - // pointForFn is a copyable std::function that captures state by value: see MapSnapshotter::Impl::snapshot - __weak __typeof__(self) weakself = self; - - dispatch_async(workQueue, ^{ - // Call a class method to ensure we're not accidentally capturing self - MGLImage *compositedImage = [MGLMapSnapshotter drawAttributedSnapshotWorker:attributions snapshotImage:mglImage pointForFn:pointForFn latLngForFn:latLngForFn scale:scale size:size overlayHandler:overlayHandler]; - - // Dispatch result to origin queue - dispatch_async(resultQueue, ^{ - __typeof__(self) strongself = weakself; - - if (strongself.completion) { - - if (!compositedImage) { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: @"Failed to generate composited snapshot."}; - NSError *error = [NSError errorWithDomain:MGLErrorDomain - code:MGLErrorCodeSnapshotFailed - userInfo:userInfo]; - - strongself.completion(nil, error); - strongself.completion = nil; - } else { - MGLMapSnapshot* snapshot = [[MGLMapSnapshot alloc] initWithImage:compositedImage - scale:scale - pointForFn:pointForFn - latLngForFn:latLngForFn]; - strongself.completion(snapshot, nil); - strongself.completion = nil; - } - } - }); - }); -} - -+ (NSArray*) generateAttributionInfos:(mbgl::MapSnapshotter::Attributions)attributions { - NSMutableArray *infos = [NSMutableArray array]; - -#if TARGET_OS_IPHONE - CGFloat fontSize = [UIFont smallSystemFontSize]; - UIColor *attributeFontColor = [UIColor blackColor]; -#else - CGFloat fontSize = [NSFont systemFontSizeForControlSize:NSMiniControlSize]; - NSColor *attributeFontColor = [NSColor blackColor]; -#endif - for (auto attribution = attributions.begin(); attribution != attributions.end(); ++attribution) { - NSString *attributionHTMLString = @(attribution->c_str()); - NSArray *tileSetInfos = [MGLAttributionInfo attributionInfosFromHTMLString:attributionHTMLString - fontSize:fontSize - linkColor:attributeFontColor]; - [infos growArrayByAddingAttributionInfosFromArray:tileSetInfos]; - } - return infos; -} - -+ (void)drawAttributionTextWithStyle:(MGLAttributionInfoStyle)attributionInfoStyle origin:(CGPoint)origin attributionInfo:(NSArray*)attributionInfo -{ - for (MGLAttributionInfo *info in attributionInfo) { - if (info.isFeedbackLink) { - continue; - } - NSAttributedString *attribution = [info titleWithStyle:attributionInfoStyle]; - [attribution drawAtPoint:origin]; - - origin.x += [attribution size].width + 10; - } -} - -+ (MGLImage *)blurredAttributionBackground:(CIImage *)backgroundImage -{ - CGAffineTransform transform = CGAffineTransformIdentity; - CIFilter *clamp = [CIFilter filterWithName:@"CIAffineClamp"]; - [clamp setValue:backgroundImage forKey:kCIInputImageKey]; - [clamp setValue:[NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)] forKey:@"inputTransform"]; - - CIFilter *attributionBlurFilter = [CIFilter filterWithName:@"CIGaussianBlur"]; - [attributionBlurFilter setValue:[clamp outputImage] forKey:kCIInputImageKey]; - [attributionBlurFilter setValue:@10 forKey:kCIInputRadiusKey]; - - CIFilter *attributionColorFilter = [CIFilter filterWithName:@"CIColorControls"]; - [attributionColorFilter setValue:[attributionBlurFilter outputImage] forKey:kCIInputImageKey]; - [attributionColorFilter setValue:@(0.1) forKey:kCIInputBrightnessKey]; - - CIImage *blurredImage = attributionColorFilter.outputImage; - - CIContext *ctx = [CIContext contextWithOptions:nil]; - CGImageRef cgimg = [ctx createCGImage:blurredImage fromRect:[backgroundImage extent]]; - MGLImage *image; - -#if TARGET_OS_IPHONE - image = [UIImage imageWithCGImage:cgimg]; -#else - image = [[NSImage alloc] initWithCGImage:cgimg size:[backgroundImage extent].size]; -#endif - - CGImageRelease(cgimg); - return image; -} - -+ (MGLImage *)logoImageWithStyle:(MGLAttributionInfoStyle)style -{ - MGLImage *logoImage; - switch (style) { - case MGLAttributionInfoStyleLong: - logoImage = [MGLMapSnapshotter mapboxLongStyleLogo]; - break; - case MGLAttributionInfoStyleMedium: -#if TARGET_OS_IPHONE - logoImage = [UIImage imageNamed:@"mapbox_helmet" inBundle:[NSBundle mgl_frameworkBundle] compatibleWithTraitCollection:nil]; -#else - logoImage = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mgl_frameworkBundle] pathForResource:@"mapbox_helmet" ofType:@"pdf"]]; -#endif - break; - case MGLAttributionInfoStyleShort: - logoImage = nil; - break; - } - return logoImage; -} - -+ (MGLImage *)mapboxLongStyleLogo -{ - MGLImage *logoImage; -#if TARGET_OS_IPHONE - logoImage =[UIImage imageNamed:@"mapbox" inBundle:[NSBundle mgl_frameworkBundle] compatibleWithTraitCollection:nil]; -#else - logoImage = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mgl_frameworkBundle] pathForResource:@"mapbox" ofType:@"pdf"]]; -#endif - return logoImage; -} - -+ (CGSize)attributionSizeWithLogoStyle:(MGLAttributionInfoStyle)logoStyle sourceAttributionStyle:(MGLAttributionInfoStyle)attributionStyle attributionInfo:(NSArray*)attributionInfo -{ - MGLImage *logoImage = [self logoImageWithStyle:logoStyle]; - - CGSize attributionBackgroundSize = [MGLMapSnapshotter attributionTextSizeWithStyle:attributionStyle attributionInfo:attributionInfo]; - - CGSize attributionSize = CGSizeZero; - - if (logoImage) { - attributionSize.width = MGLLogoImagePosition.x + logoImage.size.width + 10; - } - attributionSize.width = attributionSize.width + 10 + attributionBackgroundSize.width + 10; - attributionSize.height = MAX(logoImage.size.height, attributionBackgroundSize.height); - - return attributionSize; -} - -+ (CGSize)attributionTextSizeWithStyle:(MGLAttributionInfoStyle)attributionStyle attributionInfo:(NSArray*)attributionInfo -{ - CGSize attributionBackgroundSize = CGSizeMake(10, 0); - for (MGLAttributionInfo *info in attributionInfo) { - if (info.isFeedbackLink) { - continue; - } - CGSize attributionSize = [info titleWithStyle:attributionStyle].size; - attributionBackgroundSize.width += attributionSize.width + 10; - attributionBackgroundSize.height = MAX(attributionSize.height, attributionBackgroundSize.height); - } - - return attributionBackgroundSize; -} - -- (void)cancel -{ - MGLLogInfo(@"Cancelling snapshotter."); - self.cancelled = YES; - - if (_snapshotCallback) { - [MGLMapSnapshotter completeWithErrorCode:MGLErrorCodeSnapshotFailed - description:[NSString stringWithFormat:@"MGLMapSnapshotter cancelled from %s", __PRETTY_FUNCTION__] - onQueue:self.resultQueue - completion:self.completion]; - self.completion = nil; - } - - _snapshotCallback.reset(); - _mbglMapSnapshotter.reset(); -} - -+ (void)completeWithErrorCode:(MGLErrorCode)errorCode description:(nonnull NSString*)description onQueue:(dispatch_queue_t)queue completion:(MGLMapSnapshotCompletionHandler)completion { - // The snapshot hasn't completed, so we should alert the caller - if (completion && queue) { - dispatch_async(queue, ^{ - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: description}; - NSError *error = [NSError errorWithDomain:MGLErrorDomain - code:errorCode - userInfo:userInfo]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:error]; -#endif - completion(NULL, error); - }); - } -} - -- (void)setOptions:(MGLMapSnapshotOptions *)options -{ - if (_terminated) { - [NSException raise:NSInternalInconsistencyException - format:@"Calling MGLMapSnapshotter.options after application termination is not supported."]; - } - - MGLLogDebug(@"Setting options: %@", options); - - if (_completion) { - [self cancel]; - } - - _cancelled = NO; - _options = options; - - auto mbglFileSource = [[MGLOfflineStorage sharedOfflineStorage] mbglFileSource]; - - std::string styleURL = std::string([options.styleURL.absoluteString UTF8String]); - std::pair style = std::make_pair(false, styleURL); - - // Size; taking into account the minimum texture size for OpenGL ES - // For non retina screens the ratio is 1:1 MGLSnapshotterMinimumPixelSize - mbgl::Size size = { - static_cast(MAX(options.size.width, MGLSnapshotterMinimumPixelSize)), - static_cast(MAX(options.size.height, MGLSnapshotterMinimumPixelSize)) - }; - - float pixelRatio = MAX(options.scale, 1); - - // Camera options - mbgl::CameraOptions cameraOptions; - if (CLLocationCoordinate2DIsValid(options.camera.centerCoordinate)) { - cameraOptions.center = MGLLatLngFromLocationCoordinate2D(options.camera.centerCoordinate); - } - cameraOptions.bearing = MAX(0, options.camera.heading); - cameraOptions.zoom = MAX(0, options.zoomLevel); - cameraOptions.pitch = MAX(0, options.camera.pitch); - - // Region - mbgl::optional coordinateBounds; - if (!MGLCoordinateBoundsIsEmpty(options.coordinateBounds)) { - coordinateBounds = MGLLatLngBoundsFromCoordinateBounds(options.coordinateBounds); - } - - // App-global configuration - MGLRendererConfiguration* config = [MGLRendererConfiguration currentConfiguration]; - - mbgl::ResourceOptions resourceOptions; - resourceOptions.withCachePath([[MGLOfflineStorage sharedOfflineStorage] mbglCachePath]) - .withAssetPath([NSBundle mainBundle].resourceURL.path.UTF8String); - - // Create the snapshotter - _mbglMapSnapshotter = std::make_unique( - style, size, pixelRatio, cameraOptions, coordinateBounds, config.localFontFamilyName, resourceOptions); -} - -@end diff --git a/platform/darwin/src/MGLMapSnapshotter_Private.h b/platform/darwin/src/MGLMapSnapshotter_Private.h deleted file mode 100644 index 205e51a6de5..00000000000 --- a/platform/darwin/src/MGLMapSnapshotter_Private.h +++ /dev/null @@ -1,14 +0,0 @@ -#import "MGLMapSnapshotter.h" - -@protocol MGLMapSnapshotProtocol - -#if TARGET_OS_IPHONE -- (CGPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate; -- (CLLocationCoordinate2D)coordinateForPoint:(CGPoint)point; - -#else -- (NSPoint)pointForCoordinate:(CLLocationCoordinate2D)coordinate; -- (CLLocationCoordinate2D)coordinateForPoint:(NSPoint)point; -#endif - -@end diff --git a/platform/darwin/src/MGLMultiPoint.h b/platform/darwin/src/MGLMultiPoint.h deleted file mode 100644 index ee9eb530a47..00000000000 --- a/platform/darwin/src/MGLMultiPoint.h +++ /dev/null @@ -1,167 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" -#import "MGLShape.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The `MGLMultiPoint` class is an abstract superclass used to define shapes - composed of multiple vertices. - - Create instances of `MGLPolyline` or `MGLPolygon` in order to use - properties of `MGLMultiPoint`. Do not create instances of `MGLMultiPoint` - directly and do not create your own subclasses of this class. You can use - the method and properties of this class to access information about the - vertices of the line or polygon. - - Do not confuse `MGLMultiPoint` with `MGLPointCollection`, which represents a - collection of related but disconnected points. - */ -MGL_EXPORT -@interface MGLMultiPoint : MGLShape - -/** - The array of vertices associated with the shape. - - This C array is a pointer to a structure inside the multipoint object, which - may have a lifetime shorter than the multipoint object and will certainly not - have a longer lifetime. Therefore, you should copy the C array if it needs to - be stored outside of the memory context in which you use this property. - */ -@property (nonatomic, readonly) CLLocationCoordinate2D *coordinates NS_RETURNS_INNER_POINTER; - -/** The number of vertices in the shape. */ -@property (nonatomic, readonly) NSUInteger pointCount; - -/** - Retrieves the vertices of part of the shape. - - @param coords On input, you must provide a C array of `CLLocationCoordinate2D` - structures large enough to hold the desired number of coordinates. On - output, this structure contains the requested coordinate data. - @param range The range of vertices you want. The `location` field indicates - the first vertex you are requesting, with `0` being the first vertex, `1` - being the second vertex, and so on. The `length` field indicates the number - of vertices you want. The array in `coords` must be large enough to - accommodate the number of requested coordinates. - */ -- (void)getCoordinates:(CLLocationCoordinate2D *)coords range:(NSRange)range; - -/** - Sets the shape’s vertices to the given C array of vertices. - - @param coords The array of coordinates defining the shape. The data in this - array is copied to the shape’s `coordinates` property. - @param count The number of coordinates from the `coords` array. - */ -- (void)setCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -/** - Inserts the given vertices into the shape. - - If the shape is currently visible on the map as an annotation, it is redrawn - immediately. If the shape is part of an `MGLShapeSource` object, you must - explicitly set the `MGLShapeSource.shape` property in order for any style - layers that use the source to be redrawn. - - @param coords The array of coordinates to insert into the shape. The data in - this array is copied to the shape’s `coordinates` property. - @param count The number of items in the `coords` array. - @param index The zero-based index at which the first coordinate in `coords` - will appear in the `coordinates` property. - */ -- (void)insertCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count atIndex:(NSUInteger)index; - -/** - Appends the given vertices to the shape. - - If the shape is currently visible on the map as an annotation, it is redrawn - immediately. If the shape is part of an `MGLShapeSource` object, you must - explicitly set the `MGLShapeSource.shape` property in order for any style - layers that use the source to be redrawn. - - @param coords The array of coordinates to add to the shape. The data in this - array is copied to the shape’s `coordinates` property. - @param count The number of items in the `coords` array. - */ -- (void)appendCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -/** - Replaces the vertices at the given range in the shape with the same number of - vertices from a given C array. - - If the shape is currently visible on the map as an annotation, it is redrawn - immediately. If the shape is part of an `MGLShapeSource` object, you must - explicitly set the `MGLShapeSource.shape` property in order for any style - layers that use the source to be redrawn. - - The number of coordinates in `coords` must be equal to the length of `range`. - If you want to insert or delete one or more vertices, use the - `-replaceCoordinatesInRange:withCoordinates:count:` method. - - If `range` extends beyond the shape’s `coordinates` property, an - `NSRangeException` is raised. If you want to append new vertices to the shape, - use the `-appendCoordinates:count:` method. - - @param range The range of vertices to replace. The `location` field indicates - the first vertex you are replacing, with `0` being the first vertex, `1` - being the second vertex, and so on. The `length` field indicates the number - of vertices to replace. - @param coords The array of coordinates defining part of the shape. The data in - this array is copied to the shape’s `coordinates` property. - */ -- (void)replaceCoordinatesInRange:(NSRange)range withCoordinates:(const CLLocationCoordinate2D *)coords; - -/** - Replaces the vertices at the given range in the shape with the specified number - of vertices from a given C array. - - If the shape is currently visible on the map as an annotation, it is redrawn - immediately. If the shape is part of an `MGLShapeSource` object, you must - explicitly set the `MGLShapeSource.shape` property in order for any style - layers that use the source to be redrawn. - - If `count` is greater than the `length` field of `range`, some vertices will - effectively be inserted into the shape. On the other hand, if `count` is less - than the `length` field of `range`, some vertices will effectively be removed. - - If `range` extends beyond the shape’s `coordinates` property, an - `NSRangeException` is raised. If you want to append new vertices to the shape, - use the `-appendCoordinates:count:` method. - - @param range The range of vertices to replace. The `location` field indicates - the first vertex you are replacing, with `0` being the first vertex, `1` - being the second vertex, and so on. The `length` field indicates the number - of vertices to replace. - @param coords The array of coordinates defining part of the shape. The data in - this array is copied to the shape’s `coordinates` property. - @param count The number of coordinates from the `coords` array to insert in - place of the coordinates in `range`. The sum of `range`’s length and this - count must not exceed the number of items currently in the `coordinates` - property. - */ -- (void)replaceCoordinatesInRange:(NSRange)range withCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -/** - Removes the vertices at the given range from the shape. - - If the shape is currently visible on the map as an annotation, it is redrawn - immediately. If the shape is part of an `MGLShapeSource` object, you must - explicitly set the `MGLShapeSource.shape` property in order for any style - layers that use the source to be redrawn. - - If `range` extends beyond the shape’s `coordinates` property, an - `NSRangeException` is raised. - - @param range The range of vertices to remove. The `location` field indicates - the first vertex you are removing, with `0` being the first vertex, `1` - being the second vertex, and so on. The `length` field indicates the number - of vertices to remove. - */ -- (void)removeCoordinatesInRange:(NSRange)range; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLMultiPoint.mm b/platform/darwin/src/MGLMultiPoint.mm deleted file mode 100644 index 19aacaea431..00000000000 --- a/platform/darwin/src/MGLMultiPoint.mm +++ /dev/null @@ -1,204 +0,0 @@ -#import "MGLMultiPoint_Private.h" -#import "MGLGeometry_Private.h" -#import "MGLShape_Private.h" -#import "NSCoder+MGLAdditions.h" -#import "MGLTypes.h" -#import "MGLLoggingConfiguration_Private.h" - -@implementation MGLMultiPoint -{ - mbgl::optional _bounds; - std::vector _coordinates; -} - -- (instancetype)initWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count -{ - MGLLogDebug(@"Initializing with %lu coordinates.", (unsigned long) count); - self = [super init]; - - if (self) - { - if (!count) { - [NSException raise:NSInvalidArgumentException - format:@"A multipoint must have at least one vertex."]; - } - _coordinates = { coords, coords + count }; - } - - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder -{ - MGLLogInfo(@"Initializing with coder."); - if (self = [super initWithCoder:decoder]) { - _coordinates = [decoder mgl_decodeLocationCoordinates2DForKey:@"coordinates"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder -{ - [super encodeWithCoder:coder]; - [coder mgl_encodeLocationCoordinates2D:_coordinates forKey:@"coordinates"]; -} - -- (BOOL)isEqual:(id)other -{ - if (self == other) return YES; - if (![other isKindOfClass:[MGLMultiPoint class]]) return NO; - - MGLMultiPoint *otherMultipoint = other; - return ([super isEqual:otherMultipoint] - && _coordinates == otherMultipoint->_coordinates); -} - -- (NSUInteger)hash -{ - NSUInteger hash = [super hash]; - for (auto coord : _coordinates) { - hash += @(coord.latitude+coord.longitude).hash; - } - return hash; -} - -- (CLLocationCoordinate2D)coordinate -{ - MGLAssert([self pointCount] > 0, @"A multipoint must have coordinates"); - return _coordinates.at(0); -} - -- (NSUInteger)pointCount -{ - return _coordinates.size(); -} - -+ (NSSet *)keyPathsForValuesAffectingPointCount -{ - return [NSSet setWithObjects:@"coordinates", nil]; -} - -- (CLLocationCoordinate2D *)coordinates -{ - return _coordinates.data(); -} - -- (void)getCoordinates:(CLLocationCoordinate2D *)coords range:(NSRange)range -{ - if (range.location + range.length > [self pointCount]) - { - [NSException raise:NSRangeException - format:@"Invalid coordinate range %@ extends beyond current coordinate count of %ld", - NSStringFromRange(range), (unsigned long)[self pointCount]]; - } - - std::copy(_coordinates.begin() + range.location, _coordinates.begin() + NSMaxRange(range), coords); -} - -- (void)setCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count { - MGLLogDebug(@"Setting: %lu coordinates.", (unsigned long)count); - if (!count) { - [NSException raise:NSInvalidArgumentException - format:@"A multipoint must have at least one vertex."]; - } - - [self willChangeValueForKey:@"coordinates"]; - _coordinates = { coords, coords + count }; - _bounds = {}; - [self didChangeValueForKey:@"coordinates"]; -} - -- (void)insertCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count atIndex:(NSUInteger)index { - MGLLogDebug(@"Inserting %lu coordinates at index %lu.", (unsigned long)count, (unsigned long)index); - if (!count) { - return; - } - - if (index > _coordinates.size()) { - [NSException raise:NSRangeException - format:@"Invalid index %lu for existing coordinate count %ld", - (unsigned long)index, (unsigned long)[self pointCount]]; - } - - [self willChangeValueForKey:@"coordinates"]; - _coordinates.insert(_coordinates.begin() + index, count, *coords); - _bounds = {}; - [self didChangeValueForKey:@"coordinates"]; -} - -- (void)appendCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count -{ - MGLLogDebug(@"Appending %lu coordinates.", (unsigned long)count); - [self insertCoordinates:coords count:count atIndex:_coordinates.size()]; -} - -- (void)replaceCoordinatesInRange:(NSRange)range withCoordinates:(const CLLocationCoordinate2D *)coords -{ - MGLLogDebug(@"Replacing coordinates in range: %@", NSStringFromRange(range)); - [self replaceCoordinatesInRange:range withCoordinates:coords count:range.length]; -} - -- (void)replaceCoordinatesInRange:(NSRange)range withCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count { - MGLLogDebug(@"Replacing %lu coordinates in range %@.", (unsigned long)count, NSStringFromRange(range)); - if (!count && !range.length) { - return; - } - - if (NSMaxRange(range) > _coordinates.size()) { - [NSException raise:NSRangeException - format:@"Invalid range %@ for existing coordinate count %ld", - NSStringFromRange(range), (unsigned long)[self pointCount]]; - } - - [self willChangeValueForKey:@"coordinates"]; - std::copy(coords, coords + MIN(count, range.length), _coordinates.begin() + range.location); - if (count >= range.length) { - _coordinates.insert(_coordinates.begin() + NSMaxRange(range), coords, coords + count - range.length); - } else { - _coordinates.erase(_coordinates.begin() + range.location + count, _coordinates.begin() + NSMaxRange(range)); - } - _bounds = {}; - [self didChangeValueForKey:@"coordinates"]; -} - -- (void)removeCoordinatesInRange:(NSRange)range { - MGLLogDebug(@"Removing coordinatesInRange: %@", NSStringFromRange(range)); - CLLocationCoordinate2D coords; - [self replaceCoordinatesInRange:range withCoordinates:&coords count:0]; -} - -- (MGLCoordinateBounds)overlayBounds -{ - if (!_bounds) { - mbgl::LatLngBounds bounds = mbgl::LatLngBounds::empty(); - for (auto coordinate : _coordinates) { - if (!MGLLocationCoordinate2DIsValid(coordinate)) { - bounds = mbgl::LatLngBounds::empty(); - break; - } - bounds.extend(MGLLatLngFromLocationCoordinate2D(coordinate)); - } - _bounds = bounds; - } - return MGLCoordinateBoundsFromLatLngBounds(*_bounds); -} - -- (BOOL)intersectsOverlayBounds:(MGLCoordinateBounds)overlayBounds -{ - return MGLCoordinateBoundsIntersectsCoordinateBounds(self.overlayBounds, overlayBounds); -} - -- (mbgl::Annotation)annotationObjectWithDelegate:(__unused id )delegate -{ - MGLAssert(NO, @"Cannot add an annotation from an instance of %@", NSStringFromClass([self class])); - return mbgl::SymbolAnnotation(mbgl::Point()); -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; count = %lu; bounds = %@>", - NSStringFromClass([self class]), (void *)self, (unsigned long)[self pointCount], - MGLStringFromCoordinateBounds(self.overlayBounds)]; -} - -@end diff --git a/platform/darwin/src/MGLMultiPoint_Private.h b/platform/darwin/src/MGLMultiPoint_Private.h deleted file mode 100644 index a9b4b72ca53..00000000000 --- a/platform/darwin/src/MGLMultiPoint_Private.h +++ /dev/null @@ -1,46 +0,0 @@ -#import "MGLMultiPoint.h" - -#import "MGLGeometry.h" - -#import -#import -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@class MGLPolygon; -@class MGLPolyline; - -@protocol MGLMultiPointDelegate; - -@interface MGLMultiPoint (Private) - -- (instancetype)initWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count; -- (BOOL)intersectsOverlayBounds:(MGLCoordinateBounds)overlayBounds; - -/** Constructs a shape annotation object, asking the delegate for style values. */ -- (mbgl::Annotation)annotationObjectWithDelegate:(id )delegate; - -@end - -/** An object that tells the MGLMultiPoint instance how to style itself. */ -@protocol MGLMultiPointDelegate - -/** Returns the fill alpha value for the given annotation. */ -- (double)alphaForShapeAnnotation:(MGLShape *)annotation; - -/** Returns the stroke color object for the given annotation. */ -- (mbgl::Color)strokeColorForShapeAnnotation:(MGLShape *)annotation; - -/** Returns the fill color object for the given annotation. */ -- (mbgl::Color)fillColorForPolygonAnnotation:(MGLPolygon *)annotation; - -/** Returns the stroke width object for the given annotation. */ -- (CGFloat)lineWidthForPolylineAnnotation:(MGLPolyline *)annotation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLNetworkConfiguration.h b/platform/darwin/src/MGLNetworkConfiguration.h deleted file mode 100644 index 6c56050aaee..00000000000 --- a/platform/darwin/src/MGLNetworkConfiguration.h +++ /dev/null @@ -1,37 +0,0 @@ -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The `MGLNetworkConfiguration` object provides a global way to set a base - `NSURLSessionConfiguration`, and other resources. - */ -MGL_EXPORT -@interface MGLNetworkConfiguration : NSObject - -/** - Returns the shared instance of the `MGLNetworkConfiguration` class. - */ -@property (class, nonatomic, readonly) MGLNetworkConfiguration *sharedManager; - -/** - The session configuration object that is used by the `NSURLSession` objects - in this SDK. - - If this property is set to nil or if no session configuration is provided this property - is set to the default session configuration. - - Assign this object before instantiating any `MGLMapView` object. - - @note: `NSURLSession` objects store a copy of this configuration. Any further changes - to mutable properties on this configuration object passed to a session’s initializer - will not affect the behavior of that session. - - */ -@property (atomic, strong, null_resettable) NSURLSessionConfiguration *sessionConfiguration; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLNetworkConfiguration.m b/platform/darwin/src/MGLNetworkConfiguration.m deleted file mode 100644 index 0e5046e7a36..00000000000 --- a/platform/darwin/src/MGLNetworkConfiguration.m +++ /dev/null @@ -1,162 +0,0 @@ -#import "MGLNetworkConfiguration_Private.h" - -#include - -static NSString * const MGLStartTime = @"start_time"; -static NSString * const MGLResourceType = @"resource_type"; -NSString * const kMGLDownloadPerformanceEvent = @"mobile.performance_trace"; - -@interface MGLNetworkConfiguration () - -@property (strong) NSURLSessionConfiguration *sessionConfig; -@property (nonatomic, strong) NSMutableDictionary *events; -@property (nonatomic, weak) id metricsDelegate; -@property (nonatomic) dispatch_queue_t eventsQueue; - -@end - -@implementation MGLNetworkConfiguration - -- (instancetype)init { - if (self = [super init]) { - self.sessionConfiguration = nil; - _events = [NSMutableDictionary dictionary]; - _eventsQueue = dispatch_queue_create("com.mapbox.network-configuration", DISPATCH_QUEUE_CONCURRENT); - } - - return self; -} - -+ (instancetype)sharedManager { - static dispatch_once_t onceToken; - static MGLNetworkConfiguration *_sharedManager; - dispatch_once(&onceToken, ^{ - _sharedManager = [[self alloc] init]; - }); - - return _sharedManager; -} - -- (void)setSessionConfiguration:(NSURLSessionConfiguration *)sessionConfiguration { - @synchronized (self) { - if (sessionConfiguration == nil) { - _sessionConfig = [self defaultSessionConfiguration]; - } else { - _sessionConfig = sessionConfiguration; - } - } -} - -- (NSURLSessionConfiguration *)sessionConfiguration { - NSURLSessionConfiguration *sessionConfig = nil; - @synchronized (self) { - sessionConfig = _sessionConfig; - } - return sessionConfig; -} - -- (NSURLSessionConfiguration *)defaultSessionConfiguration { - NSURLSessionConfiguration* sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; - - sessionConfiguration.timeoutIntervalForResource = 30; - sessionConfiguration.HTTPMaximumConnectionsPerHost = 8; - sessionConfiguration.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData; - sessionConfiguration.URLCache = nil; - - return sessionConfiguration; -} - -- (void)startDownloadEvent:(NSString *)urlString type:(NSString *)resourceType { - if (urlString && ![self eventDictionaryForKey:urlString]) { - NSDate *startDate = [NSDate date]; - [self setEventDictionary:@{ MGLStartTime: startDate, MGLResourceType: resourceType } forKey:urlString]; - } -} - -- (void)stopDownloadEventForResponse:(NSURLResponse *)response { - [self sendEventForURLResponse:response withAction:nil]; -} - -- (void)cancelDownloadEventForResponse:(NSURLResponse *)response { - [self sendEventForURLResponse:response withAction:@"cancel"]; -} - -- (void)sendEventForURLResponse:(NSURLResponse *)response withAction:(NSString *)action -{ - if ([response isKindOfClass:[NSURLResponse class]]) { - NSString *urlString = response.URL.relativePath; - if (urlString && [self eventDictionaryForKey:urlString]) { - NSDictionary *eventAttributes = [self eventAttributesForURL:response withAction:action]; - [self removeEventDictionaryForKey:urlString]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self.metricsDelegate networkConfiguration:self didGenerateMetricEvent:eventAttributes]; - }); - } - } - -} - -- (NSDictionary *)eventAttributesForURL:(NSURLResponse *)response withAction:(NSString *)action -{ - NSString *urlString = response.URL.relativePath; - NSDictionary *parameters = [self eventDictionaryForKey:urlString]; - NSDate *startDate = [parameters objectForKey:MGLStartTime]; - NSDate *endDate = [NSDate date]; - NSTimeInterval elapsedTime = [endDate timeIntervalSinceDate:startDate]; - NSDateFormatter* iso8601Formatter = [[NSDateFormatter alloc] init]; - iso8601Formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ"; - NSString *createdDate = [iso8601Formatter stringFromDate:[NSDate date]]; - - NSMutableArray *attributes = [NSMutableArray array]; - [attributes addObject:@{ @"name" : @"requestUrl" , @"value" : urlString }]; - [attributes addObject:@{ @"name" : MGLResourceType , @"value" : [parameters objectForKey:MGLResourceType] }]; - - if ([response isKindOfClass:[NSHTTPURLResponse class]]) { - NSInteger responseCode = [(NSHTTPURLResponse *)response statusCode]; - [attributes addObject:@{ @"name" : @"responseCode", @"value" : @(responseCode)}]; - } - - BOOL isWIFIOn = [[MGLReachability reachabilityWithHostName:response.URL.host] isReachableViaWiFi]; - [attributes addObject:@{ @"name" : @"wifiOn", @"value" : @(isWIFIOn)}]; - - if (action) { - [attributes addObject:@{ @"name" : @"action" , @"value" : action }]; - } - - double elapsedTimeInMS = elapsedTime * 1000.0; - - return @{ - @"event" : kMGLDownloadPerformanceEvent, - @"created" : createdDate, - @"sessionId" : [NSUUID UUID].UUIDString, - @"counters" : @[ @{ @"name" : @"elapsedMS" , @"value" : @(elapsedTimeInMS) } ], - @"attributes" : attributes - }; -} - -#pragma mark - Events dictionary access - -- (nullable NSDictionary*)eventDictionaryForKey:(nonnull NSString*)key { - __block NSDictionary *dictionary; - - dispatch_sync(self.eventsQueue, ^{ - dictionary = [self.events objectForKey:key]; - }); - - return dictionary; -} - -- (void)setEventDictionary:(nonnull NSDictionary*)dictionary forKey:(nonnull NSString*)key { - dispatch_barrier_async(self.eventsQueue, ^{ - [self.events setObject:dictionary forKey:key]; - }); -} - -- (void)removeEventDictionaryForKey:(nonnull NSString*)key { - dispatch_barrier_async(self.eventsQueue, ^{ - [self.events removeObjectForKey:key]; - }); -} - -@end diff --git a/platform/darwin/src/MGLNetworkConfiguration_Private.h b/platform/darwin/src/MGLNetworkConfiguration_Private.h deleted file mode 100644 index 06f5c7d1b54..00000000000 --- a/platform/darwin/src/MGLNetworkConfiguration_Private.h +++ /dev/null @@ -1,25 +0,0 @@ -#import "MGLNetworkConfiguration.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MGLNetworkConfiguration; -@protocol MGLNetworkConfigurationMetricsDelegate - -- (void)networkConfiguration:(MGLNetworkConfiguration *)networkConfiguration didGenerateMetricEvent:(NSDictionary *)metricEvent; - -@end - -extern NSString * const kMGLDownloadPerformanceEvent; - -@interface MGLNetworkConfiguration (Private) - -@property (nonatomic, strong) NSMutableDictionary *events; -@property (nonatomic, weak) id metricsDelegate; - -- (void)startDownloadEvent:(NSString *)urlString type:(NSString *)resourceType; -- (void)stopDownloadEventForResponse:(NSURLResponse *)response; -- (void)cancelDownloadEventForResponse:(NSURLResponse *)response; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLNetworkIntegrationManager.h b/platform/darwin/src/MGLNetworkIntegrationManager.h deleted file mode 100644 index 2c929e16f86..00000000000 --- a/platform/darwin/src/MGLNetworkIntegrationManager.h +++ /dev/null @@ -1,8 +0,0 @@ -#import -#include - -@interface MGLNetworkIntegrationManager : NSObject - -+ (MGLNetworkIntegrationManager *)sharedManager; - -@end diff --git a/platform/darwin/src/MGLNetworkIntegrationManager.m b/platform/darwin/src/MGLNetworkIntegrationManager.m deleted file mode 100644 index 79c7f151566..00000000000 --- a/platform/darwin/src/MGLNetworkIntegrationManager.m +++ /dev/null @@ -1,54 +0,0 @@ -#import "MGLNetworkIntegrationManager.h" - -#import "MGLLoggingConfiguration_Private.h" -#import "MGLNetworkConfiguration_Private.h" - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -#import "MGLAccountManager_Private.h" -#endif - -@implementation MGLNetworkIntegrationManager - -static MGLNetworkIntegrationManager *instance = nil; - -+ (MGLNetworkIntegrationManager *)sharedManager { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - instance = [[MGLNetworkIntegrationManager alloc] init]; - }); - return instance; -} - -#pragma mark - MGLNativeAppleInterfaceManager delegate - - -- (NSURLSessionConfiguration *)sessionConfiguration { - return [MGLNetworkConfiguration sharedManager].sessionConfiguration; -} - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -- (NSString *)skuToken { - return MGLAccountManager.skuToken; -} -#endif - -- (void)startDownloadEvent:(NSString *)event type:(NSString *)type { - [[MGLNetworkConfiguration sharedManager] startDownloadEvent:event type:@"tile"]; -} - -- (void)cancelDownloadEventForResponse:(NSURLResponse *)response { - [[MGLNetworkConfiguration sharedManager] cancelDownloadEventForResponse:response]; -} - -- (void)stopDownloadEventForResponse:(NSURLResponse *)response { - [[MGLNetworkConfiguration sharedManager] stopDownloadEventForResponse:response]; -} - -- (void)debugLog:(NSString *)format, ... { - MGLLogDebug(format); -} - -- (void)errorLog:(NSString *)format, ... { - MGLLogError(format); -} - -@end diff --git a/platform/darwin/src/MGLOfflinePack.h b/platform/darwin/src/MGLOfflinePack.h deleted file mode 100644 index 3dcb5b7abe7..00000000000 --- a/platform/darwin/src/MGLOfflinePack.h +++ /dev/null @@ -1,203 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLTypes.h" -#import "MGLOfflineRegion.h" - -NS_ASSUME_NONNULL_BEGIN - -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLInvalidOfflinePackException; - -/** - The state an offline pack is currently in. - */ -typedef NS_ENUM (NSInteger, MGLOfflinePackState) { - /** - It is unknown whether the pack is inactive, active, or complete. - - This is the initial state of a pack. The state of a pack becomes known by - the time the shared `MGLOfflineStorage` object sends the first - `MGLOfflinePackProgressChangedNotification` about the pack. For inactive - packs, you must explicitly request a progress update using the - `-[MGLOfflinePack requestProgress]` method. - - An invalid pack always has a state of `MGLOfflinePackStateInvalid`, never - `MGLOfflinePackStateUnknown`. - */ - MGLOfflinePackStateUnknown = 0, - /** - The pack is incomplete and is not currently downloading. - - This is the initial state of a pack that is created using the - `-[MGLOfflineStorage addPackForRegion:withContext:completionHandler:]` - method, as well as after the `-[MGLOfflinePack suspend]` method is - called. - */ - MGLOfflinePackStateInactive = 1, - /** - The pack is incomplete and is currently downloading. - - This is the state of a pack after the `-[MGLOfflinePack resume]` method is - called. - */ - MGLOfflinePackStateActive = 2, - /** - The pack has downloaded to completion. - */ - MGLOfflinePackStateComplete = 3, - /** - The pack has been removed using the - `-[MGLOfflineStorage removePack:withCompletionHandler:]` method. Sending - any message to the pack will raise an exception. - */ - MGLOfflinePackStateInvalid = 4, -}; - -/** - A structure containing information about an offline pack’s current download - progress. - */ -typedef struct __attribute__((objc_boxable)) MGLOfflinePackProgress { - /** - The number of resources, including tiles, that have been completely - downloaded and are ready to use offline. - */ - uint64_t countOfResourcesCompleted; - /** - The cumulative size of the downloaded resources on disk, including tiles, - measured in bytes. - */ - uint64_t countOfBytesCompleted; - /** - The number of tiles that have been completely downloaded and are ready - to use offline. - */ - uint64_t countOfTilesCompleted; - /** - The cumulative size of the downloaded tiles on disk, measured in bytes. - */ - uint64_t countOfTileBytesCompleted; - /** - The minimum number of resources that must be downloaded in order to view - the pack’s full region without any omissions. - - At the beginning of a download, this count is a lower bound; the number of - expected resources may increase as the download progresses. - */ - uint64_t countOfResourcesExpected; - /** - The maximum number of resources that must be downloaded in order to view - the pack’s full region without any omissions. - - At the beginning of a download, when the exact number of required resources - is unknown, this field is set to `UINT64_MAX`. Thus this count is always an - upper bound. - */ - uint64_t maximumResourcesExpected; -} MGLOfflinePackProgress; - -/** - An `MGLOfflinePack` represents a collection of resources necessary for viewing - a region offline to a local database. - - To create an instance of `MGLOfflinePack`, use the - `+[MGLOfflineStorage addPackForRegion:withContext:completionHandler:]` method. - A pack created using `-[MGLOfflinePack init]` is immediately invalid. - - ### Example - ```swift - MGLOfflineStorage.shared.addPack(for: region, withContext: context) { (pack, error) in - guard let pack = pack else { - // If adding the pack fails, log an error to console. - print("Error:", error?.localizedDescription ?? "unknown error adding pack at \(#file)(\(#line)) in \(#function)") - return - } - - // Start an MGLOfflinePack download - pack.resume() - } - ``` - */ -MGL_EXPORT -@interface MGLOfflinePack : NSObject - -/** - The region for which the pack manages resources. - */ -@property (nonatomic, readonly) id region; - -/** - Arbitrary data stored alongside the downloaded resources. - - The context typically holds application-specific information for identifying - the pack, such as a user-selected name. - */ -@property (nonatomic, readonly) NSData *context; - -/** - The pack’s current state. - - The state of an inactive or completed pack is computed lazily and is set to - `MGLOfflinePackStateUnknown` by default. To request the pack’s status, use the - `-requestProgress` method. To get notified when the state becomes known and - when it changes, observe KVO change notifications on this pack’s `state` key - path. Alternatively, you can add an observer for - `MGLOfflinePackProgressChangedNotification`s about this pack that come from the - default notification center. - */ -@property (nonatomic, readonly) MGLOfflinePackState state; - -/** - The pack’s current progress. - - The progress of an inactive or completed pack is computed lazily, and all its - fields are set to 0 by default. To request the pack’s progress, use the - `-requestProgress` method. To get notified when the progress becomes - known and when it changes, observe KVO change notifications on this pack’s - `state` key path. Alternatively, you can add an observer for - `MGLOfflinePackProgressChangedNotification`s about this pack that come from the - default notification center. - */ -@property (nonatomic, readonly) MGLOfflinePackProgress progress; - -/** - Resumes downloading if the pack is inactive. - - When a pack resumes after being suspended, it may begin by iterating over the - already downloaded resources. As a result, the `progress` structure’s - `countOfResourcesCompleted` field may revert to 0 before rapidly returning to - the level of progress at the time the pack was suspended. - - To temporarily suspend downloading, call the `-suspend` method. - */ -- (void)resume; - -/** - Temporarily stops downloading if the pack is active. - - A pack suspends asynchronously, so some network requests may be sent after this - method is called. Regardless, the `progress` property will not be updated until - `-resume` is called. - - If the pack previously reached a higher level of progress before being - suspended, it may wait to suspend until it returns to that level. - - To resume downloading, call the `-resume` method. - */ -- (void)suspend; - -/** - Request an asynchronous update to the pack’s `state` and `progress` properties. - - The state and progress of an inactive or completed pack are computed lazily. If - you need the state or progress of a pack whose `state` property is currently - set to `MGLOfflinePackStateUnknown`, observe KVO change notifications on this - pack’s `state` key path, then call this method. Alternatively, you can add an - observer for `MGLOfflinePackProgressChangedNotification` about this pack that - come from the default notification center. - */ -- (void)requestProgress; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLOfflinePack.mm b/platform/darwin/src/MGLOfflinePack.mm deleted file mode 100644 index edee549744c..00000000000 --- a/platform/darwin/src/MGLOfflinePack.mm +++ /dev/null @@ -1,282 +0,0 @@ -#import "MGLOfflinePack_Private.h" - -#import "MGLOfflineStorage_Private.h" -#import "MGLOfflineRegion_Private.h" -#import "MGLTilePyramidOfflineRegion.h" -#import "MGLTilePyramidOfflineRegion_Private.h" -#import "MGLShapeOfflineRegion.h" -#import "MGLShapeOfflineRegion_Private.h" -#import "MGLLoggingConfiguration_Private.h" - -#import "NSValue+MGLAdditions.h" - -#include -#include - -const MGLExceptionName MGLInvalidOfflinePackException = @"MGLInvalidOfflinePackException"; - -/** - Assert that the current offline pack is valid. - - This macro should be used at the beginning of any public-facing instance method - of `MGLOfflinePack`. For private methods, an assertion is more appropriate. - */ -#define MGLAssertOfflinePackIsValid() \ - do { \ - if (_state == MGLOfflinePackStateInvalid) { \ - [NSException raise:MGLInvalidOfflinePackException \ - format: \ - @"-[MGLOfflineStorage removePack:withCompletionHandler:] has been called " \ - @"on this instance of MGLOfflinePack, rendering it invalid. It is an " \ - @"error to send any message to this pack."]; \ - } \ - } while (NO); - -@interface MGLTilePyramidOfflineRegion () -@end - -@interface MGLShapeOfflineRegion () -@end - -class MBGLOfflineRegionObserver : public mbgl::OfflineRegionObserver { -public: - MBGLOfflineRegionObserver(MGLOfflinePack *pack_) : pack(pack_) {} - - void statusChanged(mbgl::OfflineRegionStatus status) override; - void responseError(mbgl::Response::Error error) override; - void mapboxTileCountLimitExceeded(uint64_t limit) override; - -private: - __weak MGLOfflinePack *pack = nullptr; -}; - -@interface MGLOfflinePack () - -@property (nonatomic, nullable, readwrite) mbgl::OfflineRegion *mbglOfflineRegion; -@property (nonatomic, readwrite) MGLOfflinePackProgress progress; - -@end - -@implementation MGLOfflinePack { - BOOL _isSuspending; - std::shared_ptr _mbglDatabaseFileSource; -} - -- (instancetype)init { - MGLLogInfo(@"Calling this initializer is not allowed."); - if (self = [super init]) { - _state = MGLOfflinePackStateInvalid; - NSLog(@"%s called; did you mean to call +[MGLOfflineStorage addPackForRegion:withContext:completionHandler:] instead?", __PRETTY_FUNCTION__); - } - return self; -} - -- (instancetype)initWithMBGLRegion:(mbgl::OfflineRegion *)region { - if (self = [super init]) { - _mbglOfflineRegion = region; - _state = MGLOfflinePackStateUnknown; - - _mbglDatabaseFileSource = [[MGLOfflineStorage sharedOfflineStorage] mbglDatabaseFileSource]; - _mbglDatabaseFileSource->setOfflineRegionObserver(*_mbglOfflineRegion, std::make_unique(self)); - } - return self; -} - -- (void)dealloc { - MGLAssert(_state == MGLOfflinePackStateInvalid, @"MGLOfflinePack was not invalided prior to deallocation."); -} - -- (id )region { - MGLAssertOfflinePackIsValid(); - - const mbgl::OfflineRegionDefinition ®ionDefinition = _mbglOfflineRegion->getDefinition(); - MGLAssert([MGLTilePyramidOfflineRegion conformsToProtocol:@protocol(MGLOfflineRegion_Private)], @"MGLTilePyramidOfflineRegion should conform to MGLOfflineRegion_Private."); - MGLAssert([MGLShapeOfflineRegion conformsToProtocol:@protocol(MGLOfflineRegion_Private)], @"MGLShapeOfflineRegion should conform to MGLOfflineRegion_Private."); - - - - return regionDefinition.match( - [&] (const mbgl::OfflineTilePyramidRegionDefinition def){ - return (id )[[MGLTilePyramidOfflineRegion alloc] initWithOfflineRegionDefinition:def]; - }, - [&] (const mbgl::OfflineGeometryRegionDefinition& def){ - return (id )[[MGLShapeOfflineRegion alloc] initWithOfflineRegionDefinition:def]; - }); -} - -- (NSData *)context { - MGLAssertOfflinePackIsValid(); - - const mbgl::OfflineRegionMetadata &metadata = _mbglOfflineRegion->getMetadata(); - return [NSData dataWithBytes:&metadata[0] length:metadata.size()]; -} - -- (void)resume { - MGLLogInfo(@"Resuming pack download."); - MGLAssertOfflinePackIsValid(); - - self.state = MGLOfflinePackStateActive; - - _mbglDatabaseFileSource->setOfflineRegionDownloadState(*_mbglOfflineRegion, mbgl::OfflineRegionDownloadState::Active); -} - -- (void)suspend { - MGLLogInfo(@"Suspending pack download."); - MGLAssertOfflinePackIsValid(); - - if (self.state == MGLOfflinePackStateActive) { - self.state = MGLOfflinePackStateInactive; - _isSuspending = YES; - } - - _mbglDatabaseFileSource->setOfflineRegionDownloadState(*_mbglOfflineRegion, mbgl::OfflineRegionDownloadState::Inactive); -} - -- (void)invalidate { - MGLLogInfo(@"Invalidating pack."); - MGLAssert(_state != MGLOfflinePackStateInvalid, @"Cannot invalidate an already invalid offline pack."); - MGLAssert(self.mbglOfflineRegion, @"Should have a valid region"); - - @synchronized (self) { - self.state = MGLOfflinePackStateInvalid; - if (self.mbglOfflineRegion) { - _mbglDatabaseFileSource->setOfflineRegionObserver(*self.mbglOfflineRegion, nullptr); - } - self.mbglOfflineRegion = nil; - } -} - -- (void)setState:(MGLOfflinePackState)state { - MGLLogDebug(@"Setting state: %ld", (long)state); - if (!self.mbglOfflineRegion) { - // A progress update has arrived after the call to - // -[MGLOfflineStorage removePack:withCompletionHandler:] but before the - // removal is complete and the completion handler is called. - MGLAssert(_state == MGLOfflinePackStateInvalid, @"A valid MGLOfflinePack has no mbgl::OfflineRegion."); - return; - } - - MGLAssert(_state != MGLOfflinePackStateInvalid, @"Cannot change the state of an invalid offline pack."); - - if (!_isSuspending || state != MGLOfflinePackStateActive) { - _isSuspending = NO; - _state = state; - } -} - -- (void)requestProgress { - MGLLogInfo(@"Requesting pack progress."); - MGLAssertOfflinePackIsValid(); - - __weak MGLOfflinePack *weakSelf = self; - _mbglDatabaseFileSource->getOfflineRegionStatus(*_mbglOfflineRegion, [&, weakSelf](mbgl::expected status) { - if (status) { - mbgl::OfflineRegionStatus checkedStatus = *status; - dispatch_async(dispatch_get_main_queue(), ^{ - MGLOfflinePack *strongSelf = weakSelf; - [strongSelf offlineRegionStatusDidChange:checkedStatus]; - }); - } - }); -} - -- (void)offlineRegionStatusDidChange:(mbgl::OfflineRegionStatus)status { - MGLAssert(_state != MGLOfflinePackStateInvalid, @"Cannot change update progress of an invalid offline pack."); - - switch (status.downloadState) { - case mbgl::OfflineRegionDownloadState::Inactive: - self.state = status.complete() ? MGLOfflinePackStateComplete : MGLOfflinePackStateInactive; - break; - - case mbgl::OfflineRegionDownloadState::Active: - self.state = MGLOfflinePackStateActive; - break; - } - - if (_isSuspending) { - return; - } - - MGLOfflinePackProgress progress; - progress.countOfResourcesCompleted = status.completedResourceCount; - progress.countOfBytesCompleted = status.completedResourceSize; - progress.countOfTilesCompleted = status.completedTileCount; - progress.countOfTileBytesCompleted = status.completedTileSize; - progress.countOfResourcesExpected = status.requiredResourceCount; - progress.maximumResourcesExpected = status.requiredResourceCountIsPrecise ? status.requiredResourceCount : UINT64_MAX; - self.progress = progress; - - NSDictionary *userInfo = @{MGLOfflinePackUserInfoKeyState: @(self.state), - MGLOfflinePackUserInfoKeyProgress: [NSValue valueWithMGLOfflinePackProgress:progress]}; - - NSNotificationCenter *noteCenter = [NSNotificationCenter defaultCenter]; - [noteCenter postNotificationName:MGLOfflinePackProgressChangedNotification - object:self - userInfo:userInfo]; -} - -- (void)didReceiveError:(NSError *)error { - MGLLogError(@"Error: %@", error.localizedDescription); - MGLLogInfo(@"Notifying about pack error."); - - NSDictionary *userInfo = @{ MGLOfflinePackUserInfoKeyError: error }; - NSNotificationCenter *noteCenter = [NSNotificationCenter defaultCenter]; - [noteCenter postNotificationName:MGLOfflinePackErrorNotification - object:self - userInfo:userInfo]; -} - -- (void)didReceiveMaximumAllowedMapboxTiles:(uint64_t)limit { - MGLLogInfo(@"Notifying reached maximum allowed Mapbox tiles: %lu", (unsigned long)limit); - NSDictionary *userInfo = @{ MGLOfflinePackUserInfoKeyMaximumCount: @(limit) }; - NSNotificationCenter *noteCenter = [NSNotificationCenter defaultCenter]; - [noteCenter postNotificationName:MGLOfflinePackMaximumMapboxTilesReachedNotification - object:self - userInfo:userInfo]; -} - -NSError *MGLErrorFromResponseError(mbgl::Response::Error error) { - NSInteger errorCode = MGLErrorCodeUnknown; - switch (error.reason) { - case mbgl::Response::Error::Reason::NotFound: - errorCode = MGLErrorCodeNotFound; - break; - - case mbgl::Response::Error::Reason::Server: - errorCode = MGLErrorCodeBadServerResponse; - break; - - case mbgl::Response::Error::Reason::Connection: - errorCode = MGLErrorCodeConnectionFailed; - break; - - default: - break; - } - return [NSError errorWithDomain:MGLErrorDomain code:errorCode userInfo:@{ - NSLocalizedFailureReasonErrorKey: @(error.message.c_str()) - }]; -} - -@end - -void MBGLOfflineRegionObserver::statusChanged(mbgl::OfflineRegionStatus status) { - __weak MGLOfflinePack *weakPack = pack; - dispatch_async(dispatch_get_main_queue(), ^{ - [weakPack offlineRegionStatusDidChange:status]; - }); -} - -void MBGLOfflineRegionObserver::responseError(mbgl::Response::Error error) { - __weak MGLOfflinePack *weakPack = pack; - dispatch_async(dispatch_get_main_queue(), ^{ - [weakPack didReceiveError:MGLErrorFromResponseError(error)]; - }); -} - -void MBGLOfflineRegionObserver::mapboxTileCountLimitExceeded(uint64_t limit) { - __weak MGLOfflinePack *weakPack = pack; - dispatch_async(dispatch_get_main_queue(), ^{ - [weakPack didReceiveMaximumAllowedMapboxTiles:limit]; - }); -} diff --git a/platform/darwin/src/MGLOfflinePack_Private.h b/platform/darwin/src/MGLOfflinePack_Private.h deleted file mode 100644 index ea3fb2da99c..00000000000 --- a/platform/darwin/src/MGLOfflinePack_Private.h +++ /dev/null @@ -1,23 +0,0 @@ -#import "MGLOfflinePack.h" - -#include - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLOfflinePack (Private) - -@property (nonatomic, nullable) mbgl::OfflineRegion *mbglOfflineRegion; - -@property (nonatomic, readwrite) MGLOfflinePackState state; - -- (instancetype)initWithMBGLRegion:(mbgl::OfflineRegion *)region; - -/** - Invalidates the pack and ensures that no future progress update can ever - revalidate it. This method must be called before the pack is deallocated. - */ -- (void)invalidate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLOfflineRegion.h b/platform/darwin/src/MGLOfflineRegion.h deleted file mode 100644 index f873424c937..00000000000 --- a/platform/darwin/src/MGLOfflineRegion.h +++ /dev/null @@ -1,37 +0,0 @@ -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - An object conforming to the `MGLOfflineRegion` protocol determines which - resources are required by an `MGLOfflinePack` object. - */ -@protocol MGLOfflineRegion - -/** - URL of the style whose resources are required for offline viewing. - - In addition to the JSON stylesheet, different styles may require different font - glyphs, sprite sheets, and other resources. - - The URL may be a full HTTP or HTTPS URL or a Mapbox - style URL (`mapbox://styles/{user}/{style}`). - */ -@property (nonatomic, readonly) NSURL *styleURL; - -/** - Specifies whether to include ideographic glyphs in downloaded font data. - Ideographic glyphs make up the majority of downloaded font data, but - it is possible to configure the renderer to use locally installed fonts - instead of relying on fonts downloaded as part of the offline pack. - See `MGLIdeographicFontFamilyName` setting. Also, for regions outside of - China, Japan, and Korea, these glyphs will rarely appear for non-CJK users. - - By default, this property is set to `NO`, so that the offline pack will - include ideographic glyphs. - */ -@property (nonatomic) BOOL includesIdeographicGlyphs; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLOfflineRegion_Private.h b/platform/darwin/src/MGLOfflineRegion_Private.h deleted file mode 100644 index 75a023bcbb8..00000000000 --- a/platform/darwin/src/MGLOfflineRegion_Private.h +++ /dev/null @@ -1,24 +0,0 @@ -#import - -#import "MGLOfflineRegion.h" - -#include - -NS_ASSUME_NONNULL_BEGIN - -@protocol MGLOfflineRegion_Private - -/** - Creates and returns a C++ offline region definition corresponding to the - receiver. - */ -- (const mbgl::OfflineRegionDefinition)offlineRegionDefinition; - -/** - Attributes to be passed into the offline download start event - */ -@property (nonatomic, readonly) NSDictionary *offlineStartEventAttributes; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLOfflineStorage.h b/platform/darwin/src/MGLOfflineStorage.h deleted file mode 100644 index d093bb938a2..00000000000 --- a/platform/darwin/src/MGLOfflineStorage.h +++ /dev/null @@ -1,474 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MGLOfflinePack; -@protocol MGLOfflineRegion; -@protocol MGLOfflineStorageDelegate; - -/** - Posted by the shared `MGLOfflineStorage` object when an `MGLOfflinePack` - object’s progress changes. The progress may change due to a resource being - downloaded or because the pack discovers during the download that more - resources are required for offline viewing. This notification is posted - whenever any field in the `progress` property changes. - - The `object` is the `MGLOfflinePack` object whose progress changed. The - `userInfo` dictionary contains the pack’s current state in the - `MGLOfflinePackUserInfoKeyState` key and details about the pack’s current - progress in the `MGLOfflinePackUserInfoKeyProgress` key. You may also consult - the `MGLOfflinePack.state` and `MGLOfflinePack.progress` properties, which - provide the same values. - - If you only need to observe changes in a particular pack’s progress, you can - alternatively observe KVO change notifications to the pack’s `progress` key - path. - - #### Related examples - See the - Download an offline map example to learn how to calculate the progress - of an offline download. - */ -FOUNDATION_EXTERN MGL_EXPORT const NSNotificationName MGLOfflinePackProgressChangedNotification; - -/** - Posted by the shared `MGLOfflineStorage` object whenever an `MGLOfflinePack` - object encounters an error while downloading. The error may be recoverable and - may not warrant the user’s attention. For example, the pack’s implementation - may attempt to re-request failed resources based on an exponential backoff - strategy or upon the restoration of network access. - - The `object` is the `MGLOfflinePack` object that encountered the error. The - `userInfo` dictionary contains the error object in the - `MGLOfflinePackUserInfoKeyError` key. - */ -FOUNDATION_EXTERN MGL_EXPORT const NSNotificationName MGLOfflinePackErrorNotification; - -/** - Posted by the shared `MGLOfflineStorage` object when the maximum number of - Mapbox-hosted tiles has been downloaded and stored on the current device. - - The `object` is the `MGLOfflinePack` object that reached the tile limit in the - course of downloading. The `userInfo` dictionary contains the tile limit in the - `MGLOfflinePackUserInfoKeyMaximumCount` key. - - Once this limit is reached, no instance of `MGLOfflinePack` can download - additional tiles from Mapbox APIs until already downloaded tiles are removed by - calling the `-[MGLOfflineStorage removePack:withCompletionHandler:]` method. - */ -FOUNDATION_EXTERN MGL_EXPORT const NSNotificationName MGLOfflinePackMaximumMapboxTilesReachedNotification; - -/** - A key in the `userInfo` property of a notification posted by `MGLOfflinePack`. - */ -typedef NSString *MGLOfflinePackUserInfoKey NS_EXTENSIBLE_STRING_ENUM; - -/** - The key for an `NSNumber` object that indicates an offline pack’s current - state. This key is used in the `userInfo` dictionary of an - `MGLOfflinePackProgressChangedNotification` notification. Call `-integerValue` - on the object to receive the `MGLOfflinePackState`-typed state. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLOfflinePackUserInfoKey MGLOfflinePackUserInfoKeyState; - -/** - The key for an `NSValue` object that indicates an offline pack’s current - progress. This key is used in the `userInfo` dictionary of an - `MGLOfflinePackProgressChangedNotification` notification. Call - `-MGLOfflinePackProgressValue` on the object to receive the - `MGLOfflinePackProgress`-typed progress. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLOfflinePackUserInfoKey MGLOfflinePackUserInfoKeyProgress; - -/** - The key for an `NSError` object that is encountered in the course of - downloading an offline pack. This key is used in the `userInfo` dictionary of - an `MGLOfflinePackErrorNotification` notification. The error’s domain is - `MGLErrorDomain`. See `MGLErrorCode` for possible error codes. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLOfflinePackUserInfoKey MGLOfflinePackUserInfoKeyError; - -/** - The key for an `NSNumber` object that indicates the maximum number of - Mapbox-hosted tiles that may be downloaded and stored on the current device. - This key is used in the `userInfo` dictionary of an - `MGLOfflinePackMaximumMapboxTilesReachedNotification` notification. Call - `-unsignedLongLongValue` on the object to receive the `uint64_t`-typed tile - limit. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLOfflinePackUserInfoKey MGLOfflinePackUserInfoKeyMaximumCount; - -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLUnsupportedRegionTypeException; - -/** - A block to be called once an offline pack has been completely created and - added. - - An application typically calls the `-resume` method on the pack inside this - completion handler to begin the download. - - @param pack Contains a pointer to the newly added pack, or `nil` if there was - an error creating or adding the pack. - @param error Contains a pointer to an error object (if any) indicating why the - pack could not be created or added. - */ -typedef void (^MGLOfflinePackAdditionCompletionHandler)(MGLOfflinePack * _Nullable pack, NSError * _Nullable error); - -/** - A block to be called once an offline pack has been completely invalidated and - removed. - - Avoid any references to the pack inside this completion handler: by the time - this completion handler is executed, the pack has become invalid, and any - messages passed to it will raise an exception. - - @param error Contains a pointer to an error object (if any) indicating why the - pack could not be invalidated or removed. - */ -typedef void (^MGLOfflinePackRemovalCompletionHandler)(NSError * _Nullable error); - -/** - A block to be called once the contents of a file are copied into the current packs. - - @param fileURL The file URL of the offline database containing the offline packs - that were copied. - @param packs An array of all known offline packs, or `nil` if there was an error - creating or adding the pack. - @param error A pointer to an error object (if any) indicating why the pack could - not be created or added. - */ -typedef void (^MGLBatchedOfflinePackAdditionCompletionHandler)(NSURL *fileURL, NSArray * _Nullable packs, NSError * _Nullable error); - -/** - The type of resource that is requested. - */ -typedef NS_ENUM(NSUInteger, MGLResourceKind) { - /** Unknown type */ - MGLResourceKindUnknown, - /** Style sheet JSON file */ - MGLResourceKindStyle, - /** TileJSON file as specified in https://www.mapbox.com/mapbox-gl-js/style-spec/#root-sources */ - MGLResourceKindSource, - /** A vector or raster tile as described in the style sheet at - https://www.mapbox.com/mapbox-gl-js/style-spec/#sources */ - MGLResourceKindTile, - /** Signed distance field glyphs for text rendering. These are the URLs specified in the style - in https://www.mapbox.com/mapbox-gl-js/style-spec/#root-glyphs */ - MGLResourceKindGlyphs, - /** Image part of a sprite sheet. It is constructed of the prefix in - https://www.mapbox.com/mapbox-gl-js/style-spec/#root-sprite and a PNG file extension. */ - MGLResourceKindSpriteImage, - /** JSON part of a sprite sheet. It is constructed of the prefix in - https://www.mapbox.com/mapbox-gl-js/style-spec/#root-sprite and a JSON file extension. */ - MGLResourceKindSpriteJSON, - /** Image data for a georeferenced image source. **/ - MGLResourceKindImage, -}; - -/** - MGLOfflineStorage implements a singleton (shared object) that manages offline - packs and ambient caching. All of this class’s instance methods are asynchronous, - reflecting the fact that offline resources are stored in a database. The shared - object maintains a canonical collection of offline packs in its `packs` property. - - Mapbox resources downloaded via this API are subject to separate Vector Tile and - Raster Tile API pricing and are not included in the Maps SDK’s “unlimited” requests. - See our pricing page for more - information. - - #### Related examples - See the - Download an offline map example to learn how to create and register an - offline pack for a defined region. - */ -MGL_EXPORT -@interface MGLOfflineStorage : NSObject - -/** - Returns the shared offline storage object. - */ -@property (class, nonatomic, readonly) MGLOfflineStorage *sharedOfflineStorage; - -#pragma mark - Adding Contents of File - -/** - Adds the offline packs located at the given file path to offline storage. - - The file must be a valid offline region database bundled with the application - or downloaded separately. - - The resulting packs are added or updated to the shared offline storage object’s `packs` - property, then the `completion` block is executed. - - @param filePath A string representation of the file path. The file path must be - writable as schema updates may be perfomed. - @param completion The completion handler to call once the contents of the given - file has been added to offline storage. This handler is executed asynchronously - on the main queue. - */ -- (void)addContentsOfFile:(NSString *)filePath withCompletionHandler:(nullable MGLBatchedOfflinePackAdditionCompletionHandler)completion; - -/** - Adds the offline packs located at the given URL to offline storage. - - The file must be a valid offline region database bundled with the application - or downloaded separately. - - The resulting packs are added or updated to the shared offline storage object’s `packs` - property, then the `completion` block is executed. - - @param fileURL A file URL specifying the file to add. URL should be a valid system path. - The file URL must be writable as schema updates may be performed. - @param completion The completion handler to call once the contents of the given - file has been added to offline storage. This handler is executed asynchronously - on the main queue. - */ -- (void)addContentsOfURL:(NSURL *)fileURL withCompletionHandler:(nullable MGLBatchedOfflinePackAdditionCompletionHandler)completion; - -#pragma mark - Accessing the Delegate - -/** - The receiver’s delegate. - - An offline storage object sends messages to its delegate to allow it to - transform URLs before they are requested from the internet. This can be used - add or remove custom parameters, or reroute certain requests to other servers - or endpoints. - */ -@property(nonatomic, weak, nullable) IBOutlet id delegate; - -#pragma mark - Managing Offline Packs - -/** - An array of all known offline packs, in the order in which they were created. - - This property is set to `nil`, indicating that the receiver does not yet know - the existing packs, for an undefined amount of time starting from the moment - the shared offline storage object is initialized until the packs are fetched - from the database. After that point, this property is always non-nil, but it - may be empty to indicate that no packs are present. - - To detect when the shared offline storage object has finished loading its - `packs` property, observe KVO change notifications on the `packs` key path. - The initial load results in an `NSKeyValueChangeSetting` change. - */ -@property (nonatomic, strong, readonly, nullable) NSArray *packs; - -/** - Creates and registers an offline pack that downloads the resources needed to - use the given region offline. - - The resulting pack is added to the shared offline storage object’s `packs` - property, then the `completion` block is executed with that pack passed in. - - The pack has an initial state of `MGLOfflinePackStateInactive`. To begin - downloading resources, call `-[MGLOfflinePack resume]` on the pack from within - the completion handler. To monitor download progress, add an observer for - `MGLOfflinePackProgressChangedNotification`s about that pack. - - To detect when any call to this method results in a new pack, observe KVO - change notifications on the shared offline storage object’s `packs` key path. - Additions to that array result in an `NSKeyValueChangeInsertion` change. - - @param region A region to download. - @param context Arbitrary data to store alongside the downloaded resources. - @param completion The completion handler to call once the pack has been added. - This handler is executed asynchronously on the main queue. - */ -- (void)addPackForRegion:(id )region withContext:(NSData *)context completionHandler:(nullable MGLOfflinePackAdditionCompletionHandler)completion; - -/** - Unregisters the given offline pack and allows resources that are no longer - required by any remaining packs to be potentially freed. - - As soon as this method is called on a pack, the pack becomes invalid; any - attempt to send it a message will result in an exception being thrown. If an - error occurs and the pack cannot be removed, do not attempt to reuse the pack - object. Instead, if you need continued access to the pack, suspend all packs - and use the `-reloadPacks` method to obtain valid pointers to all the packs. - - To detect when any call to this method results in a pack being removed, observe - KVO change notifications on the shared offline storage object’s `packs` key - path. Removals from that array result in an `NSKeyValueChangeRemoval` change. - - When you remove an offline pack, any resources that are required by that pack, - but not other packs, become eligible for deletion from offline storage. Because - the backing store used for offline storage is also used as a general purpose - cache for map resources, such resources may not be immediately removed if the - implementation determines that they remain useful for general performance of - the map. - - @param pack The offline pack to remove. - @param completion The completion handler to call once the pack has been - removed. This handler is executed asynchronously on the main queue. - */ -- (void)removePack:(MGLOfflinePack *)pack withCompletionHandler:(nullable MGLOfflinePackRemovalCompletionHandler)completion; - -/** - Invalidates the specified offline pack. This method checks that the tiles - in the specified offline pack match those from the server. Local tiles that - do not match the latest version on the server are updated. - - This is more efficient than deleting the offline pack and downloading it - again. If the data stored locally matches that on the server, new data will - not be downloaded. - - @param pack The offline pack to be invalidated. - @param completion The completion handler to call once the pack has been - removed. This handler is executed asynchronously on the main queue. - */ - -- (void)invalidatePack:(MGLOfflinePack *)pack withCompletionHandler:(void (^)(NSError * _Nullable))completion; -/** - Forcibly, asynchronously reloads the `packs` property. At some point after this - method is called, the pointer values of the `MGLOfflinePack` objects in the - `packs` property change, even if the underlying data for these packs has not - changed. If this method is called while a pack is actively downloading, the - behavior is undefined. - - You typically do not need to call this method. - - To detect when the shared offline storage object has finished reloading its - `packs` property, observe KVO change notifications on the `packs` key path. - A reload results in an `NSKeyValueChangeSetting` change. - */ -- (void)reloadPacks; - -/** - Sets the maximum number of Mapbox-hosted tiles that may be downloaded and - stored on the current device. - - Once this limit is reached, an - `MGLOfflinePackMaximumMapboxTilesReachedNotification` is posted for every - attempt to download additional tiles until already downloaded tiles are removed - by calling the `-removePack:withCompletionHandler:` method. - - @param maximumCount The maximum number of tiles allowed to be downloaded. - */ -- (void)setMaximumAllowedMapboxTiles:(uint64_t)maximumCount; - -/** - The cumulative size, measured in bytes, of all downloaded resources on disk. - - The returned value includes all resources, including tiles, whether downloaded - as part of an offline pack or due to caching during normal use of `MGLMapView`. - */ -@property (nonatomic, readonly) unsigned long long countOfBytesCompleted; - - -#pragma mark - Managing Ambient Cache - -/** - Sets the maximum ambient cache size in bytes. The default maximum cache - size is 50 MB. To disable ambient caching, set the maximum ambient cache size - to `0`. Setting the maximum ambient cache size does not impact the maximum size - of offline packs. - - While this method does not limit the space available to offline packs, - data in offline packs count towards this limit. If the maximum ambient - cache size is set to 30 MB and 20 MB of offline packs are downloaded, - there may be only 10 MB reserved for the ambient cache. - - This method should be called before the map and map style have been loaded. - - This method is potentially expensive, as the database will trim cached data - in order to prevent the ambient cache from being larger than the - specified amount. - - @param cacheSize The maximum size in bytes for the ambient cache. - @param completion The completion handler to call once the maximum ambient cache size - has been set. This handler is executed synchronously on the main queue. - */ - -- (void)setMaximumAmbientCacheSize:(NSUInteger)cacheSize withCompletionHandler:(void (^)(NSError *_Nullable error))completion; - -/** - Invalidates the ambient cache. This method checks that the tiles in the - ambient cache match those from the server. If the local tiles do not match - those on the server, they are re-downloaded. - - This is recommended over clearing the cache or resetting the database - because valid local tiles will not be downloaded again. - - Resources shared with offline packs will not be affected by this method. - - @param completion The completion handler to call once the ambient cache has - been revalidated. This handler is executed asynchronously on the main queue. - */ - -- (void)invalidateAmbientCacheWithCompletionHandler:(void (^)(NSError *_Nullable error))completion; - -/** - Clears the ambient cache by deleting resources. This method does not - affect resources shared with offline regions. - - @param completion The completion handler to call once resources from - the ambient cache have been cleared. This handler is executed - asynchronously on the main queue. - */ - -- (void)clearAmbientCacheWithCompletionHandler:(void (^)(NSError *_Nullable error))completion; - -/** - Deletes the existing database, which includes both the ambient cache and offline packs, - then reinitializes it. - - You typically do not need to call this method. - - @param completion The completion handler to call once the pack has database has - been reset. This handler is executed asynchronously on the main queue. - */ - -- (void)resetDatabaseWithCompletionHandler:(void (^)(NSError *_Nullable error))completion; - -/** - Inserts the provided resource into the ambient cache. - - This method mimics the caching that would take place if the equivalent resource - were requested in the process of map rendering. Use this method to pre-warm the - cache with resources you know will be requested. - - This method is asynchronous; the data may not be immediately available for - in-progress requests, though subsequent requests should have access to the - cached data. - - @param data Response data to store for this resource. The data is expected to - be uncompressed; internally, the cache will compress data as necessary. - @param url The URL at which the data can normally be found. - @param modified The date the resource was last modified. - @param expires The date after which the resource is no longer valid. - @param eTag An HTTP entity tag. - @param mustRevalidate A Boolean value indicating whether the data is still - usable past the expiration date. - */ -- (void)preloadData:(NSData *)data forURL:(NSURL *)url modificationDate:(nullable NSDate *)modified expirationDate:(nullable NSDate *)expires eTag:(nullable NSString *)eTag mustRevalidate:(BOOL)mustRevalidate NS_SWIFT_NAME(preload(_:for:modifiedOn:expiresOn:eTag:mustRevalidate:)); - -- (void)putResourceWithUrl:(NSURL *)url data:(NSData *)data modified:(nullable NSDate *)modified expires:(nullable NSDate *)expires etag:(nullable NSString *)etag mustRevalidate:(BOOL)mustRevalidate __attribute__((deprecated("", "-preloadData:forURL:modificationDate:expirationDate:eTag:mustRevalidate:"))); - -@end - -/** - The `MGLOfflineStorageDelegate` protocol defines methods that a delegate of an - `MGLOfflineStorage` object can optionally implement to transform various types - of URLs before downloading them via the internet. - */ -@protocol MGLOfflineStorageDelegate - -/** - Sent whenever a URL needs to be transformed. - - @param storage The storage object processing the download. - @param kind The kind of URL to be transformed. - @param url The original URL to be transformed. - @return A URL that will now be downloaded. - */ -- (NSURL *)offlineStorage:(MGLOfflineStorage *)storage - URLForResourceOfKind:(MGLResourceKind)kind - withURL:(NSURL *)url; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLOfflineStorage.mm b/platform/darwin/src/MGLOfflineStorage.mm deleted file mode 100644 index 4c71286b798..00000000000 --- a/platform/darwin/src/MGLOfflineStorage.mm +++ /dev/null @@ -1,652 +0,0 @@ -#import "MGLOfflineStorage_Private.h" - -#import "MGLFoundation_Private.h" -#import "MGLAccountManager_Private.h" -#import "MGLGeometry_Private.h" -#import "MGLOfflinePack_Private.h" -#import "MGLOfflineRegion_Private.h" -#import "MGLTilePyramidOfflineRegion.h" -#import "MGLShapeOfflineRegion.h" -#import "NSBundle+MGLAdditions.h" -#import "NSValue+MGLAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLLoggingConfiguration_Private.h" - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -#import "MMEConstants.h" -#import "MGLMapboxEvents.h" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -static NSString * const MGLOfflineStorageFileName = @"cache.db"; -static NSString * const MGLOfflineStorageFileName3_2_0_beta_1 = @"offline.db"; - -const NSNotificationName MGLOfflinePackProgressChangedNotification = @"MGLOfflinePackProgressChanged"; -const NSNotificationName MGLOfflinePackErrorNotification = @"MGLOfflinePackError"; -const NSNotificationName MGLOfflinePackMaximumMapboxTilesReachedNotification = @"MGLOfflinePackMaximumMapboxTilesReached"; - -const MGLOfflinePackUserInfoKey MGLOfflinePackUserInfoKeyState = @"State"; -const MGLOfflinePackUserInfoKey MGLOfflinePackUserInfoKeyProgress = @"Progress"; -const MGLOfflinePackUserInfoKey MGLOfflinePackUserInfoKeyError = @"Error"; -const MGLOfflinePackUserInfoKey MGLOfflinePackUserInfoKeyMaximumCount = @"MaximumCount"; - -const MGLExceptionName MGLUnsupportedRegionTypeException = @"MGLUnsupportedRegionTypeException"; - -@interface MGLOfflineStorage () - -@property (nonatomic, strong, readwrite) NSMutableArray *packs; -@property (nonatomic) std::shared_ptr mbglDatabaseFileSource; -@property (nonatomic) std::shared_ptr mbglOnlineFileSource; -@property (nonatomic) std::shared_ptr mbglFileSource; -@property (nonatomic) std::string mbglCachePath; -@property (nonatomic, getter=isPaused) BOOL paused; -@end - -@implementation MGLOfflineStorage { - std::unique_ptr> _mbglResourceTransform; -} - -+ (instancetype)sharedOfflineStorage { - static dispatch_once_t onceToken; - static MGLOfflineStorage *sharedOfflineStorage; - dispatch_once(&onceToken, ^{ - sharedOfflineStorage = [[self alloc] init]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[NSNotificationCenter defaultCenter] addObserver:sharedOfflineStorage selector:@selector(unpauseFileSource:) name:UIApplicationWillEnterForegroundNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:sharedOfflineStorage selector:@selector(pauseFileSource:) name:UIApplicationDidEnterBackgroundNotification object:nil]; -#endif - [sharedOfflineStorage reloadPacks]; - }); - - return sharedOfflineStorage; -} - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -- (void)pauseFileSource:(__unused NSNotification *)notification { - if (self.isPaused) { - return; - } - _mbglFileSource->pause(); - self.paused = YES; -} - -- (void)unpauseFileSource:(__unused NSNotification *)notification { - if (!self.isPaused) { - return; - } - _mbglFileSource->resume(); - self.paused = NO; -} -#endif - -- (void)setDelegate:(id)newValue { - MGLLogDebug(@"Setting delegate: %@", newValue); - _delegate = newValue; - if ([self.delegate respondsToSelector:@selector(offlineStorage:URLForResourceOfKind:withURL:)]) { - _mbglResourceTransform = std::make_unique>(*mbgl::Scheduler::GetCurrent(), [offlineStorage = self](auto kind_, const std::string& url_, mbgl::ResourceTransform::FinishedCallback cb) { - NSURL* url = - [NSURL URLWithString:[[NSString alloc] initWithBytes:url_.data() - length:url_.length() - encoding:NSUTF8StringEncoding]]; - MGLResourceKind kind = MGLResourceKindUnknown; - switch (kind_) { - case mbgl::Resource::Kind::Tile: - kind = MGLResourceKindTile; - break; - case mbgl::Resource::Kind::Glyphs: - kind = MGLResourceKindGlyphs; - break; - case mbgl::Resource::Kind::Style: - kind = MGLResourceKindStyle; - break; - case mbgl::Resource::Kind::Source: - kind = MGLResourceKindSource; - break; - case mbgl::Resource::Kind::SpriteImage: - kind = MGLResourceKindSpriteImage; - break; - case mbgl::Resource::Kind::SpriteJSON: - kind = MGLResourceKindSpriteJSON; - break; - case mbgl::Resource::Kind::Image: - kind = MGLResourceKindImage; - break; - case mbgl::Resource::Kind::Unknown: - kind = MGLResourceKindUnknown; - break; - - } - url = [offlineStorage.delegate offlineStorage:offlineStorage - URLForResourceOfKind:kind - withURL:url]; - cb(url.absoluteString.UTF8String); - }); - - _mbglOnlineFileSource->setResourceTransform({[actorRef = _mbglResourceTransform->self()](auto kind_, const std::string& url_, mbgl::ResourceTransform::FinishedCallback cb_){ - actorRef.invoke(&mbgl::ResourceTransform::TransformCallback::operator(), kind_, url_, std::move(cb_)); - }}); - } else { - _mbglResourceTransform.reset(); - _mbglOnlineFileSource->setResourceTransform({}); - } -} - -/** - Returns the file URL to the offline cache, with the option to omit the private - subdirectory for legacy (v3.2.0 - v3.2.3) migration purposes. - - The cache is located in a directory specific to the application, so that packs - downloaded by other applications don’t count toward this application’s limits. - - The cache is located at: - ~/Library/Application Support/tld.app.bundle.id/.mapbox/cache.db - - The subdirectory-less cache was located at: - ~/Library/Application Support/tld.app.bundle.id/cache.db - */ -+ (NSURL *)cacheURLIncludingSubdirectory:(BOOL)useSubdirectory { - NSURL *cacheDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory - inDomain:NSUserDomainMask - appropriateForURL:nil - create:YES - error:nil]; - NSString *bundleIdentifier = [NSBundle mgl_applicationBundleIdentifier]; - if (!bundleIdentifier) { - // There’s no main bundle identifier when running in a unit test bundle. - bundleIdentifier = [[NSUUID UUID] UUIDString]; - } - cacheDirectoryURL = [cacheDirectoryURL URLByAppendingPathComponent:bundleIdentifier]; - if (useSubdirectory) { - cacheDirectoryURL = [cacheDirectoryURL URLByAppendingPathComponent:@".mapbox"]; - } - [[NSFileManager defaultManager] createDirectoryAtURL:cacheDirectoryURL - withIntermediateDirectories:YES - attributes:nil - error:nil]; - if (useSubdirectory) { - // Avoid backing up the offline cache onto iCloud, because it can be - // redownloaded. Ideally, we’d even put the ambient cache in Caches, so - // it can be reclaimed by the system when disk space runs low. But - // unfortunately it has to live in the same file as offline resources. - [cacheDirectoryURL setResourceValue:@YES forKey:NSURLIsExcludedFromBackupKey error:NULL]; - } - return [cacheDirectoryURL URLByAppendingPathComponent:MGLOfflineStorageFileName]; -} - -/** - Returns the absolute path to the location where v3.2.0-beta.1 placed the - offline cache. - */ -+ (NSString *)legacyCachePath { -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - // ~/Documents/offline.db - NSArray *legacyPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); - NSString *legacyCachePath = [legacyPaths.firstObject stringByAppendingPathComponent:MGLOfflineStorageFileName3_2_0_beta_1]; -#elif TARGET_OS_MAC - // ~/Library/Caches/tld.app.bundle.id/offline.db - NSString *bundleIdentifier = [NSBundle mgl_applicationBundleIdentifier]; - NSURL *legacyCacheDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSCachesDirectory - inDomain:NSUserDomainMask - appropriateForURL:nil - create:NO - error:nil]; - legacyCacheDirectoryURL = [legacyCacheDirectoryURL URLByAppendingPathComponent:bundleIdentifier]; - NSURL *legacyCacheURL = [legacyCacheDirectoryURL URLByAppendingPathComponent:MGLOfflineStorageFileName3_2_0_beta_1]; - NSString *legacyCachePath = legacyCacheURL ? legacyCacheURL.path : @""; -#endif - return legacyCachePath; -} - -- (instancetype)init { - MGLInitializeRunLoop(); - - if (self = [super init]) { - NSURL *cacheURL = [[self class] cacheURLIncludingSubdirectory:YES]; - NSString *cachePath = cacheURL.path ?: @""; - - // Move the offline cache from v3.2.0-beta.1 to a location that can also - // be used for ambient caching. - if (![[NSFileManager defaultManager] fileExistsAtPath:cachePath]) { - NSString *legacyCachePath = [[self class] legacyCachePath]; - [[NSFileManager defaultManager] moveItemAtPath:legacyCachePath toPath:cachePath error:NULL]; - } - - // Move the offline file cache from v3.2.x path to a subdirectory that - // can be reliably excluded from backups. - if (![[NSFileManager defaultManager] fileExistsAtPath:cachePath]) { - NSURL *subdirectorylessCacheURL = [[self class] cacheURLIncludingSubdirectory:NO]; - [[NSFileManager defaultManager] moveItemAtPath:subdirectorylessCacheURL.path toPath:cachePath error:NULL]; - } - - _mbglCachePath = cachePath.UTF8String; - mbgl::ResourceOptions options; - options.withCachePath(_mbglCachePath) - .withAssetPath([NSBundle mainBundle].resourceURL.path.UTF8String); - _mbglFileSource = mbgl::FileSourceManager::get()->getFileSource(mbgl::FileSourceType::ResourceLoader, options); - _mbglOnlineFileSource = mbgl::FileSourceManager::get()->getFileSource(mbgl::FileSourceType::Network, options); - _mbglDatabaseFileSource = std::static_pointer_cast(std::shared_ptr(mbgl::FileSourceManager::get()->getFileSource(mbgl::FileSourceType::Database, options))); - - // Observe for changes to the API base URL (and find out the current one). - [[MGLAccountManager sharedManager] addObserver:self - forKeyPath:@"apiBaseURL" - options:(NSKeyValueObservingOptionInitial | - NSKeyValueObservingOptionNew) - context:NULL]; - - // Observe for changes to the global access token (and find out the current one). - [[MGLAccountManager sharedManager] addObserver:self - forKeyPath:@"accessToken" - options:(NSKeyValueObservingOptionInitial | - NSKeyValueObservingOptionNew) - context:NULL]; - } - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [[MGLAccountManager sharedManager] removeObserver:self forKeyPath:@"apiBaseURL"]; - [[MGLAccountManager sharedManager] removeObserver:self forKeyPath:@"accessToken"]; - - for (MGLOfflinePack *pack in self.packs) { - [pack invalidate]; - } -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - // Synchronize the file source’s access token with the global one in MGLAccountManager. - if ([keyPath isEqualToString:@"accessToken"] && object == [MGLAccountManager sharedManager]) { - NSString *accessToken = change[NSKeyValueChangeNewKey]; - if (![accessToken isKindOfClass:[NSNull class]]) { - _mbglOnlineFileSource->setProperty(mbgl::ACCESS_TOKEN_KEY, accessToken.UTF8String); - } - } else if ([keyPath isEqualToString:@"apiBaseURL"] && object == [MGLAccountManager sharedManager]) { - NSURL *apiBaseURL = change[NSKeyValueChangeNewKey]; - if ([apiBaseURL isKindOfClass:[NSNull class]]) { - _mbglFileSource->setProperty(mbgl::API_BASE_URL_KEY, mbgl::util::API_BASE_URL); - } else { - _mbglFileSource->setProperty(mbgl::API_BASE_URL_KEY, apiBaseURL.absoluteString.UTF8String); - } - } else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -#pragma mark Offline merge methods - -- (void)addContentsOfFile:(NSString *)filePath withCompletionHandler:(MGLBatchedOfflinePackAdditionCompletionHandler)completion { - MGLLogDebug(@"Adding contentsOfFile: %@ completionHandler: %@", filePath, completion); - NSURL *fileURL = [NSURL fileURLWithPath:filePath]; - - [self addContentsOfURL:fileURL withCompletionHandler:completion]; - -} - -- (void)addContentsOfURL:(NSURL *)fileURL withCompletionHandler:(MGLBatchedOfflinePackAdditionCompletionHandler)completion { - MGLLogDebug(@"Adding contentsOfURL: %@ completionHandler: %@", fileURL, completion); - NSFileManager *fileManager = [NSFileManager defaultManager]; - - if (!fileURL.isFileURL) { - [NSException raise:NSInvalidArgumentException format:@"%@ must be a valid file path", fileURL.absoluteString]; - } - if (![fileManager isWritableFileAtPath:fileURL.path]) { - [NSException raise:NSInvalidArgumentException format:@"The file path: %@ must be writable", fileURL.absoluteString]; - } - - __weak MGLOfflineStorage *weakSelf = self; - [self _addContentsOfFile:fileURL.path withCompletionHandler:^(NSArray * _Nullable packs, NSError * _Nullable error) { - if (packs) { - NSMutableDictionary *packsByIdentifier = [NSMutableDictionary dictionary]; - - MGLOfflineStorage *strongSelf = weakSelf; - for (MGLOfflinePack *pack in packs) { - [packsByIdentifier setObject:pack forKey:@(pack.mbglOfflineRegion->getID())]; - } - - id mutablePacks = [strongSelf mutableArrayValueForKey:@"packs"]; - NSMutableIndexSet *replaceIndexSet = [NSMutableIndexSet indexSet]; - NSMutableArray *replacePacksArray = [NSMutableArray array]; - [strongSelf.packs enumerateObjectsUsingBlock:^(MGLOfflinePack * _Nonnull pack, NSUInteger idx, BOOL * _Nonnull stop) { - MGLOfflinePack *newPack = packsByIdentifier[@(pack.mbglOfflineRegion->getID())]; - if (newPack) { - MGLOfflinePack *previousPack = [mutablePacks objectAtIndex:idx]; - [previousPack invalidate]; - [replaceIndexSet addIndex:idx]; - [replacePacksArray addObject:[packsByIdentifier objectForKey:@(newPack.mbglOfflineRegion->getID())]]; - [packsByIdentifier removeObjectForKey:@(newPack.mbglOfflineRegion->getID())]; - } - - }]; - - if (replaceIndexSet.count > 0) { - [mutablePacks replaceObjectsAtIndexes:replaceIndexSet withObjects:replacePacksArray]; - } - - [mutablePacks addObjectsFromArray:packsByIdentifier.allValues]; - } - if (completion) { - completion(fileURL, packs, error); - } - }]; -} - -- (void)_addContentsOfFile:(NSString *)filePath withCompletionHandler:(void (^)(NSArray * _Nullable packs, NSError * _Nullable error))completion { - _mbglDatabaseFileSource->mergeOfflineRegions(std::string(static_cast([filePath UTF8String])), [&, completion, filePath](mbgl::expected result) { - NSError *error; - NSMutableArray *packs; - if (!result) { - NSString *description = [NSString stringWithFormat:NSLocalizedStringWithDefaultValue(@"ADD_FILE_CONTENTS_FAILED_DESC", @"Foundation", nil, @"Unable to add offline packs from the file at %@.", @"User-friendly error description"), filePath]; - error = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeModifyingOfflineStorageFailed - userInfo:@{ - NSLocalizedDescriptionKey: description, - NSLocalizedFailureReasonErrorKey: @(mbgl::util::toString(result.error()).c_str()) - }]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:error]; -#endif - } else { - auto& regions = result.value(); - packs = [NSMutableArray arrayWithCapacity:regions.size()]; - for (auto ®ion : regions) { - MGLOfflinePack *pack = [[MGLOfflinePack alloc] initWithMBGLRegion:new mbgl::OfflineRegion(std::move(region))]; - [packs addObject:pack]; - } - } - if (completion) { - dispatch_async(dispatch_get_main_queue(), [&, completion, error, packs](void) { - completion(packs, error); - }); - } - }); -} - -#pragma mark Pack management methods - -- (void)addPackForRegion:(id )region withContext:(NSData *)context completionHandler:(MGLOfflinePackAdditionCompletionHandler)completion { - MGLLogDebug(@"Adding packForRegion: %@ contextLength: %lu completionHandler: %@", region, (unsigned long)context.length, completion); - __weak MGLOfflineStorage *weakSelf = self; - [self _addPackForRegion:region withContext:context completionHandler:^(MGLOfflinePack * _Nullable pack, NSError * _Nullable error) { - pack.state = MGLOfflinePackStateInactive; - MGLOfflineStorage *strongSelf = weakSelf; - [[strongSelf mutableArrayValueForKey:@"packs"] addObject:pack]; - if (completion) { - completion(pack, error); - } - - #if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - NSMutableDictionary *offlineDownloadStartEventAttributes = [NSMutableDictionary dictionaryWithObject:MMEventTypeOfflineDownloadStart forKey:MMEEventKeyEvent]; - - if ([region conformsToProtocol:@protocol(MGLOfflineRegion_Private)]) { - NSDictionary *regionAttributes = ((id)region).offlineStartEventAttributes; - [offlineDownloadStartEventAttributes addEntriesFromDictionary:regionAttributes]; - } - - [MGLMapboxEvents pushEvent:MMEventTypeOfflineDownloadStart withAttributes:offlineDownloadStartEventAttributes]; - #endif - }]; -} - -- (void)_addPackForRegion:(id )region withContext:(NSData *)context completionHandler:(MGLOfflinePackAdditionCompletionHandler)completion { - if (![region conformsToProtocol:@protocol(MGLOfflineRegion_Private)]) { - [NSException raise:MGLUnsupportedRegionTypeException - format:@"Regions of type %@ are unsupported.", NSStringFromClass([region class])]; - return; - } - - const mbgl::OfflineRegionDefinition regionDefinition = [(id )region offlineRegionDefinition]; - mbgl::OfflineRegionMetadata metadata(context.length); - [context getBytes:&metadata[0] length:metadata.size()]; - _mbglDatabaseFileSource->createOfflineRegion(regionDefinition, metadata, [&, completion](mbgl::expected mbglOfflineRegion) { - NSError *error; - if (!mbglOfflineRegion) { - NSString *errorDescription = @(mbgl::util::toString(mbglOfflineRegion.error()).c_str()); - error = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeModifyingOfflineStorageFailed userInfo:errorDescription ? @{ - NSLocalizedDescriptionKey: errorDescription, - } : nil]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:error]; -#endif - } - if (completion) { - MGLOfflinePack *pack = mbglOfflineRegion ? [[MGLOfflinePack alloc] initWithMBGLRegion:new mbgl::OfflineRegion(std::move(mbglOfflineRegion.value()))] : nil; - dispatch_async(dispatch_get_main_queue(), [&, completion, error, pack](void) { - completion(pack, error); - }); - } - }); -} - -- (void)removePack:(MGLOfflinePack *)pack withCompletionHandler:(MGLOfflinePackRemovalCompletionHandler)completion { - MGLLogDebug(@"Removing pack: %@ completionHandler: %@", pack, completion); - [[self mutableArrayValueForKey:@"packs"] removeObject:pack]; - [self _removePack:pack withCompletionHandler:^(NSError * _Nullable error) { - if (completion) { - completion(error); - } - }]; -} - -- (void)_removePack:(MGLOfflinePack *)pack withCompletionHandler:(MGLOfflinePackRemovalCompletionHandler)completion { - mbgl::OfflineRegion *mbglOfflineRegion = pack.mbglOfflineRegion; - - [pack invalidate]; - - if (!mbglOfflineRegion) { - MGLAssert(pack.state == MGLOfflinePackStateInvalid, @"State should be invalid"); - completion(nil); - return; - } - - _mbglDatabaseFileSource->deleteOfflineRegion(std::move(*mbglOfflineRegion), [&, completion](std::exception_ptr exception) { - NSError *error; - if (exception) { - error = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeModifyingOfflineStorageFailed userInfo:@{ - NSLocalizedDescriptionKey: @(mbgl::util::toString(exception).c_str()), - }]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:error]; -#endif - } - if (completion) { - dispatch_async(dispatch_get_main_queue(), [&, completion, error](void) { - completion(error); - }); - } - }); - -} - -- (void)invalidatePack:(MGLOfflinePack *)pack withCompletionHandler:(void (^)(NSError * _Nullable))completion { - mbgl::OfflineRegion& region = *pack.mbglOfflineRegion; - NSError *error; - if (!pack.mbglOfflineRegion) { - completion(nil); - return; - } - - _mbglDatabaseFileSource->invalidateOfflineRegion(region, [&](std::exception_ptr exception) { - if (exception) { - error = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeModifyingOfflineStorageFailed userInfo:@{ - NSLocalizedDescriptionKey: @(mbgl::util::toString(exception).c_str()), - }]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:error]; -#endif - } - }); - if (completion) { - dispatch_async(dispatch_get_main_queue(), [&, completion, error](void) { - completion(error); - }); - } -} - -- (void)reloadPacks { - MGLLogInfo(@"Reloading packs."); - [self getPacksWithCompletionHandler:^(NSArray *packs, __unused NSError * _Nullable error) { - for (MGLOfflinePack *pack in self.packs) { - [pack invalidate]; - } - self.packs = [packs mutableCopy]; - }]; -} - -- (void)getPacksWithCompletionHandler:(void (^)(NSArray *packs, NSError * _Nullable error))completion { - _mbglDatabaseFileSource->listOfflineRegions([&, completion](mbgl::expected result) { - NSError *error; - NSMutableArray *packs; - if (!result) { - error = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeUnknown userInfo:@{ - NSLocalizedDescriptionKey: @(mbgl::util::toString(result.error()).c_str()), - }]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:error]; -#endif - } else { - auto& regions = result.value(); - packs = [NSMutableArray arrayWithCapacity:regions.size()]; - for (auto ®ion : regions) { - MGLOfflinePack *pack = [[MGLOfflinePack alloc] initWithMBGLRegion:new mbgl::OfflineRegion(std::move(region))]; - [packs addObject:pack]; - } - } - if (completion) { - dispatch_async(dispatch_get_main_queue(), [&, completion, error, packs](void) { - completion(packs, error); - }); - } - }); -} - -- (void)setMaximumAllowedMapboxTiles:(uint64_t)maximumCount { - MGLLogDebug(@"Setting maximumAllowedMapboxTiles: %lu", (unsigned long)maximumCount); - _mbglDatabaseFileSource->setOfflineMapboxTileCountLimit(maximumCount); -} - -#pragma mark - Ambient Cache management - -- (void)setMaximumAmbientCacheSize:(NSUInteger)cacheSize withCompletionHandler:(void (^)(NSError * _Nullable))completion { - _mbglDatabaseFileSource->setMaximumAmbientCacheSize(cacheSize, [&, completion](std::exception_ptr exception) { - NSError *error; - if (completion) { - if (exception) { - error = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeModifyingOfflineStorageFailed userInfo:@{ - NSLocalizedDescriptionKey: @(mbgl::util::toString(exception).c_str()), - }]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:error]; -#endif - } - dispatch_sync(dispatch_get_main_queue(), ^ { - completion(error); - }); - } - }); -} - -- (void)invalidateAmbientCacheWithCompletionHandler:(void (^)(NSError *_Nullable))completion { - _mbglDatabaseFileSource->invalidateAmbientCache([&, completion](std::exception_ptr exception){ - NSError *error; - if (completion) { - if (exception) { - // Convert std::exception_ptr to an NSError. - error = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeModifyingOfflineStorageFailed userInfo:@{ - NSLocalizedDescriptionKey: @(mbgl::util::toString(exception).c_str()), - }]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:error]; -#endif - } - dispatch_async(dispatch_get_main_queue(), ^ { - completion(error); - }); - } - }); -} - -- (void)clearAmbientCacheWithCompletionHandler:(void (^)(NSError *_Nullable error))completion { - _mbglDatabaseFileSource->clearAmbientCache([&, completion](std::exception_ptr exception){ - NSError *error; - if (completion) { - if (exception) { - error = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeModifyingOfflineStorageFailed userInfo:@{ - NSLocalizedDescriptionKey: @(mbgl::util::toString(exception).c_str()), - }]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:error]; -#endif - } - dispatch_async(dispatch_get_main_queue(), [&, completion, error](void) { - completion(error); - }); - } - }); -} - -- (void)resetDatabaseWithCompletionHandler:(void (^)(NSError *_Nullable error))completion { - _mbglDatabaseFileSource->resetDatabase([&, completion](std::exception_ptr exception) { - NSError *error; - if (completion) { - if (exception) { - error = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeUnknown userInfo:@{ - NSLocalizedDescriptionKey: @(mbgl::util::toString(exception).c_str()), - }]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:error]; -#endif - } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(error); - }); - } - }); -} -#pragma mark - - -- (unsigned long long)countOfBytesCompleted { - NSURL *cacheURL = [[self class] cacheURLIncludingSubdirectory:YES]; - NSString *cachePath = cacheURL.path; - if (!cachePath) { - return 0; - } - - NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:cachePath error:NULL]; - return attributes.fileSize; -} - -- (void)preloadData:(NSData *)data forURL:(NSURL *)url modificationDate:(nullable NSDate *)modified expirationDate:(nullable NSDate *)expires eTag:(nullable NSString *)eTag mustRevalidate:(BOOL)mustRevalidate { - mbgl::Resource resource(mbgl::Resource::Kind::Unknown, url.absoluteString.UTF8String); - mbgl::Response response; - response.data = std::make_shared(static_cast(data.bytes), data.length); - response.mustRevalidate = mustRevalidate; - - if (eTag) { - response.etag = std::string(eTag.UTF8String); - } - - if (modified) { - response.modified = mbgl::Timestamp() + std::chrono::duration_cast(MGLDurationFromTimeInterval(modified.timeIntervalSince1970)); - } - - if (expires) { - response.expires = mbgl::Timestamp() + std::chrono::duration_cast(MGLDurationFromTimeInterval(expires.timeIntervalSince1970)); - } - - _mbglDatabaseFileSource->put(resource, response); -} - -- (void)putResourceWithUrl:(NSURL *)url data:(NSData *)data modified:(nullable NSDate *)modified expires:(nullable NSDate *)expires etag:(nullable NSString *)etag mustRevalidate:(BOOL)mustRevalidate { - [self preloadData:data forURL:url modificationDate:modified expirationDate:expires eTag:etag mustRevalidate:mustRevalidate]; -} - -@end diff --git a/platform/darwin/src/MGLOfflineStorage_Private.h b/platform/darwin/src/MGLOfflineStorage_Private.h deleted file mode 100644 index c01163e766b..00000000000 --- a/platform/darwin/src/MGLOfflineStorage_Private.h +++ /dev/null @@ -1,36 +0,0 @@ -#import "MGLOfflineStorage.h" - -#import "MGLOfflinePack.h" - -#include -#include - -#include - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLOfflineStorage (Private) - -/** - The shared database file source object owned by the shared offline storage object. - */ -@property (nonatomic) std::shared_ptr mbglDatabaseFileSource; - -/** - The shared online file source object owned by the shared offline storage object. - */ -@property (nonatomic) std::shared_ptr mbglOnlineFileSource; - -/** - The shared resource loader file source object owned by the shared offline storage object. - */ -@property (nonatomic) std::shared_ptr mbglFileSource; - -/** - The shared offline cache path. - */ -@property (nonatomic) std::string mbglCachePath; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLOpenGLStyleLayer.h b/platform/darwin/src/MGLOpenGLStyleLayer.h deleted file mode 100644 index fd82a4a69dc..00000000000 --- a/platform/darwin/src/MGLOpenGLStyleLayer.h +++ /dev/null @@ -1,51 +0,0 @@ -#import -#import -#import - -#import "MGLFoundation.h" -#import "MGLStyleValue.h" -#import "MGLStyleLayer.h" -#import "MGLGeometry.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MGLMapView; -@class MGLStyle; - -typedef struct MGLStyleLayerDrawingContext { - CGSize size; - CLLocationCoordinate2D centerCoordinate; - double zoomLevel; - CLLocationDirection direction; - CGFloat pitch; - CGFloat fieldOfView; - MGLMatrix4 projectionMatrix; -} MGLStyleLayerDrawingContext; - -MGL_EXPORT -@interface MGLOpenGLStyleLayer : MGLStyleLayer - -@property (nonatomic, weak, readonly) MGLStyle *style; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -#if TARGET_OS_IPHONE -@property (nonatomic, readonly) EAGLContext *context; -#else -@property (nonatomic, readonly) CGLContextObj context; -#endif -#pragma clang diagnostic pop - -- (instancetype)initWithIdentifier:(NSString *)identifier; - -- (void)didMoveToMapView:(MGLMapView *)mapView; - -- (void)willMoveFromMapView:(MGLMapView *)mapView; - -- (void)drawInMapView:(MGLMapView *)mapView withContext:(MGLStyleLayerDrawingContext)context; - -- (void)setNeedsDisplay; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLOpenGLStyleLayer.mm b/platform/darwin/src/MGLOpenGLStyleLayer.mm deleted file mode 100644 index 8c9e4b02a23..00000000000 --- a/platform/darwin/src/MGLOpenGLStyleLayer.mm +++ /dev/null @@ -1,206 +0,0 @@ -#import "MGLOpenGLStyleLayer.h" -#import "MGLOpenGLStyleLayer_Private.h" - -#import "MGLMapView_Private.h" -#import "MGLStyle_Private.h" -#import "MGLStyleLayer_Private.h" -#import "MGLGeometry_Private.h" - -#include -#include - -class MGLOpenGLLayerHost : public mbgl::style::CustomLayerHost { -public: - MGLOpenGLLayerHost(MGLOpenGLStyleLayer *styleLayer) { - layerRef = styleLayer; - layer = nil; - } - - void initialize() { - if (layerRef == nil) return; - else if (layer == nil) layer = layerRef; - - [layer didMoveToMapView:layer.style.mapView]; - } - - void render(const mbgl::style::CustomLayerRenderParameters ¶ms) { - if(!layer) return; - - MGLStyleLayerDrawingContext drawingContext = { - .size = CGSizeMake(params.width, params.height), - .centerCoordinate = CLLocationCoordinate2DMake(params.latitude, params.longitude), - .zoomLevel = params.zoom, - .direction = mbgl::util::wrap(params.bearing, 0., 360.), - .pitch = static_cast(params.pitch), - .fieldOfView = static_cast(params.fieldOfView), - .projectionMatrix = MGLMatrix4Make(params.projectionMatrix) - }; - [layer drawInMapView:layer.style.mapView withContext:drawingContext]; - } - - void contextLost() {} - - void deinitialize() { - if (layer == nil) return; - - [layer willMoveFromMapView:layer.style.mapView]; - layerRef = layer; - layer = nil; - } -private: - __weak MGLOpenGLStyleLayer * layerRef; - MGLOpenGLStyleLayer * layer = nil; -}; - -/** - An `MGLOpenGLStyleLayer` is a style layer that is rendered by OpenGL code that - you provide. - - By default, this class does nothing. You can subclass this class to provide - custom OpenGL drawing code that is run on each frame of the map. Your subclass - should override the `-didMoveToMapView:`, `-willMoveFromMapView:`, and - `-drawInMapView:withContext:` methods. - - You can access an existing OpenGL style layer using the - `-[MGLStyle layerWithIdentifier:]` method if you know its identifier; - otherwise, find it using the `MGLStyle.layers` property. You can also create a - new OpenGL style layer and add it to the style using a method such as - `-[MGLStyle addLayer:]`. - - @warning This API is undocumented and therefore unsupported. It may change at - any time without notice. - */ -@interface MGLOpenGLStyleLayer () - -@property (nonatomic, readonly) mbgl::style::CustomLayer *rawLayer; - -/** - The style currently containing the layer. - - If the layer is not currently part of any style, this property is - set to `nil`. - */ -@property (nonatomic, weak, readwrite) MGLStyle *style; - -@end - -@implementation MGLOpenGLStyleLayer - -/** - Returns an OpenGL style layer object initialized with the given identifier. - - After initializing and configuring the style layer, add it to a map view’s - style using the `-[MGLStyle addLayer:]` or - `-[MGLStyle insertLayer:belowLayer:]` method. - - @param identifier A string that uniquely identifies the layer in the style to - which it is added. - @return An initialized OpenGL style layer. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier { - auto layer = std::make_unique(identifier.UTF8String, - std::make_unique(self)); - return self = [super initWithPendingLayer:std::move(layer)]; -} - -- (mbgl::style::CustomLayer *)rawLayer { - return (mbgl::style::CustomLayer *)super.rawLayer; -} - -#if TARGET_OS_IPHONE -- (EAGLContext *)context { - return self.style.mapView.context; -} -#else -- (CGLContextObj)context { - return self.style.mapView.context; -} -#endif - -#pragma mark - Adding to and removing from a map view -- (void)addToStyle:(MGLStyle *)style belowLayer:(MGLStyleLayer *)otherLayer { - self.style = style; - self.style.openGLLayers[self.identifier] = self; - [super addToStyle:style belowLayer:otherLayer]; -} - -- (void)removeFromStyle:(MGLStyle *)style { - [super removeFromStyle:style]; - self.style.openGLLayers[self.identifier] = nil; - self.style = nil; -} - -/** - Called immediately after a layer is added to a map view’s style. - - This method is intended to be overridden in a subclass. You can use this method - to perform any setup work before the layer is used to draw a frame. For - example, you might use this method to compile an OpenGL shader. The default - implementation of this method does nothing. - - Any resource acquired in this method must be released in - `-willMoveFromMapView:`. - - @param mapView The map view to whose style the layer has been added. - */ -- (void)didMoveToMapView:(MGLMapView *)mapView { - -} - -/** - Called immediately before a layer is removed from a map view’s style. - - This method is intended to be overridden in a subclass. You can use this method - to perform any teardown work once the layer has drawn its last frame and is - about to be removed from the style. The default implementation of this method - does nothing. - - This method may be called even if `-didMoveToMapView:` has not been called. - - @param mapView The map view from whose style the layer is about to be removed. - */ -- (void)willMoveFromMapView:(MGLMapView *)mapView { - -} - -/** - Called each time the layer needs to draw a new frame in a map view. - - This method is intended to be overridden in a subclass. You can use this method - to draw the layer’s content. The default implementation of this method does - nothing. - - Your implementation should not make any assumptions about the OpenGL state, - other than that the current OpenGL context is active. It may make changes to - the OpenGL state. It is not required to reset values such as the depth mask, - stencil mask, or corresponding test flags to their original values. - - Be sure to draw your fragments with a z value of 1 to take advantage - of the opaque fragment culling, in case the style contains any opaque layers - above this layer. - - @param mapView The map view to which the layer draws. - @param context A context structure with information defining the frame to draw. - */ -- (void)drawInMapView:(MGLMapView *)mapView withContext:(MGLStyleLayerDrawingContext)context { - -} - -/** - Forces the map view associated with this style to redraw the receiving layer, - causing the `-drawInMapView:withContext:` method to be called. - */ -- (void)setNeedsDisplay { - [self.style.mapView setNeedsRerender]; -} - -@end - -namespace mbgl { - -MGLStyleLayer* OpenGLStyleLayerPeerFactory::createPeer(style::Layer* rawLayer) { - return [[MGLOpenGLStyleLayer alloc] initWithRawLayer:rawLayer]; -} - -} // namespace mbgl - diff --git a/platform/darwin/src/MGLOpenGLStyleLayer_Private.h b/platform/darwin/src/MGLOpenGLStyleLayer_Private.h deleted file mode 100644 index 15dd6bf8161..00000000000 --- a/platform/darwin/src/MGLOpenGLStyleLayer_Private.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include "MGLStyleLayer_Private.h" - -#include - -namespace mbgl { - -class OpenGLStyleLayerPeerFactory : public LayerPeerFactory, public mbgl::CustomLayerFactory { - // LayerPeerFactory overrides. - LayerFactory* getCoreLayerFactory() final { return this; } - virtual MGLStyleLayer* createPeer(style::Layer*) final; -}; - -} // namespace mbgl diff --git a/platform/darwin/src/MGLOverlay.h b/platform/darwin/src/MGLOverlay.h deleted file mode 100644 index 7706b741e21..00000000000 --- a/platform/darwin/src/MGLOverlay.h +++ /dev/null @@ -1,57 +0,0 @@ -#import -#import - -#import "MGLAnnotation.h" -#import "MGLGeometry.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The `MGLOverlay` protocol defines a specific type of annotation that represents - both a point and an area on a map. Overlay objects are essentially data objects - that contain the geographic data needed to represent the map area. Overlays can - take the form of a polyline or polygon. - - You use overlays to layer more sophisticated content on top of a map view. For - example, you could use an overlay to show the boundaries of a national park or - trace a bus route along city streets. This SDK defines several concrete classes - that conform to this protocol and define standard shapes. - */ -@protocol MGLOverlay - -/** - A coordinate representing the overlay. (required) (read-only) - */ -@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; - -/** - The cooordinate rectangle that encompasses the overlay. (required) (read-only) - - This property contains the smallest rectangle that completely encompasses the - overlay. Implementers of this protocol must set this area when implementing - their overlay class, and after setting it, you must not change it. - - If this overlay spans the antimeridian, its bounds may extend west of −180 degrees - longitude or east of 180 degrees longitude. For example, an overlay covering the - Pacific Ocean from Tokyo to San Francisco might have a bounds extending - from (35.68476, −220.24257) to (37.78428, −122.41310). - */ -@property (nonatomic, readonly) MGLCoordinateBounds overlayBounds; - -/** - Returns a Boolean indicating whether the specified rectangle intersects the - receiver’s shape. - - You can implement this method to provide more specific bounds checking for an - overlay. If you do not implement it, the bounding rectangle is used to detect - intersections. - - @param overlayBounds The rectangle to intersect with the receiver’s area. - @return `YES` if any part of the map rectangle intersects the receiver’s shape - or `NO` if it does not. - */ -- (BOOL)intersectsOverlayBounds:(MGLCoordinateBounds)overlayBounds; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLPointAnnotation.h b/platform/darwin/src/MGLPointAnnotation.h deleted file mode 100644 index 27562f0df09..00000000000 --- a/platform/darwin/src/MGLPointAnnotation.h +++ /dev/null @@ -1,55 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" -#import "MGLShape.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - An `MGLPointAnnotation` object represents a one-dimensional shape located at a - single geographical coordinate. Depending on how it is used, an - `MGLPointAnnotation` object is known as a point annotation or point shape. For - example, you could use a point shape to represent a city at low zoom levels, an - address at high zoom levels, or the location of a long press gesture. - - You can add point shapes to the map by adding them to an `MGLShapeSource` - object. Configure the appearance of an `MGLShapeSource`’s or - `MGLVectorTileSource`’s point shapes collectively using an `MGLCircleStyleLayer` or - `MGLSymbolStyleLayer` object. - - For more interactivity, add a selectable point annotation to a map view using - the `-[MGLMapView addAnnotation:]` method. Alternatively, define your own model - class that conforms to the `MGLAnnotation` protocol. Configure a point - annotation’s appearance using - `-[MGLMapViewDelegate mapView:imageForAnnotation:]` or - `-[MGLMapViewDelegate mapView:viewForAnnotation:]` (iOS only). A point - annotation’s `MGLShape.title` and `MGLShape.subtitle` properties define the - default content of the annotation’s callout (on iOS) or popover (on macOS). - - To group multiple related points together in one shape, use an - `MGLPointCollection` or `MGLShapeCollection` object. To access - a point’s attributes, use an `MGLPointFeature` object. - - A point shape is known as a - Point geometry - in GeoJSON. - - #### Related examples - See the - Mark a place on the map with an annotation, - Mark a place on the map with an image, and - Default callout usage examples to learn how to add `MGLPointAnnotation` - objects to your map. - */ -MGL_EXPORT -@interface MGLPointAnnotation : MGLShape - -/** - The coordinate point of the shape, specified as a latitude and longitude. - */ -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLPointAnnotation.mm b/platform/darwin/src/MGLPointAnnotation.mm deleted file mode 100644 index 233bef0a0f2..00000000000 --- a/platform/darwin/src/MGLPointAnnotation.mm +++ /dev/null @@ -1,72 +0,0 @@ -#import "MGLPointAnnotation.h" - -#import "MGLShape_Private.h" -#import "NSCoder+MGLAdditions.h" -#import "MGLLoggingConfiguration_Private.h" - -#import - - -@implementation MGLPointAnnotation - -@synthesize coordinate; - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)coder -{ - MGLLogInfo(@"Initializing with coder."); - if (self = [super initWithCoder:coder]) { - self.coordinate = [coder decodeMGLCoordinateForKey:@"coordinate"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder -{ - [super encodeWithCoder:coder]; - [coder encodeMGLCoordinate:coordinate forKey:@"coordinate"]; -} - -- (BOOL)isEqual:(id)other -{ - if (other == self) return YES; - if (![other isKindOfClass:[MGLPointAnnotation class]]) return NO; - - MGLPointAnnotation *otherAnnotation = other; - return ([super isEqual:other] - && self.coordinate.latitude == otherAnnotation.coordinate.latitude - && self.coordinate.longitude == otherAnnotation.coordinate.longitude); -} - -- (NSUInteger)hash -{ - return [super hash] + @(self.coordinate.latitude).hash + @(self.coordinate.longitude).hash; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; title = %@; subtitle = %@; coordinate = %f, %f>", - NSStringFromClass([self class]), (void *)self, - self.title ? [NSString stringWithFormat:@"\"%@\"", self.title] : self.title, - self.subtitle ? [NSString stringWithFormat:@"\"%@\"", self.subtitle] : self.subtitle, - coordinate.latitude, coordinate.longitude]; -} - -- (NSDictionary *)geoJSONDictionary -{ - return @{@"type": @"Point", - @"coordinates": @[@(self.coordinate.longitude), @(self.coordinate.latitude)]}; -} - -- (mbgl::Geometry)geometryObject -{ - mbgl::Point point = { self.coordinate.longitude, self.coordinate.latitude }; - return point; -} - -@end - diff --git a/platform/darwin/src/MGLPointCollection.h b/platform/darwin/src/MGLPointCollection.h deleted file mode 100644 index 65ce95cb0fb..00000000000 --- a/platform/darwin/src/MGLPointCollection.h +++ /dev/null @@ -1,65 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" -#import "MGLOverlay.h" -#import "MGLShape.h" - -/** - An `MGLPointCollection` object represents a shape consisting of one or more - disconnected vertices, specified as `CLLocationCoordinate2D` instances. The - points in the collection may be related but are not connected spatially. For - example, you could use a point collection to represent all the trees in an - orchard. - - You can add point collections to the map by adding them to an `MGLShapeSource` - object. Configure the appearance of an `MGLShapeSource`’s or - `MGLVectorTileSource`’s point collections collectively using an - `MGLCircleStyleLayer` or `MGLSymbolStyleLayer` object. To access a point - collection’s attributes, use an `MGLPointCollectionFeature` object. - - You cannot add an `MGLPointCollection` object directly to a map view as an - annotation. However, you can create individual `MGLPointAnnotation` objects - from the `coordinates` array and add those annotation objects to the map view - using the `-[MGLMapView addAnnotations:]` method. - - A point collection is known as a - MultiPoint - geometry in GeoJSON. Do not confuse `MGLPointCollection` with `MGLMultiPoint`, - the abstract superclass of `MGLPolyline` and `MGLPolygon`. - */ -MGL_EXPORT -@interface MGLPointCollection : MGLShape - -/** - Creates and returns a `MGLPointCollection` object from the specified set of - coordinates. - - @param coords The array of coordinates defining the shape. The data in this - array is copied to the new object. - @param count The number of items in the `coords` array. - @return A new point collection object. - */ -+ (instancetype)pointCollectionWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -/** The array of coordinates associated with the shape. */ -@property (nonatomic, readonly) CLLocationCoordinate2D *coordinates NS_RETURNS_INNER_POINTER; - -/** The number of coordinates associated with the shape. */ -@property (nonatomic, readonly) NSUInteger pointCount; - -/** - Retrieves one or more coordinates associated with the shape. - - @param coords On input, you must provide a C array of structures large enough - to hold the desired number of coordinates. On output, this structure - contains the requested coordinate data. - @param range The range of points you want. The `location` field indicates the - first point you are requesting, with `0` being the first point, `1` being - the second point, and so on. The `length` field indicates the number of - points you want. The array in _`coords`_ must be large enough to accommodate - the number of requested coordinates. - */ -- (void)getCoordinates:(CLLocationCoordinate2D *)coords range:(NSRange)range; - -@end diff --git a/platform/darwin/src/MGLPointCollection.mm b/platform/darwin/src/MGLPointCollection.mm deleted file mode 100644 index 6e056712f74..00000000000 --- a/platform/darwin/src/MGLPointCollection.mm +++ /dev/null @@ -1,136 +0,0 @@ -#import "MGLPointCollection_Private.h" -#import "MGLGeometry_Private.h" -#import "NSArray+MGLAdditions.h" -#import "MGLLoggingConfiguration_Private.h" - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@implementation MGLPointCollection -{ - mbgl::optional _bounds; - std::vector _coordinates; -} - -+ (instancetype)pointCollectionWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count -{ - return [[self alloc] initWithCoordinates:coords count:count]; -} - -- (instancetype)initWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count -{ - MGLLogDebug(@"Initializing with %lu coordinates.", (unsigned long)count); - self = [super init]; - if (self) - { - _coordinates = { coords, coords + count }; - } - return self; -} - -- (nullable instancetype)initWithCoder:(NSCoder *)decoder { - MGLLogInfo(@"Initializing with coder.O"); - if (self = [super initWithCoder:decoder]) { - NSArray *coordinates = [decoder decodeObjectOfClass:[NSArray class] forKey:@"coordinates"]; - _coordinates = [coordinates mgl_coordinates]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - [coder encodeObject:[NSArray mgl_coordinatesFromCoordinates:_coordinates] forKey:@"coordinates"]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) return YES; - if (![other isKindOfClass:[MGLPointCollection class]]) return NO; - - MGLPointCollection *otherCollection = (MGLPointCollection *)other; - return ([super isEqual:other] - && ((![self geoJSONDictionary] && ![otherCollection geoJSONDictionary]) || [[self geoJSONDictionary] isEqualToDictionary:[otherCollection geoJSONDictionary]])); -} - -- (MGLCoordinateBounds)overlayBounds { - if (!_bounds) { - mbgl::LatLngBounds bounds = mbgl::LatLngBounds::empty(); - for (auto coordinate : _coordinates) { - if (!MGLLocationCoordinate2DIsValid(coordinate)) { - bounds = mbgl::LatLngBounds::empty(); - break; - } - bounds.extend(MGLLatLngFromLocationCoordinate2D(coordinate)); - } - _bounds = bounds; - } - return MGLCoordinateBoundsFromLatLngBounds(*_bounds); -} - -- (NSUInteger)pointCount -{ - return _coordinates.size(); -} - -- (CLLocationCoordinate2D *)coordinates -{ - return _coordinates.data(); -} - -- (CLLocationCoordinate2D)coordinate -{ - MGLAssert([self pointCount] > 0, @"A multipoint must have coordinates"); - return _coordinates.at(0); -} - -- (void)getCoordinates:(CLLocationCoordinate2D *)coords range:(NSRange)range -{ - if (range.location + range.length > [self pointCount]) - { - [NSException raise:NSRangeException - format:@"Invalid coordinate range %@ extends beyond current coordinate count of %ld", - NSStringFromRange(range), (unsigned long)[self pointCount]]; - } - - std::copy(_coordinates.begin() + range.location, _coordinates.begin() + NSMaxRange(range), coords); -} - -- (BOOL)intersectsOverlayBounds:(MGLCoordinateBounds)overlayBounds -{ - return MGLCoordinateBoundsIntersectsCoordinateBounds(self.overlayBounds, overlayBounds); -} - -- (mbgl::Geometry)geometryObject -{ - mbgl::MultiPoint multiPoint; - multiPoint.reserve(self.pointCount); - for (NSUInteger i = 0; i < self.pointCount; i++) - { - multiPoint.push_back(mbgl::Point(self.coordinates[i].longitude, self.coordinates[i].latitude)); - } - return multiPoint; -} - -- (NSDictionary *)geoJSONDictionary -{ - NSMutableArray *coordinates = [[NSMutableArray alloc] initWithCapacity:self.pointCount]; - for (NSUInteger index = 0; index < self.pointCount; index++) { - CLLocationCoordinate2D coordinate = self.coordinates[index]; - [coordinates addObject:@[@(coordinate.longitude), @(coordinate.latitude)]]; - } - - return @{@"type": @"MultiPoint", - @"coordinates": coordinates}; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; count = %lu; bounds = %@>", - NSStringFromClass([self class]), (void *)self, (unsigned long)[self pointCount], - MGLStringFromCoordinateBounds(self.overlayBounds)]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLPointCollection_Private.h b/platform/darwin/src/MGLPointCollection_Private.h deleted file mode 100644 index fc1c33fe4c5..00000000000 --- a/platform/darwin/src/MGLPointCollection_Private.h +++ /dev/null @@ -1,11 +0,0 @@ -#import "MGLPointCollection.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLPointCollection (Private) - -- (instancetype)initWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLPolygon.h b/platform/darwin/src/MGLPolygon.h deleted file mode 100644 index 900e43334ec..00000000000 --- a/platform/darwin/src/MGLPolygon.h +++ /dev/null @@ -1,129 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" -#import "MGLMultiPoint.h" -#import "MGLOverlay.h" - -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - An `MGLPolygon` object represents a closed shape consisting of four or more - vertices, specified as `CLLocationCoordinate2D` instances, and the edges that - connect them. For example, you could use a polygon shape to represent a - building, a lake, or an area you want to highlight. - - You can add polygon shapes to the map by adding them to an `MGLShapeSource` - object. Configure the appearance of an `MGLShapeSource`’s or - `MGLVectorTileSource`’s polygons collectively using an `MGLFillStyleLayer` or - `MGLSymbolStyleLayer` object. To access a polygon’s attributes, use an - `MGLPolygonFeature` object. - - Alternatively, you can add a polygon overlay directly to a map view using the - `-[MGLMapView addAnnotation:]` or `-[MGLMapView addOverlay:]` method. Configure - a polygon overlay’s appearance using - `-[MGLMapViewDelegate mapView:strokeColorForShapeAnnotation:]` and - `-[MGLMapViewDelegate mapView:fillColorForPolygonAnnotation:]`. - - The vertices are automatically connected in the order in which you provide - them. You should close the polygon by specifying the same - `CLLocationCoordinate2D` as the first and last vertices; otherwise, the - polygon’s fill may not cover the area you expect it to. To avoid filling the - space within the shape, give the polygon a transparent fill or use an - `MGLPolyline` object. - - A polygon may have one or more interior polygons, or holes, that you specify as - `MGLPolygon` objects with the `+polygonWithCoordinates:count:interiorPolygons:` - method. For example, if a polygon represents a lake, it could exclude an island - within the lake using an interior polygon. Interior polygons may not themselves - have interior polygons. To represent a shape that includes a polygon within a - hole or, more generally, to group multiple polygons together in one shape, use - an `MGLMultiPolygon` or `MGLShapeCollection` object. - - To make the polygon straddle the antimeridian, specify some longitudes less - than −180 degrees or greater than 180 degrees. - - #### Related examples - See the - Add a polygon annotation example to learn how to initialize an - `MGLPolygon` object from an array of coordinates. - */ -MGL_EXPORT -@interface MGLPolygon : MGLMultiPoint - -/** - The array of polygons nested inside the receiver. - - The area occupied by any interior polygons is excluded from the overall shape. - Interior polygons should not overlap. An interior polygon should not have - interior polygons of its own. - - If there are no interior polygons, the value of this property is `nil`. - */ -@property (nonatomic, nullable, readonly) NSArray *interiorPolygons; - -/** - Creates and returns an `MGLPolygon` object from the specified set of - coordinates. - - @param coords The array of coordinates defining the shape. The data in this - array is copied to the new object. - @param count The number of items in the `coords` array. - @return A new polygon object. - */ -+ (instancetype)polygonWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -/** - Creates and returns an `MGLPolygon` object from the specified set of - coordinates and interior polygons. - - @param coords The array of coordinates defining the shape. The data in this - array is copied to the new object. - @param count The number of items in the `coords` array. - @param interiorPolygons An array of `MGLPolygon` objects that define regions - excluded from the overall shape. If this array is `nil` or empty, the shape - is considered to have no interior polygons. - @return A new polygon object. - */ -+ (instancetype)polygonWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count interiorPolygons:(nullable NSArray *)interiorPolygons; - -@end - -/** - An `MGLMultiPolygon` object represents a shape consisting of one or more - polygons that do not overlap. For example, you could use a multipolygon shape - to represent the body of land that consists of an island surrounded by an - atoll: the inner island would be one `MGLPolygon` object, while the surrounding - atoll would be another. You could also use a multipolygon shape to represent a - group of disconnected but related buildings. - - You can add multipolygon shapes to the map by adding them to an - `MGLShapeSource` object. Configure the appearance of an `MGLShapeSource`’s or - `MGLVectorTileSource`’s multipolygons collectively using an `MGLFillStyleLayer` - or `MGLSymbolStyleLayer` object. - - You cannot add an `MGLMultiPolygon` object directly to a map view using - `-[MGLMapView addAnnotation:]` or `-[MGLMapView addOverlay:]`. However, you can - add the `polygons` array’s items as overlays individually. - */ -MGL_EXPORT -@interface MGLMultiPolygon : MGLShape - -/** - An array of polygons forming the multipolygon. - */ -@property (nonatomic, copy, readonly) NSArray *polygons; - -/** - Creates and returns a multipolygon object consisting of the given polygons. - - @param polygons The array of polygons defining the shape. - @return A new multipolygon object. - */ -+ (instancetype)multiPolygonWithPolygons:(NSArray *)polygons; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLPolygon.mm b/platform/darwin/src/MGLPolygon.mm deleted file mode 100644 index 52bff01b202..00000000000 --- a/platform/darwin/src/MGLPolygon.mm +++ /dev/null @@ -1,240 +0,0 @@ -#import "MGLPolygon_Private.h" - -#import "MGLMultiPoint_Private.h" -#import "MGLGeometry_Private.h" -#import "MGLLoggingConfiguration_Private.h" - -#import "MGLFeature.h" - -#import -#import - -@implementation MGLPolygon - -@dynamic overlayBounds; - -+ (instancetype)polygonWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count { - return [self polygonWithCoordinates:coords count:count interiorPolygons:nil]; -} - -+ (instancetype)polygonWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count interiorPolygons:(NSArray *)interiorPolygons { - return [[self alloc] initWithCoordinates:coords count:count interiorPolygons:interiorPolygons]; -} - -- (instancetype)initWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count interiorPolygons:(NSArray *)interiorPolygons { - MGLLogDebug(@"Initializing with %lu coordinates and %lu interiorPolygons.", (unsigned long)count, (unsigned long)interiorPolygons); - if (self = [super initWithCoordinates:coords count:count]) { - if (interiorPolygons.count) { - _interiorPolygons = interiorPolygons; - } - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder { - MGLLogInfo(@"Initializng with coder."); - self = [super initWithCoder:decoder]; - if (self) { - _interiorPolygons = [decoder decodeObjectOfClass:[NSArray class] forKey:@"interiorPolygons"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - [coder encodeObject:self.interiorPolygons forKey:@"interiorPolygons"]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) return YES; - if (![other isKindOfClass:[MGLPolygon class]]) return NO; - - MGLPolygon *otherPolygon = (MGLPolygon *)other; - return ([super isEqual:otherPolygon] && - [[self geoJSONDictionary] isEqualToDictionary:[otherPolygon geoJSONDictionary]]); -} - -- (NSUInteger)hash { - return [super hash] + [[self geoJSONDictionary] hash]; -} - -- (CLLocationCoordinate2D)coordinate { - // pole of inaccessibility - auto poi = mapbox::polylabel([self polygon]); - - return MGLLocationCoordinate2DFromPoint(poi); -} - -- (mbgl::LinearRing)ring { - NSUInteger count = self.pointCount; - CLLocationCoordinate2D *coordinates = self.coordinates; - - mbgl::LinearRing result; - result.reserve(self.pointCount); - for (NSUInteger i = 0; i < count; i++) { - result.push_back(mbgl::Point(coordinates[i].longitude, coordinates[i].latitude)); - } - return result; -} - -- (mbgl::Polygon)polygon { - mbgl::Polygon geometry; - geometry.push_back(self.ring); - for (MGLPolygon *polygon in self.interiorPolygons) { - geometry.push_back(polygon.ring); - } - return geometry; -} - -- (mbgl::Geometry)geometryObject { - return [self polygon]; -} - -- (mbgl::Annotation)annotationObjectWithDelegate:(id )delegate { - - mbgl::FillAnnotation annotation { [self polygon] }; - annotation.opacity = { static_cast([delegate alphaForShapeAnnotation:self]) }; - annotation.outlineColor = { [delegate strokeColorForShapeAnnotation:self] }; - annotation.color = { [delegate fillColorForPolygonAnnotation:self] }; - - return annotation; -} - -- (NSDictionary *)geoJSONDictionary { - return @{@"type": @"Polygon", - @"coordinates": self.mgl_coordinates}; -} - -- (NSArray *)mgl_coordinates { - NSMutableArray *coordinates = [NSMutableArray array]; - - NSMutableArray *exteriorRing = [NSMutableArray array]; - for (NSUInteger index = 0; index < self.pointCount; index++) { - CLLocationCoordinate2D coordinate = self.coordinates[index]; - [exteriorRing addObject:@[@(coordinate.longitude), @(coordinate.latitude)]]; - } - [coordinates addObject:exteriorRing]; - - for (MGLPolygon *interiorPolygon in self.interiorPolygons) { - NSMutableArray *interiorRing = [NSMutableArray array]; - for (NSUInteger index = 0; index < interiorPolygon.pointCount; index++) { - CLLocationCoordinate2D coordinate = interiorPolygon.coordinates[index]; - [interiorRing addObject:@[@(coordinate.longitude), @(coordinate.latitude)]]; - } - [coordinates addObject:interiorRing]; - } - - return [coordinates copy]; -} - -@end - -@interface MGLMultiPolygon () - -@property (nonatomic, copy, readwrite) NSArray *polygons; - -@end - -@implementation MGLMultiPolygon { - MGLCoordinateBounds _overlayBounds; -} - -@synthesize overlayBounds = _overlayBounds; - -+ (instancetype)multiPolygonWithPolygons:(NSArray *)polygons { - return [[self alloc] initWithPolygons:polygons]; -} - -- (instancetype)initWithPolygons:(NSArray *)polygons { - MGLLogDebug(@"Initializing with %lu polygons.", (unsigned long)polygons.count); - if (self = [super init]) { - _polygons = polygons; - - mbgl::LatLngBounds bounds = mbgl::LatLngBounds::empty(); - - for (MGLPolygon *polygon in _polygons) { - bounds.extend(MGLLatLngBoundsFromCoordinateBounds(polygon.overlayBounds)); - } - _overlayBounds = MGLCoordinateBoundsFromLatLngBounds(bounds); - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder { - MGLLogInfo(@"Initializing with coder."); - if (self = [super initWithCoder:decoder]) { - _polygons = [decoder decodeObjectOfClass:[NSArray class] forKey:@"polygons"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - [coder encodeObject:_polygons forKey:@"polygons"]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) return YES; - if (![other isKindOfClass:[MGLMultiPolygon class]]) return NO; - - MGLMultiPolygon *otherMultiPolygon = other; - return [super isEqual:other] - && [self.polygons isEqualToArray:otherMultiPolygon.polygons]; -} - -- (NSUInteger)hash { - NSUInteger hash = [super hash]; - for (MGLPolygon *polygon in self.polygons) { - hash += [polygon hash]; - } - return hash; -} - -- (CLLocationCoordinate2D)coordinate { - MGLPolygon *firstPolygon = self.polygons.firstObject; - - return firstPolygon.coordinate; -} - -- (BOOL)intersectsOverlayBounds:(MGLCoordinateBounds)overlayBounds { - return MGLCoordinateBoundsIntersectsCoordinateBounds(_overlayBounds, overlayBounds); -} - -- (mbgl::MultiPolygon)multiPolygon { - mbgl::MultiPolygon multiPolygon; - multiPolygon.reserve(self.polygons.count); - for (MGLPolygon *polygon in self.polygons) { - mbgl::Polygon geometry; - geometry.push_back(polygon.ring); - for (MGLPolygon *interiorPolygon in polygon.interiorPolygons) { - geometry.push_back(interiorPolygon.ring); - } - multiPolygon.push_back(geometry); - } - return multiPolygon; -} - -- (mbgl::Geometry)geometryObject { - return [self multiPolygon]; -} - -- (NSDictionary *)geoJSONDictionary { - NSMutableArray *coordinates = [[NSMutableArray alloc] initWithCapacity:self.polygons.count]; - for (MGLPolygonFeature *feature in self.polygons) { - [coordinates addObject: feature.mgl_coordinates]; - } - return @{@"type": @"MultiPolygon", - @"coordinates": coordinates}; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; title = %@, subtitle: = %@, count = %lu; bounds = %@>", - NSStringFromClass([self class]), (void *)self, - self.title ? [NSString stringWithFormat:@"\"%@\"", self.title] : self.title, - self.subtitle ? [NSString stringWithFormat:@"\"%@\"", self.subtitle] : self.subtitle, - (unsigned long)self.polygons.count, - MGLStringFromCoordinateBounds(self.overlayBounds)]; -} - -@end diff --git a/platform/darwin/src/MGLPolygon_Private.h b/platform/darwin/src/MGLPolygon_Private.h deleted file mode 100644 index b006f2d77f3..00000000000 --- a/platform/darwin/src/MGLPolygon_Private.h +++ /dev/null @@ -1,11 +0,0 @@ -#import "MGLPolygon.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLPolygon (Private) - -- (NSArray *)mgl_coordinates; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLPolyline.h b/platform/darwin/src/MGLPolyline.h deleted file mode 100644 index 9efaea24ff7..00000000000 --- a/platform/darwin/src/MGLPolyline.h +++ /dev/null @@ -1,112 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" -#import "MGLMultiPoint.h" -#import "MGLOverlay.h" - -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - An `MGLPolyline` object represents a shape consisting of two or more vertices, - specified as `CLLocationCoordinate2D` instances, and the line segments that - connect them. For example, you could use an polyline to represent a road or the - path along which something moves. - - You can add polyline shapes to the map by adding them to an `MGLShapeSource` - object. Configure the appearance of an `MGLShapeSource`’s or - `MGLVectorTileSource`’s polylines collectively using an `MGLLineStyleLayer` or - `MGLSymbolStyleLayer` object. To access a polyline’s attributes, use an - `MGLPolylineFeature` object. - - Alternatively, you can add a polyline overlay directly to a map view using the - `-[MGLMapView addAnnotation:]` or `-[MGLMapView addOverlay:]` method. Configure - a polyline overlay’s appearance using - `-[MGLMapViewDelegate mapView:strokeColorForShapeAnnotation:]` and - `-[MGLMapViewDelegate mapView:lineWidthForPolylineAnnotation:]`. - - The vertices are automatically connected in the order in which you provide - them. The first and last vertices are not connected to each other, but you can - specify the same `CLLocationCoordinate2D` as the first and last vertices in - order to close the polyline. To fill the space within the shape, use an - `MGLPolygon` object. To group multiple polylines together in one shape, use an - `MGLMultiPolyline` or `MGLShapeCollection` object. - - To make the polyline go across the antimeridian or international date line, - specify some longitudes less than −180 degrees or greater than 180 degrees. - For example, a polyline that stretches from Tokyo to San Francisco would have - coordinates of (35.68476, -220.24257) and (37.78428, -122.41310). - - ```swift - let coordinates = [ - CLLocationCoordinate2D(latitude: 35.68476, longitude: -220.24257), - CLLocationCoordinate2D(latitude: 37.78428, longitude: -122.41310) - ] - let polyline = MGLPolyline(coordinates: coordinates, count: UInt(coordinates.count)) - ``` - - A polyline is known as a - LineString - geometry in GeoJSON. - - #### Related examples - See the - Annotation models example to learn how to add an `MGLPolyine` object to - your map. - */ -MGL_EXPORT -@interface MGLPolyline : MGLMultiPoint - -/** - Creates and returns an `MGLPolyline` object from the specified set of - coordinates. - - @param coords The array of coordinates defining the shape. The data in this - array is copied to the new object. - @param count The number of items in the `coords` array. - @return A new polyline object. - */ -+ (instancetype)polylineWithCoordinates:(const CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -@end - -/** - An `MGLMultiPolyline` object represents a shape consisting of one or more - polylines. For example, you could use a multipolyline shape to represent both - sides of a divided highway (dual carriageway), excluding the median (central - reservation): each carriageway would be a distinct `MGLPolyline` object. - - You can add multipolyline shapes to the map by adding them to an - `MGLShapeSource` object. Configure the appearance of an `MGLShapeSource`’s or - `MGLVectorTileSource`’s multipolylines collectively using an - `MGLLineStyleLayer` or `MGLSymbolStyleLayer` object. - - You cannot add an `MGLMultiPolyline` object directly to a map view using - `-[MGLMapView addAnnotation:]` or `-[MGLMapView addOverlay:]`. However, you can - add the `polylines` array’s items as overlays individually. - - A multipolyline is known as a - MultiLineString - geometry in GeoJSON. - */ -MGL_EXPORT -@interface MGLMultiPolyline : MGLShape - -/** - An array of polygons forming the multipolyline. - */ -@property (nonatomic, copy, readonly) NSArray *polylines; - -/** - Creates and returns a multipolyline object consisting of the given polylines. - - @param polylines The array of polylines defining the shape. - @return A new multipolyline object. - */ -+ (instancetype)multiPolylineWithPolylines:(NSArray *)polylines; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLPolyline.mm b/platform/darwin/src/MGLPolyline.mm deleted file mode 100644 index 25c540b5279..00000000000 --- a/platform/darwin/src/MGLPolyline.mm +++ /dev/null @@ -1,228 +0,0 @@ -#import "MGLPolyline_Private.h" - -#import "MGLMultiPoint_Private.h" -#import "MGLGeometry_Private.h" - -#import "MGLFeature.h" -#import "MGLLoggingConfiguration_Private.h" - -#import -#import - -@implementation MGLPolyline - -@dynamic overlayBounds; - -+ (instancetype)polylineWithCoordinates:(const CLLocationCoordinate2D *)coords - count:(NSUInteger)count -{ - return [[self alloc] initWithCoordinates:coords count:count]; -} - -- (mbgl::LineString)lineString { - NSUInteger count = self.pointCount; - CLLocationCoordinate2D *coordinates = self.coordinates; - - mbgl::LineString geometry; - geometry.reserve(self.pointCount); - for (NSUInteger i = 0; i < count; i++) { - geometry.push_back(mbgl::Point(coordinates[i].longitude, coordinates[i].latitude)); - } - - return geometry; -} - -- (mbgl::Annotation)annotationObjectWithDelegate:(id )delegate { - mbgl::LineAnnotation annotation { [self lineString] }; - annotation.opacity = { static_cast([delegate alphaForShapeAnnotation:self]) }; - annotation.color = { [delegate strokeColorForShapeAnnotation:self] }; - annotation.width = { static_cast([delegate lineWidthForPolylineAnnotation:self]) }; - - return annotation; -} - -- (mbgl::Geometry)geometryObject { - return [self lineString]; -} - -- (NSDictionary *)geoJSONDictionary { - return @{@"type": @"LineString", - @"coordinates": self.mgl_coordinates}; -} - -- (NSArray *)mgl_coordinates { - NSMutableArray *coordinates = [[NSMutableArray alloc] initWithCapacity:self.pointCount]; - for (NSUInteger index = 0; index < self.pointCount; index++) { - CLLocationCoordinate2D coordinate = self.coordinates[index]; - [coordinates addObject:@[@(coordinate.longitude), @(coordinate.latitude)]]; - } - return [coordinates copy]; -} - -- (BOOL)isEqual:(id)other { - return self == other || ([other isKindOfClass:[MGLPolyline class]] && [super isEqual:other]); -} - -- (CLLocationCoordinate2D)coordinate { - NSUInteger count = self.pointCount; - MGLAssert(count > 0, @"Polyline must have coordinates"); - - CLLocationCoordinate2D *coordinates = self.coordinates; - CLLocationDistance middle = [self length] / 2.0; - CLLocationDistance traveled = 0.0; - - if (count > 1 || middle > traveled) { - for (NSUInteger i = 0; i < count; i++) { - - // Avoid a heap buffer overflow when there are only two coordinates. - NSUInteger nextIndex = (i + 1 == count) ? 0 : 1; - - MGLRadianCoordinate2D from = MGLRadianCoordinateFromLocationCoordinate(coordinates[i]); - MGLRadianCoordinate2D to = MGLRadianCoordinateFromLocationCoordinate(coordinates[i + nextIndex]); - - if (traveled >= middle) { - double overshoot = middle - traveled; - if (overshoot == 0) { - return coordinates[i]; - } - to = MGLRadianCoordinateFromLocationCoordinate(coordinates[i - 1]); - CLLocationDirection direction = [self direction:from to:to] - 180; - MGLRadianCoordinate2D otherCoordinate = MGLRadianCoordinateAtDistanceFacingDirection(from, - overshoot/mbgl::util::EARTH_RADIUS_M, - MGLRadiansFromDegrees(direction)); - return CLLocationCoordinate2DMake(MGLDegreesFromRadians(otherCoordinate.latitude), - MGLDegreesFromRadians(otherCoordinate.longitude)); - } - - traveled += (MGLDistanceBetweenRadianCoordinates(from, to) * mbgl::util::EARTH_RADIUS_M); - } - } - - return coordinates[count - 1]; -} - -- (CLLocationDistance)length -{ - CLLocationDistance length = 0.0; - - NSUInteger count = self.pointCount; - CLLocationCoordinate2D *coordinates = self.coordinates; - - for (NSUInteger i = 0; i < count - 1; i++) { - length += (MGLDistanceBetweenRadianCoordinates(MGLRadianCoordinateFromLocationCoordinate(coordinates[i]), MGLRadianCoordinateFromLocationCoordinate(coordinates[i + 1])) * mbgl::util::EARTH_RADIUS_M); - } - - return length; -} - -- (CLLocationDirection)direction:(MGLRadianCoordinate2D)from to:(MGLRadianCoordinate2D)to -{ - return MGLDegreesFromRadians(MGLRadianCoordinatesDirection(from, to)); -} - -@end - -@interface MGLMultiPolyline () - -@property (nonatomic, copy, readwrite) NSArray *polylines; - -@end - -@implementation MGLMultiPolyline { - MGLCoordinateBounds _overlayBounds; -} - -@synthesize overlayBounds = _overlayBounds; - -+ (instancetype)multiPolylineWithPolylines:(NSArray *)polylines { - return [[self alloc] initWithPolylines:polylines]; -} - -- (instancetype)initWithPolylines:(NSArray *)polylines { - MGLLogDebug(@"Initializing with %lu polylines.", (unsigned long)polylines.count); - if (self = [super init]) { - _polylines = polylines; - - mbgl::LatLngBounds bounds = mbgl::LatLngBounds::empty(); - - for (MGLPolyline *polyline in _polylines) { - bounds.extend(MGLLatLngBoundsFromCoordinateBounds(polyline.overlayBounds)); - } - _overlayBounds = MGLCoordinateBoundsFromLatLngBounds(bounds); - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder { - MGLLogInfo(@"Initializing with coder."); - if (self = [super initWithCoder:decoder]) { - _polylines = [decoder decodeObjectOfClass:[NSArray class] forKey:@"polylines"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - [coder encodeObject:_polylines forKey:@"polylines"]; -} - -- (BOOL)isEqual:(id)other -{ - if (self == other) return YES; - if (![other isKindOfClass:[MGLMultiPolyline class]]) return NO; - - MGLMultiPolyline *otherMultipoline = other; - return ([super isEqual:otherMultipoline] - && [self.polylines isEqualToArray:otherMultipoline.polylines]); -} - -- (NSUInteger)hash { - NSUInteger hash = [super hash]; - for (MGLPolyline *polyline in self.polylines) { - hash += [polyline hash]; - } - return hash; -} - -- (CLLocationCoordinate2D)coordinate { - MGLPolyline *polyline = self.polylines.firstObject; - CLLocationCoordinate2D *coordinates = polyline.coordinates; - MGLAssert([polyline pointCount] > 0, @"Polyline must have coordinates"); - CLLocationCoordinate2D firstCoordinate = coordinates[0]; - - return firstCoordinate; -} - -- (BOOL)intersectsOverlayBounds:(MGLCoordinateBounds)overlayBounds { - return MGLCoordinateBoundsIntersectsCoordinateBounds(_overlayBounds, overlayBounds); -} - -- (mbgl::Geometry)geometryObject { - mbgl::MultiLineString multiLineString; - multiLineString.reserve(self.polylines.count); - for (MGLPolyline *polyline in self.polylines) { - multiLineString.push_back([polyline lineString]); - } - return multiLineString; -} - -- (NSDictionary *)geoJSONDictionary { - NSMutableArray *coordinates = [NSMutableArray array]; - for (MGLPolylineFeature *feature in self.polylines) { - [coordinates addObject: feature.mgl_coordinates]; - } - return @{@"type": @"MultiLineString", - @"coordinates": coordinates}; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; title = %@, subtitle: = %@, count = %lu; bounds = %@>", - NSStringFromClass([self class]), (void *)self, - self.title ? [NSString stringWithFormat:@"\"%@\"", self.title] : self.title, - self.subtitle ? [NSString stringWithFormat:@"\"%@\"", self.subtitle] : self.subtitle, - (unsigned long)self.polylines.count, - MGLStringFromCoordinateBounds(self.overlayBounds)]; -} - -@end diff --git a/platform/darwin/src/MGLPolyline_Private.h b/platform/darwin/src/MGLPolyline_Private.h deleted file mode 100644 index ff4fabaa787..00000000000 --- a/platform/darwin/src/MGLPolyline_Private.h +++ /dev/null @@ -1,12 +0,0 @@ -#import "MGLPolyline.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLPolyline (Private) - -- (NSArray *)mgl_coordinates; - -@end - -NS_ASSUME_NONNULL_END - diff --git a/platform/darwin/src/MGLRasterDEMSource.h b/platform/darwin/src/MGLRasterDEMSource.h deleted file mode 100644 index 18ad8025642..00000000000 --- a/platform/darwin/src/MGLRasterDEMSource.h +++ /dev/null @@ -1,50 +0,0 @@ -#import "MGLFoundation.h" - -#import "MGLRasterTileSource.h" - -/** - An `NSNumber` object containing an unsigned integer that specifies the encoding - formula for raster-dem tilesets. The integer corresponds to one of - the constants described in `MGLDEMEncoding`. - - The default value for this option is `MGLDEMEncodingMapbox`. - - This option cannot be represented in a TileJSON or style JSON file. It is used - with the `MGLRasterDEMSource` class and is ignored when creating an - `MGLRasterTileSource` or `MGLVectorTileSource` object. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLTileSourceOption MGLTileSourceOptionDEMEncoding; - -/** - `MGLRasterDEMSource` is a map content source that supplies rasterized - digital elevation model - (DEM) tiles to be shown on the map. The location of and metadata about the - tiles are defined either by an option dictionary or by an external file that - conforms to the - TileJSON specification. - A raster DEM source is added to an `MGLStyle` object along with one or more - `MGLHillshadeStyleLayer` objects. Use a hillshade style layer to control the - appearance of content supplied by the raster DEM source. - - Each - raster-dem - source defined by the style JSON file is represented at runtime by an - `MGLRasterDEMSource` object that you can use to initialize new style layers. - You can also add and remove sources dynamically using methods such as - `-[MGLStyle addSource:]` and `-[MGLStyle sourceWithIdentifier:]`. - - Currently, raster DEM sources only support the format used by - Mapbox Terrain-RGB. - - ### Example - - ```swift - let terrainRGBURL = URL(string: "mapbox://mapbox.terrain-rgb")! - let source = MGLRasterDEMSource(identifier: "hills", configurationURL: terrainRGBURL) - mapView.style?.addSource(source) - ``` - */ -MGL_EXPORT -@interface MGLRasterDEMSource : MGLRasterTileSource - -@end diff --git a/platform/darwin/src/MGLRasterDEMSource.mm b/platform/darwin/src/MGLRasterDEMSource.mm deleted file mode 100644 index 753499ff94c..00000000000 --- a/platform/darwin/src/MGLRasterDEMSource.mm +++ /dev/null @@ -1,16 +0,0 @@ -#import "MGLRasterDEMSource.h" - -#import "MGLRasterTileSource_Private.h" -#import "NSURL+MGLAdditions.h" - -#import - -@implementation MGLRasterDEMSource - -- (std::unique_ptr)pendingSourceWithIdentifier:(NSString *)identifier urlOrTileset:(mbgl::variant)urlOrTileset tileSize:(uint16_t)tileSize { - auto source = std::make_unique(identifier.UTF8String, - urlOrTileset, - tileSize); - return source; -} -@end diff --git a/platform/darwin/src/MGLRasterStyleLayer.h b/platform/darwin/src/MGLRasterStyleLayer.h deleted file mode 100644 index 87cf5be1b84..00000000000 --- a/platform/darwin/src/MGLRasterStyleLayer.h +++ /dev/null @@ -1,347 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLFoundation.h" -#import "MGLForegroundStyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The resampling/interpolation method to use for overscaling, also known as - texture magnification filter - - Values of this type are used in the `MGLRasterStyleLayer.rasterResamplingMode` - property. - */ -typedef NS_ENUM(NSUInteger, MGLRasterResamplingMode) { - /** - (Bi)linear filtering interpolates point values using the weighted average - of the four closest original source points creating a smooth but blurry - look when overscaled - */ - MGLRasterResamplingModeLinear, - /** - Nearest neighbor filtering interpolates point values using the nearest - original source point creating a sharp but pointated look when overscaled - */ - MGLRasterResamplingModeNearest, -}; - -/** - An `MGLRasterStyleLayer` is a style layer that renders georeferenced raster - imagery on the map, especially raster tiles. - - Use a raster style layer to configure the color parameters of raster tiles - loaded by an `MGLRasterTileSource` object or raster images loaded by an - `MGLImageSource` object. For example, you could use a raster style layer to - render Mapbox Satellite - imagery, a raster - tile set uploaded to Mapbox Studio, or a raster map authored in TileMill, the classic - Mapbox Editor, or Mapbox Studio Classic. - - Raster images may also be used as icons or patterns in a style layer. To - register an image for use as an icon or pattern, use the `-[MGLStyle - setImage:forName:]` method. To configure a point annotation’s image, use the - `MGLAnnotationImage` class. - - You can access an existing raster style layer using the - `-[MGLStyle layerWithIdentifier:]` method if you know its identifier; - otherwise, find it using the `MGLStyle.layers` property. You can also create a - new raster style layer and add it to the style using a method such as - `-[MGLStyle addLayer:]`. - - #### Related examples - See the Add - an image and Add - raster imagery examples to learn how to add imagery with this style layer. - - ### Example - - ```swift - let layer = MGLRasterStyleLayer(identifier: "clouds", source: source) - layer.rasterOpacity = NSExpression(forConstantValue: 0.5) - mapView.style?.addLayer(layer) - ``` - */ -MGL_EXPORT -@interface MGLRasterStyleLayer : MGLForegroundStyleLayer - -/** - Returns a raster style layer initialized with an identifier and source. - - After initializing and configuring the style layer, add it to a map view’s - style using the `-[MGLStyle addLayer:]` or - `-[MGLStyle insertLayer:belowLayer:]` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param source The source from which to obtain the data to style. If the source - has not yet been added to the current style, the behavior is undefined. - @return An initialized foreground style layer. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source; - -#pragma mark - Accessing the Paint Attributes - -/** - Increase or reduce the brightness of the image. The value is the maximum - brightness. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the raster-brightness-max - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *maximumRasterBrightness; - -/** - The transition affecting any changes to this layer’s `maximumRasterBrightness` property. - - This property corresponds to the `raster-brightness-max-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition maximumRasterBrightnessTransition; - -@property (nonatomic, null_resettable) NSExpression *rasterBrightnessMax __attribute__((unavailable("Use maximumRasterBrightness instead."))); - -/** - Increase or reduce the brightness of the image. The value is the minimum - brightness. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the raster-brightness-min - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *minimumRasterBrightness; - -/** - The transition affecting any changes to this layer’s `minimumRasterBrightness` property. - - This property corresponds to the `raster-brightness-min-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition minimumRasterBrightnessTransition; - -@property (nonatomic, null_resettable) NSExpression *rasterBrightnessMin __attribute__((unavailable("Use minimumRasterBrightness instead."))); - -/** - Increase or reduce the contrast of the image. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between −1 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *rasterContrast; - -/** - The transition affecting any changes to this layer’s `rasterContrast` property. - - This property corresponds to the `raster-contrast-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition rasterContrastTransition; - -/** - Fade duration when a new tile is added. - - This property is measured in milliseconds. - - The default value of this property is an expression that evaluates to the float - `300`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *rasterFadeDuration; - -/** - Rotates hues around the color wheel. - - This property is measured in degrees. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the raster-hue-rotate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant numeric values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *rasterHueRotation; - -/** - The transition affecting any changes to this layer’s `rasterHueRotation` property. - - This property corresponds to the `raster-hue-rotate-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition rasterHueRotationTransition; - -@property (nonatomic, null_resettable) NSExpression *rasterHueRotate __attribute__((unavailable("Use rasterHueRotation instead."))); - -/** - The opacity at which the image will be drawn. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *rasterOpacity; - -/** - The transition affecting any changes to this layer’s `rasterOpacity` property. - - This property corresponds to the `raster-opacity-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition rasterOpacityTransition; - -/** - The resampling/interpolation method to use for overscaling, also known as - texture magnification filter - - The default value of this property is an expression that evaluates to `linear`. - Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the raster-resampling - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `MGLRasterResamplingMode` values - * Any of the following constant string values: - * `linear`: (Bi)linear filtering interpolates pixel values using the weighted - average of the four closest original source pixels creating a smooth but blurry - look when overscaled - * `nearest`: Nearest neighbor filtering interpolates pixel values using the - nearest original source pixel creating a sharp but pixelated look when - overscaled - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *rasterResamplingMode; - -@property (nonatomic, null_resettable) NSExpression *rasterResampling __attribute__((unavailable("Use rasterResamplingMode instead."))); - -/** - Increase or reduce the saturation of the image. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between −1 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *rasterSaturation; - -/** - The transition affecting any changes to this layer’s `rasterSaturation` property. - - This property corresponds to the `raster-saturation-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition rasterSaturationTransition; - -@end - -/** - Methods for wrapping an enumeration value for a style layer attribute in an - `MGLRasterStyleLayer` object and unwrapping its raw value. - */ -@interface NSValue (MGLRasterStyleLayerAdditions) - -#pragma mark Working with Raster Style Layer Attribute Values - -/** - Creates a new value object containing the given `MGLRasterResamplingMode` enumeration. - - @param rasterResamplingMode The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLRasterResamplingMode:(MGLRasterResamplingMode)rasterResamplingMode; - -/** - The `MGLRasterResamplingMode` enumeration representation of the value. - */ -@property (readonly) MGLRasterResamplingMode MGLRasterResamplingModeValue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLRasterStyleLayer.mm b/platform/darwin/src/MGLRasterStyleLayer.mm deleted file mode 100644 index 2198d441d14..00000000000 --- a/platform/darwin/src/MGLRasterStyleLayer.mm +++ /dev/null @@ -1,339 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLSource.h" -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLStyleLayer_Private.h" -#import "MGLStyleValue_Private.h" -#import "MGLRasterStyleLayer.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLRasterStyleLayer_Private.h" - -#include -#include - - -namespace mbgl { - - MBGL_DEFINE_ENUM(MGLRasterResamplingMode, { - { MGLRasterResamplingModeLinear, "linear" }, - { MGLRasterResamplingModeNearest, "nearest" }, - }); - -} - -@interface MGLRasterStyleLayer () - -@property (nonatomic, readonly) mbgl::style::RasterLayer *rawLayer; - -@end - -@implementation MGLRasterStyleLayer - -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source -{ - MGLLogDebug(@"Initializing %@ with identifier: %@ source: %@", NSStringFromClass([self class]), identifier, source); - auto layer = std::make_unique(identifier.UTF8String, source.identifier.UTF8String); - return self = [super initWithPendingLayer:std::move(layer)]; -} - -- (mbgl::style::RasterLayer *)rawLayer -{ - return (mbgl::style::RasterLayer *)super.rawLayer; -} - -- (NSString *)sourceIdentifier -{ - MGLAssertStyleLayerIsValid(); - - return @(self.rawLayer->getSourceID().c_str()); -} - -#pragma mark - Accessing the Paint Attributes - -- (void)setMaximumRasterBrightness:(NSExpression *)maximumRasterBrightness { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting maximumRasterBrightness: %@", maximumRasterBrightness); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(maximumRasterBrightness, false); - self.rawLayer->setRasterBrightnessMax(mbglValue); -} - -- (NSExpression *)maximumRasterBrightness { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getRasterBrightnessMax(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultRasterBrightnessMax(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setMaximumRasterBrightnessTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting maximumRasterBrightnessTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setRasterBrightnessMaxTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)maximumRasterBrightnessTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getRasterBrightnessMaxTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setRasterBrightnessMax:(NSExpression *)rasterBrightnessMax { -} - -- (NSExpression *)rasterBrightnessMax { - return self.maximumRasterBrightness; -} - -- (void)setMinimumRasterBrightness:(NSExpression *)minimumRasterBrightness { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting minimumRasterBrightness: %@", minimumRasterBrightness); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(minimumRasterBrightness, false); - self.rawLayer->setRasterBrightnessMin(mbglValue); -} - -- (NSExpression *)minimumRasterBrightness { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getRasterBrightnessMin(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultRasterBrightnessMin(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setMinimumRasterBrightnessTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting minimumRasterBrightnessTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setRasterBrightnessMinTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)minimumRasterBrightnessTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getRasterBrightnessMinTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setRasterBrightnessMin:(NSExpression *)rasterBrightnessMin { -} - -- (NSExpression *)rasterBrightnessMin { - return self.minimumRasterBrightness; -} - -- (void)setRasterContrast:(NSExpression *)rasterContrast { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting rasterContrast: %@", rasterContrast); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(rasterContrast, false); - self.rawLayer->setRasterContrast(mbglValue); -} - -- (NSExpression *)rasterContrast { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getRasterContrast(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultRasterContrast(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setRasterContrastTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting rasterContrastTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setRasterContrastTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)rasterContrastTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getRasterContrastTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setRasterFadeDuration:(NSExpression *)rasterFadeDuration { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting rasterFadeDuration: %@", rasterFadeDuration); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(rasterFadeDuration, false); - self.rawLayer->setRasterFadeDuration(mbglValue); -} - -- (NSExpression *)rasterFadeDuration { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getRasterFadeDuration(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultRasterFadeDuration(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setRasterHueRotation:(NSExpression *)rasterHueRotation { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting rasterHueRotation: %@", rasterHueRotation); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(rasterHueRotation, false); - self.rawLayer->setRasterHueRotate(mbglValue); -} - -- (NSExpression *)rasterHueRotation { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getRasterHueRotate(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultRasterHueRotate(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setRasterHueRotationTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting rasterHueRotationTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setRasterHueRotateTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)rasterHueRotationTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getRasterHueRotateTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setRasterHueRotate:(NSExpression *)rasterHueRotate { -} - -- (NSExpression *)rasterHueRotate { - return self.rasterHueRotation; -} - -- (void)setRasterOpacity:(NSExpression *)rasterOpacity { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting rasterOpacity: %@", rasterOpacity); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(rasterOpacity, false); - self.rawLayer->setRasterOpacity(mbglValue); -} - -- (NSExpression *)rasterOpacity { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getRasterOpacity(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultRasterOpacity(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setRasterOpacityTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting rasterOpacityTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setRasterOpacityTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)rasterOpacityTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getRasterOpacityTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setRasterResamplingMode:(NSExpression *)rasterResamplingMode { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting rasterResamplingMode: %@", rasterResamplingMode); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(rasterResamplingMode, false); - self.rawLayer->setRasterResampling(mbglValue); -} - -- (NSExpression *)rasterResamplingMode { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getRasterResampling(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultRasterResampling(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setRasterResampling:(NSExpression *)rasterResampling { -} - -- (NSExpression *)rasterResampling { - return self.rasterResamplingMode; -} - -- (void)setRasterSaturation:(NSExpression *)rasterSaturation { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting rasterSaturation: %@", rasterSaturation); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(rasterSaturation, false); - self.rawLayer->setRasterSaturation(mbglValue); -} - -- (NSExpression *)rasterSaturation { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getRasterSaturation(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultRasterSaturation(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setRasterSaturationTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting rasterSaturationTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setRasterSaturationTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)rasterSaturationTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getRasterSaturationTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -@end - -@implementation NSValue (MGLRasterStyleLayerAdditions) - -+ (NSValue *)valueWithMGLRasterResamplingMode:(MGLRasterResamplingMode)rasterResamplingMode { - return [NSValue value:&rasterResamplingMode withObjCType:@encode(MGLRasterResamplingMode)]; -} - -- (MGLRasterResamplingMode)MGLRasterResamplingModeValue { - MGLRasterResamplingMode rasterResamplingMode; - [self getValue:&rasterResamplingMode]; - return rasterResamplingMode; -} - -@end - -namespace mbgl { - -MGLStyleLayer* RasterStyleLayerPeerFactory::createPeer(style::Layer* rawLayer) { - return [[MGLRasterStyleLayer alloc] initWithRawLayer:rawLayer]; -} - -} // namespace mbgl diff --git a/platform/darwin/src/MGLRasterStyleLayer_Private.h b/platform/darwin/src/MGLRasterStyleLayer_Private.h deleted file mode 100644 index 7b123ed8887..00000000000 --- a/platform/darwin/src/MGLRasterStyleLayer_Private.h +++ /dev/null @@ -1,17 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -#pragma once - -#include "MGLStyleLayer_Private.h" - -#include - -namespace mbgl { - -class RasterStyleLayerPeerFactory : public LayerPeerFactory, public mbgl::RasterLayerFactory { - // LayerPeerFactory overrides. - LayerFactory* getCoreLayerFactory() final { return this; } - virtual MGLStyleLayer* createPeer(style::Layer*) final; -}; - -} // namespace mbgl diff --git a/platform/darwin/src/MGLRasterTileSource.h b/platform/darwin/src/MGLRasterTileSource.h deleted file mode 100644 index a8d0a470e0e..00000000000 --- a/platform/darwin/src/MGLRasterTileSource.h +++ /dev/null @@ -1,139 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLTileSource.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - An `NSNumber` object containing a floating-point number that specifies the - width and height (measured in points) at which the map displays each raster - image tile when the map’s zoom level is an integer. The raster tile source - scales its images up or down when the map’s zoom level falls between two - integers. - - The default value for this option is 512. Version 4 of the - Mapbox Raster Tiles API - requires a value of 256, as do many third-party tile servers, so consult your - provider’s documentation for the correct value. - - This option is only applicable to `MGLRasterTileSource` objects; it is ignored - when initializing `MGLVectorTileSource` objects. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLTileSourceOption MGLTileSourceOptionTileSize; - -/** - `MGLRasterTileSource` is a map content source that supplies raster image tiles - to be shown on the map. The location of and metadata about the tiles are - defined either by an option dictionary or by an external file that conforms to - the - TileJSON specification. - A raster tile source is added to an `MGLStyle` object along with one or more - `MGLRasterStyleLayer` objects. Use a raster style layer to control the - appearance of content supplied by the raster tile source. - - Each - raster - source defined by the style JSON file is represented at runtime by an - `MGLRasterTileSource` object that you can use to initialize new style layers. You - can also add and remove sources dynamically using methods such as - `-[MGLStyle addSource:]` and `-[MGLStyle sourceWithIdentifier:]`. - - ### Example - - ```swift - let source = MGLRasterTileSource(identifier: "clouds", tileURLTemplates: ["https://example.com/raster-tiles/{z}/{x}/{y}.png"], options: [ - .minimumZoomLevel: 9, - .maximumZoomLevel: 16, - .tileSize: 512, - .attributionInfos: [ - MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com")) - ] - ]) - mapView.style?.addSource(source) - ``` - - #### Related examples - See the - Add raster imagery example to learn how to add a `MGLRasterStyleLayer` - to your map using an `MGLRasterTileSource`. - */ -MGL_EXPORT -@interface MGLRasterTileSource : MGLTileSource - -#pragma mark Initializing a Source - -/** - Returns a raster tile source initialized with an identifier and configuration - URL. - - After initializing and configuring the source, add it to a map view’s style - using the `-[MGLStyle addSource:]` method. - - The URL may be a full HTTP or HTTPS URL or, for tilesets hosted by Mapbox, a - Mapbox URL indicating a tileset ID (`mapbox://`). The URL should - point to a JSON file that conforms to the - TileJSON specification. - - If a Mapbox URL is specified, this source uses a tile size of 256. For all - other tilesets, the default value is 512. (See the - `MGLTileSourceOptionTileSize` documentation for more information about tile - sizes.) If you need to use a tile size other than the default, use the - `-initWithIdentifier:configurationURL:tileSize:` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param configurationURL A URL to a TileJSON configuration file describing the - source’s contents and other metadata. - @return An initialized raster tile source. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier configurationURL:(NSURL *)configurationURL; - -/** - Returns a raster tile source initialized with an identifier, configuration URL, - and tile size. - - After initializing and configuring the source, add it to a map view’s style - using the `-[MGLStyle addSource:]` method. - - The URL may be a full HTTP or HTTPS URL or, for tilesets hosted by Mapbox, a - Mapbox URL indicating a tileset ID (`mapbox://`). The URL should - point to a JSON file that conforms to the - TileJSON specification. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param configurationURL A URL to a TileJSON configuration file describing the - source’s contents and other metadata. - @param tileSize The width and height (measured in points) of each tiled image - in the raster tile source. See the `MGLTileSourceOptionTileSize` - documentation for details. - @return An initialized raster tile source. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier configurationURL:(NSURL *)configurationURL tileSize:(CGFloat)tileSize NS_DESIGNATED_INITIALIZER; - -/** - Returns a raster tile source initialized an identifier, tile URL templates, and - options. - - Tile URL templates are strings that specify the URLs of the raster tile images - to load. See the “Tile URL Templates” - guide for information about the format of a tile URL template. - - After initializing and configuring the source, add it to a map view’s style - using the `-[MGLStyle addSource:]` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param tileURLTemplates An array of tile URL template strings. Only the first - string is used; any additional strings are ignored. - @param options A dictionary containing configuration options. See - `MGLTileSourceOption` for available keys and values. Pass in `nil` to use - the default values. - @return An initialized tile source. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier tileURLTemplates:(NSArray *)tileURLTemplates options:(nullable NSDictionary *)options NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLRasterTileSource.mm b/platform/darwin/src/MGLRasterTileSource.mm deleted file mode 100644 index 80b21cc7ddd..00000000000 --- a/platform/darwin/src/MGLRasterTileSource.mm +++ /dev/null @@ -1,85 +0,0 @@ -#import "MGLRasterTileSource_Private.h" - -#import "MGLLoggingConfiguration_Private.h" -#import "MGLMapView_Private.h" -#import "MGLSource_Private.h" -#import "MGLTileSource_Private.h" -#import "NSURL+MGLAdditions.h" - -#include -#include - -const MGLTileSourceOption MGLTileSourceOptionTileSize = @"MGLTileSourceOptionTileSize"; - -static const CGFloat MGLRasterTileSourceClassicTileSize = 256; -static const CGFloat MGLRasterTileSourceRetinaTileSize = 512; - -@interface MGLRasterTileSource () - -@property (nonatomic, readonly) mbgl::style::RasterSource *rawSource; - -@end - -@implementation MGLRasterTileSource - -- (instancetype)initWithIdentifier:(NSString *)identifier configurationURL:(NSURL *)configurationURL { - // The style specification default is 512, but 256 is the expected value for - // any tile set that would be accessed through a mapbox: URL and therefore - // any tile URL that this option currently affects. - BOOL isMapboxURL = ([configurationURL.scheme isEqualToString:@"mapbox"] - && [configurationURL.host containsString:@"."] - && (!configurationURL.path.length || [configurationURL.path isEqualToString:@"/"])); - CGFloat tileSize = isMapboxURL ? MGLRasterTileSourceClassicTileSize : MGLRasterTileSourceRetinaTileSize; - return [self initWithIdentifier:identifier configurationURL:configurationURL tileSize:tileSize]; -} - -- (instancetype)initWithIdentifier:(NSString *)identifier configurationURL:(NSURL *)configurationURL tileSize:(CGFloat)tileSize { - NSString *configurationURLString = configurationURL.mgl_URLByStandardizingScheme.absoluteString; - auto source = [self pendingSourceWithIdentifier:identifier urlOrTileset:configurationURLString.UTF8String tileSize:uint16_t(round(tileSize))]; - return self = [super initWithPendingSource:std::move(source)]; -} - -- (std::unique_ptr)pendingSourceWithIdentifier:(NSString *)identifier urlOrTileset:(mbgl::variant)urlOrTileset tileSize:(uint16_t)tileSize { - auto source = std::make_unique(identifier.UTF8String, - urlOrTileset, - tileSize); - return source; -} - -- (instancetype)initWithIdentifier:(NSString *)identifier tileURLTemplates:(NSArray *)tileURLTemplates options:(nullable NSDictionary *)options { - mbgl::Tileset tileSet = MGLTileSetFromTileURLTemplates(tileURLTemplates, options); - - uint16_t tileSize = MGLRasterTileSourceRetinaTileSize; - if (NSNumber *tileSizeNumber = options[MGLTileSourceOptionTileSize]) { - if (![tileSizeNumber isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLTileSourceOptionTileSize must be set to an NSNumber."]; - } - tileSize = static_cast(round(tileSizeNumber.doubleValue)); - } - - auto source = [self pendingSourceWithIdentifier:identifier urlOrTileset:tileSet tileSize:tileSize]; - return self = [super initWithPendingSource:std::move(source)]; -} - -- (mbgl::style::RasterSource *)rawSource { - return (mbgl::style::RasterSource *)super.rawSource; -} - -- (NSURL *)configurationURL { - MGLAssertStyleSourceIsValid(); - auto url = self.rawSource->getURL(); - return url ? [NSURL URLWithString:@(url->c_str())] : nil; -} - -- (NSString *)attributionHTMLString { - if (!self.rawSource) { - MGLAssert(0, @"Source with identifier `%@` was invalidated after a style change", self.identifier); - return nil; - } - - auto attribution = self.rawSource->getAttribution(); - return attribution ? @(attribution->c_str()) : nil; -} - -@end diff --git a/platform/darwin/src/MGLRasterTileSource_Private.h b/platform/darwin/src/MGLRasterTileSource_Private.h deleted file mode 100644 index 55f342c7ffa..00000000000 --- a/platform/darwin/src/MGLRasterTileSource_Private.h +++ /dev/null @@ -1,23 +0,0 @@ -#import "MGLRasterTileSource.h" - -#include -#include - -namespace mbgl { - class Tileset; - namespace style { - class RasterSource; - } -} - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLRasterTileSource (Private) - -@property (nonatomic, readonly, nullable) mbgl::style::RasterSource *rawSource; - -- (std::unique_ptr)pendingSourceWithIdentifier:(NSString *)identifier urlOrTileset:(mbgl::variant)urlOrTileset tileSize:(uint16_t)tileSize; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLRendererConfiguration.h b/platform/darwin/src/MGLRendererConfiguration.h deleted file mode 100644 index 0c539f86f14..00000000000 --- a/platform/darwin/src/MGLRendererConfiguration.h +++ /dev/null @@ -1,54 +0,0 @@ -#import "MGLFoundation.h" -#import - -#include - -NS_ASSUME_NONNULL_BEGIN - -/** - The MGLRendererConfiguration object represents configuration values for the - renderer. - */ -MGL_EXPORT -@interface MGLRendererConfiguration : NSObject - -/** Returns an instance of the current renderer configuration. */ -@property (class, nonatomic, readonly) MGLRendererConfiguration *currentConfiguration; - -/** The scale factor to use. - - Based on the native scale where available, otherwise the standard screen scale. */ -@property (nonatomic, readonly) const float scaleFactor; - -/** The name of the font family to use for client-side text rendering of CJK ideographs. - - Set MGLIdeographicFontFamilyName in your containing application's Info.plist to - font family name(s) that will be available at run time, such as “PingFang TC” - or “Marker Felt”. This plist key accepts: - - - A string value of a single font family name. - - - An array of font family names. Fonts will be used in the defined order, - eventually falling back to default system font if none are available. - - - A boolean value NO to disable client-side rendering of CJK glyphs — - remote fonts specified in your style will be used instead. - */ -@property (nonatomic, readonly) mbgl::optional localFontFamilyName; - -/** - A Boolean value indicating whether symbol layers may enable per-source symbol - collision detection. - - Set `MGLCollisionBehaviorPre4_0` in your containing app's Info.plist or by using - `[[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:@"MGLCollisionBehaviorPre4_0"]`. - If both are set, the value from `NSUserDefaults` takes priority. - - Setting this property to `YES` in the plist results in symbol layers only running - collision detection against other symbol layers that are part of the same source. - */ -@property (nonatomic, readonly) BOOL perSourceCollisions; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLRendererConfiguration.mm b/platform/darwin/src/MGLRendererConfiguration.mm deleted file mode 100644 index 136dc929a6d..00000000000 --- a/platform/darwin/src/MGLRendererConfiguration.mm +++ /dev/null @@ -1,119 +0,0 @@ -#import "MGLRendererConfiguration.h" -#import "MGLOfflineStorage_Private.h" -#import "MGLFoundation_Private.h" - -#if TARGET_OS_IPHONE -#import -#else -#import -#endif - -static NSString * const MGLCollisionBehaviorPre4_0Key = @"MGLCollisionBehaviorPre4_0"; -static NSString * const MGLIdeographicFontFamilyNameKey = @"MGLIdeographicFontFamilyName"; - -@interface MGLRendererConfiguration () -@property (nonatomic, readwrite) BOOL perSourceCollisions; -@end - - -@implementation MGLRendererConfiguration - -+ (instancetype)currentConfiguration { - return [[self alloc] init]; -} - -- (instancetype)init { - return [self initWithPropertyDictionary:[[NSBundle mainBundle] infoDictionary]]; -} - -- (instancetype)initWithPropertyDictionary:(nonnull NSDictionary *)properties { - self = [super init]; - - if (self) { - // Set the collision behaviour. A value set in `NSUserDefaults.standardUserDefaults` - // should override anything in the application's info.plist - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - if ([defaults objectForKey:MGLCollisionBehaviorPre4_0Key]) { - _perSourceCollisions = [defaults boolForKey:MGLCollisionBehaviorPre4_0Key]; - } - else { - id collisionBehaviourValue = properties[MGLCollisionBehaviorPre4_0Key]; - - NSNumber *collisionBehaviourNumber = MGL_OBJC_DYNAMIC_CAST(collisionBehaviourValue, NSNumber); - - if (collisionBehaviourNumber) { - _perSourceCollisions = collisionBehaviourNumber.boolValue; - } else { - // Also support NSString to correspond with the behavior of `-[NSUserDefaults boolForKey:]` - NSString *collisionBehaviourString = MGL_OBJC_DYNAMIC_CAST(collisionBehaviourValue, NSString); - - if (collisionBehaviourString) { - _perSourceCollisions = collisionBehaviourString.boolValue; - } - } - } - } - - return self; -} - -- (const float)scaleFactor { -#if TARGET_OS_IPHONE - return [UIScreen instancesRespondToSelector:@selector(nativeScale)] ? [[UIScreen mainScreen] nativeScale] : [[UIScreen mainScreen] scale]; -#else - return [NSScreen mainScreen].backingScaleFactor; -#endif -} - -- (mbgl::optional)localFontFamilyName { - return [self _localFontFamilyNameWithPropertyDictionary:[[NSBundle mainBundle] infoDictionary]]; -} - -- (mbgl::optional)_localFontFamilyNameWithPropertyDictionary:(nonnull NSDictionary *)properties { - - std::string systemFontFamilyName; -#if TARGET_OS_IPHONE - systemFontFamilyName = std::string([[UIFont systemFontOfSize:0 weight:UIFontWeightRegular].familyName UTF8String]); -#else - systemFontFamilyName = std::string([[NSFont systemFontOfSize:0 weight:NSFontWeightRegular].familyName UTF8String]); -#endif - - id fontFamilyName = properties[MGLIdeographicFontFamilyNameKey]; - - if([fontFamilyName isKindOfClass:[NSNumber class]] && ![fontFamilyName boolValue]) - { - return mbgl::optional(); - } - else if([fontFamilyName isKindOfClass:[NSString class]]) - { - BOOL isValidFont = NO; -#if TARGET_OS_IPHONE - if([[UIFont familyNames] containsObject:fontFamilyName]){ - isValidFont = YES; - } -#else - if([[[NSFontManager sharedFontManager] availableFontFamilies] containsObject:fontFamilyName]){ - isValidFont = YES; - } -#endif - return (fontFamilyName && isValidFont) ? std::string([fontFamilyName UTF8String]) : systemFontFamilyName; - } - // Ability to specify an array of fonts for fallbacks for `localIdeographicFontFamily` - else if ([fontFamilyName isKindOfClass:[NSArray class]]){ - for(NSString *name in fontFamilyName){ -#if TARGET_OS_IPHONE - if([[UIFont familyNames] containsObject:name]){ - return std::string([name UTF8String]); - } -#else - if([[[NSFontManager sharedFontManager] availableFontFamilies] containsObject:name]){ - return std::string([name UTF8String]); - } -#endif - } - } - return systemFontFamilyName; -} - -@end diff --git a/platform/darwin/src/MGLRendererFrontend.h b/platform/darwin/src/MGLRendererFrontend.h deleted file mode 100644 index e2b8260fd15..00000000000 --- a/platform/darwin/src/MGLRendererFrontend.h +++ /dev/null @@ -1,75 +0,0 @@ -#include -#include -#include -#include -#include -#include - - -/** - The RenderFrontend is passed to the Map to facilitate rendering in a platform - dependent way. - */ -class MGLRenderFrontend : public mbgl::RendererFrontend -{ -public: - MGLRenderFrontend(std::unique_ptr renderer_, MGLMapView* nativeView_, mbgl::gfx::RendererBackend& mbglBackend_, bool async = false) - : renderer(std::move(renderer_)) - , nativeView(nativeView_) - , mbglBackend(mbglBackend_) { - if (async) { - asyncInvalidate.emplace([&]() { - [nativeView setNeedsRerender]; - }); - } - } - - void reset() override { - if (renderer) { - renderer.reset(); - } - } - - void update(std::shared_ptr updateParameters_) override { - updateParameters = std::move(updateParameters_); - if (asyncInvalidate) { - asyncInvalidate->send(); - } else { - [nativeView setNeedsRerender]; - } - } - - void setObserver(mbgl::RendererObserver& observer) override { - if (!renderer) return; - renderer->setObserver(&observer); - } - - void render() { - if (!renderer || !updateParameters) return; - - mbgl::gfx::BackendScope guard { mbglBackend, mbgl::gfx::BackendScope::ScopeType::Implicit }; - - // onStyleImageMissing might be called during a render. The user implemented method - // could trigger a call to MGLRenderFrontend#update which overwrites `updateParameters`. - // Copy the shared pointer here so that the parameters aren't destroyed while `render(...)` is - // still using them. - auto updateParameters_ = updateParameters; - renderer->render(updateParameters_); - } - - mbgl::Renderer* getRenderer() { - return renderer.get(); - } - - void reduceMemoryUse() { - if (!renderer) return; - renderer->reduceMemoryUse(); - } - -private: - std::unique_ptr renderer; - __weak MGLMapView *nativeView = nullptr; - mbgl::gfx::RendererBackend& mbglBackend; - std::shared_ptr updateParameters; - mbgl::optional asyncInvalidate; -}; diff --git a/platform/darwin/src/MGLSDKMetricsManager.h b/platform/darwin/src/MGLSDKMetricsManager.h deleted file mode 100644 index 49b3391a727..00000000000 --- a/platform/darwin/src/MGLSDKMetricsManager.h +++ /dev/null @@ -1,79 +0,0 @@ -#import -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - :nodoc: - The metrics type used to handle metrics events. - */ -typedef NS_ENUM(NSUInteger, MGLMetricType) { - /** :nodoc: - Metric that measures performance. - */ - MGLMetricTypePerformance = 0, -}; - -FOUNDATION_EXTERN MGL_EXPORT NSString* MGLStringFromMetricType(MGLMetricType metricType); - -@class MGLMetricsManager; - -/** - :nodoc: - The `MGLMetricsManagerDelegate` protocol defines a set of methods that you - can use to receive metric events. - */ -@protocol MGLMetricsManagerDelegate - -/** - :nodoc: - Asks the delegate whether the metrics manager should handle metric events. - - @param metricsManager The metrics manager object. - @param metricType The metric type event. - */ -- (BOOL)metricsManager:(MGLMetricsManager *)metricsManager shouldHandleMetric:(MGLMetricType)metricType; - -/** - :nodoc: - Asks the delegate to handle metric events. - - @param metricsManager The metrics manager object. - @param metricType The metric type event. - @param attributes The metric attributes. - */ -- (void)metricsManager:(MGLMetricsManager *)metricsManager didCollectMetric:(MGLMetricType)metricType withAttributes:(NSDictionary *)attributes; - -@end - -/** - :nodoc: - The `MGLMetricsManager` object provides a single poin to collect SDK metrics - such as tile download latency. - */ -MGL_EXPORT -@interface MGLMetricsManager : NSObject - -/** - :nodoc: - Returns the shared metrics manager object. - */ -@property (class, nonatomic, readonly) MGLMetricsManager *sharedManager; - -/** - :nodoc: - The metrics manager delegate that will recieve metric events. - */ -@property (nonatomic, weak) id delegate; - -#if TARGET_OS_IOS -/** - :nodoc: - Sends metric events to Mapbox. - */ -- (void)pushMetric:(MGLMetricType)metricType withAttributes:(NSDictionary *)attributes; -#endif - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLSDKMetricsManager.m b/platform/darwin/src/MGLSDKMetricsManager.m deleted file mode 100644 index 0ef9ecda101..00000000000 --- a/platform/darwin/src/MGLSDKMetricsManager.m +++ /dev/null @@ -1,134 +0,0 @@ -#import "MGLSDKMetricsManager_Private.h" -#import "MGLNetworkConfiguration_Private.h" -#if TARGET_OS_IOS -#import "MGLMapboxEvents.h" -#import -#import -#import -#endif - -NSString* MGLStringFromMetricType(MGLMetricType metricType) { - NSString *eventName; - - switch (metricType) { - case MGLMetricTypePerformance: - eventName = kMGLDownloadPerformanceEvent; - break; - } - return eventName; -} - -// Taken verbatim from NXFreeArchInfo header documentation -#if TARGET_OS_IOS -static void MGLFreeArchInfo(const NXArchInfo *x) -{ - const NXArchInfo *p; - - p = NXGetAllArchInfos(); - while(p->name != NULL){ - if(x == p) - return; - p++; - } - free((char *)x->description); - free((NXArchInfo *)x); -} -#endif - -@interface MGLMetricsManager() - -@property (strong, nonatomic) NSDictionary *metadata; - -@end - -@implementation MGLMetricsManager - -+ (instancetype)sharedManager -{ - static dispatch_once_t once; - static MGLMetricsManager *sharedConfiguration; - dispatch_once(&once, ^{ - sharedConfiguration = [[self alloc] init]; - [MGLNetworkConfiguration sharedManager].metricsDelegate = sharedConfiguration; -#if TARGET_OS_IOS - UIDevice *currentDevice = [UIDevice currentDevice]; - - NSString *osVersion = currentDevice.systemVersion; - - NSString *screenSize = [NSString stringWithFormat:@"%.fx%.f", [UIScreen mainScreen].bounds.size.width, - [UIScreen mainScreen].bounds.size.height]; - - NSLocale *currentLocale = [NSLocale currentLocale]; - - NSString *country = [currentLocale objectForKey:NSLocaleCountryCode] ?: @"unknown"; - - NSString *device = deviceName(); - - NSString *abi = @"unknown"; - - { - const NXArchInfo *localArchInfo = NXGetLocalArchInfo(); - - if (localArchInfo) { - abi = @(localArchInfo->description); - - NSProcessInfo *processInfo = [NSProcessInfo processInfo]; - - // Although NXFreeArchInfo appears to be weakly linked, it does - // not have the weak_import attribute, so check the OS version. - if (&NXFreeArchInfo && [processInfo isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){10, 0, 0}]) { - NXFreeArchInfo(localArchInfo); - } else { - MGLFreeArchInfo(localArchInfo); - } - } - } - - NSString *ram = [NSString stringWithFormat:@"%llu", [NSProcessInfo processInfo].physicalMemory]; - - NSString *os = currentDevice.systemName; - - sharedConfiguration.metadata = @{ @"version" : osVersion, - @"screenSize" : screenSize, - @"country" : country, - @"device" : device, - @"abi" : abi, - @"brand" : @"Apple", - @"ram" : ram, - @"os" : os - }; -#endif - }); - return sharedConfiguration; -} - -- (void)handleMetricsEvent:(MGLMetricType)metricType withAttributes:(NSDictionary *)attributes { - if ([self.delegate metricsManager:self shouldHandleMetric:metricType]) { - [self.delegate metricsManager:self didCollectMetric:metricType withAttributes:attributes]; - } -} - -#if TARGET_OS_IOS -- (void)pushMetric:(MGLMetricType)metricType withAttributes:(NSDictionary *)attributes { - NSString *eventName = MGLStringFromMetricType(metricType); - NSMutableDictionary *mutableAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes]; - [mutableAttributes setObject:self.metadata forKey:@"metadata"]; - - [MGLMapboxEvents pushEvent:eventName withAttributes:mutableAttributes]; -} - -NSString* deviceName() -{ - struct utsname systemInfo; - uname(&systemInfo); - - return [NSString stringWithCString:systemInfo.machine - encoding:NSUTF8StringEncoding]; -} -#endif - -- (void)networkConfiguration:(MGLNetworkConfiguration *)networkConfiguration didGenerateMetricEvent:(NSDictionary *)metricEvent { - [self handleMetricsEvent:MGLMetricTypePerformance withAttributes:metricEvent]; -} - -@end diff --git a/platform/darwin/src/MGLSDKMetricsManager_Private.h b/platform/darwin/src/MGLSDKMetricsManager_Private.h deleted file mode 100644 index a3cdfca7944..00000000000 --- a/platform/darwin/src/MGLSDKMetricsManager_Private.h +++ /dev/null @@ -1,11 +0,0 @@ -#import "MGLSDKMetricsManager.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLMetricsManager (Private) - -- (void)handleMetricsEvent:(MGLMetricType)metricType withAttributes:(NSDictionary *)attributes; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLShape.h b/platform/darwin/src/MGLShape.h deleted file mode 100644 index 6954045fd71..00000000000 --- a/platform/darwin/src/MGLShape.h +++ /dev/null @@ -1,115 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLAnnotation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - `MGLShape` is an abstract class that represents a shape or annotation. Shapes - constitute the content of a map — not only the overlays atop the map, but also - the content that forms the base map. - - Create instances of `MGLPointAnnotation`, `MGLPointCollection`, `MGLPolyline`, - `MGLMultiPolyline`, `MGLPolygon`, `MGLMultiPolygon`, or `MGLShapeCollection` in - order to use `MGLShape`'s methods. Do not create instances of `MGLShape` - directly, and do not create your own subclasses of this class. The shape - classes correspond to the - Geometry object - types in the GeoJSON standard, but some have nonstandard names for backwards - compatibility. - - Although you do not create instances of this class directly, you can use its - `+[MGLShape shapeWithData:encoding:error:]` factory method to create one of the - concrete subclasses of `MGLShape` noted above from GeoJSON data. To access a - shape’s attributes, use the corresponding `MGLFeature` class instead. - - You can add shapes to the map by adding them to an `MGLShapeSource` object. - Configure the appearance of an `MGLShapeSource`’s or `MGLVectorTileSource`’s - shapes collectively using a concrete instance of `MGLVectorStyleLayer`. - Alternatively, you can add some kinds of shapes directly to a map view as - annotations or overlays. - */ -MGL_EXPORT -@interface MGLShape : NSObject - -#pragma mark Creating a Shape - -/** - Returns an `MGLShape` object initialized with the given data interpreted as a - string containing a GeoJSON object. - - If the GeoJSON object is a geometry, the returned value is a kind of - `MGLShape`. If it is a feature object, the returned value is a kind of - `MGLShape` that conforms to the `MGLFeature` protocol. If it is a feature - collection object, the returned value is an instance of - `MGLShapeCollectionFeature`. - - ### Example - - ```swift - let url = mainBundle.url(forResource: "amsterdam", withExtension: "geojson")! - let data = try! Data(contentsOf: url) - let feature = try! MGLShape(data: data, encoding: String.Encoding.utf8.rawValue) as! MGLShapeCollectionFeature - ``` - - @param data String data containing GeoJSON source code. - @param encoding The encoding used by `data`. - @param outError Upon return, if an error has occurred, a pointer to an - `NSError` object describing the error. Pass in `NULL` to ignore any error. - @return An `MGLShape` object representation of `data`, or `nil` if `data` could - not be parsed as valid GeoJSON source code. If `nil`, `outError` contains an - `NSError` object describing the problem. - */ -+ (nullable MGLShape *)shapeWithData:(NSData *)data encoding:(NSStringEncoding)encoding error:(NSError * _Nullable *)outError; - -#pragma mark Accessing the Shape Attributes - -/** - The title of the shape annotation. - - The default value of this property is `nil`. - - This property is ignored when the shape is used in an `MGLShapeSource`. To name - a shape used in a shape source, create an `MGLFeature` and add an attribute to - the `MGLFeature.attributes` property. - */ -@property (nonatomic, copy, nullable) NSString *title; - -/** - The subtitle of the shape annotation. The default value of this property is - `nil`. - - This property is ignored when the shape is used in an `MGLShapeSource`. To - provide additional information about a shape used in a shape source, create an - `MGLFeature` and add an attribute to the `MGLFeature.attributes` property. - */ -@property (nonatomic, copy, nullable) NSString *subtitle; - -#if !TARGET_OS_IPHONE - -/** - The tooltip of the shape annotation. - - The default value of this property is `nil`. - - This property is ignored when the shape is used in an `MGLShapeSource`. - */ -@property (nonatomic, copy, nullable) NSString *toolTip; - -#endif - -#pragma mark Creating GeoJSON Data - -/** - Returns the GeoJSON string representation of the shape encapsulated in a data - object. - - @param encoding The string encoding to use. - @return A data object containing the shape’s GeoJSON string representation. - */ -- (NSData *)geoJSONDataUsingEncoding:(NSStringEncoding)encoding; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLShape.mm b/platform/darwin/src/MGLShape.mm deleted file mode 100644 index 4ed546a3d2d..00000000000 --- a/platform/darwin/src/MGLShape.mm +++ /dev/null @@ -1,121 +0,0 @@ -#import "MGLShape_Private.h" - -#import "MGLFeature_Private.h" - -#import "NSString+MGLAdditions.h" -#import "MGLTypes.h" - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -#import "MMEEventsManager.h" -#endif - -#import - -bool operator==(const CLLocationCoordinate2D lhs, const CLLocationCoordinate2D rhs) { - return lhs.latitude == rhs.latitude && lhs.longitude == rhs.longitude; -} - -@implementation MGLShape - -+ (nullable MGLShape *)shapeWithData:(NSData *)data encoding:(NSStringEncoding)encoding error:(NSError * _Nullable *)outError { - NSString *string = [[NSString alloc] initWithData:data encoding:encoding]; - if (!string) { - if (outError) { - *outError = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeUnknown userInfo:nil]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:*outError]; -#endif - } - return nil; - } - - try { - const auto geojson = mapbox::geojson::parse(string.UTF8String); - return MGLShapeFromGeoJSON(geojson); - } catch (std::runtime_error &err) { - if (outError) { - *outError = [NSError errorWithDomain:MGLErrorDomain code:MGLErrorCodeUnknown userInfo:@{ - NSLocalizedFailureReasonErrorKey: @(err.what()), - }]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:*outError]; -#endif - } - return nil; - } -} - -- (mbgl::GeoJSON)geoJSONObject { - return self.geometryObject; -} - -- (mbgl::Geometry)geometryObject { - [NSException raise:MGLAbstractClassException - format:@"MGLShape is an abstract class"]; - return mbgl::Point(); -} - -- (NSData *)geoJSONDataUsingEncoding:(NSStringEncoding)encoding { - auto geometry = self.geoJSONObject; - NSString *string = @(mapbox::geojson::stringify(geometry).c_str()); - return [string dataUsingEncoding:NSUTF8StringEncoding]; -} - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)coder -{ - if (self = [super init]) { - _title = [coder decodeObjectOfClass:[NSString class] forKey:@"title"]; - _subtitle = [coder decodeObjectOfClass:[NSString class] forKey:@"subtitle"]; -#if !TARGET_OS_IPHONE - _toolTip = [coder decodeObjectOfClass:[NSString class] forKey:@"toolTip"]; -#endif - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder -{ - [coder encodeObject:_title forKey:@"title"]; - [coder encodeObject:_subtitle forKey:@"subtitle"]; -#if !TARGET_OS_IPHONE - [coder encodeObject:_toolTip forKey:@"toolTip"]; -#endif -} - -- (BOOL)isEqual:(id)other -{ - if (other == self) { return YES; } - id annotation = other; - -#if TARGET_OS_IPHONE - return ((!_title && ![annotation title]) || [_title isEqualToString:[annotation title]]) - && ((!_subtitle && ![annotation subtitle]) || [_subtitle isEqualToString:[annotation subtitle]]); -#else - return ((!_title && ![annotation title]) || [_title isEqualToString:[annotation title]]) - && ((!_subtitle && ![annotation subtitle]) || [_subtitle isEqualToString:[annotation subtitle]]) - && ((!_toolTip && ![annotation toolTip]) || [_toolTip isEqualToString:[annotation toolTip]]); -#endif -} - -- (NSUInteger)hash -{ - NSUInteger hash = _title.hash + _subtitle.hash; -#if !TARGET_OS_IPHONE - hash += _toolTip.hash; -#endif - return hash; -} - -- (CLLocationCoordinate2D)coordinate -{ - [NSException raise:MGLAbstractClassException - format:@"MGLShape is an abstract class"]; - return kCLLocationCoordinate2DInvalid; -} - -@end diff --git a/platform/darwin/src/MGLShapeCollection.h b/platform/darwin/src/MGLShapeCollection.h deleted file mode 100644 index 08f32764965..00000000000 --- a/platform/darwin/src/MGLShapeCollection.h +++ /dev/null @@ -1,56 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLShape.h" - -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - An `MGLShapeCollection` object represents a shape consisting of zero or more - distinct but related shapes that are instances of `MGLShape`. The constituent - shapes can be a mixture of different kinds of shapes. - - `MGLShapeCollection` is most commonly used to add multiple shapes to a single - `MGLShapeSource`. Configure the appearance of an `MGLShapeSource`’s or - `MGLVectorTileSource`’s shape collection collectively using an - `MGLSymbolStyleLayer` object, or use multiple instances of - `MGLCircleStyleLayer`, `MGLFillStyleLayer`, and `MGLLineStyleLayer` to - configure the appearance of each kind of shape inside the collection. - - You cannot add an `MGLShapeCollection` object directly to a map view as an - annotation. However, you can create individual `MGLPointAnnotation`, - `MGLPolyline`, and `MGLPolygon` objects from the `shapes` array and add those - annotation objects to the map view using the `-[MGLMapView addAnnotations:]` - method. - - To represent a collection of point, polyline, or polygon shapes, it may be more - convenient to use an `MGLPointCollection`, `MGLMultiPolyline`, or - `MGLMultiPolygon` object, respectively. To access a shape collection’s - attributes, use the corresponding `MGLFeature` object. - - A shape collection is known as a - GeometryCollection - geometry in GeoJSON. - */ -MGL_EXPORT -@interface MGLShapeCollection : MGLShape - -/** - An array of shapes forming the shape collection. - */ -@property (nonatomic, copy, readonly) NSArray *shapes; - -/** - Creates and returns a shape collection consisting of the given shapes. - - @param shapes The array of shapes defining the shape collection. The data in - this array is copied to the new object. - @return A new shape collection object. - */ -+ (instancetype)shapeCollectionWithShapes:(NSArray *)shapes; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLShapeCollection.mm b/platform/darwin/src/MGLShapeCollection.mm deleted file mode 100644 index 5a0ef03340b..00000000000 --- a/platform/darwin/src/MGLShapeCollection.mm +++ /dev/null @@ -1,80 +0,0 @@ -#import "MGLShapeCollection.h" - -#import "MGLShape_Private.h" -#import "MGLFeature.h" -#import "MGLLoggingConfiguration_Private.h" - -#import - -@implementation MGLShapeCollection - -+ (instancetype)shapeCollectionWithShapes:(NSArray *)shapes { - return [[self alloc] initWithShapes:shapes]; -} - -- (instancetype)initWithShapes:(NSArray *)shapes { - MGLLogDebug(@"Initializing with %lu shapes.", (unsigned long)shapes.count); - if (self = [super init]) { - _shapes = shapes.copy; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder { - MGLLogInfo(@"Initializing with coder."); - if (self = [super initWithCoder:decoder]) { - _shapes = [decoder decodeObjectOfClass:[NSArray class] forKey:@"shapes"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - [coder encodeObject:_shapes forKey:@"shapes"]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) return YES; - if (![other isKindOfClass:[MGLShapeCollection class]]) return NO; - - MGLShapeCollection *otherShapeCollection = other; - return [super isEqual:otherShapeCollection] - && [_shapes isEqualToArray:otherShapeCollection.shapes]; -} - -- (NSUInteger)hash { - NSUInteger hash = [super hash]; - for (MGLShape *shape in _shapes) { - hash += [shape hash]; - } - return hash; -} - -- (CLLocationCoordinate2D)coordinate { - return _shapes.firstObject.coordinate; -} - -- (NSDictionary *)geoJSONDictionary { - return @{@"type": @"GeometryCollection", - @"geometries": [self geometryCollection]}; -} - -- (NSArray *)geometryCollection { - NSMutableArray *geometries = [[NSMutableArray alloc] initWithCapacity:self.shapes.count]; - for (id shape in self.shapes) { - NSDictionary *geometry = [shape geoJSONDictionary]; - [geometries addObject:geometry]; - } - return [geometries copy]; -} - -- (mbgl::Geometry)geometryObject { - mapbox::geojson::geometry_collection collection; - collection.reserve(self.shapes.count); - for (MGLShape *shape in self.shapes) { - collection.push_back([shape geometryObject]); - } - return collection; -} - -@end diff --git a/platform/darwin/src/MGLShapeOfflineRegion.h b/platform/darwin/src/MGLShapeOfflineRegion.h deleted file mode 100644 index 7e871067b69..00000000000 --- a/platform/darwin/src/MGLShapeOfflineRegion.h +++ /dev/null @@ -1,86 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLOfflineRegion.h" -#import "MGLShape.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - An offline region defined by a style URL, geographic shape, and - range of zoom levels. - - ### Example - ```swift - var coordinates = [ - CLLocationCoordinate2D(latitude: 45.522585, longitude: -122.685699), - CLLocationCoordinate2D(latitude: 45.534611, longitude: -122.708873), - CLLocationCoordinate2D(latitude: 45.530883, longitude: -122.678833) - ] - - let triangle = MGLPolygon(coordinates: &coordinates, count: UInt(coordinates.count)) - let region = MGLShapeOfflineRegion(styleURL: MGLStyle.lightStyleURL, shape: triangle, fromZoomLevel: 11, toZoomLevel: 14) - let context = "Triangle Region".data(using: .utf8) - MGLOfflineStorage.shared.addPack(for: region, withContext: context!) - ``` - - This class requires fewer resources than MGLTilePyramidOfflineRegion - for irregularly shaped regions. - */ -MGL_EXPORT -@interface MGLShapeOfflineRegion : NSObject - -/** - The shape for the geographic region covered by the downloaded - tiles. - */ -@property (nonatomic, readonly) MGLShape *shape; - -/** - The minimum zoom level for which to download tiles and other resources. - - For more information about zoom levels, `-[MGLMapView zoomLevel]`. - */ -@property (nonatomic, readonly) double minimumZoomLevel; - -/** - The maximum zoom level for which to download tiles and other resources. - - For more information about zoom levels, `-[MGLMapView zoomLevel]`. - */ -@property (nonatomic, readonly) double maximumZoomLevel; - -- (instancetype)init NS_UNAVAILABLE; - -/** - Initializes a newly created offline region with the given style URL, geometry, - and range of zoom levels. - - This is the designated initializer for `MGLShapeOfflineRegion`. - - @param styleURL URL of the map style for which to download resources. The URL - may be a full HTTP or HTTPS URL or a Mapbox - style URL (`mapbox://styles/{user}/{style}`). Specify `nil` for the default style. - Relative file URLs cannot be used as offline style URLs. To download the - online resources required by a local style, specify a URL to an online copy - of the style. - @param shape The shape of the geographic region to be covered by - the downloaded tiles. - @param minimumZoomLevel The minimum zoom level to be covered by the downloaded - tiles. This parameter should be set to at least 0 but no greater than the - value of the `maximumZoomLevel` parameter. For each required tile source, if - this parameter is set to a value less than the tile source’s minimum zoom - level, the download covers zoom levels down to the tile source’s minimum - zoom level. - @param maximumZoomLevel The maximum zoom level to be covered by the downloaded - tiles. This parameter should be set to at least the value of the - `minimumZoomLevel` parameter. For each required tile source, if this - parameter is set to a value greater than the tile source’s minimum zoom - level, the download covers zoom levels up to the tile source’s maximum zoom - level. - */ -- (instancetype)initWithStyleURL:(nullable NSURL *)styleURL shape:(MGLShape *)shape fromZoomLevel:(double)minimumZoomLevel toZoomLevel:(double)maximumZoomLevel NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLShapeOfflineRegion.mm b/platform/darwin/src/MGLShapeOfflineRegion.mm deleted file mode 100644 index b4f4b5e92a3..00000000000 --- a/platform/darwin/src/MGLShapeOfflineRegion.mm +++ /dev/null @@ -1,150 +0,0 @@ -#import "MGLShapeOfflineRegion.h" - -#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR - #import -#else - #import -#endif - -#import "MGLOfflineRegion_Private.h" -#import "MGLShapeOfflineRegion_Private.h" -#import "MGLFeature_Private.h" -#import "MGLShape_Private.h" -#import "MGLStyle.h" -#import "MGLLoggingConfiguration_Private.h" - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -#import "MMEConstants.h" -#endif - -@interface MGLShapeOfflineRegion () - -@end - -@implementation MGLShapeOfflineRegion { - NSURL *_styleURL; -} - -@synthesize styleURL = _styleURL; -@synthesize includesIdeographicGlyphs = _includesIdeographicGlyphs; - --(NSDictionary *)offlineStartEventAttributes { - return @{ - #if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - MMEEventKeyShapeForOfflineRegion: @"shaperegion", - MMEEventKeyMinZoomLevel: @(self.minimumZoomLevel), - MMEEventKeyMaxZoomLevel: @(self.maximumZoomLevel), - MMEEventKeyStyleURL: self.styleURL.absoluteString ?: [NSNull null] - #endif - }; -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)init { - MGLLogInfo(@"Calling this initializer is not allowed."); - [NSException raise:@"Method unavailable" - format: - @"-[MGLShapeOfflineRegion init] is unavailable. " - @"Use -initWithStyleURL:shape:fromZoomLevel:toZoomLevel: instead."]; - return nil; -} - -- (instancetype)initWithStyleURL:(NSURL *)styleURL shape:(MGLShape *)shape fromZoomLevel:(double)minimumZoomLevel toZoomLevel:(double)maximumZoomLevel { - MGLLogDebug(@"Initializing styleURL: %@ shape: %@ fromZoomLevel: %f toZoomLevel: %f", styleURL, shape, minimumZoomLevel, maximumZoomLevel); - if (self = [super init]) { - if (!styleURL) { - styleURL = [MGLStyle streetsStyleURLWithVersion:MGLStyleDefaultVersion]; - } - - if (!styleURL.scheme) { - [NSException raise:@"Invalid style URL" format: - @"%@ does not support setting a relative file URL as the style URL. " - @"To download the online resources required by this style, " - @"specify a URL to an online copy of this style. " - @"For Mapbox-hosted styles, use the mapbox: scheme.", - NSStringFromClass([self class])]; - } - - _styleURL = styleURL; - _shape = shape; - _minimumZoomLevel = minimumZoomLevel; - _maximumZoomLevel = maximumZoomLevel; - _includesIdeographicGlyphs = NO; - } - return self; -} - -- (instancetype)initWithOfflineRegionDefinition:(const mbgl::OfflineGeometryRegionDefinition &)definition { - NSURL *styleURL = [NSURL URLWithString:@(definition.styleURL.c_str())]; - MGLShape *shape = MGLShapeFromGeoJSON(definition.geometry); - MGLShapeOfflineRegion* result = [self initWithStyleURL:styleURL shape:shape fromZoomLevel:definition.minZoom toZoomLevel:definition.maxZoom]; - result.includesIdeographicGlyphs = definition.includeIdeographs; - return result; -} - -- (const mbgl::OfflineRegionDefinition)offlineRegionDefinition { -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - const float scaleFactor = [UIScreen instancesRespondToSelector:@selector(nativeScale)] ? [[UIScreen mainScreen] nativeScale] : [[UIScreen mainScreen] scale]; -#elif TARGET_OS_MAC - const float scaleFactor = [NSScreen mainScreen].backingScaleFactor; -#endif - return mbgl::OfflineGeometryRegionDefinition(_styleURL.absoluteString.UTF8String, - _shape.geometryObject, - _minimumZoomLevel, _maximumZoomLevel, - scaleFactor, _includesIdeographicGlyphs); -} - -- (nullable instancetype)initWithCoder:(NSCoder *)coder { - MGLLogInfo(@"Initializing with coder."); - NSURL *styleURL = [coder decodeObjectForKey:@"styleURL"]; - MGLShape * shape = [coder decodeObjectForKey:@"shape"]; - double minimumZoomLevel = [coder decodeDoubleForKey:@"minimumZoomLevel"]; - double maximumZoomLevel = [coder decodeDoubleForKey:@"maximumZoomLevel"]; - - MGLShapeOfflineRegion* result = [self initWithStyleURL:styleURL shape:shape fromZoomLevel:minimumZoomLevel toZoomLevel:maximumZoomLevel]; - result.includesIdeographicGlyphs = [coder decodeBoolForKey:@"includesIdeographicGlyphs"]; - return result; -} - -- (void)encodeWithCoder:(NSCoder *)coder -{ - [coder encodeObject:_styleURL forKey:@"styleURL"]; - [coder encodeObject:_shape forKey:@"shape"]; - [coder encodeDouble:_maximumZoomLevel forKey:@"maximumZoomLevel"]; - [coder encodeDouble:_minimumZoomLevel forKey:@"minimumZoomLevel"]; - [coder encodeBool:_includesIdeographicGlyphs forKey:@"includesIdeographicGlyphs"]; -} - -- (id)copyWithZone:(nullable NSZone *)zone { - MGLShapeOfflineRegion* result = [[[self class] allocWithZone:zone] initWithStyleURL:_styleURL shape:_shape fromZoomLevel:_minimumZoomLevel toZoomLevel:_maximumZoomLevel]; - result.includesIdeographicGlyphs = _includesIdeographicGlyphs; - return result; -} - -- (BOOL)isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[self class]]) { - return NO; - } - - MGLShapeOfflineRegion *otherRegion = other; - return (_minimumZoomLevel == otherRegion->_minimumZoomLevel - && _maximumZoomLevel == otherRegion->_maximumZoomLevel - && _shape.geometryObject == otherRegion->_shape.geometryObject - && [_styleURL isEqual:otherRegion->_styleURL] - && _includesIdeographicGlyphs == otherRegion->_includesIdeographicGlyphs); -} - -- (NSUInteger)hash { - return (_styleURL.hash - + _shape.hash - + @(_minimumZoomLevel).hash + @(_maximumZoomLevel).hash - + @(_includesIdeographicGlyphs).hash); -} - -@end diff --git a/platform/darwin/src/MGLShapeOfflineRegion_Private.h b/platform/darwin/src/MGLShapeOfflineRegion_Private.h deleted file mode 100644 index 2ab44ad405c..00000000000 --- a/platform/darwin/src/MGLShapeOfflineRegion_Private.h +++ /dev/null @@ -1,22 +0,0 @@ -#import - -#import "MGLOfflineRegion.h" - -#include - -NS_ASSUME_NONNULL_BEGIN - -@protocol MGLShapeOfflineRegion_Private - -/** - Initializes and returns an offline region backed by the given C++ region - definition object. - - @param definition A reference to an offline region definition backing the - offline region. - */ -- (instancetype)initWithOfflineRegionDefinition:(const mbgl::OfflineGeometryRegionDefinition &)definition; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLShapeSource.h b/platform/darwin/src/MGLShapeSource.h deleted file mode 100644 index 675c219300e..00000000000 --- a/platform/darwin/src/MGLShapeSource.h +++ /dev/null @@ -1,400 +0,0 @@ -#import "MGLFoundation.h" -#import "MGLTypes.h" -#import "MGLSource.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol MGLFeature; -@class MGLPointFeature; -@class MGLPointFeatureCluster; -@class MGLShape; - -/** - Options for `MGLShapeSource` objects. - */ -typedef NSString *MGLShapeSourceOption NS_STRING_ENUM; - -/** - An `NSNumber` object containing a Boolean enabling or disabling clustering. - If the `shape` property contains point shapes, setting this option to - `YES` clusters the points by radius into groups. The default value is `NO`. - - This option corresponds to the - cluster - source property in the Mapbox Style Specification. - - This option only affects point features within an `MGLShapeSource` object; it - is ignored when creating an `MGLComputedShapeSource` object. - - #### Related examples - See the Cluster point data and Use images to cluster point data examples to learn how to cluster point data with this `MGLShapeSourceOption`. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLShapeSourceOption MGLShapeSourceOptionClustered; - -/** - An `NSNumber` object containing an integer; specifies the radius of each - cluster if clustering is enabled. A value of 512 produces a radius equal to - the width of a tile. The default value is 50. - - This option only affects point features within an `MGLShapeSource` object; it - is ignored when creating an `MGLComputedShapeSource` object. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLShapeSourceOption MGLShapeSourceOptionClusterRadius; - -/** - An `NSDictionary` object where the key is an `NSString`. The dictionary key will - be the feature attribute key. The resulting attribute value is - aggregated from the clustered points. The dictionary value is an `NSArray` - consisting of two `NSExpression` objects. - - The first object determines how the attribute values are accumulated from the - cluster points. It is an `NSExpression` with an expression function that accepts - two or more arguments, such as `sum` or `max`. The arguments should be - `featureAccumulated` and the previously defined feature attribute key. The - resulting value is assigned to the specified attribute key. - - The second `NSExpression` in the array determines which - attribute values are accessed from individual features within a cluster. - - ```swift - let firstExpression = NSExpression(format: "sum:({$featureAccumulated, sumValue})") - let secondExpression = NSExpression(forKeyPath: "magnitude") - let clusterPropertiesDictionary = ["sumValue" : [firstExpression, secondExpression]] - - let options : [MGLShapeSourceOption : Any] = [.clustered : true, - .clusterProperties: clusterPropertiesDictionary] - ``` - - This option corresponds to the - clusterProperties - source property in the Mapbox Style Specification. - - This option only affects point features within an `MGLShapeSource` object; it - is ignored when creating an `MGLComputedShapeSource` object. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLShapeSourceOption MGLShapeSourceOptionClusterProperties; -/** - An `NSNumber` object containing an integer; specifies the maximum zoom level at - which to cluster points if clustering is enabled. Defaults to one zoom level - less than the value of `MGLShapeSourceOptionMaximumZoomLevel` so that, at the - maximum zoom level, the shapes are not clustered. - - This option corresponds to the - clusterMaxZoom - source property in the Mapbox Style Specification. - - This option only affects point features within an `MGLShapeSource` object; it - is ignored when creating an `MGLComputedShapeSource` object. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLShapeSourceOption MGLShapeSourceOptionMaximumZoomLevelForClustering; - -/** - An `NSNumber` object containing an integer; specifies the minimum zoom level at - which to create vector tiles. The default value is 0. - - This option corresponds to the - minzoom - source property in the Mapbox Style Specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLShapeSourceOption MGLShapeSourceOptionMinimumZoomLevel; - -/** - An `NSNumber` object containing an integer; specifies the maximum zoom level at - which to create vector tiles. A greater value produces greater detail at high - zoom levels. The default value is 18. - - This option corresponds to the - maxzoom - source property in the Mapbox Style Specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLShapeSourceOption MGLShapeSourceOptionMaximumZoomLevel; - -/** - An `NSNumber` object containing an integer; specifies the size of the tile - buffer on each side. A value of 0 produces no buffer. A value of 512 produces a - buffer as wide as the tile itself. Larger values produce fewer rendering - artifacts near tile edges and slower performance. The default value is 128. - - This option corresponds to the - buffer - source property in the Mapbox Style Specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLShapeSourceOption MGLShapeSourceOptionBuffer; - -/** - An `NSNumber` object containing a double; specifies the Douglas-Peucker - simplification tolerance. A greater value produces simpler geometries and - improves performance. The default value is 0.375. - - This option corresponds to the - tolerance - source property in the Mapbox Style Specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLShapeSourceOption MGLShapeSourceOptionSimplificationTolerance; - -/** - An `NSNumber` object containing a Boolean enabling or disabling calculating line distance metrics. - - Set this property to `YES` in order for the `MGLLineStyleLayer.lineGradient` property to have its intended effect. - The default value is `NO`. - - This option corresponds to the - lineMetrics - source property in the Mapbox Style Specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLShapeSourceOption MGLShapeSourceOptionLineDistanceMetrics; - -/** - `MGLShapeSource` is a map content source that supplies vector shapes to be - shown on the map. The shapes may be instances of `MGLShape` or `MGLFeature`, - or they may be defined by local or external - GeoJSON code. A shape source is added to an - `MGLStyle` object along with an `MGLVectorStyleLayer` object. The vector style - layer defines the appearance of any content supplied by the shape source. You - can update a shape source by setting its `shape` or `URL` property. - - `MGLShapeSource` is optimized for data sets that change dynamically and fit - completely in memory. For large data sets that do not fit completely in memory, - use the `MGLComputedShapeSource` or `MGLVectorTileSource` class. - - Each - geojson - source defined by the style JSON file is represented at runtime by an - `MGLShapeSource` object that you can use to refine the map’s content and - initialize new style layers. You can also add and remove sources dynamically - using methods such as `-[MGLStyle addSource:]` and - `-[MGLStyle sourceWithIdentifier:]`. - - Any vector style layer initialized with a shape source should have a `nil` - value in its `sourceLayerIdentifier` property. - - ### Example - - ```swift - var coordinates: [CLLocationCoordinate2D] = [ - CLLocationCoordinate2D(latitude: 37.77, longitude: -122.42), - CLLocationCoordinate2D(latitude: 38.91, longitude: -77.04), - ] - let polyline = MGLPolylineFeature(coordinates: &coordinates, count: UInt(coordinates.count)) - let source = MGLShapeSource(identifier: "lines", features: [polyline], options: nil) - mapView.style?.addSource(source) - ``` - - #### Related examples - See the Cluster point data, Use images to cluster point data, and Add live data examples to learn how to add data to your map using this `MGLSource` object. - */ -MGL_EXPORT -@interface MGLShapeSource : MGLSource - -#pragma mark Initializing a Source - -/** - Returns a shape source with an identifier, URL, and dictionary of options for - the source. - - This class supports the following options: `MGLShapeSourceOptionClustered`, - `MGLShapeSourceOptionClusterRadius`, - `MGLShapeSourceOptionMaximumZoomLevelForClustering`, - `MGLShapeSourceOptionMinimumZoomLevel`, `MGLShapeSourceOptionMaximumZoomLevel`, - `MGLShapeSourceOptionBuffer`, and - `MGLShapeSourceOptionSimplificationTolerance`. Shapes provided by a shape - source are not clipped or wrapped automatically. - - @param identifier A string that uniquely identifies the source. - @param url An HTTP(S) URL, absolute file URL, or local file URL relative to the - current application’s resource bundle. - @param options An `NSDictionary` of options for this source. - @return An initialized shape source. - - #### Related examples - See the - Add live data example to learn how to add live data to your map by - updating the an `MGLShapeSource` object's `URL` property. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier URL:(NSURL *)url options:(nullable NSDictionary *)options NS_DESIGNATED_INITIALIZER; - -/** - Returns a shape source with an identifier, a shape, and dictionary of options - for the source. - - This class supports the following options: `MGLShapeSourceOptionClustered`, - `MGLShapeSourceOptionClusterRadius`, - `MGLShapeSourceOptionMaximumZoomLevelForClustering`, - `MGLShapeSourceOptionMinimumZoomLevel`, `MGLShapeSourceOptionMaximumZoomLevel`, - `MGLShapeSourceOptionBuffer`, and - `MGLShapeSourceOptionSimplificationTolerance`. Shapes provided by a shape - source are not clipped or wrapped automatically. - - To specify attributes about the shape, use an instance of an `MGLShape` - subclass that conforms to the `MGLFeature` protocol, such as `MGLPointFeature`. - To include multiple shapes in the source, use an `MGLShapeCollection` or - `MGLShapeCollectionFeature` object, or use the - `-initWithIdentifier:features:options:` or - `-initWithIdentifier:shapes:options:` methods. - - To create a shape from GeoJSON source code, use the - `+[MGLShape shapeWithData:encoding:error:]` method. - - @param identifier A string that uniquely identifies the source. - @param shape A concrete subclass of `MGLShape` - @param options An `NSDictionary` of options for this source. - @return An initialized shape source. - - #### Related examples - See the - Animate a line example to learn how to animate line data by continously - updating an `MGLShapeSource`'s `shape` attribute. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier shape:(nullable MGLShape *)shape options:(nullable NSDictionary *)options NS_DESIGNATED_INITIALIZER; - -/** - Returns a shape source with an identifier, an array of features, and a dictionary - of options for the source. - - This class supports the following options: `MGLShapeSourceOptionClustered`, - `MGLShapeSourceOptionClusterRadius`, - `MGLShapeSourceOptionMaximumZoomLevelForClustering`, - `MGLShapeSourceOptionMinimumZoomLevel`, `MGLShapeSourceOptionMaximumZoomLevel`, - `MGLShapeSourceOptionBuffer`, and - `MGLShapeSourceOptionSimplificationTolerance`. Shapes provided by a shape - source are not clipped or wrapped automatically. - - Unlike `-initWithIdentifier:shapes:options:`, this method accepts `MGLFeature` - instances, such as `MGLPointFeature` objects, whose attributes you can use when - applying a predicate to `MGLVectorStyleLayer` or configuring a style layer’s - appearance. - - To create a shape from GeoJSON source code, use the - `+[MGLShape shapeWithData:encoding:error:]` method. - - @param identifier A string that uniquely identifies the source. - @param features An array of objects that conform to the MGLFeature protocol. - @param options An `NSDictionary` of options for this source. - @return An initialized shape source. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier features:(NSArray *> *)features options:(nullable NSDictionary *)options; - -/** - Returns a shape source with an identifier, an array of shapes, and a dictionary of - options for the source. - - This class supports the following options: `MGLShapeSourceOptionClustered`, - `MGLShapeSourceOptionClusterRadius`, - `MGLShapeSourceOptionMaximumZoomLevelForClustering`, - `MGLShapeSourceOptionMinimumZoomLevel`, `MGLShapeSourceOptionMaximumZoomLevel`, - `MGLShapeSourceOptionBuffer`, and - `MGLShapeSourceOptionSimplificationTolerance`. Shapes provided by a shape - source are not clipped or wrapped automatically. - - Any `MGLFeature` instance passed into this initializer is treated as an ordinary - shape, causing any attributes to be inaccessible to an `MGLVectorStyleLayer` when - evaluating a predicate or configuring certain layout or paint attributes. To - preserve the attributes associated with each feature, use the - `-initWithIdentifier:features:options:` method instead. - - To create a shape from GeoJSON source code, use the - `+[MGLShape shapeWithData:encoding:error:]` method. - - @param identifier A string that uniquely identifies the source. - @param shapes An array of shapes; each shape is a member of a concrete subclass of MGLShape. - @param options An `NSDictionary` of options for this source. - @return An initialized shape source. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier shapes:(NSArray *)shapes options:(nullable NSDictionary *)options; - -#pragma mark Accessing a Source’s Content - -/** - The contents of the source. A shape can represent a GeoJSON geometry, a - feature, or a collection of features. - - If the receiver was initialized using `-initWithIdentifier:URL:options:`, this - property is set to `nil`. This property is unavailable until the receiver is - passed into `-[MGLStyle addSource:]`. - - You can get/set the shapes within a collection via this property. Actions must - be performed on the application's main thread. - */ -@property (nonatomic, copy, nullable) MGLShape *shape; - -/** - The URL to the GeoJSON document that specifies the contents of the source. - - If the receiver was initialized using `-initWithIdentifier:shape:options:`, - this property is set to `nil`. - */ -@property (nonatomic, copy, nullable) NSURL *URL; - -/** - Returns an array of map features for this source, filtered by the given - predicate. - - Each object in the returned array represents a feature for the current style - and provides access to attributes specified via the `shape` property. - - Features come from tiled GeoJSON data that is converted to tiles internally, - so feature geometries are clipped at tile boundaries and features - may appear duplicated across tiles. For example, suppose this source contains a - long polyline representing a road. The resulting array includes those parts of - the road that lie within the map tiles that the source has loaded, even if the - road extends into other tiles. The portion of the road within each map tile is - included individually. - - Returned features may not necessarily be visible to the user at the time they - are loaded: the style may lack a layer that draws the features in question. To - obtain only _visible_ features, use the - `-[MGLMapView visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:predicate:]` - or - `-[MGLMapView visibleFeaturesInRect:inStyleLayersWithIdentifiers:predicate:]` - method. - - @param predicate A predicate to filter the returned features. Use `nil` to - include all features in the source. - @return An array of objects conforming to the `MGLFeature` protocol that - represent features in the source that match the predicate. - */ -- (NSArray> *)featuresMatchingPredicate:(nullable NSPredicate *)predicate; - -/** - Returns an array of map features that are the leaves of the specified cluster. - ("Leaves" are the original points that belong to the cluster.) - - This method supports pagination; you supply an offset (number of features to skip) - and a maximum number of features to return. - - @param cluster An object of type `MGLPointFeatureCluster` (that conforms to the `MGLCluster` protocol). - @param offset Number of features to skip. - @param limit The maximum number of features to return - - @return An array of objects that conform to the `MGLFeature` protocol. - */ -- (NSArray> *)leavesOfCluster:(MGLPointFeatureCluster *)cluster offset:(NSUInteger)offset limit:(NSUInteger)limit; - -/** - Returns an array of map features that are the immediate children of the specified - cluster *on the next zoom level*. The may include features that also conform to - the `MGLCluster` protocol (currently only objects of type `MGLPointFeatureCluster`). - - @param cluster An object of type `MGLPointFeatureCluster` (that conforms to the `MGLCluster` protocol). - - @return An array of objects that conform to the `MGLFeature` protocol. - - @note The returned array may contain the `cluster` that was passed in, if the next - zoom level doesn't match the zoom level for expanding that cluster. See - `-[MGLShapeSource zoomLevelForExpandingCluster:]`. - */ -- (NSArray> *)childrenOfCluster:(MGLPointFeatureCluster *)cluster; - -/** - Returns the zoom level at which the given cluster expands. - - @param cluster An object of type `MGLPointFeatureCluster` (that conforms to the `MGLCluster` protocol). - - @return Zoom level. This should be >= 0; any negative return value should be - considered an error. - */ -- (double)zoomLevelForExpandingCluster:(MGLPointFeatureCluster *)cluster; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLShapeSource.mm b/platform/darwin/src/MGLShapeSource.mm deleted file mode 100644 index 2590865ac2d..00000000000 --- a/platform/darwin/src/MGLShapeSource.mm +++ /dev/null @@ -1,355 +0,0 @@ -#import "MGLFoundation_Private.h" -#import "MGLShapeSource_Private.h" - -#import "MGLLoggingConfiguration_Private.h" -#import "MGLStyle_Private.h" -#import "MGLStyleValue_Private.h" -#import "MGLMapView_Private.h" -#import "MGLSource_Private.h" -#import "MGLFeature_Private.h" -#import "MGLShape_Private.h" -#import "MGLCluster.h" - -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSURL+MGLAdditions.h" - -#include -#include -#include - -const MGLShapeSourceOption MGLShapeSourceOptionBuffer = @"MGLShapeSourceOptionBuffer"; -const MGLShapeSourceOption MGLShapeSourceOptionClusterRadius = @"MGLShapeSourceOptionClusterRadius"; -const MGLShapeSourceOption MGLShapeSourceOptionClustered = @"MGLShapeSourceOptionClustered"; -const MGLShapeSourceOption MGLShapeSourceOptionClusterProperties = @"MGLShapeSourceOptionClusterProperties"; -const MGLShapeSourceOption MGLShapeSourceOptionMaximumZoomLevel = @"MGLShapeSourceOptionMaximumZoomLevel"; -const MGLShapeSourceOption MGLShapeSourceOptionMaximumZoomLevelForClustering = @"MGLShapeSourceOptionMaximumZoomLevelForClustering"; -const MGLShapeSourceOption MGLShapeSourceOptionMinimumZoomLevel = @"MGLShapeSourceOptionMinimumZoomLevel"; -const MGLShapeSourceOption MGLShapeSourceOptionSimplificationTolerance = @"MGLShapeSourceOptionSimplificationTolerance"; -const MGLShapeSourceOption MGLShapeSourceOptionLineDistanceMetrics = @"MGLShapeSourceOptionLineDistanceMetrics"; - -mbgl::Immutable MGLGeoJSONOptionsFromDictionary(NSDictionary *options) { - auto geoJSONOptions = mbgl::makeMutable(); - - if (NSNumber *value = options[MGLShapeSourceOptionMinimumZoomLevel]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionMaximumZoomLevel must be an NSNumber."]; - } - geoJSONOptions->minzoom = value.integerValue; - } - - if (NSNumber *value = options[MGLShapeSourceOptionMaximumZoomLevel]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionMaximumZoomLevel must be an NSNumber."]; - } - geoJSONOptions->maxzoom = value.integerValue; - } - - if (NSNumber *value = options[MGLShapeSourceOptionBuffer]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionBuffer must be an NSNumber."]; - } - geoJSONOptions->buffer = value.integerValue; - } - - if (NSNumber *value = options[MGLShapeSourceOptionSimplificationTolerance]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionSimplificationTolerance must be an NSNumber."]; - } - geoJSONOptions->tolerance = value.doubleValue; - } - - if (NSNumber *value = options[MGLShapeSourceOptionClusterRadius]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionClusterRadius must be an NSNumber."]; - } - geoJSONOptions->clusterRadius = value.integerValue; - } - - if (NSNumber *value = options[MGLShapeSourceOptionMaximumZoomLevelForClustering]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionMaximumZoomLevelForClustering must be an NSNumber."]; - } - geoJSONOptions->clusterMaxZoom = value.integerValue; - } - - if (NSNumber *value = options[MGLShapeSourceOptionClustered]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionClustered must be an NSNumber."]; - } - geoJSONOptions->cluster = value.boolValue; - } - - if (NSDictionary *value = options[MGLShapeSourceOptionClusterProperties]) { - if (![value isKindOfClass:[NSDictionary class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionClusterProperties must be an NSDictionary with an NSString as a key and an array containing two NSExpression objects as a value."]; - } - - NSEnumerator *stringEnumerator = [value keyEnumerator]; - NSString *key; - - while (key = [stringEnumerator nextObject]) { - NSArray *expressionsArray = value[key]; - if (![expressionsArray isKindOfClass:[NSArray class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionClusterProperties dictionary member value must be an array containing two objects."]; - } - // Check that the array has 2 values. One should be a the reduce expression and one should be the map expression. - if ([expressionsArray count] != 2) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionClusterProperties member value requires array of two objects."]; - } - - // reduceExpression should be a valid NSExpression - NSExpression *reduceExpression = expressionsArray[0]; - if (![reduceExpression isKindOfClass:[NSExpression class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionClusterProperties array value requires two expression objects."]; - } - auto reduce = MGLClusterPropertyFromNSExpression(reduceExpression); - if (!reduce) { - [NSException raise:NSInvalidArgumentException - format:@"Failed to convert MGLShapeSourceOptionClusterProperties reduce expression."]; - } - - // mapExpression should be a valid NSExpression - NSExpression *mapExpression = expressionsArray[1]; - if (![mapExpression isKindOfClass:[NSExpression class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionClusterProperties member value must contain a valid NSExpression."]; - } - auto map = MGLClusterPropertyFromNSExpression(mapExpression); - if (!map) { - [NSException raise:NSInvalidArgumentException - format:@"Failed to convert MGLShapeSourceOptionClusterProperties map expression."]; - } - - std::string keyString = std::string([key UTF8String]); - - geoJSONOptions->clusterProperties.emplace(keyString, std::make_pair(std::move(map), std::move(reduce))); - } - } - - if (NSNumber *value = options[MGLShapeSourceOptionLineDistanceMetrics]) { - if (![value isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLShapeSourceOptionLineDistanceMetrics must be an NSNumber."]; - } - geoJSONOptions->lineMetrics = value.boolValue; - } - - return geoJSONOptions; -} - -@interface MGLShapeSource () - -@property (nonatomic, readwrite) NSDictionary *options; -@property (nonatomic, readonly) mbgl::style::GeoJSONSource *rawSource; - -@end - -@implementation MGLShapeSource - -- (instancetype)initWithIdentifier:(NSString *)identifier URL:(NSURL *)url options:(NSDictionary *)options { - auto geoJSONOptions = MGLGeoJSONOptionsFromDictionary(options); - auto source = std::make_unique(identifier.UTF8String, std::move(geoJSONOptions)); - if (self = [super initWithPendingSource:std::move(source)]) { - self.URL = url; - } - return self; -} - -- (instancetype)initWithIdentifier:(NSString *)identifier shape:(nullable MGLShape *)shape options:(NSDictionary *)options { - auto geoJSONOptions = MGLGeoJSONOptionsFromDictionary(options); - auto source = std::make_unique(identifier.UTF8String, std::move(geoJSONOptions)); - if (self = [super initWithPendingSource:std::move(source)]) { - if ([shape isMemberOfClass:[MGLShapeCollection class]]) { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSLog(@"MGLShapeCollection initialized with MGLFeatures will not retain attributes." - @"Use MGLShapeCollectionFeature to retain attributes instead." - @"This will be logged only once."); - }); - } - self.shape = shape; - } - return self; -} - -- (instancetype)initWithIdentifier:(NSString *)identifier features:(NSArray *> *)features options:(nullable NSDictionary *)options { - for (id feature in features) { - if (![feature conformsToProtocol:@protocol(MGLFeature)]) { - [NSException raise:NSInvalidArgumentException format:@"The object %@ included in the features argument does not conform to the MGLFeature protocol.", feature]; - } - } - MGLShapeCollectionFeature *shapeCollectionFeature = [MGLShapeCollectionFeature shapeCollectionWithShapes:features]; - return [self initWithIdentifier:identifier shape:shapeCollectionFeature options:options]; -} - -- (instancetype)initWithIdentifier:(NSString *)identifier shapes:(NSArray *)shapes options:(nullable NSDictionary *)options { - MGLShapeCollection *shapeCollection = [MGLShapeCollection shapeCollectionWithShapes:shapes]; - return [self initWithIdentifier:identifier shape:shapeCollection options:options]; -} - -- (mbgl::style::GeoJSONSource *)rawSource { - return (mbgl::style::GeoJSONSource *)super.rawSource; -} - -- (NSURL *)URL { - MGLAssertStyleSourceIsValid(); - auto url = self.rawSource->getURL(); - return url ? [NSURL URLWithString:@(url->c_str())] : nil; -} - -- (void)setURL:(NSURL *)url { - MGLAssertStyleSourceIsValid(); - if (url) { - self.rawSource->setURL(url.mgl_URLByStandardizingScheme.absoluteString.UTF8String); - _shape = nil; - } else { - self.shape = nil; - } -} - -- (void)setShape:(MGLShape *)shape { - MGLAssertStyleSourceIsValid(); - self.rawSource->setGeoJSON({ shape.geoJSONObject }); - _shape = shape; -} - -- (NSString *)description { - if (self.rawSource) { - return [NSString stringWithFormat:@"<%@: %p; identifier = %@; URL = %@; shape = %@>", - NSStringFromClass([self class]), (void *)self, self.identifier, self.URL, self.shape]; - } - else { - return [NSString stringWithFormat:@"<%@: %p; identifier = %@; URL = ; shape = %@>", - NSStringFromClass([self class]), (void *)self, self.identifier, self.shape]; - } -} - -- (NSArray> *)featuresMatchingPredicate:(nullable NSPredicate *)predicate { - MGLAssertStyleSourceIsValid(); - mbgl::optional optionalFilter; - if (predicate) { - optionalFilter = predicate.mgl_filter; - } - - std::vector features; - if (self.mapView) { - features = self.mapView.renderer->querySourceFeatures(self.rawSource->getID(), { {}, optionalFilter }); - } - return MGLFeaturesFromMBGLFeatures(features); -} - -#pragma mark - MGLCluster management - -- (mbgl::optional)featureExtensionValueOfCluster:(MGLShape *)cluster extension:(std::string)extension options:(const std::map)options { - MGLAssertStyleSourceIsValid(); - mbgl::optional extensionValue; - - // Check parameters - if (!self.rawSource || !self.mapView || !cluster) { - return extensionValue; - } - - auto geoJSON = [cluster geoJSONObject]; - - if (!geoJSON.is()) { - MGLAssert(0, @"cluster geoJSON object is not a feature."); - return extensionValue; - } - - auto clusterFeature = geoJSON.get(); - - extensionValue = self.mapView.renderer->queryFeatureExtensions(self.rawSource->getID(), - clusterFeature, - "supercluster", - extension, - options); - return extensionValue; -} - -- (NSArray> *)leavesOfCluster:(MGLPointFeatureCluster *)cluster offset:(NSUInteger)offset limit:(NSUInteger)limit { - const std::map options = { - { "limit", static_cast(limit) }, - { "offset", static_cast(offset) } - }; - - auto featureExtension = [self featureExtensionValueOfCluster:cluster extension:"leaves" options:options]; - - if (!featureExtension) { - return @[]; - } - - if (!featureExtension->is()) { - return @[]; - } - - std::vector leaves = featureExtension->get(); - return MGLFeaturesFromMBGLFeatures(leaves); -} - -- (NSArray> *)childrenOfCluster:(MGLPointFeatureCluster *)cluster { - auto featureExtension = [self featureExtensionValueOfCluster:cluster extension:"children" options:{}]; - - if (!featureExtension) { - return @[]; - } - - if (!featureExtension->is()) { - return @[]; - } - - std::vector leaves = featureExtension->get(); - return MGLFeaturesFromMBGLFeatures(leaves); -} - -- (double)zoomLevelForExpandingCluster:(MGLPointFeatureCluster *)cluster { - auto featureExtension = [self featureExtensionValueOfCluster:cluster extension:"expansion-zoom" options:{}]; - - if (!featureExtension) { - return -1.0; - } - - if (!featureExtension->is()) { - return -1.0; - } - - auto value = featureExtension->get(); - if (value.is()) { - auto zoom = value.get(); - return static_cast(zoom); - } - - return -1.0; -} - -- (void)debugRecursiveLogForFeature:(id )feature indent:(NSUInteger)indent { - NSString *description = feature.description; - - // Want our recursive log on a single line - NSString *log = [description stringByReplacingOccurrencesOfString:@"\\s+" - withString:@" " - options:NSRegularExpressionSearch - range:NSMakeRange(0, description.length)]; - - printf("%*s%s\n", (int)indent, "", log.UTF8String); - - MGLPointFeatureCluster *cluster = MGL_OBJC_DYNAMIC_CAST(feature, MGLPointFeatureCluster); - - if (cluster) { - for (id child in [self childrenOfCluster:cluster]) { - [self debugRecursiveLogForFeature:child indent:indent + 4]; - } - } -} - -@end diff --git a/platform/darwin/src/MGLShapeSource_Private.h b/platform/darwin/src/MGLShapeSource_Private.h deleted file mode 100644 index 940c80a17d6..00000000000 --- a/platform/darwin/src/MGLShapeSource_Private.h +++ /dev/null @@ -1,33 +0,0 @@ -#import "MGLFoundation.h" -#import "MGLShapeSource.h" - -#include - -NS_ASSUME_NONNULL_BEGIN - -namespace mbgl { - namespace style { - struct GeoJSONOptions; - } -} - -MGL_EXPORT -mbgl::Immutable MGLGeoJSONOptionsFromDictionary(NSDictionary *options); - -@interface MGLShapeSource (Private) - -/** - :nodoc: - Debug log showing structure of an `MGLFeature`. This method recurses in the case - that the feature conforms to `MGLCluster`. This method is used for testing and - should be considered experimental, likely to be removed or changed in future - releases. - - @param feature An object that conforms to the `MGLFeature` protocol. - @param indent Used during recursion. Specify 0. - */ - -- (void)debugRecursiveLogForFeature:(id)feature indent:(NSUInteger)indent; -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLShape_Private.h b/platform/darwin/src/MGLShape_Private.h deleted file mode 100644 index 9821d491769..00000000000 --- a/platform/darwin/src/MGLShape_Private.h +++ /dev/null @@ -1,26 +0,0 @@ -#import "MGLShape.h" - -#import -#import -#import - -bool operator==(const CLLocationCoordinate2D lhs, const CLLocationCoordinate2D rhs); - -@interface MGLShape (Private) - -/** - Returns an `mbgl::GeoJSON` representation of the `MGLShape`. - */ -- (mbgl::GeoJSON)geoJSONObject; - -/** - Returns an `mbgl::Geometry` representation of the `MGLShape`. - */ -- (mbgl::Geometry)geometryObject; - -/** - Returns a dictionary with the GeoJSON geometry member object. - */ -- (NSDictionary *)geoJSONDictionary; - -@end diff --git a/platform/darwin/src/MGLSource.h b/platform/darwin/src/MGLSource.h deleted file mode 100644 index dc92e652e8b..00000000000 --- a/platform/darwin/src/MGLSource.h +++ /dev/null @@ -1,56 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLInvalidStyleSourceException; - -/** - `MGLSource` is an abstract base class for map content sources. A map content - source supplies content to be shown on the map. A source is added to an - `MGLStyle` object along with an `MGLForegroundStyleLayer` object. The - foreground style layer defines the appearance of any content supplied by the - source. - - Each source defined by the style JSON file is represented at runtime by an - `MGLSource` object that you can use to refine the map’s content. You can also - add and remove sources dynamically using methods such as - `-[MGLStyle addSource:]` and `-[MGLStyle sourceWithIdentifier:]`. - - Create instances of `MGLShapeSource`, `MGLComputedShapeSource`, - `MGLImageSource`, and the concrete subclasses of `MGLTileSource` - (`MGLVectorTileSource` and `MGLRasterTileSource`) in order to use `MGLSource`’s - properties and methods. Do not create instances of `MGLSource` directly, and do - not create your own subclasses of this class. - */ -MGL_EXPORT -@interface MGLSource : NSObject - -#pragma mark Initializing a Source - -- (instancetype)init __attribute__((unavailable("Use -initWithIdentifier: instead."))); - -/** - Returns a source initialized with an identifier. - - After initializing and configuring the source, add it to a map view’s style - using the `-[MGLStyle addSource:]` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @return An initialized source. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier; - -#pragma mark Identifying a Source - -/** - A string that uniquely identifies the source in the style to which it is added. - */ -@property (nonatomic, copy) NSString *identifier; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLSource.mm b/platform/darwin/src/MGLSource.mm deleted file mode 100644 index 1d7b46e1cc2..00000000000 --- a/platform/darwin/src/MGLSource.mm +++ /dev/null @@ -1,120 +0,0 @@ -#import "MGLSource_Private.h" -#import "MGLStyle_Private.h" -#import "MGLMapView_Private.h" -#import "NSBundle+MGLAdditions.h" - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -#import "MMEEventsManager.h" -#endif - -#include -#include -#include - -const MGLExceptionName MGLInvalidStyleSourceException = @"MGLInvalidStyleSourceException"; - -@interface MGLSource () - -// Even though this class is abstract, MGLStyle uses it to represent some -// special internal source types like mbgl::AnnotationSource. -@property (nonatomic, readonly) mbgl::style::Source *rawSource; - -@property (nonatomic, readonly, weak) MGLMapView *mapView; - -@end - -@implementation MGLSource { - std::unique_ptr _pendingSource; - mapbox::base::WeakPtr _weakSource; -} - - -- (instancetype)initWithIdentifier:(NSString *)identifier -{ - if (self = [super init]) { - _identifier = [identifier copy]; - } - return self; -} - -- (instancetype)initWithRawSource:(mbgl::style::Source *)rawSource mapView:(MGLMapView *)mapView { - NSString *identifier = @(rawSource->getID().c_str()); - if (self = [self initWithIdentifier:identifier]) { - _weakSource = rawSource->makeWeakPtr(); - rawSource->peer = SourceWrapper { self }; - _mapView = mapView; - } - return self; -} - -- (mbgl::style::Source *)rawSource -{ - return _weakSource.get(); -} - -- (instancetype)initWithPendingSource:(std::unique_ptr)pendingSource { - if (self = [self initWithRawSource:pendingSource.get() mapView:nil]) { - _pendingSource = std::move(pendingSource); - } - return self; -} - -- (void)addToMapView:(MGLMapView *)mapView { - if (_pendingSource == nullptr) { - [NSException raise:MGLRedundantSourceException - format:@"This instance %@ was already added to %@. Adding the same source instance " \ - "to the style more than once is invalid.", self, mapView.style]; - } - - _mapView = mapView; - _mapView.style.rawStyle->addSource(std::move(_pendingSource)); -} - -- (BOOL)removeFromMapView:(MGLMapView *)mapView error:(NSError * __nullable * __nullable)outError { - MGLAssertStyleSourceIsValid(); - BOOL removed = NO; - - if (self.rawSource == mapView.style.rawStyle->getSource(self.identifier.UTF8String)) { - - auto removedSource = mapView.style.rawStyle->removeSource(self.identifier.UTF8String); - - if (removedSource) { - removed = YES; - _pendingSource = std::move(removedSource); - _mapView = nil; - } else if (outError) { - NSString *localizedDescription = [NSString stringWithFormat: - NSLocalizedStringWithDefaultValue(@"REMOVE_SRC_FAIL_IN_USE_FMT", @"Foundation", nil, @"The source “%@” can’t be removed while it is in use.", @"User-friendly error description; first placeholder is the source’s identifier"), - self.identifier]; - - *outError = [NSError errorWithDomain:MGLErrorDomain - code:MGLErrorCodeSourceIsInUseCannotRemove - userInfo:@{ NSLocalizedDescriptionKey : localizedDescription }]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:*outError]; -#endif - - } - } else if (outError) { - // TODO: Consider raising an exception here - NSString *localizedDescription = [NSString stringWithFormat: - NSLocalizedStringWithDefaultValue(@"REMOVE_SRC_FAIL_MISMATCH_FMT", @"Foundation", nil, @"The source can’t be removed because its identifier, “%@”, belongs to a different source in this style.", @"User-friendly error description"), - self.identifier]; - - *outError = [NSError errorWithDomain:MGLErrorDomain - code:MGLErrorCodeSourceIdentifierMismatch - userInfo:@{ NSLocalizedDescriptionKey : localizedDescription }]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:*outError]; -#endif - } - - return removed; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p; identifier = %@>", - NSStringFromClass([self class]), (void *)self, self.identifier]; -} - -@end diff --git a/platform/darwin/src/MGLSource_Private.h b/platform/darwin/src/MGLSource_Private.h deleted file mode 100644 index 4a7c31694d5..00000000000 --- a/platform/darwin/src/MGLSource_Private.h +++ /dev/null @@ -1,89 +0,0 @@ -#import "MGLSource.h" - -#include - - -NS_ASSUME_NONNULL_BEGIN - -namespace mbgl { - namespace style { - class Source; - } -} - -// A struct to be stored in the `peer` member of mbgl::style::Source, in order to implement -// object identity. We don't store a MGLSource pointer directly because that doesn't -// interoperate with ARC. The inner pointer is weak in order to avoid a reference cycle for -// "pending" MGLSources, which have a strong owning pointer to the mbgl::style::Source. -struct SourceWrapper { - __weak MGLSource *source; -}; - -/** - Assert that the style source is valid. - - This macro should be used at the beginning of any public-facing instance method - of `MGLSource` and its subclasses. For private methods, an assertion is more appropriate. - */ -#define MGLAssertStyleSourceIsValid() \ -do { \ - if (!self.rawSource) { \ - [NSException raise:MGLInvalidStyleSourceException \ - format:@"This source got invalidated after the style change"]; \ - } \ -} while (NO); - -@class MGLMapView; - -@interface MGLSource (Private) - -/** - Initializes and returns a source with a raw pointer to the backing store, - associated with a style. - */ -- (instancetype)initWithRawSource:(mbgl::style::Source *)rawSource mapView:(nullable MGLMapView *)mapView; - -/** - Initializes and returns a source with an owning pointer to the backing store, - unassociated from a style. - */ -- (instancetype)initWithPendingSource:(std::unique_ptr)pendingSource; - -/** - A raw pointer to the mbgl object, which is always initialized, either to the - value returned by `mbgl::Map getSource`, or for independently created objects, - to the pointer value held in `pendingSource`. In the latter case, this raw - pointer value stays even after ownership of the object is transferred via - `mbgl::Map addSource`. - */ -@property (nonatomic, readonly) mbgl::style::Source *rawSource; - -/** - The map view whose style currently contains the source. - If the source is not currently part of any map view’s style, this property is - set to `nil`. - */ -@property (nonatomic, readonly, weak) MGLMapView *mapView; - -/** - Adds the mbgl source that this object represents to the mbgl map. - Once a mbgl source is added, ownership of the object is transferred to the - `mbgl::Map` and this object no longer has an active unique_ptr reference to the - `mbgl::Source`. If this object's mbgl source is in that state, the mbgl source - can still be changed but the changes will not be visible until the `MGLSource` - is added back to the map via `-[MGLStyle addSource:]` and styled with a - `MGLLayer`. - */ -- (void)addToMapView:(MGLMapView *)mapView; - -/** - Removes the mbgl source that this object represents from the mbgl map. - When a mbgl source is removed, ownership of the object is transferred back - to the `MGLSource` instance and the unique_ptr reference is valid again. It is - safe to add the source back to the style after it is removed. - */ -- (BOOL)removeFromMapView:(MGLMapView *)mapView error:(NSError * __nullable * __nullable)outError; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLStyle.h b/platform/darwin/src/MGLStyle.h deleted file mode 100644 index ac5f7499201..00000000000 --- a/platform/darwin/src/MGLStyle.h +++ /dev/null @@ -1,542 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLStyleLayer.h" - -#import "MGLTypes.h" - -@class MGLSource; -@class MGLLight; - -NS_ASSUME_NONNULL_BEGIN - -/** - A version number identifying the default version of the Mapbox Streets style - obtained through the `MGLStyle.streetsStyleURL` method. This version number may also be - passed into the `+[MGLStyle streetsStyleURLWithVersion:]` method. - - The value of this constant generally corresponds to the latest released version - as of the date on which this SDK was published. You can use this constant to - ascertain the style used by `MGLMapView` and `MGLTilePyramidOfflineRegion` when - no style URL is specified. Consult the - Mapbox Styles API documentation - for the most up-to-date style versioning information. - - @warning The value of this constant may change in a future release of the SDK. - If you use any feature that depends on a specific aspect of a default style - — for instance, the minimum zoom level that includes roads — you may use the - current value of this constant or the underlying style URL, but do not use - the constant itself. Such details may change significantly from version to - version. - */ -static MGL_EXPORT const NSInteger MGLStyleDefaultVersion = 11; - -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLInvalidStyleURLException; -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLRedundantLayerException; -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLRedundantLayerIdentifierException; -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLRedundantSourceException; -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLRedundantSourceIdentifierException; - -/** - The proxy object for the current map style. - - MGLStyle provides a set of convenience methods for changing Mapbox - default styles using `MGLMapView.styleURL`. - Learn more about Mapbox default styles. - - It is also possible to directly manipulate the current map style - via `MGLMapView.style` by updating the style's data sources or layers. - - @note Wait until the map style has finished loading before modifying a map's - style via any of the `MGLStyle` instance methods below. You can use the - `-[MGLMapViewDelegate mapView:didFinishLoadingStyle:]` or - `-[MGLMapViewDelegate mapViewDidFinishLoadingMap:]` methods as indicators - that it's safe to modify the map's style. - - #### Related examples - See the - Default styles example to learn how to initialize an `MGLMapView` object - with a Mapbox default style using `MGLStyle`'s class methods. - */ -MGL_EXPORT -@interface MGLStyle : NSObject - -#pragma mark Accessing Default Styles - -/** - Returns the URL to the current version of the - Mapbox Streets style as of - publication. - - Streets is a general-purpose style with detailed road and transit networks. - - `MGLMapView` and `MGLTilePyramidOfflineRegion` use Mapbox Streets when no style - is specified explicitly. - - @warning The return value may change in a future release of the SDK. If you use - any feature that depends on a specific aspect of a default style — for - instance, the minimum zoom level that includes roads — use the - `+streetsStyleURLWithVersion:` method instead. Such details may change - significantly from version to version. - */ -@property (class, nonatomic, readonly) NSURL *streetsStyleURL; - -/** - Returns the URL to the given version of the - Mapbox Streets style. - - Streets is a general-purpose style with detailed road and transit networks. - - `MGLMapView` and `MGLTilePyramidOfflineRegion` use Mapbox Streets when no style - is specified explicitly. - - @param version A specific version of the style. - */ -+ (NSURL *)streetsStyleURLWithVersion:(NSInteger)version; - -/** - Returns the URL to the current version of the - Mapbox Outdoors style as of - publication. - - Outdoors is a general-purpose style tailored to outdoor activities. - - @warning The return value may change in a future release of the SDK. If you use - any feature that depends on a specific aspect of a default style — for - instance, the minimum zoom level that includes roads — use the - `+outdoorsStyleURLWithVersion:` method instead. Such details may change - significantly from version to version. - */ -@property (class, nonatomic, readonly) NSURL *outdoorsStyleURL; - -/** - Returns the URL to the given version of the - Mapbox Outdoors style. - - Outdoors is a general-purpose style tailored to outdoor activities. - - @param version A specific version of the style. - */ -+ (NSURL *)outdoorsStyleURLWithVersion:(NSInteger)version; - -/** - Returns the URL to the current version of the - Mapbox Light style. - - Light is a subtle, light-colored backdrop for data visualizations. - - @warning The return value may change in a future release of the SDK. If you use - any feature that depends on a specific aspect of a default style — for - instance, the minimum zoom level that includes roads — use the - `+lightStyleURLWithVersion:` method instead. Such details may change - significantly from version to version. - */ -@property (class, nonatomic, readonly) NSURL *lightStyleURL; - -/** - Returns the URL to the given version of the - Mapbox Light style as of - publication. - - Light is a subtle, light-colored backdrop for data visualizations. - - @param version A specific version of the style. - */ -+ (NSURL *)lightStyleURLWithVersion:(NSInteger)version; - -/** - Returns the URL to the current version of the - Mapbox Dark style. - - Dark is a subtle, dark-colored backdrop for data visualizations. - - @warning The return value may change in a future release of the SDK. If you use - any feature that depends on a specific aspect of a default style — for - instance, the minimum zoom level that includes roads — use the - `+darkStyleURLWithVersion:` method instead. Such details may change - significantly from version to version. - */ -@property (class, nonatomic, readonly) NSURL *darkStyleURL; - -/** - Returns the URL to the given version of the - Mapbox Dark style as of - publication. - - Dark is a subtle, dark-colored backdrop for data visualizations. - - @param version A specific version of the style. - */ -+ (NSURL *)darkStyleURLWithVersion:(NSInteger)version; - -/** - Returns the URL to the current version of the - Mapbox Satellite style. - - Satellite is high-resolution satellite and aerial imagery. - - @warning The return value may change in a future release of the SDK. If you use - any feature that depends on a specific aspect of a default style — for - instance, the raster tile sets included in the style — use the - `+satelliteStyleURLWithVersion:` method instead. Such details may change - significantly from version to version. - - #### Related example - See the - Satellite styles example to learn how to initialize a map with the Mapbox - Satellite style. - */ -@property (class, nonatomic, readonly) NSURL *satelliteStyleURL; - -/** - Returns the URL to the given version of the - Mapbox Satellite style as - of publication. - - Satellite is high-resolution satellite and aerial imagery. - - @param version A specific version of the style. - */ -+ (NSURL *)satelliteStyleURLWithVersion:(NSInteger)version; - -/** - Returns the URL to the current version of the - Mapbox Satellite Streets - style as of publication. - - Satellite Streets combines the high-resolution satellite and aerial imagery of - Mapbox Satellite with unobtrusive labels and translucent roads from Mapbox - Streets. - - @warning The return value may change in a future release of the SDK. If you use - any feature that depends on a specific aspect of a default style — for - instance, the minimum zoom level that includes roads — use the - `+satelliteStreetsStyleURLWithVersion:` method instead. Such details may - change significantly from version to version. - - #### Related example - See the - Satellite styles example to learn how to initialize a map with the Mapbox - Satellite Streets style. - */ -@property (class, nonatomic, readonly) NSURL *satelliteStreetsStyleURL; - -/** - Returns the URL to the given version of the - Mapbox Satellite Streets - style. - - Satellite Streets combines the high-resolution satellite and aerial imagery of - Mapbox Satellite with unobtrusive labels and translucent roads from Mapbox - Streets. - - @param version A specific version of the style. - */ -+ (NSURL *)satelliteStreetsStyleURLWithVersion:(NSInteger)version; - -#pragma mark Accessing Metadata About the Style - -/** - The name of the style. - - You can customize the style’s name in Mapbox Studio. - */ -@property (readonly, copy, nullable) NSString *name; - -#pragma mark Managing Sources - -/** - A set containing the style’s sources. - */ -@property (nonatomic, strong) NSSet<__kindof MGLSource *> *sources; - -/** - Values describing animated transitions to changes on a style's individual - paint properties. - */ -@property (nonatomic) MGLTransition transition; - -/** - A boolean value indicating whether label placement transitions are enabled. - - The default value of this property is `YES`. - */ -@property (nonatomic, assign) BOOL performsPlacementTransitions; - -/** - Returns a source with the given identifier in the current style. - - @note Source identifiers are not guaranteed to exist across styles or different - versions of the same style. Applications that use this API must first set the - style URL to an explicitly versioned style using a convenience method like - `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL” - inspectable in Interface Builder, or a manually constructed `NSURL`. This - approach also avoids source identifer name changes that will occur in the default - style’s sources over time. - - @return An instance of a concrete subclass of `MGLSource` associated with the - given identifier, or `nil` if the current style contains no such source. - */ -- (nullable MGLSource *)sourceWithIdentifier:(NSString *)identifier; - -/** - Adds a new source to the current style. - - @note Adding the same source instance more than once will result in a - `MGLRedundantSourceException`. Reusing the same source identifier, even with - different source instances, will result in a - `MGLRedundantSourceIdentifierException`. - - @note Sources should be added in - `-[MGLMapViewDelegate mapView:didFinishLoadingStyle:]` or - `-[MGLMapViewDelegate mapViewDidFinishLoadingMap:]` to ensure that the map - has loaded the style and is ready to accept a new source. - - @param source The source to add to the current style. - */ -- (void)addSource:(MGLSource *)source; - -/** - Removes a source from the current style. - - @note Source identifiers are not guaranteed to exist across styles or different - versions of the same style. Applications that use this API must first set the - style URL to an explicitly versioned style using a convenience method like - `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL” - inspectable in Interface Builder, or a manually constructed `NSURL`. This - approach also avoids source identifer name changes that will occur in the default - style’s sources over time. - - @param source The source to remove from the current style. - */ -- (void)removeSource:(MGLSource *)source; - -/** - Removes a source from the current style. - - @note Source identifiers are not guaranteed to exist across styles or different - versions of the same style. Applications that use this API must first set the - style URL to an explicitly versioned style using a convenience method like - `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL” - inspectable in Interface Builder, or a manually constructed `NSURL`. This - approach also avoids source identifer name changes that will occur in the default - style’s sources over time. - - @param source The source to remove from the current style. - @param outError Upon return, if an error has occurred, a pointer to an `NSError` - object describing the error. Pass in `NULL` to ignore any error. - - @return `YES` if `source` was removed successfully. If `NO`, `outError` contains - an `NSError` object describing the problem. - */ -- (BOOL)removeSource:(MGLSource *)source error:(NSError * __nullable * __nullable)outError; - - -#pragma mark Managing Style Layers - -/** - The layers included in the style, arranged according to their back-to-front - ordering on the screen. - */ -@property (nonatomic, strong) NSArray<__kindof MGLStyleLayer *> *layers; - -/** - Returns a style layer with the given identifier in the current style. - - @note Layer identifiers are not guaranteed to exist across styles or different - versions of the same style. Applications that use this API must first set - the style URL to an explicitly versioned style using a convenience method like - `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL” - inspectable in Interface Builder, or a manually constructed `NSURL`. This - approach also avoids layer identifer name changes that will occur in the default - style’s layers over time. - - @return An instance of a concrete subclass of `MGLStyleLayer` associated with - the given identifier, or `nil` if the current style contains no such style - layer. - */ -- (nullable MGLStyleLayer *)layerWithIdentifier:(NSString *)identifier; - -/** - Adds a new layer on top of existing layers. - - @note Adding the same layer instance more than once will result in a - `MGLRedundantLayerException`. Reusing the same layer identifer, even with - different layer instances, will also result in an exception. - - @note Layers should be added in - `-[MGLMapViewDelegate mapView:didFinishLoadingStyle:]` or - `-[MGLMapViewDelegate mapViewDidFinishLoadingMap:]` to ensure that the map - has loaded the style and is ready to accept a new layer. - - @param layer The layer object to add to the map view. This object must be an - instance of a concrete subclass of `MGLStyleLayer`. - */ -- (void)addLayer:(MGLStyleLayer *)layer; - -/** - Inserts a new layer into the style at the given index. - - @note Adding the same layer instance more than once will result in a - `MGLRedundantLayerException`. Reusing the same layer identifer, even with - different layer instances, will also result in an exception. - - @note Layers should be added in - `-[MGLMapViewDelegate mapView:didFinishLoadingStyle:]` or - `-[MGLMapViewDelegate mapViewDidFinishLoadingMap:]` to ensure that the map - has loaded the style and is ready to accept a new layer. - - @param layer The layer to insert. - @param index The index at which to insert the layer. An index of 0 would send - the layer to the back; an index equal to the number of objects in the - `layers` property would bring the layer to the front. - */ -- (void)insertLayer:(MGLStyleLayer *)layer atIndex:(NSUInteger)index; - -/** - Inserts a new layer below another layer. - - @note Layer identifiers are not guaranteed to exist across styles or different - versions of the same style. Applications that use this API must first set - the style URL to an explicitly versioned style using a convenience method like - `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL” - inspectable in Interface Builder, or a manually constructed `NSURL`. This - approach also avoids layer identifer name changes that will occur in the default - style’s layers over time. - - Inserting the same layer instance more than once will result in a - `MGLRedundantLayerException`. Reusing the same layer identifer, even with - different layer instances, will also result in an exception. - - @param layer The layer to insert. - @param sibling An existing layer in the style. - - #### Related examples - See the - Add multiple shapes from a single shape source example to learn how to - add a layer to your map below an existing layer. - */ -- (void)insertLayer:(MGLStyleLayer *)layer belowLayer:(MGLStyleLayer *)sibling; - -/** - Inserts a new layer above another layer. - - @note Layer identifiers are not guaranteed to exist across styles or different - versions of the same style. Applications that use this API must first set - the style URL to an explicitly versioned style using a convenience method like - `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL” - inspectable in Interface Builder, or a manually constructed `NSURL`. This - approach also avoids layer identifer name changes that will occur in the default - style’s layers over time. - - Inserting the same layer instance more than once will result in a - `MGLRedundantLayerException`. Reusing the same layer identifer, even with - different layer instances, will also result in an exception. - - @param layer The layer to insert. - @param sibling An existing layer in the style. - - #### Related examples - See the - Add an image example to learn how to add a layer to your map above an - existing layer. - */ -- (void)insertLayer:(MGLStyleLayer *)layer aboveLayer:(MGLStyleLayer *)sibling; - -/** - Removes a layer from the map view. - - @note Layer identifiers are not guaranteed to exist across styles or different - versions of the same style. Applications that use this API must first set - the style URL to an explicitly versioned style using a convenience method like - `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL” - inspectable in Interface Builder, or a manually constructed `NSURL`. This - approach also avoids layer identifer name changes that will occur in the default - style’s layers over time. - - @param layer The layer object to remove from the map view. This object - must conform to the `MGLStyleLayer` protocol. - */ -- (void)removeLayer:(MGLStyleLayer *)layer; - -#pragma mark Managing a Style’s Images - -/** - Returns the image associated with the given name in the style. - - @note Names and their associated images are not guaranteed to exist across - styles or different versions of the same style. Applications that use this - API must first set the style URL to an explicitly versioned style using a - convenience method like `+[MGLStyle outdoorsStyleURLWithVersion:]`, - `MGLMapView`’s “Style URL” inspectable in Interface Builder, or a manually - constructed `NSURL`. This approach also avoids image name changes that will - occur in the default style over time. - - @param name The name associated with the image you want to obtain. - @return The image associated with the given name, or `nil` if no image is - associated with that name. - */ -- (nullable MGLImage *)imageForName:(NSString *)name; - -/** - Adds or overrides an image used by the style’s layers. - - To use an image in a style layer, give it a unique name using this method, then - set the `iconImageName` property of an `MGLSymbolStyleLayer` object to that - name. - - @param image The image for the name. - @param name The name of the image to set to the style. - - #### Related examples - See the - Use images to cluster point data and - Cluster point data examples to learn how to add images to your map using - an `MGLStyle` object. - */ -- (void)setImage:(MGLImage *)image forName:(NSString *)name; - -/** - Removes a name and its associated image from the style. - - @note Names and their associated images are not guaranteed to exist across - styles or different versions of the same style. Applications that use this - API must first set the style URL to an explicitly versioned style using a - convenience method like `+[MGLStyle outdoorsStyleURLWithVersion:]`, - `MGLMapView`’s “Style URL” inspectable in Interface Builder, or a manually - constructed `NSURL`. This approach also avoids image name changes that will - occur in the default style over time. - - @param name The name of the image to remove. - */ -- (void)removeImageForName:(NSString *)name; - - -#pragma mark Managing the Style's Light - -/** - Provides global light source for the style. - */ -@property (nonatomic, strong) MGLLight *light; - -#pragma mark Localizing Map Content - -/** - Attempts to localize labels in the style into the given locale. - - This method automatically modifies the text property of any symbol style layer - in the style whose source is the - Mapbox Streets source. - On iOS, the user can set the system’s preferred language in Settings, General - Settings, Language & Region. On macOS, the user can set the system’s preferred - language in the Language & Region pane of System Preferences. - - @param locale The locale into which labels should be localized. To use the - system’s preferred language, if supported, specify `nil`. To use the local - language, specify a locale with the identifier `mul`. - */ -- (void)localizeLabelsIntoLocale:(nullable NSLocale *)locale; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLStyle.mm b/platform/darwin/src/MGLStyle.mm deleted file mode 100644 index 6a496dc3c03..00000000000 --- a/platform/darwin/src/MGLStyle.mm +++ /dev/null @@ -1,636 +0,0 @@ -#import "MGLStyle_Private.h" - -#import "MGLMapView_Private.h" -#import "MGLStyleLayer.h" -#import "MGLStyleLayer_Private.h" -#import "MGLFillStyleLayer.h" -#import "MGLFillExtrusionStyleLayer.h" -#import "MGLLineStyleLayer.h" -#import "MGLCircleStyleLayer.h" -#import "MGLSymbolStyleLayer.h" -#import "MGLHeatmapStyleLayer.h" -#import "MGLHillshadeStyleLayer.h" -#import "MGLRasterStyleLayer.h" -#import "MGLBackgroundStyleLayer.h" -#import "MGLOpenGLStyleLayer.h" -#import "MGLStyleLayerManager.h" - -#import "MGLSource.h" -#import "MGLSource_Private.h" -#import "MGLLight_Private.h" -#import "MGLTileSource_Private.h" -#import "MGLVectorTileSource_Private.h" -#import "MGLRasterTileSource.h" -#import "MGLRasterDEMSource.h" -#import "MGLShapeSource.h" -#import "MGLImageSource.h" - -#import "MGLAttributionInfo_Private.h" -#import "MGLLoggingConfiguration_Private.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#import "NSDate+MGLAdditions.h" - -#if TARGET_OS_IPHONE - #import "UIImage+MGLAdditions.h" -#else - #import "NSImage+MGLAdditions.h" -#endif - -const MGLExceptionName MGLInvalidStyleURLException = @"MGLInvalidStyleURLException"; -const MGLExceptionName MGLRedundantLayerException = @"MGLRedundantLayerException"; -const MGLExceptionName MGLRedundantLayerIdentifierException = @"MGLRedundantLayerIdentifierException"; -const MGLExceptionName MGLRedundantSourceException = @"MGLRedundantSourceException"; -const MGLExceptionName MGLRedundantSourceIdentifierException = @"MGLRedundantSourceIdentifierException"; - -/** - Model class for localization changes. - */ -@interface MGLTextLanguage: NSObject -@property (strong, nonatomic) NSString *originalTextField; -@property (strong, nonatomic) NSString *updatedTextField; - -- (instancetype)initWithTextLanguage:(NSString *)originalTextField updatedTextField:(NSString *)updatedTextField; - -@end - -@implementation MGLTextLanguage -- (instancetype)initWithTextLanguage:(NSString *)originalTextField updatedTextField:(NSString *)updatedTextField -{ - if (self = [super init]) { - _originalTextField = originalTextField; - _updatedTextField = updatedTextField; - } - return self; -} -@end - -@interface MGLStyle() - -@property (nonatomic, readonly, weak) MGLMapView *mapView; -@property (nonatomic, readonly) mbgl::style::Style *rawStyle; -@property (readonly, copy, nullable) NSURL *URL; -@property (nonatomic, readwrite, strong) NSMutableDictionary *openGLLayers; -@property (nonatomic) NSMutableDictionary *> *localizedLayersByIdentifier; - -@end - -@implementation MGLStyle - -#pragma mark Default style URLs - -/// @param name The style’s marketing name, written in lower camelCase. -/// @param fileName The last path component in the style’s URL, excluding the version suffix. -#define MGL_DEFINE_STYLE(name, fileName) \ - static NSURL *MGLStyleURL_##name; \ - + (NSURL *)name##StyleURL { \ - static dispatch_once_t onceToken; \ - dispatch_once(&onceToken, ^{ \ - MGLStyleURL_##name = [self name##StyleURLWithVersion:mbgl::util::default_styles::name.currentVersion]; \ - }); \ - return MGLStyleURL_##name; \ - } \ - \ - + (NSURL *)name##StyleURL##WithVersion:(NSInteger)version { \ - return [NSURL URLWithString:[@"mapbox://styles/mapbox/" #fileName "-v" stringByAppendingFormat:@"%li", (long)version]]; \ - } - -MGL_DEFINE_STYLE(streets, streets) -MGL_DEFINE_STYLE(outdoors, outdoors) -MGL_DEFINE_STYLE(light, light) -MGL_DEFINE_STYLE(dark, dark) -MGL_DEFINE_STYLE(satellite, satellite) -MGL_DEFINE_STYLE(satelliteStreets, satellite-streets) - -// Make sure all the styles listed in mbgl::util::default_styles::orderedStyles -// are defined above and also declared in MGLStyle.h. -static_assert(6 == mbgl::util::default_styles::numOrderedStyles, - "mbgl::util::default_styles::orderedStyles and MGLStyle have different numbers of styles."); - -#pragma mark - - -- (instancetype)initWithRawStyle:(mbgl::style::Style *)rawStyle mapView:(MGLMapView *)mapView { - MGLLogInfo(@"Initializing %@ with mapView: %@", NSStringFromClass([self class]), mapView); - if (self = [super init]) { - _mapView = mapView; - _rawStyle = rawStyle; - _openGLLayers = [NSMutableDictionary dictionary]; - _localizedLayersByIdentifier = [NSMutableDictionary dictionary]; - MGLLogDebug(@"Initializing with style name: %@ mapView: %@", self.name, mapView); - } - return self; -} - -- (NSURL *)URL { - return [NSURL URLWithString:@(self.rawStyle->getURL().c_str())]; -} - -- (NSString *)name { - std::string name = self.rawStyle->getName(); - return name.empty() ? nil : @(name.c_str()); -} - -#pragma mark Sources - -- (NSSet<__kindof MGLSource *> *)sources { - auto rawSources = self.rawStyle->getSources(); - NSMutableSet<__kindof MGLSource *> *sources = [NSMutableSet setWithCapacity:rawSources.size()]; - for (auto rawSource = rawSources.begin(); rawSource != rawSources.end(); ++rawSource) { - MGLSource *source = [self sourceFromMBGLSource:*rawSource]; - [sources addObject:source]; - } - return sources; -} - -- (void)setSources:(NSSet<__kindof MGLSource *> *)sources { - MGLLogDebug(@"Setting: %lu sources", sources.count); - for (MGLSource *source in self.sources) { - [self removeSource:source]; - } - for (MGLSource *source in sources) { - [self addSource:source]; - } -} - -- (NSUInteger)countOfSources { - return self.rawStyle->getSources().size(); -} - -- (MGLSource *)memberOfSources:(MGLSource *)object { - return [self sourceWithIdentifier:object.identifier]; -} - -- (MGLSource *)sourceWithIdentifier:(NSString *)identifier -{ - MGLLogDebug(@"Querying source with identifier: %@", identifier); - auto rawSource = self.rawStyle->getSource(identifier.UTF8String); - - return rawSource ? [self sourceFromMBGLSource:rawSource] : nil; -} - -- (MGLSource *)sourceFromMBGLSource:(mbgl::style::Source *)rawSource { - if (MGLSource *source = rawSource->peer.has_value() ? rawSource->peer.get().source : nil) { - return source; - } - - // TODO: Fill in options specific to the respective source classes - // https://github.com/mapbox/mapbox-gl-native/issues/6584 - if (auto vectorSource = rawSource->as()) { - return [[MGLVectorTileSource alloc] initWithRawSource:vectorSource mapView:self.mapView]; - } else if (auto geoJSONSource = rawSource->as()) { - return [[MGLShapeSource alloc] initWithRawSource:geoJSONSource mapView:self.mapView]; - } else if (auto rasterSource = rawSource->as()) { - return [[MGLRasterTileSource alloc] initWithRawSource:rasterSource mapView:self.mapView]; - } else if (auto rasterDEMSource = rawSource->as()) { - return [[MGLRasterDEMSource alloc] initWithRawSource:rasterDEMSource mapView:self.mapView]; - } else if (auto imageSource = rawSource->as()) { - return [[MGLImageSource alloc] initWithRawSource:imageSource mapView:self.mapView]; - } else { - return [[MGLSource alloc] initWithRawSource:rawSource mapView:self.mapView]; - } -} - -- (void)addSource:(MGLSource *)source -{ - MGLLogDebug(@"Adding source: %@", source); - if (!source.rawSource) { - [NSException raise:NSInvalidArgumentException format: - @"The source %@ cannot be added to the style. " - @"Make sure the source was created as a member of a concrete subclass of MGLSource.", - source]; - } - - try { - [source addToMapView:self.mapView]; - } catch (std::runtime_error & err) { - [NSException raise:MGLRedundantSourceIdentifierException format:@"%s", err.what()]; - } -} - -- (void)removeSource:(MGLSource *)source -{ - [self removeSource:source error:nil]; -} - -- (BOOL)removeSource:(MGLSource *)source error:(NSError * __nullable * __nullable)outError { - MGLLogDebug(@"Removing source: %@", source); - - if (!source.rawSource) { - NSString *errorMessage = [NSString stringWithFormat: - @"The source %@ cannot be removed from the style. " - @"Make sure the source was created as a member of a concrete subclass of MGLSource." - @"Automatic re-addition of sources after style changes is not currently supported.", - source]; - - if (outError) { - *outError = [NSError errorWithDomain:MGLErrorDomain - code:MGLErrorCodeSourceCannotBeRemovedFromStyle - userInfo:@{ NSLocalizedDescriptionKey : errorMessage }]; - return NO; - } - else { - [NSException raise:NSInvalidArgumentException format:@"%@", errorMessage]; - } - } - - return [source removeFromMapView:self.mapView error:outError]; -} - - -- (nullable NSArray *)attributionInfosWithFontSize:(CGFloat)fontSize linkColor:(nullable MGLColor *)linkColor { - // It’d be incredibly convenient to use -sources here, but this operation - // depends on the sources being sorted in ascending order by creation, as - // with the std::vector used in mbgl. - auto rawSources = self.rawStyle->getSources(); - NSMutableArray *infos = [NSMutableArray arrayWithCapacity:rawSources.size()]; - for (auto rawSource = rawSources.begin(); rawSource != rawSources.end(); ++rawSource) { - MGLTileSource *source = (MGLTileSource *)[self sourceFromMBGLSource:*rawSource]; - if (![source isKindOfClass:[MGLTileSource class]]) { - continue; - } - - NSArray *tileSetInfos = [source attributionInfosWithFontSize:fontSize linkColor:linkColor]; - [infos growArrayByAddingAttributionInfosFromArray:tileSetInfos]; - } - return infos; -} - -#pragma mark Style layers - -- (NSArray<__kindof MGLStyleLayer *> *)layers -{ - auto layers = self.rawStyle->getLayers(); - NSMutableArray<__kindof MGLStyleLayer *> *styleLayers = [NSMutableArray arrayWithCapacity:layers.size()]; - for (auto layer : layers) { - MGLStyleLayer *styleLayer = [self layerFromMBGLLayer:layer]; - [styleLayers addObject:styleLayer]; - } - return styleLayers; -} - -- (void)setLayers:(NSArray<__kindof MGLStyleLayer *> *)layers { - MGLLogDebug(@"Setting: %lu layers", layers.count); - for (MGLStyleLayer *layer in self.layers) { - [self removeLayer:layer]; - } - for (MGLStyleLayer *layer in layers) { - [self addLayer:layer]; - } -} - -- (NSUInteger)countOfLayers -{ - return self.rawStyle->getLayers().size(); -} - -- (MGLStyleLayer *)objectInLayersAtIndex:(NSUInteger)index -{ - auto layers = self.rawStyle->getLayers(); - if (index >= layers.size()) { - [NSException raise:NSRangeException - format:@"No style layer at index %lu.", (unsigned long)index]; - return nil; - } - auto layer = layers.at(index); - return [self layerFromMBGLLayer:layer]; -} - -- (void)getLayers:(MGLStyleLayer **)buffer range:(NSRange)inRange -{ - auto layers = self.rawStyle->getLayers(); - if (NSMaxRange(inRange) > layers.size()) { - [NSException raise:NSRangeException - format:@"Style layer range %@ is out of bounds.", NSStringFromRange(inRange)]; - } - NSUInteger i = 0; - for (auto layer = *(layers.rbegin() + inRange.location); i < inRange.length; ++layer, ++i) { - MGLStyleLayer *styleLayer = [self layerFromMBGLLayer:layer]; - buffer[i] = styleLayer; - } -} - -- (void)insertObject:(MGLStyleLayer *)styleLayer inLayersAtIndex:(NSUInteger)index -{ - if (!styleLayer.rawLayer) { - [NSException raise:NSInvalidArgumentException format: - @"The style layer %@ cannot be inserted into the style. " - @"Make sure the style layer was created as a member of a concrete subclass of MGLStyleLayer.", - styleLayer]; - } - auto layers = self.rawStyle->getLayers(); - if (index > layers.size()) { - [NSException raise:NSRangeException - format:@"Cannot insert style layer at out-of-bounds index %lu.", (unsigned long)index]; - } else if (index == 0) { - try { - MGLStyleLayer *sibling = layers.size() ? [self layerFromMBGLLayer:layers.at(0)] : nil; - [styleLayer addToStyle:self belowLayer:sibling]; - } catch (const std::runtime_error & err) { - [NSException raise:MGLRedundantLayerIdentifierException format:@"%s", err.what()]; - } - } else { - try { - MGLStyleLayer *sibling = [self layerFromMBGLLayer:layers.at(index)]; - [styleLayer addToStyle:self belowLayer:sibling]; - } catch (std::runtime_error & err) { - [NSException raise:MGLRedundantLayerIdentifierException format:@"%s", err.what()]; - } - } -} - -- (void)removeObjectFromLayersAtIndex:(NSUInteger)index -{ - auto layers = self.rawStyle->getLayers(); - if (index >= layers.size()) { - [NSException raise:NSRangeException - format:@"Cannot remove style layer at out-of-bounds index %lu.", (unsigned long)index]; - } - auto layer = layers.at(index); - MGLStyleLayer *styleLayer = [self layerFromMBGLLayer:layer]; - [styleLayer removeFromStyle:self]; -} - -- (MGLStyleLayer *)layerFromMBGLLayer:(mbgl::style::Layer *)rawLayer -{ - NSParameterAssert(rawLayer); - - if (MGLStyleLayer *layer = rawLayer->peer.has_value() ? rawLayer->peer.get().layer : nil) { - return layer; - } - - return mbgl::LayerManagerDarwin::get()->createPeer(rawLayer); -} - -- (MGLStyleLayer *)layerWithIdentifier:(NSString *)identifier -{ - MGLLogDebug(@"Querying layerWithIdentifier: %@", identifier); - auto mbglLayer = self.rawStyle->getLayer(identifier.UTF8String); - return mbglLayer ? [self layerFromMBGLLayer:mbglLayer] : nil; -} - -- (void)removeLayer:(MGLStyleLayer *)layer -{ - MGLLogDebug(@"Removing layer: %@", layer); - if (!layer.rawLayer) { - [NSException raise:NSInvalidArgumentException format: - @"The style layer %@ cannot be removed from the style. " - @"Make sure the style layer was created as a member of a concrete subclass of MGLStyleLayer.", - layer]; - } - [self willChangeValueForKey:@"layers"]; - [layer removeFromStyle:self]; - [self didChangeValueForKey:@"layers"]; -} - -- (void)addLayer:(MGLStyleLayer *)layer -{ - MGLLogDebug(@"Adding layer: %@", layer); - if (!layer.rawLayer) { - [NSException raise:NSInvalidArgumentException format: - @"The style layer %@ cannot be added to the style. " - @"Make sure the style layer was created as a member of a concrete subclass of MGLStyleLayer.", - layer]; - } - [self willChangeValueForKey:@"layers"]; - try { - [layer addToStyle:self belowLayer:nil]; - } catch (std::runtime_error & err) { - [NSException raise:MGLRedundantLayerIdentifierException format:@"%s", err.what()]; - } - [self didChangeValueForKey:@"layers"]; -} - -- (void)insertLayer:(MGLStyleLayer *)layer atIndex:(NSUInteger)index { - [self insertObject:layer inLayersAtIndex:index]; -} - -- (void)insertLayer:(MGLStyleLayer *)layer belowLayer:(MGLStyleLayer *)sibling -{ - MGLLogDebug(@"Inseting layer: %@ belowLayer: %@", layer, sibling); - if (!layer.rawLayer) { - [NSException raise:NSInvalidArgumentException - format: - @"The style layer %@ cannot be added to the style. " - @"Make sure the style layer was created as a member of a concrete subclass of MGLStyleLayer.", - layer]; - } - if (!sibling.rawLayer) { - [NSException raise:NSInvalidArgumentException - format: - @"A style layer cannot be placed below %@ in the style. " - @"Make sure sibling was obtained using -[MGLStyle layerWithIdentifier:].", - sibling]; - } - [self willChangeValueForKey:@"layers"]; - try { - [layer addToStyle:self belowLayer:sibling]; - } catch (std::runtime_error & err) { - [NSException raise:MGLRedundantLayerIdentifierException format:@"%s", err.what()]; - } - [self didChangeValueForKey:@"layers"]; -} - -- (void)insertLayer:(MGLStyleLayer *)layer aboveLayer:(MGLStyleLayer *)sibling { - MGLLogDebug(@"Inseting layer: %@ aboveLayer: %@", layer, sibling); - if (!layer.rawLayer) { - [NSException raise:NSInvalidArgumentException - format: - @"The style layer %@ cannot be added to the style. " - @"Make sure the style layer was created as a member of a concrete subclass of MGLStyleLayer.", - layer]; - } - if (!sibling.rawLayer) { - [NSException raise:NSInvalidArgumentException - format: - @"A style layer cannot be placed above %@ in the style. " - @"Make sure sibling was obtained using -[MGLStyle layerWithIdentifier:].", - sibling]; - } - - auto layers = self.rawStyle->getLayers(); - std::string siblingIdentifier = sibling.identifier.UTF8String; - NSUInteger index = 0; - for (auto siblingLayer : layers) { - if (siblingLayer->getID() == siblingIdentifier) { - break; - } - index++; - } - - [self willChangeValueForKey:@"layers"]; - if (index + 1 > layers.size()) { - [NSException raise:NSInvalidArgumentException - format: - @"A style layer cannot be placed above %@ in the style. " - @"Make sure sibling was obtained using -[MGLStyle layerWithIdentifier:].", - sibling]; - } else if (index + 1 == layers.size()) { - try { - [layer addToStyle:self belowLayer:nil]; - } catch (std::runtime_error & err) { - [NSException raise:MGLRedundantLayerIdentifierException format:@"%s", err.what()]; - } - } else { - MGLStyleLayer *nextSibling = [self layerFromMBGLLayer:layers.at(index + 1)]; - try { - [layer addToStyle:self belowLayer:nextSibling]; - } catch (std::runtime_error & err) { - [NSException raise:MGLRedundantLayerIdentifierException format:@"%s", err.what()]; - } - } - [self didChangeValueForKey:@"layers"]; -} - -#pragma mark Style images - -- (void)setImage:(MGLImage *)image forName:(NSString *)name -{ - MGLLogDebug(@"Setting image: %@ forName: %@", image, name); - if (!image) { - [NSException raise:NSInvalidArgumentException - format:@"Cannot assign nil image to “%@”.", name]; - } - if (!name) { - [NSException raise:NSInvalidArgumentException - format:@"Cannot assign image %@ to a nil name.", image]; - } - - self.rawStyle->addImage([image mgl_styleImageWithIdentifier:name]); -} - -- (void)removeImageForName:(NSString *)name -{ - MGLLogDebug(@"Removing imageForName: %@", name); - if (!name) { - [NSException raise:NSInvalidArgumentException - format:@"Cannot remove image with nil name."]; - } - - self.rawStyle->removeImage([name UTF8String]); -} - -- (MGLImage *)imageForName:(NSString *)name -{ - MGLLogDebug(@"Querying imageForName: %@", name); - if (!name) { - [NSException raise:NSInvalidArgumentException - format:@"Cannot get image with nil name."]; - } - - auto styleImage = self.rawStyle->getImage([name UTF8String]); - return styleImage ? [[MGLImage alloc] initWithMGLStyleImage:&(*styleImage)] : nil; -} - -#pragma mark Style transitions - -- (void)setTransition:(MGLTransition)transition -{ - self.rawStyle->setTransitionOptions(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)transition -{ - const mbgl::style::TransitionOptions transitionOptions = self.rawStyle->getTransitionOptions(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setPerformsPlacementTransitions:(BOOL)performsPlacementTransitions -{ - mbgl::style::TransitionOptions transitionOptions = self.rawStyle->getTransitionOptions(); - transitionOptions.enablePlacementTransitions = static_cast(performsPlacementTransitions); - self.rawStyle->setTransitionOptions(transitionOptions); -} - -- (BOOL)performsPlacementTransitions -{ - mbgl::style::TransitionOptions transitionOptions = self.rawStyle->getTransitionOptions(); - return transitionOptions.enablePlacementTransitions; -} - -#pragma mark Style light - -- (void)setLight:(MGLLight *)light -{ - std::unique_ptr mbglLight = std::make_unique([light mbglLight]); - self.rawStyle->setLight(std::move(mbglLight)); -} - -- (MGLLight *)light -{ - auto mbglLight = self.rawStyle->getLight(); - MGLLight *light = [[MGLLight alloc] initWithMBGLLight:mbglLight]; - return light; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; name = %@, URL = %@>", - NSStringFromClass([self class]), (void *)self, - self.name ? [NSString stringWithFormat:@"\"%@\"", self.name] : self.name, - self.URL ? [NSString stringWithFormat:@"\"%@\"", self.URL] : self.URL]; -} - -#pragma mark Mapbox Streets source introspection - -- (void)localizeLabelsIntoLocale:(nullable NSLocale *)locale { - NSSet *streetsSources = - [self.sources filteredSetUsingPredicate: - [NSPredicate predicateWithBlock:^BOOL(MGLVectorTileSource * _Nullable source, NSDictionary * _Nullable bindings) { - return [source isKindOfClass:[MGLVectorTileSource class]] && [source isMapboxStreets]; - }]]; - NSSet *streetsSourceIdentifiers = [streetsSources valueForKey:@"identifier"]; - - for (MGLSymbolStyleLayer *layer in self.layers) { - if (![layer isKindOfClass:[MGLSymbolStyleLayer class]]) { - continue; - } - if (![streetsSourceIdentifiers containsObject:layer.sourceIdentifier]) { - continue; - } - - NSExpression *text = layer.text; - NSExpression *localizedText = [text mgl_expressionLocalizedIntoLocale:locale]; - if (![localizedText isEqual:text]) { - layer.text = localizedText; - } - } -} - -- (NSSet *)mapboxStreetsSources { - return [self.sources objectsPassingTest:^BOOL (__kindof MGLVectorTileSource * _Nonnull source, BOOL * _Nonnull stop) { - return [source isKindOfClass:[MGLVectorTileSource class]] && source.mapboxStreets; - }]; -} - -- (NSArray *)placeStyleLayers { - NSSet *streetsSourceIdentifiers = [self.mapboxStreetsSources valueForKey:@"identifier"]; - - NSSet *placeSourceLayerIdentifiers = [NSSet setWithObjects:@"marine_label", @"country_label", @"state_label", @"place_label", @"water_label", @"poi_label", @"rail_station_label", @"mountain_peak_label", @"natural_label", @"transit_stop_label", nil]; - NSPredicate *isPlacePredicate = [NSPredicate predicateWithBlock:^BOOL (MGLVectorStyleLayer * _Nullable layer, NSDictionary * _Nullable bindings) { - return [layer isKindOfClass:[MGLVectorStyleLayer class]] && [streetsSourceIdentifiers containsObject:layer.sourceIdentifier] && [placeSourceLayerIdentifiers containsObject:layer.sourceLayerIdentifier]; - }]; - return [self.layers filteredArrayUsingPredicate:isPlacePredicate]; -} - -- (NSArray *)roadStyleLayers { - NSSet *streetsSourceIdentifiers = [self.mapboxStreetsSources valueForKey:@"identifier"]; - - NSSet *roadStyleLayerIdentifiers = [NSSet setWithObjects:@"road_label", @"road", nil]; - NSPredicate *isPlacePredicate = [NSPredicate predicateWithBlock:^BOOL (MGLVectorStyleLayer * _Nullable layer, NSDictionary * _Nullable bindings) { - return [layer isKindOfClass:[MGLVectorStyleLayer class]] && [streetsSourceIdentifiers containsObject:layer.sourceIdentifier] && [roadStyleLayerIdentifiers containsObject:layer.sourceLayerIdentifier]; - }]; - return [self.layers filteredArrayUsingPredicate:isPlacePredicate]; -} - -@end diff --git a/platform/darwin/src/MGLStyleLayer.h b/platform/darwin/src/MGLStyleLayer.h deleted file mode 100644 index 785a8db7b32..00000000000 --- a/platform/darwin/src/MGLStyleLayer.h +++ /dev/null @@ -1,66 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLInvalidStyleLayerException; - -/** - `MGLStyleLayer` is an abstract base class for style layers. A style layer - manages the layout and appearance of content at a specific z-index in a style. - An `MGLStyle` object consists of one or more `MGLStyleLayer` objects. - - Each style layer defined by the style JSON file is represented at runtime by an - `MGLStyleLayer` object, which you can use to refine the map’s appearance. You - can also add and remove style layers dynamically. - - Create instances of `MGLBackgroundStyleLayer` and the concrete subclasses of - `MGLForegroundStyleLayer` in order to use `MGLStyleLayer`'s properties and methods. - You do not create instances of `MGLStyleLayer` directly, and do not - create your own subclasses of this class. - - Do not add `MGLStyleLayer` objects to the `style` property of a `MGLMapView` before - `-mapView:didFinishLoadingStyle:` is called. - */ -MGL_EXPORT -@interface MGLStyleLayer : NSObject - -#pragma mark Initializing a Style Layer - -- (instancetype)init __attribute__((unavailable("Use -init methods of concrete subclasses instead."))); - -#pragma mark Identifying a Style Layer - -/** - A string that uniquely identifies the style layer in the style to which it is - added. - */ -@property (nonatomic, copy, readonly) NSString *identifier; - -#pragma mark Configuring a Style Layer’s Visibility - -/** - Whether this layer is displayed. A value of `NO` hides the layer. - - #### Related examples - See the - Show and hide a layer example to learn how to toggle an `MGLStyleLayer` - object's visibility. - */ -@property (nonatomic, assign, getter=isVisible) BOOL visible; - -/** - The maximum zoom level at which the layer gets parsed and appears. This value is a floating-point number. - */ -@property (nonatomic, assign) float maximumZoomLevel; - -/** - The minimum zoom level at which the layer gets parsed and appears. This value is a floating-point number. - */ -@property (nonatomic, assign) float minimumZoomLevel; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLStyleLayer.h.ejs b/platform/darwin/src/MGLStyleLayer.h.ejs deleted file mode 100644 index 91ba813b179..00000000000 --- a/platform/darwin/src/MGLStyleLayer.h.ejs +++ /dev/null @@ -1,199 +0,0 @@ -<% - const doc = locals.doc; - const type = locals.type; - const examples = locals.examples; - const layoutProperties = locals.layoutProperties; - const paintProperties = locals.paintProperties; - const enumProperties = locals.enumProperties; --%> -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLFoundation.h" -#import "MGL<%- -(type === 'background' ? '' : - (type === 'raster' || type === 'hillshade' ? 'Foreground' : - 'Vector')) -%>StyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -<% for (const property of layoutProperties) { -%> -<% if (definesEnum(property, layoutProperties)) { -%> -/** -<%- propertyDoc(enumName(property), property, type, 'enum').wrap(80, 1) %> - - Values of this type are used in the `MGL<%- camelize(type) %>StyleLayer.<%- camelizeWithLeadingLowercase(property.name) %>` - property. - */ -typedef NS_ENUM(NSUInteger, MGL<%- camelize(enumName(property)) %>) { -<% for (const value in property.values) { -%> - /** -<%- propertyDoc(enumName(property), property.values[value], type, 'enum').wrap(80, 4+1) %> - */ - MGL<%- camelize(enumName(property)) %><%- camelize(value) %>, -<% } -%> -}; - -<% } -%> -<% } -%> -<% for (const property of paintProperties) { -%> -<% if (definesEnum(property, paintProperties)) { -%> -/** -<%- propertyDoc(enumName(property), property, type, 'enum').wrap(80, 1) %> - - Values of this type are used in the `MGL<%- camelize(type) %>StyleLayer.<%- camelizeWithLeadingLowercase(enumName(property)) %>` - property. - */ -typedef NS_ENUM(NSUInteger, MGL<%- camelize(enumName(property)) %>) { -<% for (const value in property.values) { -%> - /** -<%- propertyDoc(enumName(property), property.values[value], type, 'enum').wrap(80, 4+1) %> - */ - MGL<%- camelize(enumName(property)) %><%- camelize(value) %>, -<% } -%> -}; - -<% } -%> -<% } -%> -<% if (type == 'background') { -%> -/** -<%- doc.wrap(80, 1) %> - */ -<% } else { -%> -/** -<%- doc.wrap(80, 1) %> - - You can access an existing <%- type %> style layer using the - `-[MGLStyle layerWithIdentifier:]` method if you know its identifier; - otherwise, find it using the `MGLStyle.layers` property. You can also create a - new <%- type %> style layer and add it to the style using a method such as - `-[MGLStyle addLayer:]`. -<% if (examples) { -%> - - #### Related examples -<%- examples.wrap(80, 1) %> -<% } -%> - - ### Example - - ```swift - ``` - */ -<% } -%> -MGL_EXPORT -@interface MGL<%- camelize(type) %>StyleLayer : MGL<%- -(type === 'background' ? '' : - (type === 'raster' || type === 'hillshade' ? 'Foreground' : - 'Vector')) -%>StyleLayer -<% if (type === 'background') { -%> - -/** -Returns a <%- type %> style layer initialized with an identifier. - -After initializing and configuring the style layer, add it to a map view’s -style using the `-[MGLStyle addLayer:]` or -`-[MGLStyle insertLayer:belowLayer:]` method. - -@param identifier A string that uniquely identifies the source in the style to -which it is added. -*/ -- (instancetype)initWithIdentifier:(NSString *)identifier; -<% } else { -%> - -/** - Returns a <%- type %> style layer initialized with an identifier and source. - - After initializing and configuring the style layer, add it to a map view’s - style using the `-[MGLStyle addLayer:]` or - `-[MGLStyle insertLayer:belowLayer:]` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param source The source from which to obtain the data to style. If the source - has not yet been added to the current style, the behavior is undefined. - @return An initialized foreground style layer. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source; -<% } -%> - -<% if (layoutProperties.length) { -%> -#pragma mark - Accessing the Layout Attributes - -<% for (const property of layoutProperties) { -%> -/** -<%- propertyDoc(property.name, property, type, 'layout').wrap(80, 1) %> -<% if (property.examples) { -%> - - #### Related examples -<%- propertyExample(property).wrap(80, 1) %> -<% } -%> - */ -@property (nonatomic<% if (!property.required) { %>, null_resettable<% } if (property.getter) { %>, getter=<%- objCGetter(property) -%><% } %>) NSExpression *<%- camelizeWithLeadingLowercase(property.name) %>; - -<% if (property.original) { %> -@property (nonatomic<% if (!property.required) { %>, null_resettable<% } %>) NSExpression *<%- camelizeWithLeadingLowercase(originalPropertyName(property)) %> __attribute__((unavailable("Use <%- camelizeWithLeadingLowercase(property.name) %> instead."))); - -<% } -%> -<% } -%> -<% } -%> -<% if (paintProperties.length) { -%> -#pragma mark - Accessing the Paint Attributes - -<% for (const property of paintProperties) { -%> -/** -<%- propertyDoc(property.name, property, type, 'paint').wrap(80, 1) %> -<% if (property.examples) { -%> - - #### Related examples -<%- propertyExample(property).wrap(80, 1) %> -<% } -%> - */ -@property (nonatomic<% if (!property.required) { %>, null_resettable<% } if (property.getter) { %>, getter=<%- objCGetter(property) -%><% } %>) NSExpression *<%- camelizeWithLeadingLowercase(property.name) %>; - -<% if (property["transition"]) { -%> -/** - The transition affecting any changes to this layer’s `<%- camelizeWithLeadingLowercase(property.name) %>` property. - - This property corresponds to the `<%- originalPropertyName(property) %>-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition <%- camelizeWithLeadingLowercase(property.name) %>Transition; - -<% } -%> -<% if (property.original) { -%> -@property (nonatomic<% if (!property.required) { %>, null_resettable<% } %>) NSExpression *<%- camelizeWithLeadingLowercase(originalPropertyName(property)) %> __attribute__((unavailable("Use <%- camelizeWithLeadingLowercase(property.name) %> instead."))); - -<% } -%> -<% } -%> -<% } -%> -@end - -<% if (enumProperties) { -%> -/** - Methods for wrapping an enumeration value for a style layer attribute in an - `MGL<%- camelize(type) %>StyleLayer` object and unwrapping its raw value. - */ -@interface NSValue (MGL<%- camelize(type) %>StyleLayerAdditions) - -#pragma mark Working with <%- camelize(unhyphenate(type)) %> Style Layer Attribute Values - -<% for (let property of enumProperties) { -%> -/** - Creates a new value object containing the given `MGL<%- camelize(enumName(property)) %>` enumeration. - - @param <%- objCName(property) %> The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGL<%- camelize(enumName(property)) %>:(MGL<%- camelize(enumName(property)) %>)<%- objCName(property) %>; - -/** - The `MGL<%- camelize(enumName(property)) %>` enumeration representation of the value. - */ -@property (readonly) MGL<%- camelize(enumName(property)) %> MGL<%- camelize(enumName(property)) %>Value; - -<% } -%> -@end - -<% } -%> -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLStyleLayer.mm b/platform/darwin/src/MGLStyleLayer.mm deleted file mode 100644 index 7847cbb3190..00000000000 --- a/platform/darwin/src/MGLStyleLayer.mm +++ /dev/null @@ -1,123 +0,0 @@ -#import "MGLStyleLayer_Private.h" -#import "MGLStyle_Private.h" - -#include -#include - -const MGLExceptionName MGLInvalidStyleLayerException = @"MGLInvalidStyleLayerException"; - -@interface MGLStyleLayer () - -@property (nonatomic, readonly) mbgl::style::Layer *rawLayer; - -@end - -@implementation MGLStyleLayer { - std::unique_ptr _pendingLayer; - mapbox::base::WeakPtr _weakLayer; -} - -- (instancetype)initWithRawLayer:(mbgl::style::Layer *)rawLayer { - if (self = [super init]) { - _identifier = @(rawLayer->getID().c_str()); - _weakLayer = rawLayer->makeWeakPtr(); - rawLayer->peer = LayerWrapper { self }; - } - return self; -} - -- (instancetype)initWithPendingLayer:(std::unique_ptr)pendingLayer { - if (self = [self initWithRawLayer:pendingLayer.get()]) { - _pendingLayer = std::move(pendingLayer); - } - return self; -} - -- (mbgl::style::Layer *)rawLayer -{ - return _weakLayer.get(); -} - -- (void)addToStyle:(MGLStyle *)style belowLayer:(MGLStyleLayer *)otherLayer -{ - if (_pendingLayer == nullptr) { - [NSException raise:MGLRedundantLayerException - format:@"This instance %@ was already added to %@. Adding the same layer instance " \ - "to the style more than once is invalid.", self, style]; - } - - if (otherLayer) { - const mbgl::optional belowLayerId{otherLayer.identifier.UTF8String}; - style.rawStyle->addLayer(std::move(_pendingLayer), belowLayerId); - } else { - style.rawStyle->addLayer(std::move(_pendingLayer)); - } -} - -- (void)removeFromStyle:(MGLStyle *)style -{ - if (self.rawLayer == style.rawStyle->getLayer(self.identifier.UTF8String)) { - _pendingLayer = style.rawStyle->removeLayer(self.identifier.UTF8String); - } -} - -- (void)setVisible:(BOOL)visible -{ - MGLAssertStyleLayerIsValid(); - - mbgl::style::VisibilityType v = visible - ? mbgl::style::VisibilityType::Visible - : mbgl::style::VisibilityType::None; - self.rawLayer->setVisibility(v); -} - -- (BOOL)isVisible -{ - MGLAssertStyleLayerIsValid(); - - mbgl::style::VisibilityType v = self.rawLayer->getVisibility(); - return (v == mbgl::style::VisibilityType::Visible); -} - -- (void)setMaximumZoomLevel:(float)maximumZoomLevel -{ - MGLAssertStyleLayerIsValid(); - - self.rawLayer->setMaxZoom(maximumZoomLevel); -} - -- (float)maximumZoomLevel -{ - MGLAssertStyleLayerIsValid(); - - return self.rawLayer->getMaxZoom(); -} - -- (void)setMinimumZoomLevel:(float)minimumZoomLevel -{ - MGLAssertStyleLayerIsValid(); - - self.rawLayer->setMinZoom(minimumZoomLevel); -} - -- (float)minimumZoomLevel -{ - MGLAssertStyleLayerIsValid(); - - return self.rawLayer->getMinZoom(); -} - -- (NSString *)description -{ - if (self.rawLayer) { - return [NSString stringWithFormat:@"<%@: %p; identifier = %@; visible = %@>", - NSStringFromClass([self class]), (void *)self, self.identifier, - self.visible ? @"YES" : @"NO"]; - } - else { - return [NSString stringWithFormat:@"<%@: %p; identifier = %@; visible = NO>", - NSStringFromClass([self class]), (void *)self, self.identifier]; - } -} - -@end diff --git a/platform/darwin/src/MGLStyleLayer.mm.ejs b/platform/darwin/src/MGLStyleLayer.mm.ejs deleted file mode 100644 index 5664f7fd454..00000000000 --- a/platform/darwin/src/MGLStyleLayer.mm.ejs +++ /dev/null @@ -1,265 +0,0 @@ -<% - const type = locals.type; - const layoutProperties = locals.layoutProperties; - const paintProperties = locals.paintProperties; - const enumProperties = locals.enumProperties; --%> -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLSource.h" -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLStyleLayer_Private.h" -#import "MGLStyleValue_Private.h" -#import "MGL<%- camelize(type) %>StyleLayer.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGL<%- camelize(type) %>StyleLayer_Private.h" - -#include _layer.hpp> -#include - -<% if (enumProperties) { -%> - -namespace mbgl { - -<% if (layoutProperties.length) { -%> -<% for (const property of layoutProperties) { -%> -<% if (definesEnum(property, layoutProperties)) { -%> - MBGL_DEFINE_ENUM(MGL<%- camelize(enumName(property)) %>, { -<% for (const value in property.values) { -%> - { MGL<%- camelize(enumName(property)) %><%- camelize(value) %>, "<%-value%>" }, -<% } -%> - }); - -<% } -%> -<% } -%> -<% } -%> -<% if (paintProperties.length) { -%> -<% for (const property of paintProperties) { -%> -<% if (definesEnum(property, paintProperties)) { -%> - MBGL_DEFINE_ENUM(MGL<%- camelize(enumName(property)) %>, { -<% for (const value in property.values) { -%> - { MGL<%- camelize(enumName(property)) %><%- camelize(value) %>, "<%-value%>" }, -<% } -%> - }); - -<% } -%> -<% } -%> -<% } -%> -} -<% } -%> - -@interface MGL<%- camelize(type) %>StyleLayer () - -@property (nonatomic, readonly) mbgl::style::<%- camelize(type) %>Layer *rawLayer; - -@end - -@implementation MGL<%- camelize(type) %>StyleLayer - -<% if (type == 'background') { -%> -- (instancetype)initWithIdentifier:(NSString *)identifier -{ - MGLLogDebug(@"Initializing %@ with identifier: %@", NSStringFromClass([self class]), identifier); - auto layer = std::make_uniqueLayer>(identifier.UTF8String); - return self = [super initWithPendingLayer:std::move(layer)]; -} - -<% } else { -%> -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source -{ - MGLLogDebug(@"Initializing %@ with identifier: %@ source: %@", NSStringFromClass([self class]), identifier, source); - auto layer = std::make_uniqueLayer>(identifier.UTF8String, source.identifier.UTF8String); - return self = [super initWithPendingLayer:std::move(layer)]; -} - -<% } -%> -- (mbgl::style::<%- camelize(type) %>Layer *)rawLayer -{ - return (mbgl::style::<%- camelize(type) %>Layer *)super.rawLayer; -} - -<% if (type !== 'background') { -%> -- (NSString *)sourceIdentifier -{ - MGLAssertStyleLayerIsValid(); - - return @(self.rawLayer->getSourceID().c_str()); -} - -<% if (type !== 'raster' && type !== 'hillshade') { -%> -- (NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - - auto layerID = self.rawLayer->getSourceLayer(); - return layerID.empty() ? nil : @(layerID.c_str()); -} - -- (void)setSourceLayerIdentifier:(NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting sourceLayerIdentifier: %@", sourceLayerIdentifier); - - self.rawLayer->setSourceLayer(sourceLayerIdentifier.UTF8String ?: ""); -} - -- (void)setPredicate:(NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting predicate: %@", predicate); - - self.rawLayer->setFilter(predicate ? predicate.mgl_filter : mbgl::style::Filter()); -} - -- (NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - - return [NSPredicate mgl_predicateWithFilter:self.rawLayer->getFilter()]; -} - -<% }} -%> -<% if (layoutProperties.length) { -%> -#pragma mark - Accessing the Layout Attributes - -<% for (const property of layoutProperties) { -%> -- (void)set<%- camelize(property.name) %>:(NSExpression *)<%- objCName(property) %> { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting <%- objCName(property) %>: %@", <%- objCName(property) %>); - -<% if (property.tokens) { -%> - if (<%- objCName(property) %> && <%- objCName(property) %>.expressionType == NSConstantValueExpressionType) { - std::string string = ((NSString *)<%- objCName(property) %>.constantValue).UTF8String; - if (mbgl::style::conversion::hasTokens(string)) { -<% if (property.type === 'formatted') { -%> - self.rawLayer->set<%- camelize(originalPropertyName(property)) %>(mbgl::style::PropertyValue( - mbgl::style::conversion::convertTokenStringToFormatExpression(string))); -<% } else if (property.type === 'resolvedImage') { -%> - self.rawLayer->set<%- camelize(originalPropertyName(property)) %>(mbgl::style::PropertyValue( - mbgl::style::conversion::convertTokenStringToImageExpression(string))); -<% } else { -%> - self.rawLayer->set<%- camelize(originalPropertyName(property)) %>(mbgl::style::PropertyValue( - mbgl::style::conversion::convertTokenStringToExpression(string))); -<% } -%> - return; - } - } -<% } -%> -<% if (isDataDriven(property)) { -%> - auto mbglValue = MGLStyleValueTransformer<<%- valueTransformerArguments(property).join(', ') %>>().toPropertyValue>>(<%- objCName(property) %>, true); -<% } else { -%> - auto mbglValue = MGLStyleValueTransformer<<%- valueTransformerArguments(property).join(', ') %>>().toPropertyValue>>(<%- objCName(property) %>, false); -<% } -%> - self.rawLayer->set<%- camelize(originalPropertyName(property)) %>(mbglValue); -} - -- (NSExpression *)<%- objCGetter(property) %> { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->get<%- camelize(originalPropertyName(property)) %>(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefault<%- camelize(originalPropertyName(property)) %>(); - } - return MGLStyleValueTransformer<<%- valueTransformerArguments(property).join(', ') %>>().toExpression(propertyValue); -} - -<% if (property.original) { -%> -- (void)set<%- camelize(originalPropertyName(property)) %>:(NSExpression *)<%- camelizeWithLeadingLowercase(originalPropertyName(property)) %> { -} - -- (NSExpression *)<%- camelizeWithLeadingLowercase(originalPropertyName(property)) %> { - return self.<%- objCGetter(property) %>; -} - -<% } -%> -<% } -%> -<% } -%> -<% if (paintProperties.length) { -%> -#pragma mark - Accessing the Paint Attributes -<% for (const property of paintProperties) { -%> - -- (void)set<%- camelize(property.name) %>:(NSExpression *)<%- objCName(property) %> { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting <%- objCName(property) %>: %@", <%- objCName(property) %>); - -<% switch (property['property-type']) { - case 'color-ramp': -%> - auto mbglValue = MGLStyleValueTransformer().toPropertyValue(<%- objCName(property) %>); -<% break - case 'data-driven': - case 'cross-faded-data-driven': -%> - auto mbglValue = MGLStyleValueTransformer<<%- valueTransformerArguments(property).join(', ') %>>().toPropertyValue>>(<%- objCName(property) %>, true); -<% break - default: -%> - auto mbglValue = MGLStyleValueTransformer<<%- valueTransformerArguments(property).join(', ') %>>().toPropertyValue>>(<%- objCName(property) %>, false); -<% } -%> - self.rawLayer->set<%- camelize(originalPropertyName(property)) %>(mbglValue); -} - -- (NSExpression *)<%- objCGetter(property) %> { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->get<%- camelize(originalPropertyName(property)) %>(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefault<%- camelize(originalPropertyName(property)) %>(); - } - return MGLStyleValueTransformer<<%- valueTransformerArguments(property).join(', ') %>>().toExpression(propertyValue); -} -<% if (property["transition"]) { -%> - -- (void)set<%- camelize(property.name) %>Transition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting <%- objCName(property) %>Transition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->set<%- camelize(originalPropertyName(property)) %>Transition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)<%- objCGetter(property) %>Transition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->get<%- camelize(originalPropertyName(property)) %>Transition(); - - return MGLTransitionFromOptions(transitionOptions); -} -<% } -%> -<% if (property.original) { -%> - -- (void)set<%- camelize(originalPropertyName(property)) %>:(NSExpression *)<%- camelizeWithLeadingLowercase(originalPropertyName(property)) %> { -} - -- (NSExpression *)<%- camelizeWithLeadingLowercase(originalPropertyName(property)) %> { - return self.<%- objCGetter(property) %>; -} -<% } -%> -<% } -%> -<% } -%> - -@end -<% if (enumProperties) { -%> - -@implementation NSValue (MGL<%- camelize(type) %>StyleLayerAdditions) - -<% for (let property of enumProperties) { -%> -+ (NSValue *)valueWithMGL<%- camelize(enumName(property)) %>:(MGL<%- camelize(enumName(property)) %>)<%- objCName(property) %> { - return [NSValue value:&<%- objCName(property) %> withObjCType:@encode(MGL<%- camelize(enumName(property)) %>)]; -} - -- (MGL<%- camelize(enumName(property)) %>)MGL<%- camelize(enumName(property)) %>Value { - MGL<%- camelize(enumName(property)) %> <%- objCName(property) %>; - [self getValue:&<%- objCName(property) %>]; - return <%- objCName(property) %>; -} - -<% } -%> -@end -<% } -%> - -namespace mbgl { - -MGLStyleLayer* <%- camelize(type) %>StyleLayerPeerFactory::createPeer(style::Layer* rawLayer) { - return [[MGL<%- camelize(type) %>StyleLayer alloc] initWithRawLayer:rawLayer]; -} - -} // namespace mbgl diff --git a/platform/darwin/src/MGLStyleLayerManager.h b/platform/darwin/src/MGLStyleLayerManager.h deleted file mode 100644 index 95fecd0252b..00000000000 --- a/platform/darwin/src/MGLStyleLayerManager.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once - -#import "MGLStyleLayer_Private.h" - -#include -#include - -#include -#include -#include - -namespace mbgl { - -class LayerManagerDarwin : public LayerManager { -public: - static LayerManagerDarwin* get() noexcept; - ~LayerManagerDarwin(); - - MGLStyleLayer* createPeer(style::Layer*); - -private: - LayerManagerDarwin(); - /** - * Enables a layer type for both JSON style and runtime API. - */ - void addLayerType(std::unique_ptr); - /** - * Enables a layer type for JSON style only. - * - * We might not want to expose runtime API for some layer types - * in order to save binary size (the corresponding SDK layer wrappers - * should be excluded from the project build). - */ - void addLayerTypeCoreOnly(std::unique_ptr); - - void registerCoreFactory(LayerFactory*); - LayerPeerFactory* getPeerFactory(const style::LayerTypeInfo* typeInfo); - // mbgl::LayerManager overrides. - LayerFactory* getFactory(const std::string& type) noexcept final; - LayerFactory* getFactory(const mbgl::style::LayerTypeInfo* info) noexcept final; - - std::vector> peerFactories; - std::vector> coreFactories; - std::map typeToFactory; -}; - -} // namespace mbgl diff --git a/platform/darwin/src/MGLStyleLayerManager.mm b/platform/darwin/src/MGLStyleLayerManager.mm deleted file mode 100644 index 72673d4c235..00000000000 --- a/platform/darwin/src/MGLStyleLayerManager.mm +++ /dev/null @@ -1,147 +0,0 @@ -#import "MGLStyleLayerManager.h" - -#import "MGLBackgroundStyleLayer_Private.h" -#import "MGLCircleStyleLayer_Private.h" -#import "MGLFillExtrusionStyleLayer_Private.h" -#import "MGLFillStyleLayer_Private.h" -#import "MGLHeatmapStyleLayer_Private.h" -#import "MGLHillshadeStyleLayer_Private.h" -#import "MGLLineStyleLayer_Private.h" -#import "MGLRasterStyleLayer_Private.h" -#import "MGLSymbolStyleLayer_Private.h" -#import "MGLOpenGLStyleLayer_Private.h" - -#include - -namespace mbgl { - -LayerManagerDarwin::LayerManagerDarwin() { -#if defined(MBGL_LAYER_FILL_DISABLE_RUNTIME) - addLayerTypeCoreOnly(std::make_unique()); -#elif !defined(MBGL_LAYER_FILL_DISABLE_ALL) - addLayerType(std::make_unique()); -#endif -#if defined(MBGL_LAYER_LINE_DISABLE_RUNTIME) - addLayerTypeCoreOnly(std::make_unique()); -#elif !defined(MBGL_LAYER_LINE_DISABLE_ALL) - addLayerType(std::make_unique()); -#endif -#if defined(MBGL_LAYER_CIRCLE_DISABLE_RUNTIME) - addLayerTypeCoreOnly(std::make_unique()); -#elif !defined(MBGL_LAYER_CIRCLE_DISABLE_ALL) - addLayerType(std::make_unique()); -#endif -#if defined(MBGL_LAYER_SYMBOL_DISABLE_RUNTIME) - addLayerTypeCoreOnly(std::make_unique()); -#elif !defined(MBGL_LAYER_SYMBOL_DISABLE_ALL) - addLayerType(std::make_unique()); -#endif -#if defined(MBGL_LAYER_RASTER_DISABLE_RUNTIME) - addLayerTypeCoreOnly(std::make_unique()); -#elif !defined(MBGL_LAYER_RASTER_DISABLE_ALL) - addLayerType(std::make_unique()); -#endif -#if defined(MBGL_LAYER_BACKGROUND_DISABLE_RUNTIME) - addLayerTypeCoreOnly(std::make_unique()); -#elif !defined(MBGL_LAYER_BACKGROUND_DISABLE_ALL) - addLayerType(std::make_unique()); -#endif -#if defined(MBGL_LAYER_HILLSHADE_DISABLE_RUNTIME) - addLayerTypeCoreOnly(std::make_unique()); -#elif !defined(MBGL_LAYER_HILLSHADE_DISABLE_ALL) - addLayerType(std::make_unique()); -#endif -#if defined(MBGL_LAYER_FILL_EXTRUSION_DISABLE_RUNTIME) - addLayerTypeCoreOnly(std::make_unique()); -#elif !defined(MBGL_LAYER_FILL_EXTRUSION_DISABLE_ALL) - addLayerType(std::make_unique()); -#endif -#if defined(MBGL_LAYER_HEATMAP_DISABLE_RUNTIME) - addLayerTypeCoreOnly(std::make_unique()); -#elif !defined(MBGL_LAYER_HEATMAP_DISABLE_ALL) - addLayerType(std::make_unique()); -#endif -#if defined(MBGL_LAYER_CUSTOM_DISABLE_RUNTIME) - addLayerTypeCoreOnly(std::make_unique()); -#elif !defined(MBGL_LAYER_CUSTOM_DISABLE_ALL) - addLayerType(std::make_unique()); -#endif -} - -LayerManagerDarwin::~LayerManagerDarwin() = default; - -MGLStyleLayer* LayerManagerDarwin::createPeer(style::Layer* layer) { - if (auto* factory = getPeerFactory(layer->getTypeInfo())) { - return factory->createPeer(layer); - } - return nullptr; -} - -void LayerManagerDarwin::addLayerType(std::unique_ptr factory) { - NSCAssert(getFactory(factory->getCoreLayerFactory()->getTypeInfo()) == nullptr, - @"A layer factory with the given info is already added."); - registerCoreFactory(factory->getCoreLayerFactory()); - peerFactories.emplace_back(std::move(factory)); -} - -void LayerManagerDarwin::addLayerTypeCoreOnly(std::unique_ptr factory) { - NSCAssert(getFactory(factory->getTypeInfo()) == nullptr, - @"A layer factory with the given info is already added."); - registerCoreFactory(factory.get()); - coreFactories.emplace_back(std::move(factory)); -} - -void LayerManagerDarwin::registerCoreFactory(LayerFactory* factory) { - std::string type{factory->getTypeInfo()->type}; - if (!type.empty()) { - NSCAssert(typeToFactory.find(type) == typeToFactory.end(), @"A layer type can be registered only once."); - typeToFactory.emplace(std::make_pair(std::move(type), factory)); - } -} - -LayerPeerFactory* LayerManagerDarwin::getPeerFactory(const mbgl::style::LayerTypeInfo* typeInfo) { - for (const auto& factory: peerFactories) { - if (factory->getCoreLayerFactory()->getTypeInfo() == typeInfo) { - return factory.get(); - } - } - return nullptr; -} - -LayerFactory* LayerManagerDarwin::getFactory(const std::string& type) noexcept { - auto search = typeToFactory.find(type); - return (search != typeToFactory.end()) ? search->second : nullptr; -} - -LayerFactory* LayerManagerDarwin::getFactory(const mbgl::style::LayerTypeInfo* info) noexcept { - if (LayerPeerFactory* peerFactory = getPeerFactory(info)) { - return peerFactory->getCoreLayerFactory(); - } - - for (const auto& factory: coreFactories) { - if (factory->getTypeInfo() == info) { - return factory.get(); - } - } - - return nullptr; -} - -// static -LayerManagerDarwin* LayerManagerDarwin::get() noexcept { - static LayerManagerDarwin impl; - return &impl; -} - -// static -LayerManager* LayerManager::get() noexcept { - return LayerManagerDarwin::get(); -} - -#if defined(MBGL_LAYER_LINE_DISABLE_ALL) || defined(MBGL_LAYER_SYMBOL_DISABLE_ALL) || defined(MBGL_LAYER_FILL_DISABLE_ALL) -const bool LayerManager::annotationsEnabled = false; -#else -const bool LayerManager::annotationsEnabled = true; -#endif - -} // namespace mbgl diff --git a/platform/darwin/src/MGLStyleLayer_Private.h b/platform/darwin/src/MGLStyleLayer_Private.h deleted file mode 100644 index 52254f78c60..00000000000 --- a/platform/darwin/src/MGLStyleLayer_Private.h +++ /dev/null @@ -1,104 +0,0 @@ -#import - -#import "MGLStyleLayer.h" -#import "MGLStyleValue_Private.h" - -#include -#include - -NS_ASSUME_NONNULL_BEGIN - -// A struct to be stored in the `peer` member of mbgl::style::Layer, in order to implement -// object identity. We don't store a MGLStyleLayer pointer directly because that doesn't -// interoperate with ARC. The inner pointer is weak in order to avoid a reference cycle for -// "pending" MGLStyleLayers, which have a strong owning pointer to the mbgl::style::Layer. -struct LayerWrapper { - __weak MGLStyleLayer *layer; -}; - -/** - Assert that the style layer is valid. - - This macro should be used at the beginning of any public-facing instance method - of `MGLStyleLayer` and its subclasses. For private methods, an assertion is more appropriate. - */ -#define MGLAssertStyleLayerIsValid() \ - do { \ - if (!self.rawLayer) { \ - [NSException raise:MGLInvalidStyleLayerException \ - format: \ - @"Either this layer got invalidated after the style change or " \ - @"-[MGLStyle removeLayer:] has been called " \ - @"with this instance but another style layer instance was added with the same identifer. It is an " \ - @"error to send any message to this layer since it cannot be recovered after removal due to the " \ - @"identifier collision. Use unique identifiers for all layer instances including layers of " \ - @"different types."]; \ - } \ - } while (NO); - -@class MGLStyle; - -@interface MGLStyleLayer (Private) - -/** - Initializes and returns a layer with a raw pointer to the backing store, - associated with a style. - */ -- (instancetype)initWithRawLayer:(mbgl::style::Layer *)rawLayer; - -/** - Initializes and returns a layer with an owning pointer to the backing store, - unassociated from a style. - */ -- (instancetype)initWithPendingLayer:(std::unique_ptr)pendingLayer; - -@property (nonatomic, readwrite, copy) NSString *identifier; - -/** - A raw pointer to the mbgl object, which is always initialized, either to the - value returned by `mbgl::Map getLayer`, or for independently created objects, - to the pointer value held in `pendingLayer`. In the latter case, this raw - pointer value stays even after ownership of the object is transferred via - `mbgl::Map addLayer`. - */ -@property (nonatomic, readonly) mbgl::style::Layer *rawLayer; - -/** - Adds the mbgl style layer that this object represents to the mbgl map below the - specified `otherLayer`. - - Once a mbgl style layer is added, ownership of the object is transferred to the - `mbgl::Map` and this object no longer has an active unique_ptr reference to the - `mbgl::style::Layer`. - */ -- (void)addToStyle:(MGLStyle *)style belowLayer:(nullable MGLStyleLayer *)otherLayer; - -/** - Removes the mbgl style layer that this object represents from the mbgl map. - - When a mbgl style layer is removed, ownership of the object is transferred back - to the `MGLStyleLayer` instance and the unique_ptr reference is valid again. It - is safe to add the layer back to the style after it is removed. - */ -- (void)removeFromStyle:(MGLStyle *)style; - -@end - -namespace mbgl { - -class LayerPeerFactory { -public: - virtual ~LayerPeerFactory() = default; - /** - Get the corresponding core layer factory. - */ - virtual LayerFactory* getCoreLayerFactory() = 0; - /** - Creates an MGLStyleLayer instance with a raw pointer to the backing store. - */ - virtual MGLStyleLayer* createPeer(style::Layer*) = 0; -}; - -} // namespace mbgl - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLStyleLayer_Private.h.ejs b/platform/darwin/src/MGLStyleLayer_Private.h.ejs deleted file mode 100644 index a6e6b9cd873..00000000000 --- a/platform/darwin/src/MGLStyleLayer_Private.h.ejs +++ /dev/null @@ -1,24 +0,0 @@ -<% - const doc = locals.doc; - const type = locals.type; - const layoutProperties = locals.layoutProperties; - const paintProperties = locals.paintProperties; - const enumProperties = locals.enumProperties; --%> -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -#pragma once - -#include "MGLStyleLayer_Private.h" - -#include _layer_factory.hpp> - -namespace mbgl { - -class <%- camelize(type) %>StyleLayerPeerFactory : public LayerPeerFactory, public mbgl::<%- camelize(type) %>LayerFactory { - // LayerPeerFactory overrides. - LayerFactory* getCoreLayerFactory() final { return this; } - virtual MGLStyleLayer* createPeer(style::Layer*) final; -}; - -} // namespace mbgl diff --git a/platform/darwin/src/MGLStyleValue.h b/platform/darwin/src/MGLStyleValue.h deleted file mode 100644 index 2a90472b02d..00000000000 --- a/platform/darwin/src/MGLStyleValue.h +++ /dev/null @@ -1,48 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *MGLStyleFunctionOption NS_STRING_ENUM NS_UNAVAILABLE; - -FOUNDATION_EXTERN MGL_EXPORT const MGLStyleFunctionOption MGLStyleFunctionOptionInterpolationBase __attribute__((unavailable("Use NSExpression instead, applying the mgl_interpolate:withCurveType:parameters:stops: function with a curve type of “exponential” and a non-nil parameter."))); - -FOUNDATION_EXTERN MGL_EXPORT const MGLStyleFunctionOption MGLStyleFunctionOptionDefaultValue __attribute__((unavailable("Use +[NSExpression expressionForConditional:trueExpression:falseExpression:] instead."))); - -typedef NS_ENUM(NSUInteger, MGLInterpolationMode) { - MGLInterpolationModeExponential __attribute__((unavailable("Use NSExpression instead, applying the mgl_interpolate:withCurveType:parameters:stops: function with a curve type of “exponential”."))) = 0, - MGLInterpolationModeInterval __attribute__((unavailable("Use NSExpression instead, calling the mgl_step:from:stops: function."))), - MGLInterpolationModeCategorical __attribute__((unavailable("Use NSExpression instead."))), - MGLInterpolationModeIdentity __attribute__((unavailable("Use +[NSExpression expressionForKeyPath:] instead."))) -} __attribute__((unavailable("Use NSExpression instead."))); - -MGL_EXPORT __attribute__((unavailable("Use NSExpression instead."))) -@interface MGLStyleValue : NSObject -@end - -MGL_EXPORT __attribute__((unavailable("Use +[NSExpression expressionForConstantValue:] instead."))) -@interface MGLConstantStyleValue : MGLStyleValue -@end - -@compatibility_alias MGLStyleConstantValue MGLConstantStyleValue; - -MGL_EXPORT __attribute__((unavailable("Use NSExpression instead, calling the mgl_step:from:stops: or mgl_interpolate:withCurveType:parameters:stops: function."))) -@interface MGLStyleFunction : MGLStyleValue -@end - -MGL_EXPORT __attribute__((unavailable("Use NSExpression instead, applying the mgl_step:from:stops: or mgl_interpolate:withCurveType:parameters:stops: function to the $zoomLevel variable."))) -@interface MGLCameraStyleFunction : MGLStyleFunction -@end - -MGL_EXPORT __attribute__((unavailable("Use NSExpression instead, applying the mgl_step:from:stops: or mgl_interpolate:withCurveType:parameters:stops: function to a key path expression."))) -@interface MGLSourceStyleFunction : MGLStyleFunction -@end - -MGL_EXPORT __attribute__((unavailable("Use a NSExpression instead with nested mgl_step:from:stops: or mgl_interpolate:withCurveType:parameters:stops: function calls."))) -@interface MGLCompositeStyleFunction : MGLStyleFunction -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLStyleValue.mm b/platform/darwin/src/MGLStyleValue.mm deleted file mode 100644 index 01ad108d7fd..00000000000 --- a/platform/darwin/src/MGLStyleValue.mm +++ /dev/null @@ -1,59 +0,0 @@ -#import "MGLStyleValue_Private.h" - -#include - -const MGLStyleFunctionOption MGLStyleFunctionOptionInterpolationBase = @"MGLStyleFunctionOptionInterpolationBase"; -const MGLStyleFunctionOption MGLStyleFunctionOptionDefaultValue = @"MGLStyleFunctionOptionDefaultValue"; - -id MGLJSONObjectFromMBGLValue(const mbgl::Value &value) { - return value.match([](const mbgl::NullValue) -> id { - return [NSNull null]; - }, [](const bool value) { - return @(value); - }, [](const float value) { - return @(value); - }, [](const int64_t value) { - return @(value); - }, [](const double value) { - return @(value); - }, [](const std::string &value) { - return @(value.c_str()); - }, [](const mbgl::Color &value) { - return [MGLColor mgl_colorWithColor:value]; - }, [](const mbgl::style::Position &value) { - std::array spherical = value.getSpherical(); - MGLSphericalPosition position = MGLSphericalPositionMake(spherical[0], spherical[1], spherical[2]); - return [NSValue valueWithMGLSphericalPosition:position]; - }, [&](const std::vector &vector) { - NSMutableArray *array = [NSMutableArray arrayWithCapacity:vector.size()]; - for (auto value : vector) { - [array addObject:MGLJSONObjectFromMBGLValue(value)]; - } - return array; - }, [&](const std::unordered_map &map) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:map.size()]; - for (auto &item : map) { - dictionary[@(item.first.c_str())] = MGLJSONObjectFromMBGLValue(item.second); - } - return dictionary; - }, [](const auto &) -> id { - return nil; - }); -} - -id MGLJSONObjectFromMBGLExpression(const mbgl::style::expression::Expression &mbglExpression) { - return MGLJSONObjectFromMBGLValue(mbglExpression.serialize()); -} - - -std::unique_ptr MGLClusterPropertyFromNSExpression(NSExpression *expression) { - if (!expression) { - return nullptr; - } - - NSArray *jsonExpression = expression.mgl_jsonExpressionObject; - - auto expr = mbgl::style::expression::dsl::createExpression(mbgl::style::conversion::makeConvertible(jsonExpression)); - - return expr; -} diff --git a/platform/darwin/src/MGLStyleValue_Private.h b/platform/darwin/src/MGLStyleValue_Private.h deleted file mode 100644 index 43f0b9d2825..00000000000 --- a/platform/darwin/src/MGLStyleValue_Private.h +++ /dev/null @@ -1,348 +0,0 @@ -#import - -#import "MGLStyleValue.h" - -#import "NSValue+MGLStyleAttributeAdditions.h" -#import "NSValue+MGLAdditions.h" -#import "NSExpression+MGLPrivateAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLTypes.h" - -#import "MGLConversion.h" -#include -#include -#include -#include -#import -#import - -#import -#include - -#include - -#if TARGET_OS_IPHONE - #import "UIColor+MGLAdditions.h" -#else - #import "NSColor+MGLAdditions.h" -#endif - -namespace mbgl { - namespace style { - namespace expression { - class Expression; - } - } -} - -NS_INLINE MGLTransition MGLTransitionFromOptions(const mbgl::style::TransitionOptions& options) { - MGLTransition transition; - transition.duration = MGLTimeIntervalFromDuration(options.duration.value_or(mbgl::Duration::zero())); - transition.delay = MGLTimeIntervalFromDuration(options.delay.value_or(mbgl::Duration::zero())); - - return transition; -} - -NS_INLINE mbgl::style::TransitionOptions MGLOptionsFromTransition(MGLTransition transition) { - mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } }; - return options; -} - -std::unique_ptr MGLClusterPropertyFromNSExpression(NSExpression *expression); - -id MGLJSONObjectFromMBGLExpression(const mbgl::style::expression::Expression &mbglExpression); - -template -class MGLStyleValueTransformer { -public: - - /// Convert an mbgl property value into an mgl style value - NSExpression *toExpression(const mbgl::style::PropertyValue &mbglValue) { - PropertyExpressionEvaluator evaluator; - return mbglValue.evaluate(evaluator); - } - - // Convert an mbgl heatmap color property value into an mgl style value - NSExpression *toExpression(const mbgl::style::ColorRampPropertyValue &mbglValue) { - if (mbglValue.isUndefined()) { - return nil; - } - return [NSExpression expressionWithMGLJSONObject:MGLJSONObjectFromMBGLExpression(mbglValue.getExpression())]; - } - - /** - Converts an NSExpression to an mbgl property value. - */ - template - typename std::enable_if_t::value, - MBGLValue> toPropertyValue(NSExpression *expression, bool allowDataExpressions) { - if (!expression) { - return {}; - } - - if (expression.expressionType == NSConstantValueExpressionType) { - MBGLType mbglValue; - getMBGLValue(expression.constantValue, mbglValue); - return mbglValue; - } - if (expression.expressionType == NSAggregateExpressionType) { - MBGLType mbglValue; - getMBGLValue(expression.collection, mbglValue); - return mbglValue; - } - - NSArray *jsonExpression = expression.mgl_jsonExpressionObject; - - mbgl::style::conversion::Error valueError; - auto value = mbgl::style::conversion::convert( - mbgl::style::conversion::makeConvertible(jsonExpression), valueError, allowDataExpressions, false); - if (!value) { - [NSException raise:NSInvalidArgumentException - format:@"Invalid property value: %@", @(valueError.message.c_str())]; - return {}; - } - - return *value; - } - - /** - Converts an NSExpression to an mbgl property value. - */ - template - typename std::enable_if_t::value, - MBGLValue> toPropertyValue(NSExpression *expression) { - if (!expression) { - return {}; - } - - NSArray *jsonExpression = expression.mgl_jsonExpressionObject; - - mbgl::style::conversion::Error valueError; - auto value = mbgl::style::conversion::convert( - mbgl::style::conversion::makeConvertible(jsonExpression), valueError); - if (!value) { - [NSException raise:NSInvalidArgumentException - format:@"Invalid property value: %@", @(valueError.message.c_str())]; - return {}; - } - - return *value; - } - -private: // Private utilities for converting from mgl to mbgl values - - /** - As hack to allow converting enum => string values, we accept a second, dummy parameter in - the toRawStyleSpecValue() methods for converting 'atomic' (non-style-function) values. - This allows us to use `std::enable_if` to test (at compile time) whether or not MBGLType is an Enum. - */ - template ::value>::type, - typename MGLEnum = ObjCEnum, - class = typename std::enable_if::value>::type> - NSObject* toRawStyleSpecValue(NSObject *rawMGLValue, MBGLEnum &) { - if ([rawMGLValue isKindOfClass:[NSValue class]]) { - const auto rawNSValue = (NSValue *)rawMGLValue; - if (strcmp([rawNSValue objCType], @encode(CGVector)) == 0) { - // offset [x, y] - std::array mglValue = rawNSValue.mgl_offsetArrayValue; - return [NSArray arrayWithObjects:@(mglValue[0]), @(mglValue[1]), nil]; - } - } - // noop pass-through plain NSObject-based items - return rawMGLValue; - } - - template ::value>::type, - typename MGLEnum = ObjCEnum, - class = typename std::enable_if::value>::type> - NSString* toRawStyleSpecValue(ObjCType rawValue, MBGLEnum &) { - MGLEnum mglEnum; - [rawValue getValue:&mglEnum]; - return @(mbgl::Enum::toString(mglEnum)); - } - - NSObject* toRawStyleSpecValue(MGLColor *color, MBGLType &) { - return @(color.mgl_color.stringify().c_str()); - } - - // Bool - void getMBGLValue(NSNumber *rawValue, bool &mbglValue) { - mbglValue = !!rawValue.boolValue; - } - - // Float - void getMBGLValue(NSNumber *rawValue, float &mbglValue) { - mbglValue = rawValue.floatValue; - } - - // String - void getMBGLValue(NSString *rawValue, std::string &mbglValue) { - mbglValue = rawValue.UTF8String; - } - - // Formatted - void getMBGLValue(NSString *rawValue, mbgl::style::expression::Formatted &mbglValue) { - mbglValue = mbgl::style::expression::Formatted(rawValue.UTF8String); - } - - // Offsets - void getMBGLValue(id rawValue, std::array &mbglValue) { - if ([rawValue isKindOfClass:[NSValue class]]) { - mbglValue = [rawValue mgl_offsetArrayValue]; - } else if ([rawValue isKindOfClass:[NSArray class]]) { - NSArray *array = (NSArray *)rawValue; - getMBGLValue(array[0], mbglValue[0]); - getMBGLValue(array[1], mbglValue[1]); - } - } - - // Padding - void getMBGLValue(id rawValue, std::array &mbglValue) { - if ([rawValue isKindOfClass:[NSValue class]]) { - mbglValue = [rawValue mgl_paddingArrayValue]; - } else if ([rawValue isKindOfClass:[NSArray class]]) { - NSArray *array = (NSArray *)rawValue; - getMBGLValue(array[0], mbglValue[0]); - getMBGLValue(array[1], mbglValue[1]); - getMBGLValue(array[2], mbglValue[2]); - getMBGLValue(array[3], mbglValue[3]); - getMBGLValue(array[4], mbglValue[4]); - } - } - - // Color - void getMBGLValue(MGLColor *rawValue, mbgl::Color &mbglValue) { - mbglValue = rawValue.mgl_color; - } - - // Image - void getMBGLValue(NSString *rawValue, mbgl::style::expression::Image &mbglValue) { - mbglValue = mbgl::style::expression::Image(rawValue.UTF8String); - } - - // Array - void getMBGLValue(ObjCType rawValue, std::vector &mbglValue) { - mbglValue.reserve(rawValue.count); - for (id obj in rawValue) { - id constantObject = obj; - if ([obj isKindOfClass:[NSExpression class]] && [obj expressionType] == NSConstantValueExpressionType) { - constantObject = [constantObject constantValue]; - } - MBGLElement mbglElement; - getMBGLValue(constantObject, mbglElement); - mbglValue.push_back(mbglElement); - } - } - - void getMBGLValue(NSValue *rawValue, mbgl::style::Position &mbglValue) { - auto spherical = rawValue.mgl_lightPositionArrayValue; - mbgl::style::Position position(spherical); - mbglValue = position; - } - - // Enumerations - template ::value>::type, - typename MGLEnum = ObjCEnum, - class = typename std::enable_if::value>::type> - void getMBGLValue(id rawValue, MBGLEnum &mbglValue) { - if ([rawValue isKindOfClass:[NSString class]]) { - mbglValue = *mbgl::Enum::toEnum([(NSString *)rawValue UTF8String]); - } else { - MGLEnum mglEnum; - [(NSValue *)rawValue getValue:&mglEnum]; - auto str = mbgl::Enum::toString(mglEnum); - mbglValue = *mbgl::Enum::toEnum(str); - } - } - -private: // Private utilities for converting from mbgl to mgl values - - // Bool - static NSNumber *toMGLRawStyleValue(const bool mbglStopValue) { - return @(mbglStopValue); - } - - // Float - static NSNumber *toMGLRawStyleValue(const float mbglStopValue) { - return @(mbglStopValue); - } - - // Integer - static NSNumber *toMGLRawStyleValue(const int64_t mbglStopValue) { - return @(mbglStopValue); - } - - // String - static NSString *toMGLRawStyleValue(const std::string &mbglStopValue) { - return @(mbglStopValue.c_str()); - } - - // Formatted - static NSString *toMGLRawStyleValue(const mbgl::style::expression::Formatted &mbglStopValue) { - return @(mbglStopValue.toString().c_str()); - } - - // Offsets - static NSValue *toMGLRawStyleValue(const std::array &mbglStopValue) { - return [NSValue mgl_valueWithOffsetArray:mbglStopValue]; - } - - // Padding - static NSValue *toMGLRawStyleValue(const std::array &mbglStopValue) { - return [NSValue mgl_valueWithPaddingArray:mbglStopValue]; - } - - // Color - static MGLColor *toMGLRawStyleValue(const mbgl::Color mbglStopValue) { - return [MGLColor mgl_colorWithColor:mbglStopValue]; - } - - // Image - static NSString *toMGLRawStyleValue(const mbgl::style::expression::Image &mbglImageValue) { - return @(mbglImageValue.id().c_str()); - } - - // Array - static NSArray *toMGLRawStyleValue(const std::vector &mbglStopValue) { - NSMutableArray *array = [NSMutableArray arrayWithCapacity:mbglStopValue.size()]; - for (const auto &mbglElement: mbglStopValue) { - [array addObject:[NSExpression expressionForConstantValue:toMGLRawStyleValue(mbglElement)]]; - } - return array; - } - - static NSValue *toMGLRawStyleValue(const mbgl::style::Position &mbglStopValue) { - std::array spherical = mbglStopValue.getSpherical(); - MGLSphericalPosition position = MGLSphericalPositionMake(spherical[0], spherical[1], spherical[2]); - return [NSValue valueWithMGLSphericalPosition:position]; - } - - // Enumerations - template - static NSString *toMGLRawStyleValue(const MBGLEnum &value) { - return @(mbgl::Enum::toString(value)); - } - - /// Converts all types of mbgl property values into an equivalent NSExpression. - class PropertyExpressionEvaluator { - public: - NSExpression *operator()(const mbgl::style::Undefined) const { - return nil; - } - - NSExpression *operator()(const MBGLType &value) const { - id constantValue = toMGLRawStyleValue(value); - if ([constantValue isKindOfClass:[NSArray class]]) { - return [NSExpression expressionForAggregate:constantValue]; - } - return [NSExpression expressionForConstantValue:constantValue]; - } - - NSExpression *operator()(const mbgl::style::PropertyExpression &mbglValue) const { - return [NSExpression expressionWithMGLJSONObject:MGLJSONObjectFromMBGLExpression(mbglValue.getExpression())]; - } - }; -}; diff --git a/platform/darwin/src/MGLStyle_Private.h b/platform/darwin/src/MGLStyle_Private.h deleted file mode 100644 index 1294b9ad1c2..00000000000 --- a/platform/darwin/src/MGLStyle_Private.h +++ /dev/null @@ -1,40 +0,0 @@ -#import "MGLStyle.h" - -#import "MGLStyleLayer.h" -#import "MGLFillStyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -namespace mbgl { - namespace style { - class Style; - } -} - -@class MGLAttributionInfo; -@class MGLMapView; -@class MGLOpenGLStyleLayer; -@class MGLVectorTileSource; -@class MGLVectorStyleLayer; - -@interface MGLStyle (Private) - -- (instancetype)initWithRawStyle:(mbgl::style::Style *)rawStyle mapView:(MGLMapView *)mapView; - -@property (nonatomic, readonly, weak) MGLMapView *mapView; -@property (nonatomic, readonly) mbgl::style::Style *rawStyle; - -- (nullable NSArray *)attributionInfosWithFontSize:(CGFloat)fontSize linkColor:(nullable MGLColor *)linkColor; -@property (nonatomic, readonly, strong) NSMutableDictionary *openGLLayers; -- (void)setStyleClasses:(NSArray *)appliedClasses transitionDuration:(NSTimeInterval)transitionDuration; - -@end - -@interface MGLStyle (MGLStreetsAdditions) - -@property (nonatomic, readonly, copy) NSArray *placeStyleLayers; -@property (nonatomic, readonly, copy) NSArray *roadStyleLayers; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLSymbolStyleLayer.h b/platform/darwin/src/MGLSymbolStyleLayer.h deleted file mode 100644 index 8b6bef3c548..00000000000 --- a/platform/darwin/src/MGLSymbolStyleLayer.h +++ /dev/null @@ -1,2488 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLFoundation.h" -#import "MGLVectorStyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Part of the icon placed closest to the anchor. - - Values of this type are used in the `MGLSymbolStyleLayer.iconAnchor` - property. - */ -typedef NS_ENUM(NSUInteger, MGLIconAnchor) { - /** - The center of the icon is placed closest to the anchor. - */ - MGLIconAnchorCenter, - /** - The left side of the icon is placed closest to the anchor. - */ - MGLIconAnchorLeft, - /** - The right side of the icon is placed closest to the anchor. - */ - MGLIconAnchorRight, - /** - The top of the icon is placed closest to the anchor. - */ - MGLIconAnchorTop, - /** - The bottom of the icon is placed closest to the anchor. - */ - MGLIconAnchorBottom, - /** - The top left corner of the icon is placed closest to the anchor. - */ - MGLIconAnchorTopLeft, - /** - The top right corner of the icon is placed closest to the anchor. - */ - MGLIconAnchorTopRight, - /** - The bottom left corner of the icon is placed closest to the anchor. - */ - MGLIconAnchorBottomLeft, - /** - The bottom right corner of the icon is placed closest to the anchor. - */ - MGLIconAnchorBottomRight, -}; - -/** - Orientation of icon when map is pitched. - - Values of this type are used in the `MGLSymbolStyleLayer.iconPitchAlignment` - property. - */ -typedef NS_ENUM(NSUInteger, MGLIconPitchAlignment) { - /** - The icon is aligned to the plane of the map. - */ - MGLIconPitchAlignmentMap, - /** - The icon is aligned to the plane of the viewport. - */ - MGLIconPitchAlignmentViewport, - /** - Automatically matches the value of - `MGLSymbolStyleLayer.iconRotationAlignment`. - */ - MGLIconPitchAlignmentAuto, -}; - -/** - In combination with `MGLSymbolStyleLayer.symbolPlacement`, determines the - rotation behavior of icons. - - Values of this type are used in the `MGLSymbolStyleLayer.iconRotationAlignment` - property. - */ -typedef NS_ENUM(NSUInteger, MGLIconRotationAlignment) { - /** - When `symbolPlacement` is set to `MGLSymbolPlacementPoint`, aligns icons - east-west. When `symbolPlacement` is set to `MGLSymbolPlacementLine` or - `MGLSymbolPlacementLineCenter`, aligns icon x-axes with the line. - */ - MGLIconRotationAlignmentMap, - /** - Produces icons whose x-axes are aligned with the x-axis of the viewport, - regardless of the value of `MGLSymbolStyleLayer.symbolPlacement`. - */ - MGLIconRotationAlignmentViewport, - /** - When `symbolPlacement` is set to `MGLSymbolPlacementPoint`, this is - equivalent to `MGLIconRotationAlignmentViewport`. When `symbolPlacement` is - set to `MGLSymbolPlacementLine` or `MGLSymbolPlacementLineCenter`, this is - equivalent to `MGLIconRotationAlignmentMap`. - */ - MGLIconRotationAlignmentAuto, -}; - -/** - Scales the icon to fit around the associated text. - - Values of this type are used in the `MGLSymbolStyleLayer.iconTextFit` - property. - */ -typedef NS_ENUM(NSUInteger, MGLIconTextFit) { - /** - The icon is displayed at its intrinsic aspect ratio. - */ - MGLIconTextFitNone, - /** - The icon is scaled in the x-dimension to fit the width of the text. - */ - MGLIconTextFitWidth, - /** - The icon is scaled in the y-dimension to fit the height of the text. - */ - MGLIconTextFitHeight, - /** - The icon is scaled in both x- and y-dimensions. - */ - MGLIconTextFitBoth, -}; - -/** - Label placement relative to its geometry. - - Values of this type are used in the `MGLSymbolStyleLayer.symbolPlacement` - property. - */ -typedef NS_ENUM(NSUInteger, MGLSymbolPlacement) { - /** - The label is placed at the point where the geometry is located. - */ - MGLSymbolPlacementPoint, - /** - The label is placed along the line of the geometry. Can only be used on - `LineString` and `Polygon` geometries. - */ - MGLSymbolPlacementLine, - /** - The label is placed at the center of the line of the geometry. Can only be - used on `LineString` and `Polygon` geometries. Note that a single feature - in a vector tile may contain multiple line geometries. - */ - MGLSymbolPlacementLineCenter, -}; - -/** - Controls the order in which overlapping symbols in the same layer are rendered - - Values of this type are used in the `MGLSymbolStyleLayer.symbolZOrder` - property. - */ -typedef NS_ENUM(NSUInteger, MGLSymbolZOrder) { - /** - If `MGLSymbolStyleLayer.symbolSortKey` is set, sort based on that. - Otherwise sort symbols by their y-position relative to the viewport. - */ - MGLSymbolZOrderAuto, - /** - Specify this z order if symbols’ appearance relies on lower features - overlapping higher features. For example, symbols with a pin-like - appearance would require this z order. - */ - MGLSymbolZOrderViewportY, - /** - Specify this z order if the order in which features appear in the source is - significant. - */ - MGLSymbolZOrderSource, -}; - -/** - Part of the text placed closest to the anchor. - - Values of this type are used in the `MGLSymbolStyleLayer.textAnchor` - property. - */ -typedef NS_ENUM(NSUInteger, MGLTextAnchor) { - /** - The center of the text is placed closest to the anchor. - */ - MGLTextAnchorCenter, - /** - The left side of the text is placed closest to the anchor. - */ - MGLTextAnchorLeft, - /** - The right side of the text is placed closest to the anchor. - */ - MGLTextAnchorRight, - /** - The top of the text is placed closest to the anchor. - */ - MGLTextAnchorTop, - /** - The bottom of the text is placed closest to the anchor. - */ - MGLTextAnchorBottom, - /** - The top left corner of the text is placed closest to the anchor. - */ - MGLTextAnchorTopLeft, - /** - The top right corner of the text is placed closest to the anchor. - */ - MGLTextAnchorTopRight, - /** - The bottom left corner of the text is placed closest to the anchor. - */ - MGLTextAnchorBottomLeft, - /** - The bottom right corner of the text is placed closest to the anchor. - */ - MGLTextAnchorBottomRight, -}; - -/** - Text justification options. - - Values of this type are used in the `MGLSymbolStyleLayer.textJustification` - property. - */ -typedef NS_ENUM(NSUInteger, MGLTextJustification) { - /** - The text is aligned towards the anchor position. - */ - MGLTextJustificationAuto, - /** - The text is aligned to the left. - */ - MGLTextJustificationLeft, - /** - The text is centered. - */ - MGLTextJustificationCenter, - /** - The text is aligned to the right. - */ - MGLTextJustificationRight, -}; - -/** - Orientation of text when map is pitched. - - Values of this type are used in the `MGLSymbolStyleLayer.textPitchAlignment` - property. - */ -typedef NS_ENUM(NSUInteger, MGLTextPitchAlignment) { - /** - The text is aligned to the plane of the map. - */ - MGLTextPitchAlignmentMap, - /** - The text is aligned to the plane of the viewport. - */ - MGLTextPitchAlignmentViewport, - /** - Automatically matches the value of - `MGLSymbolStyleLayer.textRotationAlignment`. - */ - MGLTextPitchAlignmentAuto, -}; - -/** - In combination with `MGLSymbolStyleLayer.symbolPlacement`, determines the - rotation behavior of the individual glyphs forming the text. - - Values of this type are used in the `MGLSymbolStyleLayer.textRotationAlignment` - property. - */ -typedef NS_ENUM(NSUInteger, MGLTextRotationAlignment) { - /** - When `symbolPlacement` is set to `MGLSymbolPlacementPoint`, aligns text - east-west. When `symbolPlacement` is set to `MGLSymbolPlacementLine` or - `MGLSymbolPlacementLineCenter`, aligns text x-axes with the line. - */ - MGLTextRotationAlignmentMap, - /** - Produces glyphs whose x-axes are aligned with the x-axis of the viewport, - regardless of the value of `MGLSymbolStyleLayer.symbolPlacement`. - */ - MGLTextRotationAlignmentViewport, - /** - When `symbolPlacement` is set to `MGLSymbolPlacementPoint`, this is - equivalent to `MGLTextRotationAlignmentViewport`. When `symbolPlacement` is - set to `MGLSymbolPlacementLine` or `MGLSymbolPlacementLineCenter`, this is - equivalent to `MGLTextRotationAlignmentMap`. - */ - MGLTextRotationAlignmentAuto, -}; - -/** - Specifies how to capitalize text. - - Values of this type are used in the `MGLSymbolStyleLayer.textTransform` - property. - */ -typedef NS_ENUM(NSUInteger, MGLTextTransform) { - /** - The text is not altered. - */ - MGLTextTransformNone, - /** - Forces all letters to be displayed in uppercase. - */ - MGLTextTransformUppercase, - /** - Forces all letters to be displayed in lowercase. - */ - MGLTextTransformLowercase, -}; - -/** - The property allows control over a symbol's orientation. Note that the property - values act as a hint, so that a symbol whose language doesn’t support the - provided orientation will be laid out in its natural orientation. Example: - English point symbol will be rendered horizontally even if array value contains - single 'vertical' enum value. The order of elements in an array define priority - order for the placement of an orientation variant. - - Values of this type are used in the `MGLSymbolStyleLayer.textWritingModes` - property. - */ -typedef NS_ENUM(NSUInteger, MGLTextWritingMode) { - /** - If a text's language supports horizontal writing mode, symbols with point - placement would be laid out horizontally. - */ - MGLTextWritingModeHorizontal, - /** - If a text's language supports vertical writing mode, symbols with point - placement would be laid out vertically. - */ - MGLTextWritingModeVertical, -}; - -/** - Controls the frame of reference for `MGLSymbolStyleLayer.iconTranslation`. - - Values of this type are used in the `MGLSymbolStyleLayer.iconTranslationAnchor` - property. - */ -typedef NS_ENUM(NSUInteger, MGLIconTranslationAnchor) { - /** - Icons are translated relative to the map. - */ - MGLIconTranslationAnchorMap, - /** - Icons are translated relative to the viewport. - */ - MGLIconTranslationAnchorViewport, -}; - -/** - Controls the frame of reference for `MGLSymbolStyleLayer.textTranslation`. - - Values of this type are used in the `MGLSymbolStyleLayer.textTranslationAnchor` - property. - */ -typedef NS_ENUM(NSUInteger, MGLTextTranslationAnchor) { - /** - The text is translated relative to the map. - */ - MGLTextTranslationAnchorMap, - /** - The text is translated relative to the viewport. - */ - MGLTextTranslationAnchorViewport, -}; - -/** - An `MGLSymbolStyleLayer` is a style layer that renders icon and text labels at - points or along lines on the map. - - Use a symbol style layer to configure the visual appearance of feature labels. - These features can come from vector tiles loaded by an `MGLVectorTileSource` - object, or they can be `MGLShape` or `MGLFeature` instances in an - `MGLShapeSource` or `MGLComputedShapeSource` object. - - You can access an existing symbol style layer using the - `-[MGLStyle layerWithIdentifier:]` method if you know its identifier; - otherwise, find it using the `MGLStyle.layers` property. You can also create a - new symbol style layer and add it to the style using a method such as - `-[MGLStyle addLayer:]`. - - #### Related examples - See the Dynamically - style interactive points and Use - images to cluster point data examples learn how to style data on your map - using this layer. - - ### Example - - ```swift - let layer = MGLSymbolStyleLayer(identifier: "coffeeshops", source: pois) - layer.sourceLayerIdentifier = "pois" - layer.iconImageName = NSExpression(forConstantValue: "coffee") - layer.iconScale = NSExpression(forConstantValue: 0.5) - layer.text = NSExpression(forKeyPath: "name") - layer.textTranslation = NSExpression(forConstantValue: NSValue(cgVector: CGVector(dx: 10, dy: 0))) - layer.textJustification = NSExpression(forConstantValue: "left") - layer.textAnchor = NSExpression(forConstantValue: "left") - layer.predicate = NSPredicate(format: "%K == %@", "venue-type", "coffee") - mapView.style?.addLayer(layer) - ``` - */ -MGL_EXPORT -@interface MGLSymbolStyleLayer : MGLVectorStyleLayer - -/** - Returns a symbol style layer initialized with an identifier and source. - - After initializing and configuring the style layer, add it to a map view’s - style using the `-[MGLStyle addLayer:]` or - `-[MGLStyle insertLayer:belowLayer:]` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param source The source from which to obtain the data to style. If the source - has not yet been added to the current style, the behavior is undefined. - @return An initialized foreground style layer. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source; - -#pragma mark - Accessing the Layout Attributes - -/** - If true, the icon will be visible even if it collides with other previously - drawn symbols. - - The default value of this property is an expression that evaluates to `NO`. Set - this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - This attribute corresponds to the icon-allow-overlap - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant Boolean values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *iconAllowsOverlap; - - -@property (nonatomic, null_resettable) NSExpression *iconAllowOverlap __attribute__((unavailable("Use iconAllowsOverlap instead."))); - -/** - Part of the icon placed closest to the anchor. - - The default value of this property is an expression that evaluates to `center`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `MGLIconAnchor` values - * Any of the following constant string values: - * `center`: The center of the icon is placed closest to the anchor. - * `left`: The left side of the icon is placed closest to the anchor. - * `right`: The right side of the icon is placed closest to the anchor. - * `top`: The top of the icon is placed closest to the anchor. - * `bottom`: The bottom of the icon is placed closest to the anchor. - * `top-left`: The top left corner of the icon is placed closest to the - anchor. - * `top-right`: The top right corner of the icon is placed closest to the - anchor. - * `bottom-left`: The bottom left corner of the icon is placed closest to the - anchor. - * `bottom-right`: The bottom right corner of the icon is placed closest to - the anchor. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *iconAnchor; - -/** - If true, other symbols can be visible even if they collide with the icon. - - The default value of this property is an expression that evaluates to `NO`. Set - this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - This attribute corresponds to the icon-ignore-placement - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant Boolean values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *iconIgnoresPlacement; - - -@property (nonatomic, null_resettable) NSExpression *iconIgnorePlacement __attribute__((unavailable("Use iconIgnoresPlacement instead."))); - -/** - Name of a style image to use for drawing an image background. - - Use the `+[MGLStyle setImage:forName:]` method to associate an image with a - name that you can set this property to. - - Within a constant string value, a feature attribute name enclosed in curly - braces (e.g., `{token}`) is replaced with the value of the named attribute. - Tokens inside non-constant expressions are ignored; instead, use `mgl_join:` - and key path expressions. - - This attribute corresponds to the icon-image - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant string values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - - #### Related examples - See the Use - images to cluster point data example to learn how to dynamically set your - icons with an expression. - */ -@property (nonatomic, null_resettable) NSExpression *iconImageName; - - -@property (nonatomic, null_resettable) NSExpression *iconImage __attribute__((unavailable("Use iconImageName instead."))); - -#if TARGET_OS_IPHONE -/** - Offset distance of icon from its anchor. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 rightward and 0 - downward. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *iconOffset; -#else -/** - Offset distance of icon from its anchor. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 rightward and 0 - upward. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *iconOffset; -#endif - -/** - If true, text will display without their corresponding icons when the icon - collides with other symbols and the text does not. - - The default value of this property is an expression that evaluates to `NO`. Set - this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`, and - `text` is non-`nil`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant Boolean values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable, getter=isIconOptional) NSExpression *iconOptional; - -/** - Size of the additional area around the icon bounding box used for detecting - symbol collisions. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `2`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *iconPadding; - -/** - Orientation of icon when map is pitched. - - The default value of this property is an expression that evaluates to `auto`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `MGLIconPitchAlignment` values - * Any of the following constant string values: - * `map`: The icon is aligned to the plane of the map. - * `viewport`: The icon is aligned to the plane of the viewport. - * `auto`: Automatically matches the value of `icon-rotation-alignment`. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *iconPitchAlignment; - -/** - Rotates the icon clockwise. - - This property is measured in degrees. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - This attribute corresponds to the icon-rotate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant numeric values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *iconRotation; - - -@property (nonatomic, null_resettable) NSExpression *iconRotate __attribute__((unavailable("Use iconRotation instead."))); - -/** - In combination with `symbolPlacement`, determines the rotation behavior of - icons. - - The default value of this property is an expression that evaluates to `auto`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `MGLIconRotationAlignment` values - * Any of the following constant string values: - * `map`: When `symbol-placement` is set to `point`, aligns icons east-west. - When `symbol-placement` is set to `line` or `line-center`, aligns icon x-axes - with the line. - * `viewport`: Produces icons whose x-axes are aligned with the x-axis of the - viewport, regardless of the value of `symbol-placement`. - * `auto`: When `symbol-placement` is set to `point`, this is equivalent to - `viewport`. When `symbol-placement` is set to `line` or `line-center`, this is - equivalent to `map`. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *iconRotationAlignment; - -/** - Scales the original size of the icon by the provided factor. The new point size - of the image will be the original point size multiplied by `iconScale`. 1 is - the original size; 3 triples the size of the image. - - This property is measured in factor of the original icon sizes. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - This attribute corresponds to the icon-size - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *iconScale; - - -@property (nonatomic, null_resettable) NSExpression *iconSize __attribute__((unavailable("Use iconScale instead."))); - -/** - Scales the icon to fit around the associated text. - - The default value of this property is an expression that evaluates to `none`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`, and - `text` is non-`nil`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `MGLIconTextFit` values - * Any of the following constant string values: - * `none`: The icon is displayed at its intrinsic aspect ratio. - * `width`: The icon is scaled in the x-dimension to fit the width of the - text. - * `height`: The icon is scaled in the y-dimension to fit the height of the - text. - * `both`: The icon is scaled in both x- and y-dimensions. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *iconTextFit; - -#if TARGET_OS_IPHONE -/** - Size of the additional area added to dimensions determined by `iconTextFit`. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing `UIEdgeInsetsZero`. Set this property to `nil` to - reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`, and - `text` is non-`nil`, and `iconTextFit` is set to an expression that evaluates - to `MGLIconTextFitBoth`, `MGLIconTextFitWidth`, or `MGLIconTextFitHeight`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `UIEdgeInsets` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *iconTextFitPadding; -#else -/** - Size of the additional area added to dimensions determined by `iconTextFit`. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing `NSEdgeInsetsZero`. Set this property to `nil` to - reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`, and - `text` is non-`nil`, and `iconTextFit` is set to an expression that evaluates - to `MGLIconTextFitBoth`, `MGLIconTextFitWidth`, or `MGLIconTextFitHeight`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `NSEdgeInsets` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *iconTextFitPadding; -#endif - -/** - If true, the icon may be flipped to prevent it from being rendered upside-down. - - The default value of this property is an expression that evaluates to `NO`. Set - this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`, and - `iconRotationAlignment` is set to an expression that evaluates to `map`, and - `symbolPlacement` is set to an expression that evaluates to either - `MGLSymbolPlacementLine` or `MGLSymbolPlacementLineCenter`. Otherwise, it is - ignored. - - This attribute corresponds to the icon-keep-upright - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant Boolean values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *keepsIconUpright; - - -@property (nonatomic, null_resettable) NSExpression *iconKeepUpright __attribute__((unavailable("Use keepsIconUpright instead."))); - -/** - If true, the text may be flipped vertically to prevent it from being rendered - upside-down. - - The default value of this property is an expression that evaluates to `YES`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`, and - `textRotationAlignment` is set to an expression that evaluates to `map`, and - `symbolPlacement` is set to an expression that evaluates to either - `MGLSymbolPlacementLine` or `MGLSymbolPlacementLineCenter`. Otherwise, it is - ignored. - - This attribute corresponds to the text-keep-upright - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant Boolean values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *keepsTextUpright; - - -@property (nonatomic, null_resettable) NSExpression *textKeepUpright __attribute__((unavailable("Use keepsTextUpright instead."))); - -/** - Maximum angle change between adjacent characters. - - This property is measured in degrees. - - The default value of this property is an expression that evaluates to the float - `45`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`, and - `symbolPlacement` is set to an expression that evaluates to either - `MGLSymbolPlacementLine` or `MGLSymbolPlacementLineCenter`. Otherwise, it is - ignored. - - This attribute corresponds to the text-max-angle - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant numeric values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *maximumTextAngle; - - -@property (nonatomic, null_resettable) NSExpression *textMaxAngle __attribute__((unavailable("Use maximumTextAngle instead."))); - -/** - The maximum line width for text wrapping. - - This property is measured in ems. - - The default value of this property is an expression that evaluates to the float - `10`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - This attribute corresponds to the text-max-width - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *maximumTextWidth; - - -@property (nonatomic, null_resettable) NSExpression *textMaxWidth __attribute__((unavailable("Use maximumTextWidth instead."))); - -/** - If true, the symbols will not cross tile edges to avoid mutual collisions. - Recommended in layers that don't have enough padding in the vector tile to - prevent collisions, or if it is a point symbol layer placed after a line symbol - layer. When using a client that supports global collision detection, like - Mapbox GL JS version 0.42.0 or greater, enabling this property is not needed to - prevent clipped labels at tile boundaries. - - The default value of this property is an expression that evaluates to `NO`. Set - this property to `nil` to reset it to the default value. - - This attribute corresponds to the symbol-avoid-edges - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant Boolean values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *symbolAvoidsEdges; - - -@property (nonatomic, null_resettable) NSExpression *symbolAvoidEdges __attribute__((unavailable("Use symbolAvoidsEdges instead."))); - -/** - Label placement relative to its geometry. - - The default value of this property is an expression that evaluates to `point`. - Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant `MGLSymbolPlacement` values - * Any of the following constant string values: - * `point`: The label is placed at the point where the geometry is located. - * `line`: The label is placed along the line of the geometry. Can only be - used on `LineString` and `Polygon` geometries. - * `line-center`: The label is placed at the center of the line of the - geometry. Can only be used on `LineString` and `Polygon` geometries. Note that - a single feature in a vector tile may contain multiple line geometries. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *symbolPlacement; - -/** - Sorts features in ascending order based on this value. Features with a higher - sort key will appear above features with a lower sort key when they overlap. - Features with a lower sort key will have priority over other features when - doing placement. - - You can set this property to an expression containing any of the following: - - * Constant numeric values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *symbolSortKey; - -/** - Distance between two symbol anchors. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `250`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `symbolPlacement` is set to an - expression that evaluates to `line`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 1 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *symbolSpacing; - -/** - Controls the order in which overlapping symbols in the same layer are rendered - - The default value of this property is an expression that evaluates to `auto`. - Set this property to `nil` to reset it to the default value. - - You can set this property to an expression containing any of the following: - - * Constant `MGLSymbolZOrder` values - * Any of the following constant string values: - * `auto`: If `symbol-sort-key` is set, sort based on that. Otherwise sort - symbols by their y-position relative to the viewport. - * `viewport-y`: Specify this z order if symbols’ appearance relies on lower - features overlapping higher features. For example, symbols with a pin-like - appearance would require this z order. - * `source`: Specify this z order if the order in which features appear in the - source is significant. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *symbolZOrder; - -/** - Value to use for a text label. - - Within a constant string value, a feature attribute name enclosed in curly - braces (e.g., `{token}`) is replaced with the value of the named attribute. - Tokens inside non-constant expressions are ignored; instead, use `mgl_join:` - and key path expressions. - - The default value of this property is an expression that evaluates to the empty - string. Set this property to `nil` to reset it to the default value. - - This attribute corresponds to the text-field - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant string values - * Formatted expressions. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - - #### Related examples - See the Cluster - point data and Use - images to cluster point data to learn how to use an expression to set this - attribute to the number of markers within a cluster. - */ -@property (nonatomic, null_resettable) NSExpression *text; - - -@property (nonatomic, null_resettable) NSExpression *textField __attribute__((unavailable("Use text instead."))); - -/** - If true, the text will be visible even if it collides with other previously - drawn symbols. - - The default value of this property is an expression that evaluates to `NO`. Set - this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - This attribute corresponds to the text-allow-overlap - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant Boolean values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *textAllowsOverlap; - - -@property (nonatomic, null_resettable) NSExpression *textAllowOverlap __attribute__((unavailable("Use textAllowsOverlap instead."))); - -/** - Part of the text placed closest to the anchor. - - The default value of this property is an expression that evaluates to `center`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`, and - `textVariableAnchor` is set to `nil`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `MGLTextAnchor` values - * Any of the following constant string values: - * `center`: The center of the text is placed closest to the anchor. - * `left`: The left side of the text is placed closest to the anchor. - * `right`: The right side of the text is placed closest to the anchor. - * `top`: The top of the text is placed closest to the anchor. - * `bottom`: The bottom of the text is placed closest to the anchor. - * `top-left`: The top left corner of the text is placed closest to the - anchor. - * `top-right`: The top right corner of the text is placed closest to the - anchor. - * `bottom-left`: The bottom left corner of the text is placed closest to the - anchor. - * `bottom-right`: The bottom right corner of the text is placed closest to - the anchor. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textAnchor; - -/** - An array of font face names used to display the text. - - Each font name must be included in the `{fontstack}` portion of the JSON - stylesheet’s glyphs - property. You can register a custom font when designing the style in Mapbox - Studio. Fonts installed on the system are not used. - - The first font named in the array is applied to the text. For each character in - the text, if the first font lacks a glyph for the character, the next font is - applied as a fallback, and so on. - - The default value of this property is an expression that evaluates to the array - `Open Sans Regular`, `Arial Unicode MS Regular`. Set this property to `nil` to - reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - This attribute corresponds to the text-font - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant array values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textFontNames; - - -@property (nonatomic, null_resettable) NSExpression *textFont __attribute__((unavailable("Use textFontNames instead."))); - -/** - Font size. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `16`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - This attribute corresponds to the text-size - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textFontSize; - - -@property (nonatomic, null_resettable) NSExpression *textSize __attribute__((unavailable("Use textFontSize instead."))); - -/** - If true, other symbols can be visible even if they collide with the text. - - The default value of this property is an expression that evaluates to `NO`. Set - this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - This attribute corresponds to the text-ignore-placement - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant Boolean values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *textIgnoresPlacement; - - -@property (nonatomic, null_resettable) NSExpression *textIgnorePlacement __attribute__((unavailable("Use textIgnoresPlacement instead."))); - -/** - Text justification options. - - The default value of this property is an expression that evaluates to `center`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - This attribute corresponds to the text-justify - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `MGLTextJustification` values - * Any of the following constant string values: - * `auto`: The text is aligned towards the anchor position. - * `left`: The text is aligned to the left. - * `center`: The text is centered. - * `right`: The text is aligned to the right. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textJustification; - - -@property (nonatomic, null_resettable) NSExpression *textJustify __attribute__((unavailable("Use textJustification instead."))); - -/** - Text tracking amount. - - This property is measured in ems. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textLetterSpacing; - -/** - Text leading value for multi-line text. - - This property is measured in ems. - - The default value of this property is an expression that evaluates to the float - `1.2`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *textLineHeight; - -#if TARGET_OS_IPHONE -/** - Offset distance of text from its anchor. - - This property is measured in ems. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 ems rightward and 0 - ems downward. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`, and - `textRadialOffset` is set to `nil`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textOffset; -#else -/** - Offset distance of text from its anchor. - - This property is measured in ems. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 ems rightward and 0 - ems upward. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`, and - `textRadialOffset` is set to `nil`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textOffset; -#endif - -/** - If true, icons will display without their corresponding text when the text - collides with other symbols and the icon does not. - - The default value of this property is an expression that evaluates to `NO`. Set - this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`, and - `iconImageName` is non-`nil`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant Boolean values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable, getter=isTextOptional) NSExpression *textOptional; - -/** - Size of the additional area around the text bounding box used for detecting - symbol collisions. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `2`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *textPadding; - -/** - Orientation of text when map is pitched. - - The default value of this property is an expression that evaluates to `auto`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `MGLTextPitchAlignment` values - * Any of the following constant string values: - * `map`: The text is aligned to the plane of the map. - * `viewport`: The text is aligned to the plane of the viewport. - * `auto`: Automatically matches the value of `text-rotation-alignment`. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *textPitchAlignment; - -/** - Radial offset of text, in the direction of the symbol's anchor. Useful in - combination with `textVariableAnchor`, which defaults to using the - two-dimensional `textOffset` if present. - - This property is measured in ems. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textRadialOffset; - -/** - Rotates the text clockwise. - - This property is measured in degrees. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - This attribute corresponds to the text-rotate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant numeric values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textRotation; - - -@property (nonatomic, null_resettable) NSExpression *textRotate __attribute__((unavailable("Use textRotation instead."))); - -/** - In combination with `symbolPlacement`, determines the rotation behavior of the - individual glyphs forming the text. - - The default value of this property is an expression that evaluates to `auto`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `MGLTextRotationAlignment` values - * Any of the following constant string values: - * `map`: When `symbol-placement` is set to `point`, aligns text east-west. - When `symbol-placement` is set to `line` or `line-center`, aligns text x-axes - with the line. - * `viewport`: Produces glyphs whose x-axes are aligned with the x-axis of the - viewport, regardless of the value of `symbol-placement`. - * `auto`: When `symbol-placement` is set to `point`, this is equivalent to - `viewport`. When `symbol-placement` is set to `line` or `line-center`, this is - equivalent to `map`. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *textRotationAlignment; - -/** - Specifies how to capitalize text. - - The default value of this property is an expression that evaluates to `none`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `MGLTextTransform` values - * Any of the following constant string values: - * `none`: The text is not altered. - * `uppercase`: Forces all letters to be displayed in uppercase. - * `lowercase`: Forces all letters to be displayed in lowercase. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textTransform; - -/** - To increase the chance of placing high-priority labels on the map, you can - provide an array of `textAnchor` locations: the renderer will attempt to place - the label at each location, in order, before moving onto the next label. Use - `textJustify: auto` to choose justification based on anchor position. To apply - an offset, use the `textRadialOffset` or the two-dimensional `textOffset`. - - This property is only applied to the style if `text` is non-`nil`, and - `symbolPlacement` is set to an expression that evaluates to or - `MGLSymbolPlacementPoint`. Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `MGLTextAnchor` array values - * Constant array, in which each element is any of the following constant string - values: - * `center`: The center of the text is placed closest to the anchor. - * `left`: The left side of the text is placed closest to the anchor. - * `right`: The right side of the text is placed closest to the anchor. - * `top`: The top of the text is placed closest to the anchor. - * `bottom`: The bottom of the text is placed closest to the anchor. - * `top-left`: The top left corner of the text is placed closest to the - anchor. - * `top-right`: The top right corner of the text is placed closest to the - anchor. - * `bottom-left`: The bottom left corner of the text is placed closest to the - anchor. - * `bottom-right`: The bottom right corner of the text is placed closest to - the anchor. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *textVariableAnchor; - -/** - The property allows control over a symbol's orientation. Note that the property - values act as a hint, so that a symbol whose language doesn’t support the - provided orientation will be laid out in its natural orientation. Example: - English point symbol will be rendered horizontally even if array value contains - single 'vertical' enum value. The order of elements in an array define priority - order for the placement of an orientation variant. - - This property is only applied to the style if `text` is non-`nil`, and - `symbolPlacement` is set to an expression that evaluates to or - `MGLSymbolPlacementPoint`. Otherwise, it is ignored. - - This attribute corresponds to the text-writing-mode - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `MGLTextWritingMode` array values - * Constant array, in which each element is any of the following constant string - values: - * `horizontal`: If a text's language supports horizontal writing mode, - symbols with point placement would be laid out horizontally. - * `vertical`: If a text's language supports vertical writing mode, symbols - with point placement would be laid out vertically. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *textWritingModes; - - -@property (nonatomic, null_resettable) NSExpression *textWritingMode __attribute__((unavailable("Use textWritingModes instead."))); - -#pragma mark - Accessing the Paint Attributes - -#if TARGET_OS_IPHONE -/** - The tint color to apply to the icon. The `iconImageName` property must be set - to a template image. - - The default value of this property is an expression that evaluates to - `UIColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *iconColor; -#else -/** - The tint color to apply to the icon. The `iconImageName` property must be set - to a template image. - - The default value of this property is an expression that evaluates to - `NSColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *iconColor; -#endif - -/** - The transition affecting any changes to this layer’s `iconColor` property. - - This property corresponds to the `icon-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition iconColorTransition; - -/** - Fade out the halo towards the outside. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *iconHaloBlur; - -/** - The transition affecting any changes to this layer’s `iconHaloBlur` property. - - This property corresponds to the `icon-halo-blur-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition iconHaloBlurTransition; - -#if TARGET_OS_IPHONE -/** - The color of the icon’s halo. The `iconImageName` property must be set to a - template image. - - The default value of this property is an expression that evaluates to - `UIColor.clearColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *iconHaloColor; -#else -/** - The color of the icon’s halo. The `iconImageName` property must be set to a - template image. - - The default value of this property is an expression that evaluates to - `NSColor.clearColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *iconHaloColor; -#endif - -/** - The transition affecting any changes to this layer’s `iconHaloColor` property. - - This property corresponds to the `icon-halo-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition iconHaloColorTransition; - -/** - Distance of halo to the icon outline. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *iconHaloWidth; - -/** - The transition affecting any changes to this layer’s `iconHaloWidth` property. - - This property corresponds to the `icon-halo-width-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition iconHaloWidthTransition; - -/** - The opacity at which the icon will be drawn. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *iconOpacity; - -/** - The transition affecting any changes to this layer’s `iconOpacity` property. - - This property corresponds to the `icon-opacity-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition iconOpacityTransition; - -#if TARGET_OS_IPHONE -/** - Distance that the icon's anchor is moved from its original placement. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 - points downward. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - This attribute corresponds to the icon-translate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *iconTranslation; -#else -/** - Distance that the icon's anchor is moved from its original placement. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 - points upward. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`. - Otherwise, it is ignored. - - This attribute corresponds to the icon-translate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *iconTranslation; -#endif - -/** - The transition affecting any changes to this layer’s `iconTranslation` property. - - This property corresponds to the `icon-translate-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition iconTranslationTransition; - -@property (nonatomic, null_resettable) NSExpression *iconTranslate __attribute__((unavailable("Use iconTranslation instead."))); - -/** - Controls the frame of reference for `iconTranslation`. - - The default value of this property is an expression that evaluates to `map`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `iconImageName` is non-`nil`, and - `iconTranslation` is non-`nil`. Otherwise, it is ignored. - - This attribute corresponds to the icon-translate-anchor - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `MGLIconTranslationAnchor` values - * Any of the following constant string values: - * `map`: Icons are translated relative to the map. - * `viewport`: Icons are translated relative to the viewport. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *iconTranslationAnchor; - -@property (nonatomic, null_resettable) NSExpression *iconTranslateAnchor __attribute__((unavailable("Use iconTranslationAnchor instead."))); - -#if TARGET_OS_IPHONE -/** - The color with which the text will be drawn. - - The default value of this property is an expression that evaluates to - `UIColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textColor; -#else -/** - The color with which the text will be drawn. - - The default value of this property is an expression that evaluates to - `NSColor.blackColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textColor; -#endif - -/** - The transition affecting any changes to this layer’s `textColor` property. - - This property corresponds to the `text-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition textColorTransition; - -/** - The halo's fadeout distance towards the outside. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textHaloBlur; - -/** - The transition affecting any changes to this layer’s `textHaloBlur` property. - - This property corresponds to the `text-halo-blur-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition textHaloBlurTransition; - -#if TARGET_OS_IPHONE -/** - The color of the text's halo, which helps it stand out from backgrounds. - - The default value of this property is an expression that evaluates to - `UIColor.clearColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `UIColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textHaloColor; -#else -/** - The color of the text's halo, which helps it stand out from backgrounds. - - The default value of this property is an expression that evaluates to - `NSColor.clearColor`. Set this property to `nil` to reset it to the default - value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant `NSColor` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textHaloColor; -#endif - -/** - The transition affecting any changes to this layer’s `textHaloColor` property. - - This property corresponds to the `text-halo-color-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition textHaloColorTransition; - -/** - Distance of halo to the font outline. Max text halo width is 1/4 of the - font-size. - - This property is measured in points. - - The default value of this property is an expression that evaluates to the float - `0`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values no less than 0 - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textHaloWidth; - -/** - The transition affecting any changes to this layer’s `textHaloWidth` property. - - This property corresponds to the `text-halo-width-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition textHaloWidthTransition; - -/** - The opacity at which the text will be drawn. - - The default value of this property is an expression that evaluates to the float - `1`. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - You can set this property to an expression containing any of the following: - - * Constant numeric values between 0 and 1 inclusive - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable and/or - feature attributes - */ -@property (nonatomic, null_resettable) NSExpression *textOpacity; - -/** - The transition affecting any changes to this layer’s `textOpacity` property. - - This property corresponds to the `text-opacity-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition textOpacityTransition; - -#if TARGET_OS_IPHONE -/** - Distance that the text's anchor is moved from its original placement. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 - points downward. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - This attribute corresponds to the text-translate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *textTranslation; -#else -/** - Distance that the text's anchor is moved from its original placement. - - This property is measured in points. - - The default value of this property is an expression that evaluates to an - `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 - points upward. Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`. Otherwise, - it is ignored. - - This attribute corresponds to the text-translate - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `CGVector` values - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Interpolation and step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation or step functions to - feature attributes. - */ -@property (nonatomic, null_resettable) NSExpression *textTranslation; -#endif - -/** - The transition affecting any changes to this layer’s `textTranslation` property. - - This property corresponds to the `text-translate-transition` property in the style JSON file format. -*/ -@property (nonatomic) MGLTransition textTranslationTransition; - -@property (nonatomic, null_resettable) NSExpression *textTranslate __attribute__((unavailable("Use textTranslation instead."))); - -/** - Controls the frame of reference for `textTranslation`. - - The default value of this property is an expression that evaluates to `map`. - Set this property to `nil` to reset it to the default value. - - This property is only applied to the style if `text` is non-`nil`, and - `textTranslation` is non-`nil`. Otherwise, it is ignored. - - This attribute corresponds to the text-translate-anchor - layout property in the Mapbox Style Specification. - - You can set this property to an expression containing any of the following: - - * Constant `MGLTextTranslationAnchor` values - * Any of the following constant string values: - * `map`: The text is translated relative to the map. - * `viewport`: The text is translated relative to the viewport. - * Predefined functions, including mathematical and string operators - * Conditional expressions - * Variable assignments and references to assigned variables - * Step functions applied to the `$zoomLevel` variable - - This property does not support applying interpolation functions to the - `$zoomLevel` variable or applying interpolation or step functions to feature - attributes. - */ -@property (nonatomic, null_resettable) NSExpression *textTranslationAnchor; - -@property (nonatomic, null_resettable) NSExpression *textTranslateAnchor __attribute__((unavailable("Use textTranslationAnchor instead."))); - -@end - -/** - Methods for wrapping an enumeration value for a style layer attribute in an - `MGLSymbolStyleLayer` object and unwrapping its raw value. - */ -@interface NSValue (MGLSymbolStyleLayerAdditions) - -#pragma mark Working with Symbol Style Layer Attribute Values - -/** - Creates a new value object containing the given `MGLIconAnchor` enumeration. - - @param iconAnchor The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLIconAnchor:(MGLIconAnchor)iconAnchor; - -/** - The `MGLIconAnchor` enumeration representation of the value. - */ -@property (readonly) MGLIconAnchor MGLIconAnchorValue; - -/** - Creates a new value object containing the given `MGLIconPitchAlignment` enumeration. - - @param iconPitchAlignment The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLIconPitchAlignment:(MGLIconPitchAlignment)iconPitchAlignment; - -/** - The `MGLIconPitchAlignment` enumeration representation of the value. - */ -@property (readonly) MGLIconPitchAlignment MGLIconPitchAlignmentValue; - -/** - Creates a new value object containing the given `MGLIconRotationAlignment` enumeration. - - @param iconRotationAlignment The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLIconRotationAlignment:(MGLIconRotationAlignment)iconRotationAlignment; - -/** - The `MGLIconRotationAlignment` enumeration representation of the value. - */ -@property (readonly) MGLIconRotationAlignment MGLIconRotationAlignmentValue; - -/** - Creates a new value object containing the given `MGLIconTextFit` enumeration. - - @param iconTextFit The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLIconTextFit:(MGLIconTextFit)iconTextFit; - -/** - The `MGLIconTextFit` enumeration representation of the value. - */ -@property (readonly) MGLIconTextFit MGLIconTextFitValue; - -/** - Creates a new value object containing the given `MGLSymbolPlacement` enumeration. - - @param symbolPlacement The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLSymbolPlacement:(MGLSymbolPlacement)symbolPlacement; - -/** - The `MGLSymbolPlacement` enumeration representation of the value. - */ -@property (readonly) MGLSymbolPlacement MGLSymbolPlacementValue; - -/** - Creates a new value object containing the given `MGLSymbolZOrder` enumeration. - - @param symbolZOrder The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLSymbolZOrder:(MGLSymbolZOrder)symbolZOrder; - -/** - The `MGLSymbolZOrder` enumeration representation of the value. - */ -@property (readonly) MGLSymbolZOrder MGLSymbolZOrderValue; - -/** - Creates a new value object containing the given `MGLTextAnchor` enumeration. - - @param textAnchor The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLTextAnchor:(MGLTextAnchor)textAnchor; - -/** - The `MGLTextAnchor` enumeration representation of the value. - */ -@property (readonly) MGLTextAnchor MGLTextAnchorValue; - -/** - Creates a new value object containing the given `MGLTextJustification` enumeration. - - @param textJustification The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLTextJustification:(MGLTextJustification)textJustification; - -/** - The `MGLTextJustification` enumeration representation of the value. - */ -@property (readonly) MGLTextJustification MGLTextJustificationValue; - -/** - Creates a new value object containing the given `MGLTextPitchAlignment` enumeration. - - @param textPitchAlignment The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLTextPitchAlignment:(MGLTextPitchAlignment)textPitchAlignment; - -/** - The `MGLTextPitchAlignment` enumeration representation of the value. - */ -@property (readonly) MGLTextPitchAlignment MGLTextPitchAlignmentValue; - -/** - Creates a new value object containing the given `MGLTextRotationAlignment` enumeration. - - @param textRotationAlignment The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLTextRotationAlignment:(MGLTextRotationAlignment)textRotationAlignment; - -/** - The `MGLTextRotationAlignment` enumeration representation of the value. - */ -@property (readonly) MGLTextRotationAlignment MGLTextRotationAlignmentValue; - -/** - Creates a new value object containing the given `MGLTextTransform` enumeration. - - @param textTransform The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLTextTransform:(MGLTextTransform)textTransform; - -/** - The `MGLTextTransform` enumeration representation of the value. - */ -@property (readonly) MGLTextTransform MGLTextTransformValue; - -/** - Creates a new value object containing the given `MGLTextWritingMode` enumeration. - - @param textWritingModes The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLTextWritingMode:(MGLTextWritingMode)textWritingModes; - -/** - The `MGLTextWritingMode` enumeration representation of the value. - */ -@property (readonly) MGLTextWritingMode MGLTextWritingModeValue; - -/** - Creates a new value object containing the given `MGLIconTranslationAnchor` enumeration. - - @param iconTranslationAnchor The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLIconTranslationAnchor:(MGLIconTranslationAnchor)iconTranslationAnchor; - -/** - The `MGLIconTranslationAnchor` enumeration representation of the value. - */ -@property (readonly) MGLIconTranslationAnchor MGLIconTranslationAnchorValue; - -/** - Creates a new value object containing the given `MGLTextTranslationAnchor` enumeration. - - @param textTranslationAnchor The value for the new object. - @return A new value object that contains the enumeration value. - */ -+ (instancetype)valueWithMGLTextTranslationAnchor:(MGLTextTranslationAnchor)textTranslationAnchor; - -/** - The `MGLTextTranslationAnchor` enumeration representation of the value. - */ -@property (readonly) MGLTextTranslationAnchor MGLTextTranslationAnchorValue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLSymbolStyleLayer.mm b/platform/darwin/src/MGLSymbolStyleLayer.mm deleted file mode 100644 index 966386e0f22..00000000000 --- a/platform/darwin/src/MGLSymbolStyleLayer.mm +++ /dev/null @@ -1,1670 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLSource.h" -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLStyleLayer_Private.h" -#import "MGLStyleValue_Private.h" -#import "MGLSymbolStyleLayer.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLSymbolStyleLayer_Private.h" - -#include -#include - - -namespace mbgl { - - MBGL_DEFINE_ENUM(MGLIconAnchor, { - { MGLIconAnchorCenter, "center" }, - { MGLIconAnchorLeft, "left" }, - { MGLIconAnchorRight, "right" }, - { MGLIconAnchorTop, "top" }, - { MGLIconAnchorBottom, "bottom" }, - { MGLIconAnchorTopLeft, "top-left" }, - { MGLIconAnchorTopRight, "top-right" }, - { MGLIconAnchorBottomLeft, "bottom-left" }, - { MGLIconAnchorBottomRight, "bottom-right" }, - }); - - MBGL_DEFINE_ENUM(MGLIconPitchAlignment, { - { MGLIconPitchAlignmentMap, "map" }, - { MGLIconPitchAlignmentViewport, "viewport" }, - { MGLIconPitchAlignmentAuto, "auto" }, - }); - - MBGL_DEFINE_ENUM(MGLIconRotationAlignment, { - { MGLIconRotationAlignmentMap, "map" }, - { MGLIconRotationAlignmentViewport, "viewport" }, - { MGLIconRotationAlignmentAuto, "auto" }, - }); - - MBGL_DEFINE_ENUM(MGLIconTextFit, { - { MGLIconTextFitNone, "none" }, - { MGLIconTextFitWidth, "width" }, - { MGLIconTextFitHeight, "height" }, - { MGLIconTextFitBoth, "both" }, - }); - - MBGL_DEFINE_ENUM(MGLSymbolPlacement, { - { MGLSymbolPlacementPoint, "point" }, - { MGLSymbolPlacementLine, "line" }, - { MGLSymbolPlacementLineCenter, "line-center" }, - }); - - MBGL_DEFINE_ENUM(MGLSymbolZOrder, { - { MGLSymbolZOrderAuto, "auto" }, - { MGLSymbolZOrderViewportY, "viewport-y" }, - { MGLSymbolZOrderSource, "source" }, - }); - - MBGL_DEFINE_ENUM(MGLTextAnchor, { - { MGLTextAnchorCenter, "center" }, - { MGLTextAnchorLeft, "left" }, - { MGLTextAnchorRight, "right" }, - { MGLTextAnchorTop, "top" }, - { MGLTextAnchorBottom, "bottom" }, - { MGLTextAnchorTopLeft, "top-left" }, - { MGLTextAnchorTopRight, "top-right" }, - { MGLTextAnchorBottomLeft, "bottom-left" }, - { MGLTextAnchorBottomRight, "bottom-right" }, - }); - - MBGL_DEFINE_ENUM(MGLTextJustification, { - { MGLTextJustificationAuto, "auto" }, - { MGLTextJustificationLeft, "left" }, - { MGLTextJustificationCenter, "center" }, - { MGLTextJustificationRight, "right" }, - }); - - MBGL_DEFINE_ENUM(MGLTextPitchAlignment, { - { MGLTextPitchAlignmentMap, "map" }, - { MGLTextPitchAlignmentViewport, "viewport" }, - { MGLTextPitchAlignmentAuto, "auto" }, - }); - - MBGL_DEFINE_ENUM(MGLTextRotationAlignment, { - { MGLTextRotationAlignmentMap, "map" }, - { MGLTextRotationAlignmentViewport, "viewport" }, - { MGLTextRotationAlignmentAuto, "auto" }, - }); - - MBGL_DEFINE_ENUM(MGLTextTransform, { - { MGLTextTransformNone, "none" }, - { MGLTextTransformUppercase, "uppercase" }, - { MGLTextTransformLowercase, "lowercase" }, - }); - - MBGL_DEFINE_ENUM(MGLTextWritingMode, { - { MGLTextWritingModeHorizontal, "horizontal" }, - { MGLTextWritingModeVertical, "vertical" }, - }); - - MBGL_DEFINE_ENUM(MGLIconTranslationAnchor, { - { MGLIconTranslationAnchorMap, "map" }, - { MGLIconTranslationAnchorViewport, "viewport" }, - }); - - MBGL_DEFINE_ENUM(MGLTextTranslationAnchor, { - { MGLTextTranslationAnchorMap, "map" }, - { MGLTextTranslationAnchorViewport, "viewport" }, - }); - -} - -@interface MGLSymbolStyleLayer () - -@property (nonatomic, readonly) mbgl::style::SymbolLayer *rawLayer; - -@end - -@implementation MGLSymbolStyleLayer - -- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source -{ - MGLLogDebug(@"Initializing %@ with identifier: %@ source: %@", NSStringFromClass([self class]), identifier, source); - auto layer = std::make_unique(identifier.UTF8String, source.identifier.UTF8String); - return self = [super initWithPendingLayer:std::move(layer)]; -} - -- (mbgl::style::SymbolLayer *)rawLayer -{ - return (mbgl::style::SymbolLayer *)super.rawLayer; -} - -- (NSString *)sourceIdentifier -{ - MGLAssertStyleLayerIsValid(); - - return @(self.rawLayer->getSourceID().c_str()); -} - -- (NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - - auto layerID = self.rawLayer->getSourceLayer(); - return layerID.empty() ? nil : @(layerID.c_str()); -} - -- (void)setSourceLayerIdentifier:(NSString *)sourceLayerIdentifier -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting sourceLayerIdentifier: %@", sourceLayerIdentifier); - - self.rawLayer->setSourceLayer(sourceLayerIdentifier.UTF8String ?: ""); -} - -- (void)setPredicate:(NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting predicate: %@", predicate); - - self.rawLayer->setFilter(predicate ? predicate.mgl_filter : mbgl::style::Filter()); -} - -- (NSPredicate *)predicate -{ - MGLAssertStyleLayerIsValid(); - - return [NSPredicate mgl_predicateWithFilter:self.rawLayer->getFilter()]; -} - -#pragma mark - Accessing the Layout Attributes - -- (void)setIconAllowsOverlap:(NSExpression *)iconAllowsOverlap { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconAllowsOverlap: %@", iconAllowsOverlap); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconAllowsOverlap, false); - self.rawLayer->setIconAllowOverlap(mbglValue); -} - -- (NSExpression *)iconAllowsOverlap { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconAllowOverlap(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconAllowOverlap(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconAllowOverlap:(NSExpression *)iconAllowOverlap { -} - -- (NSExpression *)iconAllowOverlap { - return self.iconAllowsOverlap; -} - -- (void)setIconAnchor:(NSExpression *)iconAnchor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconAnchor: %@", iconAnchor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconAnchor, true); - self.rawLayer->setIconAnchor(mbglValue); -} - -- (NSExpression *)iconAnchor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconAnchor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconAnchor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconIgnoresPlacement:(NSExpression *)iconIgnoresPlacement { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconIgnoresPlacement: %@", iconIgnoresPlacement); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconIgnoresPlacement, false); - self.rawLayer->setIconIgnorePlacement(mbglValue); -} - -- (NSExpression *)iconIgnoresPlacement { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconIgnorePlacement(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconIgnorePlacement(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconIgnorePlacement:(NSExpression *)iconIgnorePlacement { -} - -- (NSExpression *)iconIgnorePlacement { - return self.iconIgnoresPlacement; -} - -- (void)setIconImageName:(NSExpression *)iconImageName { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconImageName: %@", iconImageName); - - if (iconImageName && iconImageName.expressionType == NSConstantValueExpressionType) { - std::string string = ((NSString *)iconImageName.constantValue).UTF8String; - if (mbgl::style::conversion::hasTokens(string)) { - self.rawLayer->setIconImage(mbgl::style::PropertyValue( - mbgl::style::conversion::convertTokenStringToImageExpression(string))); - return; - } - } - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconImageName, true); - self.rawLayer->setIconImage(mbglValue); -} - -- (NSExpression *)iconImageName { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconImage(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconImage(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconImage:(NSExpression *)iconImage { -} - -- (NSExpression *)iconImage { - return self.iconImageName; -} - -- (void)setIconOffset:(NSExpression *)iconOffset { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconOffset: %@", iconOffset); - - auto mbglValue = MGLStyleValueTransformer, NSValue *>().toPropertyValue>>(iconOffset, true); - self.rawLayer->setIconOffset(mbglValue); -} - -- (NSExpression *)iconOffset { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconOffset(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconOffset(); - } - return MGLStyleValueTransformer, NSValue *>().toExpression(propertyValue); -} - -- (void)setIconOptional:(NSExpression *)iconOptional { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconOptional: %@", iconOptional); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconOptional, false); - self.rawLayer->setIconOptional(mbglValue); -} - -- (NSExpression *)isIconOptional { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconOptional(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconOptional(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconPadding:(NSExpression *)iconPadding { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconPadding: %@", iconPadding); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconPadding, false); - self.rawLayer->setIconPadding(mbglValue); -} - -- (NSExpression *)iconPadding { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconPadding(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconPadding(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconPitchAlignment:(NSExpression *)iconPitchAlignment { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconPitchAlignment: %@", iconPitchAlignment); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconPitchAlignment, false); - self.rawLayer->setIconPitchAlignment(mbglValue); -} - -- (NSExpression *)iconPitchAlignment { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconPitchAlignment(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconPitchAlignment(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconRotation:(NSExpression *)iconRotation { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconRotation: %@", iconRotation); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconRotation, true); - self.rawLayer->setIconRotate(mbglValue); -} - -- (NSExpression *)iconRotation { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconRotate(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconRotate(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconRotate:(NSExpression *)iconRotate { -} - -- (NSExpression *)iconRotate { - return self.iconRotation; -} - -- (void)setIconRotationAlignment:(NSExpression *)iconRotationAlignment { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconRotationAlignment: %@", iconRotationAlignment); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconRotationAlignment, false); - self.rawLayer->setIconRotationAlignment(mbglValue); -} - -- (NSExpression *)iconRotationAlignment { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconRotationAlignment(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconRotationAlignment(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconScale:(NSExpression *)iconScale { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconScale: %@", iconScale); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconScale, true); - self.rawLayer->setIconSize(mbglValue); -} - -- (NSExpression *)iconScale { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconSize(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconSize(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconSize:(NSExpression *)iconSize { -} - -- (NSExpression *)iconSize { - return self.iconScale; -} - -- (void)setIconTextFit:(NSExpression *)iconTextFit { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconTextFit: %@", iconTextFit); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconTextFit, false); - self.rawLayer->setIconTextFit(mbglValue); -} - -- (NSExpression *)iconTextFit { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconTextFit(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconTextFit(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconTextFitPadding:(NSExpression *)iconTextFitPadding { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconTextFitPadding: %@", iconTextFitPadding); - - auto mbglValue = MGLStyleValueTransformer, NSValue *>().toPropertyValue>>(iconTextFitPadding, false); - self.rawLayer->setIconTextFitPadding(mbglValue); -} - -- (NSExpression *)iconTextFitPadding { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconTextFitPadding(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconTextFitPadding(); - } - return MGLStyleValueTransformer, NSValue *>().toExpression(propertyValue); -} - -- (void)setKeepsIconUpright:(NSExpression *)keepsIconUpright { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting keepsIconUpright: %@", keepsIconUpright); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(keepsIconUpright, false); - self.rawLayer->setIconKeepUpright(mbglValue); -} - -- (NSExpression *)keepsIconUpright { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconKeepUpright(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconKeepUpright(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconKeepUpright:(NSExpression *)iconKeepUpright { -} - -- (NSExpression *)iconKeepUpright { - return self.keepsIconUpright; -} - -- (void)setKeepsTextUpright:(NSExpression *)keepsTextUpright { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting keepsTextUpright: %@", keepsTextUpright); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(keepsTextUpright, false); - self.rawLayer->setTextKeepUpright(mbglValue); -} - -- (NSExpression *)keepsTextUpright { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextKeepUpright(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextKeepUpright(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextKeepUpright:(NSExpression *)textKeepUpright { -} - -- (NSExpression *)textKeepUpright { - return self.keepsTextUpright; -} - -- (void)setMaximumTextAngle:(NSExpression *)maximumTextAngle { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting maximumTextAngle: %@", maximumTextAngle); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(maximumTextAngle, false); - self.rawLayer->setTextMaxAngle(mbglValue); -} - -- (NSExpression *)maximumTextAngle { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextMaxAngle(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextMaxAngle(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextMaxAngle:(NSExpression *)textMaxAngle { -} - -- (NSExpression *)textMaxAngle { - return self.maximumTextAngle; -} - -- (void)setMaximumTextWidth:(NSExpression *)maximumTextWidth { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting maximumTextWidth: %@", maximumTextWidth); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(maximumTextWidth, true); - self.rawLayer->setTextMaxWidth(mbglValue); -} - -- (NSExpression *)maximumTextWidth { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextMaxWidth(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextMaxWidth(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextMaxWidth:(NSExpression *)textMaxWidth { -} - -- (NSExpression *)textMaxWidth { - return self.maximumTextWidth; -} - -- (void)setSymbolAvoidsEdges:(NSExpression *)symbolAvoidsEdges { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting symbolAvoidsEdges: %@", symbolAvoidsEdges); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(symbolAvoidsEdges, false); - self.rawLayer->setSymbolAvoidEdges(mbglValue); -} - -- (NSExpression *)symbolAvoidsEdges { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getSymbolAvoidEdges(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultSymbolAvoidEdges(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setSymbolAvoidEdges:(NSExpression *)symbolAvoidEdges { -} - -- (NSExpression *)symbolAvoidEdges { - return self.symbolAvoidsEdges; -} - -- (void)setSymbolPlacement:(NSExpression *)symbolPlacement { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting symbolPlacement: %@", symbolPlacement); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(symbolPlacement, false); - self.rawLayer->setSymbolPlacement(mbglValue); -} - -- (NSExpression *)symbolPlacement { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getSymbolPlacement(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultSymbolPlacement(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setSymbolSortKey:(NSExpression *)symbolSortKey { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting symbolSortKey: %@", symbolSortKey); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(symbolSortKey, true); - self.rawLayer->setSymbolSortKey(mbglValue); -} - -- (NSExpression *)symbolSortKey { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getSymbolSortKey(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultSymbolSortKey(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setSymbolSpacing:(NSExpression *)symbolSpacing { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting symbolSpacing: %@", symbolSpacing); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(symbolSpacing, false); - self.rawLayer->setSymbolSpacing(mbglValue); -} - -- (NSExpression *)symbolSpacing { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getSymbolSpacing(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultSymbolSpacing(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setSymbolZOrder:(NSExpression *)symbolZOrder { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting symbolZOrder: %@", symbolZOrder); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(symbolZOrder, false); - self.rawLayer->setSymbolZOrder(mbglValue); -} - -- (NSExpression *)symbolZOrder { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getSymbolZOrder(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultSymbolZOrder(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setText:(NSExpression *)text { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting text: %@", text); - - if (text && text.expressionType == NSConstantValueExpressionType) { - std::string string = ((NSString *)text.constantValue).UTF8String; - if (mbgl::style::conversion::hasTokens(string)) { - self.rawLayer->setTextField(mbgl::style::PropertyValue( - mbgl::style::conversion::convertTokenStringToFormatExpression(string))); - return; - } - } - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(text, true); - self.rawLayer->setTextField(mbglValue); -} - -- (NSExpression *)text { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextField(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextField(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextField:(NSExpression *)textField { -} - -- (NSExpression *)textField { - return self.text; -} - -- (void)setTextAllowsOverlap:(NSExpression *)textAllowsOverlap { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textAllowsOverlap: %@", textAllowsOverlap); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textAllowsOverlap, false); - self.rawLayer->setTextAllowOverlap(mbglValue); -} - -- (NSExpression *)textAllowsOverlap { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextAllowOverlap(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextAllowOverlap(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextAllowOverlap:(NSExpression *)textAllowOverlap { -} - -- (NSExpression *)textAllowOverlap { - return self.textAllowsOverlap; -} - -- (void)setTextAnchor:(NSExpression *)textAnchor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textAnchor: %@", textAnchor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textAnchor, true); - self.rawLayer->setTextAnchor(mbglValue); -} - -- (NSExpression *)textAnchor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextAnchor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextAnchor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextFontNames:(NSExpression *)textFontNames { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textFontNames: %@", textFontNames); - - auto mbglValue = MGLStyleValueTransformer, NSArray *, std::string>().toPropertyValue>>(textFontNames, true); - self.rawLayer->setTextFont(mbglValue); -} - -- (NSExpression *)textFontNames { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextFont(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextFont(); - } - return MGLStyleValueTransformer, NSArray *, std::string>().toExpression(propertyValue); -} - -- (void)setTextFont:(NSExpression *)textFont { -} - -- (NSExpression *)textFont { - return self.textFontNames; -} - -- (void)setTextFontSize:(NSExpression *)textFontSize { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textFontSize: %@", textFontSize); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textFontSize, true); - self.rawLayer->setTextSize(mbglValue); -} - -- (NSExpression *)textFontSize { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextSize(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextSize(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextSize:(NSExpression *)textSize { -} - -- (NSExpression *)textSize { - return self.textFontSize; -} - -- (void)setTextIgnoresPlacement:(NSExpression *)textIgnoresPlacement { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textIgnoresPlacement: %@", textIgnoresPlacement); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textIgnoresPlacement, false); - self.rawLayer->setTextIgnorePlacement(mbglValue); -} - -- (NSExpression *)textIgnoresPlacement { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextIgnorePlacement(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextIgnorePlacement(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextIgnorePlacement:(NSExpression *)textIgnorePlacement { -} - -- (NSExpression *)textIgnorePlacement { - return self.textIgnoresPlacement; -} - -- (void)setTextJustification:(NSExpression *)textJustification { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textJustification: %@", textJustification); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textJustification, true); - self.rawLayer->setTextJustify(mbglValue); -} - -- (NSExpression *)textJustification { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextJustify(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextJustify(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextJustify:(NSExpression *)textJustify { -} - -- (NSExpression *)textJustify { - return self.textJustification; -} - -- (void)setTextLetterSpacing:(NSExpression *)textLetterSpacing { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textLetterSpacing: %@", textLetterSpacing); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textLetterSpacing, true); - self.rawLayer->setTextLetterSpacing(mbglValue); -} - -- (NSExpression *)textLetterSpacing { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextLetterSpacing(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextLetterSpacing(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextLineHeight:(NSExpression *)textLineHeight { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textLineHeight: %@", textLineHeight); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textLineHeight, false); - self.rawLayer->setTextLineHeight(mbglValue); -} - -- (NSExpression *)textLineHeight { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextLineHeight(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextLineHeight(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextOffset:(NSExpression *)textOffset { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textOffset: %@", textOffset); - - auto mbglValue = MGLStyleValueTransformer, NSValue *>().toPropertyValue>>(textOffset, true); - self.rawLayer->setTextOffset(mbglValue); -} - -- (NSExpression *)textOffset { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextOffset(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextOffset(); - } - return MGLStyleValueTransformer, NSValue *>().toExpression(propertyValue); -} - -- (void)setTextOptional:(NSExpression *)textOptional { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textOptional: %@", textOptional); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textOptional, false); - self.rawLayer->setTextOptional(mbglValue); -} - -- (NSExpression *)isTextOptional { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextOptional(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextOptional(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextPadding:(NSExpression *)textPadding { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textPadding: %@", textPadding); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textPadding, false); - self.rawLayer->setTextPadding(mbglValue); -} - -- (NSExpression *)textPadding { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextPadding(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextPadding(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextPitchAlignment:(NSExpression *)textPitchAlignment { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textPitchAlignment: %@", textPitchAlignment); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textPitchAlignment, false); - self.rawLayer->setTextPitchAlignment(mbglValue); -} - -- (NSExpression *)textPitchAlignment { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextPitchAlignment(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextPitchAlignment(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextRadialOffset:(NSExpression *)textRadialOffset { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textRadialOffset: %@", textRadialOffset); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textRadialOffset, true); - self.rawLayer->setTextRadialOffset(mbglValue); -} - -- (NSExpression *)textRadialOffset { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextRadialOffset(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextRadialOffset(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextRotation:(NSExpression *)textRotation { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textRotation: %@", textRotation); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textRotation, true); - self.rawLayer->setTextRotate(mbglValue); -} - -- (NSExpression *)textRotation { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextRotate(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextRotate(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextRotate:(NSExpression *)textRotate { -} - -- (NSExpression *)textRotate { - return self.textRotation; -} - -- (void)setTextRotationAlignment:(NSExpression *)textRotationAlignment { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textRotationAlignment: %@", textRotationAlignment); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textRotationAlignment, false); - self.rawLayer->setTextRotationAlignment(mbglValue); -} - -- (NSExpression *)textRotationAlignment { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextRotationAlignment(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextRotationAlignment(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextTransform:(NSExpression *)textTransform { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textTransform: %@", textTransform); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textTransform, true); - self.rawLayer->setTextTransform(mbglValue); -} - -- (NSExpression *)textTransform { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextTransform(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextTransform(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextVariableAnchor:(NSExpression *)textVariableAnchor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textVariableAnchor: %@", textVariableAnchor); - - auto mbglValue = MGLStyleValueTransformer, NSArray *, mbgl::style::SymbolAnchorType, MGLTextAnchor>().toPropertyValue>>(textVariableAnchor, false); - self.rawLayer->setTextVariableAnchor(mbglValue); -} - -- (NSExpression *)textVariableAnchor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextVariableAnchor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextVariableAnchor(); - } - return MGLStyleValueTransformer, NSArray *, mbgl::style::SymbolAnchorType, MGLTextAnchor>().toExpression(propertyValue); -} - -- (void)setTextWritingModes:(NSExpression *)textWritingModes { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textWritingModes: %@", textWritingModes); - - auto mbglValue = MGLStyleValueTransformer, NSArray *, mbgl::style::TextWritingModeType, MGLTextWritingMode>().toPropertyValue>>(textWritingModes, false); - self.rawLayer->setTextWritingMode(mbglValue); -} - -- (NSExpression *)textWritingModes { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextWritingMode(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextWritingMode(); - } - return MGLStyleValueTransformer, NSArray *, mbgl::style::TextWritingModeType, MGLTextWritingMode>().toExpression(propertyValue); -} - -- (void)setTextWritingMode:(NSExpression *)textWritingMode { -} - -- (NSExpression *)textWritingMode { - return self.textWritingModes; -} - -#pragma mark - Accessing the Paint Attributes - -- (void)setIconColor:(NSExpression *)iconColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconColor: %@", iconColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconColor, true); - self.rawLayer->setIconColor(mbglValue); -} - -- (NSExpression *)iconColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setIconColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)iconColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getIconColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setIconHaloBlur:(NSExpression *)iconHaloBlur { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconHaloBlur: %@", iconHaloBlur); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconHaloBlur, true); - self.rawLayer->setIconHaloBlur(mbglValue); -} - -- (NSExpression *)iconHaloBlur { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconHaloBlur(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconHaloBlur(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconHaloBlurTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconHaloBlurTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setIconHaloBlurTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)iconHaloBlurTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getIconHaloBlurTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setIconHaloColor:(NSExpression *)iconHaloColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconHaloColor: %@", iconHaloColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconHaloColor, true); - self.rawLayer->setIconHaloColor(mbglValue); -} - -- (NSExpression *)iconHaloColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconHaloColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconHaloColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconHaloColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconHaloColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setIconHaloColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)iconHaloColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getIconHaloColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setIconHaloWidth:(NSExpression *)iconHaloWidth { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconHaloWidth: %@", iconHaloWidth); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconHaloWidth, true); - self.rawLayer->setIconHaloWidth(mbglValue); -} - -- (NSExpression *)iconHaloWidth { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconHaloWidth(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconHaloWidth(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconHaloWidthTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconHaloWidthTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setIconHaloWidthTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)iconHaloWidthTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getIconHaloWidthTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setIconOpacity:(NSExpression *)iconOpacity { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconOpacity: %@", iconOpacity); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconOpacity, true); - self.rawLayer->setIconOpacity(mbglValue); -} - -- (NSExpression *)iconOpacity { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconOpacity(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconOpacity(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconOpacityTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconOpacityTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setIconOpacityTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)iconOpacityTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getIconOpacityTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setIconTranslation:(NSExpression *)iconTranslation { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconTranslation: %@", iconTranslation); - - auto mbglValue = MGLStyleValueTransformer, NSValue *>().toPropertyValue>>(iconTranslation, false); - self.rawLayer->setIconTranslate(mbglValue); -} - -- (NSExpression *)iconTranslation { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconTranslate(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconTranslate(); - } - return MGLStyleValueTransformer, NSValue *>().toExpression(propertyValue); -} - -- (void)setIconTranslationTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconTranslationTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setIconTranslateTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)iconTranslationTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getIconTranslateTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setIconTranslate:(NSExpression *)iconTranslate { -} - -- (NSExpression *)iconTranslate { - return self.iconTranslation; -} - -- (void)setIconTranslationAnchor:(NSExpression *)iconTranslationAnchor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting iconTranslationAnchor: %@", iconTranslationAnchor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(iconTranslationAnchor, false); - self.rawLayer->setIconTranslateAnchor(mbglValue); -} - -- (NSExpression *)iconTranslationAnchor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getIconTranslateAnchor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultIconTranslateAnchor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setIconTranslateAnchor:(NSExpression *)iconTranslateAnchor { -} - -- (NSExpression *)iconTranslateAnchor { - return self.iconTranslationAnchor; -} - -- (void)setTextColor:(NSExpression *)textColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textColor: %@", textColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textColor, true); - self.rawLayer->setTextColor(mbglValue); -} - -- (NSExpression *)textColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setTextColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)textColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getTextColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setTextHaloBlur:(NSExpression *)textHaloBlur { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textHaloBlur: %@", textHaloBlur); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textHaloBlur, true); - self.rawLayer->setTextHaloBlur(mbglValue); -} - -- (NSExpression *)textHaloBlur { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextHaloBlur(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextHaloBlur(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextHaloBlurTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textHaloBlurTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setTextHaloBlurTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)textHaloBlurTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getTextHaloBlurTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setTextHaloColor:(NSExpression *)textHaloColor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textHaloColor: %@", textHaloColor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textHaloColor, true); - self.rawLayer->setTextHaloColor(mbglValue); -} - -- (NSExpression *)textHaloColor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextHaloColor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextHaloColor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextHaloColorTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textHaloColorTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setTextHaloColorTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)textHaloColorTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getTextHaloColorTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setTextHaloWidth:(NSExpression *)textHaloWidth { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textHaloWidth: %@", textHaloWidth); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textHaloWidth, true); - self.rawLayer->setTextHaloWidth(mbglValue); -} - -- (NSExpression *)textHaloWidth { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextHaloWidth(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextHaloWidth(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextHaloWidthTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textHaloWidthTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setTextHaloWidthTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)textHaloWidthTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getTextHaloWidthTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setTextOpacity:(NSExpression *)textOpacity { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textOpacity: %@", textOpacity); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textOpacity, true); - self.rawLayer->setTextOpacity(mbglValue); -} - -- (NSExpression *)textOpacity { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextOpacity(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextOpacity(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextOpacityTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textOpacityTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setTextOpacityTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)textOpacityTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getTextOpacityTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setTextTranslation:(NSExpression *)textTranslation { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textTranslation: %@", textTranslation); - - auto mbglValue = MGLStyleValueTransformer, NSValue *>().toPropertyValue>>(textTranslation, false); - self.rawLayer->setTextTranslate(mbglValue); -} - -- (NSExpression *)textTranslation { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextTranslate(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextTranslate(); - } - return MGLStyleValueTransformer, NSValue *>().toExpression(propertyValue); -} - -- (void)setTextTranslationTransition:(MGLTransition )transition { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textTranslationTransition: %@", MGLStringFromMGLTransition(transition)); - - self.rawLayer->setTextTranslateTransition(MGLOptionsFromTransition(transition)); -} - -- (MGLTransition)textTranslationTransition { - MGLAssertStyleLayerIsValid(); - - mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getTextTranslateTransition(); - - return MGLTransitionFromOptions(transitionOptions); -} - -- (void)setTextTranslate:(NSExpression *)textTranslate { -} - -- (NSExpression *)textTranslate { - return self.textTranslation; -} - -- (void)setTextTranslationAnchor:(NSExpression *)textTranslationAnchor { - MGLAssertStyleLayerIsValid(); - MGLLogDebug(@"Setting textTranslationAnchor: %@", textTranslationAnchor); - - auto mbglValue = MGLStyleValueTransformer().toPropertyValue>(textTranslationAnchor, false); - self.rawLayer->setTextTranslateAnchor(mbglValue); -} - -- (NSExpression *)textTranslationAnchor { - MGLAssertStyleLayerIsValid(); - - auto propertyValue = self.rawLayer->getTextTranslateAnchor(); - if (propertyValue.isUndefined()) { - propertyValue = self.rawLayer->getDefaultTextTranslateAnchor(); - } - return MGLStyleValueTransformer().toExpression(propertyValue); -} - -- (void)setTextTranslateAnchor:(NSExpression *)textTranslateAnchor { -} - -- (NSExpression *)textTranslateAnchor { - return self.textTranslationAnchor; -} - -@end - -@implementation NSValue (MGLSymbolStyleLayerAdditions) - -+ (NSValue *)valueWithMGLIconAnchor:(MGLIconAnchor)iconAnchor { - return [NSValue value:&iconAnchor withObjCType:@encode(MGLIconAnchor)]; -} - -- (MGLIconAnchor)MGLIconAnchorValue { - MGLIconAnchor iconAnchor; - [self getValue:&iconAnchor]; - return iconAnchor; -} - -+ (NSValue *)valueWithMGLIconPitchAlignment:(MGLIconPitchAlignment)iconPitchAlignment { - return [NSValue value:&iconPitchAlignment withObjCType:@encode(MGLIconPitchAlignment)]; -} - -- (MGLIconPitchAlignment)MGLIconPitchAlignmentValue { - MGLIconPitchAlignment iconPitchAlignment; - [self getValue:&iconPitchAlignment]; - return iconPitchAlignment; -} - -+ (NSValue *)valueWithMGLIconRotationAlignment:(MGLIconRotationAlignment)iconRotationAlignment { - return [NSValue value:&iconRotationAlignment withObjCType:@encode(MGLIconRotationAlignment)]; -} - -- (MGLIconRotationAlignment)MGLIconRotationAlignmentValue { - MGLIconRotationAlignment iconRotationAlignment; - [self getValue:&iconRotationAlignment]; - return iconRotationAlignment; -} - -+ (NSValue *)valueWithMGLIconTextFit:(MGLIconTextFit)iconTextFit { - return [NSValue value:&iconTextFit withObjCType:@encode(MGLIconTextFit)]; -} - -- (MGLIconTextFit)MGLIconTextFitValue { - MGLIconTextFit iconTextFit; - [self getValue:&iconTextFit]; - return iconTextFit; -} - -+ (NSValue *)valueWithMGLSymbolPlacement:(MGLSymbolPlacement)symbolPlacement { - return [NSValue value:&symbolPlacement withObjCType:@encode(MGLSymbolPlacement)]; -} - -- (MGLSymbolPlacement)MGLSymbolPlacementValue { - MGLSymbolPlacement symbolPlacement; - [self getValue:&symbolPlacement]; - return symbolPlacement; -} - -+ (NSValue *)valueWithMGLSymbolZOrder:(MGLSymbolZOrder)symbolZOrder { - return [NSValue value:&symbolZOrder withObjCType:@encode(MGLSymbolZOrder)]; -} - -- (MGLSymbolZOrder)MGLSymbolZOrderValue { - MGLSymbolZOrder symbolZOrder; - [self getValue:&symbolZOrder]; - return symbolZOrder; -} - -+ (NSValue *)valueWithMGLTextAnchor:(MGLTextAnchor)textAnchor { - return [NSValue value:&textAnchor withObjCType:@encode(MGLTextAnchor)]; -} - -- (MGLTextAnchor)MGLTextAnchorValue { - MGLTextAnchor textAnchor; - [self getValue:&textAnchor]; - return textAnchor; -} - -+ (NSValue *)valueWithMGLTextJustification:(MGLTextJustification)textJustification { - return [NSValue value:&textJustification withObjCType:@encode(MGLTextJustification)]; -} - -- (MGLTextJustification)MGLTextJustificationValue { - MGLTextJustification textJustification; - [self getValue:&textJustification]; - return textJustification; -} - -+ (NSValue *)valueWithMGLTextPitchAlignment:(MGLTextPitchAlignment)textPitchAlignment { - return [NSValue value:&textPitchAlignment withObjCType:@encode(MGLTextPitchAlignment)]; -} - -- (MGLTextPitchAlignment)MGLTextPitchAlignmentValue { - MGLTextPitchAlignment textPitchAlignment; - [self getValue:&textPitchAlignment]; - return textPitchAlignment; -} - -+ (NSValue *)valueWithMGLTextRotationAlignment:(MGLTextRotationAlignment)textRotationAlignment { - return [NSValue value:&textRotationAlignment withObjCType:@encode(MGLTextRotationAlignment)]; -} - -- (MGLTextRotationAlignment)MGLTextRotationAlignmentValue { - MGLTextRotationAlignment textRotationAlignment; - [self getValue:&textRotationAlignment]; - return textRotationAlignment; -} - -+ (NSValue *)valueWithMGLTextTransform:(MGLTextTransform)textTransform { - return [NSValue value:&textTransform withObjCType:@encode(MGLTextTransform)]; -} - -- (MGLTextTransform)MGLTextTransformValue { - MGLTextTransform textTransform; - [self getValue:&textTransform]; - return textTransform; -} - -+ (NSValue *)valueWithMGLTextWritingMode:(MGLTextWritingMode)textWritingModes { - return [NSValue value:&textWritingModes withObjCType:@encode(MGLTextWritingMode)]; -} - -- (MGLTextWritingMode)MGLTextWritingModeValue { - MGLTextWritingMode textWritingModes; - [self getValue:&textWritingModes]; - return textWritingModes; -} - -+ (NSValue *)valueWithMGLIconTranslationAnchor:(MGLIconTranslationAnchor)iconTranslationAnchor { - return [NSValue value:&iconTranslationAnchor withObjCType:@encode(MGLIconTranslationAnchor)]; -} - -- (MGLIconTranslationAnchor)MGLIconTranslationAnchorValue { - MGLIconTranslationAnchor iconTranslationAnchor; - [self getValue:&iconTranslationAnchor]; - return iconTranslationAnchor; -} - -+ (NSValue *)valueWithMGLTextTranslationAnchor:(MGLTextTranslationAnchor)textTranslationAnchor { - return [NSValue value:&textTranslationAnchor withObjCType:@encode(MGLTextTranslationAnchor)]; -} - -- (MGLTextTranslationAnchor)MGLTextTranslationAnchorValue { - MGLTextTranslationAnchor textTranslationAnchor; - [self getValue:&textTranslationAnchor]; - return textTranslationAnchor; -} - -@end - -namespace mbgl { - -MGLStyleLayer* SymbolStyleLayerPeerFactory::createPeer(style::Layer* rawLayer) { - return [[MGLSymbolStyleLayer alloc] initWithRawLayer:rawLayer]; -} - -} // namespace mbgl diff --git a/platform/darwin/src/MGLSymbolStyleLayer_Private.h b/platform/darwin/src/MGLSymbolStyleLayer_Private.h deleted file mode 100644 index 4c3505a9d47..00000000000 --- a/platform/darwin/src/MGLSymbolStyleLayer_Private.h +++ /dev/null @@ -1,17 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -#pragma once - -#include "MGLStyleLayer_Private.h" - -#include - -namespace mbgl { - -class SymbolStyleLayerPeerFactory : public LayerPeerFactory, public mbgl::SymbolLayerFactory { - // LayerPeerFactory overrides. - LayerFactory* getCoreLayerFactory() final { return this; } - virtual MGLStyleLayer* createPeer(style::Layer*) final; -}; - -} // namespace mbgl diff --git a/platform/darwin/src/MGLTilePyramidOfflineRegion.h b/platform/darwin/src/MGLTilePyramidOfflineRegion.h deleted file mode 100644 index 41fc200154a..00000000000 --- a/platform/darwin/src/MGLTilePyramidOfflineRegion.h +++ /dev/null @@ -1,88 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLOfflineRegion.h" -#import "MGLGeometry.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - An offline region defined by a style URL, geographic coordinate bounds, and - range of zoom levels. - - To minimize the resources required by an irregularly shaped offline region, - use the MGLShapeOfflineRegion class instead. - - ### Example - ```swift - let northeast = CLLocationCoordinate2D(latitude: 40.989329, longitude: -102.062592) - let southwest = CLLocationCoordinate2D(latitude: 36.986207, longitude: -109.049896) - let bbox = MGLCoordinateBounds(sw: southwest, ne: northeast) - - let region = MGLTilePyramidOfflineRegion(styleURL: MGLStyle.lightStyleURL, bounds: bbox, fromZoomLevel: 11, toZoomLevel: 14) - let context = "Tile Pyramid Region".data(using: .utf8) - MGLOfflineStorage.shared.addPack(for: region, withContext: context!) - ``` - - #### Related examples - See the - Download an offline map example to learn how to define an offline region - to be downloaded to a user's device. - */ -MGL_EXPORT -@interface MGLTilePyramidOfflineRegion : NSObject - -/** - The coordinate bounds for the geographic region covered by the downloaded - tiles. - */ -@property (nonatomic, readonly) MGLCoordinateBounds bounds; - -/** - The minimum zoom level for which to download tiles and other resources. - - For more information about zoom levels, `-[MGLMapView zoomLevel]`. - */ -@property (nonatomic, readonly) double minimumZoomLevel; - -/** - The maximum zoom level for which to download tiles and other resources. - - For more information about zoom levels, `-[MGLMapView zoomLevel]`. - */ -@property (nonatomic, readonly) double maximumZoomLevel; - -- (instancetype)init NS_UNAVAILABLE; - -/** - Initializes a newly created offline region with the given style URL, geographic - coordinate bounds, and range of zoom levels. - - This is the designated initializer for `MGLTilePyramidOfflineRegion`. - - @param styleURL URL of the map style for which to download resources. The URL - may be a full HTTP or HTTPS URL or a Mapbox - style URL (`mapbox://styles/{user}/{style}`). Specify `nil` for the default style. - Relative file URLs cannot be used as offline style URLs. To download the - online resources required by a local style, specify a URL to an online copy - of the style. - @param bounds The coordinate bounds for the geographic region to be covered by - the downloaded tiles. - @param minimumZoomLevel The minimum zoom level to be covered by the downloaded - tiles. This parameter should be set to at least 0 but no greater than the - value of the `maximumZoomLevel` parameter. For each required tile source, if - this parameter is set to a value less than the tile source’s minimum zoom - level, the download covers zoom levels down to the tile source’s minimum - zoom level. - @param maximumZoomLevel The maximum zoom level to be covered by the downloaded - tiles. This parameter should be set to at least the value of the - `minimumZoomLevel` parameter. For each required tile source, if this - parameter is set to a value greater than the tile source’s minimum zoom - level, the download covers zoom levels up to the tile source’s maximum zoom - level. - */ -- (instancetype)initWithStyleURL:(nullable NSURL *)styleURL bounds:(MGLCoordinateBounds)bounds fromZoomLevel:(double)minimumZoomLevel toZoomLevel:(double)maximumZoomLevel NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLTilePyramidOfflineRegion.mm b/platform/darwin/src/MGLTilePyramidOfflineRegion.mm deleted file mode 100644 index 73fcaa91d8e..00000000000 --- a/platform/darwin/src/MGLTilePyramidOfflineRegion.mm +++ /dev/null @@ -1,154 +0,0 @@ -#import "MGLTilePyramidOfflineRegion.h" - -#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR - #import -#endif - -#import "MGLOfflineRegion_Private.h" -#import "MGLTilePyramidOfflineRegion_Private.h" -#import "MGLGeometry_Private.h" -#import "MGLStyle.h" -#import "MGLLoggingConfiguration_Private.h" - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -#import "MMEConstants.h" -#endif - -@interface MGLTilePyramidOfflineRegion () - -@end - -@implementation MGLTilePyramidOfflineRegion { - NSURL *_styleURL; -} - -@synthesize styleURL = _styleURL; -@synthesize includesIdeographicGlyphs = _includesIdeographicGlyphs; - --(NSDictionary *)offlineStartEventAttributes { - return @{ - #if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - MMEEventKeyShapeForOfflineRegion: @"tileregion", - MMEEventKeyMinZoomLevel: @(self.minimumZoomLevel), - MMEEventKeyMaxZoomLevel: @(self.maximumZoomLevel), - MMEEventKeyStyleURL: self.styleURL.absoluteString ?: [NSNull null] - #endif - }; -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)init { - MGLLogInfo(@"Calling this initializer is not allowed."); - [NSException raise:NSGenericException format: - @"-[MGLTilePyramidOfflineRegion init] is unavailable. " - @"Use -initWithStyleURL:bounds:fromZoomLevel:toZoomLevel: instead."]; - return nil; -} - -- (instancetype)initWithStyleURL:(NSURL *)styleURL bounds:(MGLCoordinateBounds)bounds fromZoomLevel:(double)minimumZoomLevel toZoomLevel:(double)maximumZoomLevel { - MGLLogDebug(@"Initializing styleURL: %@ bounds: %@ fromZoomLevel: %f toZoomLevel: %f", styleURL, MGLStringFromCoordinateBounds(bounds), minimumZoomLevel, maximumZoomLevel); - if (self = [super init]) { - if (!styleURL) { - styleURL = [MGLStyle streetsStyleURLWithVersion:MGLStyleDefaultVersion]; - } - - if (!styleURL.scheme) { - [NSException raise:MGLInvalidStyleURLException format: - @"%@ does not support setting a relative file URL as the style URL. " - @"To download the online resources required by this style, " - @"specify a URL to an online copy of this style. " - @"For Mapbox-hosted styles, use the mapbox: scheme.", - NSStringFromClass([self class])]; - } - - _styleURL = styleURL; - _bounds = bounds; - _minimumZoomLevel = minimumZoomLevel; - _maximumZoomLevel = maximumZoomLevel; - _includesIdeographicGlyphs = NO; - } - return self; -} - -- (instancetype)initWithOfflineRegionDefinition:(const mbgl::OfflineTilePyramidRegionDefinition &)definition { - NSURL *styleURL = [NSURL URLWithString:@(definition.styleURL.c_str())]; - MGLCoordinateBounds bounds = MGLCoordinateBoundsFromLatLngBounds(definition.bounds); - MGLTilePyramidOfflineRegion* result = [self initWithStyleURL:styleURL bounds:bounds fromZoomLevel:definition.minZoom toZoomLevel:definition.maxZoom]; - result.includesIdeographicGlyphs = definition.includeIdeographs; - return result; -} - -- (const mbgl::OfflineRegionDefinition)offlineRegionDefinition { -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - const float scaleFactor = [UIScreen instancesRespondToSelector:@selector(nativeScale)] ? [[UIScreen mainScreen] nativeScale] : [[UIScreen mainScreen] scale]; -#elif TARGET_OS_MAC - const float scaleFactor = [NSScreen mainScreen].backingScaleFactor; -#endif - return mbgl::OfflineTilePyramidRegionDefinition(_styleURL.absoluteString.UTF8String, - MGLLatLngBoundsFromCoordinateBounds(_bounds), - _minimumZoomLevel, _maximumZoomLevel, - scaleFactor, _includesIdeographicGlyphs); -} - -- (nullable instancetype)initWithCoder:(NSCoder *)coder { - MGLLogInfo(@"Initializing with coder."); - NSURL *styleURL = [coder decodeObjectForKey:@"styleURL"]; - CLLocationCoordinate2D sw = CLLocationCoordinate2DMake([coder decodeDoubleForKey:@"southWestLatitude"], - [coder decodeDoubleForKey:@"southWestLongitude"]); - CLLocationCoordinate2D ne = CLLocationCoordinate2DMake([coder decodeDoubleForKey:@"northEastLatitude"], - [coder decodeDoubleForKey:@"northEastLongitude"]); - MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(sw, ne); - double minimumZoomLevel = [coder decodeDoubleForKey:@"minimumZoomLevel"]; - double maximumZoomLevel = [coder decodeDoubleForKey:@"maximumZoomLevel"]; - - MGLTilePyramidOfflineRegion* result = [self initWithStyleURL:styleURL bounds:bounds fromZoomLevel:minimumZoomLevel toZoomLevel:maximumZoomLevel]; - result.includesIdeographicGlyphs = [coder decodeBoolForKey:@"includesIdeographicGlyphs"]; - return result; -} - -- (void)encodeWithCoder:(NSCoder *)coder -{ - [coder encodeObject:_styleURL forKey:@"styleURL"]; - [coder encodeDouble:_bounds.sw.latitude forKey:@"southWestLatitude"]; - [coder encodeDouble:_bounds.sw.longitude forKey:@"southWestLongitude"]; - [coder encodeDouble:_bounds.ne.latitude forKey:@"northEastLatitude"]; - [coder encodeDouble:_bounds.ne.longitude forKey:@"northEastLongitude"]; - [coder encodeDouble:_maximumZoomLevel forKey:@"maximumZoomLevel"]; - [coder encodeDouble:_minimumZoomLevel forKey:@"minimumZoomLevel"]; - [coder encodeBool:_includesIdeographicGlyphs forKey:@"includesIdeographicGlyphs"]; -} - -- (id)copyWithZone:(nullable NSZone *)zone { - MGLTilePyramidOfflineRegion* result = [[[self class] allocWithZone:zone] initWithStyleURL:_styleURL bounds:_bounds fromZoomLevel:_minimumZoomLevel toZoomLevel:_maximumZoomLevel]; - result.includesIdeographicGlyphs = _includesIdeographicGlyphs; - return result; -} - -- (BOOL)isEqual:(id)other { - if (other == self) { - return YES; - } - if (![other isKindOfClass:[self class]]) { - return NO; - } - - MGLTilePyramidOfflineRegion *otherRegion = other; - return (_minimumZoomLevel == otherRegion->_minimumZoomLevel - && _maximumZoomLevel == otherRegion->_maximumZoomLevel - && MGLCoordinateBoundsEqualToCoordinateBounds(_bounds, otherRegion->_bounds) - && [_styleURL isEqual:otherRegion->_styleURL] - && _includesIdeographicGlyphs == otherRegion->_includesIdeographicGlyphs); -} - -- (NSUInteger)hash { - return (_styleURL.hash - + @(_bounds.sw.latitude).hash + @(_bounds.sw.longitude).hash - + @(_bounds.ne.latitude).hash + @(_bounds.ne.longitude).hash - + @(_minimumZoomLevel).hash + @(_maximumZoomLevel).hash - + @(_includesIdeographicGlyphs).hash); -} - -@end diff --git a/platform/darwin/src/MGLTilePyramidOfflineRegion_Private.h b/platform/darwin/src/MGLTilePyramidOfflineRegion_Private.h deleted file mode 100644 index 90d8e054778..00000000000 --- a/platform/darwin/src/MGLTilePyramidOfflineRegion_Private.h +++ /dev/null @@ -1,22 +0,0 @@ -#import - -#import "MGLOfflineRegion.h" - -#include - -NS_ASSUME_NONNULL_BEGIN - -@protocol MGLTilePyramidOfflineRegion_Private - -/** - Initializes and returns an offline region backed by the given C++ region - definition object. - - @param definition A reference to an offline region definition backing the - offline region. - */ -- (instancetype)initWithOfflineRegionDefinition:(const mbgl::OfflineTilePyramidRegionDefinition &)definition; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLTileSource.h b/platform/darwin/src/MGLTileSource.h deleted file mode 100644 index f22babc8cab..00000000000 --- a/platform/darwin/src/MGLTileSource.h +++ /dev/null @@ -1,206 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLSource.h" -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MGLAttributionInfo; - -/** - Options for `MGLTileSource` objects. - */ -typedef NSString *MGLTileSourceOption NS_STRING_ENUM; - -/** - An `NSNumber` object containing an unsigned integer that specifies the minimum - zoom level at which to display tiles from the source. - - The value should be between 0 and 22, inclusive, and less than - `MGLTileSourceOptionMaximumZoomLevel`, if specified. The default value for this - option is 0. - - This option corresponds to the `minzoom` key in the - TileJSON - specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLTileSourceOption MGLTileSourceOptionMinimumZoomLevel; - -/** - An `NSNumber` object containing an unsigned integer that specifies the maximum - zoom level at which to display tiles from the source. - - The value should be between 0 and 22, inclusive, and less than - `MGLTileSourceOptionMinimumZoomLevel`, if specified. The default value for this - option is 22. - - This option corresponds to the `maxzoom` key in the - TileJSON - specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLTileSourceOption MGLTileSourceOptionMaximumZoomLevel; - -/** - An `NSValue` object containing an `MGLCoordinateBounds` struct that specifies - the geographic extent of the source. - - If this option is specified, the SDK avoids requesting any tile that falls - outside of the coordinate bounds. Otherwise, the SDK requests any tile needed - to cover the viewport, as it does by default. - - This option corresponds to the `bounds` key in the - TileJSON - specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLTileSourceOption MGLTileSourceOptionCoordinateBounds; - -#if TARGET_OS_IPHONE -/** - An HTML string defining the buttons to be displayed in an action sheet when the - source is part of a map view’s style and the map view’s attribution button is - pressed. - - By default, no attribution statements are displayed. If the - `MGLTileSourceOptionAttributionInfos` option is specified, this option is - ignored. - - This option corresponds to the `attribution` key in the - TileJSON - specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLTileSourceOption MGLTileSourceOptionAttributionHTMLString; - -/** - An array of `MGLAttributionInfo` objects defining the buttons to be displayed - in an action sheet when the source is part of a map view’s style and the map - view’s attribution button is pressed. - - By default, no attribution statements are displayed. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLTileSourceOption MGLTileSourceOptionAttributionInfos; -#else -/** - An HTML string defining the buttons to be displayed in the map view’s - attribution view when the source is part of the map view’s style. - - By default, no attribution statements are displayed. If the - `MGLTileSourceOptionAttributionInfos` option is specified, this option is - ignored. - - This option corresponds to the `attribution` key in the - TileJSON - specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLTileSourceOption MGLTileSourceOptionAttributionHTMLString; - -/** - An array of `MGLAttributionInfo` objects defining the buttons to be displayed - in the map view’s attribution view when the source is part of the map view’s - style. - - By default, no attribution statements are displayed. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLTileSourceOption MGLTileSourceOptionAttributionInfos; -#endif - -/** - An `NSNumber` object containing an unsigned integer that specifies the tile - coordinate system for the source’s tile URLs. The integer corresponds to one of - the constants described in `MGLTileCoordinateSystem`. - - The default value for this option is `MGLTileCoordinateSystemXYZ`. - - This option corresponds to the `scheme` key in the - TileJSON - specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLTileSourceOption MGLTileSourceOptionTileCoordinateSystem; - -/** - Tile coordinate systems that determine how tile coordinates in tile URLs are - interpreted. - */ -typedef NS_ENUM(NSUInteger, MGLTileCoordinateSystem) { - /** - The origin is at the top-left (northwest), and `y` values increase - southwards. - - This tile coordinate system is used by Mapbox and OpenStreetMap tile - servers. - */ - MGLTileCoordinateSystemXYZ = 0, - - /** - The origin is at the bottom-left (southwest), and `y` values increase - northwards. - - This tile coordinate system is used by tile servers that conform to the - Tile Map Service Specification. - */ - MGLTileCoordinateSystemTMS -}; - -/** - The encoding formula used to generate the raster-dem tileset -*/ - -typedef NS_ENUM(NSUInteger, MGLDEMEncoding) { - - /** - Raster tiles generated with the [Mapbox encoding formula](https://docs.mapbox.com/help/troubleshooting/access-elevation-data/#mapbox-terrain-rgb). - */ - MGLDEMEncodingMapbox = 0, - - /** - Raster tiles generated with the [Mapzen Terrarium encoding formula](https://aws.amazon.com/public-datasets/terrain/). - */ - MGLDEMEncodingTerrarium -}; - -/** - `MGLTileSource` is a map content source that supplies map tiles to be shown on - the map. The location of and metadata about the tiles are defined either by an - option dictionary or by an external file that conforms to the - TileJSON specification. - A tile source is added to an `MGLStyle` object along with one or more - `MGLRasterStyleLayer` or `MGLVectorStyleLayer` objects. Use a style layer to - control the appearance of content supplied by the tile source. - - A tile source is also known as a tile set. To learn about the structure of a - Mapbox-hosted tile set, view it in - Mapbox Studio’s Tilesets editor. - - Create instances of `MGLRasterTileSource` and `MGLVectorTileSource` in order - to use `MGLTileSource`'s properties and methods. Do not create instances of - `MGLTileSource` directly, and do not create your own subclasses of this class. - */ -MGL_EXPORT -@interface MGLTileSource : MGLSource - -#pragma mark Accessing a Source’s Content - -/** - The URL to the TileJSON configuration file that specifies the contents of the - source. - - If the receiver was initialized using - `-initWithIdentifier:tileURLTemplates:options`, this property is set to `nil`. - */ -@property (nonatomic, copy, nullable, readonly) NSURL *configurationURL; - -#pragma mark Accessing Attribution Strings - -/** - An array of `MGLAttributionInfo` objects that define the attribution - statements to be displayed when the map is shown to the user. - - By default, this array is empty. If the source is initialized with a - configuration URL, this array is also empty until the configuration JSON file - is loaded. - */ -@property (nonatomic, copy, readonly) NSArray *attributionInfos; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLTileSource.mm b/platform/darwin/src/MGLTileSource.mm deleted file mode 100644 index eef3b33430e..00000000000 --- a/platform/darwin/src/MGLTileSource.mm +++ /dev/null @@ -1,152 +0,0 @@ -#import "MGLTileSource_Private.h" - -#import "MGLAttributionInfo_Private.h" -#import "MGLGeometry_Private.h" -#import "MGLRasterDEMSource.h" -#import "NSString+MGLAdditions.h" -#import "NSValue+MGLAdditions.h" - -#if TARGET_OS_IPHONE - #import -#else - #import -#endif - -#include - -const MGLTileSourceOption MGLTileSourceOptionMinimumZoomLevel = @"MGLTileSourceOptionMinimumZoomLevel"; -const MGLTileSourceOption MGLTileSourceOptionMaximumZoomLevel = @"MGLTileSourceOptionMaximumZoomLevel"; -const MGLTileSourceOption MGLTileSourceOptionCoordinateBounds = @"MGLTileSourceOptionCoordinateBounds"; -const MGLTileSourceOption MGLTileSourceOptionAttributionHTMLString = @"MGLTileSourceOptionAttributionHTMLString"; -const MGLTileSourceOption MGLTileSourceOptionAttributionInfos = @"MGLTileSourceOptionAttributionInfos"; -const MGLTileSourceOption MGLTileSourceOptionTileCoordinateSystem = @"MGLTileSourceOptionTileCoordinateSystem"; -const MGLTileSourceOption MGLTileSourceOptionDEMEncoding = @"MGLTileSourceOptionDEMEncoding"; - -@implementation MGLTileSource - -- (NSURL *)configurationURL { - [NSException raise:MGLAbstractClassException - format:@"MGLTileSource is an abstract class"]; - return nil; -} - -- (NSArray *)attributionInfos { - return [self attributionInfosWithFontSize:0 linkColor:nil]; -} - -- (NSArray *)attributionInfosWithFontSize:(CGFloat)fontSize linkColor:(nullable MGLColor *)linkColor { - return [MGLAttributionInfo attributionInfosFromHTMLString:self.attributionHTMLString - fontSize:fontSize - linkColor:linkColor]; -} - -- (NSString *)attributionHTMLString { - [NSException raise:MGLAbstractClassException - format:@"MGLTileSource is an abstract class"]; - return nil; -} - -@end - -mbgl::Tileset MGLTileSetFromTileURLTemplates(NSArray *tileURLTemplates, NSDictionary * _Nullable options) { - mbgl::Tileset tileSet; - - for (NSString *tileURLTemplate in tileURLTemplates) { - tileSet.tiles.push_back(tileURLTemplate.UTF8String); - } - - // set the minimum / maximum zoom range to the values specified by this class if they - // were set. otherwise, use the core objects default values - if (NSNumber *minimumZoomLevel = options[MGLTileSourceOptionMinimumZoomLevel]) { - if (![minimumZoomLevel isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLTileSourceOptionMinimumZoomLevel must be set to an NSNumber."]; - } - tileSet.zoomRange.min = minimumZoomLevel.integerValue; - } - if (NSNumber *maximumZoomLevel = options[MGLTileSourceOptionMaximumZoomLevel]) { - if (![maximumZoomLevel isKindOfClass:[NSNumber class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLTileSourceOptionMinimumZoomLevel must be set to an NSNumber."]; - } - tileSet.zoomRange.max = maximumZoomLevel.integerValue; - } - if (tileSet.zoomRange.min > tileSet.zoomRange.max) { - [NSException raise:NSInvalidArgumentException - format:@"MGLTileSourceOptionMinimumZoomLevel must be less than MGLTileSourceOptionMaximumZoomLevel."]; - } - - if (NSValue *coordinateBounds = options[MGLTileSourceOptionCoordinateBounds]) { - if (![coordinateBounds isKindOfClass:[NSValue class]] - && strcmp(coordinateBounds.objCType, @encode(MGLCoordinateBounds)) == 0) { - [NSException raise:NSInvalidArgumentException - format:@"MGLTileSourceOptionCoordinateBounds must be set to an NSValue containing an MGLCoordinateBounds."]; - } - tileSet.bounds = MGLLatLngBoundsFromCoordinateBounds(coordinateBounds.MGLCoordinateBoundsValue); - } - - if (NSString *attribution = options[MGLTileSourceOptionAttributionHTMLString]) { - if (![attribution isKindOfClass:[NSString class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLTileSourceOptionAttributionHTMLString must be set to a string."]; - } - tileSet.attribution = attribution.UTF8String; - } - - if (NSArray *attributionInfos = options[MGLTileSourceOptionAttributionInfos]) { - if (![attributionInfos isKindOfClass:[NSArray class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLTileSourceOptionAttributionInfos must be set to a string."]; - } - - NSAttributedString *attributedString = [MGLAttributionInfo attributedStringForAttributionInfos:attributionInfos]; -#if TARGET_OS_IPHONE - static NSString * const NSExcludedElementsDocumentAttribute = @"ExcludedElements"; -#endif - NSDictionary *documentAttributes = @{ - NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, - NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding), - // The attribution string is meant to be a simple, inline fragment, not a full-fledged, validating document. - NSExcludedElementsDocumentAttribute: @[@"XML", @"DOCTYPE", @"html", @"head", @"meta", @"title", @"style", @"body", @"p"], - }; - NSData *data = [attributedString dataFromRange:attributedString.mgl_wholeRange documentAttributes:documentAttributes error:NULL]; - NSString *html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - tileSet.attribution = html.UTF8String; - } - - if (NSNumber *tileCoordinateSystemNumber = options[MGLTileSourceOptionTileCoordinateSystem]) { - if (![tileCoordinateSystemNumber isKindOfClass:[NSValue class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLTileSourceOptionTileCoordinateSystem must be set to an NSValue or NSNumber."]; - } - MGLTileCoordinateSystem tileCoordinateSystem; - [tileCoordinateSystemNumber getValue:&tileCoordinateSystem]; - switch (tileCoordinateSystem) { - case MGLTileCoordinateSystemXYZ: - tileSet.scheme = mbgl::Tileset::Scheme::XYZ; - break; - case MGLTileCoordinateSystemTMS: - tileSet.scheme = mbgl::Tileset::Scheme::TMS; - break; - } - } - - if (NSNumber *demEncodingNumber = options[MGLTileSourceOptionDEMEncoding]) { - if (![demEncodingNumber isKindOfClass:[NSValue class]]) { - [NSException raise:NSInvalidArgumentException - format:@"MGLTileSourceOptionDEMEncoding must be set to an NSValue or NSNumber."]; - } - MGLDEMEncoding demEncoding; - [demEncodingNumber getValue:&demEncoding]; - switch (demEncoding) { - case MGLDEMEncodingMapbox: - tileSet.encoding = mbgl::Tileset::DEMEncoding::Mapbox; - break; - case MGLDEMEncodingTerrarium: - tileSet.encoding = mbgl::Tileset::DEMEncoding::Terrarium; - break; - } - } - - return tileSet; -} diff --git a/platform/darwin/src/MGLTileSource_Private.h b/platform/darwin/src/MGLTileSource_Private.h deleted file mode 100644 index 1b260ca86a0..00000000000 --- a/platform/darwin/src/MGLTileSource_Private.h +++ /dev/null @@ -1,38 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLTileSource.h" - -NS_ASSUME_NONNULL_BEGIN - -namespace mbgl { - class Tileset; -} - -@class MGLAttributionInfo; - -@interface MGLTileSource (Private) - -/** - An HTML string to be displayed as attribution when the map is shown to a user. - - The default value is `nil`. If the source is initialized with a configuration - URL, this property is also `nil` until the configuration JSON file is loaded. - */ -@property (nonatomic, copy, nullable, readonly) NSString *attributionHTMLString; - -/** - A structured representation of the `attribution` property. The default value is - `nil`. - - @param fontSize The default text size in points, or 0 to use the default. - @param linkColor The default link color, or `nil` to use the default. - */ -- (NSArray *)attributionInfosWithFontSize:(CGFloat)fontSize linkColor:(nullable MGLColor *)linkColor; - -@end - -MGL_EXPORT -mbgl::Tileset MGLTileSetFromTileURLTemplates(NSArray *tileURLTemplates, NSDictionary * _Nullable options); - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLTypes.h b/platform/darwin/src/MGLTypes.h deleted file mode 100644 index 963eda384bf..00000000000 --- a/platform/darwin/src/MGLTypes.h +++ /dev/null @@ -1,140 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" - -#pragma once - -#if TARGET_OS_IPHONE -@class UIImage; -#define MGLImage UIImage -#else -@class NSImage; -#define MGLImage NSImage -#endif - -#if TARGET_OS_IPHONE -@class UIColor; -#define MGLColor UIColor -#else -@class NSColor; -#define MGLColor NSColor -#endif - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *MGLExceptionName NS_TYPED_EXTENSIBLE_ENUM; - -/** - :nodoc: Generic exceptions used across multiple disparate classes. Exceptions - that are unique to a class or class-cluster should be defined in those headers. - */ -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLAbstractClassException; - -/** Indicates an error occurred in the Mapbox SDK. */ -FOUNDATION_EXTERN MGL_EXPORT NSErrorDomain const MGLErrorDomain; - -/** Error constants for the Mapbox SDK. */ -typedef NS_ENUM(NSInteger, MGLErrorCode) { - /** An unknown error occurred. */ - MGLErrorCodeUnknown = -1, - /** The resource could not be found. */ - MGLErrorCodeNotFound = 1, - /** The connection received an invalid server response. */ - MGLErrorCodeBadServerResponse = 2, - /** An attempt to establish a connection failed. */ - MGLErrorCodeConnectionFailed = 3, - /** A style parse error occurred while attempting to load the map. */ - MGLErrorCodeParseStyleFailed = 4, - /** An attempt to load the style failed. */ - MGLErrorCodeLoadStyleFailed = 5, - /** An error occurred while snapshotting the map. */ - MGLErrorCodeSnapshotFailed = 6, - /** Source is in use and cannot be removed */ - MGLErrorCodeSourceIsInUseCannotRemove = 7, - /** Source is in use and cannot be removed */ - MGLErrorCodeSourceIdentifierMismatch = 8, - /** An error occurred while modifying the offline storage database */ - MGLErrorCodeModifyingOfflineStorageFailed = 9, - /** Source is invalid and cannot be removed from the style (e.g. after a style change) */ - MGLErrorCodeSourceCannotBeRemovedFromStyle = 10, - /** An error occurred while rendering */ - MGLErrorCodeRenderingError = 11, -}; - -/** Options for enabling debugging features in an `MGLMapView` instance. */ -typedef NS_OPTIONS(NSUInteger, MGLMapDebugMaskOptions) { - /** Edges of tile boundaries are shown as thick, red lines to help diagnose - tile clipping issues. */ - MGLMapDebugTileBoundariesMask = 1 << 1, - /** Each tile shows its tile coordinate (x/y/z) in the upper-left corner. */ - MGLMapDebugTileInfoMask = 1 << 2, - /** Each tile shows a timestamp indicating when it was loaded. */ - MGLMapDebugTimestampsMask = 1 << 3, - /** Edges of glyphs and symbols are shown as faint, green lines to help - diagnose collision and label placement issues. */ - MGLMapDebugCollisionBoxesMask = 1 << 4, - /** Each drawing operation is replaced by a translucent fill. Overlapping - drawing operations appear more prominent to help diagnose overdrawing. - @note This option does nothing in Release builds of the SDK. */ - MGLMapDebugOverdrawVisualizationMask = 1 << 5, -#if !TARGET_OS_IPHONE - /** The stencil buffer is shown instead of the color buffer. - @note This option does nothing in Release builds of the SDK. */ - MGLMapDebugStencilBufferMask = 1 << 6, - /** The depth buffer is shown instead of the color buffer. - @note This option does nothing in Release builds of the SDK. */ - MGLMapDebugDepthBufferMask = 1 << 7, -#endif -}; - -/** - A structure containing information about a transition. - */ -typedef struct __attribute__((objc_boxable)) MGLTransition { - /** - The amount of time the animation should take, not including the delay. - */ - NSTimeInterval duration; - - /** - The amount of time in seconds to wait before beginning the animation. - */ - NSTimeInterval delay; -} MGLTransition; - -NS_INLINE NSString *MGLStringFromMGLTransition(MGLTransition transition) { - return [NSString stringWithFormat:@"transition { duration: %f, delay: %f }", transition.duration, transition.delay]; -} - -/** - Creates a new `MGLTransition` from the given duration and delay. - - @param duration The amount of time the animation should take, not including - the delay. - @param delay The amount of time in seconds to wait before beginning the - animation. - - @return Returns a `MGLTransition` struct containing the transition attributes. - */ -NS_INLINE MGLTransition MGLTransitionMake(NSTimeInterval duration, NSTimeInterval delay) { - MGLTransition transition; - transition.duration = duration; - transition.delay = delay; - - return transition; -} - -/** - Constants indicating the visibility of different map ornaments. - */ -typedef NS_ENUM(NSInteger, MGLOrnamentVisibility) { - /** A constant indicating that the ornament adapts to the current map state. */ - MGLOrnamentVisibilityAdaptive, - /** A constant indicating that the ornament is always hidden. */ - MGLOrnamentVisibilityHidden, - /** A constant indicating that the ornament is always visible. */ - MGLOrnamentVisibilityVisible -}; - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLTypes.m b/platform/darwin/src/MGLTypes.m deleted file mode 100644 index 89f88a9c1de..00000000000 --- a/platform/darwin/src/MGLTypes.m +++ /dev/null @@ -1,5 +0,0 @@ -#import "MGLTypes.h" - -const MGLExceptionName MGLAbstractClassException = @"MGLAbstractClassException"; - -NSString * const MGLErrorDomain = @"MGLErrorDomain"; diff --git a/platform/darwin/src/MGLValueEvaluator.h b/platform/darwin/src/MGLValueEvaluator.h deleted file mode 100644 index 2779deba902..00000000000 --- a/platform/darwin/src/MGLValueEvaluator.h +++ /dev/null @@ -1,49 +0,0 @@ -#import - -#import - -/** - Recursively transforms a C++ type into the corresponding Foundation type. - */ -class ValueEvaluator { -public: - id operator()(const mbgl::NullValue &) const { - return [NSNull null]; - } - - id operator()(const bool &value) const { - return value ? @YES : @NO; - } - - id operator()(const uint64_t &value) const { - return @(value); - } - - id operator()(const int64_t &value) const { - return @(value); - } - - id operator()(const double &value) const { - return @(value); - } - - id operator()(const std::string &value) const { - return @(value.c_str()); - } - - id operator()(const std::vector &values) const { - NSMutableArray *objects = [NSMutableArray arrayWithCapacity:values.size()]; - for (const auto &v : values) { - [objects addObject:mbgl::Value::visit(v, *this)]; - } - return objects; - } - - id operator()(const std::unordered_map &items) const { - NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithCapacity:items.size()]; - for (auto &item : items) { - attributes[@(item.first.c_str())] = mbgl::Value::visit(item.second, *this); - } - return attributes; - } -}; diff --git a/platform/darwin/src/MGLVectorStyleLayer.h b/platform/darwin/src/MGLVectorStyleLayer.h deleted file mode 100644 index d9431215a14..00000000000 --- a/platform/darwin/src/MGLVectorStyleLayer.h +++ /dev/null @@ -1,58 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLForegroundStyleLayer.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - `MGLVectorStyleLayer` is an abstract superclass for style layers whose content - is defined by an `MGLShapeSource` or `MGLVectorTileSource` object. - - Create instances of `MGLCircleStyleLayer`, `MGLFillStyleLayer`, - `MGLFillExtrusionStyleLayer`, `MGLHeatmapStyleLayer`, `MGLLineStyleLayer`, and - `MGLSymbolStyleLayer` in order to use `MGLVectorStyleLayer`'s properties and - methods. Do not create instances of `MGLVectorStyleLayer` directly, and do not - create your own subclasses of this class. - */ -MGL_EXPORT -@interface MGLVectorStyleLayer : MGLForegroundStyleLayer - -#pragma mark Refining a Style Layer’s Content - -/** - Identifier of the layer within the source identified by the `sourceIdentifier` - property from which the receiver obtains the data to style. - */ -@property (nonatomic, nullable) NSString *sourceLayerIdentifier; - -/** - The style layer’s predicate. - - Use the style layer’s predicate to include only the features in the source - layer that satisfy a condition that you define. If the style layer initially - comes from the style, its predicate corresponds to the - `filter` - property in the style JSON. - - See the “Predicates and Expressions” - guide for details about the predicate syntax supported by this class. - - ### Example - - To filter the layer to include only the features whose `index` attribute is 5 - or 10 and whose `ele` attribute is at least 1,500, you could create an - `NSCompoundPredicate` along these lines: - - ```swift - let layer = MGLLineStyleLayer(identifier: "contour", source: terrain) - layer.sourceLayerIdentifier = "contours" - layer.predicate = NSPredicate(format: "(index == 5 || index == 10) && CAST(ele, 'NSNumber') >= 1500.0") - mapView.style?.addLayer(layer) - ``` - */ -@property (nonatomic, nullable) NSPredicate *predicate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLVectorStyleLayer.mm b/platform/darwin/src/MGLVectorStyleLayer.mm deleted file mode 100644 index 691668629ac..00000000000 --- a/platform/darwin/src/MGLVectorStyleLayer.mm +++ /dev/null @@ -1,34 +0,0 @@ -#import "MGLVectorStyleLayer.h" -#import "MGLStyleLayer_Private.h" - -@implementation MGLVectorStyleLayer - -- (void)setPredicate:(NSPredicate *)predicate { - [NSException raise:MGLAbstractClassException - format:@"MGLVectorStyleLayer is an abstract class"]; -} - -- (NSPredicate *)predicate { - [NSException raise:MGLAbstractClassException - format:@"MGLVectorStyleLayer is an abstract class"]; - return nil; -} - -- (NSString *)description { - if (self.rawLayer) { - return [NSString stringWithFormat: - @"<%@: %p; identifier = %@; sourceIdentifier = %@; " - @"sourceLayerIdentifier = %@; predicate = %@; visible = %@>", - NSStringFromClass([self class]), (void *)self, self.identifier, - self.sourceIdentifier, self.sourceLayerIdentifier, self.predicate, - self.visible ? @"YES" : @"NO"]; - } - else { - return [NSString stringWithFormat: - @"<%@: %p; identifier = %@; sourceIdentifier = ; " - @"sourceLayerIdentifier = ; predicate = ; visible = >", - NSStringFromClass([self class]), (void *)self, self.identifier]; - } -} - -@end diff --git a/platform/darwin/src/MGLVectorTileSource.h b/platform/darwin/src/MGLVectorTileSource.h deleted file mode 100644 index f198d7ad2c7..00000000000 --- a/platform/darwin/src/MGLVectorTileSource.h +++ /dev/null @@ -1,150 +0,0 @@ -#import "MGLFeature.h" -#import "MGLFoundation.h" -#import "MGLTileSource.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - `MGLVectorTileSource` is a map content source that supplies tiled vector data - in Mapbox Vector Tile format - to be shown on the map. The location of and metadata about the tiles are - defined either by an option dictionary or by an external file that conforms to - the - TileJSON specification. - A vector tile source is added to an `MGLStyle` object along with one or more - `MGLVectorStyleLayer` objects. A vector style layer defines the appearance of - any content supplied by the vector tile source. - - `MGLVectorTileSource` is optimized for data sets that are too large to fit - completely in memory, such as vector tile sets or data sets managed in - Mapbox Studio. For - GeoJSON data, use the `MGLShapeSource` - class. For tiled data that changes dynamically, the `MGLComputedShapeSource` - class may be a suitable alternative. - - Each - vector - source defined by the style JSON file is represented at runtime by an - `MGLVectorTileSource` object that you can use to initialize new style layers. - You can also add and remove sources dynamically using methods such as - `-[MGLStyle addSource:]` and `-[MGLStyle sourceWithIdentifier:]`. - - Within each vector tile, each geometric coordinate must lie between - −1 × extent and - (extent × 2) − 1, inclusive. Any vector style - layer initialized with a vector tile source must have a non-`nil` value in its - `sourceLayerIdentifier` property. - - Commonly used vector tile sources include - Mapbox Streets, - Mapbox Terrain, - and - Mapbox Traffic. - - ### Example - - ```swift - let source = MGLVectorTileSource(identifier: "pois", tileURLTemplates: ["https://example.com/vector-tiles/{z}/{x}/{y}.mvt"], options: [ - .minimumZoomLevel: 9, - .maximumZoomLevel: 16, - .attributionInfos: [ - MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com")) - ] - ]) - mapView.style?.addSource(source) - ``` - - #### Related examples - See the - Data-driven circles example to learn how to add data to your map using - an `MGLVectorTileSource` object. - */ -MGL_EXPORT -@interface MGLVectorTileSource : MGLTileSource - -#pragma mark Initializing a Source - -/** - Returns a vector tile source initialized with an identifier and configuration - URL. - - After initializing and configuring the source, add it to a map view’s style - using the `-[MGLStyle addSource:]` method. - - The URL may be a full HTTP or HTTPS URL or, for tilesets hosted by Mapbox, a - Mapbox URL indicating a tileset ID (`mapbox://`). The URL should - point to a JSON file that conforms to the - TileJSON specification. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param configurationURL A URL to a TileJSON configuration file describing the - source’s contents and other metadata. - @return An initialized vector tile source. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier configurationURL:(NSURL *)configurationURL NS_DESIGNATED_INITIALIZER; - -/** - Returns a vector tile source initialized an identifier, tile URL templates, and - options. - - Tile URL templates are strings that specify the URLs of the vector tiles to - load. See the “Tile URL Templates” - guide for information about the format of a tile URL template. - - After initializing and configuring the source, add it to a map view’s style - using the `-[MGLStyle addSource:]` method. - - @param identifier A string that uniquely identifies the source in the style to - which it is added. - @param tileURLTemplates An array of tile URL template strings. Only the first - string is used; any additional strings are ignored. - @param options A dictionary containing configuration options. See - `MGLTileSourceOption` for available keys and values. Pass in `nil` to use - the default values. - @return An initialized tile source. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier tileURLTemplates:(NSArray *)tileURLTemplates options:(nullable NSDictionary *)options NS_DESIGNATED_INITIALIZER; - -#pragma mark Accessing a Source’s Content - -/** - Returns an array of map features loaded by this source, restricted to the given - source layers and filtered by the given predicate. - - Each object in the returned array represents a feature loaded by the source and - provides access to attributes specified as part of the loaded feature. The - source loads a feature if the source is added to an `MGLMapView`’s style; that - style has a layer that uses the source; and the map view has recently scrolled - to the region containing the feature. - - Features come from tiled vector data that is converted to tiles internally, so - feature geometries are clipped at tile boundaries and features may appear - duplicated across tiles. For example, suppose part of a lengthy polyline - representing a road has recently scrolled into view. The resulting array - includes those parts of the road that lie within the map tiles that the source - has loaded, even if the road extends into other tiles. The portion of the road - within each map tile is included individually. - - Returned features may not necessarily be visible to the user at the time they - are loaded: the style may contain a layer that forces the source’s tiles to - load but filters out the features in question, preventing them from being - drawn. To obtain only _visible_ features, use the - `-[MGLMapView visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:predicate:]` - or - `-[MGLMapView visibleFeaturesInRect:inStyleLayersWithIdentifiers:predicate:]` - method. - - @param sourceLayerIdentifiers The source layers to include in the query. Only - the features contained in these source layers are included in the returned - array. This array may not be empty. - @param predicate A predicate to filter the returned features. Use `nil` to - include all loaded features. - @return An array of objects conforming to the `MGLFeature` protocol that - represent features loaded by the source that match the predicate. - */ -- (NSArray> *)featuresInSourceLayersWithIdentifiers:(NSSet *)sourceLayerIdentifiers predicate:(nullable NSPredicate *)predicate NS_SWIFT_NAME(features(sourceLayerIdentifiers:predicate:)); - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/MGLVectorTileSource.mm b/platform/darwin/src/MGLVectorTileSource.mm deleted file mode 100644 index 9ab11e2e564..00000000000 --- a/platform/darwin/src/MGLVectorTileSource.mm +++ /dev/null @@ -1,154 +0,0 @@ -#import "MGLVectorTileSource_Private.h" - -#import "MGLFeature_Private.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLSource_Private.h" -#import "MGLTileSource_Private.h" -#import "MGLStyle_Private.h" -#import "MGLMapView_Private.h" - -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSURL+MGLAdditions.h" - -#include -#include -#include - -@interface MGLVectorTileSource () - -@property (nonatomic, readonly) mbgl::style::VectorSource *rawSource; - -@end - -@implementation MGLVectorTileSource - -- (instancetype)initWithIdentifier:(NSString *)identifier configurationURL:(NSURL *)configurationURL { - auto source = std::make_unique(identifier.UTF8String, - configurationURL.mgl_URLByStandardizingScheme.absoluteString.UTF8String); - return self = [super initWithPendingSource:std::move(source)]; -} - -- (instancetype)initWithIdentifier:(NSString *)identifier tileURLTemplates:(NSArray *)tileURLTemplates options:(nullable NSDictionary *)options { - mbgl::Tileset tileSet = MGLTileSetFromTileURLTemplates(tileURLTemplates, options); - auto source = std::make_unique(identifier.UTF8String, tileSet); - return self = [super initWithPendingSource:std::move(source)]; -} - -- (mbgl::style::VectorSource *)rawSource { - return (mbgl::style::VectorSource *)super.rawSource; -} - -- (NSURL *)configurationURL { - MGLAssertStyleSourceIsValid(); - auto url = self.rawSource->getURL(); - return url ? [NSURL URLWithString:@(url->c_str())] : nil; -} - -- (NSString *)attributionHTMLString { - if (!self.rawSource) { - MGLAssert(0, @"Source with identifier `%@` was invalidated after a style change", self.identifier); - return nil; - } - - auto attribution = self.rawSource->getAttribution(); - return attribution ? @(attribution->c_str()) : nil; -} - -- (NSArray> *)featuresInSourceLayersWithIdentifiers:(NSSet *)sourceLayerIdentifiers predicate:(nullable NSPredicate *)predicate { - MGLAssertStyleSourceIsValid(); - mbgl::optional> optionalSourceLayerIDs; - if (sourceLayerIdentifiers) { - __block std::vector layerIDs; - layerIDs.reserve(sourceLayerIdentifiers.count); - [sourceLayerIdentifiers enumerateObjectsUsingBlock:^(NSString * _Nonnull identifier, BOOL * _Nonnull stop) { - layerIDs.push_back(identifier.UTF8String); - }]; - optionalSourceLayerIDs = layerIDs; - } - - mbgl::optional optionalFilter; - if (predicate) { - optionalFilter = predicate.mgl_filter; - } - - std::vector features; - if (self.mapView) { - features = self.mapView.renderer->querySourceFeatures(self.rawSource->getID(), { optionalSourceLayerIDs, optionalFilter }); - } - return MGLFeaturesFromMBGLFeatures(features); -} - -@end - -@implementation MGLVectorTileSource (Private) - -/** - An array of locale codes with dedicated name fields in the Mapbox Streets - source. - - https://www.mapbox.com/vector-tiles/mapbox-streets-v8/ - */ -static NSArray * const MGLMapboxStreetsLanguages = @[ - @"ar", @"de", @"en", @"es", @"fr", @"ja", @"ko", @"pt", @"ru", @"zh", - @"zh-Hans", -]; - -/** - Like `MGLMapboxStreetsLanguages`, but deanglicized for use with - `+[NSBundle preferredLocalizationsFromArray:forPreferences:]`. - */ -static NSArray * const MGLMapboxStreetsAlternativeLanguages = @[ - @"mul", @"ar", @"de", @"es", @"fr", @"ja", @"ko", @"pt", @"ru", @"zh", - @"zh-Hans", -]; - -+ (NSSet *)mapboxStreetsLanguages { - static dispatch_once_t onceToken; - static NSSet *mapboxStreetsLanguages; - dispatch_once(&onceToken, ^{ - mapboxStreetsLanguages = [NSSet setWithArray:MGLMapboxStreetsLanguages]; - }); - return mapboxStreetsLanguages; -} - -+ (NSString *)preferredMapboxStreetsLanguage { - return [self preferredMapboxStreetsLanguageForPreferences:[NSLocale preferredLanguages]]; -} - -+ (NSString *)preferredMapboxStreetsLanguageForPreferences:(NSArray *)preferencesArray { - BOOL acceptsEnglish = [preferencesArray filteredArrayUsingPredicate: - [NSPredicate predicateWithBlock:^BOOL(NSString * _Nullable language, NSDictionary * _Nullable bindings) { - NSString *languageCode; - - if (@available(iOS 10.0, macOS 10.12.0, *)) { - languageCode = [NSLocale localeWithLocaleIdentifier:language].languageCode; - } - else { - languageCode = [[NSLocale localeWithLocaleIdentifier:language] objectForKey:NSLocaleLanguageCode]; - } - - return [languageCode isEqualToString:@"en"]; - }]].count; - - NSArray *availableLanguages = acceptsEnglish ? MGLMapboxStreetsLanguages : MGLMapboxStreetsAlternativeLanguages; - NSArray *preferredLanguages = [NSBundle preferredLocalizationsFromArray:availableLanguages - forPreferences:preferencesArray]; - NSString *mostSpecificLanguage; - for (NSString *language in preferredLanguages) { - if (language.length > mostSpecificLanguage.length) { - mostSpecificLanguage = language; - } - } - return [mostSpecificLanguage isEqualToString:@"mul"] ? nil : mostSpecificLanguage; -} - -- (BOOL)isMapboxStreets { - NSURL *url = self.configurationURL; - if (![url.scheme isEqualToString:@"mapbox"]) { - return NO; - } - NSArray *identifiers = [url.host componentsSeparatedByString:@","]; - return [identifiers containsObject:@"mapbox.mapbox-streets-v8"] || [identifiers containsObject:@"mapbox.mapbox-streets-v7"]; -} - -@end diff --git a/platform/darwin/src/MGLVectorTileSource_Private.h b/platform/darwin/src/MGLVectorTileSource_Private.h deleted file mode 100644 index 8d287ae4c40..00000000000 --- a/platform/darwin/src/MGLVectorTileSource_Private.h +++ /dev/null @@ -1,16 +0,0 @@ -#import "MGLVectorTileSource.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLVectorTileSource (Private) - -@property (nonatomic, readonly, getter=isMapboxStreets) BOOL mapboxStreets; - -+ (NSSet *)mapboxStreetsLanguages; - -+ (nullable NSString *)preferredMapboxStreetsLanguage; -+ (nullable NSString *)preferredMapboxStreetsLanguageForPreferences:(NSArray *)preferencesArray; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/NSArray+MGLAdditions.h b/platform/darwin/src/NSArray+MGLAdditions.h deleted file mode 100644 index c4dfd8207b8..00000000000 --- a/platform/darwin/src/NSArray+MGLAdditions.h +++ /dev/null @@ -1,27 +0,0 @@ -#import -#import - -#import - -@interface NSArray (MGLAdditions) - -- (std::vector)mgl_vector; - -/** Returns a string resulting from inserting a separator between each attributed string in the array */ -- (NSAttributedString *)mgl_attributedComponentsJoinedByString:(NSString *)separator; - -/** - Converts std::vector into an NSArray containing dictionary - representations of coordinates with the following structure: - [{"latitude": lat, "longitude": lng}] - */ -+ (NSArray *)mgl_coordinatesFromCoordinates:(std::vector)coords; - -/** - Converts the receiver into a std::vector. - Receiver must conform to the following structure: - [{"latitude": lat, "longitude": lng}] - */ -- (std::vector)mgl_coordinates; - -@end diff --git a/platform/darwin/src/NSArray+MGLAdditions.mm b/platform/darwin/src/NSArray+MGLAdditions.mm deleted file mode 100644 index c5f25c83b63..00000000000 --- a/platform/darwin/src/NSArray+MGLAdditions.mm +++ /dev/null @@ -1,66 +0,0 @@ -#import "NSArray+MGLAdditions.h" - -#import "NSDictionary+MGLAdditions.h" -#import "NSExpression+MGLPrivateAdditions.h" -#import "MGLLoggingConfiguration_Private.h" - -@implementation NSArray (MGLAdditions) - -- (std::vector)mgl_vector { - std::vector vector; - vector.reserve(self.count); - for (id value in self) { - if ([value isKindOfClass:[NSArray class]]) { - std::vector innerVector = [value mgl_vector]; - vector.push_back(innerVector); - } else if ([value isKindOfClass:[NSDictionary class]]) { - mbgl::PropertyMap propertyMap = [value mgl_propertyMap]; - vector.push_back(propertyMap); - } else { - NSExpression *expression = [NSExpression expressionForConstantValue:value]; - vector.push_back(expression.mgl_constantMBGLValue); - } - } - return vector; -} - -- (NSAttributedString *)mgl_attributedComponentsJoinedByString:(NSString *)separator { - NSAttributedString *attributedSeparator = [[NSAttributedString alloc] initWithString:separator]; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init]; - BOOL isSubsequentItem = NO; - for (NSAttributedString *component in self) { - MGLAssert([component isKindOfClass:[NSAttributedString class]], @"Items in array must be attributed strings."); - if (isSubsequentItem) { - [attributedString appendAttributedString:attributedSeparator]; - } - isSubsequentItem = YES; - [attributedString appendAttributedString:component]; - } - return attributedString; -} - -+ (NSArray *)mgl_coordinatesFromCoordinates:(std::vector)coords { - NSMutableArray *coordinates = [NSMutableArray array]; - for (auto coord : coords) { - [coordinates addObject:@{@"latitude": @(coord.latitude), - @"longitude": @(coord.longitude)}]; - } - return coordinates; -} - -- (std::vector)mgl_coordinates { - NSUInteger numberOfCoordinates = [self count]; - CLLocationCoordinate2D *coords = (CLLocationCoordinate2D *)malloc(numberOfCoordinates * sizeof(CLLocationCoordinate2D)); - - for (NSUInteger i = 0; i < numberOfCoordinates; i++) { - coords[i] = CLLocationCoordinate2DMake([self[i][@"latitude"] doubleValue], - [self[i][@"longitude"] doubleValue]); - } - - std::vector coordinates = { coords, coords + numberOfCoordinates }; - free(coords); - - return coordinates; -} - -@end diff --git a/platform/darwin/src/NSBundle+MGLAdditions.h b/platform/darwin/src/NSBundle+MGLAdditions.h deleted file mode 100644 index dcafefedecb..00000000000 --- a/platform/darwin/src/NSBundle+MGLAdditions.h +++ /dev/null @@ -1,45 +0,0 @@ -#import - -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -// Strings in the SDK targets must be retrieved from the framework bundle rather -// than the main bundle, which is usually the application bundle. Redefining -// these macros ensures that the framework bundle’s string tables are used at -// runtime yet tools like genstrings and Xcode can still find the localizable -// string identifiers. (genstrings has an -s option that would allow us to -// define our own macros, but Xcode’s Export Localization feature lacks support -// for it.) -// -// As a consequence of this approach, this header must be included in all SDK -// files that include localizable strings. - -#undef NSLocalizedString -#define NSLocalizedString(key, comment) \ - [[NSBundle mgl_frameworkBundle] localizedStringForKey:(key) value:@"" table:nil] - -#undef NSLocalizedStringFromTable -#define NSLocalizedStringFromTable(key, tbl, comment) \ - [[NSBundle mgl_frameworkBundle] localizedStringForKey:(key) value:@"" table:(tbl)] - -#undef NSLocalizedStringWithDefaultValue -#define NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment) \ - [[NSBundle mgl_frameworkBundle] localizedStringForKey:(key) value:(val) table:(tbl)] - -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLBundleNotFoundException; - -@interface NSBundle (MGLAdditions) - -/// Returns the bundle containing the SDK’s classes and Info.plist file. -+ (instancetype)mgl_frameworkBundle; - -+ (nullable NSString *)mgl_frameworkBundleIdentifier; - -+ (nullable NSDictionary *)mgl_frameworkInfoDictionary; - -+ (nullable NSString *)mgl_applicationBundleIdentifier; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/NSBundle+MGLAdditions.m b/platform/darwin/src/NSBundle+MGLAdditions.m deleted file mode 100644 index da70a95373c..00000000000 --- a/platform/darwin/src/NSBundle+MGLAdditions.m +++ /dev/null @@ -1,50 +0,0 @@ -#import "NSBundle+MGLAdditions.h" - -#import "MGLAccountManager.h" - -const MGLExceptionName MGLBundleNotFoundException = @"MGLBundleNotFoundException"; - -@implementation NSBundle (MGLAdditions) - -+ (instancetype)mgl_frameworkBundle { - NSBundle *bundle = [self bundleForClass:[MGLAccountManager class]]; - - if (![bundle.infoDictionary[@"CFBundlePackageType"] isEqualToString:@"FMWK"]) { - // For static frameworks, the bundle is the containing application - // bundle but the resources are in Mapbox.bundle. - NSString *bundlePath = [bundle pathForResource:@"Mapbox" ofType:@"bundle"]; - if (bundlePath) { - bundle = [self bundleWithPath:bundlePath]; - } else { - [NSException raise:MGLBundleNotFoundException - format:@"The Mapbox framework bundle could not be found. If using the Mapbox Maps SDK for iOS as a static framework, make sure that Mapbox.bundle is copied into the root of the app bundle."]; - } - } - - return bundle; -} - -+ (nullable NSString *)mgl_frameworkBundleIdentifier { - return self.mgl_frameworkInfoDictionary[@"CFBundleIdentifier"]; -} - -+ (nullable NSDictionary *)mgl_frameworkInfoDictionary { - NSBundle *bundle = self.mgl_frameworkBundle; - return bundle.infoDictionary; -} - -+ (nullable NSString *)mgl_applicationBundleIdentifier { - NSString *bundleIdentifier = [NSBundle mainBundle].bundleIdentifier; - -#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && (__IPHONE_OS_VERSION_MAX_ALLOWED < 120200)) || \ - (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && (__MAC_OS_X_VERSION_MAX_ALLOWED < 101404)) - // Before SDK 12.2 (bundled with Xcode 10.2): There’s no main bundle identifier when running in a unit test bundle. - // 12.2 and after: the above bundle identifier is: com.apple.dt.xctest.tool - if (!bundleIdentifier) { - bundleIdentifier = [NSBundle bundleForClass:[MGLAccountManager class]].bundleIdentifier; - } -#endif - return bundleIdentifier; -} - -@end diff --git a/platform/darwin/src/NSCoder+MGLAdditions.h b/platform/darwin/src/NSCoder+MGLAdditions.h deleted file mode 100644 index 036a99c5afb..00000000000 --- a/platform/darwin/src/NSCoder+MGLAdditions.h +++ /dev/null @@ -1,16 +0,0 @@ -#import -#import - -#import - -@interface NSCoder (MGLAdditions) - -- (void)encodeMGLCoordinate:(CLLocationCoordinate2D)coordinate forKey:(NSString *)key; - -- (CLLocationCoordinate2D)decodeMGLCoordinateForKey:(NSString *)key; - -- (void)mgl_encodeLocationCoordinates2D:(std::vector)coordinates forKey:(NSString *)key; - -- (std::vector)mgl_decodeLocationCoordinates2DForKey:(NSString *)key; - -@end diff --git a/platform/darwin/src/NSCoder+MGLAdditions.mm b/platform/darwin/src/NSCoder+MGLAdditions.mm deleted file mode 100644 index 4af6c7588b5..00000000000 --- a/platform/darwin/src/NSCoder+MGLAdditions.mm +++ /dev/null @@ -1,26 +0,0 @@ -#import "NSCoder+MGLAdditions.h" - -#import "NSArray+MGLAdditions.h" -#import "NSValue+MGLAdditions.h" - -@implementation NSCoder (MGLAdditions) - -- (void)mgl_encodeLocationCoordinates2D:(std::vector)coordinates forKey:(NSString *)key { - [self encodeObject:[NSArray mgl_coordinatesFromCoordinates:coordinates] forKey:key]; -} - -- (std::vector)mgl_decodeLocationCoordinates2DForKey:(NSString *)key { - NSArray *coordinates = [self decodeObjectOfClass:[NSArray class] forKey:key]; - return [coordinates mgl_coordinates]; -} - -- (void)encodeMGLCoordinate:(CLLocationCoordinate2D)coordinate forKey:(NSString *)key { - [self encodeObject:@{@"latitude": @(coordinate.latitude), @"longitude": @(coordinate.longitude)} forKey:key]; -} - -- (CLLocationCoordinate2D)decodeMGLCoordinateForKey:(NSString *)key { - NSDictionary *coordinate = [self decodeObjectForKey:key]; - return CLLocationCoordinate2DMake([coordinate[@"latitude"] doubleValue], [coordinate[@"longitude"] doubleValue]); -} - -@end diff --git a/platform/darwin/src/NSComparisonPredicate+MGLAdditions.h b/platform/darwin/src/NSComparisonPredicate+MGLAdditions.h deleted file mode 100644 index 2cd4dd1577a..00000000000 --- a/platform/darwin/src/NSComparisonPredicate+MGLAdditions.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -#include - -@interface NSComparisonPredicate (MGLAdditions) - -@end diff --git a/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm b/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm deleted file mode 100644 index af9216f9ce3..00000000000 --- a/platform/darwin/src/NSComparisonPredicate+MGLAdditions.mm +++ /dev/null @@ -1,157 +0,0 @@ -#import "NSComparisonPredicate+MGLAdditions.h" - -#import "MGLStyleValue_Private.h" - -#import "NSPredicate+MGLAdditions.h" -#import "NSExpression+MGLPrivateAdditions.h" - -@implementation NSComparisonPredicate (MGLAdditions) - -- (NSString *)mgl_keyPath { - NSExpression *leftExpression = self.leftExpression; - NSExpression *rightExpression = self.rightExpression; - NSExpressionType leftType = leftExpression.expressionType; - NSExpressionType rightType = rightExpression.expressionType; - if (leftType == NSKeyPathExpressionType && rightType == NSConstantValueExpressionType) { - return leftExpression.keyPath; - } else if (leftType == NSConstantValueExpressionType && rightType == NSKeyPathExpressionType) { - return rightExpression.keyPath; - } - - [NSException raise:NSInvalidArgumentException - format:@"Comparison predicate must compare an attribute (as a key path) to a constant or vice versa."]; - return nil; -} - -- (mbgl::Value)mgl_constantValue { - NSExpression *leftExpression = self.leftExpression; - NSExpression *rightExpression = self.rightExpression; - NSExpressionType leftType = leftExpression.expressionType; - NSExpressionType rightType = rightExpression.expressionType; - mbgl::Value value; - if (leftType == NSKeyPathExpressionType && rightType == NSConstantValueExpressionType) { - value = rightExpression.mgl_constantMBGLValue; - } else if (leftType == NSConstantValueExpressionType && rightType == NSKeyPathExpressionType) { - value = leftExpression.mgl_constantMBGLValue; - } else { - [NSException raise:NSInvalidArgumentException - format:@"Comparison predicate must compare an attribute (as a key path) to a constant or vice versa."]; - } - return value; -} - -- (mbgl::FeatureType)mgl_featureType { - NSExpression *leftExpression = self.leftExpression; - NSExpression *rightExpression = self.rightExpression; - NSExpressionType leftType = leftExpression.expressionType; - NSExpressionType rightType = rightExpression.expressionType; - mbgl::FeatureType type; - if (leftType == NSKeyPathExpressionType && rightType == NSConstantValueExpressionType) { - type = rightExpression.mgl_featureType; - } else if (leftType == NSConstantValueExpressionType && rightType == NSKeyPathExpressionType) { - type = leftExpression.mgl_featureType; - } else { - [NSException raise:NSInvalidArgumentException - format:@"Comparison predicate must compare an attribute (as a key path) to a constant or vice versa."]; - } - return type; -} - -- (mbgl::FeatureIdentifier)mgl_featureIdentifier { - NSExpression *leftExpression = self.leftExpression; - NSExpression *rightExpression = self.rightExpression; - NSExpressionType leftType = leftExpression.expressionType; - NSExpressionType rightType = rightExpression.expressionType; - mbgl::FeatureIdentifier identifier; - if (leftType == NSKeyPathExpressionType && rightType == NSConstantValueExpressionType) { - identifier = rightExpression.mgl_featureIdentifier; - } else if (leftType == NSConstantValueExpressionType && rightType == NSKeyPathExpressionType) { - identifier = leftExpression.mgl_featureIdentifier; - } else { - [NSException raise:NSInvalidArgumentException - format:@"Comparison predicate must compare an attribute (as a key path) to a constant or vice versa."]; - } - return identifier; -} - -@end - -@implementation NSComparisonPredicate (MGLExpressionAdditions) - -- (id)mgl_jsonExpressionObject { - NSString *op; - switch (self.predicateOperatorType) { - case NSLessThanPredicateOperatorType: - op = @"<"; - break; - case NSLessThanOrEqualToPredicateOperatorType: - op = @"<="; - break; - case NSGreaterThanPredicateOperatorType: - op = @">"; - break; - case NSGreaterThanOrEqualToPredicateOperatorType: - op = @">="; - break; - case NSEqualToPredicateOperatorType: - op = @"=="; - break; - case NSNotEqualToPredicateOperatorType: - op = @"!="; - break; - case NSBetweenPredicateOperatorType: { - op = @"all"; - NSArray *limits = self.rightExpression.constantValue; - NSPredicate *leftHandPredicate = [NSComparisonPredicate predicateWithLeftExpression:limits[0] - rightExpression:self.leftExpression - modifier:NSDirectPredicateModifier - type:NSLessThanOrEqualToPredicateOperatorType - options:0]; - NSPredicate *rightHandPredicate = [NSComparisonPredicate predicateWithLeftExpression:self.leftExpression - rightExpression:limits[1] - modifier:NSDirectPredicateModifier - type:NSLessThanOrEqualToPredicateOperatorType - options:0]; - return @[op, leftHandPredicate.mgl_jsonExpressionObject, rightHandPredicate.mgl_jsonExpressionObject]; - } - case NSInPredicateOperatorType: { - - NSExpression *matchExpression = [NSExpression expressionForFunction:@"MGL_MATCH" - arguments:@[self.leftExpression, - self.rightExpression, - [NSExpression expressionForConstantValue:@YES], - [NSExpression expressionForConstantValue:@NO]]]; - - return matchExpression.mgl_jsonExpressionObject; - } - case NSContainsPredicateOperatorType: { - NSPredicate *inPredicate = [NSComparisonPredicate predicateWithLeftExpression:self.rightExpression - rightExpression:self.leftExpression - modifier:self.comparisonPredicateModifier - type:NSInPredicateOperatorType - options:self.options]; - return inPredicate.mgl_jsonExpressionObject; - } - case NSMatchesPredicateOperatorType: - case NSLikePredicateOperatorType: - case NSBeginsWithPredicateOperatorType: - case NSEndsWithPredicateOperatorType: - case NSCustomSelectorPredicateOperatorType: - [NSException raise:NSInvalidArgumentException - format:@"NSPredicateOperatorType:%lu is not supported.", (unsigned long)self.predicateOperatorType]; - } - if (!op) { - return nil; - } - NSArray *comparisonArray = @[op, self.leftExpression.mgl_jsonExpressionObject, self.rightExpression.mgl_jsonExpressionObject]; - if (self.options) { - NSDictionary *collatorObject = @{ - @"case-sensitive": @(!(self.options & NSCaseInsensitivePredicateOption)), - @"diacritic-sensitive": @(!(self.options & NSDiacriticInsensitivePredicateOption)), - }; - return [comparisonArray arrayByAddingObject:@[@"collator", collatorObject]]; - } - return comparisonArray; -} - -@end diff --git a/platform/darwin/src/NSCompoundPredicate+MGLAdditions.h b/platform/darwin/src/NSCompoundPredicate+MGLAdditions.h deleted file mode 100644 index 0f9909255d9..00000000000 --- a/platform/darwin/src/NSCompoundPredicate+MGLAdditions.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -#include - -@interface NSCompoundPredicate (MGLAdditions) - -@end diff --git a/platform/darwin/src/NSCompoundPredicate+MGLAdditions.mm b/platform/darwin/src/NSCompoundPredicate+MGLAdditions.mm deleted file mode 100644 index 5eb20da846e..00000000000 --- a/platform/darwin/src/NSCompoundPredicate+MGLAdditions.mm +++ /dev/null @@ -1,50 +0,0 @@ -#import "NSCompoundPredicate+MGLAdditions.h" - -#import "MGLStyleValue_Private.h" - -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSExpression+MGLPrivateAdditions.h" -#import "MGLLoggingConfiguration_Private.h" - -#include - -@implementation NSCompoundPredicate (MGLAdditions) - -- (std::vector)mgl_subfilters -{ - std::vectorfilters; - for (NSPredicate *predicate in self.subpredicates) { - filters.push_back(predicate.mgl_filter); - } - return filters; -} - -@end - -@implementation NSCompoundPredicate (MGLExpressionAdditions) - -- (id)mgl_jsonExpressionObject { - switch (self.compoundPredicateType) { - case NSNotPredicateType: { - MGLAssert(self.subpredicates.count <= 1, @"NOT predicate cannot have multiple subpredicates."); - NSPredicate *subpredicate = self.subpredicates.firstObject; - return @[@"!", subpredicate.mgl_jsonExpressionObject]; - } - - case NSAndPredicateType: { - NSArray *subarrays = [self.subpredicates valueForKeyPath:@"mgl_jsonExpressionObject"]; - return [@[@"all"] arrayByAddingObjectsFromArray:subarrays]; - } - - case NSOrPredicateType: { - NSArray *subarrays = [self.subpredicates valueForKeyPath:@"mgl_jsonExpressionObject"]; - return [@[@"any"] arrayByAddingObjectsFromArray:subarrays]; - } - } - - [NSException raise:@"Compound predicate type not handled" - format:@""]; - return nil; -} - -@end diff --git a/platform/darwin/src/NSDate+MGLAdditions.h b/platform/darwin/src/NSDate+MGLAdditions.h deleted file mode 100644 index 1da03fda62d..00000000000 --- a/platform/darwin/src/NSDate+MGLAdditions.h +++ /dev/null @@ -1,17 +0,0 @@ -#import - -#import "MGLFoundation.h" -#include - -NS_ASSUME_NONNULL_BEGIN - - -/// Converts from a duration in seconds to a duration object usable in mbgl. -MGL_EXPORT -mbgl::Duration MGLDurationFromTimeInterval(NSTimeInterval duration); - -/// Converts from an mbgl duration object to a duration in seconds. -MGL_EXPORT -NSTimeInterval MGLTimeIntervalFromDuration(mbgl::Duration duration); - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/NSDate+MGLAdditions.mm b/platform/darwin/src/NSDate+MGLAdditions.mm deleted file mode 100644 index b45b41f8366..00000000000 --- a/platform/darwin/src/NSDate+MGLAdditions.mm +++ /dev/null @@ -1,11 +0,0 @@ -#import "NSDate+MGLAdditions.h" - -mbgl::Duration MGLDurationFromTimeInterval(NSTimeInterval duration) -{ - return std::chrono::duration_cast(std::chrono::duration(duration)); -} - -NSTimeInterval MGLTimeIntervalFromDuration(mbgl::Duration duration) -{ - return std::chrono::duration>(duration).count(); -} diff --git a/platform/darwin/src/NSDictionary+MGLAdditions.h b/platform/darwin/src/NSDictionary+MGLAdditions.h deleted file mode 100644 index 556f21992b5..00000000000 --- a/platform/darwin/src/NSDictionary+MGLAdditions.h +++ /dev/null @@ -1,13 +0,0 @@ -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSDictionary (MGLAdditions) - -- (mbgl::PropertyMap)mgl_propertyMap; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/NSDictionary+MGLAdditions.mm b/platform/darwin/src/NSDictionary+MGLAdditions.mm deleted file mode 100644 index 4bc7ddb3cfe..00000000000 --- a/platform/darwin/src/NSDictionary+MGLAdditions.mm +++ /dev/null @@ -1,24 +0,0 @@ -#import "NSDictionary+MGLAdditions.h" - -#import "NSExpression+MGLPrivateAdditions.h" -#import "NSArray+MGLAdditions.h" - -@implementation NSDictionary (MGLAdditions) - -- (mbgl::PropertyMap)mgl_propertyMap { - mbgl::PropertyMap propertyMap; - for (NSString *key in self.allKeys) { - if ([self[key] isKindOfClass:[NSDictionary class]]) { - propertyMap[[key UTF8String]] = [self[key] mgl_propertyMap]; - } else if ([self[key] isKindOfClass:[NSArray class]]) { - NSArray *array = self[key]; - propertyMap[[key UTF8String]] = [array mgl_vector]; - } else { - NSExpression *expression = [NSExpression expressionForConstantValue:self[key]]; - propertyMap[[key UTF8String]] = expression.mgl_constantMBGLValue; - } - } - return propertyMap; -} - -@end diff --git a/platform/darwin/src/NSException+MGLAdditions.h b/platform/darwin/src/NSException+MGLAdditions.h deleted file mode 100644 index 274ca50a899..00000000000 --- a/platform/darwin/src/NSException+MGLAdditions.h +++ /dev/null @@ -1,4 +0,0 @@ -#import -#import "MGLLoggingConfiguration_Private.h" - -#define MGLAssertIsMainThread() MGLAssert([[NSThread currentThread] isMainThread], @"%s must be accessed on the main thread, not %@", __PRETTY_FUNCTION__, [NSThread currentThread]) diff --git a/platform/darwin/src/NSExpression+MGLAdditions.h b/platform/darwin/src/NSExpression+MGLAdditions.h deleted file mode 100644 index 2109310e690..00000000000 --- a/platform/darwin/src/NSExpression+MGLAdditions.h +++ /dev/null @@ -1,237 +0,0 @@ -#import -#if TARGET_OS_IPHONE - #import -#else - #import -#endif - -#import "MGLTypes.h" - -@class MGLAttributedExpression; - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *MGLExpressionInterpolationMode NS_TYPED_ENUM; - -/** - An `NSString` identifying the `linear` interpolation type in an `NSExpression`. - - This attribute corresponds to the `linear` value in the - interpolate - expression operator in the Mapbox Style Specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLExpressionInterpolationMode MGLExpressionInterpolationModeLinear; - -/** - An `NSString` identifying the `expotential` interpolation type in an `NSExpression`. - - This attribute corresponds to the `exponential` value in the - interpolate - expression operator in the Mapbox Style Specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLExpressionInterpolationMode MGLExpressionInterpolationModeExponential; - -/** - An `NSString` identifying the `cubic-bezier` interpolation type in an `NSExpression`. - - This attribute corresponds to the `cubic-bezier` value in the - interpolate - expression operator in the Mapbox Style Specification. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLExpressionInterpolationMode MGLExpressionInterpolationModeCubicBezier; - -/** - Methods for creating expressions that use Mapbox-specific functionality and for - converting to and from the JSON format defined in the - Mapbox Style Specification. - */ -@interface NSExpression (MGLAdditions) - -#pragma mark Creating Variable Expressions - -/** - `NSExpression` variable that corresponds to the - zoom - expression operator in the Mapbox Style Specification. - */ -@property (class, nonatomic, readonly) NSExpression *zoomLevelVariableExpression; - -/** - `NSExpression` variable that corresponds to the - heatmap-density - expression operator in the Mapbox Style Specification. - */ -@property (class, nonatomic, readonly) NSExpression *heatmapDensityVariableExpression; - -/** - `NSExpression` variable that corresponds to the - line-progress - expression operator in the Mapbox Style Specification. - */ -@property (class, nonatomic, readonly) NSExpression *lineProgressVariableExpression; - -/** - `NSExpression` variable that corresponds to the - geometry-type - expression operator in the Mapbox Style Specification. - */ -@property (class, nonatomic, readonly) NSExpression *geometryTypeVariableExpression; - -/** - `NSExpression` variable that corresponds to the - id - expression operator in the Mapbox Style Specification. - */ -@property (class, nonatomic, readonly) NSExpression *featureIdentifierVariableExpression; - -/** - `NSExpression` variable that corresponds to the - id - expression operator in the Mapbox Style Specification. - */ -@property (class, nonatomic, readonly) NSExpression *featureAccumulatedVariableExpression; - -/** - `NSExpression` variable that corresponds to the - properties - expression operator in the Mapbox Style Specification. - */ -@property (class, nonatomic, readonly) NSExpression *featureAttributesVariableExpression; - -@property (class, nonatomic, readonly) NSExpression *featurePropertiesVariableExpression __attribute__((deprecated("", "featureAttributesVariableExpression"))); - -#pragma mark Creating Conditional Expressions - -/** - Returns a conditional function expression specifying the string predicate, and - expressions for each condition. - - @param conditionPredicate The predicate to get evaluated. - @param trueExpression The expression for conditions equal to true. - @param falseExpression The expression for conditions equal to false. - */ -+ (instancetype)mgl_expressionForConditional:(nonnull NSPredicate *)conditionPredicate trueExpression:(nonnull NSExpression *)trueExpression falseExpresssion:(nonnull NSExpression *)falseExpression NS_SWIFT_NAME(init(forMGLConditional:trueExpression:falseExpression:)); - -#pragma mark Creating Ramp, Scale, and Curve Expressions - -/** - Returns a step function expression specifying the stepping, from expression - and stops. - - @param steppingExpression The stepping expression. - @param minimumExpression The expression which could be a constant or function expression. - @param stops The stops must be an `NSDictionary` constant `NSExpression`. - - #### Related examples - See the - Data-driven circles, - Cluster point data, and - Use images to cluster point data examples to learn how to use this - expression to style a map layer based on an attribute value. - */ -+ (instancetype)mgl_expressionForSteppingExpression:(nonnull NSExpression*)steppingExpression fromExpression:(nonnull NSExpression *)minimumExpression stops:(nonnull NSExpression*)stops NS_SWIFT_NAME(init(forMGLStepping:from:stops:)); - -/** - Returns an interpolated function expression specifying the function operator, curve type, - parameters and steps. - - @param inputExpression The interpolating expression input. - @param curveType The curve type could be `MGLExpressionInterpolationModeLinear`, - `MGLExpressionInterpolationModeExponential` and - `MGLExpressionInterpolationModeCubicBezier`. - @param parameters The parameters expression. - @param stops The stops expression. - - #### Related examples - See the - Create a heatmap layer example to learn how to style an `MGLHeatmapStyleLayer` - based on zoom level and point density with this expression. - */ -+ (instancetype)mgl_expressionForInterpolatingExpression:(nonnull NSExpression*)inputExpression withCurveType:(nonnull MGLExpressionInterpolationMode)curveType parameters:(nullable NSExpression *)parameters stops:(nonnull NSExpression*)stops NS_SWIFT_NAME(init(forMGLInterpolating:curveType:parameters:stops:)); - -/** - Returns a match function expression specifying the input, matching values, - and default value. - - @param inputExpression The matching expression. - @param matchedExpressions The matched values expression dictionary must be condition : value. - @param defaultExpression The defaultValue expression to be used in case there is no match. - */ -+ (instancetype)mgl_expressionForMatchingExpression:(nonnull NSExpression *)inputExpression inDictionary:(nonnull NSDictionary *)matchedExpressions defaultExpression:(nonnull NSExpression *)defaultExpression NS_SWIFT_NAME(init(forMGLMatchingKey:in:default:)); - -/** - Returns an attributed function expression specifying an `MGLAttributedExpression` constant - expression array. - - @param attributedExpressions The `MGLAttributedExpression` constant expression array. - */ -+ (instancetype)mgl_expressionForAttributedExpressions:(nonnull NSArray *)attributedExpressions NS_SWIFT_NAME(init(forAttributedExpressions:)); - -#pragma mark Concatenating String Expressions - -/** - Returns a constant expression appending the passed expression. - - @note Both the receiver and the given expression must be an `NSString` constant - expression type; otherwise, an exception is rised. - - @param expression The expression to append to the receiver. - */ -- (instancetype)mgl_expressionByAppendingExpression:(nonnull NSExpression *)expression NS_SWIFT_NAME(mgl_appending(_:)); - -#pragma mark Converting JSON Expressions - -/** - Returns an expression equivalent to the given Foundation object deserialized - from JSON data. - - The Foundation object is interpreted according to the - [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions). - See the - “[Information for Style Authors](../for-style-authors.html#setting-attribute-values)” - guide for a correspondence of operators and types between the style - specification and the `NSExpression` representation used by this SDK. - - @param object A Foundation object deserialized from JSON data, for example - using `NSJSONSerialization`. - @return An initialized expression equivalent to `object`, suitable for use as - the value of a style layer attribute. - */ -+ (instancetype)expressionWithMGLJSONObject:(id)object NS_SWIFT_NAME(init(mglJSONObject:)); - -/** - An equivalent Foundation object that can be serialized as JSON. - - The Foundation object conforms to the - [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions). - See the - “[Information for Style Authors](../for-style-authors.html#setting-attribute-values)” - guide for a correspondence of operators and types between the style - specification and the `NSExpression` representation used by this SDK. - - You can use `NSJSONSerialization` to serialize the Foundation object as data to - write to a file. - */ -@property (nonatomic, readonly) id mgl_jsonExpressionObject; - -#pragma mark Localizing the Expression - -/** - Returns a copy of the receiver localized into the given locale. - - This method assumes the receiver refers to the feature attributes that are - available in vector tiles supplied by the - Mapbox Streets source. - On iOS, the user can set the system’s preferred language in Settings, General - Settings, Language & Region. On macOS, the user can set the system’s preferred - language in the Language & Region pane of System Preferences. - - @param locale The locale into which labels should be localized. To use the - system’s preferred language, if supported, specify `nil`. To use the local - language, specify a locale with the identifier `mul`. - */ -- (NSExpression *)mgl_expressionLocalizedIntoLocale:(nullable NSLocale *)locale; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm deleted file mode 100644 index 80008aa69b6..00000000000 --- a/platform/darwin/src/NSExpression+MGLAdditions.mm +++ /dev/null @@ -1,1605 +0,0 @@ -#import "MGLFoundation_Private.h" -#import "MGLGeometry_Private.h" -#import "NSExpression+MGLPrivateAdditions.h" - -#import "MGLTypes.h" -#if TARGET_OS_IPHONE - #import "UIColor+MGLAdditions.h" -#else - #import "NSColor+MGLAdditions.h" -#endif -#import "NSPredicate+MGLAdditions.h" -#import "NSValue+MGLStyleAttributeAdditions.h" -#import "MGLVectorTileSource_Private.h" -#import "MGLAttributedExpression.h" - -#import - -#import - -const MGLExpressionInterpolationMode MGLExpressionInterpolationModeLinear = @"linear"; -const MGLExpressionInterpolationMode MGLExpressionInterpolationModeExponential = @"exponential"; -const MGLExpressionInterpolationMode MGLExpressionInterpolationModeCubicBezier = @"cubic-bezier"; - -@interface MGLAftermarketExpressionInstaller: NSObject -@end - -@implementation MGLAftermarketExpressionInstaller - -+ (void)load { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [self installFunctions]; - }); -} - -/** - Adds to NSExpression’s built-in repertoire of functions. - */ -+ (void)installFunctions { - Class MGLAftermarketExpressionInstaller = [self class]; - - // NSExpression’s built-in functions are backed by class methods on a - // private class, so use a function expression to get at the class. - // http://funwithobjc.tumblr.com/post/2922267976/using-custom-functions-with-nsexpression - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"sum({})"]; - NSString *className = NSStringFromClass([functionExpression.operand.constantValue class]); - - // Effectively categorize the class with some extra class methods. - Class NSPredicateUtilities = objc_getMetaClass(className.UTF8String); -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wundeclared-selector" - #define INSTALL_METHOD(sel) \ - { \ - Method method = class_getInstanceMethod(MGLAftermarketExpressionInstaller, @selector(sel)); \ - class_addMethod(NSPredicateUtilities, @selector(sel), method_getImplementation(method), method_getTypeEncoding(method)); \ - } - #define INSTALL_CONTROL_STRUCTURE(sel) \ - { \ - Method method = class_getInstanceMethod(MGLAftermarketExpressionInstaller, @selector(sel:)); \ - class_addMethod(NSPredicateUtilities, @selector(sel), method_getImplementation(method), method_getTypeEncoding(method)); \ - class_addMethod(NSPredicateUtilities, @selector(sel:), method_getImplementation(method), method_getTypeEncoding(method)); \ - } - - // Install method-like functions, taking the number of arguments implied by - // the selector name. - INSTALL_METHOD(mgl_join:); - INSTALL_METHOD(mgl_round:); - INSTALL_METHOD(mgl_interpolate:withCurveType:parameters:stops:); - INSTALL_METHOD(mgl_step:from:stops:); - INSTALL_METHOD(mgl_coalesce:); - INSTALL_METHOD(mgl_does:have:); - INSTALL_METHOD(mgl_acos:); - INSTALL_METHOD(mgl_cos:); - INSTALL_METHOD(mgl_asin:); - INSTALL_METHOD(mgl_sin:); - INSTALL_METHOD(mgl_atan:); - INSTALL_METHOD(mgl_tan:); - INSTALL_METHOD(mgl_log2:); - INSTALL_METHOD(mgl_attributed:); - - // Install functions that resemble control structures, taking arbitrary - // numbers of arguments. Vararg aftermarket functions need to be declared - // with an explicit and implicit first argument. - INSTALL_CONTROL_STRUCTURE(MGL_LET); - INSTALL_CONTROL_STRUCTURE(MGL_MATCH); - INSTALL_CONTROL_STRUCTURE(MGL_IF); - INSTALL_CONTROL_STRUCTURE(MGL_FUNCTION); - - #undef INSTALL_AFTERMARKET_FN -#pragma clang diagnostic pop -} - -/** - Joins the given components into a single string by concatenating each component - in order. - */ -- (NSString *)mgl_join:(NSArray *)components { - return [components componentsJoinedByString:@""]; -} - -- (NSString *)mgl_attributed:(NSArray *)attributedExpressions { - [NSException raise:NSInvalidArgumentException - format:@"Text format expressions lack underlying Objective-C implementations."]; - return nil; -} - -/** - Rounds the given number to the nearest integer. If the number is halfway - between two integers, this method rounds it away from zero. - */ -- (NSNumber *)mgl_round:(NSNumber *)number { - return @(round(number.doubleValue)); -} - -/** - Computes the principal value of the inverse cosine. - */ -- (NSNumber *)mgl_acos:(NSNumber *)number { - return @(acos(number.doubleValue)); -} - -/** - Computes the principal value of the cosine. - */ -- (NSNumber *)mgl_cos:(NSNumber *)number { - return @(cos(number.doubleValue)); -} - -/** - Computes the principal value of the inverse sine. - */ -- (NSNumber *)mgl_asin:(NSNumber *)number { - return @(asin(number.doubleValue)); -} - -/** - Computes the principal value of the sine. - */ -- (NSNumber *)mgl_sin:(NSNumber *)number { - return @(sin(number.doubleValue)); -} - -/** - Computes the principal value of the inverse tangent. - */ -- (NSNumber *)mgl_atan:(NSNumber *)number { - return @(atan(number.doubleValue)); -} - -/** - Computes the principal value of the tangent. - */ -- (NSNumber *)mgl_tan:(NSNumber *)number { - return @(tan(number.doubleValue)); -} - -/** - Computes the logarithm base two of the value. - */ -- (NSNumber *)mgl_log2:(NSNumber *)number { - return @(log2(number.doubleValue)); -} - -/** - A placeholder for a method that evaluates an interpolation expression. - */ -- (id)mgl_interpolate:(id)inputExpression withCurveType:(NSString *)curveType parameters:(NSDictionary *)params stops:(NSDictionary *)stops { - [NSException raise:NSInvalidArgumentException - format:@"Interpolation expressions lack underlying Objective-C implementations."]; - return nil; -} - -/** - A placeholder for a method that evaluates a step expression. - */ -- (id)mgl_step:(id)inputExpression from:(id)minimumExpression stops:(NSDictionary *)stops { - [NSException raise:NSInvalidArgumentException - format:@"Step expressions lack underlying Objective-C implementations."]; - return nil; -} - -/** - A placeholder for a method that evaluates a coalesce expression. - */ -- (id)mgl_coalesce:(NSArray *)elements { - [NSException raise:NSInvalidArgumentException - format:@"Coalesce expressions lack underlying Objective-C implementations."]; - return nil; -} - -/** - Returns a Boolean value indicating whether the object has a value for the given - key. - */ -- (BOOL)mgl_does:(id)object have:(NSString *)key { - return [object valueForKey:key] != nil; -} - -/** - A placeholder for a method that evaluates an expression based on an arbitrary - number of variable names and assigned expressions. - */ -- (id)MGL_LET:(NSString *)firstVariableName, ... { - [NSException raise:NSInvalidArgumentException - format:@"Assignment expressions lack underlying Objective-C implementations."]; - return nil; -} - -/** - A placeholder for a method that evaluates an expression and returns the matching element. - */ -- (id)MGL_MATCH:(id)firstCondition, ... { - [NSException raise:NSInvalidArgumentException - format:@"Assignment expressions lack underlying Objective-C implementations."]; - return nil; -} - -/** - A placeholder for a method that evaluates an expression and returns the matching element. - */ -- (id)MGL_IF:(id)firstCondition, ... { - va_list argumentList; - va_start(argumentList, firstCondition); - - for (id eachExpression = firstCondition; eachExpression; eachExpression = va_arg(argumentList, id)) { - if ([eachExpression isKindOfClass:[NSComparisonPredicate class]]) { - id valueExpression = va_arg(argumentList, id); - if ([eachExpression evaluateWithObject:nil]) { - return valueExpression; - } - } else { - return eachExpression; - } - } - va_end(argumentList); - - return nil; -} - -/** - A placeholder for a catch-all method that evaluates an arbitrary number of - arguments as an expression according to the Mapbox Style Specification’s - expression language. - */ -- (id)MGL_FUNCTION:(id)firstArgument, ... { - [NSException raise:NSInvalidArgumentException - format:@"Mapbox GL function expressions lack underlying Objective-C implementations."]; - return nil; -} - -@end - -@implementation NSExpression (MGLPrivateAdditions) - -- (std::vector)mgl_aggregateMBGLValue { - if ([self.constantValue isKindOfClass:[NSArray class]] || [self.constantValue isKindOfClass:[NSSet class]]) { - std::vector convertedValues; - for (id value in self.constantValue) { - NSExpression *expression = value; - if (![expression isKindOfClass:[NSExpression class]]) { - expression = [NSExpression expressionForConstantValue:expression]; - } - convertedValues.push_back(expression.mgl_constantMBGLValue); - } - return convertedValues; - } - [NSException raise:NSInvalidArgumentException - format:@"Constant value expression must contain an array or set."]; - return {}; -} - -- (mbgl::Value)mgl_constantMBGLValue { - id value = self.constantValue; - if ([value isKindOfClass:NSString.class]) { - return { std::string([(NSString *)value UTF8String]) }; - } else if ([value isKindOfClass:NSNumber.class]) { - NSNumber *number = (NSNumber *)value; - if ((strcmp([number objCType], @encode(char)) == 0) || - (strcmp([number objCType], @encode(BOOL)) == 0)) { - // char: 32-bit boolean - // BOOL: 64-bit boolean - return { (bool)number.boolValue }; - } else if (strcmp([number objCType], @encode(double)) == 0) { - // Double values on all platforms are interpreted precisely. - return { (double)number.doubleValue }; - } else if (strcmp([number objCType], @encode(float)) == 0) { - // Float values when taken as double introduce precision problems, - // so warn the user to avoid them. This would require them to - // explicitly use -[NSNumber numberWithFloat:] arguments anyway. - // We still do this conversion in order to provide a valid value. - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSLog(@"Float value in expression will be converted to a double; some imprecision may result. " - @"Use double values explicitly when specifying constant expression values and " - @"when specifying arguments to predicate and expression format strings. " - @"This will be logged only once."); - }); - return { (double)number.doubleValue }; - } else if ([number compare:@(0)] == NSOrderedDescending || - [number compare:@(0)] == NSOrderedSame) { - // Positive integer or zero; use uint64_t per mbgl::Value definition. - // We use unsigned long long here to avoid any truncation. - return { (uint64_t)number.unsignedLongLongValue }; - } else if ([number compare:@(0)] == NSOrderedAscending) { - // Negative integer; use int64_t per mbgl::Value definition. - // We use long long here to avoid any truncation. - return { (int64_t)number.longLongValue }; - } - } else if ([value isKindOfClass:[MGLColor class]]) { - auto hexString = [(MGLColor *)value mgl_color].stringify(); - return { hexString }; - } else if (value && value != [NSNull null]) { - [NSException raise:NSInvalidArgumentException - format:@"Can’t convert %s:%@ to mbgl::Value", [value objCType], value]; - } - return {}; -} - -- (std::vector)mgl_aggregateFeatureType { - if ([self.constantValue isKindOfClass:[NSArray class]] || [self.constantValue isKindOfClass:[NSSet class]]) { - std::vector convertedValues; - for (id value in self.constantValue) { - NSExpression *expression = value; - if (![expression isKindOfClass:[NSExpression class]]) { - expression = [NSExpression expressionForConstantValue:expression]; - } - convertedValues.push_back(expression.mgl_featureType); - } - return convertedValues; - } - [NSException raise:NSInvalidArgumentException - format:@"Constant value expression must contain an array or set."]; - return {}; -} - -- (mbgl::FeatureType)mgl_featureType { - id value = self.constantValue; - if ([value isKindOfClass:NSString.class]) { - if ([value isEqualToString:@"Point"]) { - return mbgl::FeatureType::Point; - } - if ([value isEqualToString:@"LineString"]) { - return mbgl::FeatureType::LineString; - } - if ([value isEqualToString:@"Polygon"]) { - return mbgl::FeatureType::Polygon; - } - } else if ([value isKindOfClass:NSNumber.class]) { - switch ([value integerValue]) { - case 1: - return mbgl::FeatureType::Point; - case 2: - return mbgl::FeatureType::LineString; - case 3: - return mbgl::FeatureType::Polygon; - default: - break; - } - } - return mbgl::FeatureType::Unknown; -} - -- (std::vector)mgl_aggregateFeatureIdentifier { - if ([self.constantValue isKindOfClass:[NSArray class]] || [self.constantValue isKindOfClass:[NSSet class]]) { - std::vector convertedValues; - for (id value in self.constantValue) { - NSExpression *expression = value; - if (![expression isKindOfClass:[NSExpression class]]) { - expression = [NSExpression expressionForConstantValue:expression]; - } - convertedValues.push_back(expression.mgl_featureIdentifier); - } - return convertedValues; - } - [NSException raise:NSInvalidArgumentException - format:@"Constant value expression must contain an array or set."]; - return {}; -} - -- (mbgl::FeatureIdentifier)mgl_featureIdentifier { - mbgl::Value mbglValue = self.mgl_constantMBGLValue; - - if (mbglValue.is()) { - return mbglValue.get(); - } - if (mbglValue.is()) { - return mbglValue.get(); - } - if (mbglValue.is()) { - return mbglValue.get(); - } - if (mbglValue.is()) { - return mbglValue.get(); - } - - return {}; -} - -@end - -@implementation NSObject (MGLExpressionAdditions) - -- (NSNumber *)mgl_number { - return nil; -} - -- (NSNumber *)mgl_numberWithFallbackValues:(id)fallbackValue, ... { - if (self.mgl_number) { - return self.mgl_number; - } - - va_list fallbackValues; - va_start(fallbackValues, fallbackValue); - for (id value = fallbackValue; value; value = va_arg(fallbackValues, id)) { - if ([value mgl_number]) { - return [value mgl_number]; - } - } - - return nil; -} - -@end - -@implementation NSNull (MGLExpressionAdditions) - -- (id)mgl_jsonExpressionObject { - return self; -} - -@end - -@implementation NSString (MGLExpressionAdditions) - -- (id)mgl_jsonExpressionObject { - return self; -} - -- (NSNumber *)mgl_number { - if (self.doubleValue || ![[NSDecimalNumber decimalNumberWithString:self] isEqual:[NSDecimalNumber notANumber]]) { - return @(self.doubleValue); - } - - return nil; -} - -@end - -@implementation NSNumber (MGLExpressionAdditions) - -- (id)mgl_interpolateWithCurveType:(NSString *)curveType - parameters:(NSArray *)parameters - stops:(NSDictionary *)stops { - [NSException raise:NSInvalidArgumentException - format:@"Interpolation expressions lack underlying Objective-C implementations."]; - return nil; -} - -- (id)mgl_stepWithMinimum:(id)minimum stops:(NSDictionary *)stops { - [NSException raise:NSInvalidArgumentException - format:@"Interpolation expressions lack underlying Objective-C implementations."]; - return nil; -} - -- (NSNumber *)mgl_number { - return self; -} - -- (id)mgl_jsonExpressionObject { - if ([self isEqualToNumber:@(M_E)]) { - return @[@"e"]; - } else if ([self isEqualToNumber:@(M_PI)]) { - return @[@"pi"]; - } - return self; -} - -@end - -@implementation MGLColor (MGLExpressionAdditions) - -- (id)mgl_jsonExpressionObject { - auto color = [self mgl_color]; - if (color.a == 1) { - return @[@"rgb", @(color.r * 255), @(color.g * 255), @(color.b * 255)]; - } - return @[@"rgba", @(color.r * 255), @(color.g * 255), @(color.b * 255), @(color.a)]; -} - -@end - -@implementation NSArray (MGLExpressionAdditions) - -- (id)mgl_jsonExpressionObject { - return [self valueForKeyPath:@"mgl_jsonExpressionObject"]; -} - -- (id)mgl_coalesce { - [NSException raise:NSInvalidArgumentException - format:@"Coalesce expressions lack underlying Objective-C implementations."]; - return nil; -} - -@end - -@implementation NSDictionary (MGLExpressionAdditions) - -- (id)mgl_jsonExpressionObject { - NSMutableDictionary *expressionObject = [NSMutableDictionary dictionaryWithCapacity:self.count]; - [self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { - expressionObject[[key mgl_jsonExpressionObject]] = [obj mgl_jsonExpressionObject]; - }]; - - return expressionObject; -} - -- (id)mgl_has:(id)element { - [NSException raise:NSInvalidArgumentException - format:@"Has expressions lack underlying Objective-C implementations."]; - return nil; - -} - -@end - -@implementation NSExpression (MGLExpressionAdditions) - -- (NSExpression *)mgl_expressionWithContext:(NSDictionary *)context { - [NSException raise:NSInternalInconsistencyException - format:@"Assignment expressions lack underlying Objective-C implementations."]; - return self; -} - -- (id)mgl_has:(id)element { - [NSException raise:NSInvalidArgumentException - format:@"Has expressions lack underlying Objective-C implementations."]; - return nil; -} - -@end - -@implementation NSExpression (MGLAdditions) - -+ (NSExpression *)zoomLevelVariableExpression { - return [NSExpression expressionForVariable:@"zoomLevel"]; -} - -+ (NSExpression *)heatmapDensityVariableExpression { - return [NSExpression expressionForVariable:@"heatmapDensity"]; -} - -+ (NSExpression *)lineProgressVariableExpression { - return [NSExpression expressionForVariable:@"lineProgress"]; -} - -+ (NSExpression *)featureAccumulatedVariableExpression { - return [NSExpression expressionForVariable:@"featureAccumulated"]; -} - -+ (NSExpression *)geometryTypeVariableExpression { - return [NSExpression expressionForVariable:@"geometryType"]; -} - -+ (NSExpression *)featureIdentifierVariableExpression { - return [NSExpression expressionForVariable:@"featureIdentifier"]; -} - -+ (NSExpression *)featureAttributesVariableExpression { - return [NSExpression expressionForVariable:@"featureAttributes"]; -} - -+ (NSExpression *)featurePropertiesVariableExpression { - return [self featureAttributesVariableExpression]; -} - -+ (instancetype)mgl_expressionForConditional:(nonnull NSPredicate *)conditionPredicate trueExpression:(nonnull NSExpression *)trueExpression falseExpresssion:(nonnull NSExpression *)falseExpression { - return [NSExpression expressionForConditional:conditionPredicate trueExpression:trueExpression falseExpression:falseExpression]; -} - -+ (instancetype)mgl_expressionForSteppingExpression:(nonnull NSExpression *)steppingExpression fromExpression:(nonnull NSExpression *)minimumExpression stops:(nonnull NSExpression *)stops { - return [NSExpression expressionForFunction:@"mgl_step:from:stops:" - arguments:@[steppingExpression, minimumExpression, stops]]; -} - -+ (instancetype)mgl_expressionForInterpolatingExpression:(nonnull NSExpression *)inputExpression withCurveType:(nonnull MGLExpressionInterpolationMode)curveType parameters:(nullable NSExpression *)parameters stops:(nonnull NSExpression *)stops { - NSExpression *sanitizeParams = parameters ? parameters : [NSExpression expressionForConstantValue:nil]; - return [NSExpression expressionForFunction:@"mgl_interpolate:withCurveType:parameters:stops:" - arguments:@[inputExpression, [NSExpression expressionForConstantValue:curveType], sanitizeParams, stops]]; -} - -+ (instancetype)mgl_expressionForMatchingExpression:(nonnull NSExpression *)inputExpression inDictionary:(nonnull NSDictionary *)matchedExpressions defaultExpression:(nonnull NSExpression *)defaultExpression { - NSMutableArray *optionsArray = [NSMutableArray arrayWithObjects:inputExpression, nil]; - - NSEnumerator *matchEnumerator = matchedExpressions.keyEnumerator; - while (NSExpression *key = matchEnumerator.nextObject) { - [optionsArray addObject:key]; - [optionsArray addObject:[matchedExpressions objectForKey:key]]; - } - - [optionsArray addObject:defaultExpression]; - return [NSExpression expressionForFunction:@"MGL_MATCH" - arguments:optionsArray]; -} - -+ (instancetype)mgl_expressionForAttributedExpressions:(nonnull NSArray *)attributedExpressions { - return [NSExpression expressionForFunction:@"mgl_attributed:" arguments:attributedExpressions]; -} - -- (instancetype)mgl_expressionByAppendingExpression:(nonnull NSExpression *)expression { - NSExpression *subexpression = [NSExpression expressionForAggregate:@[self, expression]]; - return [NSExpression expressionForFunction:@"mgl_join:" arguments:@[subexpression]]; -} - -static NSDictionary *MGLFunctionNamesByExpressionOperator; -static NSDictionary *MGLExpressionOperatorsByFunctionNames; - -NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { - NSMutableArray *subexpressions = [NSMutableArray arrayWithCapacity:objects.count]; - for (id object in objects) { - NSExpression *expression = [NSExpression expressionWithMGLJSONObject:object]; - [subexpressions addObject:expression]; - } - return subexpressions; -} - -+ (instancetype)expressionWithMGLJSONObject:(id)object { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - MGLFunctionNamesByExpressionOperator = @{ - @"+": @"add:to:", - @"-": @"from:subtract:", - @"*": @"multiply:by:", - @"/": @"divide:by:", - @"%": @"modulus:by:", - @"sqrt": @"sqrt:", - @"log10": @"log:", - @"ln": @"ln:", - @"abs": @"abs:", - @"round": @"mgl_round:", - @"acos" : @"mgl_acos:", - @"cos" : @"mgl_cos:", - @"asin" : @"mgl_asin:", - @"sin" : @"mgl_sin:", - @"atan" : @"mgl_atan:", - @"tan" : @"mgl_tan:", - @"log2" : @"mgl_log2:", - @"floor": @"floor:", - @"ceil": @"ceiling:", - @"^": @"raise:toPower:", - @"upcase": @"uppercase:", - @"downcase": @"lowercase:", - @"let": @"MGL_LET", - }; - }); - if (!object || object == [NSNull null]) { - return [NSExpression expressionForConstantValue:nil]; - } - - if ([object isKindOfClass:[NSString class]] || - [object isKindOfClass:[NSNumber class]] || - [object isKindOfClass:[NSValue class]] || - [object isKindOfClass:[MGLColor class]]) { - return [NSExpression expressionForConstantValue:object]; - } - - if ([object isKindOfClass:[NSDictionary class]]) { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:[object count]]; - [object enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { - dictionary[key] = [NSExpression expressionWithMGLJSONObject:obj]; - }]; - return [NSExpression expressionForConstantValue:dictionary]; - } - if ([object isKindOfClass:[NSArray class]]) { - NSArray *array = (NSArray *)object; - NSString *op = array.firstObject; - - if (![op isKindOfClass:[NSString class]]) { - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(array); - return [NSExpression expressionForFunction:@"MGL_FUNCTION" arguments:subexpressions]; - } - - NSArray *argumentObjects = [array subarrayWithRange:NSMakeRange(1, array.count - 1)]; - - NSString *functionName = MGLFunctionNamesByExpressionOperator[op]; - if (functionName) { - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); - if ([op isEqualToString:@"+"] && argumentObjects.count > 2) { - NSExpression *subexpression = [NSExpression expressionForAggregate:subexpressions]; - return [NSExpression expressionForFunction:@"sum:" - arguments:@[subexpression]]; - } else if ([op isEqualToString:@"^"] && [argumentObjects.firstObject isEqual:@[@"e"]]) { - functionName = @"exp:"; - subexpressions = [subexpressions subarrayWithRange:NSMakeRange(1, subexpressions.count - 1)]; - } - - return [NSExpression expressionForFunction:functionName - arguments:subexpressions]; - } else if ([op isEqualToString:@"collator"]) { - // Avoid wrapping collator options object in literal expression. - return [NSExpression expressionForFunction:@"MGL_FUNCTION" arguments:array]; - } else if ([op isEqualToString:@"literal"]) { - if ([argumentObjects.firstObject isKindOfClass:[NSArray class]]) { - return [NSExpression expressionForAggregate:MGLSubexpressionsWithJSONObjects(argumentObjects.firstObject)]; - } - return [NSExpression expressionWithMGLJSONObject:argumentObjects.firstObject]; - } else if ([op isEqualToString:@"to-boolean"]) { - NSExpression *operand = [NSExpression expressionWithMGLJSONObject:argumentObjects.firstObject]; - return [NSExpression expressionForFunction:operand selectorName:@"boolValue" arguments:@[]]; - } else if ([op isEqualToString:@"to-number"] || [op isEqualToString:@"number"]) { - NSExpression *operand = [NSExpression expressionWithMGLJSONObject:argumentObjects.firstObject]; - if (argumentObjects.count == 1) { - return [NSExpression expressionWithFormat:@"CAST(%@, 'NSNumber')", operand]; - } - argumentObjects = [argumentObjects subarrayWithRange:NSMakeRange(1, argumentObjects.count - 1)]; - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); - return [NSExpression expressionForFunction:operand selectorName:@"mgl_numberWithFallbackValues:" arguments:subexpressions]; - } else if ([op isEqualToString:@"to-string"] || [op isEqualToString:@"string"]) { - NSExpression *operand = [NSExpression expressionWithMGLJSONObject:argumentObjects.firstObject]; - return [NSExpression expressionWithFormat:@"CAST(%@, 'NSString')", operand]; - } else if ([op isEqualToString:@"to-color"]) { - NSExpression *operand = [NSExpression expressionWithMGLJSONObject:argumentObjects.firstObject]; - - if (argumentObjects.count == 1) { -#if TARGET_OS_IPHONE - return [NSExpression expressionWithFormat:@"CAST(%@, 'UIColor')", operand]; -#else - return [NSExpression expressionWithFormat:@"CAST(%@, 'NSColor')", operand]; -#endif - } - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(array); - return [NSExpression expressionForFunction:@"MGL_FUNCTION" arguments:subexpressions]; - - } else if ([op isEqualToString:@"to-rgba"]) { - NSExpression *operand = [NSExpression expressionWithMGLJSONObject:argumentObjects.firstObject]; - return [NSExpression expressionWithFormat:@"CAST(noindex(%@), 'NSArray')", operand]; - } else if ([op isEqualToString:@"get"]) { - if (argumentObjects.count == 2) { - NSExpression *operand = [NSExpression expressionWithMGLJSONObject:argumentObjects.lastObject]; - if ([argumentObjects.firstObject isKindOfClass:[NSString class]]) { - return [NSExpression expressionWithFormat:@"%@.%K", operand, argumentObjects.firstObject]; - } - NSExpression *key = [NSExpression expressionWithMGLJSONObject:argumentObjects.firstObject]; - return [NSExpression expressionWithFormat:@"%@.%@", operand, key]; - } - return [NSExpression expressionForKeyPath:argumentObjects.firstObject]; - } else if ([op isEqualToString:@"length"]) { - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); - NSString *function = @"count:"; - if ([subexpressions.firstObject expressionType] == NSConstantValueExpressionType - && [[subexpressions.firstObject constantValue] isKindOfClass:[NSString class]]) { - function = @"length:"; - } - return [NSExpression expressionForFunction:function arguments:@[subexpressions.firstObject]]; - } else if ([op isEqualToString:@"rgb"]) { - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); - return [NSExpression mgl_expressionForRGBComponents:subexpressions]; - } else if ([op isEqualToString:@"rgba"]) { - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); - return [NSExpression mgl_expressionForRGBAComponents:subexpressions]; - } else if ([op isEqualToString:@"min"]) { - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); - NSExpression *subexpression = [NSExpression expressionForAggregate:subexpressions]; - return [NSExpression expressionForFunction:@"min:" arguments:@[subexpression]]; - } else if ([op isEqualToString:@"max"]) { - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); - NSExpression *subexpression = [NSExpression expressionForAggregate:subexpressions]; - return [NSExpression expressionForFunction:@"max:" arguments:@[subexpression]]; - } else if ([op isEqualToString:@"e"]) { - return [NSExpression expressionForConstantValue:@(M_E)]; - } else if ([op isEqualToString:@"pi"]) { - return [NSExpression expressionForConstantValue:@(M_PI)]; - } else if ([op isEqualToString:@"concat"]) { - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); - NSExpression *subexpression = [NSExpression expressionForAggregate:subexpressions]; - return [NSExpression expressionForFunction:@"mgl_join:" arguments:@[subexpression]]; - } else if ([op isEqualToString:@"at"]) { - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); - NSExpression *index = subexpressions.firstObject; - NSExpression *operand = subexpressions[1]; - return [NSExpression expressionForFunction:@"objectFrom:withIndex:" arguments:@[operand, index]]; - } else if ([op isEqualToString:@"has"]) { - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(argumentObjects); - NSExpression *operand = argumentObjects.count > 1 ? subexpressions[1] : [NSExpression expressionForEvaluatedObject]; - NSExpression *key = subexpressions.firstObject; - return [NSExpression expressionForFunction:@"mgl_does:have:" arguments:@[operand, key]]; - } else if ([op isEqualToString:@"interpolate"]) { - NSArray *interpolationOptions = argumentObjects.firstObject; - NSString *curveType = interpolationOptions.firstObject; - NSExpression *curveTypeExpression = [NSExpression expressionWithMGLJSONObject:curveType]; - id curveParameters; - if ([curveType isEqual:@"exponential"]) { - curveParameters = interpolationOptions[1]; - } else if ([curveType isEqualToString:@"cubic-bezier"]) { - curveParameters = @[@"literal", [interpolationOptions subarrayWithRange:NSMakeRange(1, 4)]]; - } - else { - curveParameters = [NSNull null]; - } - NSExpression *curveParameterExpression = [NSExpression expressionWithMGLJSONObject:curveParameters]; - argumentObjects = [argumentObjects subarrayWithRange:NSMakeRange(1, argumentObjects.count - 1)]; - NSExpression *inputExpression = [NSExpression expressionWithMGLJSONObject:argumentObjects.firstObject]; - NSArray *stopExpressions = [argumentObjects subarrayWithRange:NSMakeRange(1, argumentObjects.count - 1)]; - NSMutableDictionary *stops = [NSMutableDictionary dictionaryWithCapacity:stopExpressions.count / 2]; - NSEnumerator *stopEnumerator = stopExpressions.objectEnumerator; - while (NSNumber *key = stopEnumerator.nextObject) { - NSExpression *valueExpression = stopEnumerator.nextObject; - stops[key] = [NSExpression expressionWithMGLJSONObject:valueExpression]; - } - NSExpression *stopExpression = [NSExpression expressionForConstantValue:stops]; - return [NSExpression expressionForFunction:@"mgl_interpolate:withCurveType:parameters:stops:" - arguments:@[inputExpression, curveTypeExpression, curveParameterExpression, stopExpression]]; - } else if ([op isEqualToString:@"step"]) { - NSExpression *inputExpression = [NSExpression expressionWithMGLJSONObject:argumentObjects[0]]; - NSArray *stopExpressions = [argumentObjects subarrayWithRange:NSMakeRange(1, argumentObjects.count - 1)]; - NSExpression *minimum; - if (stopExpressions.count % 2) { - minimum = [NSExpression expressionWithMGLJSONObject:stopExpressions.firstObject]; - stopExpressions = [stopExpressions subarrayWithRange:NSMakeRange(1, stopExpressions.count - 1)]; - } - NSMutableDictionary *stops = [NSMutableDictionary dictionaryWithCapacity:stopExpressions.count / 2]; - NSEnumerator *stopEnumerator = stopExpressions.objectEnumerator; - while (NSNumber *key = stopEnumerator.nextObject) { - NSExpression *valueExpression = stopEnumerator.nextObject; - if (minimum) { - stops[key] = [NSExpression expressionWithMGLJSONObject:valueExpression]; - } else { - minimum = [NSExpression expressionWithMGLJSONObject:valueExpression]; - } - } - - NSAssert(minimum, @"minimum should be non-nil"); - if (minimum) { - NSExpression *stopExpression = [NSExpression expressionForConstantValue:stops]; - return [NSExpression expressionForFunction:@"mgl_step:from:stops:" - arguments:@[inputExpression, minimum, stopExpression]]; - } - - } else if ([op isEqualToString:@"zoom"]) { - return NSExpression.zoomLevelVariableExpression; - } else if ([op isEqualToString:@"heatmap-density"]) { - return NSExpression.heatmapDensityVariableExpression; - } else if ([op isEqualToString:@"line-progress"]) { - return NSExpression.lineProgressVariableExpression; - } else if ([op isEqualToString:@"accumulated"]) { - return NSExpression.featureAccumulatedVariableExpression; - } else if ([op isEqualToString:@"geometry-type"]) { - return NSExpression.geometryTypeVariableExpression; - } else if ([op isEqualToString:@"id"]) { - return NSExpression.featureIdentifierVariableExpression; - } else if ([op isEqualToString:@"properties"]) { - return NSExpression.featureAttributesVariableExpression; - } else if ([op isEqualToString:@"var"]) { - return [NSExpression expressionForVariable:argumentObjects.firstObject]; - } else if ([op isEqualToString:@"case"]) { - NSMutableArray *arguments = [NSMutableArray array]; - - for (NSUInteger index = 0; index < argumentObjects.count; index++) { - if (index % 2 == 0 && index != argumentObjects.count - 1) { - NSPredicate *predicate = [NSPredicate predicateWithMGLJSONObject:argumentObjects[index]]; - NSExpression *argument = [NSExpression expressionForConstantValue:predicate]; - [arguments addObject:argument]; - } else { - [arguments addObject:[NSExpression expressionWithMGLJSONObject:argumentObjects[index]]]; - } - } - - if (arguments.count == 3) { - NSPredicate *conditional = [arguments.firstObject constantValue]; - return [NSExpression expressionForConditional:conditional trueExpression:arguments[1] falseExpression:arguments[2]]; - } - return [NSExpression expressionForFunction:@"MGL_IF" arguments:arguments]; - } else if ([op isEqualToString:@"match"]) { - NSMutableArray *optionsArray = [NSMutableArray array]; - - for (NSUInteger index = 0; index < argumentObjects.count; index++) { - NSExpression *option = [NSExpression expressionWithMGLJSONObject:argumentObjects[index]]; - // match operators with arrays as matching values should not parse arrays as generic functions. - if (index > 0 && index < argumentObjects.count - 1 && !(index % 2 == 0) && [argumentObjects[index] isKindOfClass:[NSArray class]]) { - option = [NSExpression expressionForAggregate:MGLSubexpressionsWithJSONObjects(argumentObjects[index])]; - } - [optionsArray addObject:option]; - } - - return [NSExpression expressionForFunction:@"MGL_MATCH" - arguments:optionsArray]; - } else if ([op isEqualToString:@"format"]) { - NSMutableArray *attributedExpressions = [NSMutableArray array]; - - for (NSUInteger index = 0; index < argumentObjects.count; index+=2) { - NSExpression *expression = [NSExpression expressionWithMGLJSONObject:argumentObjects[index]]; - NSMutableDictionary *attrs = [NSMutableDictionary dictionary]; - if ((index + 1) < argumentObjects.count) { - attrs = [NSMutableDictionary dictionaryWithDictionary:argumentObjects[index + 1]]; - } - - for (NSString *key in attrs.allKeys) { - attrs[key] = [NSExpression expressionWithMGLJSONObject:attrs[key]]; - } - MGLAttributedExpression *attributedExpression = [[MGLAttributedExpression alloc] initWithExpression:expression attributes:attrs]; - - [attributedExpressions addObject:[NSExpression expressionForConstantValue:attributedExpression]]; - } - return [NSExpression expressionForFunction:@"mgl_attributed:" arguments:attributedExpressions]; - - } else if ([op isEqualToString:@"coalesce"]) { - NSMutableArray *expressions = [NSMutableArray array]; - for (id operand in argumentObjects) { - [expressions addObject:[NSExpression expressionWithMGLJSONObject:operand]]; - } - - return [NSExpression expressionWithFormat:@"mgl_coalesce(%@)", expressions]; - } else { - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects(array); - return [NSExpression expressionForFunction:@"MGL_FUNCTION" arguments:subexpressions]; - } - } - - [NSException raise:NSInvalidArgumentException - format:@"Unable to convert JSON object %@ to an NSExpression.", object]; - - return nil; -} - -- (id)mgl_jsonExpressionObject { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - MGLExpressionOperatorsByFunctionNames = @{ - @"add:to:": @"+", - @"from:subtract:": @"-", - @"multiply:by:": @"*", - @"divide:by:": @"/", - @"modulus:by:": @"%", - @"sqrt:": @"sqrt", - @"log:": @"log10", - @"ln:": @"ln", - @"raise:toPower:": @"^", - @"ceiling:": @"ceil", - @"abs:": @"abs", - @"floor:": @"floor", - @"uppercase:": @"upcase", - @"lowercase:": @"downcase", - @"length:": @"length", - @"mgl_round:": @"round", - @"mgl_acos:" : @"acos", - @"mgl_cos:" : @"cos", - @"mgl_asin:" : @"asin", - @"mgl_sin:" : @"sin", - @"mgl_atan:" : @"atan", - @"mgl_tan:" : @"tan", - @"mgl_log2:" : @"log2", - // Vararg aftermarket expressions need to be declared with an explicit and implicit first argument. - @"MGL_LET": @"let", - @"MGL_LET:": @"let", - }; - }); - - switch (self.expressionType) { - case NSVariableExpressionType: { - if ([self.variable isEqualToString:@"heatmapDensity"]) { - return @[@"heatmap-density"]; - } - if ([self.variable isEqualToString:@"lineProgress"]) { - return @[@"line-progress"]; - } - if ([self.variable isEqualToString:@"zoomLevel"]) { - return @[@"zoom"]; - } - if ([self.variable isEqualToString:@"featureAccumulated"]) { - return @[@"accumulated"]; - } - if ([self.variable isEqualToString:@"geometryType"]) { - return @[@"geometry-type"]; - } - if ([self.variable isEqualToString:@"featureIdentifier"]) { - return @[@"id"]; - } - if ([self.variable isEqualToString:@"featureAttributes"]) { - return @[@"properties"]; - } - return @[@"var", self.variable]; - } - - case NSConstantValueExpressionType: { - id constantValue = self.constantValue; - if (!constantValue || constantValue == [NSNull null]) { - return [NSNull null]; - } - if ([constantValue isEqual:@(M_E)]) { - return @[@"e"]; - } - if ([constantValue isEqual:@(M_PI)]) { - return @[@"pi"]; - } - if ([constantValue isKindOfClass:[NSArray class]] || - [constantValue isKindOfClass:[NSDictionary class]]) { - NSArray *collection = [constantValue mgl_jsonExpressionObject]; - return @[@"literal", collection]; - } - if ([constantValue isKindOfClass:[MGLColor class]]) { - auto color = [constantValue mgl_color]; - if (color.a == 1) { - return @[@"rgb", @(color.r * 255), @(color.g * 255), @(color.b * 255)]; - } - return @[@"rgba", @(color.r * 255), @(color.g * 255), @(color.b * 255), @(color.a)]; - } - if ([constantValue isKindOfClass:[NSValue class]]) { - const auto boxedValue = (NSValue *)constantValue; - if (strcmp([boxedValue objCType], @encode(CGVector)) == 0) { - // offset [x, y] - std::array mglValue = boxedValue.mgl_offsetArrayValue; - return @[@"literal", @[@(mglValue[0]), @(mglValue[1])]]; - } - if (strcmp([boxedValue objCType], @encode(MGLEdgeInsets)) == 0) { - // padding [x, y] - std::array mglValue = boxedValue.mgl_paddingArrayValue; - return @[@"literal", @[@(mglValue[0]), @(mglValue[1]), @(mglValue[2]), @(mglValue[3])]]; - } - } - if ([constantValue isKindOfClass:[MGLAttributedExpression class]]) { - MGLAttributedExpression *attributedExpression = (MGLAttributedExpression *)constantValue; - id jsonObject = attributedExpression.expression.mgl_jsonExpressionObject; - NSMutableDictionary *attributedDictionary = [NSMutableDictionary dictionary]; - - if (attributedExpression.attributes) { - attributedDictionary = [NSMutableDictionary dictionaryWithDictionary:attributedExpression.attributes]; - - for (NSString *key in attributedExpression.attributes.allKeys) { - attributedDictionary[key] = attributedExpression.attributes[key].mgl_jsonExpressionObject; - } - - } - return @[jsonObject, attributedDictionary]; - } - return self.constantValue; - } - - case NSKeyPathExpressionType: { - NSArray *expressionObject; - NSArray *keyPath = [self.keyPath componentsSeparatedByString:@"."]; - for (NSString *pathComponent in keyPath) { - if (expressionObject) { - expressionObject = @[@"get", pathComponent, expressionObject]; - } else { - expressionObject = @[@"get", pathComponent]; - } - } - - NSAssert(expressionObject.count > 0, @"expressionObject should be non-empty"); - - // Return a non-null value to quieten static analysis - return expressionObject ?: @[]; - } - - case NSFunctionExpressionType: { - NSString *function = self.function; - - BOOL hasCollectionProperty = !( ! [self.arguments.firstObject isKindOfClass: [NSExpression class]] || self.arguments.firstObject.expressionType != NSAggregateExpressionType || self.arguments.firstObject.expressionType == NSSubqueryExpressionType); - NSString *op = MGLExpressionOperatorsByFunctionNames[function]; - if (op) { - NSArray *arguments = self.arguments.mgl_jsonExpressionObject; - return [@[op] arrayByAddingObjectsFromArray:arguments]; - } else if ([function isEqualToString:@"valueForKey:"] || [function isEqualToString:@"valueForKeyPath:"]) { - return @[@"get", self.arguments.firstObject.mgl_jsonExpressionObject, self.operand.mgl_jsonExpressionObject]; - } else if ([function isEqualToString:@"average:"]) { - NSExpression *sum = [NSExpression expressionForFunction:@"sum:" arguments:self.arguments]; - NSExpression *count = [NSExpression expressionForFunction:@"count:" arguments:self.arguments]; - return [NSExpression expressionForFunction:@"divide:by:" arguments:@[sum, count]].mgl_jsonExpressionObject; - } else if ([function isEqualToString:@"sum:"]) { - NSArray *arguments; - if (hasCollectionProperty) { - arguments = [self.arguments.firstObject.collection valueForKeyPath:@"mgl_jsonExpressionObject"]; - } else { - arguments = [self.arguments valueForKeyPath:@"mgl_jsonExpressionObject"]; - } - return [@[@"+"] arrayByAddingObjectsFromArray:arguments]; - } else if ([function isEqualToString:@"count:"]) { - NSArray *arguments = self.arguments.firstObject.mgl_jsonExpressionObject; - return @[@"length", arguments]; - } else if ([function isEqualToString:@"min:"]) { - NSArray *arguments; - if (!hasCollectionProperty) { - arguments = [self.arguments valueForKeyPath:@"mgl_jsonExpressionObject"]; - } else { - arguments = [self.arguments.firstObject.collection valueForKeyPath:@"mgl_jsonExpressionObject"]; - } - return [@[@"min"] arrayByAddingObjectsFromArray:arguments]; - } else if ([function isEqualToString:@"max:"]) { - NSArray *arguments; - if (!hasCollectionProperty) { - arguments = [self.arguments valueForKeyPath:@"mgl_jsonExpressionObject"]; - } else { - arguments = [self.arguments.firstObject.collection valueForKeyPath:@"mgl_jsonExpressionObject"]; - } - return [@[@"max"] arrayByAddingObjectsFromArray:arguments]; - } else if ([function isEqualToString:@"exp:"]) { - return [NSExpression expressionForFunction:@"raise:toPower:" arguments:@[@(M_E), self.arguments.firstObject]].mgl_jsonExpressionObject; - } else if ([function isEqualToString:@"trunc:"]) { - return [NSExpression expressionWithFormat:@"%@ - modulus:by:(%@, 1)", - self.arguments.firstObject, self.arguments.firstObject].mgl_jsonExpressionObject; - } else if ([function isEqualToString:@"mgl_join:"]) { - NSArray *arguments; - if (!hasCollectionProperty) { - arguments = [self.arguments valueForKeyPath:@"mgl_jsonExpressionObject"]; - } else { - arguments = [self.arguments.firstObject.collection valueForKeyPath:@"mgl_jsonExpressionObject"]; - } - return [@[@"concat"] arrayByAddingObjectsFromArray:arguments]; - } else if ([function isEqualToString:@"stringByAppendingString:"]) { - NSArray *arguments = self.arguments.mgl_jsonExpressionObject; - return [@[@"concat", self.operand.mgl_jsonExpressionObject] arrayByAddingObjectsFromArray:arguments]; - } else if ([function isEqualToString:@"objectFrom:withIndex:"]) { - id index = self.arguments[1].mgl_jsonExpressionObject; - - if ([self.arguments[1] expressionType] == NSConstantValueExpressionType - && [[self.arguments[1] constantValue] isKindOfClass:[NSString class]]) { - id value = self.arguments[1].constantValue; - - if ([value isEqualToString:@"FIRST"]) { - index = [NSExpression expressionForConstantValue:@0].mgl_jsonExpressionObject; - } else if ([value isEqualToString:@"LAST"]) { - index = [NSExpression expressionWithFormat:@"count(%@) - 1", self.arguments[0]].mgl_jsonExpressionObject; - } else if ([value isEqualToString:@"SIZE"]) { - return [NSExpression expressionWithFormat:@"count(%@)", self.arguments[0]].mgl_jsonExpressionObject; - } - } - - return @[@"at", index, self.arguments[0].mgl_jsonExpressionObject]; - } else if ([function isEqualToString:@"boolValue"]) { - return @[@"to-boolean", self.operand.mgl_jsonExpressionObject]; - } else if ([function isEqualToString:@"mgl_number"] || - [function isEqualToString:@"mgl_numberWithFallbackValues:"] || - [function isEqualToString:@"decimalValue"] || - [function isEqualToString:@"floatValue"] || - [function isEqualToString:@"doubleValue"]) { - NSArray *arguments = self.arguments.mgl_jsonExpressionObject; - return [@[@"to-number", self.operand.mgl_jsonExpressionObject] arrayByAddingObjectsFromArray:arguments]; - } else if ([function isEqualToString:@"stringValue"]) { - return @[@"to-string", self.operand.mgl_jsonExpressionObject]; - } else if ([function isEqualToString:@"noindex:"]) { - return self.arguments.firstObject.mgl_jsonExpressionObject; - } else if ([function isEqualToString:@"mgl_does:have:"] || - [function isEqualToString:@"mgl_has:"]) { - return self.mgl_jsonHasExpressionObject; - } else if ([function isEqualToString:@"mgl_interpolate:withCurveType:parameters:stops:"] - || [function isEqualToString:@"mgl_interpolateWithCurveType:parameters:stops:"]) { - return self.mgl_jsonInterpolationExpressionObject; - } else if ([function isEqualToString:@"mgl_step:from:stops:"] - || [function isEqualToString:@"mgl_stepWithMinimum:stops:"]) { - return self.mgl_jsonStepExpressionObject; - } else if ([function isEqualToString:@"mgl_expressionWithContext:"]) { - id context = self.arguments.firstObject; - if ([context isKindOfClass:[NSExpression class]]) { - context = [context constantValue]; - } - NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"let", nil]; - [context enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, NSExpression * _Nonnull obj, BOOL * _Nonnull stop) { - [expressionObject addObject:key]; - [expressionObject addObject:obj.mgl_jsonExpressionObject]; - }]; - [expressionObject addObject:self.operand.mgl_jsonExpressionObject]; - return expressionObject; - } else if ([function isEqualToString:@"MGL_IF"] || - [function isEqualToString:@"MGL_IF:"] || - [function isEqualToString:@"mgl_if:"]) { - return self.mgl_jsonIfExpressionObject; - } else if ([function isEqualToString:@"MGL_MATCH"] || - [function isEqualToString:@"MGL_MATCH:"] || - [function isEqualToString:@"mgl_match:"]) { - return self.mgl_jsonMatchExpressionObject; - } else if ([function isEqualToString:@"mgl_coalesce:"] || - [function isEqualToString:@"mgl_coalesce"]) { - - return self.mgl_jsonCoalesceExpressionObject; - } else if ([function isEqualToString:@"castObject:toType:"]) { - id object = self.arguments.firstObject.mgl_jsonExpressionObject; - NSString *type = self.arguments[1].mgl_jsonExpressionObject; - if ([type isEqualToString:@"NSString"]) { - return @[@"to-string", object]; - } else if ([type isEqualToString:@"NSNumber"]) { - return @[@"to-number", object]; - } -#if TARGET_OS_IPHONE - else if ([type isEqualToString:@"UIColor"] || [type isEqualToString:@"MGLColor"]) { - return @[@"to-color", object]; - } -#else - else if ([type isEqualToString:@"NSColor"] || [type isEqualToString:@"MGLColor"]) { - return @[@"to-color", object]; - } -#endif - else if ([type isEqualToString:@"NSArray"]) { - NSExpression *operand = self.arguments.firstObject; - if ([operand expressionType] == NSFunctionExpressionType ) { - operand = self.arguments.firstObject.arguments.firstObject; - } - if (([operand expressionType] != NSConstantValueExpressionType) || - ([operand expressionType] == NSConstantValueExpressionType && - [[operand constantValue] isKindOfClass:[MGLColor class]])) { - return @[@"to-rgba", object]; - } - } - [NSException raise:NSInvalidArgumentException - format:@"Casting expression to %@ not yet implemented.", type]; - } else if ([function isEqualToString:@"mgl_attributed:"]) { - return [self mgl_jsonFormatExpressionObject]; - - } else if ([function isEqualToString:@"MGL_FUNCTION"] || - [function isEqualToString:@"MGL_FUNCTION:"]) { - NSExpression *firstOp = self.arguments.firstObject; - if (firstOp.expressionType == NSConstantValueExpressionType - && [firstOp.constantValue isEqualToString:@"collator"]) { - // Avoid wrapping collator options object in literal expression. - return @[@"collator", self.arguments[1].constantValue]; - } - if (firstOp.expressionType == NSConstantValueExpressionType - && [firstOp.constantValue isEqualToString:@"format"]) { - // Avoid wrapping format options object in literal expression. - NSMutableArray *expressionObject = [NSMutableArray array]; - [expressionObject addObject:@"format"]; - - for (NSUInteger index = 1; index < self.arguments.count; index++) { - if (index % 2 == 1) { - [expressionObject addObject:self.arguments[index].mgl_jsonExpressionObject]; - } else { - [expressionObject addObject:self.arguments[index].constantValue]; - } - - } - - return expressionObject; - } - - return self.arguments.mgl_jsonExpressionObject; - } else if (op == [MGLColor class] && [function isEqualToString:@"colorWithRed:green:blue:alpha:"]) { - NSArray *arguments = self.arguments.mgl_jsonExpressionObject; - return [@[@"rgba"] arrayByAddingObjectsFromArray:arguments]; - } else if ([function isEqualToString:@"median:"] || - [function isEqualToString:@"mode:"] || - [function isEqualToString:@"stddev:"] || - [function isEqualToString:@"random"] || - [function isEqualToString:@"randomn:"] || - [function isEqualToString:@"now"] || - [function isEqualToString:@"bitwiseAnd:with:"] || - [function isEqualToString:@"bitwiseOr:with:"] || - [function isEqualToString:@"bitwiseXor:with:"] || - [function isEqualToString:@"leftshift:by:"] || - [function isEqualToString:@"rightshift:by:"] || - [function isEqualToString:@"onesComplement:"] || - [function isEqualToString:@"distanceToLocation:fromLocation:"]) { - [NSException raise:NSInvalidArgumentException - format:@"Expression function %@ not yet implemented.", function]; - return nil; - } else { - [NSException raise:NSInvalidArgumentException - format:@"Unrecognized expression function %@.", function]; - return nil; - } - } - - case NSConditionalExpressionType: { - NSMutableArray *arguments = [NSMutableArray arrayWithObjects:@"case", self.predicate.mgl_jsonExpressionObject, nil]; - [arguments addObject:self.trueExpression.mgl_jsonExpressionObject]; - [arguments addObject:self.falseExpression.mgl_jsonExpressionObject]; - - return arguments; - } - - case NSAggregateExpressionType: { - NSArray *collection = [self.collection valueForKeyPath:@"mgl_jsonExpressionObject"]; - return @[@"literal", collection]; - } - - case NSEvaluatedObjectExpressionType: - case NSUnionSetExpressionType: - case NSIntersectSetExpressionType: - case NSMinusSetExpressionType: - case NSSubqueryExpressionType: - case NSAnyKeyExpressionType: - case NSBlockExpressionType: - [NSException raise:NSInvalidArgumentException - format:@"Expression type %lu not yet implemented.", (unsigned long)self.expressionType]; - } - - // NSKeyPathSpecifierExpression - if (self.expressionType == 10) { - return self.description; - } - // An assignment expression type is present in the BNF grammar, but the - // corresponding NSExpressionType value and property getters are missing. - if (self.expressionType == 12) { - [NSException raise:NSInvalidArgumentException - format:@"Assignment expressions not yet implemented."]; - } - - return nil; -} - -- (id)mgl_jsonInterpolationExpressionObject { - NSUInteger expectedArgumentCount = [self.function componentsSeparatedByString:@":"].count - 1; - if (self.arguments.count < expectedArgumentCount) { - [NSException raise:NSInvalidArgumentException format: - @"Too few arguments to ‘%@’ function; expected %lu arguments.", - self.function, (unsigned long)expectedArgumentCount]; - } else if (self.arguments.count > expectedArgumentCount) { - [NSException raise:NSInvalidArgumentException format: - @"%lu unexpected arguments to ‘%@’ function; expected %lu arguments.", - self.arguments.count - (unsigned long)expectedArgumentCount, self.function, (unsigned long)expectedArgumentCount]; - } - - BOOL isAftermarketFunction = [self.function isEqualToString:@"mgl_interpolate:withCurveType:parameters:stops:"]; - NSUInteger curveTypeIndex = isAftermarketFunction ? 1 : 0; - NSString *curveType = self.arguments[curveTypeIndex].constantValue; - NSMutableArray *interpolationArray = [NSMutableArray arrayWithObject:curveType]; - if ([curveType isEqualToString:@"exponential"]) { - id base = [self.arguments[curveTypeIndex + 1] mgl_jsonExpressionObject]; - [interpolationArray addObject:base]; - } else if ([curveType isEqualToString:@"cubic-bezier"]) { - NSArray *controlPoints = [self.arguments[curveTypeIndex + 1].collection mgl_jsonExpressionObject]; - [interpolationArray addObjectsFromArray:controlPoints]; - } - - NSDictionary *stops = self.arguments[curveTypeIndex + 2].constantValue; - - if (stops.count == 0) { - [NSException raise:NSInvalidArgumentException format:@"‘stops’ dictionary argument to ‘%@’ function must not be empty.", self.function]; - } - - NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"interpolate", interpolationArray, nil]; - [expressionObject addObject:(isAftermarketFunction ? self.arguments.firstObject : self.operand).mgl_jsonExpressionObject]; - for (NSNumber *key in [stops.allKeys sortedArrayUsingSelector:@selector(compare:)]) { - [expressionObject addObject:key]; - [expressionObject addObject:[stops[key] mgl_jsonExpressionObject]]; - } - return expressionObject; -} - -- (id)mgl_jsonStepExpressionObject { - BOOL isAftermarketFunction = [self.function isEqualToString:@"mgl_step:from:stops:"]; - NSUInteger minimumIndex = isAftermarketFunction ? 1 : 0; - id minimum = self.arguments[minimumIndex].mgl_jsonExpressionObject; - NSDictionary *stops = self.arguments[minimumIndex + 1].constantValue; - - if (stops.count == 0) { - [NSException raise:NSInvalidArgumentException format:@"‘stops’ dictionary argument to ‘%@’ function must not be empty.", self.function]; - } - - NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"step", (isAftermarketFunction ? self.arguments.firstObject : self.operand).mgl_jsonExpressionObject, minimum, nil]; - - for (NSNumber *key in [stops.allKeys sortedArrayUsingSelector:@selector(compare:)]) { - [expressionObject addObject:key]; - [expressionObject addObject:[stops[key] mgl_jsonExpressionObject]]; - } - return expressionObject; -} - -- (id)mgl_jsonMatchExpressionObject { - BOOL isAftermarketFunction = [self.function hasPrefix:@"MGL_MATCH"]; - NSUInteger minimumIndex = isAftermarketFunction ? 1 : 0; - - NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"match", (isAftermarketFunction ? self.arguments.firstObject : self.operand).mgl_jsonExpressionObject, nil]; - NSArray *arguments = isAftermarketFunction ? self.arguments : self.arguments[minimumIndex].constantValue; - - for (NSUInteger index = minimumIndex; index < arguments.count; index++) { - NSArray *argumentObject = arguments[index].mgl_jsonExpressionObject; - // match operators with arrays as matching values should not parse arrays using the literal operator. - if (index > 0 && index < arguments.count - 1 && !(index % 2 == 0)) { - NSExpression *expression = arguments[index]; - if (![expression isKindOfClass:[NSExpression class]]) { - expression = [NSExpression expressionForConstantValue:expression]; - } - if (expression.expressionType == NSAggregateExpressionType || - (expression.expressionType == NSConstantValueExpressionType && [expression.constantValue isKindOfClass:[NSArray class]])) { - argumentObject = argumentObject.count == 2 ? argumentObject[1] : argumentObject; - } - } - [expressionObject addObject:argumentObject]; - } - - return expressionObject; -} - -- (id)mgl_jsonIfExpressionObject { - BOOL isAftermarketFunction = [self.function hasPrefix:@"MGL_IF"]; - NSUInteger minimumIndex = isAftermarketFunction ? 1 : 0; - NSExpression *firstCondition; - id condition; - - if (isAftermarketFunction) { - firstCondition = self.arguments.firstObject; - } else { - firstCondition = self.operand; - } - - if ([firstCondition respondsToSelector:@selector(constantValue)] && [firstCondition.constantValue isKindOfClass:[NSComparisonPredicate class]]) { - NSPredicate *predicate = (NSPredicate *)firstCondition.constantValue; - condition = predicate.mgl_jsonExpressionObject; - } else { - condition = firstCondition.mgl_jsonExpressionObject; - } - - NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"case", condition, nil]; - NSArray *arguments = isAftermarketFunction ? self.arguments : self.arguments[minimumIndex].constantValue; - - for (NSUInteger index = minimumIndex; index < arguments.count; index++) { - if ([arguments[index] respondsToSelector:@selector(constantValue)] && [arguments[index].constantValue isKindOfClass:[NSComparisonPredicate class]]) { - NSPredicate *predicate = (NSPredicate *)arguments[index].constantValue; - [expressionObject addObject:predicate.mgl_jsonExpressionObject]; - } else { - [expressionObject addObject:arguments[index].mgl_jsonExpressionObject]; - } - } - - return expressionObject; -} - -- (id)mgl_jsonCoalesceExpressionObject { - BOOL isAftermarketFunction = [self.function isEqualToString:@"mgl_coalesce:"]; - NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"coalesce", nil]; - - for (NSExpression *expression in (isAftermarketFunction ? self.arguments.firstObject : self.operand).constantValue) { - [expressionObject addObject:[expression mgl_jsonExpressionObject]]; - } - - return expressionObject; -} - -- (id)mgl_jsonHasExpressionObject { - BOOL isAftermarketFunction = [self.function isEqualToString:@"mgl_does:have:"]; - NSExpression *operand = isAftermarketFunction ? self.arguments[0] : self.operand; - NSExpression *key = self.arguments[isAftermarketFunction ? 1 : 0]; - - NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"has", key.mgl_jsonExpressionObject, nil]; - if (operand.expressionType != NSEvaluatedObjectExpressionType) { - [expressionObject addObject:operand.mgl_jsonExpressionObject]; - } - return expressionObject; -} - -- (id)mgl_jsonFormatExpressionObject { - NSArray *attributedExpressions; - NSExpression *formatArray = self.arguments.firstObject; - - if ([formatArray respondsToSelector:@selector(constantValue)] && [formatArray.constantValue isKindOfClass:[NSArray class]]) { - attributedExpressions = (NSArray *)formatArray.constantValue; - } else { - attributedExpressions = self.arguments; - } - - NSMutableArray *expressionObject = [NSMutableArray arrayWithObjects:@"format", nil]; - - for (NSUInteger index = 0; index < attributedExpressions.count; index++) { - [expressionObject addObjectsFromArray:attributedExpressions[index].mgl_jsonExpressionObject]; - } - - return expressionObject; -} - -#pragma mark Localization - -/** - Returns a localized copy of the given collection. - - If no localization takes place, this method returns the original collection. - */ -NSArray *MGLLocalizedCollection(NSArray *collection, NSLocale * _Nullable locale) { - __block NSMutableArray *localizedCollection; - [collection enumerateObjectsUsingBlock:^(NSExpression * _Nonnull item, NSUInteger idx, BOOL * _Nonnull stop) { - NSExpression *localizedItem = [item mgl_expressionLocalizedIntoLocale:locale]; - if (localizedItem != item) { - if (!localizedCollection) { - localizedCollection = [collection mutableCopy]; - } - localizedCollection[idx] = localizedItem; - } - }]; - return localizedCollection ?: collection; -}; - -/** - Returns a localized copy of the given stop dictionary. - - If no localization takes place, this method returns the original stop - dictionary. - */ -NSDictionary *MGLLocalizedStopDictionary(NSDictionary *stops, NSLocale * _Nullable locale) { - __block NSMutableDictionary *localizedStops; - [stops enumerateKeysAndObjectsUsingBlock:^(id _Nonnull zoomLevel, NSExpression * _Nonnull value, BOOL * _Nonnull stop) { - if (![value isKindOfClass:[NSExpression class]]) { - value = [NSExpression expressionForConstantValue:value]; - } - NSExpression *localizedValue = [value mgl_expressionLocalizedIntoLocale:locale]; - if (localizedValue != value) { - if (!localizedStops) { - localizedStops = [stops mutableCopy]; - } - localizedStops[zoomLevel] = localizedValue; - } - }]; - return localizedStops ?: stops; -}; - -- (NSExpression *)mgl_expressionLocalizedIntoLocale:(nullable NSLocale *)locale { - switch (self.expressionType) { - case NSConstantValueExpressionType: { - if ([self.constantValue isKindOfClass:[NSDictionary class]]) { - NSDictionary *localizedStops = MGLLocalizedStopDictionary(self.constantValue, locale); - if (localizedStops != self.constantValue) { - return [NSExpression expressionForConstantValue:localizedStops]; - } - } else if ([self.constantValue isKindOfClass:[NSArray class]]) { - NSArray *localizedValues = MGLLocalizedCollection(self.constantValue, locale); - if (localizedValues != self.constantValue) { - return [NSExpression expressionForConstantValue:localizedValues]; - } - } else if ([self.constantValue isKindOfClass:[MGLAttributedExpression class]]) { - MGLAttributedExpression *attributedExpression = (MGLAttributedExpression *)self.constantValue; - NSExpression *localizedExpression = [attributedExpression.expression mgl_expressionLocalizedIntoLocale:locale]; - MGLAttributedExpression *localizedAttributedExpression = [MGLAttributedExpression attributedExpression:localizedExpression attributes:attributedExpression.attributes]; - - return [NSExpression expressionForConstantValue:localizedAttributedExpression]; - } - return self; - } - - case NSKeyPathExpressionType: { - if ([self.keyPath isEqualToString:@"name"] || [self.keyPath hasPrefix:@"name_"]) { - NSString *localizedKeyPath = @"name"; - if (![locale.localeIdentifier isEqualToString:@"mul"]) { - NSArray *preferences = locale ? @[locale.localeIdentifier] : [NSLocale preferredLanguages]; - NSString *preferredLanguage = [MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences]; - if (preferredLanguage) { - localizedKeyPath = [NSString stringWithFormat:@"name_%@", preferredLanguage]; - } - } - // If the keypath is `name`, no need to fallback - if ([localizedKeyPath isEqualToString:@"name"]) { - return [NSExpression expressionForKeyPath:localizedKeyPath]; - } - // If the keypath is `name_zh-Hans`, fallback to `name_zh` to `name`. - // CN tiles might using `name_zh-CN` for Simplified Chinese. - if ([localizedKeyPath isEqualToString:@"name_zh-Hans"]) { - return [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K, %K, %K})", - localizedKeyPath, @"name_zh-CN", @"name_zh", @"name"]; - } - // Mapbox Streets v8 has `name_zh-Hant`, we should fallback to Simplified Chinese if the field has no value. - if ([localizedKeyPath isEqualToString:@"name_zh-Hant"]) { - return [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K, %K, %K, %K})", - localizedKeyPath, @"name_zh-Hans", @"name_zh-CN", @"name_zh", @"name"]; - } - - // Other keypath fallback to `name` - return [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", localizedKeyPath, @"name"]; - } - return self; - } - - case NSFunctionExpressionType: { - NSExpression *operand = self.operand; - NSExpression *localizedOperand = [operand mgl_expressionLocalizedIntoLocale:locale]; - - NSArray *arguments = self.arguments; - NSArray *localizedArguments = MGLLocalizedCollection(arguments, locale); - if (localizedArguments != arguments) { - return [NSExpression expressionForFunction:localizedOperand - selectorName:self.function - arguments:localizedArguments]; - } - if (localizedOperand != operand) { - return [NSExpression expressionForFunction:localizedOperand - selectorName:self.function - arguments:self.arguments]; - } - return self; - } - - case NSConditionalExpressionType: { - NSExpression *trueExpression = self.trueExpression; - NSExpression *localizedTrueExpression = [trueExpression mgl_expressionLocalizedIntoLocale:locale]; - NSExpression *falseExpression = self.falseExpression; - NSExpression *localizedFalseExpression = [falseExpression mgl_expressionLocalizedIntoLocale:locale]; - if (localizedTrueExpression != trueExpression || localizedFalseExpression != falseExpression) { - return [NSExpression expressionForConditional:self.predicate - trueExpression:localizedTrueExpression - falseExpression:localizedFalseExpression]; - } - return self; - } - - case NSAggregateExpressionType: { - NSArray *collection = self.collection; - if ([collection isKindOfClass:[NSArray class]]) { - NSArray *localizedCollection = MGLLocalizedCollection(collection, locale); - if (localizedCollection != collection) { - return [NSExpression expressionForAggregate:localizedCollection]; - } - } - return self; - } - - default: - return self; - } -} - -@end diff --git a/platform/darwin/src/NSExpression+MGLPrivateAdditions.h b/platform/darwin/src/NSExpression+MGLPrivateAdditions.h deleted file mode 100644 index 54bc9068f4c..00000000000 --- a/platform/darwin/src/NSExpression+MGLPrivateAdditions.h +++ /dev/null @@ -1,84 +0,0 @@ -#import -#if TARGET_OS_IPHONE - #import -#else - #import -#endif - -#import "NSExpression+MGLAdditions.h" - -#include - -NS_ASSUME_NONNULL_BEGIN - -@interface NSObject (MGLExpressionAdditions) - -- (nullable NSNumber *)mgl_number; -- (nullable NSNumber *)mgl_numberWithFallbackValues:(id)fallbackValue, ... NS_REQUIRES_NIL_TERMINATION; - -@end - -@interface NSExpression (MGLPrivateAdditions) - -@property (nonatomic, readonly) mbgl::Value mgl_constantMBGLValue; -@property (nonatomic, readonly) std::vector mgl_aggregateMBGLValue; -@property (nonatomic, readonly) mbgl::FeatureType mgl_featureType; -@property (nonatomic, readonly) std::vector mgl_aggregateFeatureType; -@property (nonatomic, readonly) mbgl::FeatureIdentifier mgl_featureIdentifier; -@property (nonatomic, readonly) std::vector mgl_aggregateFeatureIdentifier; - -@end - -@interface NSNull (MGLExpressionAdditions) - -@property (nonatomic, readonly) id mgl_jsonExpressionObject; - -@end - -@interface NSString (MGLExpressionAdditions) - -@property (nonatomic, readonly) id mgl_jsonExpressionObject; - -@end - -@interface NSNumber (MGLExpressionAdditions) - -- (id)mgl_interpolateWithCurveType:(NSString *)curveType parameters:(NSArray *)parameters stops:(NSDictionary *)stops; -- (id)mgl_stepWithMinimum:(id)minimum stops:(NSDictionary *)stops; - -@property (nonatomic, readonly) id mgl_jsonExpressionObject; - -@end - -@interface NSArray (MGLExpressionAdditions) - -@property (nonatomic, readonly) id mgl_jsonExpressionObject; - -@end - -@interface NSDictionary (MGLExpressionAdditions) - -@property (nonatomic, readonly) id mgl_jsonExpressionObject; - -- (id)mgl_has:(id)element; - -@end - -@interface MGLColor (MGLExpressionAdditions) - -@property (nonatomic, readonly) id mgl_jsonExpressionObject; - -@end - -@interface NSExpression (MGLExpressionAdditions) - -- (NSExpression *)mgl_expressionWithContext:(NSDictionary *)context; - - -- (id)mgl_has:(id)element; - -@end - -FOUNDATION_EXTERN NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects); - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/NSPredicate+MGLAdditions.h b/platform/darwin/src/NSPredicate+MGLAdditions.h deleted file mode 100644 index 6c4b878d370..00000000000 --- a/platform/darwin/src/NSPredicate+MGLAdditions.h +++ /dev/null @@ -1,44 +0,0 @@ -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSPredicate (MGLAdditions) - -#pragma mark Converting JSON Expressions - -/** - Returns a predicate equivalent to the given Foundation object deserialized - from JSON data. - - The Foundation object is interpreted according to the - [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions). - See the - “[Predicates and Expressions](../predicates-and-expressions.html)” - guide for a correspondence of operators and types between the style - specification and the `NSPredicate` representation used by this SDK. - - @param object A Foundation object deserialized from JSON data, for example - using `NSJSONSerialization`. - @return An initialized predicate equivalent to `object`, suitable for use - with the `MGLVectorStyleLayer.predicate` property. - */ -+ (instancetype)predicateWithMGLJSONObject:(id)object NS_SWIFT_NAME(init(mglJSONObject:)); - -/** - An equivalent Foundation object that can be serialized as JSON. - - The Foundation object conforms to the - [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions). - See the - “[Predicates and Expressions](../predicates-and-expressions.html)” - guide for a correspondence of operators and types between the style - specification and the `NSPredicate` representation used by this SDK. - - You can use `NSJSONSerialization` to serialize the Foundation object as data to - write to a file. - */ -@property (nonatomic, readonly) id mgl_jsonExpressionObject; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/NSPredicate+MGLAdditions.mm b/platform/darwin/src/NSPredicate+MGLAdditions.mm deleted file mode 100644 index 436402c9e06..00000000000 --- a/platform/darwin/src/NSPredicate+MGLAdditions.mm +++ /dev/null @@ -1,220 +0,0 @@ -#import "NSPredicate+MGLPrivateAdditions.h" - -#import "MGLValueEvaluator.h" -#import "MGLStyleValue_Private.h" -#import "MGLLoggingConfiguration_Private.h" - -#include - -@implementation NSPredicate (MGLPrivateAdditions) - -- (mbgl::style::Filter)mgl_filter -{ - mbgl::style::conversion::Error valueError; - NSArray *jsonObject = self.mgl_jsonExpressionObject; - auto value = mbgl::style::conversion::convert(mbgl::style::conversion::makeConvertible(jsonObject), valueError); - - if (!value) { - [NSException raise:NSInvalidArgumentException - format:@"Invalid filter value: %@", @(valueError.message.c_str())]; - return {}; - } - mbgl::style::Filter filter = std::move(*value); - - return filter; -} - -+ (instancetype)mgl_predicateWithFilter:(mbgl::style::Filter)filter -{ - if (filter.expression) { - id jsonObject = MGLJSONObjectFromMBGLExpression(**filter.expression); - return [NSPredicate predicateWithMGLJSONObject:jsonObject]; - } else { - return nil; - } -} - -@end - -@implementation NSPredicate (MGLAdditions) - -NSArray *MGLSubpredicatesWithJSONObjects(NSArray *objects) { - NSMutableArray *subpredicates = [NSMutableArray arrayWithCapacity:objects.count]; - for (id object in objects) { - NSPredicate *predicate = [NSPredicate predicateWithMGLJSONObject:object]; - [subpredicates addObject:predicate]; - } - return subpredicates; -} - -static NSDictionary * const MGLPredicateOperatorTypesByJSONOperator = @{ - @"==": @(NSEqualToPredicateOperatorType), - @"!=": @(NSNotEqualToPredicateOperatorType), - @"<": @(NSLessThanPredicateOperatorType), - @"<=": @(NSLessThanOrEqualToPredicateOperatorType), - @">": @(NSGreaterThanPredicateOperatorType), - @">=": @(NSGreaterThanOrEqualToPredicateOperatorType), -}; - -+ (instancetype)predicateWithMGLJSONObject:(id)object { - if ([object isEqual:@YES]) { - return [NSPredicate predicateWithValue:YES]; - } - if ([object isEqual:@NO]) { - return [NSPredicate predicateWithValue:NO]; - } - - MGLAssert([object isKindOfClass:[NSArray class]], @"Condition for case expression should be an expression."); - NSArray *objects = (NSArray *)object; - NSString *op = objects.firstObject; - - NSNumber *operatorTypeNumber = MGLPredicateOperatorTypesByJSONOperator[op]; - if (operatorTypeNumber) { - NSPredicateOperatorType operatorType = (NSPredicateOperatorType)[operatorTypeNumber unsignedIntegerValue]; - - NSComparisonPredicateOptions options = 0; - if (objects.count > 3) { - NSArray *collatorExpression = objects[3]; - MGLCAssert([collatorExpression isKindOfClass:[NSArray class]], @"Collators must be dictionaries."); - MGLCAssert(collatorExpression.count == 2, @"Malformed collator expression"); - NSDictionary *collator = collatorExpression[1]; - MGLCAssert([collator isKindOfClass:[NSDictionary class]], @"Malformed collator in collator expression"); - - // Predicate options can’t express specific locales as collators can. - if (!collator[@"locale"]) { - if ([(collator[@"case-sensitive"] ?: @YES) isEqual:@NO]) { - options |= NSCaseInsensitivePredicateOption; - } - if ([(collator[@"diacritic-sensitive"] ?: @YES) isEqual:@NO]) { - options |= NSDiacriticInsensitivePredicateOption; - } - } - } - - NSArray *subexpressions = MGLSubexpressionsWithJSONObjects([objects subarrayWithRange:NSMakeRange(1, objects.count - 1)]); - return [NSComparisonPredicate predicateWithLeftExpression:subexpressions[0] - rightExpression:subexpressions[1] - modifier:NSDirectPredicateModifier - type:operatorType - options:options]; - } - - if ([op isEqualToString:@"!"]) { - NSArray *subpredicates = MGLSubpredicatesWithJSONObjects([objects subarrayWithRange:NSMakeRange(1, objects.count - 1)]); - if (subpredicates.count > 1) { - NSCompoundPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:subpredicates]; - return [NSCompoundPredicate notPredicateWithSubpredicate:predicate]; - } - if (subpredicates.count) { - return [NSCompoundPredicate notPredicateWithSubpredicate:subpredicates.firstObject]; - } - return [NSPredicate predicateWithValue:YES]; - } - if ([op isEqualToString:@"all"]) { - NSArray *subpredicates = MGLSubpredicatesWithJSONObjects([objects subarrayWithRange:NSMakeRange(1, objects.count - 1)]); - if (subpredicates.count == 2) { - // Determine if the expression is of BETWEEN type - if ([subpredicates[0] isKindOfClass:[NSComparisonPredicate class]] && - [subpredicates[1] isKindOfClass:[NSComparisonPredicate class]]) { - NSComparisonPredicate *leftCondition = (NSComparisonPredicate *)subpredicates[0]; - NSComparisonPredicate *rightCondition = (NSComparisonPredicate *)subpredicates[1]; - - NSArray *limits; - NSExpression *leftConditionExpression; - - if(leftCondition.predicateOperatorType == NSGreaterThanOrEqualToPredicateOperatorType && - rightCondition.predicateOperatorType == NSLessThanOrEqualToPredicateOperatorType) { - limits = @[leftCondition.rightExpression, rightCondition.rightExpression]; - leftConditionExpression = leftCondition.leftExpression; - - } else if (leftCondition.predicateOperatorType == NSLessThanOrEqualToPredicateOperatorType && - rightCondition.predicateOperatorType == NSLessThanOrEqualToPredicateOperatorType) { - limits = @[leftCondition.leftExpression, rightCondition.rightExpression]; - leftConditionExpression = leftCondition.rightExpression; - - } else if(leftCondition.predicateOperatorType == NSLessThanOrEqualToPredicateOperatorType && - rightCondition.predicateOperatorType == NSGreaterThanOrEqualToPredicateOperatorType) { - limits = @[leftCondition.leftExpression, rightCondition.leftExpression]; - leftConditionExpression = leftCondition.rightExpression; - - } else if(leftCondition.predicateOperatorType == NSGreaterThanOrEqualToPredicateOperatorType && - rightCondition.predicateOperatorType == NSGreaterThanOrEqualToPredicateOperatorType) { - limits = @[leftCondition.rightExpression, rightCondition.leftExpression]; - leftConditionExpression = leftCondition.leftExpression; - } - - if (limits && leftConditionExpression) { - return [NSPredicate predicateWithFormat:@"%@ BETWEEN %@", leftConditionExpression, [NSExpression expressionForAggregate:limits]]; - } - } - } - return [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates]; - } - if ([op isEqualToString:@"any"]) { - NSArray *subpredicates = MGLSubpredicatesWithJSONObjects([objects subarrayWithRange:NSMakeRange(1, objects.count - 1)]); - return [NSCompoundPredicate orPredicateWithSubpredicates:subpredicates]; - } - - NSExpression *expression = [NSExpression expressionWithMGLJSONObject:object]; - return [NSComparisonPredicate predicateWithLeftExpression:expression - rightExpression:[NSExpression expressionForConstantValue:@YES] - modifier:NSDirectPredicateModifier - type:NSEqualToPredicateOperatorType - options:0]; - -} - -- (id)mgl_jsonExpressionObject { - if ([self isEqual:[NSPredicate predicateWithValue:YES]]) { - return @YES; - } - if ([self isEqual:[NSPredicate predicateWithValue:NO]]) { - return @NO; - } - - if ([self.predicateFormat hasPrefix:@"BLOCKPREDICATE("]) { - [NSException raise:NSInvalidArgumentException - format:@"Block-based predicates are not supported."]; - } - - [NSException raise:NSInvalidArgumentException - format:@"Unrecognized predicate type."]; - return nil; -} - -@end - -@implementation NSPredicate (MGLExpressionAdditions) - -- (id)mgl_if:(id)firstValue, ... { - - if ([self evaluateWithObject:nil]) { - return firstValue; - } - - id eachExpression; - va_list argumentList; - va_start(argumentList, firstValue); - - while ((eachExpression = va_arg(argumentList, id))) { - if ([eachExpression isKindOfClass:[NSComparisonPredicate class]]) { - id valueExpression = va_arg(argumentList, id); - if ([eachExpression evaluateWithObject:nil]) { - return valueExpression; - } - } else { - return eachExpression; - } - } - va_end(argumentList); - - return nil; -} - -- (id)mgl_match:(NSExpression *)firstCase, ... { - [NSException raise:NSInvalidArgumentException - format:@"Match expressions lack underlying Objective-C implementations."]; - return nil; -} - -@end diff --git a/platform/darwin/src/NSPredicate+MGLPrivateAdditions.h b/platform/darwin/src/NSPredicate+MGLPrivateAdditions.h deleted file mode 100644 index 051a2775a17..00000000000 --- a/platform/darwin/src/NSPredicate+MGLPrivateAdditions.h +++ /dev/null @@ -1,25 +0,0 @@ -#import - -#import "NSPredicate+MGLAdditions.h" - -#include - -NS_ASSUME_NONNULL_BEGIN - -@interface NSPredicate (MGLPrivateAdditions) - -- (mbgl::style::Filter)mgl_filter; - -+ (nullable instancetype)mgl_predicateWithFilter:(mbgl::style::Filter)filter; - -@end - -@interface NSPredicate (MGLExpressionAdditions) - -- (nullable id)mgl_if:(id)firstValue, ...; - -- (nullable id)mgl_match:(NSExpression *)firstCase, ...; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/NSString+MGLAdditions.h b/platform/darwin/src/NSString+MGLAdditions.h deleted file mode 100644 index 4888c7a00f9..00000000000 --- a/platform/darwin/src/NSString+MGLAdditions.h +++ /dev/null @@ -1,46 +0,0 @@ -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSString (MGLAdditions) - -/** Returns the range spanning the entire receiver. */ -- (NSRange)mgl_wholeRange; - -/** Returns the receiver if non-empty or nil if empty. */ -- (nullable NSString *)mgl_stringOrNilIfEmpty; - -/** - Returns a title-cased representation of the receiver using the specified - locale. - - @param locale The locale. For strings presented to users, pass in the current - locale (`+[NSLocale currentLocale]`). To use the system locale, pass in - `nil`. - */ -- (NSString *)mgl_titleCasedStringWithLocale:(NSLocale *)locale; - -/** - Returns a transliterated representation of the receiver using the specified - script. If transliteration fails, the receiver will be returned. - - Only supports scripts for languages used by Mapbox Streets. - - @param script The four-letter code representing the name of the script, as - specified by ISO 15924. - */ -- (NSString *)mgl_stringByTransliteratingIntoScript:(NSString *)script; - -@end - -@interface NSAttributedString (MGLAdditions) - -/** Returns the range spanning the entire receiver. */ -- (NSRange)mgl_wholeRange; - -/** Returns a copy of the receiver with leading and trailing members of the given set removed. */ -- (NSAttributedString *)mgl_attributedStringByTrimmingCharactersInSet:(NSCharacterSet *)set; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/NSString+MGLAdditions.m b/platform/darwin/src/NSString+MGLAdditions.m deleted file mode 100644 index d452d56678e..00000000000 --- a/platform/darwin/src/NSString+MGLAdditions.m +++ /dev/null @@ -1,82 +0,0 @@ -#import "NSString+MGLAdditions.h" - -#if TARGET_OS_OSX - #import -#endif - -@implementation NSString (MGLAdditions) - -- (NSRange)mgl_wholeRange { - return NSMakeRange(0, self.length); -} - -- (nullable NSString *)mgl_stringOrNilIfEmpty { - return self.length ? self : nil; -} - -- (NSString *)mgl_titleCasedStringWithLocale:(NSLocale *)locale { - NSMutableString *string = self.mutableCopy; - NSOrthography *orthography; - if (@available(iOS 11.0, macOS 10.13.0, *)) { - orthography = [NSOrthography defaultOrthographyForLanguage:locale.localeIdentifier]; - } - [string enumerateLinguisticTagsInRange:string.mgl_wholeRange scheme:NSLinguisticTagSchemeLexicalClass options:0 orthography:orthography usingBlock:^(NSString * _Nonnull tag, NSRange tokenRange, NSRange sentenceRange, BOOL * _Nonnull stop) { - NSString *word = [string substringWithRange:tokenRange]; - if (word.length > 3 - || !([tag isEqualToString:NSLinguisticTagConjunction] - || [tag isEqualToString:NSLinguisticTagPreposition] - || [tag isEqualToString:NSLinguisticTagDeterminer] - || [tag isEqualToString:NSLinguisticTagParticle] - || [tag isEqualToString:NSLinguisticTagClassifier])) { - unichar firstLetter = [[word capitalizedStringWithLocale:locale] characterAtIndex:0]; - NSString *suffix = [word substringFromIndex:1]; - if (!([word hasPrefix:@"i"] && suffix.length - && [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[suffix characterAtIndex:0]])) { - word = [NSString stringWithFormat:@"%C%@", firstLetter, suffix]; - } - } - [string replaceCharactersInRange:tokenRange withString:word]; - }]; - return string; -} - -- (NSString *)mgl_stringByTransliteratingIntoScript:(NSString *)script { - NSMutableString *string = self.mutableCopy; - NSStringTransform transform; - if ([script isEqualToString:@"Latn"]) { - transform = NSStringTransformToLatin; - } else if ([script isEqualToString:@"Hans"]) { - transform = @"Hant-Hans"; - } else if ([script isEqualToString:@"Hant"]) { - transform = @"Hans-Hant"; - } else if ([script isEqualToString:@"Cyrl"]) { - transform = @"Any-Latin; Latin-Cyrillic"; - } else if ([script isEqualToString:@"Arab"]) { - transform = @"Any-Latin; Latin-Arabic"; - } else if ([script isEqualToString:@"Jpan"]) { - transform = @"Any-Latin; Latin-Katakana"; - } else if ([script isEqualToString:@"Kore"]) { - transform = @"Any-Latin; Latin-Hangul"; - } - return transform ? [string stringByApplyingTransform:transform reverse:NO] : string; -} - -@end - -@implementation NSAttributedString (MGLAdditions) - -- (NSRange)mgl_wholeRange { - return NSMakeRange(0, self.length); -} - -- (NSAttributedString *)mgl_attributedStringByTrimmingCharactersInSet:(NSCharacterSet *)set { - NSScanner *scanner = [NSScanner scannerWithString:self.string]; - scanner.charactersToBeSkipped = nil; - NSString *prefix; - [scanner scanCharactersFromSet:set intoString:&prefix]; - - NSString *trimmedString = [self.string stringByTrimmingCharactersInSet:set]; - return [self attributedSubstringFromRange:NSMakeRange(prefix.length, trimmedString.length)]; -} - -@end diff --git a/platform/darwin/src/NSURL+MGLAdditions.h b/platform/darwin/src/NSURL+MGLAdditions.h deleted file mode 100644 index 9845a180dbb..00000000000 --- a/platform/darwin/src/NSURL+MGLAdditions.h +++ /dev/null @@ -1,15 +0,0 @@ -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSURL (MGLAdditions) - -/** - Returns the given URL, modified if necessary to use the asset: URL scheme - expected by mbgl for local requests. - */ -- (nullable NSURL *)mgl_URLByStandardizingScheme; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/NSURL+MGLAdditions.m b/platform/darwin/src/NSURL+MGLAdditions.m deleted file mode 100644 index 09fdd5c880f..00000000000 --- a/platform/darwin/src/NSURL+MGLAdditions.m +++ /dev/null @@ -1,14 +0,0 @@ -#import "NSURL+MGLAdditions.h" - -@implementation NSURL (MGLAdditions) - -- (nullable NSURL *)mgl_URLByStandardizingScheme { - if (!self.scheme) { - // Relative file URL, already escaped (in order to create the NSURL). - // Assume a relative path into the application’s resource folder. - return [NSURL URLWithString:[@"asset://" stringByAppendingString:self.absoluteString]]; - } - return self; -} - -@end diff --git a/platform/darwin/src/NSValue+MGLAdditions.h b/platform/darwin/src/NSValue+MGLAdditions.h deleted file mode 100644 index 9222f04620b..00000000000 --- a/platform/darwin/src/NSValue+MGLAdditions.h +++ /dev/null @@ -1,148 +0,0 @@ -#import - -#import "MGLGeometry.h" -#import "MGLLight.h" -#import "MGLOfflinePack.h" -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Methods for round-tripping values for Mapbox-defined types. - */ -@interface NSValue (MGLAdditions) - -#pragma mark Working with Geographic Coordinate Values - -/** - Creates a new value object containing the specified Core Location geographic - coordinate structure. - - @param coordinate The value for the new object. - @return A new value object that contains the geographic coordinate information. - */ -+ (instancetype)valueWithMGLCoordinate:(CLLocationCoordinate2D)coordinate; - -/** - The Core Location geographic coordinate structure representation of the value. - */ -@property (readonly) CLLocationCoordinate2D MGLCoordinateValue; - -/** - Creates a new value object containing the specified Mapbox map point structure. - - @param point The value for the new object. - @return A new value object that contains the coordinate and zoom level information. - */ -+ (instancetype)valueWithMGLMapPoint:(MGLMapPoint)point; - -/** - The Mapbox map point structure representation of the value. - */ -@property (readonly) MGLMapPoint MGLMapPointValue; - -/** - Creates a new value object containing the specified Mapbox coordinate span - structure. - - @param span The value for the new object. - @return A new value object that contains the coordinate span information. - */ -+ (instancetype)valueWithMGLCoordinateSpan:(MGLCoordinateSpan)span; - -/** - The Mapbox coordinate span structure representation of the value. - */ -@property (readonly) MGLCoordinateSpan MGLCoordinateSpanValue; - -/** - Creates a new value object containing the specified Mapbox coordinate bounds - structure. - - @param bounds The value for the new object. - @return A new value object that contains the coordinate bounds information. - */ -+ (instancetype)valueWithMGLCoordinateBounds:(MGLCoordinateBounds)bounds; - -/** - The Mapbox coordinate bounds structure representation of the value. - */ -@property (readonly) MGLCoordinateBounds MGLCoordinateBoundsValue; - -/** - Creates a new value object containing the specified Mapbox coordinate - quad structure. - - @param quad The value for the new object. - @return A new value object that contains the coordinate quad information. - */ -+ (instancetype)valueWithMGLCoordinateQuad:(MGLCoordinateQuad)quad; - -/** - The Mapbox coordinate quad structure representation of the value. - */ -- (MGLCoordinateQuad)MGLCoordinateQuadValue; - -#pragma mark Working with Offline Map Values - -/** - Creates a new value object containing the given `MGLOfflinePackProgress` - structure. - - @param progress The value for the new object. - @return A new value object that contains the offline pack progress information. - */ -+ (NSValue *)valueWithMGLOfflinePackProgress:(MGLOfflinePackProgress)progress; - -/** - The `MGLOfflinePackProgress` structure representation of the value. - */ -@property (readonly) MGLOfflinePackProgress MGLOfflinePackProgressValue; - -#pragma mark Working with Transition Values - -/** - Creates a new value object containing the given `MGLTransition` - structure. - - @param transition The value for the new object. - @return A new value object that contains the transition information. - */ -+ (NSValue *)valueWithMGLTransition:(MGLTransition)transition; - -/** - The `MGLTransition` structure representation of the value. - */ -@property (readonly) MGLTransition MGLTransitionValue; - -/** - Creates a new value object containing the given `MGLSphericalPosition` - structure. - - @param lightPosition The value for the new object. - @return A new value object that contains the light position information. - */ -+ (instancetype)valueWithMGLSphericalPosition:(MGLSphericalPosition)lightPosition; - -/** - The `MGLSphericalPosition` structure representation of the value. - */ -@property (readonly) MGLSphericalPosition MGLSphericalPositionValue; - -/** - Creates a new value object containing the given `MGLLightAnchor` - enum. - - @param lightAnchor The value for the new object. - @return A new value object that contains the light anchor information. - */ -+ (NSValue *)valueWithMGLLightAnchor:(MGLLightAnchor)lightAnchor; - -/** - The `MGLLightAnchor` enum representation of the value. - */ -@property (readonly) MGLLightAnchor MGLLightAnchorValue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/src/NSValue+MGLAdditions.m b/platform/darwin/src/NSValue+MGLAdditions.m deleted file mode 100644 index 8f12066cc37..00000000000 --- a/platform/darwin/src/NSValue+MGLAdditions.m +++ /dev/null @@ -1,104 +0,0 @@ -#import "NSValue+MGLAdditions.h" - -@implementation NSValue (MGLAdditions) - -#pragma mark Geometry - -+ (instancetype)valueWithMGLCoordinate:(CLLocationCoordinate2D)coordinate { - return [self valueWithBytes:&coordinate objCType:@encode(CLLocationCoordinate2D)]; -} - -- (CLLocationCoordinate2D)MGLCoordinateValue { - CLLocationCoordinate2D coordinate; - [self getValue:&coordinate]; - return coordinate; -} - -+ (instancetype)valueWithMGLMapPoint:(MGLMapPoint)point { - return [self valueWithBytes:&point objCType:@encode(MGLMapPoint)]; -} - --(MGLMapPoint) MGLMapPointValue { - MGLMapPoint point; - [self getValue:&point]; - return point; -} - -+ (instancetype)valueWithMGLCoordinateSpan:(MGLCoordinateSpan)span { - return [self valueWithBytes:&span objCType:@encode(MGLCoordinateSpan)]; -} - -- (MGLCoordinateSpan)MGLCoordinateSpanValue { - MGLCoordinateSpan span; - [self getValue:&span]; - return span; -} - -+ (instancetype)valueWithMGLCoordinateBounds:(MGLCoordinateBounds)bounds { - return [self valueWithBytes:&bounds objCType:@encode(MGLCoordinateBounds)]; -} - -- (MGLCoordinateBounds)MGLCoordinateBoundsValue { - MGLCoordinateBounds bounds; - [self getValue:&bounds]; - return bounds; -} - -+ (instancetype)valueWithMGLCoordinateQuad:(MGLCoordinateQuad)quad { - return [self valueWithBytes:&quad objCType:@encode(MGLCoordinateQuad)]; -} - -- (MGLCoordinateQuad)MGLCoordinateQuadValue { - MGLCoordinateQuad quad; - [self getValue:&quad]; - return quad; -} - -#pragma mark Offline maps - -+ (NSValue *)valueWithMGLOfflinePackProgress:(MGLOfflinePackProgress)progress { - return [NSValue value:&progress withObjCType:@encode(MGLOfflinePackProgress)]; -} - -- (MGLOfflinePackProgress)MGLOfflinePackProgressValue { - MGLOfflinePackProgress progress; - [self getValue:&progress]; - return progress; -} - -#pragma mark Working with Transition Values - -+ (NSValue *)valueWithMGLTransition:(MGLTransition)transition { - return [NSValue value:&transition withObjCType:@encode(MGLTransition)]; -} - -- (MGLTransition)MGLTransitionValue { - MGLTransition transition; - [self getValue:&transition]; - return transition; -} - -+ (NSValue *)valueWithMGLSphericalPosition:(MGLSphericalPosition)lightPosition -{ - return [NSValue value:&lightPosition withObjCType:@encode(MGLSphericalPosition)]; -} - -- (MGLSphericalPosition)MGLSphericalPositionValue -{ - MGLSphericalPosition lightPosition; - [self getValue:&lightPosition]; - return lightPosition; -} - -+ (NSValue *)valueWithMGLLightAnchor:(MGLLightAnchor)lightAnchor { - return [NSValue value:&lightAnchor withObjCType:@encode(MGLLightAnchor)]; -} - -- (MGLLightAnchor)MGLLightAnchorValue -{ - MGLLightAnchor achorType; - [self getValue:&achorType]; - return achorType; -} - -@end diff --git a/platform/darwin/src/NSValue+MGLStyleAttributeAdditions.h b/platform/darwin/src/NSValue+MGLStyleAttributeAdditions.h deleted file mode 100644 index 0f1e5116947..00000000000 --- a/platform/darwin/src/NSValue+MGLStyleAttributeAdditions.h +++ /dev/null @@ -1,14 +0,0 @@ -#import - -#include - -@interface NSValue (MGLStyleAttributeAdditions) - -+ (instancetype)mgl_valueWithOffsetArray:(std::array)offsetArray; -+ (instancetype)mgl_valueWithPaddingArray:(std::array)paddingArray; - -- (std::array)mgl_offsetArrayValue; -- (std::array)mgl_paddingArrayValue; -- (std::array)mgl_lightPositionArrayValue; - -@end diff --git a/platform/darwin/src/NSValue+MGLStyleAttributeAdditions.mm b/platform/darwin/src/NSValue+MGLStyleAttributeAdditions.mm deleted file mode 100644 index aa3e003d042..00000000000 --- a/platform/darwin/src/NSValue+MGLStyleAttributeAdditions.mm +++ /dev/null @@ -1,76 +0,0 @@ -#import "NSValue+MGLStyleAttributeAdditions.h" -#import "MGLLight.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLGeometry_Private.h" -#if TARGET_OS_IPHONE - #import -#endif - -@implementation NSValue (MGLStyleAttributeAdditions) - -+ (instancetype)mgl_valueWithOffsetArray:(std::array)offsetArray -{ - CGVector vector = CGVectorMake(offsetArray[0], offsetArray[1]); -#if !TARGET_OS_IPHONE - // Style specification assumes an origin at the upper-left corner. - // macOS defines an origin at the lower-left corner. - vector.dy *= -1; -#endif - return [NSValue value:&vector withObjCType:@encode(CGVector)]; -} - -+ (instancetype)mgl_valueWithPaddingArray:(std::array)paddingArray -{ - // Style specification defines padding in clockwise order: top, right, bottom, left. - // Foundation defines padding in counterclockwise order: top, left, bottom, right. - MGLEdgeInsets insets = { - .top = paddingArray[0], - .right = paddingArray[1], - .bottom = paddingArray[2], - .left = paddingArray[3], - }; - return [NSValue value:&insets withObjCType:@encode(MGLEdgeInsets)]; -} - -- (std::array)mgl_offsetArrayValue -{ - MGLAssert(strcmp(self.objCType, @encode(CGVector)) == 0, @"Value does not represent a CGVector"); - CGVector vector; - [self getValue:&vector]; -#if !TARGET_OS_IPHONE - vector.dy *= -1; -#endif - return { - static_cast(vector.dx), - static_cast(vector.dy), - }; -} - -- (std::array)mgl_paddingArrayValue -{ - MGLAssert(strcmp(self.objCType, @encode(MGLEdgeInsets)) == 0, @"Value does not represent an NSEdgeInsets/UIEdgeInsets"); - MGLEdgeInsets insets; - [self getValue:&insets]; - // Style specification defines padding in clockwise order: top, right, bottom, left. - return { - static_cast(insets.top), - static_cast(insets.right), - static_cast(insets.bottom), - static_cast(insets.left), - }; -} - -- (std::array)mgl_lightPositionArrayValue -{ - MGLAssert(strcmp(self.objCType, @encode(MGLSphericalPosition)) == 0, @"Value does not represent an MGLSphericalPosition"); - MGLSphericalPosition lightPosition; - [self getValue:&lightPosition]; - // Style specification defines padding in clockwise order: top, right, bottom, left. - return { - static_cast(lightPosition.radial), - static_cast(lightPosition.azimuthal), - static_cast(lightPosition.polar), - }; -} - -@end diff --git a/platform/darwin/test/MGLAttributionInfoTests.m b/platform/darwin/test/MGLAttributionInfoTests.m deleted file mode 100644 index b6f053a8af1..00000000000 --- a/platform/darwin/test/MGLAttributionInfoTests.m +++ /dev/null @@ -1,137 +0,0 @@ -#import -#import - -#import "MGLAttributionInfo_Private.h" - -@interface MGLAttributionInfoTests : XCTestCase - -@end - -@implementation MGLAttributionInfoTests - -- (void)setUp { - [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"]; -} - -- (void)tearDown { - [MGLAccountManager setAccessToken:nil]; -} - -- (void)testParsing { - static NSString * const htmlStrings[] = { - @"© Mapbox " - @"©️ OpenStreetMap " - @"CC BY-SA " - @"Improve this map", - }; - - NSMutableArray *infos = [NSMutableArray array]; - for (NSUInteger i = 0; i < sizeof(htmlStrings) / sizeof(htmlStrings[0]); i++) { - NSArray *subinfos = [MGLAttributionInfo attributionInfosFromHTMLString:htmlStrings[i] - fontSize:0 - linkColor:nil]; - [infos growArrayByAddingAttributionInfosFromArray:subinfos]; - } - - XCTAssertEqual(infos.count, 4); - - CLLocationCoordinate2D mapbox = CLLocationCoordinate2DMake(12.9810816, 77.6368034); - XCTAssertEqualObjects(infos[0].title.string, @"© Mapbox"); - XCTAssertEqualObjects(infos[0].URL, [NSURL URLWithString:@"https://www.mapbox.com/about/maps/"]); - XCTAssertFalse(infos[0].feedbackLink); - XCTAssertNil([infos[0] feedbackURLAtCenterCoordinate:mapbox zoomLevel:14]); - - XCTAssertEqualObjects(infos[1].title.string, @"©️ OpenStreetMap"); - XCTAssertEqualObjects(infos[1].URL, [NSURL URLWithString:@"http://www.openstreetmap.org/about/"]); - XCTAssertFalse(infos[1].feedbackLink); - XCTAssertNil([infos[1] feedbackURLAtCenterCoordinate:mapbox zoomLevel:14]); - - XCTAssertEqualObjects(infos[2].title.string, @"CC\u00a0BY-SA"); - XCTAssertNil(infos[2].URL); - XCTAssertFalse(infos[2].feedbackLink); - XCTAssertNil([infos[2] feedbackURLAtCenterCoordinate:mapbox zoomLevel:14]); - - XCTAssertEqualObjects(infos[3].title.string, @"Improve this map"); - XCTAssertEqualObjects(infos[3].URL, [NSURL URLWithString:@"https://apps.mapbox.com/feedback/"]); - XCTAssertTrue(infos[3].feedbackLink); - NSURL *styleURL = [MGLStyle satelliteStreetsStyleURLWithVersion:99]; - -#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 120200) || \ - (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 101404) - NSString *bundleId = @"com.apple.dt.xctest.tool"; -#else - NSString *bundleId = @"com.mapbox.Mapbox"; -#endif - - NSString *urlString = [NSString stringWithFormat:@"https://apps.mapbox.com/feedback/?referrer=%@#/77.63680/12.98108/14.00/0.0/0", bundleId]; - XCTAssertEqualObjects([infos[3] feedbackURLAtCenterCoordinate:mapbox zoomLevel:14], - [NSURL URLWithString:urlString]); - - urlString = [NSString stringWithFormat:@"https://apps.mapbox.com/feedback/?referrer=%@&owner=mapbox&id=satellite-streets-v99&access_token=pk.feedcafedeadbeefbadebede&map_sdk_version=1.0.0#/77.63680/12.98108/3.14/90.9/13", bundleId]; - XCTAssertEqualObjects([infos[3] feedbackURLForStyleURL:styleURL atCenterCoordinate:mapbox zoomLevel:3.14159 direction:90.9 pitch:12.5], - [NSURL URLWithString:urlString]); -} - -- (void)testStyle { - static NSString * const htmlStrings[] = { - @"Mapbox", - }; - - CGFloat fontSize = 72; - MGLColor *color = [MGLColor redColor]; - NSMutableArray *infos = [NSMutableArray array]; - for (NSUInteger i = 0; i < sizeof(htmlStrings) / sizeof(htmlStrings[0]); i++) { - NSArray *subinfos = [MGLAttributionInfo attributionInfosFromHTMLString:htmlStrings[i] - fontSize:72 - linkColor:color]; - [infos growArrayByAddingAttributionInfosFromArray:subinfos]; - } - - XCTAssertEqual(infos.count, 1); - - XCTAssertEqualObjects(infos[0].title.string, @"Mapbox"); - XCTAssertNil([infos[0].title attribute:NSLinkAttributeName atIndex:0 effectiveRange:nil]); - XCTAssertEqualObjects([infos[0].title attribute:NSUnderlineStyleAttributeName atIndex:0 effectiveRange:nil], @(NSUnderlineStyleSingle)); - -#if TARGET_OS_IPHONE - UIFont *font; -#else - NSFont *font; -#endif - font = [infos[0].title attribute:NSFontAttributeName atIndex:0 effectiveRange:nil]; - XCTAssertEqual(font.pointSize, fontSize); - - CGFloat r, g, b, a; - [color getRed:&r green:&g blue:&b alpha:&a]; - MGLColor *linkColor = [infos[0].title attribute:NSForegroundColorAttributeName atIndex:0 effectiveRange:nil]; - CGFloat linkR, linkG, linkB, linkA; - [linkColor getRed:&linkR green:&linkG blue:&linkB alpha:&linkA]; - XCTAssertEqual(r, linkR); - XCTAssertEqual(g, linkG); - XCTAssertEqual(b, linkB); - XCTAssertEqual(a, linkA); -} - -- (void)testDedupe { - static NSString * const htmlStrings[] = { - @"World", - @"Hello World", - @"Another Source", - @"Hello", - @"Hello World", - }; - - NSMutableArray *infos = [NSMutableArray array]; - for (NSUInteger i = 0; i < sizeof(htmlStrings) / sizeof(htmlStrings[0]); i++) { - NSArray *subinfos = [MGLAttributionInfo attributionInfosFromHTMLString:htmlStrings[i] - fontSize:0 - linkColor:nil]; - [infos growArrayByAddingAttributionInfosFromArray:subinfos]; - } - - XCTAssertEqual(infos.count, 2); - XCTAssertEqualObjects(infos[0].title.string, @"Hello World"); - XCTAssertEqualObjects(infos[1].title.string, @"Another Source"); -} - -@end diff --git a/platform/darwin/test/MGLBackgroundStyleLayerTests.mm b/platform/darwin/test/MGLBackgroundStyleLayerTests.mm deleted file mode 100644 index 4617cff598e..00000000000 --- a/platform/darwin/test/MGLBackgroundStyleLayerTests.mm +++ /dev/null @@ -1,197 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLStyleLayerTests.h" -#import "../../darwin/src/NSDate+MGLAdditions.h" - -#import "MGLStyleLayer_Private.h" - -#include -#include -#include - -@interface MGLBackgroundLayerTests : MGLStyleLayerTests -@end - -@implementation MGLBackgroundLayerTests - -+ (NSString *)layerType { - return @"background"; -} - -- (void)testProperties { - MGLBackgroundStyleLayer *layer = [[MGLBackgroundStyleLayer alloc] initWithIdentifier:@"layerID"]; - XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertEqualObjects(@(layer.rawLayer->getTypeInfo()->type), @"background"); - auto rawLayer = static_cast(layer.rawLayer); - - MGLTransition transitionTest = MGLTransitionMake(5, 4); - - - // background-color - { - XCTAssertTrue(rawLayer->getBackgroundColor().isUndefined(), - @"background-color should be unset initially."); - NSExpression *defaultExpression = layer.backgroundColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.backgroundColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getBackgroundColor(), propertyValue, - @"Setting backgroundColor to a constant value expression should update background-color."); - XCTAssertEqualObjects(layer.backgroundColor, constantExpression, - @"backgroundColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.backgroundColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getBackgroundColor(), propertyValue, - @"Setting backgroundColor to a camera expression should update background-color."); - XCTAssertEqualObjects(layer.backgroundColor, functionExpression, - @"backgroundColor should round-trip camera expressions."); - - - layer.backgroundColor = nil; - XCTAssertTrue(rawLayer->getBackgroundColor().isUndefined(), - @"Unsetting backgroundColor should return background-color to the default value."); - XCTAssertEqualObjects(layer.backgroundColor, defaultExpression, - @"backgroundColor should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.backgroundColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLBackgroundLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.backgroundColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLBackgroundLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.backgroundColorTransition = transitionTest; - auto toptions = rawLayer->getBackgroundColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition backgroundColorTransition = layer.backgroundColorTransition; - XCTAssertEqual(backgroundColorTransition.delay, transitionTest.delay); - XCTAssertEqual(backgroundColorTransition.duration, transitionTest.duration); - } - - // background-opacity - { - XCTAssertTrue(rawLayer->getBackgroundOpacity().isUndefined(), - @"background-opacity should be unset initially."); - NSExpression *defaultExpression = layer.backgroundOpacity; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.backgroundOpacity = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getBackgroundOpacity(), propertyValue, - @"Setting backgroundOpacity to a constant value expression should update background-opacity."); - XCTAssertEqualObjects(layer.backgroundOpacity, constantExpression, - @"backgroundOpacity should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.backgroundOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getBackgroundOpacity(), propertyValue, - @"Setting backgroundOpacity to a camera expression should update background-opacity."); - XCTAssertEqualObjects(layer.backgroundOpacity, functionExpression, - @"backgroundOpacity should round-trip camera expressions."); - - - layer.backgroundOpacity = nil; - XCTAssertTrue(rawLayer->getBackgroundOpacity().isUndefined(), - @"Unsetting backgroundOpacity should return background-opacity to the default value."); - XCTAssertEqualObjects(layer.backgroundOpacity, defaultExpression, - @"backgroundOpacity should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.backgroundOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLBackgroundLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.backgroundOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLBackgroundLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.backgroundOpacityTransition = transitionTest; - auto toptions = rawLayer->getBackgroundOpacityTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition backgroundOpacityTransition = layer.backgroundOpacityTransition; - XCTAssertEqual(backgroundOpacityTransition.delay, transitionTest.delay); - XCTAssertEqual(backgroundOpacityTransition.duration, transitionTest.duration); - } - - // background-pattern - { - XCTAssertTrue(rawLayer->getBackgroundPattern().isUndefined(), - @"background-pattern should be unset initially."); - NSExpression *defaultExpression = layer.backgroundPattern; - - NSExpression *constantExpression = [NSExpression expressionForConstantValue:@"Background Pattern"]; - layer.backgroundPattern = constantExpression; - mbgl::style::PropertyValue propertyValue = { "Background Pattern" }; - XCTAssertEqual(rawLayer->getBackgroundPattern(), propertyValue, - @"Setting backgroundPattern to a constant value expression should update background-pattern."); - XCTAssertEqualObjects(layer.backgroundPattern, constantExpression, - @"backgroundPattern should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"MGL_FUNCTION('image', 'Background Pattern')"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.backgroundPattern = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), image(literal("Background Pattern")), 18.0, image(literal("Background Pattern"))) - ); - } - - XCTAssertEqual(rawLayer->getBackgroundPattern(), propertyValue, - @"Setting backgroundPattern to a camera expression should update background-pattern."); - XCTAssertEqualObjects(layer.backgroundPattern, functionExpression, - @"backgroundPattern should round-trip camera expressions."); - - - layer.backgroundPattern = nil; - XCTAssertTrue(rawLayer->getBackgroundPattern().isUndefined(), - @"Unsetting backgroundPattern should return background-pattern to the default value."); - XCTAssertEqualObjects(layer.backgroundPattern, defaultExpression, - @"backgroundPattern should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.backgroundPattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLBackgroundLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.backgroundPattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLBackgroundLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.backgroundPatternTransition = transitionTest; - auto toptions = rawLayer->getBackgroundPatternTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition backgroundPatternTransition = layer.backgroundPatternTransition; - XCTAssertEqual(backgroundPatternTransition.delay, transitionTest.delay); - XCTAssertEqual(backgroundPatternTransition.duration, transitionTest.duration); - } -} - -- (void)testPropertyNames { - [self testPropertyName:@"background-color" isBoolean:NO]; - [self testPropertyName:@"background-opacity" isBoolean:NO]; - [self testPropertyName:@"background-pattern" isBoolean:NO]; -} - -@end diff --git a/platform/darwin/test/MGLCircleStyleLayerTests.mm b/platform/darwin/test/MGLCircleStyleLayerTests.mm deleted file mode 100644 index 5f789f4faf0..00000000000 --- a/platform/darwin/test/MGLCircleStyleLayerTests.mm +++ /dev/null @@ -1,804 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLStyleLayerTests.h" -#import "../../darwin/src/NSDate+MGLAdditions.h" - -#import "MGLStyleLayer_Private.h" - -#include -#include -#include - -@interface MGLCircleLayerTests : MGLStyleLayerTests -@end - -@implementation MGLCircleLayerTests - -+ (NSString *)layerType { - return @"circle"; -} - -- (void)testPredicates { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - MGLCircleStyleLayer *layer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - - XCTAssertNil(layer.sourceLayerIdentifier); - layer.sourceLayerIdentifier = @"layerID"; - XCTAssertEqualObjects(layer.sourceLayerIdentifier, @"layerID"); - layer.sourceLayerIdentifier = nil; - XCTAssertNil(layer.sourceLayerIdentifier); - - XCTAssertNil(layer.predicate); - layer.predicate = [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]; - XCTAssertEqualObjects(layer.predicate, [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]); - layer.predicate = nil; - XCTAssertNil(layer.predicate); -} - -- (void)testProperties { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - - MGLCircleStyleLayer *layer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertEqualObjects(@(layer.rawLayer->getTypeInfo()->type), @"circle"); - auto rawLayer = static_cast(layer.rawLayer); - - MGLTransition transitionTest = MGLTransitionMake(5, 4); - - - // circle-blur - { - XCTAssertTrue(rawLayer->getCircleBlur().isUndefined(), - @"circle-blur should be unset initially."); - NSExpression *defaultExpression = layer.circleBlur; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.circleBlur = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getCircleBlur(), propertyValue, - @"Setting circleBlur to a constant value expression should update circle-blur."); - XCTAssertEqualObjects(layer.circleBlur, constantExpression, - @"circleBlur should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.circleBlur = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getCircleBlur(), propertyValue, - @"Setting circleBlur to a camera expression should update circle-blur."); - XCTAssertEqualObjects(layer.circleBlur, functionExpression, - @"circleBlur should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.circleBlur = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getCircleBlur(), propertyValue, - @"Setting circleBlur to a data expression should update circle-blur."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.circleBlur, pedanticFunctionExpression, - @"circleBlur should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.circleBlur = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getCircleBlur(), propertyValue, - @"Setting circleBlur to a camera-data expression should update circle-blur."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.circleBlur, pedanticFunctionExpression, - @"circleBlur should round-trip camera-data expressions."); - - layer.circleBlur = nil; - XCTAssertTrue(rawLayer->getCircleBlur().isUndefined(), - @"Unsetting circleBlur should return circle-blur to the default value."); - XCTAssertEqualObjects(layer.circleBlur, defaultExpression, - @"circleBlur should return the default value after being unset."); - // Transition property test - layer.circleBlurTransition = transitionTest; - auto toptions = rawLayer->getCircleBlurTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition circleBlurTransition = layer.circleBlurTransition; - XCTAssertEqual(circleBlurTransition.delay, transitionTest.delay); - XCTAssertEqual(circleBlurTransition.duration, transitionTest.duration); - } - - // circle-color - { - XCTAssertTrue(rawLayer->getCircleColor().isUndefined(), - @"circle-color should be unset initially."); - NSExpression *defaultExpression = layer.circleColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.circleColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getCircleColor(), propertyValue, - @"Setting circleColor to a constant value expression should update circle-color."); - XCTAssertEqualObjects(layer.circleColor, constantExpression, - @"circleColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.circleColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getCircleColor(), propertyValue, - @"Setting circleColor to a camera expression should update circle-color."); - XCTAssertEqualObjects(layer.circleColor, functionExpression, - @"circleColor should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.circleColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getCircleColor(), propertyValue, - @"Setting circleColor to a data expression should update circle-color."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.circleColor, pedanticFunctionExpression, - @"circleColor should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.circleColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1)))) - ); - } - - XCTAssertEqual(rawLayer->getCircleColor(), propertyValue, - @"Setting circleColor to a camera-data expression should update circle-color."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.circleColor, pedanticFunctionExpression, - @"circleColor should round-trip camera-data expressions."); - - layer.circleColor = nil; - XCTAssertTrue(rawLayer->getCircleColor().isUndefined(), - @"Unsetting circleColor should return circle-color to the default value."); - XCTAssertEqualObjects(layer.circleColor, defaultExpression, - @"circleColor should return the default value after being unset."); - // Transition property test - layer.circleColorTransition = transitionTest; - auto toptions = rawLayer->getCircleColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition circleColorTransition = layer.circleColorTransition; - XCTAssertEqual(circleColorTransition.delay, transitionTest.delay); - XCTAssertEqual(circleColorTransition.duration, transitionTest.duration); - } - - // circle-opacity - { - XCTAssertTrue(rawLayer->getCircleOpacity().isUndefined(), - @"circle-opacity should be unset initially."); - NSExpression *defaultExpression = layer.circleOpacity; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.circleOpacity = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getCircleOpacity(), propertyValue, - @"Setting circleOpacity to a constant value expression should update circle-opacity."); - XCTAssertEqualObjects(layer.circleOpacity, constantExpression, - @"circleOpacity should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.circleOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getCircleOpacity(), propertyValue, - @"Setting circleOpacity to a camera expression should update circle-opacity."); - XCTAssertEqualObjects(layer.circleOpacity, functionExpression, - @"circleOpacity should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.circleOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getCircleOpacity(), propertyValue, - @"Setting circleOpacity to a data expression should update circle-opacity."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.circleOpacity, pedanticFunctionExpression, - @"circleOpacity should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.circleOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getCircleOpacity(), propertyValue, - @"Setting circleOpacity to a camera-data expression should update circle-opacity."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.circleOpacity, pedanticFunctionExpression, - @"circleOpacity should round-trip camera-data expressions."); - - layer.circleOpacity = nil; - XCTAssertTrue(rawLayer->getCircleOpacity().isUndefined(), - @"Unsetting circleOpacity should return circle-opacity to the default value."); - XCTAssertEqualObjects(layer.circleOpacity, defaultExpression, - @"circleOpacity should return the default value after being unset."); - // Transition property test - layer.circleOpacityTransition = transitionTest; - auto toptions = rawLayer->getCircleOpacityTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition circleOpacityTransition = layer.circleOpacityTransition; - XCTAssertEqual(circleOpacityTransition.delay, transitionTest.delay); - XCTAssertEqual(circleOpacityTransition.duration, transitionTest.duration); - } - - // circle-pitch-alignment - { - XCTAssertTrue(rawLayer->getCirclePitchAlignment().isUndefined(), - @"circle-pitch-alignment should be unset initially."); - NSExpression *defaultExpression = layer.circlePitchAlignment; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - layer.circlePitchAlignment = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::AlignmentType::Viewport }; - XCTAssertEqual(rawLayer->getCirclePitchAlignment(), propertyValue, - @"Setting circlePitchAlignment to a constant value expression should update circle-pitch-alignment."); - XCTAssertEqualObjects(layer.circlePitchAlignment, constantExpression, - @"circlePitchAlignment should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.circlePitchAlignment = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("viewport"), 18.0, literal("viewport")) - ); - } - - XCTAssertEqual(rawLayer->getCirclePitchAlignment(), propertyValue, - @"Setting circlePitchAlignment to a camera expression should update circle-pitch-alignment."); - XCTAssertEqualObjects(layer.circlePitchAlignment, functionExpression, - @"circlePitchAlignment should round-trip camera expressions."); - - - layer.circlePitchAlignment = nil; - XCTAssertTrue(rawLayer->getCirclePitchAlignment().isUndefined(), - @"Unsetting circlePitchAlignment should return circle-pitch-alignment to the default value."); - XCTAssertEqualObjects(layer.circlePitchAlignment, defaultExpression, - @"circlePitchAlignment should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.circlePitchAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.circlePitchAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // circle-radius - { - XCTAssertTrue(rawLayer->getCircleRadius().isUndefined(), - @"circle-radius should be unset initially."); - NSExpression *defaultExpression = layer.circleRadius; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.circleRadius = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getCircleRadius(), propertyValue, - @"Setting circleRadius to a constant value expression should update circle-radius."); - XCTAssertEqualObjects(layer.circleRadius, constantExpression, - @"circleRadius should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.circleRadius = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getCircleRadius(), propertyValue, - @"Setting circleRadius to a camera expression should update circle-radius."); - XCTAssertEqualObjects(layer.circleRadius, functionExpression, - @"circleRadius should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.circleRadius = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getCircleRadius(), propertyValue, - @"Setting circleRadius to a data expression should update circle-radius."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.circleRadius, pedanticFunctionExpression, - @"circleRadius should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.circleRadius = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getCircleRadius(), propertyValue, - @"Setting circleRadius to a camera-data expression should update circle-radius."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.circleRadius, pedanticFunctionExpression, - @"circleRadius should round-trip camera-data expressions."); - - layer.circleRadius = nil; - XCTAssertTrue(rawLayer->getCircleRadius().isUndefined(), - @"Unsetting circleRadius should return circle-radius to the default value."); - XCTAssertEqualObjects(layer.circleRadius, defaultExpression, - @"circleRadius should return the default value after being unset."); - // Transition property test - layer.circleRadiusTransition = transitionTest; - auto toptions = rawLayer->getCircleRadiusTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition circleRadiusTransition = layer.circleRadiusTransition; - XCTAssertEqual(circleRadiusTransition.delay, transitionTest.delay); - XCTAssertEqual(circleRadiusTransition.duration, transitionTest.duration); - } - - // circle-pitch-scale - { - XCTAssertTrue(rawLayer->getCirclePitchScale().isUndefined(), - @"circle-pitch-scale should be unset initially."); - NSExpression *defaultExpression = layer.circleScaleAlignment; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - layer.circleScaleAlignment = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::CirclePitchScaleType::Viewport }; - XCTAssertEqual(rawLayer->getCirclePitchScale(), propertyValue, - @"Setting circleScaleAlignment to a constant value expression should update circle-pitch-scale."); - XCTAssertEqualObjects(layer.circleScaleAlignment, constantExpression, - @"circleScaleAlignment should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.circleScaleAlignment = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("viewport"), 18.0, literal("viewport")) - ); - } - - XCTAssertEqual(rawLayer->getCirclePitchScale(), propertyValue, - @"Setting circleScaleAlignment to a camera expression should update circle-pitch-scale."); - XCTAssertEqualObjects(layer.circleScaleAlignment, functionExpression, - @"circleScaleAlignment should round-trip camera expressions."); - - - layer.circleScaleAlignment = nil; - XCTAssertTrue(rawLayer->getCirclePitchScale().isUndefined(), - @"Unsetting circleScaleAlignment should return circle-pitch-scale to the default value."); - XCTAssertEqualObjects(layer.circleScaleAlignment, defaultExpression, - @"circleScaleAlignment should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.circleScaleAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.circleScaleAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // circle-stroke-color - { - XCTAssertTrue(rawLayer->getCircleStrokeColor().isUndefined(), - @"circle-stroke-color should be unset initially."); - NSExpression *defaultExpression = layer.circleStrokeColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.circleStrokeColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getCircleStrokeColor(), propertyValue, - @"Setting circleStrokeColor to a constant value expression should update circle-stroke-color."); - XCTAssertEqualObjects(layer.circleStrokeColor, constantExpression, - @"circleStrokeColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.circleStrokeColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getCircleStrokeColor(), propertyValue, - @"Setting circleStrokeColor to a camera expression should update circle-stroke-color."); - XCTAssertEqualObjects(layer.circleStrokeColor, functionExpression, - @"circleStrokeColor should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.circleStrokeColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getCircleStrokeColor(), propertyValue, - @"Setting circleStrokeColor to a data expression should update circle-stroke-color."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.circleStrokeColor, pedanticFunctionExpression, - @"circleStrokeColor should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.circleStrokeColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1)))) - ); - } - - XCTAssertEqual(rawLayer->getCircleStrokeColor(), propertyValue, - @"Setting circleStrokeColor to a camera-data expression should update circle-stroke-color."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.circleStrokeColor, pedanticFunctionExpression, - @"circleStrokeColor should round-trip camera-data expressions."); - - layer.circleStrokeColor = nil; - XCTAssertTrue(rawLayer->getCircleStrokeColor().isUndefined(), - @"Unsetting circleStrokeColor should return circle-stroke-color to the default value."); - XCTAssertEqualObjects(layer.circleStrokeColor, defaultExpression, - @"circleStrokeColor should return the default value after being unset."); - // Transition property test - layer.circleStrokeColorTransition = transitionTest; - auto toptions = rawLayer->getCircleStrokeColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition circleStrokeColorTransition = layer.circleStrokeColorTransition; - XCTAssertEqual(circleStrokeColorTransition.delay, transitionTest.delay); - XCTAssertEqual(circleStrokeColorTransition.duration, transitionTest.duration); - } - - // circle-stroke-opacity - { - XCTAssertTrue(rawLayer->getCircleStrokeOpacity().isUndefined(), - @"circle-stroke-opacity should be unset initially."); - NSExpression *defaultExpression = layer.circleStrokeOpacity; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.circleStrokeOpacity = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getCircleStrokeOpacity(), propertyValue, - @"Setting circleStrokeOpacity to a constant value expression should update circle-stroke-opacity."); - XCTAssertEqualObjects(layer.circleStrokeOpacity, constantExpression, - @"circleStrokeOpacity should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.circleStrokeOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getCircleStrokeOpacity(), propertyValue, - @"Setting circleStrokeOpacity to a camera expression should update circle-stroke-opacity."); - XCTAssertEqualObjects(layer.circleStrokeOpacity, functionExpression, - @"circleStrokeOpacity should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.circleStrokeOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getCircleStrokeOpacity(), propertyValue, - @"Setting circleStrokeOpacity to a data expression should update circle-stroke-opacity."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.circleStrokeOpacity, pedanticFunctionExpression, - @"circleStrokeOpacity should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.circleStrokeOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getCircleStrokeOpacity(), propertyValue, - @"Setting circleStrokeOpacity to a camera-data expression should update circle-stroke-opacity."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.circleStrokeOpacity, pedanticFunctionExpression, - @"circleStrokeOpacity should round-trip camera-data expressions."); - - layer.circleStrokeOpacity = nil; - XCTAssertTrue(rawLayer->getCircleStrokeOpacity().isUndefined(), - @"Unsetting circleStrokeOpacity should return circle-stroke-opacity to the default value."); - XCTAssertEqualObjects(layer.circleStrokeOpacity, defaultExpression, - @"circleStrokeOpacity should return the default value after being unset."); - // Transition property test - layer.circleStrokeOpacityTransition = transitionTest; - auto toptions = rawLayer->getCircleStrokeOpacityTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition circleStrokeOpacityTransition = layer.circleStrokeOpacityTransition; - XCTAssertEqual(circleStrokeOpacityTransition.delay, transitionTest.delay); - XCTAssertEqual(circleStrokeOpacityTransition.duration, transitionTest.duration); - } - - // circle-stroke-width - { - XCTAssertTrue(rawLayer->getCircleStrokeWidth().isUndefined(), - @"circle-stroke-width should be unset initially."); - NSExpression *defaultExpression = layer.circleStrokeWidth; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.circleStrokeWidth = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getCircleStrokeWidth(), propertyValue, - @"Setting circleStrokeWidth to a constant value expression should update circle-stroke-width."); - XCTAssertEqualObjects(layer.circleStrokeWidth, constantExpression, - @"circleStrokeWidth should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.circleStrokeWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getCircleStrokeWidth(), propertyValue, - @"Setting circleStrokeWidth to a camera expression should update circle-stroke-width."); - XCTAssertEqualObjects(layer.circleStrokeWidth, functionExpression, - @"circleStrokeWidth should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.circleStrokeWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getCircleStrokeWidth(), propertyValue, - @"Setting circleStrokeWidth to a data expression should update circle-stroke-width."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.circleStrokeWidth, pedanticFunctionExpression, - @"circleStrokeWidth should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.circleStrokeWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getCircleStrokeWidth(), propertyValue, - @"Setting circleStrokeWidth to a camera-data expression should update circle-stroke-width."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.circleStrokeWidth, pedanticFunctionExpression, - @"circleStrokeWidth should round-trip camera-data expressions."); - - layer.circleStrokeWidth = nil; - XCTAssertTrue(rawLayer->getCircleStrokeWidth().isUndefined(), - @"Unsetting circleStrokeWidth should return circle-stroke-width to the default value."); - XCTAssertEqualObjects(layer.circleStrokeWidth, defaultExpression, - @"circleStrokeWidth should return the default value after being unset."); - // Transition property test - layer.circleStrokeWidthTransition = transitionTest; - auto toptions = rawLayer->getCircleStrokeWidthTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition circleStrokeWidthTransition = layer.circleStrokeWidthTransition; - XCTAssertEqual(circleStrokeWidthTransition.delay, transitionTest.delay); - XCTAssertEqual(circleStrokeWidthTransition.duration, transitionTest.duration); - } - - // circle-translate - { - XCTAssertTrue(rawLayer->getCircleTranslate().isUndefined(), - @"circle-translate should be unset initially."); - NSExpression *defaultExpression = layer.circleTranslation; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", -#if TARGET_OS_IPHONE - [NSValue valueWithCGVector:CGVectorMake(1, 1)] -#else - [NSValue valueWithMGLVector:CGVectorMake(1, -1)] -#endif - ]; - layer.circleTranslation = constantExpression; - mbgl::style::PropertyValue> propertyValue = { { 1, 1 } }; - XCTAssertEqual(rawLayer->getCircleTranslate(), propertyValue, - @"Setting circleTranslation to a constant value expression should update circle-translate."); - XCTAssertEqualObjects(layer.circleTranslation, constantExpression, - @"circleTranslation should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.circleTranslation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({ 1, 1 }), 18.0, literal({ 1, 1 })) - ); - } - - XCTAssertEqual(rawLayer->getCircleTranslate(), propertyValue, - @"Setting circleTranslation to a camera expression should update circle-translate."); - XCTAssertEqualObjects(layer.circleTranslation, functionExpression, - @"circleTranslation should round-trip camera expressions."); - - - layer.circleTranslation = nil; - XCTAssertTrue(rawLayer->getCircleTranslate().isUndefined(), - @"Unsetting circleTranslation should return circle-translate to the default value."); - XCTAssertEqualObjects(layer.circleTranslation, defaultExpression, - @"circleTranslation should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.circleTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.circleTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // circle-translate-anchor - { - XCTAssertTrue(rawLayer->getCircleTranslateAnchor().isUndefined(), - @"circle-translate-anchor should be unset initially."); - NSExpression *defaultExpression = layer.circleTranslationAnchor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - layer.circleTranslationAnchor = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::TranslateAnchorType::Viewport }; - XCTAssertEqual(rawLayer->getCircleTranslateAnchor(), propertyValue, - @"Setting circleTranslationAnchor to a constant value expression should update circle-translate-anchor."); - XCTAssertEqualObjects(layer.circleTranslationAnchor, constantExpression, - @"circleTranslationAnchor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.circleTranslationAnchor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("viewport"), 18.0, literal("viewport")) - ); - } - - XCTAssertEqual(rawLayer->getCircleTranslateAnchor(), propertyValue, - @"Setting circleTranslationAnchor to a camera expression should update circle-translate-anchor."); - XCTAssertEqualObjects(layer.circleTranslationAnchor, functionExpression, - @"circleTranslationAnchor should round-trip camera expressions."); - - - layer.circleTranslationAnchor = nil; - XCTAssertTrue(rawLayer->getCircleTranslateAnchor().isUndefined(), - @"Unsetting circleTranslationAnchor should return circle-translate-anchor to the default value."); - XCTAssertEqualObjects(layer.circleTranslationAnchor, defaultExpression, - @"circleTranslationAnchor should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.circleTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.circleTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLCircleLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } -} - -- (void)testPropertyNames { - [self testPropertyName:@"circle-blur" isBoolean:NO]; - [self testPropertyName:@"circle-color" isBoolean:NO]; - [self testPropertyName:@"circle-opacity" isBoolean:NO]; - [self testPropertyName:@"circle-pitch-alignment" isBoolean:NO]; - [self testPropertyName:@"circle-radius" isBoolean:NO]; - [self testPropertyName:@"circle-scale-alignment" isBoolean:NO]; - [self testPropertyName:@"circle-stroke-color" isBoolean:NO]; - [self testPropertyName:@"circle-stroke-opacity" isBoolean:NO]; - [self testPropertyName:@"circle-stroke-width" isBoolean:NO]; - [self testPropertyName:@"circle-translation" isBoolean:NO]; - [self testPropertyName:@"circle-translation-anchor" isBoolean:NO]; -} - -- (void)testValueAdditions { - XCTAssertEqual([NSValue valueWithMGLCirclePitchAlignment:MGLCirclePitchAlignmentMap].MGLCirclePitchAlignmentValue, MGLCirclePitchAlignmentMap); - XCTAssertEqual([NSValue valueWithMGLCirclePitchAlignment:MGLCirclePitchAlignmentViewport].MGLCirclePitchAlignmentValue, MGLCirclePitchAlignmentViewport); - XCTAssertEqual([NSValue valueWithMGLCircleScaleAlignment:MGLCircleScaleAlignmentMap].MGLCircleScaleAlignmentValue, MGLCircleScaleAlignmentMap); - XCTAssertEqual([NSValue valueWithMGLCircleScaleAlignment:MGLCircleScaleAlignmentViewport].MGLCircleScaleAlignmentValue, MGLCircleScaleAlignmentViewport); - XCTAssertEqual([NSValue valueWithMGLCircleTranslationAnchor:MGLCircleTranslationAnchorMap].MGLCircleTranslationAnchorValue, MGLCircleTranslationAnchorMap); - XCTAssertEqual([NSValue valueWithMGLCircleTranslationAnchor:MGLCircleTranslationAnchorViewport].MGLCircleTranslationAnchorValue, MGLCircleTranslationAnchorViewport); -} - -@end diff --git a/platform/darwin/test/MGLClockDirectionFormatterTests.m b/platform/darwin/test/MGLClockDirectionFormatterTests.m deleted file mode 100644 index 05ebc3af2d4..00000000000 --- a/platform/darwin/test/MGLClockDirectionFormatterTests.m +++ /dev/null @@ -1,72 +0,0 @@ -#import -#import - -@interface MGLClockDirectionFormatterTests : XCTestCase - -@end - -@implementation MGLClockDirectionFormatterTests - -- (void)testClockDirections { - MGLClockDirectionFormatter *shortFormatter = [[MGLClockDirectionFormatter alloc] init]; - shortFormatter.unitStyle = NSFormattingUnitStyleShort; - - MGLClockDirectionFormatter *mediumFormatter = [[MGLClockDirectionFormatter alloc] init]; - - MGLClockDirectionFormatter *longFormatter = [[MGLClockDirectionFormatter alloc] init]; - longFormatter.unitStyle = NSFormattingUnitStyleLong; - - CLLocationDirection direction; - - direction = -90; - XCTAssertEqualObjects(@"9:00", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"9 o’clock", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"9 o’clock", [longFormatter stringFromDirection:direction]); - - direction = 0; - XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]); - - direction = 45; - XCTAssertEqualObjects(@"2:00", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"2 o’clock", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"2 o’clock", [longFormatter stringFromDirection:direction]); - - direction = 90; - XCTAssertEqualObjects(@"3:00", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"3 o’clock", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"3 o’clock", [longFormatter stringFromDirection:direction]); - - direction = 180; - XCTAssertEqualObjects(@"6:00", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"6 o’clock", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"6 o’clock", [longFormatter stringFromDirection:direction]); - - direction = 270; - XCTAssertEqualObjects(@"9:00", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"9 o’clock", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"9 o’clock", [longFormatter stringFromDirection:direction]); - - direction = 359.34951805867024; - XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]); - - direction = 360; - XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]); - - direction = 360.1; - XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]); - - direction = 720; - XCTAssertEqualObjects(@"12:00", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"12 o’clock", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"12 o’clock", [longFormatter stringFromDirection:direction]); -} - -@end diff --git a/platform/darwin/test/MGLCodingTests.mm b/platform/darwin/test/MGLCodingTests.mm deleted file mode 100644 index e6417c99f5f..00000000000 --- a/platform/darwin/test/MGLCodingTests.mm +++ /dev/null @@ -1,615 +0,0 @@ -#import -#import - -#import "MGLFoundation_Private.h" -#import "MGLCluster.h" - -#if TARGET_OS_IPHONE -#import "MGLUserLocation_Private.h" -#endif - -@interface MGLCodingTests : XCTestCase -@end - -@implementation MGLCodingTests - -- (NSString *)temporaryFilePathForClass:(Class)clazz { - return [NSTemporaryDirectory() stringByAppendingPathComponent:NSStringFromClass(clazz)]; -} - -- (void)testPointAnnotation { - MGLPointAnnotation *annotation = [[MGLPointAnnotation alloc] init]; - annotation.coordinate = CLLocationCoordinate2DMake(0.5, 0.5); - annotation.title = @"title"; - annotation.subtitle = @"subtitle"; - - NSString *filePath = [self temporaryFilePathForClass:MGLPointAnnotation.class]; - [NSKeyedArchiver archiveRootObject:annotation toFile:filePath]; - MGLPointAnnotation *unarchivedAnnotation = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqualObjects(annotation, unarchivedAnnotation); -} - -- (void)testPointFeature { - MGLPointFeature *pointFeature = [[MGLPointFeature alloc] init]; - pointFeature.title = @"title"; - pointFeature.subtitle = @"subtitle"; - pointFeature.identifier = @(123); - pointFeature.attributes = @{@"bbox": @[@1, @2, @3, @4]}; - - NSString *filePath = [self temporaryFilePathForClass:MGLPointFeature.class]; - [NSKeyedArchiver archiveRootObject:pointFeature toFile:filePath]; - MGLPointFeature *unarchivedPointFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqualObjects(pointFeature, unarchivedPointFeature); -} - -- (void)testPointFeatureCluster { - MGLPointFeature *pointFeature = [[MGLPointFeatureCluster alloc] init]; - pointFeature.title = @"title"; - pointFeature.subtitle = @"subtitle"; - pointFeature.identifier = @(123); - pointFeature.attributes = @{ - @"cluster" : @(YES), - @"cluster_id" : @(456), - @"point_count" : @(2), - }; - - XCTAssert([pointFeature isKindOfClass:[MGLPointFeature class]], @""); - - NSString *filePath = [self temporaryFilePathForClass:MGLPointFeature.class]; - [NSKeyedArchiver archiveRootObject:pointFeature toFile:filePath]; - MGLPointFeature *unarchivedPointFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqualObjects(pointFeature, unarchivedPointFeature); - - // Unarchive process should ensure we still have a cluster - XCTAssert([unarchivedPointFeature isMemberOfClass:[MGLPointFeatureCluster class]]); - - id cluster = MGL_OBJC_DYNAMIC_CAST_AS_PROTOCOL(unarchivedPointFeature, MGLCluster); - - XCTAssert(cluster); - XCTAssert(cluster.clusterIdentifier == 456); - XCTAssert(cluster.clusterPointCount == 2); -} - - -- (void)testPolyline { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0.129631234123, 1.7812739312551), - CLLocationCoordinate2DMake(2.532083092342, 3.5216418292392) - }; - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - - MGLPolyline *polyline = [MGLPolyline polylineWithCoordinates:coordinates count:numberOfCoordinates]; - polyline.title = @"title"; - polyline.subtitle = @"subtitle"; - - NSString *filePath = [self temporaryFilePathForClass:[MGLPolyline class]]; - [NSKeyedArchiver archiveRootObject:polyline toFile:filePath]; - MGLPolyline *unarchivedPolyline = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqualObjects(polyline, unarchivedPolyline); - - CLLocationCoordinate2D otherCoordinates[] = { - CLLocationCoordinate2DMake(-1, -2) - }; - - [unarchivedPolyline replaceCoordinatesInRange:NSMakeRange(0, 1) withCoordinates:otherCoordinates]; - - XCTAssertNotEqualObjects(polyline, unarchivedPolyline); - - CLLocationCoordinate2D multiLineCoordinates[] = { - CLLocationCoordinate2DMake(51.000000, 0.000000), - CLLocationCoordinate2DMake(51.000000, 1.000000), - CLLocationCoordinate2DMake(51.000000, 2.000000), - }; - - NSUInteger multiLineCoordinatesCount = sizeof(multiLineCoordinates) / sizeof(CLLocationCoordinate2D); - MGLPolyline *multiLine = [MGLPolyline polylineWithCoordinates:multiLineCoordinates count:multiLineCoordinatesCount]; - CLLocationCoordinate2D multiLineCenter = CLLocationCoordinate2DMake(51.000000, 1.000000); - - XCTAssertEqual([multiLine coordinate].latitude, multiLineCenter.latitude); - XCTAssertEqual([multiLine coordinate].longitude, multiLineCenter.longitude); - - CLLocationCoordinate2D segmentCoordinates[] = { - CLLocationCoordinate2DMake(35.040390, -85.311477), - CLLocationCoordinate2DMake(35.040390, -85.209510), - }; - - NSUInteger segmentCoordinatesCount = sizeof(segmentCoordinates) / sizeof(CLLocationCoordinate2D); - MGLPolyline *segmentLine = [MGLPolyline polylineWithCoordinates:segmentCoordinates count:segmentCoordinatesCount]; - CLLocationCoordinate2D segmentCenter = CLLocationCoordinate2DMake(35.0404006631, -85.2604935); - - XCTAssertEqualWithAccuracy([segmentLine coordinate].latitude, segmentCenter.latitude, 0.0001); - XCTAssertEqualWithAccuracy([segmentLine coordinate].longitude, segmentCenter.longitude, 0.0001); - - CLLocationCoordinate2D sfToBerkeleyCoordinates[] = { - CLLocationCoordinate2DMake(37.782440, -122.397111), - CLLocationCoordinate2DMake(37.818384, -122.352994), - CLLocationCoordinate2DMake(37.831401, -122.274545), - CLLocationCoordinate2DMake(37.862172, -122.262700), - }; - - NSUInteger sfToBerkeleyCoordinatesCount = sizeof(sfToBerkeleyCoordinates) / sizeof(CLLocationCoordinate2D); - MGLPolyline *sfToBerkeleyLine = [MGLPolyline polylineWithCoordinates:sfToBerkeleyCoordinates count:sfToBerkeleyCoordinatesCount]; - CLLocationCoordinate2D sfToBerkeleyCenter = CLLocationCoordinate2DMake(37.8230575118,-122.324867587); - - XCTAssertEqualWithAccuracy([sfToBerkeleyLine coordinate].latitude, sfToBerkeleyCenter.latitude, 0.0001); - XCTAssertEqualWithAccuracy([sfToBerkeleyLine coordinate].longitude, sfToBerkeleyCenter.longitude, 0.0001); - -} - -- (void)testPolygon { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(35.090745, -85.300259), - CLLocationCoordinate2DMake(35.092035, -85.298885), - CLLocationCoordinate2DMake(35.090639, -85.297416), - CLLocationCoordinate2DMake(35.089112, -85.298928) - }; - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - - MGLPolygon *polygon = [MGLPolygon polygonWithCoordinates:coordinates count:numberOfCoordinates]; - polygon.title = nil; - polygon.subtitle = @"subtitle"; - - NSString *filePath = [self temporaryFilePathForClass:[MGLPolygon class]]; - [NSKeyedArchiver archiveRootObject:polygon toFile:filePath]; - - MGLPolygon *unarchivedPolygon = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - [unarchivedPolygon coordinate]; - - XCTAssertEqualObjects(polygon, unarchivedPolygon); - - CLLocationCoordinate2D squareCoordinates[] = { - CLLocationCoordinate2DMake(100.0, 0.0), - CLLocationCoordinate2DMake(101.0, 0.0), - CLLocationCoordinate2DMake(101.0, 1.0), - CLLocationCoordinate2DMake(100.0, 1.0), - }; - - NSUInteger squareCoordinatesCount = sizeof(squareCoordinates) / sizeof(CLLocationCoordinate2D); - MGLPolygon *squarePolygon = [MGLPolygon polygonWithCoordinates:squareCoordinates count:squareCoordinatesCount]; - CLLocationCoordinate2D squareCenter = CLLocationCoordinate2DMake(100.5, 0.5); - - XCTAssertEqual([squarePolygon coordinate].latitude, squareCenter.latitude); - XCTAssertEqual([squarePolygon coordinate].longitude, squareCenter.longitude); - -} - -- (void)testPolygonWithInteriorPolygons { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0, 1), - CLLocationCoordinate2DMake(10, 20) - }; - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - - CLLocationCoordinate2D interiorCoordinates[] = { - CLLocationCoordinate2DMake(4, 4), - CLLocationCoordinate2DMake(6, 6) - }; - - NSUInteger numberOfInteriorCoordinates = sizeof(interiorCoordinates) / sizeof(CLLocationCoordinate2D); - - MGLPolygon *interiorPolygon = [MGLPolygon polygonWithCoordinates:interiorCoordinates count:numberOfInteriorCoordinates]; - MGLPolygon *polygon = [MGLPolygon polygonWithCoordinates:coordinates count:numberOfCoordinates interiorPolygons:@[interiorPolygon]]; - - NSString *filePath = [self temporaryFilePathForClass:[MGLPolygon class]]; - [NSKeyedArchiver archiveRootObject:polygon toFile:filePath]; - - MGLPolygon *unarchivedPolygon = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqualObjects(polygon, unarchivedPolygon); -} - -- (void)testPolylineFeature { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0, 1), - CLLocationCoordinate2DMake(10, 20) - }; - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - MGLPolylineFeature *polylineFeature = [MGLPolylineFeature polylineWithCoordinates:coordinates count:numberOfCoordinates]; - polylineFeature.attributes = @{@"bbox": @[@0, @1, @2, @3]}; - polylineFeature.identifier = @"identifier"; - - NSString *filePath = [self temporaryFilePathForClass:[MGLPolylineFeature class]]; - [NSKeyedArchiver archiveRootObject:polylineFeature toFile:filePath]; - - MGLPolylineFeature *unarchivedPolylineFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqualObjects(polylineFeature, unarchivedPolylineFeature); - - unarchivedPolylineFeature.attributes = @{@"bbox": @[@4, @3, @2, @1]}; - - XCTAssertNotEqualObjects(polylineFeature, unarchivedPolylineFeature); -} - -- (void)testPolygonFeature { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0, 1), - CLLocationCoordinate2DMake(10, 20) - }; - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - MGLPolygonFeature *polygonFeature = [MGLPolygonFeature polygonWithCoordinates:coordinates count:numberOfCoordinates]; - - NSString *filePath = [self temporaryFilePathForClass:[MGLPolygonFeature class]]; - [NSKeyedArchiver archiveRootObject:polygonFeature toFile:filePath]; - - MGLPolygonFeature *unarchivedPolygonFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqualObjects(polygonFeature, unarchivedPolygonFeature); - - unarchivedPolygonFeature.identifier = @"test"; - - XCTAssertNotEqualObjects(polygonFeature, unarchivedPolygonFeature); -} - -- (void)testPointCollection { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0, 1), - CLLocationCoordinate2DMake(10, 11), - CLLocationCoordinate2DMake(20, 21), - CLLocationCoordinate2DMake(30, 31), - }; - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - - MGLPointCollection *pointCollection = [MGLPointCollection pointCollectionWithCoordinates:coordinates count:numberOfCoordinates]; - CLLocationCoordinate2D pointsCenter = CLLocationCoordinate2DMake(0, 1); - - XCTAssertEqual([pointCollection coordinate].latitude, pointsCenter.latitude); - XCTAssertEqual([pointCollection coordinate].longitude, pointsCenter.longitude); - - NSString *filePath = [self temporaryFilePathForClass:[MGLPointCollection class]]; - [NSKeyedArchiver archiveRootObject:pointCollection toFile:filePath]; - - MGLPointCollection *unarchivedPointCollection = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqualObjects(pointCollection, unarchivedPointCollection); -} - -- (void)testPointCollectionFeature { - NSMutableArray *features = [NSMutableArray array]; - for (NSUInteger i = 0; i < 100; i++) { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - feature.coordinate = CLLocationCoordinate2DMake(arc4random() % 90, arc4random() % 180); - [features addObject:feature]; - } - - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0, 1), - CLLocationCoordinate2DMake(10, 11), - CLLocationCoordinate2DMake(20, 21), - CLLocationCoordinate2DMake(30, 31), - }; - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - - MGLPointCollectionFeature *collection = [MGLPointCollectionFeature pointCollectionWithCoordinates:coordinates count:numberOfCoordinates]; - collection.identifier = @"identifier"; - collection.attributes = @{@"bbox": @[@1, @2, @3, @4]}; - - NSString *filePath = [self temporaryFilePathForClass:[MGLPointCollectionFeature class]]; - [NSKeyedArchiver archiveRootObject:collection toFile:filePath]; - - MGLPointCollectionFeature *unarchivedCollection = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqualObjects(collection, unarchivedCollection); - - unarchivedCollection.identifier = @"newIdentifier"; - - XCTAssertNotEqualObjects(collection, unarchivedCollection); -} - -- (void)testMultiPolyline { - - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0, 1), - CLLocationCoordinate2DMake(10, 11), - CLLocationCoordinate2DMake(20, 21), - CLLocationCoordinate2DMake(30, 31), - }; - - CLLocationCoordinate2D line1[] = { - CLLocationCoordinate2DMake(100, 40), - CLLocationCoordinate2DMake(105, 45), - CLLocationCoordinate2DMake(110, 55) - }; - - CLLocationCoordinate2D line2[] = { - CLLocationCoordinate2DMake(105, 40), - CLLocationCoordinate2DMake(110, 45), - CLLocationCoordinate2DMake(115, 55) - }; - - NSUInteger road1CoordinatesCount = sizeof(line1) / sizeof(CLLocationCoordinate2D); - NSUInteger road2CoordinatesCount = sizeof(line2) / sizeof(CLLocationCoordinate2D); - - MGLPolyline *road1Polyline = [MGLPolyline polylineWithCoordinates:line1 count:road1CoordinatesCount]; - MGLPolyline *road2Polyline = [MGLPolyline polylineWithCoordinates:line1 count:road2CoordinatesCount]; - - MGLMultiPolyline *roads = [MGLMultiPolyline multiPolylineWithPolylines:@[road1Polyline, road2Polyline]]; - CLLocationCoordinate2D roadCenter = CLLocationCoordinate2DMake(100, 40); - - XCTAssertEqual([roads coordinate].latitude, roadCenter.latitude); - XCTAssertEqual([roads coordinate].longitude, roadCenter.longitude); - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - - NSMutableArray *polylines = [NSMutableArray array]; - - for (NSUInteger i = 0; i < 100; i++) { - MGLPolyline *polyline = [MGLPolyline polylineWithCoordinates:coordinates count:numberOfCoordinates]; - [polylines addObject:polyline]; - } - - MGLMultiPolyline *multiPolyline = [MGLMultiPolyline multiPolylineWithPolylines:polylines]; - - NSString *filePath = [self temporaryFilePathForClass:[MGLMultiPolyline class]]; - [NSKeyedArchiver archiveRootObject:multiPolyline toFile:filePath]; - - MGLMultiPolyline *unarchivedMultiPolyline = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - MGLMultiPolyline *anotherMultipolyline = [MGLMultiPolyline multiPolylineWithPolylines:[polylines subarrayWithRange:NSMakeRange(0, polylines.count/2)]]; - - XCTAssertEqualObjects(multiPolyline, unarchivedMultiPolyline); - XCTAssertNotEqualObjects(unarchivedMultiPolyline, anotherMultipolyline); -} - -- (void)testMultiPolygon { - - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0, 1), - CLLocationCoordinate2DMake(10, 11), - CLLocationCoordinate2DMake(20, 21), - CLLocationCoordinate2DMake(30, 31), - }; - - CLLocationCoordinate2D outerSquare[] = { - CLLocationCoordinate2DMake(100.0, 0.0), - CLLocationCoordinate2DMake(101.0, 0.0), - CLLocationCoordinate2DMake(101.0, 1.0), - CLLocationCoordinate2DMake(100.0, 1.0), - }; - - CLLocationCoordinate2D innerSquare[] = { - CLLocationCoordinate2DMake(100.35, 0.35), - CLLocationCoordinate2DMake(100.65, 0.35), - CLLocationCoordinate2DMake(100.65, 0.65), - CLLocationCoordinate2DMake(100.35, 0.65), - }; - - NSUInteger outerCoordinatesCount = sizeof(outerSquare) / sizeof(CLLocationCoordinate2D); - NSUInteger innerCoordinatesCount = sizeof(innerSquare) / sizeof(CLLocationCoordinate2D); - - MGLPolygon *innerPolygonSquare = [MGLPolygon polygonWithCoordinates:innerSquare count:innerCoordinatesCount]; - MGLPolygon *outerPolygonSquare = [MGLPolygon polygonWithCoordinates:outerSquare count:outerCoordinatesCount interiorPolygons:@[innerPolygonSquare]]; - MGLMultiPolygon *squares = [MGLMultiPolygon multiPolygonWithPolygons:@[outerPolygonSquare, innerPolygonSquare]]; - CLLocationCoordinate2D squareCenter = CLLocationCoordinate2DMake(100.5, 0.5); - - XCTAssertEqual([squares coordinate].latitude, squareCenter.latitude); - XCTAssertEqual([squares coordinate].longitude, squareCenter.longitude); - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - - NSMutableArray *polygons = [NSMutableArray array]; - - for (NSUInteger i = 0; i < 100; i++) { - MGLPolygon *polygon = [MGLPolygon polygonWithCoordinates:coordinates count:numberOfCoordinates]; - [polygons addObject:polygon]; - } - - MGLMultiPolygon *multiPolygon = [MGLMultiPolygon multiPolygonWithPolygons:polygons]; - - NSString *filePath = [self temporaryFilePathForClass:[MGLMultiPolygon class]]; - [NSKeyedArchiver archiveRootObject:multiPolygon toFile:filePath]; - - MGLMultiPolygon *unarchivedMultiPolygon = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - MGLMultiPolygon *anotherMultiPolygon = [MGLMultiPolygon multiPolygonWithPolygons:[polygons subarrayWithRange:NSMakeRange(0, polygons.count/2)]]; - - XCTAssertEqualObjects(multiPolygon, unarchivedMultiPolygon); - XCTAssertNotEqualObjects(anotherMultiPolygon, unarchivedMultiPolygon); - -} - -- (void)testShapeCollection { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(10.12315786, 11.23451186), - CLLocationCoordinate2DMake(20.91836515, 21.93689215), - CLLocationCoordinate2DMake(30.55697246, 31.33988123), - }; - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - - MGLPolyline *polyline = [MGLPolyline polylineWithCoordinates:coordinates count:numberOfCoordinates]; - MGLPolygon *polygon = [MGLPolygon polygonWithCoordinates:coordinates count:numberOfCoordinates]; - - MGLShapeCollection *shapeCollection = [MGLShapeCollection shapeCollectionWithShapes:@[polyline, polygon]]; - - NSString *filePath = [self temporaryFilePathForClass:[MGLShapeCollection class]]; - [NSKeyedArchiver archiveRootObject:shapeCollection toFile:filePath]; - - MGLShapeCollection *unarchivedShapeCollection = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - MGLShapeCollection *anotherShapeCollection = [MGLShapeCollection shapeCollectionWithShapes:@[polygon]]; - - XCTAssertEqualObjects(shapeCollection, unarchivedShapeCollection); - XCTAssertNotEqualObjects(shapeCollection, anotherShapeCollection); -} - -- (void)testMultiPolylineFeature { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(10.12315786, 11.23451186), - CLLocationCoordinate2DMake(20.91836515, 21.93689215), - CLLocationCoordinate2DMake(30.55697246, 31.33988123), - }; - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - - NSMutableArray *polylines = [NSMutableArray array]; - for (NSUInteger i = 0; i < 100; i++) { - MGLPolylineFeature *polylineFeature = [MGLPolylineFeature polylineWithCoordinates:coordinates count:numberOfCoordinates]; - polylineFeature.identifier = @(arc4random() % 100).stringValue; - [polylines addObject:polylineFeature]; - } - - MGLMultiPolylineFeature *multiPolylineFeature = [MGLMultiPolylineFeature multiPolylineWithPolylines:polylines]; - multiPolylineFeature.attributes = @{@"bbox": @[@4, @3, @2, @1]}; - - NSString *filePath = [self temporaryFilePathForClass:[MGLMultiPolylineFeature class]]; - [NSKeyedArchiver archiveRootObject:multiPolylineFeature toFile:filePath]; - - MGLMultiPolylineFeature *unarchivedMultiPolylineFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - MGLMultiPolylineFeature *anotherMultiPolylineFeature = [MGLMultiPolylineFeature multiPolylineWithPolylines:[polylines subarrayWithRange:NSMakeRange(0, polylines.count/2)]]; - - XCTAssertEqualObjects(multiPolylineFeature, unarchivedMultiPolylineFeature); - XCTAssertNotEqualObjects(unarchivedMultiPolylineFeature, anotherMultiPolylineFeature); -} - -- (void)testMultiPolygonFeature { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(10.12315786, 11.23451185), - CLLocationCoordinate2DMake(20.88471238, 21.93684215), - CLLocationCoordinate2DMake(30.15697236, 31.32988123), - }; - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - - NSMutableArray *polygons = [NSMutableArray array]; - for (NSUInteger i = 0; i < 100; i++ ) { - MGLPolygonFeature *polygonFeature = [MGLPolygonFeature polygonWithCoordinates:coordinates count:numberOfCoordinates]; - polygonFeature.identifier = @(arc4random_uniform(100)).stringValue; - [polygons addObject:polygonFeature]; - } - - MGLMultiPolygonFeature *multiPolygonFeature = [MGLMultiPolygonFeature multiPolygonWithPolygons:polygons]; - multiPolygonFeature.attributes = @{@"bbox": @[@(arc4random_uniform(100)), - @(arc4random_uniform(100)), - @(arc4random_uniform(100)), - @(arc4random_uniform(100))]}; - - NSString *filePath = [self temporaryFilePathForClass:[MGLMultiPolylineFeature class]]; - [NSKeyedArchiver archiveRootObject:multiPolygonFeature toFile:filePath]; - - MGLMultiPolygonFeature *unarchivedMultiPolygonFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - MGLMultiPolygonFeature *anotherMultiPolygonFeature = [MGLMultiPolygonFeature multiPolygonWithPolygons:[polygons subarrayWithRange:NSMakeRange(0, polygons.count/2)]]; - - XCTAssertEqualObjects(multiPolygonFeature, unarchivedMultiPolygonFeature); - XCTAssertNotEqualObjects(anotherMultiPolygonFeature, unarchivedMultiPolygonFeature); -} - -- (void)testShapeCollectionFeature { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(10.12315786, 11.23451186), - CLLocationCoordinate2DMake(20.91836515, 21.93689215), - CLLocationCoordinate2DMake(30.55697246, 31.33988123), - }; - - NSUInteger numberOfCoordinates = sizeof(coordinates) / sizeof(CLLocationCoordinate2D); - - MGLPolylineFeature *polyline = [MGLPolylineFeature polylineWithCoordinates:coordinates count:numberOfCoordinates]; - MGLPolygonFeature *polygon = [MGLPolygonFeature polygonWithCoordinates:coordinates count:numberOfCoordinates]; - - MGLShapeCollectionFeature *shapeCollectionFeature = [MGLShapeCollectionFeature shapeCollectionWithShapes:@[polyline, polygon]]; - shapeCollectionFeature.identifier = @(arc4random_uniform(100)).stringValue; - shapeCollectionFeature.attributes = @{@"bbox":@[@(arc4random_uniform(100)), - @(arc4random_uniform(100)), - @(arc4random_uniform(100)), - @(arc4random_uniform(100))]}; - - NSString *filePath = [self temporaryFilePathForClass:[MGLShapeCollectionFeature class]]; - [NSKeyedArchiver archiveRootObject:shapeCollectionFeature toFile:filePath]; - - MGLShapeCollectionFeature *unarchivedShapeCollectionFeature = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqualObjects(shapeCollectionFeature, unarchivedShapeCollectionFeature); -} - -- (void)testAnnotationImage { -#if TARGET_OS_IPHONE - UIGraphicsBeginImageContext(CGSizeMake(10, 10)); - [[UIColor redColor] setFill]; - UIRectFill(CGRectMake(0, 0, 10, 10)); - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); -#else - NSImage *image = [[NSImage alloc] initWithSize:CGSizeMake(10, 10)]; - [image lockFocus]; - [[NSColor redColor] drawSwatchInRect:CGRectMake(0, 0, 10, 10)]; - [image unlockFocus]; -#endif - - MGLAnnotationImage *annotationImage = [MGLAnnotationImage annotationImageWithImage:image reuseIdentifier:@(arc4random_uniform(100)).stringValue]; - - NSString *filePath = [self temporaryFilePathForClass:[MGLAnnotationImage class]]; - [NSKeyedArchiver archiveRootObject:annotationImage toFile:filePath]; - - MGLAnnotationImage *unarchivedAnnotationImage = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqualObjects(annotationImage, unarchivedAnnotationImage); -} - -#if TARGET_OS_IPHONE -- (void)testAnnotationView { - MGLAnnotationView *annotationView = [[MGLAnnotationView alloc] initWithReuseIdentifier:@"id"]; - annotationView.enabled = NO; - annotationView.selected = YES; - annotationView.draggable = YES; - annotationView.centerOffset = CGVectorMake(10, 10); - annotationView.scalesWithViewingDistance = NO; - - NSString *filePath = [self temporaryFilePathForClass:[MGLAnnotationView class]]; - [NSKeyedArchiver archiveRootObject:annotationView toFile:filePath]; - - MGLAnnotationView *unarchivedAnnotationView = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqual(annotationView.enabled, unarchivedAnnotationView.enabled); - XCTAssertEqual(annotationView.selected, unarchivedAnnotationView.selected); - XCTAssertEqual(annotationView.draggable, unarchivedAnnotationView.draggable); - XCTAssertEqualObjects(NSStringFromCGVector(annotationView.centerOffset), NSStringFromCGVector(unarchivedAnnotationView.centerOffset)); - XCTAssertEqual(annotationView.scalesWithViewingDistance, unarchivedAnnotationView.scalesWithViewingDistance); -} -#endif - -#if TARGET_OS_IPHONE -- (void)testUserLocation { - MGLUserLocation *userLocation = [[MGLUserLocation alloc] init]; - userLocation.location = [[CLLocation alloc] initWithLatitude:1 longitude:1]; - - NSString *filePath = [self temporaryFilePathForClass:[MGLUserLocation class]]; - [NSKeyedArchiver archiveRootObject:userLocation toFile:filePath]; - - MGLUserLocation *unarchivedUserLocation = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqualObjects(userLocation, unarchivedUserLocation); - unarchivedUserLocation.location = [[CLLocation alloc] initWithLatitude:10 longitude:10]; - XCTAssertNotEqualObjects(userLocation, unarchivedUserLocation); -} -#endif - -#if TARGET_OS_IPHONE -- (void)testUserLocationAnnotationView { - MGLUserLocationAnnotationView *annotationView = [[MGLUserLocationAnnotationView alloc] init]; - annotationView.enabled = NO; - annotationView.selected = YES; - annotationView.draggable = YES; - annotationView.centerOffset = CGVectorMake(10, 10); - annotationView.scalesWithViewingDistance = NO; - - NSString *filePath = [self temporaryFilePathForClass:[MGLUserLocationAnnotationView class]]; - [NSKeyedArchiver archiveRootObject:annotationView toFile:filePath]; - - MGLUserLocationAnnotationView *unarchivedAnnotationView = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - - XCTAssertEqual(annotationView.enabled, unarchivedAnnotationView.enabled); - XCTAssertEqual(annotationView.selected, unarchivedAnnotationView.selected); - XCTAssertEqual(annotationView.draggable, unarchivedAnnotationView.draggable); - XCTAssertEqualObjects(NSStringFromCGVector(annotationView.centerOffset), NSStringFromCGVector(unarchivedAnnotationView.centerOffset)); - XCTAssertEqual(annotationView.scalesWithViewingDistance, unarchivedAnnotationView.scalesWithViewingDistance); -} -#endif - -@end diff --git a/platform/darwin/test/MGLCompassDirectionFormatterTests.m b/platform/darwin/test/MGLCompassDirectionFormatterTests.m deleted file mode 100644 index c4ccc6ac4f2..00000000000 --- a/platform/darwin/test/MGLCompassDirectionFormatterTests.m +++ /dev/null @@ -1,88 +0,0 @@ -#import -#import - -@interface MGLCompassDirectionFormatterTests : XCTestCase - -@end - -@implementation MGLCompassDirectionFormatterTests - -- (void)testCompassDirections { - MGLCompassDirectionFormatter *shortFormatter = [[MGLCompassDirectionFormatter alloc] init]; - shortFormatter.unitStyle = NSFormattingUnitStyleShort; - - MGLCompassDirectionFormatter *mediumFormatter = [[MGLCompassDirectionFormatter alloc] init]; - XCTAssertEqual(mediumFormatter.unitStyle, NSFormattingUnitStyleMedium, @"Unit style should be medium by default."); - - MGLCompassDirectionFormatter *longFormatter = [[MGLCompassDirectionFormatter alloc] init]; - longFormatter.unitStyle = NSFormattingUnitStyleLong; - - CLLocationDirection direction; - - direction = -45; - XCTAssertEqualObjects(@"NW", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"northwest", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"northwest", [longFormatter stringFromDirection:direction]); - - direction = 0; - XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north", [longFormatter stringFromDirection:direction]); - - direction = 1; - XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north", [longFormatter stringFromDirection:direction]); - - direction = 10; - XCTAssertEqualObjects(@"NbE", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north by east", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north by east", [longFormatter stringFromDirection:direction]); - - direction = 20; - XCTAssertEqualObjects(@"NNE", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north-northeast", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north-northeast", [longFormatter stringFromDirection:direction]); - - direction = 45; - XCTAssertEqualObjects(@"NE", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"northeast", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"northeast", [longFormatter stringFromDirection:direction]); - - direction = 90; - XCTAssertEqualObjects(@"E", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"east", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"east", [longFormatter stringFromDirection:direction]); - - direction = 180; - XCTAssertEqualObjects(@"S", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"south", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"south", [longFormatter stringFromDirection:direction]); - - direction = 270; - XCTAssertEqualObjects(@"W", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"west", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"west", [longFormatter stringFromDirection:direction]); - - direction = 359.34951805867024; - XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north", [longFormatter stringFromDirection:direction]); - - direction = 360; - XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north", [longFormatter stringFromDirection:direction]); - - direction = 360.1; - XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north", [longFormatter stringFromDirection:direction]); - - direction = 720; - XCTAssertEqualObjects(@"N", [shortFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north", [mediumFormatter stringFromDirection:direction]); - XCTAssertEqualObjects(@"north", [longFormatter stringFromDirection:direction]); -} - -@end diff --git a/platform/darwin/test/MGLComputedShapeSourceTests.m b/platform/darwin/test/MGLComputedShapeSourceTests.m deleted file mode 100644 index 6eb45913d68..00000000000 --- a/platform/darwin/test/MGLComputedShapeSourceTests.m +++ /dev/null @@ -1,24 +0,0 @@ -#import - -#import - - -@interface MGLComputedShapeSourceTests : XCTestCase -@end - -@implementation MGLComputedShapeSourceTests - -- (void)testInitializer { - MGLComputedShapeSource *source = [[MGLComputedShapeSource alloc] initWithIdentifier:@"id" options:@{}]; - XCTAssertNotNil(source); - XCTAssertNotNil(source.requestQueue); - XCTAssertNil(source.dataSource); -} - -- (void)testNilOptions { - MGLComputedShapeSource *source = [[MGLComputedShapeSource alloc] initWithIdentifier:@"id" options:nil]; - XCTAssertNotNil(source); -} - - -@end diff --git a/platform/darwin/test/MGLCoordinateFormatterTests.m b/platform/darwin/test/MGLCoordinateFormatterTests.m deleted file mode 100644 index ac083fa1035..00000000000 --- a/platform/darwin/test/MGLCoordinateFormatterTests.m +++ /dev/null @@ -1,48 +0,0 @@ -#import -#import - -@interface MGLCoordinateFormatterTests : XCTestCase - -@end - -@implementation MGLCoordinateFormatterTests - -- (void)testStrings { - MGLCoordinateFormatter *shortFormatter = [[MGLCoordinateFormatter alloc] init]; - shortFormatter.unitStyle = NSFormattingUnitStyleShort; - XCTAssertTrue(shortFormatter.allowsSeconds, @"Arcseconds should be allowed by default."); - XCTAssertTrue(shortFormatter.allowsMinutes, @"Arcminutes should be allowed by default."); - - MGLCoordinateFormatter *mediumFormatter = [[MGLCoordinateFormatter alloc] init]; - XCTAssertEqual(mediumFormatter.unitStyle, NSFormattingUnitStyleMedium, @"Unit style should be medium by default."); - - MGLCoordinateFormatter *longFormatter = [[MGLCoordinateFormatter alloc] init]; - longFormatter.unitStyle = NSFormattingUnitStyleLong; - - CLLocationCoordinate2D coordinate; - - coordinate = CLLocationCoordinate2DMake(38.9131982, -77.0325453144239); - XCTAssertEqualObjects([shortFormatter stringFromCoordinate:coordinate], @"38°54′48″N, 77°1′57″W"); - XCTAssertEqualObjects([mediumFormatter stringFromCoordinate:coordinate], @"38°54′48″ north, 77°1′57″ west"); - XCTAssertEqualObjects([longFormatter stringFromCoordinate:coordinate], @"38 degrees, 54 minutes, and 48 seconds north by 77 degrees, 1 minute, and 57 seconds west"); - - shortFormatter.allowsSeconds = NO; - mediumFormatter.allowsSeconds = NO; - longFormatter.allowsSeconds = NO; - - coordinate = CLLocationCoordinate2DMake(38.9131982, -77.0325453144239); - XCTAssertEqualObjects([shortFormatter stringFromCoordinate:coordinate], @"38°55′N, 77°2′W"); - XCTAssertEqualObjects([mediumFormatter stringFromCoordinate:coordinate], @"38°55′ north, 77°2′ west"); - XCTAssertEqualObjects([longFormatter stringFromCoordinate:coordinate], @"38 degrees and 55 minutes north by 77 degrees and 2 minutes west"); - - shortFormatter.allowsMinutes = NO; - mediumFormatter.allowsMinutes = NO; - longFormatter.allowsMinutes = NO; - - coordinate = CLLocationCoordinate2DMake(38.9131982, -77.0325453144239); - XCTAssertEqualObjects([shortFormatter stringFromCoordinate:coordinate], @"39°N, 77°W"); - XCTAssertEqualObjects([mediumFormatter stringFromCoordinate:coordinate], @"39° north, 77° west"); - XCTAssertEqualObjects([longFormatter stringFromCoordinate:coordinate], @"39 degrees north by 77 degrees west"); -} - -@end diff --git a/platform/darwin/test/MGLDistanceFormatterTests.m b/platform/darwin/test/MGLDistanceFormatterTests.m deleted file mode 100644 index f15ad9d3134..00000000000 --- a/platform/darwin/test/MGLDistanceFormatterTests.m +++ /dev/null @@ -1,30 +0,0 @@ -#import -#import - -@interface MGLDistanceFormatterTests : XCTestCase - -@end - -@implementation MGLDistanceFormatterTests - -- (void)testAbbreviatedMetricUnits { - MGLDistanceFormatter *formatter = [[MGLDistanceFormatter alloc] init]; - formatter.numberFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_CA"]; - for (CLLocationDistance distance=0; distance <= 10000; distance+=5) { - NSString *unit = [[formatter stringFromDistance:distance] componentsSeparatedByString:@" "][1]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", @[@"mm", @"cm", @"m", @"km"]]; - XCTAssert([predicate evaluateWithObject:unit], @"Should only contain metric units"); - } -} - -- (void)testAbbreviatedImperialUnits { - MGLDistanceFormatter *formatter = [[MGLDistanceFormatter alloc] init]; - formatter.numberFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US"]; - for (CLLocationDistance distance=0; distance <= 10000; distance+=5) { - NSString *unit = [[formatter stringFromDistance:distance] componentsSeparatedByString:@" "][1]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", @[@"ft", @"mi"]]; - XCTAssert([predicate evaluateWithObject:unit], @"Should only contain imperial units"); - } -} - -@end diff --git a/platform/darwin/test/MGLDocumentationExampleTests.swift b/platform/darwin/test/MGLDocumentationExampleTests.swift deleted file mode 100644 index 7d6bdbed54b..00000000000 --- a/platform/darwin/test/MGLDocumentationExampleTests.swift +++ /dev/null @@ -1,592 +0,0 @@ -import XCTest -import Mapbox - -/** - Test cases that ensure the inline examples in the project documentation - compile. - - To add an example: - 1. Add a test case named in the form testMGLClass or testMGLClass$method. - 2. Wrap the code you'd like to appear in the documentation within the - following comment blocks: - ``` - //#-example-code - ... - //#-end-example-code - ``` - 3. Insert an empty Swift code block inside the header file where you'd like the - example code to be inserted. - 4. Run `make darwin-update-examples` to extract example code from the test - method below and insert it into the header. - */ -class MGLDocumentationExampleTests: XCTestCase, MGLMapViewDelegate { - var mapView: MGLMapView! - var styleLoadingExpectation: XCTestExpectation! - static let styleURL = Bundle(for: MGLDocumentationExampleTests.self).url(forResource: "one-liner", withExtension: "json")! - - // Mock MGLOfflineStorage singleton so that it doesn't start long-running tasks that could interfere with other tests. - fileprivate class MGLOfflineStorageMock { - static let shared = MGLOfflineStorageMock() - func addPack(for: MGLOfflineRegion, withContext: Data, completionHandler: MGLOfflinePackAdditionCompletionHandler? = nil) { - XCTAssert(MGLOfflineStorage.shared.responds(to: #selector(MGLOfflineStorage.shared.addPack(for:withContext:completionHandler:)))) - if let completionHandler = completionHandler { - completionHandler(nil, NSError(domain: "MGLDocumentationExampleError", code: 0, userInfo: [NSLocalizedDescriptionKey: "\(#function) is mocked and not functional."])) - } - } - } - - override func setUp() { - super.setUp() - mapView = MGLMapView(frame: CGRect(x: 0, y: 0, width: 256, height: 256), styleURL: MGLDocumentationExampleTests.styleURL) - mapView.delegate = self - styleLoadingExpectation = expectation(description: "Map view should finish loading style") - waitForExpectations(timeout: 10, handler: nil) - } - - override func tearDown() { - mapView = nil - styleLoadingExpectation = nil - super.tearDown() - } - - func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) { - styleLoadingExpectation.fulfill() - } - - func testMGLLight() { - //#-example-code - let light = MGLLight() - let position = MGLSphericalPosition(radial: 5, azimuthal: 180, polar: 80) - light.position = NSExpression(forConstantValue: NSValue(mglSphericalPosition: position)) - light.anchor = NSExpression(forConstantValue: "map") - mapView.style?.light = light - //#-end-example-code - - XCTAssertNotNil(mapView.style?.light) - } - - func testMGLTilePyramidOfflineRegion() { - class MGLStyle { - static var lightStyleURL: URL { - return MGLDocumentationExampleTests.styleURL - } - } - - typealias MGLOfflineStorage = MGLOfflineStorageMock - - //#-example-code - let northeast = CLLocationCoordinate2D(latitude: 40.989329, longitude: -102.062592) - let southwest = CLLocationCoordinate2D(latitude: 36.986207, longitude: -109.049896) - let bbox = MGLCoordinateBounds(sw: southwest, ne: northeast) - - let region = MGLTilePyramidOfflineRegion(styleURL: MGLStyle.lightStyleURL, bounds: bbox, fromZoomLevel: 11, toZoomLevel: 14) - let context = "Tile Pyramid Region".data(using: .utf8) - MGLOfflineStorage.shared.addPack(for: region, withContext: context!) - //#-end-example-code - - XCTAssertNotNil(region) - } - - func testMGLShapeOfflineRegion() { - class MGLStyle { - static var lightStyleURL: URL { - return MGLDocumentationExampleTests.styleURL - } - } - - typealias MGLOfflineStorage = MGLOfflineStorageMock - - //#-example-code - var coordinates = [ - CLLocationCoordinate2D(latitude: 45.522585, longitude: -122.685699), - CLLocationCoordinate2D(latitude: 45.534611, longitude: -122.708873), - CLLocationCoordinate2D(latitude: 45.530883, longitude: -122.678833) - ] - - let triangle = MGLPolygon(coordinates: &coordinates, count: UInt(coordinates.count)) - let region = MGLShapeOfflineRegion(styleURL: MGLStyle.lightStyleURL, shape: triangle, fromZoomLevel: 11, toZoomLevel: 14) - let context = "Triangle Region".data(using: .utf8) - MGLOfflineStorage.shared.addPack(for: region, withContext: context!) - //#-end-example-code - - XCTAssertNotNil(region) - } - - func testMGLOfflinePack() { - typealias MGLOfflineStorage = MGLOfflineStorageMock - - let northeast = CLLocationCoordinate2D(latitude: 40.989329, longitude: -102.062592) - let southwest = CLLocationCoordinate2D(latitude: 36.986207, longitude: -109.049896) - let bbox = MGLCoordinateBounds(sw: southwest, ne: northeast) - let region = MGLTilePyramidOfflineRegion(styleURL: MGLDocumentationExampleTests.styleURL, bounds: bbox, fromZoomLevel: 11, toZoomLevel: 14) - let context = "Tile Pyramid Region".data(using: .utf8)! - - //#-example-code - MGLOfflineStorage.shared.addPack(for: region, withContext: context) { (pack, error) in - guard let pack = pack else { - // If adding the pack fails, log an error to console. - print("Error:", error?.localizedDescription ?? "unknown error adding pack at \(#file)(\(#line)) in \(#function)") - return - } - - // Start an MGLOfflinePack download - pack.resume() - } - //#-end-example-code - } - - func testMGLShape$shapeWithData_encoding_error_() { - let mainBundle = Bundle(for: MGLDocumentationExampleTests.self) - - //#-example-code - let url = mainBundle.url(forResource: "amsterdam", withExtension: "geojson")! - let data = try! Data(contentsOf: url) - let feature = try! MGLShape(data: data, encoding: String.Encoding.utf8.rawValue) as! MGLShapeCollectionFeature - //#-end-example-code - - XCTAssertNotNil(feature.shapes.first as? MGLPolygonFeature) - } - - func testMGLShapeSource() { - //#-example-code - var coordinates: [CLLocationCoordinate2D] = [ - CLLocationCoordinate2D(latitude: 37.77, longitude: -122.42), - CLLocationCoordinate2D(latitude: 38.91, longitude: -77.04), - ] - let polyline = MGLPolylineFeature(coordinates: &coordinates, count: UInt(coordinates.count)) - let source = MGLShapeSource(identifier: "lines", features: [polyline], options: nil) - mapView.style?.addSource(source) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.source(withIdentifier: "lines")) - } - - func testMGLRasterTileSource() { - //#-example-code - let source = MGLRasterTileSource(identifier: "clouds", tileURLTemplates: ["https://example.com/raster-tiles/{z}/{x}/{y}.png"], options: [ - .minimumZoomLevel: 9, - .maximumZoomLevel: 16, - .tileSize: 512, - .attributionInfos: [ - MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com")) - ] - ]) - mapView.style?.addSource(source) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.source(withIdentifier: "clouds")) - } - - func testMGLRasterDEMSource() { - // We want to use mapbox.terrain-rgb in the example, but using a mapbox: - // URL requires setting an access token. So this identically named - // subclass of MGLRasterDEMSource swaps in a nonexistent URL. - class MGLRasterDEMSource: Mapbox.MGLRasterDEMSource { - override init(identifier: String, configurationURL: URL, tileSize: CGFloat = 256) { - let bogusURL = URL(string: "https://example.com/raster-rgb.json")! - super.init(identifier: identifier, configurationURL: bogusURL, tileSize: tileSize) - } - } - - //#-example-code - let terrainRGBURL = URL(string: "mapbox://mapbox.terrain-rgb")! - let source = MGLRasterDEMSource(identifier: "hills", configurationURL: terrainRGBURL) - mapView.style?.addSource(source) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.source(withIdentifier: "hills")) - } - - func testMGLVectorTileSource() { - //#-example-code - let source = MGLVectorTileSource(identifier: "pois", tileURLTemplates: ["https://example.com/vector-tiles/{z}/{x}/{y}.mvt"], options: [ - .minimumZoomLevel: 9, - .maximumZoomLevel: 16, - .attributionInfos: [ - MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com")) - ] - ]) - mapView.style?.addSource(source) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.source(withIdentifier: "pois")) - } - - func testMGLPolyline() { - //#-example-code - let coordinates = [ - CLLocationCoordinate2D(latitude: 35.68476, longitude: -220.24257), - CLLocationCoordinate2D(latitude: 37.78428, longitude: -122.41310) - ] - let polyline = MGLPolyline(coordinates: coordinates, count: UInt(coordinates.count)) - //#-end-example-code - - XCTAssertNotNil(polyline) - } - - func testMGLImageSource() { - //#-example-code - let coordinates = MGLCoordinateQuad( - topLeft: CLLocationCoordinate2D(latitude: 46.437, longitude: -80.425), - bottomLeft: CLLocationCoordinate2D(latitude: 37.936, longitude: -80.425), - bottomRight: CLLocationCoordinate2D(latitude: 37.936, longitude: -71.516), - topRight: CLLocationCoordinate2D(latitude: 46.437, longitude: -71.516)) - let source = MGLImageSource(identifier: "radar", coordinateQuad: coordinates, url: URL(string: "https://www.mapbox.com/mapbox-gl-js/assets/radar.gif")!) - mapView.style?.addSource(source) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.source(withIdentifier: "radar")) - } - - func testMGLCircleStyleLayer() { - let population = MGLVectorTileSource(identifier: "population", configurationURL: URL(string: "https://example.com/style.json")!) - mapView.style?.addSource(population) - - //#-example-code - let layer = MGLCircleStyleLayer(identifier: "circles", source: population) - layer.sourceLayerIdentifier = "population" - #if os(macOS) - layer.circleColor = NSExpression(forConstantValue: NSColor.green) - #else - layer.circleColor = NSExpression(forConstantValue: UIColor.green) - #endif - layer.circleRadius = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.75, %@)", - [12: 2, - 22: 180]) - layer.circleOpacity = NSExpression(forConstantValue: 0.7) - layer.predicate = NSPredicate(format: "%K == %@", "marital-status", "married") - mapView.style?.addLayer(layer) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.layer(withIdentifier: "circles")) - } - - func testMGLLineStyleLayer() { - let trails = MGLVectorTileSource(identifier: "trails", configurationURL: URL(string: "https://example.com/style.json")!) - mapView.style?.addSource(trails) - - //#-example-code - let layer = MGLLineStyleLayer(identifier: "trails-path", source: trails) - layer.sourceLayerIdentifier = "trails" - layer.lineWidth = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.5, %@)", - [14: 2, - 18: 20]) - #if os(macOS) - layer.lineColor = NSExpression(forConstantValue: NSColor.brown) - #else - layer.lineColor = NSExpression(forConstantValue: UIColor.brown) - #endif - layer.lineCap = NSExpression(forConstantValue: "round") - layer.predicate = NSPredicate(format: "%K == %@", "trail-type", "mountain-biking") - mapView.style?.addLayer(layer) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.layer(withIdentifier: "trails-path")) - } - - func testMGLFillStyleLayer() { - let parks = MGLVectorTileSource(identifier: "parks", configurationURL: URL(string: "https://example.com/style.json")!) - mapView.style?.addSource(parks) - - //#-example-code - let layer = MGLFillStyleLayer(identifier: "parks", source: parks) - layer.sourceLayerIdentifier = "parks" - #if os(macOS) - layer.fillColor = NSExpression(forConstantValue: NSColor.green) - #else - layer.fillColor = NSExpression(forConstantValue: UIColor.green) - #endif - layer.predicate = NSPredicate(format: "type == %@", "national-park") - mapView.style?.addLayer(layer) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.layer(withIdentifier: "parks")) - } - - func testMGLFillExtrusionStyleLayer() { - let buildings = MGLVectorTileSource(identifier: "buildings", configurationURL: URL(string: "https://example.com/style.json")!) - mapView.style?.addSource(buildings) - - //#-example-code - let layer = MGLFillExtrusionStyleLayer(identifier: "buildings", source: buildings) - layer.sourceLayerIdentifier = "building" - layer.fillExtrusionHeight = NSExpression(forKeyPath: "height") - layer.fillExtrusionBase = NSExpression(forKeyPath: "min_height") - layer.predicate = NSPredicate(format: "extrude == 'true'") - mapView.style?.addLayer(layer) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.layer(withIdentifier: "buildings")) - } - - func testMGLHeatmapStyleLayer() { - let earthquakes = MGLShapeSource(identifier: "earthquakes", url: URL(string: "https://example.com/earthquakes.json")!, options: [:]) - mapView.style?.addSource(earthquakes) - - //#-example-code - let layer = MGLHeatmapStyleLayer(identifier: "earthquake-heat", source: earthquakes) - layer.heatmapWeight = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(magnitude, 'linear', nil, %@)", - [0: 0, - 6: 1]) - layer.heatmapIntensity = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", - [0: 1, - 9: 3]) - mapView.style?.addLayer(layer) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.layer(withIdentifier: "earthquake-heat")) - } - - func testMGLSymbolStyleLayer() { - let pois = MGLVectorTileSource(identifier: "pois", configurationURL: URL(string: "https://example.com/style.json")!) - mapView.style?.addSource(pois) - - //#-example-code - let layer = MGLSymbolStyleLayer(identifier: "coffeeshops", source: pois) - layer.sourceLayerIdentifier = "pois" - layer.iconImageName = NSExpression(forConstantValue: "coffee") - layer.iconScale = NSExpression(forConstantValue: 0.5) - layer.text = NSExpression(forKeyPath: "name") - #if os(macOS) - var vector = CGVector(dx: 10, dy: 0) - layer.textTranslation = NSExpression(forConstantValue: NSValue(bytes: &vector, objCType: "{CGVector=dd}")) - #else - layer.textTranslation = NSExpression(forConstantValue: NSValue(cgVector: CGVector(dx: 10, dy: 0))) - #endif - layer.textJustification = NSExpression(forConstantValue: "left") - layer.textAnchor = NSExpression(forConstantValue: "left") - layer.predicate = NSPredicate(format: "%K == %@", "venue-type", "coffee") - mapView.style?.addLayer(layer) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.layer(withIdentifier: "coffeeshops")) - } - - func testMGLRasterStyleLayer() { - let source = MGLRasterTileSource(identifier: "clouds", tileURLTemplates: ["https://example.com/raster-tiles/{z}/{x}/{y}.png"], options: [ - .minimumZoomLevel: 9, - .maximumZoomLevel: 16, - .tileSize: 512, - .attributionInfos: [ - MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com")) - ] - ]) - mapView.style?.addSource(source) - - //#-example-code - let layer = MGLRasterStyleLayer(identifier: "clouds", source: source) - layer.rasterOpacity = NSExpression(forConstantValue: 0.5) - mapView.style?.addLayer(layer) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.layer(withIdentifier: "clouds")) - } - - func testMGLHillshadeStyleLayer() { - let source = MGLRasterDEMSource(identifier: "dem", tileURLTemplates: ["https://example.com/raster-rgb/{z}/{x}/{y}.png"], options: [ - .minimumZoomLevel: 9, - .maximumZoomLevel: 16, - .tileSize: 256, - .attributionInfos: [ - MGLAttributionInfo(title: NSAttributedString(string: "© Mapbox"), url: URL(string: "https://mapbox.com")) - ] - ]) - mapView.style?.addSource(source) - - let canals = MGLVectorTileSource(identifier: "canals", configurationURL: URL(string: "https://example.com/style.json")!) - mapView.style?.addSource(canals) - let canalShadowLayer = MGLLineStyleLayer(identifier: "waterway-river-canal-shadow", source: canals) - mapView.style?.addLayer(canalShadowLayer) - - //#-example-code - let layer = MGLHillshadeStyleLayer(identifier: "hills", source: source) - layer.hillshadeExaggeration = NSExpression(forConstantValue: 0.6) - if let canalShadowLayer = mapView.style?.layer(withIdentifier: "waterway-river-canal-shadow") { - mapView.style?.insertLayer(layer, below: canalShadowLayer) - } - //#-end-example-code - - XCTAssertNotNil(mapView.style?.layer(withIdentifier: "hills")) - } - - func testMGLVectorStyleLayer$predicate() { - let terrain = MGLVectorTileSource(identifier: "terrain", configurationURL: URL(string: "https://example.com/style.json")!) - mapView.style?.addSource(terrain) - - //#-example-code - let layer = MGLLineStyleLayer(identifier: "contour", source: terrain) - layer.sourceLayerIdentifier = "contours" - layer.predicate = NSPredicate(format: "(index == 5 || index == 10) && CAST(ele, 'NSNumber') >= 1500.0") - mapView.style?.addLayer(layer) - //#-end-example-code - - XCTAssertNotNil(mapView.style?.layer(withIdentifier: "contour")) - } - - func testMGLMapView() { - //#-example-code - #if os(macOS) - class MapClickGestureRecognizer: NSClickGestureRecognizer { - override func shouldRequireFailure(of otherGestureRecognizer: NSGestureRecognizer) -> Bool { - return otherGestureRecognizer is NSClickGestureRecognizer - } - } - #else - let mapTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(myCustomFunction)) - for recognizer in mapView.gestureRecognizers! where recognizer is UITapGestureRecognizer { - mapTapGestureRecognizer.require(toFail: recognizer) - } - mapView.addGestureRecognizer(mapTapGestureRecognizer) - #endif - //#-end-example-code - } - - func testMGLMapSnapshotter() { - let expectation = self.expectation(description: "MGLMapSnapshotter should produce a snapshot") - #if os(macOS) - var image: NSImage? { - didSet { - expectation.fulfill() - } - } - #else - var image: UIImage? { - didSet { - expectation.fulfill() - } - } - #endif - - class MGLStyle { - static var satelliteStreetsStyleURL: URL { - return MGLDocumentationExampleTests.styleURL - } - } - - //#-example-code - let camera = MGLMapCamera(lookingAtCenter: CLLocationCoordinate2D(latitude: 37.7184, longitude: -122.4365), altitude: 100, pitch: 20, heading: 0) - - let options = MGLMapSnapshotOptions(styleURL: MGLStyle.satelliteStreetsStyleURL, camera: camera, size: CGSize(width: 320, height: 480)) - options.zoomLevel = 10 - - let snapshotter = MGLMapSnapshotter(options: options) - snapshotter.start { (snapshot, error) in - if let error = error { - fatalError(error.localizedDescription) - } - - image = snapshot?.image - } - //#-end-example-code - - wait(for: [expectation], timeout: 5) - } - - func testMGLCluster() { - - enum ExampleError: Error { - case unexpectedFeatureType - case featureIsNotACluster - } - - let geoJSON: [String: Any] = [ - "type" : "Feature", - "geometry" : [ - "coordinates" : [ - -77.00896639534831, - 38.87031006108791, - 0.0 - ], - "type" : "Point" - ], - "properties" : [ - "cluster" : true, - "cluster_id" : 123, - "point_count" : 4567, - ] - ] - - let clusterShapeData = try! JSONSerialization.data(withJSONObject: geoJSON, options: []) - - do { - //#-example-code - let shape = try! MGLShape(data: clusterShapeData, encoding: String.Encoding.utf8.rawValue) - - guard let pointFeature = shape as? MGLPointFeature else { - throw ExampleError.unexpectedFeatureType - } - - // Check for cluster conformance - guard let cluster = pointFeature as? MGLCluster else { - throw ExampleError.featureIsNotACluster - } - - // Currently the only supported class that conforms to `MGLCluster` is - // `MGLPointFeatureCluster` - guard cluster is MGLPointFeatureCluster else { - throw ExampleError.unexpectedFeatureType - } - - //#-end-example-code - - XCTAssert(cluster.clusterIdentifier == 123) - XCTAssert(cluster.clusterPointCount == 4567) - } - catch let error { - XCTFail("Example failed with thrown error: \(error)") - } - } - - func testMGLAttributedExpression() { - //#-example-code - #if os(macOS) - let redColor = NSColor.red - #else - let redColor = UIColor.red - #endif - let expression = NSExpression(forConstantValue: "Foo") - let attributes: [MGLAttributedExpressionKey: NSExpression] = [.fontNamesAttribute : NSExpression(forConstantValue: ["DIN Offc Pro Italic", - "Arial Unicode MS Regular"]), - .fontScaleAttribute: NSExpression(forConstantValue: 1.2), - .fontColorAttribute: NSExpression(forConstantValue: redColor)] - let attributedExpression = MGLAttributedExpression(expression, attributes:attributes) - //#-end-example-code - - XCTAssertNotNil(attributedExpression) - } - - func testMGLShapeSourceOptionClusterProperties() { - //#-example-code - let firstExpression = NSExpression(format: "sum:({$featureAccumulated, sumValue})") - let secondExpression = NSExpression(forKeyPath: "magnitude") - let clusterPropertiesDictionary = ["sumValue" : [firstExpression, secondExpression]] - - let options : [MGLShapeSourceOption : Any] = [.clustered : true, - .clusterProperties: clusterPropertiesDictionary] - //#-end-example-code - let geoJSON: [String: Any] = [ - "type" : "Feature", - "geometry" : [ - "coordinates" : [ - -77.00896639534831, - 38.87031006108791, - 0.0 - ], - "type" : "Point" - ], - "properties" : [ - "cluster" : true, - "cluster_id" : 123, - "point_count" : 4567, - ] - ] - - let clusterShapeData = try! JSONSerialization.data(withJSONObject: geoJSON, options: []) - let shape = try! MGLShape(data: clusterShapeData, encoding: String.Encoding.utf8.rawValue) - let source = MGLShapeSource(identifier: "source", shape: shape, options: options) - mapView.style?.addSource(source) - - } - // For testMGLMapView(). - func myCustomFunction() {} -} diff --git a/platform/darwin/test/MGLDocumentationGuideTests.swift b/platform/darwin/test/MGLDocumentationGuideTests.swift deleted file mode 100644 index 30814c41565..00000000000 --- a/platform/darwin/test/MGLDocumentationGuideTests.swift +++ /dev/null @@ -1,270 +0,0 @@ -import XCTest -import Mapbox - -/** - Test cases that ensure the inline examples in the jazzy guides compile. - - To add an example: - 1. Add a test case named in the form `testGuideName$ExampleName`. - 2. Wrap the code you’d like to appear in the documentation within the - following comment blocks: - ``` - //#-example-code - ... - //#-end-example-code - ``` - 3. Insert a call to `guideExample()` where you’d like the example code to be - inserted in the guide’s Markdown. - ``` - <%- guideExample('GuideName', 'ExampleName', 'iOS') %> - ``` - 4. Run `make darwin-style-code` to extract example code from the test method - below and insert it into the guide. - */ -class MGLDocumentationGuideTests: XCTestCase, MGLMapViewDelegate { - var mapView: MGLMapView! - var styleLoadingExpectation: XCTestExpectation! - - override func setUp() { - super.setUp() - let styleURL = Bundle(for: MGLDocumentationGuideTests.self).url(forResource: "one-liner", withExtension: "json") - mapView = MGLMapView(frame: CGRect(x: 0, y: 0, width: 256, height: 256), styleURL: styleURL) - mapView.delegate = self - styleLoadingExpectation = expectation(description: "Map view should finish loading style") - waitForExpectations(timeout: 10, handler: nil) - } - - override func tearDown() { - mapView = nil - styleLoadingExpectation = nil - super.tearDown() - } - - func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) { - styleLoadingExpectation.fulfill() - } - - func testMigratingToExpressions$Stops() { - //#-example-code - #if os(macOS) - let stops: [NSNumber: NSColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, - ] - #else - let stops: [NSNumber: UIColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, - ] - #endif - //#-end-example-code - - let _ = NSExpression(format: "mgl_step:from:stops:(mag, %@, %@)", - stops[0]!, stops) - } - - func testMigratingToExpressions$Linear() { - //#-example-code - let url = URL(string: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson")! - let symbolSource = MGLSource(identifier: "source") - let symbolLayer = MGLSymbolStyleLayer(identifier: "place-city-sm", source: symbolSource) - - let source = MGLShapeSource(identifier: "earthquakes", url: url, options: nil) - mapView.style?.addSource(source) - - #if os(macOS) - let stops: [NSNumber: NSColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, - ] - #else - let stops: [NSNumber: UIColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, - ] - #endif - - let layer = MGLCircleStyleLayer(identifier: "circles", source: source) - #if os(macOS) - layer.circleColor = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(mag, 'linear', nil, %@)", - stops) - #else - layer.circleColor = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(mag, 'linear', nil, %@)", - stops) - #endif - layer.circleRadius = NSExpression(forConstantValue: 10) - mapView.style?.insertLayer(layer, below: symbolLayer) - //#-end-example-code - } - - func testMigratingToExpressions$LinearConvenience() { - let source = MGLShapeSource(identifier: "circles", shape: nil, options: nil) - let layer = MGLCircleStyleLayer(identifier: "circles", source: source) - - #if os(macOS) - let stops: [NSNumber: NSColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, - ] - #else - let stops: [NSNumber: UIColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, - ] - #endif - - //#-example-code - layer.circleColor = NSExpression(forMGLInterpolating: NSExpression(forKeyPath: "mag"), curveType: .linear, parameters: nil, stops: NSExpression(forConstantValue: stops)) - //#-end-example-code - - layer.circleRadius = NSExpression(forConstantValue: 10) - mapView.style?.addLayer(layer) - - } - func testMigratingToExpressions$Exponential() { - let source = MGLShapeSource(identifier: "circles", shape: nil, options: nil) - let layer = MGLCircleStyleLayer(identifier: "circles", source: source) - - //#-example-code - let stops = [ - 12: 0.5, - 14: 2, - 18: 18, - ] - - layer.circleRadius = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.5, %@)", - stops) - //#-end-example-code - } - - func testMigratingToExpressions$ExponentialConvenience() { - let source = MGLShapeSource(identifier: "circles", shape: nil, options: nil) - let layer = MGLCircleStyleLayer(identifier: "circles", source: source) - - //#-example-code - let stops = [ - 12: 0.5, - 14: 2, - 18: 18, - ] - - layer.circleRadius = NSExpression(forMGLInterpolating: NSExpression.zoomLevelVariable, curveType: MGLExpressionInterpolationMode.exponential, parameters: NSExpression(forConstantValue: 1.5), stops: NSExpression(forConstantValue: stops)) - //#-end-example-code - } - func testMigratingToExpressions$Interval() { - let source = MGLShapeSource(identifier: "circles", shape: nil, options: nil) - let layer = MGLCircleStyleLayer(identifier: "circles", source: source) - - //#-example-code - #if os(macOS) - let stops: [NSNumber: NSColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, - ] - - layer.circleColor = NSExpression(format: "mgl_step:from:stops:(mag, %@, %@)", - NSColor.green, stops) - #else - let stops: [NSNumber: UIColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, - ] - - layer.circleColor = NSExpression(format: "mgl_step:from:stops:(mag, %@, %@)", - UIColor.green, stops) - #endif - //#-end-example-code - } - - func testMigratingToExpressions$Categorical() { - let source = MGLShapeSource(identifier: "circles", shape: nil, options: nil) - let layer = MGLCircleStyleLayer(identifier: "circles", source: source) - - //#-example-code - #if os(macOS) - let defaultColor = NSColor.blue - layer.circleColor = NSExpression( - format: "MGL_MATCH(type, 'earthquake', %@, 'explosion', %@, 'quarry blast', %@, %@)", - NSColor.orange, NSColor.red, NSColor.yellow, defaultColor) - #else - let defaultColor = UIColor.blue - layer.circleColor = NSExpression(format: "MGL_MATCH(type, 'earthquake', %@, 'explosion', %@, 'quarry blast', %@, %@)", - UIColor.orange, UIColor.red, UIColor.yellow, defaultColor) - #endif - //#-end-example-code - } - - func testMigratingToExpressions$CategoricalValue() { - let source = MGLShapeSource(identifier: "circles", shape: nil, options: nil) - let layer = MGLCircleStyleLayer(identifier: "circles", source: source) - - //#-example-code - #if os(macOS) - let stops : [String : NSColor] = ["earthquake" : NSColor.orange, - "explosion" : NSColor.red, - "quarry blast" : NSColor.yellow] - layer.circleColor = NSExpression( - format: "FUNCTION(%@, 'valueForKeyPath:', type)", - stops) - #else - let stops : [String : UIColor] = ["earthquake" : UIColor.orange, - "explosion" : UIColor.red, - "quarry blast" : UIColor.yellow] - layer.circleColor = NSExpression( - format: "FUNCTION(%@, 'valueForKeyPath:', type)", - stops) - #endif - //#-end-example-code - } - func testMigratingToExpressions$Identity() { - let source = MGLShapeSource(identifier: "circles", shape: nil, options: nil) - let layer = MGLCircleStyleLayer(identifier: "circles", source: source) - - //#-example-code - layer.circleRadius = NSExpression(forKeyPath: "mag") - //#-end-example-code - } - - func testMigratingToExpressions$Multiply() { - let source = MGLShapeSource(identifier: "circles", shape: nil, options: nil) - let layer = MGLCircleStyleLayer(identifier: "circles", source: source) - - //#-example-code - layer.circleRadius = NSExpression(forFunction: "multiply:by:", arguments: [NSExpression(forKeyPath: "mag"), 3]) - //#-end-example-code - } - - func testMigratingToExpressions$Cast() { - let source = MGLShapeSource(identifier: "circles", shape: nil, options: nil) - - //#-example-code - let magnitudeLayer = MGLSymbolStyleLayer(identifier: "mag-layer", source: source) - magnitudeLayer.text = NSExpression(format: "CAST(mag, 'NSString')") - mapView.style?.addLayer(magnitudeLayer) - //#-end-example-code - } -} diff --git a/platform/darwin/test/MGLExpressionTests.mm b/platform/darwin/test/MGLExpressionTests.mm deleted file mode 100644 index 4ccd7adb6ed..00000000000 --- a/platform/darwin/test/MGLExpressionTests.mm +++ /dev/null @@ -1,1408 +0,0 @@ -#import - -#import "MGLStyleLayerTests.h" - -#import - -#import "MGLTypes.h" -#import "NSExpression+MGLPrivateAdditions.h" -#import "NSValue+MGLAdditions.h" -#if TARGET_OS_IPHONE -#import "UIColor+MGLAdditions.h" -#else -#import "NSColor+MGLAdditions.h" -#endif -#import "MGLAttributedExpression.h" - -#define MGLAssertEqualValues(actual, expected, ...) \ - XCTAssertTrue(actual.is<__typeof__(expected)>()); \ - if (actual.is<__typeof__(expected)>()) { \ - XCTAssertEqual(actual.get<__typeof__(expected)>(), expected, __VA_ARGS__); \ - } - -#define MGLAssertEqualValuesWithAccuracy(actual, expected, accuracy, ...) \ - XCTAssertTrue(actual.is<__typeof__(expected)>()); \ - if (actual.is<__typeof__(expected)>()) { \ - XCTAssertEqualWithAccuracy(actual.get<__typeof__(expected)>(), expected, accuracy, __VA_ARGS__); \ - } - -#define MGLConstantExpression(constant) \ - [NSExpression expressionForConstantValue:constant] - -#define MGLAssertConstantEqualsValue(constant, value, ...) \ - MGLAssertEqualValues(MGLConstantExpression(constant).mgl_constantMBGLValue, value, __VA_ARGS__); - -#define MGLAssertConstantEqualsValueWithAccuracy(constant, value, accuracy, ...) \ - MGLAssertEqualValuesWithAccuracy(MGLConstantExpression(constant).mgl_constantMBGLValue, value, accuracy, __VA_ARGS__); - -using namespace std::string_literals; - -@interface MGLExpressionTests : XCTestCase - -@end - -@implementation MGLExpressionTests - -#pragma mark - Utility - -- (NSComparisonPredicate *)equalityComparisonPredicateWithRightConstantValue:(id)rightConstantValue -{ - NSComparisonPredicate *predicate = [NSComparisonPredicate - predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"foo"] - rightExpression:[NSExpression expressionForConstantValue:rightConstantValue] - modifier:NSDirectPredicateModifier - type:NSEqualToPredicateOperatorType - options:0]; - return predicate; -} - -#pragma mark - Valuation tests - -- (void)testStringValuation { - MGLAssertConstantEqualsValue(@"bar", "bar"s, @"NSString should convert to std::string."); - MGLAssertConstantEqualsValue(@"🆔🆗🇦🇶", "🆔🆗🇦🇶"s, @"NSString with non-ASCII characters should convert losslessly to std::string."); -} - -- (void)testColorValuation { - MGLAssertConstantEqualsValue([MGLColor redColor], "rgba(255,0,0,1)"s, @"MGLColor should convert to std::string containing CSS color string."); -} - -- (void)testBooleanValuation { - MGLAssertConstantEqualsValue(@NO, false, @"Boolean NSNumber should convert to bool."); - MGLAssertConstantEqualsValue(@YES, true, @"Boolean NSNumber should convert to bool."); -} - -- (void)testDoubleValuation -{ - MGLAssertConstantEqualsValue(@DBL_MIN, DBL_MIN, @"Double NSNumber should convert to double."); - MGLAssertConstantEqualsValue(@DBL_MAX, DBL_MAX, @"Double NSNumber should convert to double."); -} - -- (void)testFloatValuation { - // Because we can't guarantee precision when using float, and because - // we warn the user to this effect in -[NSExpression mgl_constantMBGLValue], - // we just check that things are in the ballpark here with integer values - // and some lower-precision checks. - - MGLAssertConstantEqualsValue(@-1.0f, -1.0, @"Float NSNumber should convert to double."); - MGLAssertConstantEqualsValue(@1.0f, 1.0, @"Float NSNumber should convert to double."); - MGLAssertConstantEqualsValueWithAccuracy(@-23.232342f, -23.232342, 0.000001, @"Float NSNumber should convert to double."); - MGLAssertConstantEqualsValueWithAccuracy(@23.232342f, 23.232342, 0.000001, @"Float NSNumber should convert to double."); - MGLAssertConstantEqualsValueWithAccuracy(@-FLT_MAX, static_cast(-FLT_MAX), 0.000001, @"Float NSNumber should convert to double."); - MGLAssertConstantEqualsValueWithAccuracy(@FLT_MAX, static_cast(FLT_MAX), 0.000001, @"Float NSNumber should convert to double."); -} - -- (void)testIntegerValuation { - // Negative integers should always come back as int64_t per mbgl::Value definition. - MGLAssertConstantEqualsValue(@SHRT_MIN, static_cast(SHRT_MIN), @"Negative short NSNumber should convert to int64_t."); - MGLAssertConstantEqualsValue(@INT_MIN, static_cast(INT_MIN), @"Negative int NSNumber should convert to int64_t."); - MGLAssertConstantEqualsValue(@LONG_MIN, static_cast(LONG_MIN), @"Negative long NSNumber should convert to int64_t."); - MGLAssertConstantEqualsValue(@LLONG_MIN, static_cast(LLONG_MIN), @"Negative long long NSNumber should convert to int64_t."); - MGLAssertConstantEqualsValue(@NSIntegerMin, static_cast(NSIntegerMin), @"Negative NSInteger NSNumber should convert to int64_t."); - - // Positive integers should always come back as uint64_t per mbgl::Value definition. - MGLAssertConstantEqualsValue(@SHRT_MAX, static_cast(SHRT_MAX), @"Positive short NSNumber should convert to uint64_t."); - MGLAssertConstantEqualsValue(@INT_MAX, static_cast(INT_MAX), @"Positive int NSNumber should convert to uint64_t."); - MGLAssertConstantEqualsValue(@LONG_MAX, static_cast(LONG_MAX), @"Positive long NSNumber should convert to uint64_t."); - MGLAssertConstantEqualsValue(@LLONG_MAX, static_cast(LLONG_MAX), @"Positive long long NSNumber should convert to uint64_t."); - MGLAssertConstantEqualsValue(@NSIntegerMax, static_cast(NSIntegerMax), @"Positive NSInteger NSNumber should convert to uint64_t."); -} - -- (void)testUnsignedIntegerValuation { - // Zero-value integers should always come back as uint64_t per mbgl::Value definition - // (using the interpretation that zero is not negative). We use the unsigned long long - // value just for parity with the positive integer test. - MGLAssertConstantEqualsValue(@(static_cast(0)), static_cast(0), @"Unsigned short NSNumber should convert to uint64_t."); - MGLAssertConstantEqualsValue(@0u, static_cast(0), @"Unsigned int NSNumber should convert to uint64_t."); - MGLAssertConstantEqualsValue(@0UL, static_cast(0), @"Unsigned long NSNumber should convert to uint64_t."); - MGLAssertConstantEqualsValue(@0ULL, static_cast(0), @"Unsigned long long NSNumber should convert to uint64_t."); - MGLAssertConstantEqualsValue(@(static_cast(0)), static_cast(0), @"Unsigned NSUInteger NSNumber should convert to uint64_t."); - - // Positive integers should always come back as uint64_t per mbgl::Value definition. - // We use the unsigned long long value because it can store the highest number on - // both 32- and 64-bit and won't overflow. - MGLAssertConstantEqualsValue(@USHRT_MAX, static_cast(USHRT_MAX), @"Unsigned short NSNumber should convert to uint64_t."); - MGLAssertConstantEqualsValue(@UINT_MAX, static_cast(UINT_MAX), @"Unsigned int NSNumber should convert to uint64_t."); - MGLAssertConstantEqualsValue(@ULONG_MAX, static_cast(ULONG_MAX), @"Unsigned long NSNumber should convert to uint64_t."); - MGLAssertConstantEqualsValue(@ULLONG_MAX, static_cast(ULLONG_MAX), @"Unsigned long long NSNumber should convert to uint64_t."); - MGLAssertConstantEqualsValue(@NSUIntegerMax, static_cast(NSUIntegerMax), @"Unsigned NSUInteger NSNumber should convert to uint64_t."); -} - -- (void)testNullValuation { - mbgl::NullValue nullValue; - MGLAssertConstantEqualsValue([NSNull null], nullValue, @"NSNull should convert to mbgl::NullValue."); -} - -#pragma mark - Feature type tests - -- (void)testFeatureType { - XCTAssertEqual([NSExpression expressionForConstantValue:@"Point"].mgl_featureType, mbgl::FeatureType::Point); - XCTAssertEqual([NSExpression expressionForConstantValue:@"LineString"].mgl_featureType, mbgl::FeatureType::LineString); - XCTAssertEqual([NSExpression expressionForConstantValue:@"Polygon"].mgl_featureType, mbgl::FeatureType::Polygon); - XCTAssertEqual([NSExpression expressionForConstantValue:@"Unknown"].mgl_featureType, mbgl::FeatureType::Unknown); - XCTAssertEqual([NSExpression expressionForConstantValue:@""].mgl_featureType, mbgl::FeatureType::Unknown); - - XCTAssertEqual([NSExpression expressionForConstantValue:@1].mgl_featureType, mbgl::FeatureType::Point); - XCTAssertEqual([NSExpression expressionForConstantValue:@2].mgl_featureType, mbgl::FeatureType::LineString); - XCTAssertEqual([NSExpression expressionForConstantValue:@3].mgl_featureType, mbgl::FeatureType::Polygon); - XCTAssertEqual([NSExpression expressionForConstantValue:@0].mgl_featureType, mbgl::FeatureType::Unknown); - XCTAssertEqual([NSExpression expressionForConstantValue:@-1].mgl_featureType, mbgl::FeatureType::Unknown); - XCTAssertEqual([NSExpression expressionForConstantValue:@4].mgl_featureType, mbgl::FeatureType::Unknown); - - XCTAssertEqual([NSExpression expressionForConstantValue:nil].mgl_featureType, mbgl::FeatureType::Unknown); -} - -#pragma mark - JSON expression object tests - -- (void)testVariableExpressionObject { - { - NSExpression *expression = [NSExpression expressionForVariable:@"zoomLevel"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @[@"zoom"]); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"$zoomLevel"].mgl_jsonExpressionObject, @[@"zoom"]); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:@[@"zoom"]], expression); - NSMutableDictionary *context = [@{@"zoomLevel": @16} mutableCopy]; - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:context], @16); - } - { - NSExpression *expression = [NSExpression expressionForVariable:@"heatmapDensity"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @[@"heatmap-density"]); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"$heatmapDensity"].mgl_jsonExpressionObject, @[@"heatmap-density"]); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:@[@"heatmap-density"]], expression); - NSMutableDictionary *context = [@{@"heatmapDensity": @1} mutableCopy]; - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:context], @1); - } - { - NSExpression *expression = [NSExpression expressionForVariable:@"lineProgress"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @[@"line-progress"]); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"$lineProgress"].mgl_jsonExpressionObject, @[@"line-progress"]); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:@[@"line-progress"]], expression); - NSMutableDictionary *context = [@{@"lineProgress": @1} mutableCopy]; - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:context], @1); - } - { - NSExpression *expression = [NSExpression expressionForVariable:@"featureAccumulated"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @[@"accumulated"]); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"$featureAccumulated"].mgl_jsonExpressionObject, @[@"accumulated"]); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:@[@"accumulated"]], expression); - } - - { - NSExpression *expression = [NSExpression expressionForVariable:@"geometryType"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @[@"geometry-type"]); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"$geometryType"].mgl_jsonExpressionObject, @[@"geometry-type"]); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:@[@"geometry-type"]], expression); - } - { - NSExpression *expression = [NSExpression expressionForVariable:@"featureIdentifier"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @[@"id"]); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"$featureIdentifier"].mgl_jsonExpressionObject, @[@"id"]); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:@[@"id"]], expression); - } - { - NSExpression *expression = [NSExpression expressionForVariable:@"featureAttributes"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @[@"properties"]); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"$featureAttributes"].mgl_jsonExpressionObject, @[@"properties"]); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:@[@"properties"]], expression); - } - { - NSExpression *expression = [NSExpression expressionForVariable:@"loremIpsum"]; - NSArray *jsonExpression = @[@"var", @"loremIpsum"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"$loremIpsum"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - NSMutableDictionary *context = [@{@"loremIpsum": @"Lorem ipsum dolor sit amet"} mutableCopy]; - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:context], @"Lorem ipsum dolor sit amet"); - } - { - NSDictionary *context = @{@"loremIpsum": MGLConstantExpression(@"Lorem ipsum dolor sit amet")}; - NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_LET('loremIpsum', 'Lorem ipsum dolor sit amet', uppercase($loremIpsum))", context]; - NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(uppercase($loremIpsum), 'mgl_expressionWithContext:', %@)", context]; - NSArray *jsonExpression = @[@"let", @"loremIpsum", @"Lorem ipsum dolor sit amet", @[@"upcase", @[@"var", @"loremIpsum"]]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } -} - -- (void)testConstantValueExpressionObject { - { - NSExpression *expression = [NSExpression expressionForConstantValue:nil]; - XCTAssert(expression.mgl_jsonExpressionObject == [NSNull null]); - XCTAssert([NSExpression expressionWithFormat:@"nil"].mgl_jsonExpressionObject == [NSNull null]); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:[NSNull null]], expression); - XCTAssertNil([expression expressionValueWithObject:nil context:nil]); - } - { - NSExpression *expression = [NSExpression expressionForConstantValue:@1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @1); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"1"].mgl_jsonExpressionObject, @1); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:@1], expression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @1); - } - { - NSExpression *expression = [NSExpression expressionForConstantValue:@YES]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @YES); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"TRUE"].mgl_jsonExpressionObject, @YES); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:@YES], expression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @YES); - } - { - NSExpression *expression = [NSExpression expressionForConstantValue:nil]; - XCTAssert(expression.mgl_jsonExpressionObject == [NSNull null]); - XCTAssert([NSExpression expressionWithFormat:@"nil"].mgl_jsonExpressionObject == [NSNull null]); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:[NSNull null]], expression); - XCTAssertNil([expression expressionValueWithObject:nil context:nil]); - } - { - CGVector vector = CGVectorMake(1, 2); - NSExpression *expression = [NSExpression expressionForConstantValue:@(vector)]; -#if !TARGET_OS_IPHONE - NSArray *jsonExpression = @[@"literal", @[@1, @-2]]; -#else - NSArray *jsonExpression = @[@"literal", @[@1, @2]]; -#endif - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - // No way to distinguish offsets from ordinary arrays in expressions. - XCTAssertEqualObjects([[NSExpression expressionWithMGLJSONObject:jsonExpression].collection valueForKeyPath:@"constantValue"], jsonExpression.lastObject); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @(vector)); - } - { -#if !TARGET_OS_IPHONE - NSEdgeInsets padding = {1, 2, 3, 4}; - NSValue *value = [NSValue valueWithEdgeInsets:padding]; -#else - UIEdgeInsets padding = {1, 2, 3, 4}; - NSValue *value = [NSValue valueWithUIEdgeInsets:padding]; -#endif - NSExpression *expression = [NSExpression expressionForConstantValue:value]; - NSArray *jsonExpression = @[@"literal", @[@1, @4, @3, @2]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - // No way to distinguish offsets from ordinary arrays in expressions. - XCTAssertEqualObjects([[NSExpression expressionWithMGLJSONObject:jsonExpression].collection valueForKeyPath:@"constantValue"], jsonExpression.lastObject); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], value); - } - { - MGLColor *color = [MGLColor mgl_colorWithColor:{ 255.0/255, 239.0/255, 213.0/255, 1 }]; // papayawhip - NSExpression *expression = [NSExpression expressionForConstantValue:color]; - NSArray *jsonExpression = @[@"rgb", @255, @239, @213]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], color); - } - { - // Transform color components to non-premultiplied values - float alpha = 0.5; - float red = (255.0 * alpha) / 255; - float green = (239.0 * alpha) / 255; - float blue = (213.0 * alpha) / 255; - MGLColor *color = [MGLColor mgl_colorWithColor:{ red, green, blue, alpha }]; // papayawhip - NSExpression *expression = [NSExpression expressionForConstantValue:color]; - NSArray *jsonExpression = @[@"rgba", @127.5, @119.5, @106.5, @0.5]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], color); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"noindex(513)"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, @513); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @513); - } -} - -- (void)testKeyPathExpressionObject { - { - NSExpression *expression = [NSExpression expressionForKeyPath:@"highway"]; - NSArray *jsonExpression = @[@"get", @"highway"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"highway"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"%@.population", @{@"population": MGLConstantExpression(@12000)}]; - NSArray *jsonExpression = @[@"get", @"population", @[@"literal", @{@"population": @12000}]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"%@.uppercase('population')", @{@"POPULATION": MGLConstantExpression(@12000)}]; - NSArray *jsonExpression = @[@"get", @[@"upcase", @"population"], @[@"literal", @{@"POPULATION": @12000}]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForKeyPath:@"lineStyle.color"]; - NSArray *jsonExpression = @[@"get", @"color", @[@"get", @"lineStyle"]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForKeyPath:@"map.box.gl"]; - NSArray *jsonExpression = @[@"get", @"gl", @[@"get", @"box", @[@"get", @"map"]]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } -} - -- (void)testStatisticalExpressionObject { - { - NSExpression *expression = [NSExpression expressionWithFormat:@"average({1, 2, 2, 3, 4, 7, 9})"]; - NSArray *jsonExpression = @[@"/", @[@"+", @1, @2, @2, @3, @4, @7, @9], @[@"length", @[@"literal", @[@1, @2, @2, @3, @4, @7, @9]]]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @4); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"sum({1, 2, 2, 3, 4, 7, 9})"]; - NSArray *jsonExpression = @[@"+", @1, @2, @2, @3, @4, @7, @9]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @28); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"count({1, 2, 2, 3, 4, 7, 9})"]; - NSArray *jsonExpression = @[@"length", @[@"literal", @[@1, @2, @2, @3, @4, @7, @9]]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @7); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"min({1, 2, 2, 3, 4, 7, 9})"]; - NSArray *jsonExpression = @[@"min", @1, @2, @2, @3, @4, @7, @9]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @1); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"max({1, 2, 2, 3, 4, 7, 9})"]; - NSArray *jsonExpression = @[@"max", @1, @2, @2, @3, @4, @7, @9]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @9); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } -} - -- (void)testArithmeticExpressionObject { - NSArray *arguments = @[MGLConstantExpression(@1), MGLConstantExpression(@1)]; - { - NSExpression *expression = [NSExpression expressionForFunction:@"add:to:" arguments:arguments]; - NSArray *jsonExpression = @[@"+", @1, @1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"1 + 1"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *testExpression = [NSExpression expressionWithFormat:@"sum:({1, 1, 2})"]; - NSExpression *expression = [NSExpression expressionForFunction:@"sum:" arguments:@[[NSExpression expressionForAggregate:@[MGLConstantExpression(@1), MGLConstantExpression(@1), MGLConstantExpression(@2)]]]]; - - NSArray *jsonExpression = @[@"+", @1, @1, @2]; - - XCTAssertEqualObjects(testExpression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(expression, testExpression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"sum:" arguments:@[MGLConstantExpression(@1), MGLConstantExpression(@1), MGLConstantExpression(@2)]]; - NSArray *jsonExpression = @[@"+", @1, @1, @2]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - - // - [NSExpression expressionWithMGLJSONObject:] creates an expression with an aggregate expression as an argument. This is not equal to an expression with an array of expressions as an argument. For testing purposes, we will compare their operands and arrays of expressions. - NSExpression *aggregateExpression = [NSExpression expressionWithMGLJSONObject:jsonExpression]; - XCTAssertEqualObjects(aggregateExpression.operand, expression.operand); - XCTAssertEqualObjects(aggregateExpression.arguments.firstObject.collection, expression.arguments); - } - { - NSArray *threeArguments = @[MGLConstantExpression(@1), MGLConstantExpression(@1), MGLConstantExpression(@1)]; - NSExpression *expression = [NSExpression expressionForFunction:@"add:to:" arguments:threeArguments]; - NSArray *jsonExpression = @[@"+", @1, @1, @1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - jsonExpression = @[@"+", @[@"+", @1, @1], @1]; - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"1 + 1 + 1"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], [NSExpression expressionWithFormat:@"1 + 1 + 1"]); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"from:subtract:" arguments:arguments]; - NSArray *jsonExpression = @[@"-", @1, @1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"1 - 1"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"multiply:by:" arguments:arguments]; - NSArray *jsonExpression = @[@"*", @1, @1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"1 * 1"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"divide:by:" arguments:arguments]; - NSArray *jsonExpression = @[@"/", @1, @1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"1 / 1"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"modulus:by:" arguments:arguments]; - NSArray *jsonExpression = @[@"%", @1, @1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - // NSExpression lacks a shorthand operator for modulus. - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"max:" arguments:arguments]; - NSArray *jsonExpression = @[@"max", @1, @1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - - NSExpression *aggregateExpression = [NSExpression expressionWithMGLJSONObject:jsonExpression]; - XCTAssertEqualObjects(aggregateExpression.operand, expression.operand); - XCTAssertEqualObjects(aggregateExpression.arguments.firstObject.collection, expression.arguments); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"min:" arguments:arguments]; - NSArray *jsonExpression = @[@"min", @1, @1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - - NSExpression *aggregateExpression = [NSExpression expressionWithMGLJSONObject:jsonExpression]; - XCTAssertEqualObjects(aggregateExpression.operand, expression.operand); - XCTAssertEqualObjects(aggregateExpression.arguments.firstObject.collection, expression.arguments); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"ceiling:" arguments:@[MGLConstantExpression(@1.5)]]; - NSArray *jsonExpression = @[@"ceil", @1.5]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @2); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"ceiling:" arguments:@[MGLConstantExpression(@-1.5)]]; - NSArray *jsonExpression = @[@"ceil", @-1.5]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @-1); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"ceiling:" arguments:@[MGLConstantExpression(@2)]]; - NSArray *jsonExpression = @[@"ceil", @2]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @2); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"ceiling:" arguments:@[MGLConstantExpression(@-2)]]; - NSArray *jsonExpression = @[@"ceil", @-2]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @-2); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"trunc:" arguments:@[MGLConstantExpression(@1.5)]]; - NSArray *jsonExpression = @[@"-", @1.5, @[@"%", @1.5, @1]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @1); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"trunc:" arguments:@[MGLConstantExpression(@-1.5)]]; - NSArray *jsonExpression = @[@"-", @-1.5, @[@"%", @-1.5, @1]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @-1); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"abs:" arguments:@[MGLConstantExpression(@2)]]; - NSArray *jsonExpression = @[@"abs", @2]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @2); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"abs:" arguments:@[MGLConstantExpression(@-2)]]; - NSArray *jsonExpression = @[@"abs", @-2]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @2); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"floor:" arguments:@[MGLConstantExpression(@1.5)]]; - NSArray *jsonExpression = @[@"floor", @1.5]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @1); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"floor:" arguments:@[MGLConstantExpression(@-1.5)]]; - NSArray *jsonExpression = @[@"floor", @-1.5]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @-2); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"floor:" arguments:@[MGLConstantExpression(@2)]]; - NSArray *jsonExpression = @[@"floor", @2]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @2); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"floor:" arguments:@[MGLConstantExpression(@-2)]]; - NSArray *jsonExpression = @[@"floor", @-2]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @-2); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_round:" arguments:@[MGLConstantExpression(@1.5)]]; - NSArray *jsonExpression = @[@"round", @1.5]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @2); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_round:" arguments:@[MGLConstantExpression(@-1.5)]]; - NSArray *jsonExpression = @[@"round", @-1.5]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @-2); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_round:" arguments:@[MGLConstantExpression(@2.5)]]; - NSArray *jsonExpression = @[@"round", @2.5]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @3); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_round:" arguments:@[MGLConstantExpression(@-2.5)]]; - NSArray *jsonExpression = @[@"round", @-2.5]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @-3); - } -} - -- (void)testTrigonometricExpressionObject { - NSArray *arguments = @[MGLConstantExpression(@1), MGLConstantExpression(@1)]; - { - NSExpression *expression = [NSExpression expressionForFunction:@"sqrt:" arguments:arguments]; - NSArray *jsonExpression = @[@"sqrt", @1, @1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"ln:" arguments:arguments]; - NSArray *jsonExpression = @[@"ln", @1, @1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_log2:" arguments:@[MGLConstantExpression(@1024)]]; - NSArray *jsonExpression = @[@"log2", @1024]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @10); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"raise:toPower:" arguments:arguments]; - NSArray *jsonExpression = @[@"^", @1, @1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"1 ** 1"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"exp:" arguments:@[MGLConstantExpression(@0)]]; - NSArray *jsonExpression = @[@"^", @[@"e"], @0]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @1); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForConstantValue:@(M_E)]; - NSArray *jsonExpression = @[@"e"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @(M_E)); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForConstantValue:@(M_PI)]; - NSArray *jsonExpression = @[@"pi"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @(M_PI)); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_acos:" arguments:@[MGLConstantExpression(@1)]]; - NSArray *jsonExpression = @[@"acos", @1]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @0); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_cos:" arguments:@[MGLConstantExpression(@0)]]; - NSArray *jsonExpression = @[@"cos", @0]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @1); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_asin:" arguments:@[MGLConstantExpression(@0)]]; - NSArray *jsonExpression = @[@"asin", @0]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @0); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_sin:" arguments:@[MGLConstantExpression(@0)]]; - NSArray *jsonExpression = @[@"sin", @0]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @0); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_atan:" arguments:@[MGLConstantExpression(@20)]]; - NSArray *jsonExpression = @[@"atan", @20]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - NSNumber *value = [expression expressionValueWithObject:nil context:nil]; - XCTAssertEqualWithAccuracy(value.doubleValue, 1.52, 0.001); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_tan:" arguments:@[MGLConstantExpression(@0)]]; - NSArray *jsonExpression = @[@"tan", @0]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @0); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } -} - -- (void)testStringFormattingExpressionObject { - NSArray *arguments = @[MGLConstantExpression(@"MacDonald")]; - { - NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION('Old', 'stringByAppendingString:', 'MacDonald')"]; - NSExpression *aftermarketExpression = [NSExpression expressionWithFormat:@"mgl_join({'Old', 'MacDonald'})"]; - NSArray *jsonExpression = @[@"concat", @"Old", @"MacDonald"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(aftermarketExpression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @"OldMacDonald"); - XCTAssertEqualObjects([aftermarketExpression expressionValueWithObject:nil context:nil], @"OldMacDonald"); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], aftermarketExpression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_join:" arguments:@[@"Old", @"MacDonald"]]; - NSExpression *aftermarketExpression = [NSExpression expressionWithFormat:@"mgl_join({'Old', 'MacDonald'})"]; - NSArray *jsonExpression = @[@"concat", @"Old", @"MacDonald"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - - XCTAssertEqualObjects(aftermarketExpression.mgl_jsonExpressionObject, expression.mgl_jsonExpressionObject); - NSExpression *aggregateExpression = [NSExpression expressionWithMGLJSONObject:jsonExpression]; - XCTAssertEqualObjects(aggregateExpression.operand, expression.operand); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"uppercase:" arguments:arguments]; - NSArray *jsonExpression = @[@"upcase", @"MacDonald"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"lowercase:" arguments:arguments]; - NSArray *jsonExpression = @[@"downcase", @"MacDonald"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"length:" arguments:arguments]; - NSArray *jsonExpression = @[@"length", @"MacDonald"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } -} - -- (void)testTypeConversionExpressionObject { - { - NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(number, 'boolValue')"]; - NSArray *jsonExpression = @[@"to-boolean", @[@"get", @"number"]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - // NSExpression is unable to evaluate -[NSNumber boolValue] by itself - // because it returns a primitive instead of an object. - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(postalCode, 'mgl_number')"]; - NSArray *jsonExpression = @[@"to-number", @[@"get", @"postalCode"]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"FUNCTION(postalCode, 'doubleValue')"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"FUNCTION(postalCode, 'floatValue')"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"FUNCTION(postalCode, 'decimalValue')"].mgl_jsonExpressionObject, jsonExpression); - // NSExpression is unable to evaluate NSNumber’s -floatValue, - // -doubleValue, or -decimalValue by themselves because they each return - // a primitive instead of an object. - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], - [NSExpression expressionWithFormat:@"CAST(postalCode, 'NSNumber')"]); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"FUNCTION(postalCode, 'mgl_numberWithFallbackValues:', zipCode)"]; - NSArray *jsonExpression = @[@"to-number", @[@"get", @"postalCode"], @[@"get", @"zipCode"]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"FUNCTION(postalCode, 'doubleValue', zipCode)"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"FUNCTION(postalCode, 'floatValue', zipCode)"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"FUNCTION(postalCode, 'decimalValue', zipCode)"].mgl_jsonExpressionObject, jsonExpression); - // NSExpression is unable to evaluate NSNumber’s -floatValue, - // -doubleValue, or -decimalValue by themselves because they each return - // a primitive instead of an object. - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"CAST(postalCode, 'NSNumber')"]; - NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(postalCode, 'mgl_numberWithFallbackValues:')"]; - NSArray *jsonExpression = @[@"to-number", @[@"get", @"postalCode"]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:@{@"postalCode": @"02134"} context:nil], @02134); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"CAST(number, 'NSString')"]; - NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(number, 'stringValue')"]; - NSArray *jsonExpression = @[@"to-string", @[@"get", @"number"]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:@{@"number": @1.5} context:nil], @"1.5"); - XCTAssertEqualObjects([compatibilityExpression expressionValueWithObject:@{@"number": @1.5} context:nil], @"1.5"); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { -#if TARGET_OS_IPHONE - NSExpression *expression = [NSExpression expressionWithFormat:@"CAST(x, 'UIColor')"]; -#else - NSExpression *expression = [NSExpression expressionWithFormat:@"CAST(x, 'NSColor')"]; -#endif - - NSArray *jsonExpression = @[@"to-color", @[@"get", @"x"]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_FUNCTION('to-color', x, y, z)"]; - NSArray *jsonExpression = @[@"to-color", @[@"get", @"x"], @[@"get", @"y"], @[@"get", @"z"]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"CAST(noindex(x), 'NSArray')"]; - NSArray *jsonExpression = @[@"to-rgba", @[@"get", @"x"]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"CAST(noindex(%@), 'NSArray')", MGLConstantExpression(MGLColor.blueColor)]; - NSArray *jsonExpression = @[@"to-rgba", @[@"rgb", @0, @0, @255]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"CAST(noindex('x'), 'NSArray')"]; - XCTAssertThrowsSpecificNamed(expression.mgl_jsonExpressionObject, NSException, NSInvalidArgumentException); - } -} - -- (void)testInterpolationExpressionObject { - { - NSDictionary *stops = @{@0: MGLConstantExpression(@100), @10: MGLConstantExpression(@200)}; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(x, 'linear', nil, %@)", stops]; - NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(x, 'mgl_interpolateWithCurveType:parameters:stops:', 'linear', nil, %@)", stops]; - NSArray *jsonExpression = @[@"interpolate", @[@"linear"], @[@"get", @"x"], @0, @100, @10, @200]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSDictionary *stops = @{@1: MGLConstantExpression(@2), @3: MGLConstantExpression(@6)}; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(x, 'exponential', 2, %@)", stops]; - NSArray *jsonExpression = @[@"interpolate", @[@"exponential", @2], @[@"get", @"x"], @1, @2, @3, @6]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSDictionary *stops = @{@0: MGLConstantExpression(@0), @100: MGLConstantExpression(@100)}; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(x, 'cubic-bezier', { 0.42, 0, 0.58, 1 }, %@)", stops]; - NSArray *jsonExpression = @[@"interpolate", @[@"cubic-bezier", @0.42, @0, @0.58, @1], @[@"get", @"x"], @0, @0, @100, @100]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSDictionary *stops = @{@0: MGLConstantExpression(@111), @1: MGLConstantExpression(@1111)}; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(x, 11, %@)", stops]; - NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(x, 'mgl_stepWithMinimum:stops:', 11, %@)", stops]; - NSArray *jsonExpression = @[@"step", @[@"get", @"x"], @11, @0, @111, @1, @1111]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSDictionary *stops = @{@0: MGLConstantExpression(@111), @1: MGLConstantExpression(@1111)}; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, 11, %@)", stops]; - NSArray *jsonExpression = @[@"step", @[@"zoom"], @11, @0, @111, @1, @1111]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSDictionary *stops = @{}; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(x, 'cubic-bezier', { 0.42, 0, 0.58, 1 }, %@)", stops]; - XCTAssertThrowsSpecificNamed(expression.mgl_jsonExpressionObject, NSException, NSInvalidArgumentException); - } - { - NSDictionary *stops = @{}; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, 11, %@)", stops]; - XCTAssertThrowsSpecificNamed(expression.mgl_jsonExpressionObject, NSException, NSInvalidArgumentException); - } -} - -- (void)testMatchExpressionObject { - { - NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_MATCH(2 - 1, %@, %@, %@, %@, 'default')", MGLConstantExpression(@1), - MGLConstantExpression(@"one"), - MGLConstantExpression(@0), - MGLConstantExpression(@"zero")]; - NSExpression *predicate = [NSExpression expressionWithFormat:@"2 - 1"]; - NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(%@, 'mgl_match:', %@)", predicate, @[MGLConstantExpression(@1), - MGLConstantExpression(@"one"), - MGLConstantExpression(@0), - MGLConstantExpression(@"zero"), - MGLConstantExpression(@"default")]]; - NSArray *jsonExpression = @[@"match", @[@"-", @2, @1], @1, @"one", @0, @"zero", @"default"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_MATCH(2 * 1, %@, %@, 'default')", MGLConstantExpression(@1), MGLConstantExpression(@"one")]; - NSArray *jsonExpression = @[@"match", @[@"*", @2, @1], @1, @"one", @"default"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_MATCH(x, {'a', 'A'}, 'Apple', {'b', 'B'}, 'Banana', 'Kumquat')"]; - NSArray *jsonExpression = @[@"match", @[@"get", @"x"], @[@"a", @"A"], @"Apple", @[@"b", @"B"], @"Banana", @"Kumquat"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_MATCH(x, %@, 'Apple', %@, 'Banana', 'Kumquat')", - @[@"a", @"A"], @"Bb"]; - NSArray *jsonExpression = @[@"match", @[@"get", @"x"], @[@"a", @"A"], @"Apple", @"Bb", @"Banana", @"Kumquat"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression].description, expression.description); - } -} - -- (void)testCoalesceExpressionObject { - { - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_coalesce(%@)", - @[[NSExpression expressionForKeyPath:@"x"], - [NSExpression expressionForKeyPath:@"y"], - [NSExpression expressionForKeyPath:@"z"], - [NSExpression expressionForConstantValue:@0]]]; - NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(%@, 'mgl_coalesce')", @[[NSExpression expressionForKeyPath:@"x"], - [NSExpression expressionForKeyPath:@"y"], - [NSExpression expressionForKeyPath:@"z"], - [NSExpression expressionForConstantValue:@0]]]; - NSArray *jsonExpression = @[@"coalesce", @[@"get", @"x"], @[@"get", @"y"], @[@"get", @"z"], @0]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - -} - -- (void)testConditionalExpressionObject { - { - NSPredicate *conditional = [NSPredicate predicateWithFormat:@"1 = 2"]; - NSExpression *trueExpression = [NSExpression expressionForConstantValue:@YES]; - NSExpression *falseExpression = [NSExpression expressionForConstantValue:@NO]; - NSExpression *expression = [NSExpression expressionForConditional:conditional trueExpression:trueExpression falseExpression:falseExpression]; - NSArray *jsonExpression = @[@"case", @[@"==", @1, @2], @YES, @NO]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithFormat:@"TERNARY(1 = 2, TRUE, FALSE)"].mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @NO); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"TERNARY(0 = 1, TRUE, TERNARY(1 = 2, TRUE, FALSE))"]; - NSArray *jsonExpression = @[@"case", @[@"==", @0, @1], @YES, @[@"case", @[@"==", @1, @2], @YES, @NO]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @NO); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_IF(%@, %@, %@)", - [NSExpression expressionWithFormat:@"%@", [NSPredicate predicateWithFormat:@"1 = 2"]], - MGLConstantExpression(@YES), - MGLConstantExpression(@NO)]; - NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(%@, 'mgl_if:', %@)", [NSPredicate predicateWithFormat:@"1 = 2"], @[MGLConstantExpression(@YES), MGLConstantExpression(@NO)]]; - NSArray *jsonExpression = @[@"case", @[@"==", @1, @2], @YES, @NO]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression); - expression = [NSExpression expressionWithFormat:@"TERNARY(1 = 2, YES, NO)"]; - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @NO); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_IF(%@, %@, %@, %@, %@)", - [NSExpression expressionWithFormat:@"%@", [NSPredicate predicateWithFormat:@"1 = 2"]], - MGLConstantExpression(@YES), - [NSExpression expressionWithFormat:@"%@", [NSPredicate predicateWithFormat:@"1 = 1"]], - MGLConstantExpression(@YES), - MGLConstantExpression(@NO)]; - NSArray *jsonExpression = @[@"case", @[@"==", @1, @2], @YES, @[@"==", @1, @1], @YES, @NO]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @YES); - } - { - NSArray *jsonExpression = @[ - @"case", - @[ - @"<", - @[@"get", @"area"], - @80000 - ], - @[@"get", @"abbr"], - @[@"get", @"name_en"] - ]; - NSExpression *expression = [NSExpression expressionWithFormat:@"TERNARY(area < 80000, abbr, name_en)"]; - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - } -} - -- (void)testLookupExpressionObject { - { - NSExpression *array = [NSExpression expressionForAggregate:@[MGLConstantExpression(@9), - MGLConstantExpression(@8), - MGLConstantExpression(@7)]]; - NSExpression *expression = [NSExpression expressionForFunction:@"objectFrom:withIndex:" - arguments:@[array, MGLConstantExpression(@"FIRST")]]; - NSArray *jsonExpression = @[@"at", @0, @[ @"literal", @[@9, @8, @7]]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - } - { - NSExpression *array = [NSExpression expressionForAggregate:@[MGLConstantExpression(@9), - MGLConstantExpression(@8), - MGLConstantExpression(@7)]]; - NSExpression *expression = [NSExpression expressionForFunction:@"objectFrom:withIndex:" - arguments:@[array, MGLConstantExpression(@"LAST")]]; - NSArray *jsonExpression = @[@"at", @[@"-", @[@"length", @[ @"literal", @[@9, @8, @7]]], @1], @[ @"literal", @[@9, @8, @7]]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - } - { - NSExpression *array = [NSExpression expressionForAggregate:@[MGLConstantExpression(@9), - MGLConstantExpression(@8), - MGLConstantExpression(@7)]]; - NSExpression *expression = [NSExpression expressionForFunction:@"objectFrom:withIndex:" - arguments:@[array, MGLConstantExpression(@"SIZE")]]; - NSArray *jsonExpression = @[@"length", @[ @"literal", @[@9, @8, @7]]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - } - { - NSExpression *array = [NSExpression expressionForAggregate:@[MGLConstantExpression(@9), - MGLConstantExpression(@8), - MGLConstantExpression(@7)]]; - NSExpression *expression = [NSExpression expressionForFunction:@"objectFrom:withIndex:" - arguments:@[array, MGLConstantExpression(@1)]]; - NSArray *jsonExpression = @[@"at", @1, @[ @"literal", @[@9, @8, @7]]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *array = [NSExpression expressionForAggregate:@[MGLConstantExpression(@9), - MGLConstantExpression(@8), - MGLConstantExpression(@7)]]; - NSExpression *expression = [NSExpression expressionForFunction:@"objectFrom:withIndex:" - arguments:@[array, [NSExpression expressionForKeyPath:@"x"]]]; - NSArray *jsonExpression = @[@"at", @[@"get", @"x"], @[ @"literal", @[@9, @8, @7]]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_does:have:" - arguments:@[[NSExpression expressionForEvaluatedObject], - [NSExpression expressionForConstantValue:@"x"]]]; - NSExpression *compatibilityExpression = [NSExpression expressionWithFormat:@"FUNCTION(self, 'mgl_has:', 'x')"]; - NSArray *jsonExpression = @[@"has", @"x"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_does:have:" - arguments:@[MGLConstantExpression(@{@"x": MGLConstantExpression(@0)}), - MGLConstantExpression(@"x")]]; - NSArray *jsonExpression = @[@"has", @"x", @[@"literal", @{@"x": @0}]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionForFunction:@"mgl_does:have:" - arguments:@[[NSExpression expressionForVariable:@"featureAttributes"], - [NSExpression expressionForConstantValue:@"x"]]]; - NSArray *jsonExpression = @[@"has", @"x", @[@"properties"]]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression; - expression = [NSExpression expressionWithFormat:@"TERNARY(key != nil, 1, 0)"]; - NSArray *jsonExpression = @[@"case", @[@"!=", @[@"get", @"key"], [NSNull null]], @1, @0]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - XCTAssertEqualObjects([expression expressionValueWithObject:@{} context:nil], @NO); - XCTAssertEqualObjects([expression expressionValueWithObject:@{@"key": @"🗝"} context:nil], @YES); - } - { - NSDictionary *dictionary = @{@"key": @"🔑"}; - NSExpression *expression; - expression = [NSExpression expressionWithFormat:@"TERNARY(%@.key != nil, 1, 0)", dictionary]; - NSArray *jsonExpression = @[@"case", @[@"!=", @[@"get", @"key", @[@"literal", dictionary]], [NSNull null]], @1, @0]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - // The dictionary isn’t equal enough. - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression].description, expression.description); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @YES); - } -} - -- (void)testFormatExpressionObject { - { - MGLAttributedExpression *attribute1 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"foo"] - fontNames:nil - fontScale:@(1.2)]; - MGLAttributedExpression *attribute2 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"biz"] - fontNames:nil - fontScale:@(1.0)]; - MGLAttributedExpression *attribute3 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"bar"] - fontNames:nil - fontScale:@(0.8)]; - MGLAttributedExpression *attribute4 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"\r"] - fontNames:@[] - fontScale:nil]; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_attributed:(%@, %@, %@, %@)", - MGLConstantExpression(attribute1), - MGLConstantExpression(attribute4), - MGLConstantExpression(attribute2), - MGLConstantExpression(attribute3)]; - NSArray *jsonExpression = @[@"format", @"foo", @{@"font-scale": @1.2}, @"\r", @{}, @"biz", @{@"font-scale": @1.0}, @"bar", @{@"font-scale": @0.8}]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - MGLAttributedExpression *attribute1 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"foo"] - fontNames:nil - fontScale:@(1.2)]; - MGLAttributedExpression *attribute2 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"biz"] - fontNames:nil - fontScale:@(1.0)]; - MGLAttributedExpression *attribute3 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"bar"] - fontNames:nil - fontScale:@(0.8)]; - MGLAttributedExpression *attribute4 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"\n"] - fontNames:@[] - fontScale:nil]; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_attributed:(%@, %@, %@, %@)", - MGLConstantExpression(attribute1), - MGLConstantExpression(attribute4), - MGLConstantExpression(attribute2), - MGLConstantExpression(attribute3)]; - NSArray *jsonExpression = @[@"format", @"foo", @{@"font-scale": @1.2}, @"\n", @{}, @"biz", @{@"font-scale": @1.0}, @"bar", @{@"font-scale": @0.8}]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - MGLAttributedExpression *attribute1 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"foo"] - fontNames:nil - fontScale:@(1.2)]; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_attributed:(%@)", MGLConstantExpression(attribute1)]; - - NSExpression *compatibilityExpression = [NSExpression expressionForFunction:@"mgl_attributed:" arguments:@[MGLConstantExpression(attribute1)]]; - NSArray *jsonExpression = @[@"format", @"foo", @{@"font-scale": @1.2}]; - XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, expression.mgl_jsonExpressionObject); - XCTAssertEqualObjects(compatibilityExpression, expression); - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - MGLAttributedExpression *attribute1 = [[MGLAttributedExpression alloc] initWithExpression:[NSExpression expressionForConstantValue:@"foo"] - attributes:@{ MGLFontScaleAttribute: MGLConstantExpression(@(1.2)), - MGLFontColorAttribute: MGLConstantExpression(@"yellow") }] ; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_attributed:(%@)", MGLConstantExpression(attribute1)]; - - NSExpression *compatibilityExpression = [NSExpression expressionForFunction:@"mgl_attributed:" arguments:@[MGLConstantExpression(attribute1)]]; - NSArray *jsonExpression = @[ @"format", @"foo", @{ @"font-scale": @1.2, @"text-color": @"yellow" } ]; - XCTAssertEqualObjects(compatibilityExpression.mgl_jsonExpressionObject, expression.mgl_jsonExpressionObject); - XCTAssertEqualObjects(compatibilityExpression, expression); - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - MGLAttributedExpression *attribute1 = [[MGLAttributedExpression alloc] initWithExpression:[NSExpression expressionForConstantValue:@"foo"]] ; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_attributed:(%@)", MGLConstantExpression(attribute1)]; - - NSArray *jsonExpression = @[ @"format", @"foo", @{ } ]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *fontNames = [NSExpression expressionForAggregate:@[ MGLConstantExpression(@"DIN Offc Pro Bold"), MGLConstantExpression(@"Arial Unicode MS Bold") ]]; - MGLAttributedExpression *attribute1 = [[MGLAttributedExpression alloc] initWithExpression:[NSExpression expressionForConstantValue:@"foo"] - attributes:@{ MGLFontScaleAttribute: MGLConstantExpression(@(1.2)), - MGLFontColorAttribute: MGLConstantExpression(@"yellow"), - MGLFontNamesAttribute: fontNames - }] ; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_attributed:(%@)", MGLConstantExpression(attribute1)]; - - NSArray *jsonExpression = @[ @"format", @"foo", @{ @"font-scale": @1.2, @"text-color": @"yellow" , @"text-font" : @[ @"literal", @[ @"DIN Offc Pro Bold", @"Arial Unicode MS Bold" ]]} ]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *fontNames = [NSExpression expressionForAggregate:@[ MGLConstantExpression(@"DIN Offc Pro Bold"), MGLConstantExpression(@"Arial Unicode MS Bold") ]]; - MGLAttributedExpression *attribute1 = [[MGLAttributedExpression alloc] initWithExpression:[NSExpression expressionForConstantValue:@"foo"] - attributes:@{ MGLFontScaleAttribute: MGLConstantExpression(@(1.2)), - MGLFontColorAttribute: MGLConstantExpression([MGLColor redColor]), - MGLFontNamesAttribute: fontNames - }] ; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_attributed:(%@)", MGLConstantExpression(attribute1)]; - - NSArray *jsonExpression = @[ @"format", @"foo", @{ @"font-scale": @1.2, @"text-color": @[@"rgb", @255, @0, @0] , @"text-font" : @[ @"literal", @[ @"DIN Offc Pro Bold", @"Arial Unicode MS Bold" ]]} ]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *fontNames = [NSExpression expressionForAggregate:@[ MGLConstantExpression(@"DIN Offc Pro Bold"), MGLConstantExpression(@"Arial Unicode MS Bold") ]]; - MGLAttributedExpression *attribute1 = [[MGLAttributedExpression alloc] initWithExpression:[NSExpression expressionWithFormat:@"CAST(x, 'NSString')"] - attributes:@{ MGLFontScaleAttribute: MGLConstantExpression(@(1.2)), - MGLFontColorAttribute: MGLConstantExpression([MGLColor redColor]), - MGLFontNamesAttribute: fontNames - }] ; - NSExpression *expression = [NSExpression expressionWithFormat:@"mgl_attributed:(%@)", MGLConstantExpression(attribute1)]; - - NSArray *jsonExpression = @[ @"format", @[@"to-string", @[@"get", @"x"]], @{ @"font-scale": @1.2, @"text-color": @[@"rgb", @255, @0, @0] , @"text-font" : @[ @"literal", @[ @"DIN Offc Pro Bold", @"Arial Unicode MS Bold" ]]} ]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - MGLAttributedExpression *attribute1 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"foo"] - fontNames:nil - fontScale:@(1.2)]; - MGLAttributedExpression *attribute2 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"biz"] - fontNames:nil - fontScale:@(1.0)]; - MGLAttributedExpression *attribute3 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"bar"] - fontNames:nil - fontScale:@(0.8)]; - MGLAttributedExpression *attribute4 = [MGLAttributedExpression attributedExpression:[NSExpression expressionForConstantValue:@"\n"] - fontNames:@[] - fontScale:nil]; - NSExpression *expression = [NSExpression mgl_expressionForAttributedExpressions:@[MGLConstantExpression(attribute1), - MGLConstantExpression(attribute4), - MGLConstantExpression(attribute2), - MGLConstantExpression(attribute3)]]; - NSArray *jsonExpression = @[@"format", @"foo", @{@"font-scale": @1.2}, @"\n", @{}, @"biz", @{@"font-scale": @1.0}, @"bar", @{@"font-scale": @0.8}]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } -} - -- (void)testGenericExpressionObject { - { - NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_FUNCTION('random', 1, 2, 3, 4, 5)"]; - NSArray *jsonExpression = @[@"random", @1, @2, @3, @4, @5]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [NSExpression expressionWithFormat:@"MGL_FUNCTION('random', 1, 2, 3, 4)"]; - XCTAssertThrowsSpecificNamed([expression expressionValueWithObject:nil context:nil], NSException, NSInvalidArgumentException); - } - { - NSArray *arguments = @[ - MGLConstantExpression(@"one"), MGLConstantExpression(@1), - [NSExpression expressionForVariable:@"one"], - ]; - NSExpression *nullaryExpression = [NSExpression expressionForFunction:@"MGL_LET" arguments:arguments]; - NSExpression *unaryExpression = [NSExpression expressionForFunction:@"MGL_LET:" arguments:arguments]; - XCTAssertEqualObjects(nullaryExpression.mgl_jsonExpressionObject, unaryExpression.mgl_jsonExpressionObject); - } - { - NSArray *arguments = @[ - [NSExpression expressionForVariable:@"x"], - MGLConstantExpression(@YES), MGLConstantExpression(@"yes"), - MGLConstantExpression(@NO), MGLConstantExpression(@"no"), - ]; - NSExpression *nullaryExpression = [NSExpression expressionForFunction:@"MGL_MATCH" arguments:arguments]; - NSExpression *unaryExpression = [NSExpression expressionForFunction:@"MGL_MATCH:" arguments:arguments]; - XCTAssertEqualObjects(nullaryExpression.mgl_jsonExpressionObject, unaryExpression.mgl_jsonExpressionObject); - } - { - NSArray *arguments = @[ - [NSPredicate predicateWithValue:YES], - MGLConstantExpression(@"yes"), MGLConstantExpression(@"no"), - ]; - NSExpression *nullaryExpression = [NSExpression expressionForFunction:@"MGL_IF" arguments:arguments]; - NSExpression *unaryExpression = [NSExpression expressionForFunction:@"MGL_IF:" arguments:arguments]; - XCTAssertEqualObjects(nullaryExpression.mgl_jsonExpressionObject, unaryExpression.mgl_jsonExpressionObject); - } - { - NSArray *arguments = @[MGLConstantExpression(@"zoom")]; - NSExpression *nullaryExpression = [NSExpression expressionForFunction:@"MGL_FUNCTION" arguments:arguments]; - NSExpression *unaryExpression = [NSExpression expressionForFunction:@"MGL_FUNCTION:" arguments:arguments]; - XCTAssertEqualObjects(nullaryExpression.mgl_jsonExpressionObject, unaryExpression.mgl_jsonExpressionObject); - } -} - -#pragma mark - Localization tests - -- (void)testLocalization { - { - NSExpression *original = MGLConstantExpression(@""); - NSExpression *expected = original; - XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:nil], expected); - } - { - NSExpression *original = MGLConstantExpression(@"Old MacDonald"); - NSExpression *expected = original; - XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:nil], expected); - } - { - NSExpression *original = MGLConstantExpression(@"{name_en}"); - NSExpression *expected = original; - XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:nil], expected); - } - { - NSExpression *keyExpression = [NSExpression expressionForKeyPath:@"name_en"]; - MGLAttributedExpression *attributedExpression = [MGLAttributedExpression attributedExpression:keyExpression attributes:@{}]; - NSExpression *original = [NSExpression expressionForConstantValue:attributedExpression]; - - NSExpression *coalesceExpression = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", @"name_en", @"name"]; - MGLAttributedExpression *expectedAttributedExpression = [MGLAttributedExpression attributedExpression:coalesceExpression attributes:@{}]; - NSExpression *expected = [NSExpression expressionForConstantValue:expectedAttributedExpression]; - XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:nil], expected); - } - { - NSExpression *original = [NSExpression expressionForKeyPath:@"name_en"]; - NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", @"name_en", @"name"]; - XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:nil], expected); - } - { - NSExpression *original = [NSExpression expressionForKeyPath:@"name_en"]; - NSExpression *expected = [NSExpression expressionForKeyPath:@"name"]; - XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:[NSLocale localeWithLocaleIdentifier:@"mul"]], expected); - } - { - NSExpression *original = [NSExpression expressionForKeyPath:@"name_en"]; - NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", @"name_fr", @"name"]; - XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:[NSLocale localeWithLocaleIdentifier:@"fr-CA"]], expected); - } - { - NSExpression *original = [NSExpression expressionForKeyPath:@"name_en"]; - NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K, %K, %K})", @"name_zh-Hans", @"name_zh-CN", @"name_zh", @"name"]; - XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:[NSLocale localeWithLocaleIdentifier:@"zh-Hans"]], expected); - } - { - NSExpression *original = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", @"name_en", @"name"]; - NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce:({mgl_coalesce:({name_en, name}), mgl_coalesce:({name_en, name})})"]; - XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:nil], expected); - } - { - NSExpression *original = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", @"name_en", @"name"]; - NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_coalesce:({mgl_coalesce:({name_ja, name}), mgl_coalesce:({name_ja, name})})"]; - XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:[NSLocale localeWithLocaleIdentifier:@"ja-JP"]], expected); - } - { - NSExpression *original = [NSExpression expressionForKeyPath:@"name_en"]; - NSExpression *expected = [NSExpression expressionForKeyPath:@"name"]; - XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:[NSLocale localeWithLocaleIdentifier:@"tlh"]], expected); - } - { - NSExpression *original = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, short, %@)", @{ - @1: [NSExpression expressionForKeyPath:@"abbr"], - @2: @"…", - @3: [NSExpression expressionForKeyPath:@"name_fr"], - }]; - NSExpression *expected = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, short, %@)", @{ - @1: [NSExpression expressionForKeyPath:@"abbr"], - @2: @"…", - @3: [NSExpression expressionWithFormat:@"mgl_coalesce({%K, %K})", @"name_es", @"name"] - }]; - XCTAssertEqualObjects([original mgl_expressionLocalizedIntoLocale:[NSLocale localeWithLocaleIdentifier:@"es-PR"]], expected); - } - { - NSArray *jsonExpression = @[ - @"step", - @[@"zoom"], - @[ - @"case", - @[ - @"<", - @[ - @"to-number", - @[@"get", @"area"] - ], - @80000 - ], - @[@"get", @"abbr"], - @[@"get", @"name_en"] - ], - @5, @[@"get", @"name_en"] - ]; - NSArray *localizedJSONExpression = @[ - @"step", - @[@"zoom"], - @[ - @"case", - @[ - @"<", - @[ - @"to-number", - @[@"get", @"area"] - ], - @80000 - ], - @[@"get", @"abbr"], - @[@"get", @"name"] - ], - @5, @[@"get", @"name"] - ]; - NSExpression *expression = [NSExpression expressionWithMGLJSONObject:jsonExpression]; - NSExpression *localizedExpression = [expression mgl_expressionLocalizedIntoLocale:[NSLocale localeWithLocaleIdentifier:@"mul"]]; - XCTAssertEqualObjects(localizedExpression.mgl_jsonExpressionObject, localizedJSONExpression); - } -} - -- (void)testConvenienceInitializers { - { - NSExpression *expression = [NSExpression mgl_expressionForConditional:[NSPredicate predicateWithFormat:@"1 = 2"] - trueExpression:MGLConstantExpression(@YES) - falseExpresssion:MGLConstantExpression(@NO)]; - - NSArray *jsonExpression = @[@"case", @[@"==", @1, @2], @YES, @NO]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @NO); - } - { - NSDictionary *stops = @{@0: MGLConstantExpression(@111), @1: MGLConstantExpression(@1111)}; - NSExpression *expression = [NSExpression mgl_expressionForSteppingExpression:[NSExpression expressionForKeyPath:@"x"] - fromExpression:[NSExpression expressionForConstantValue:@11] - stops:[NSExpression expressionForConstantValue:stops]]; - NSArray *jsonExpression = @[@"step", @[@"get", @"x"], @11, @0, @111, @1, @1111]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSDictionary *stops = @{@0: MGLConstantExpression(@100), @10: MGLConstantExpression(@200)}; - NSExpression *expression = [NSExpression mgl_expressionForInterpolatingExpression:[NSExpression expressionForKeyPath:@"x"] - withCurveType:MGLExpressionInterpolationModeLinear - parameters:nil - stops:[NSExpression expressionForConstantValue:stops]]; - NSArray *jsonExpression = @[@"interpolate", @[@"linear"], @[@"get", @"x"], @0, @100, @10, @200]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSExpression *expression = [[NSExpression expressionForConstantValue:@"Old"] mgl_expressionByAppendingExpression:[NSExpression expressionForConstantValue:@"MacDonald"]]; - - NSArray *jsonExpression = @[@"concat", @"Old", @"MacDonald"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @"OldMacDonald"); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } - { - NSDictionary *values = @{ MGLConstantExpression(@1): MGLConstantExpression(@"one") }; - NSExpression *expression = [NSExpression mgl_expressionForMatchingExpression:[NSExpression expressionWithFormat:@"2 * 1"] - inDictionary:values - defaultExpression:[NSExpression expressionForConstantValue:@"default"]]; - NSArray *jsonExpression = @[@"match", @[@"*", @2, @1], @1, @"one", @"default"]; - XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); - } -} - - -@end diff --git a/platform/darwin/test/MGLFeatureTests.mm b/platform/darwin/test/MGLFeatureTests.mm deleted file mode 100644 index edc105bca4d..00000000000 --- a/platform/darwin/test/MGLFeatureTests.mm +++ /dev/null @@ -1,364 +0,0 @@ -#import -#import - -#import -#import "MGLFoundation_Private.h" -#import "../../darwin/src/MGLFeature_Private.h" - -@interface MGLFeatureTests : XCTestCase - -@end - -@implementation MGLFeatureTests - -- (void)testGeometryConversion { - std::vector features; - - mbgl::Point point = { -90.066667, 29.95 }; - features.push_back(mbgl::Feature { point }); - - mbgl::LineString lineString = { - { -84.516667, 39.1 }, - { -90.066667, 29.95 }, - }; - features.push_back(mbgl::Feature { lineString }); - - mbgl::Polygon polygon = { - { - { 1, 1 }, - { 4, 1 }, - { 4, 4 }, - { 1, 4 }, - }, - { - { 2, 2 }, - { 3, 2 }, - { 3, 3 }, - { 2, 3 }, - }, - }; - features.push_back(mbgl::Feature { polygon }); - - NSArray *> *shapes = MGLFeaturesFromMBGLFeatures(features); - XCTAssertEqual(shapes.count, 3UL, @"All features should be converted into shapes"); - - MGLPointFeature *pointShape = (MGLPointFeature *)shapes[0]; - XCTAssertTrue([pointShape isKindOfClass:[MGLPointFeature class]]); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:pointShape.coordinate], - [NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(29.95, -90.066667)]); - - MGLPolylineFeature *polylineShape = (MGLPolylineFeature *)shapes[1]; - XCTAssertTrue([polylineShape isKindOfClass:[MGLPolylineFeature class]]); - XCTAssertEqual(polylineShape.pointCount, 2UL); - CLLocationCoordinate2D polylineCoordinates[2]; - [polylineShape getCoordinates:polylineCoordinates range:NSMakeRange(0, polylineShape.pointCount)]; - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:polylineCoordinates[0]], - [NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(39.1, -84.516667)]); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:polylineCoordinates[1]], - [NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(29.95, -90.066667)]); - - MGLPolygonFeature *polygonShape = (MGLPolygonFeature *)shapes[2]; - XCTAssertTrue([polygonShape isKindOfClass:[MGLPolygonFeature class]]); - XCTAssertEqual(polygonShape.pointCount, 4UL); - CLLocationCoordinate2D *polygonCoordinates = polygonShape.coordinates; - XCTAssertNotEqual(polygonCoordinates, nil); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:polygonCoordinates[0]], - [NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(1, 1)]); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:polygonCoordinates[1]], - [NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(1, 4)]); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:polygonCoordinates[2]], - [NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(4, 4)]); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:polygonCoordinates[3]], - [NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(4, 1)]); - NSArray *interiorPolygons = polygonShape.interiorPolygons; - XCTAssertEqual(interiorPolygons.count, 1UL); - MGLPolygon *interiorPolygon = interiorPolygons.firstObject; - XCTAssertEqual(interiorPolygon.pointCount, 4UL); - CLLocationCoordinate2D interiorPolygonCoordinates[4]; - [interiorPolygon getCoordinates:interiorPolygonCoordinates range:NSMakeRange(0, interiorPolygon.pointCount)]; - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:interiorPolygonCoordinates[0]], - [NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(2, 2)]); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:interiorPolygonCoordinates[1]], - [NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(2, 3)]); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:interiorPolygonCoordinates[2]], - [NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(3, 3)]); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:interiorPolygonCoordinates[3]], - [NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(3, 2)]); -} - -- (void)testClusterGeometryConversion { - mbgl::Point point = { -90.066667, 29.95 }; - mbgl::Feature pointFeature { point }; - pointFeature.id = { UINT64_MAX }; - pointFeature.properties["cluster"] = true; - pointFeature.properties["cluster_id"] = 1ULL; - pointFeature.properties["point_count"] = 5ULL; - - id feature = MGLFeatureFromMBGLFeature(pointFeature); - - XCTAssert([feature conformsToProtocol:@protocol(MGLFeature)]); - - id cluster = MGL_OBJC_DYNAMIC_CAST_AS_PROTOCOL(feature, MGLCluster); - XCTAssert(cluster); - XCTAssert(cluster.clusterIdentifier == 1); - XCTAssert(cluster.clusterPointCount == 5); - - XCTAssert([cluster isMemberOfClass:[MGLPointFeatureCluster class]]); -} - -- (void)testPropertyConversion { - std::vector features; - - mbgl::Point point = { -90.066667, 29.95 }; - mbgl::Feature pointFeature { point }; - pointFeature.id = { UINT64_MAX }; - pointFeature.properties["null"] = mapbox::feature::null_value; - pointFeature.properties["bool"] = true; - pointFeature.properties["unsigned int"] = UINT64_MAX; - pointFeature.properties["int"] = INT64_MIN; - pointFeature.properties["double"] = DBL_MAX; - pointFeature.properties["string"] = std::string("🚏"); - std::vector vector; - vector.push_back(true); - vector.push_back(false); - vector.push_back(true); - features.push_back(pointFeature); - - NSArray *> *shapes = MGLFeaturesFromMBGLFeatures(features); - XCTAssertEqual(shapes.count, 1UL, @"All features should be converted into shapes"); - - MGLShape *shape = shapes.firstObject; - XCTAssertTrue([shape conformsToProtocol:@protocol(MGLFeature)]); - XCTAssertTrue([shape isKindOfClass:[MGLShape class]]); - - NSNumber *identifier = shape.identifier; - XCTAssertTrue([identifier isKindOfClass:[NSNumber class]], @"Feature identifier should be NSNumber"); - XCTAssertEqual(strcmp(identifier.objCType, @encode(uint64_t)), 0, @"Feature identifier should be 64-bit unsigned integer"); - - NSNull *null = [shape attributeForKey:@"null"]; - XCTAssertNotNil(null); - XCTAssertTrue([null isKindOfClass:[NSNull class]]); - XCTAssertEqual(null, shape.attributes[@"null"]); - - NSNumber *boolean = [shape attributeForKey:@"bool"]; - XCTAssertNotNil(boolean); - XCTAssertTrue([boolean isKindOfClass:[NSNumber class]]); -#if (TARGET_OS_IPHONE && __LP64__) || TARGET_OS_WATCH - XCTAssertEqual(strcmp(boolean.objCType, @encode(char)), 0, @"Boolean property should be converted to bool NSNumber"); -#else - XCTAssertEqual(strcmp(boolean.objCType, @encode(BOOL)), 0, @"Boolean property should be converted to bool NSNumber"); -#endif - XCTAssertTrue(boolean.boolValue); - XCTAssertEqual(boolean, shape.attributes[@"bool"]); - - NSNumber *unsignedInteger = [shape attributeForKey:@"unsigned int"]; - XCTAssertNotNil(unsignedInteger); - XCTAssertTrue([unsignedInteger isKindOfClass:[NSNumber class]]); - XCTAssertEqual(strcmp(unsignedInteger.objCType, @encode(uint64_t)), 0, @"Unsigned integer property should be converted to unsigned long long NSNumber"); - XCTAssertEqual(unsignedInteger.unsignedLongLongValue, UINT64_MAX); - XCTAssertEqual(unsignedInteger, shape.attributes[@"unsigned int"]); - - NSNumber *integer = [shape attributeForKey:@"int"]; - XCTAssertNotNil(integer); - XCTAssertTrue([integer isKindOfClass:[NSNumber class]]); - XCTAssertEqual(strcmp(integer.objCType, @encode(int64_t)), 0, @"Integer property should be converted to long long NSNumber"); - XCTAssertEqual(integer.longLongValue, INT64_MIN); - XCTAssertEqual(integer, shape.attributes[@"int"]); - - NSNumber *floatingPointNumber = [shape attributeForKey:@"double"]; - XCTAssertNotNil(floatingPointNumber); - XCTAssertTrue([floatingPointNumber isKindOfClass:[NSNumber class]]); - XCTAssertEqual(strcmp(floatingPointNumber.objCType, @encode(double)), 0, @"Floating-point number property should be converted to double NSNumber"); - XCTAssertEqual(floatingPointNumber.doubleValue, DBL_MAX); - XCTAssertEqual(floatingPointNumber, shape.attributes[@"double"]); - - NSString *string = [shape attributeForKey:@"string"]; - XCTAssertNotNil(string); - XCTAssertTrue([string isKindOfClass:[NSString class]]); - XCTAssertEqualObjects(string, @"🚏"); - XCTAssertEqual(string, shape.attributes[@"string"]); -} - -- (void)testPointFeatureGeoJSONDictionary { - MGLPointFeature *pointFeature = [[MGLPointFeature alloc] init]; - CLLocationCoordinate2D coordinate = { 10, 10 }; - pointFeature.coordinate = coordinate; - - // A GeoJSON feature - // when there are no identifier or properties - NSDictionary *geoJSONFeature = [pointFeature geoJSONDictionary]; - - // it has the correct type - XCTAssertEqualObjects(geoJSONFeature[@"type"], @"Feature"); - // it has the correct geometry - NSDictionary *expectedGeometry = @{@"type": @"Point", - @"coordinates": @[@(coordinate.longitude), @(coordinate.latitude)]}; - XCTAssertEqualObjects(geoJSONFeature[@"geometry"], expectedGeometry); - // it has no "id" key (or value) - XCTAssertNil(geoJSONFeature[@"id"]); - // it has a null representation of the properties object - XCTAssertEqualObjects(geoJSONFeature[@"properties"], @{}); - - // when there is a string identifier - pointFeature.identifier = @"string-id"; - - // it has the identifier in the result - geoJSONFeature = [pointFeature geoJSONDictionary]; - XCTAssertEqualObjects(geoJSONFeature[@"id"], pointFeature.identifier); - - // when there are properties - pointFeature.attributes = @{@"name": @"name-value"}; - - // it has the properties value in the result - geoJSONFeature = [pointFeature geoJSONDictionary]; - XCTAssertEqualObjects(geoJSONFeature[@"properties"], pointFeature.attributes); -} - -- (void)testPolylineFeatureGeoJSONDictionary { - CLLocationCoordinate2D coord1 = { 0, 0 }; - CLLocationCoordinate2D coord2 = { 10, 10 }; - CLLocationCoordinate2D coords[] = { coord1, coord2 }; - MGLPolylineFeature *polyLineFeature = [MGLPolylineFeature polylineWithCoordinates:coords count:2]; - - // A GeoJSON feature - NSDictionary *geoJSONFeature = [polyLineFeature geoJSONDictionary]; - - // it has the correct geometry - NSDictionary *expectedGeometry = @{@"type": @"LineString", - @"coordinates": @[@[@(coord1.longitude), @(coord1.latitude)], - @[@(coord2.longitude), @(coord2.latitude)]]}; - XCTAssertEqualObjects(geoJSONFeature[@"geometry"], expectedGeometry); -} - -- (void)testPolygonFeatureGeoJSONDictionary { - CLLocationCoordinate2D coord1 = { 0, 0 }; - CLLocationCoordinate2D coord2 = { 10, 10 }; - CLLocationCoordinate2D coord3 = { 0, 0 }; - CLLocationCoordinate2D coords[] = { coord1, coord2, coord3 }; - MGLPolygonFeature *polygonFeature = [MGLPolygonFeature polygonWithCoordinates:coords count:3]; - - // A GeoJSON feature - NSDictionary *geoJSONFeature = [polygonFeature geoJSONDictionary]; - - // it has the correct geometry - NSDictionary *expectedGeometry = @{@"type": @"Polygon", - @"coordinates": @[@[@[@(coord1.longitude), @(coord1.latitude)], - @[@(coord2.longitude), @(coord2.latitude)], - @[@(coord3.longitude), @(coord3.latitude)]]]}; - XCTAssertEqualObjects(geoJSONFeature[@"geometry"], expectedGeometry); -} - -- (void)testMultiPolylineFeatureGeoJSONDictionary { - CLLocationCoordinate2D coord1 = { 0, 0 }; - CLLocationCoordinate2D coord2 = { 10, 10 }; - CLLocationCoordinate2D coord3 = { 0, 0 }; - CLLocationCoordinate2D coords[] = { coord1, coord2, coord3 }; - - MGLPolyline *polyLine1 = [MGLPolyline polylineWithCoordinates:coords count:3]; - MGLPolyline *polyLine2 = [MGLPolyline polylineWithCoordinates:coords count:3]; - - MGLMultiPolylineFeature *multiPolylineFeature = [MGLMultiPolylineFeature multiPolylineWithPolylines:@[polyLine1, polyLine2]]; - - // A GeoJSON feature - NSDictionary *geoJSONFeature = [multiPolylineFeature geoJSONDictionary]; - - // it has the correct geometry - NSDictionary *expectedGeometry = @{@"type": @"MultiLineString", - @"coordinates": @[@[@[@(coord1.longitude), @(coord1.latitude)], - @[@(coord2.longitude), @(coord2.latitude)], - @[@(coord3.longitude), @(coord3.latitude)]], - @[@[@(coord1.longitude), @(coord1.latitude)], - @[@(coord2.longitude), @(coord2.latitude)], - @[@(coord3.longitude), @(coord3.latitude)]]]}; - XCTAssertEqualObjects(geoJSONFeature[@"geometry"], expectedGeometry); -} - -- (void)testMultiPolygonFeatureGeoJSONDictionary { - CLLocationCoordinate2D coord1 = { 0, 0 }; - CLLocationCoordinate2D coord2 = { 10, 10 }; - CLLocationCoordinate2D coord3 = { 0, 0 }; - CLLocationCoordinate2D coords[] = { coord1, coord2, coord3 }; - - MGLPolygon *polygon1 = [MGLPolygon polygonWithCoordinates:coords count:3]; - MGLPolygon *polygon2 = [MGLPolygon polygonWithCoordinates:coords count:3]; - - MGLMultiPolygonFeature *multiPolylineFeature = [MGLMultiPolygonFeature multiPolygonWithPolygons:@[polygon1, polygon2]]; - - // A GeoJSON feature - NSDictionary *geoJSONFeature = [multiPolylineFeature geoJSONDictionary]; - - // it has the correct geometry - NSDictionary *expectedGeometry = @{@"type": @"MultiPolygon", - @"coordinates": @[ - @[@[@[@(coord1.longitude), @(coord1.latitude)], - @[@(coord2.longitude), @(coord2.latitude)], - @[@(coord3.longitude), @(coord3.latitude)]]], - @[@[@[@(coord1.longitude), @(coord1.latitude)], - @[@(coord2.longitude), @(coord2.latitude)], - @[@(coord3.longitude), @(coord3.latitude)]]]]}; - XCTAssertEqualObjects(geoJSONFeature[@"geometry"], expectedGeometry); -} - -- (void)testPointCollectionFeatureGeoJSONDictionary { - CLLocationCoordinate2D coord1 = { 0, 0 }; - CLLocationCoordinate2D coord2 = { 10, 10 }; - CLLocationCoordinate2D coord3 = { 0, 0 }; - CLLocationCoordinate2D coords[] = { coord1, coord2, coord3 }; - MGLPointCollectionFeature *pointCollectionFeature = [MGLPointCollectionFeature pointCollectionWithCoordinates:coords count:3]; - - // A GeoJSON feature - NSDictionary *geoJSONFeature = [pointCollectionFeature geoJSONDictionary]; - - // it has the correct geometry - NSDictionary *expectedGeometry = @{@"type": @"MultiPoint", - @"coordinates": @[@[@(coord1.longitude), @(coord1.latitude)], - @[@(coord2.longitude), @(coord2.latitude)], - @[@(coord3.longitude), @(coord3.latitude)]]}; - XCTAssertEqualObjects(geoJSONFeature[@"geometry"], expectedGeometry); - -} - -- (void)testShapeCollectionFeatureGeoJSONDictionary { - MGLPointFeature *pointFeature = [[MGLPointFeature alloc] init]; - CLLocationCoordinate2D pointCoordinate = { 10, 10 }; - pointFeature.coordinate = pointCoordinate; - - CLLocationCoordinate2D coord1 = { 0, 0 }; - CLLocationCoordinate2D coord2 = { 10, 10 }; - CLLocationCoordinate2D coords[] = { coord1, coord2 }; - MGLPolylineFeature *polylineFeature = [MGLPolylineFeature polylineWithCoordinates:coords count:2]; - - MGLShapeCollectionFeature *shapeCollectionFeature = [MGLShapeCollectionFeature shapeCollectionWithShapes:@[pointFeature, polylineFeature]]; - - // A GeoJSON feature - NSDictionary *geoJSONFeature = [shapeCollectionFeature geoJSONDictionary]; - - // it has the correct geometry - NSDictionary *expectedGeometry = @{@"type": @"GeometryCollection", - @"geometries": @[ - @{ @"geometry": @{@"type": @"Point", - @"coordinates": @[@(pointCoordinate.longitude), @(pointCoordinate.latitude)]}, - @"properties": @{}, - @"type": @"Feature", - }, - @{ @"geometry": @{@"type": @"LineString", - @"coordinates": @[@[@(coord1.longitude), @(coord1.latitude)], - @[@(coord2.longitude), @(coord2.latitude)]]}, - @"properties": @{}, - @"type": @"Feature", - } - ] - }; - XCTAssertEqualObjects(geoJSONFeature[@"geometry"], expectedGeometry); - - // When the shape collection is created with an empty array of shapes - shapeCollectionFeature = [MGLShapeCollectionFeature shapeCollectionWithShapes:@[]]; - - // it has the correct (empty) geometry - geoJSONFeature = [shapeCollectionFeature geoJSONDictionary]; - expectedGeometry = @{@"type": @"GeometryCollection", - @"geometries": @[]}; - XCTAssertEqualObjects(geoJSONFeature[@"geometry"], expectedGeometry); -} - -@end diff --git a/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm b/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm deleted file mode 100644 index 8dfc0777779..00000000000 --- a/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm +++ /dev/null @@ -1,541 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLStyleLayerTests.h" -#import "../../darwin/src/NSDate+MGLAdditions.h" - -#import "MGLStyleLayer_Private.h" - -#include -#include -#include - -@interface MGLFillExtrusionLayerTests : MGLStyleLayerTests -@end - -@implementation MGLFillExtrusionLayerTests - -+ (NSString *)layerType { - return @"fill-extrusion"; -} - -- (void)testPredicates { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - MGLFillExtrusionStyleLayer *layer = [[MGLFillExtrusionStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - - XCTAssertNil(layer.sourceLayerIdentifier); - layer.sourceLayerIdentifier = @"layerID"; - XCTAssertEqualObjects(layer.sourceLayerIdentifier, @"layerID"); - layer.sourceLayerIdentifier = nil; - XCTAssertNil(layer.sourceLayerIdentifier); - - XCTAssertNil(layer.predicate); - layer.predicate = [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]; - XCTAssertEqualObjects(layer.predicate, [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]); - layer.predicate = nil; - XCTAssertNil(layer.predicate); -} - -- (void)testProperties { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - - MGLFillExtrusionStyleLayer *layer = [[MGLFillExtrusionStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertEqualObjects(@(layer.rawLayer->getTypeInfo()->type), @"fill-extrusion"); - auto rawLayer = static_cast(layer.rawLayer); - - MGLTransition transitionTest = MGLTransitionMake(5, 4); - - - // fill-extrusion-base - { - XCTAssertTrue(rawLayer->getFillExtrusionBase().isUndefined(), - @"fill-extrusion-base should be unset initially."); - NSExpression *defaultExpression = layer.fillExtrusionBase; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.fillExtrusionBase = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getFillExtrusionBase(), propertyValue, - @"Setting fillExtrusionBase to a constant value expression should update fill-extrusion-base."); - XCTAssertEqualObjects(layer.fillExtrusionBase, constantExpression, - @"fillExtrusionBase should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillExtrusionBase = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionBase(), propertyValue, - @"Setting fillExtrusionBase to a camera expression should update fill-extrusion-base."); - XCTAssertEqualObjects(layer.fillExtrusionBase, functionExpression, - @"fillExtrusionBase should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.fillExtrusionBase = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionBase(), propertyValue, - @"Setting fillExtrusionBase to a data expression should update fill-extrusion-base."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.fillExtrusionBase, pedanticFunctionExpression, - @"fillExtrusionBase should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.fillExtrusionBase = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionBase(), propertyValue, - @"Setting fillExtrusionBase to a camera-data expression should update fill-extrusion-base."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.fillExtrusionBase, pedanticFunctionExpression, - @"fillExtrusionBase should round-trip camera-data expressions."); - - layer.fillExtrusionBase = nil; - XCTAssertTrue(rawLayer->getFillExtrusionBase().isUndefined(), - @"Unsetting fillExtrusionBase should return fill-extrusion-base to the default value."); - XCTAssertEqualObjects(layer.fillExtrusionBase, defaultExpression, - @"fillExtrusionBase should return the default value after being unset."); - // Transition property test - layer.fillExtrusionBaseTransition = transitionTest; - auto toptions = rawLayer->getFillExtrusionBaseTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition fillExtrusionBaseTransition = layer.fillExtrusionBaseTransition; - XCTAssertEqual(fillExtrusionBaseTransition.delay, transitionTest.delay); - XCTAssertEqual(fillExtrusionBaseTransition.duration, transitionTest.duration); - } - - // fill-extrusion-color - { - XCTAssertTrue(rawLayer->getFillExtrusionColor().isUndefined(), - @"fill-extrusion-color should be unset initially."); - NSExpression *defaultExpression = layer.fillExtrusionColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.fillExtrusionColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getFillExtrusionColor(), propertyValue, - @"Setting fillExtrusionColor to a constant value expression should update fill-extrusion-color."); - XCTAssertEqualObjects(layer.fillExtrusionColor, constantExpression, - @"fillExtrusionColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillExtrusionColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionColor(), propertyValue, - @"Setting fillExtrusionColor to a camera expression should update fill-extrusion-color."); - XCTAssertEqualObjects(layer.fillExtrusionColor, functionExpression, - @"fillExtrusionColor should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.fillExtrusionColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionColor(), propertyValue, - @"Setting fillExtrusionColor to a data expression should update fill-extrusion-color."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.fillExtrusionColor, pedanticFunctionExpression, - @"fillExtrusionColor should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.fillExtrusionColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1)))) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionColor(), propertyValue, - @"Setting fillExtrusionColor to a camera-data expression should update fill-extrusion-color."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.fillExtrusionColor, pedanticFunctionExpression, - @"fillExtrusionColor should round-trip camera-data expressions."); - - layer.fillExtrusionColor = nil; - XCTAssertTrue(rawLayer->getFillExtrusionColor().isUndefined(), - @"Unsetting fillExtrusionColor should return fill-extrusion-color to the default value."); - XCTAssertEqualObjects(layer.fillExtrusionColor, defaultExpression, - @"fillExtrusionColor should return the default value after being unset."); - // Transition property test - layer.fillExtrusionColorTransition = transitionTest; - auto toptions = rawLayer->getFillExtrusionColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition fillExtrusionColorTransition = layer.fillExtrusionColorTransition; - XCTAssertEqual(fillExtrusionColorTransition.delay, transitionTest.delay); - XCTAssertEqual(fillExtrusionColorTransition.duration, transitionTest.duration); - } - - // fill-extrusion-vertical-gradient - { - XCTAssertTrue(rawLayer->getFillExtrusionVerticalGradient().isUndefined(), - @"fill-extrusion-vertical-gradient should be unset initially."); - NSExpression *defaultExpression = layer.fillExtrusionHasVerticalGradient; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"false"]; - layer.fillExtrusionHasVerticalGradient = constantExpression; - mbgl::style::PropertyValue propertyValue = { false }; - XCTAssertEqual(rawLayer->getFillExtrusionVerticalGradient(), propertyValue, - @"Setting fillExtrusionHasVerticalGradient to a constant value expression should update fill-extrusion-vertical-gradient."); - XCTAssertEqualObjects(layer.fillExtrusionHasVerticalGradient, constantExpression, - @"fillExtrusionHasVerticalGradient should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"false"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillExtrusionHasVerticalGradient = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(false), 18.0, literal(false)) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionVerticalGradient(), propertyValue, - @"Setting fillExtrusionHasVerticalGradient to a camera expression should update fill-extrusion-vertical-gradient."); - XCTAssertEqualObjects(layer.fillExtrusionHasVerticalGradient, functionExpression, - @"fillExtrusionHasVerticalGradient should round-trip camera expressions."); - - - layer.fillExtrusionHasVerticalGradient = nil; - XCTAssertTrue(rawLayer->getFillExtrusionVerticalGradient().isUndefined(), - @"Unsetting fillExtrusionHasVerticalGradient should return fill-extrusion-vertical-gradient to the default value."); - XCTAssertEqualObjects(layer.fillExtrusionHasVerticalGradient, defaultExpression, - @"fillExtrusionHasVerticalGradient should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.fillExtrusionHasVerticalGradient = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.fillExtrusionHasVerticalGradient = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // fill-extrusion-height - { - XCTAssertTrue(rawLayer->getFillExtrusionHeight().isUndefined(), - @"fill-extrusion-height should be unset initially."); - NSExpression *defaultExpression = layer.fillExtrusionHeight; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.fillExtrusionHeight = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getFillExtrusionHeight(), propertyValue, - @"Setting fillExtrusionHeight to a constant value expression should update fill-extrusion-height."); - XCTAssertEqualObjects(layer.fillExtrusionHeight, constantExpression, - @"fillExtrusionHeight should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillExtrusionHeight = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionHeight(), propertyValue, - @"Setting fillExtrusionHeight to a camera expression should update fill-extrusion-height."); - XCTAssertEqualObjects(layer.fillExtrusionHeight, functionExpression, - @"fillExtrusionHeight should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.fillExtrusionHeight = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionHeight(), propertyValue, - @"Setting fillExtrusionHeight to a data expression should update fill-extrusion-height."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.fillExtrusionHeight, pedanticFunctionExpression, - @"fillExtrusionHeight should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.fillExtrusionHeight = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionHeight(), propertyValue, - @"Setting fillExtrusionHeight to a camera-data expression should update fill-extrusion-height."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.fillExtrusionHeight, pedanticFunctionExpression, - @"fillExtrusionHeight should round-trip camera-data expressions."); - - layer.fillExtrusionHeight = nil; - XCTAssertTrue(rawLayer->getFillExtrusionHeight().isUndefined(), - @"Unsetting fillExtrusionHeight should return fill-extrusion-height to the default value."); - XCTAssertEqualObjects(layer.fillExtrusionHeight, defaultExpression, - @"fillExtrusionHeight should return the default value after being unset."); - // Transition property test - layer.fillExtrusionHeightTransition = transitionTest; - auto toptions = rawLayer->getFillExtrusionHeightTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition fillExtrusionHeightTransition = layer.fillExtrusionHeightTransition; - XCTAssertEqual(fillExtrusionHeightTransition.delay, transitionTest.delay); - XCTAssertEqual(fillExtrusionHeightTransition.duration, transitionTest.duration); - } - - // fill-extrusion-opacity - { - XCTAssertTrue(rawLayer->getFillExtrusionOpacity().isUndefined(), - @"fill-extrusion-opacity should be unset initially."); - NSExpression *defaultExpression = layer.fillExtrusionOpacity; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.fillExtrusionOpacity = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getFillExtrusionOpacity(), propertyValue, - @"Setting fillExtrusionOpacity to a constant value expression should update fill-extrusion-opacity."); - XCTAssertEqualObjects(layer.fillExtrusionOpacity, constantExpression, - @"fillExtrusionOpacity should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillExtrusionOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionOpacity(), propertyValue, - @"Setting fillExtrusionOpacity to a camera expression should update fill-extrusion-opacity."); - XCTAssertEqualObjects(layer.fillExtrusionOpacity, functionExpression, - @"fillExtrusionOpacity should round-trip camera expressions."); - - - layer.fillExtrusionOpacity = nil; - XCTAssertTrue(rawLayer->getFillExtrusionOpacity().isUndefined(), - @"Unsetting fillExtrusionOpacity should return fill-extrusion-opacity to the default value."); - XCTAssertEqualObjects(layer.fillExtrusionOpacity, defaultExpression, - @"fillExtrusionOpacity should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.fillExtrusionOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.fillExtrusionOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.fillExtrusionOpacityTransition = transitionTest; - auto toptions = rawLayer->getFillExtrusionOpacityTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition fillExtrusionOpacityTransition = layer.fillExtrusionOpacityTransition; - XCTAssertEqual(fillExtrusionOpacityTransition.delay, transitionTest.delay); - XCTAssertEqual(fillExtrusionOpacityTransition.duration, transitionTest.duration); - } - - // fill-extrusion-pattern - { - XCTAssertTrue(rawLayer->getFillExtrusionPattern().isUndefined(), - @"fill-extrusion-pattern should be unset initially."); - NSExpression *defaultExpression = layer.fillExtrusionPattern; - - NSExpression *constantExpression = [NSExpression expressionForConstantValue:@"Fill Extrusion Pattern"]; - layer.fillExtrusionPattern = constantExpression; - mbgl::style::PropertyValue propertyValue = { "Fill Extrusion Pattern" }; - XCTAssertEqual(rawLayer->getFillExtrusionPattern(), propertyValue, - @"Setting fillExtrusionPattern to a constant value expression should update fill-extrusion-pattern."); - XCTAssertEqualObjects(layer.fillExtrusionPattern, constantExpression, - @"fillExtrusionPattern should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"MGL_FUNCTION('image', 'Fill Extrusion Pattern')"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillExtrusionPattern = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), image(literal("Fill Extrusion Pattern")), 18.0, image(literal("Fill Extrusion Pattern"))) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionPattern(), propertyValue, - @"Setting fillExtrusionPattern to a camera expression should update fill-extrusion-pattern."); - XCTAssertEqualObjects(layer.fillExtrusionPattern, functionExpression, - @"fillExtrusionPattern should round-trip camera expressions."); - - - layer.fillExtrusionPattern = nil; - XCTAssertTrue(rawLayer->getFillExtrusionPattern().isUndefined(), - @"Unsetting fillExtrusionPattern should return fill-extrusion-pattern to the default value."); - XCTAssertEqualObjects(layer.fillExtrusionPattern, defaultExpression, - @"fillExtrusionPattern should return the default value after being unset."); - // Transition property test - layer.fillExtrusionPatternTransition = transitionTest; - auto toptions = rawLayer->getFillExtrusionPatternTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition fillExtrusionPatternTransition = layer.fillExtrusionPatternTransition; - XCTAssertEqual(fillExtrusionPatternTransition.delay, transitionTest.delay); - XCTAssertEqual(fillExtrusionPatternTransition.duration, transitionTest.duration); - } - - // fill-extrusion-translate - { - XCTAssertTrue(rawLayer->getFillExtrusionTranslate().isUndefined(), - @"fill-extrusion-translate should be unset initially."); - NSExpression *defaultExpression = layer.fillExtrusionTranslation; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", -#if TARGET_OS_IPHONE - [NSValue valueWithCGVector:CGVectorMake(1, 1)] -#else - [NSValue valueWithMGLVector:CGVectorMake(1, -1)] -#endif - ]; - layer.fillExtrusionTranslation = constantExpression; - mbgl::style::PropertyValue> propertyValue = { { 1, 1 } }; - XCTAssertEqual(rawLayer->getFillExtrusionTranslate(), propertyValue, - @"Setting fillExtrusionTranslation to a constant value expression should update fill-extrusion-translate."); - XCTAssertEqualObjects(layer.fillExtrusionTranslation, constantExpression, - @"fillExtrusionTranslation should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillExtrusionTranslation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({ 1, 1 }), 18.0, literal({ 1, 1 })) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionTranslate(), propertyValue, - @"Setting fillExtrusionTranslation to a camera expression should update fill-extrusion-translate."); - XCTAssertEqualObjects(layer.fillExtrusionTranslation, functionExpression, - @"fillExtrusionTranslation should round-trip camera expressions."); - - - layer.fillExtrusionTranslation = nil; - XCTAssertTrue(rawLayer->getFillExtrusionTranslate().isUndefined(), - @"Unsetting fillExtrusionTranslation should return fill-extrusion-translate to the default value."); - XCTAssertEqualObjects(layer.fillExtrusionTranslation, defaultExpression, - @"fillExtrusionTranslation should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // fill-extrusion-translate-anchor - { - XCTAssertTrue(rawLayer->getFillExtrusionTranslateAnchor().isUndefined(), - @"fill-extrusion-translate-anchor should be unset initially."); - NSExpression *defaultExpression = layer.fillExtrusionTranslationAnchor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - layer.fillExtrusionTranslationAnchor = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::TranslateAnchorType::Viewport }; - XCTAssertEqual(rawLayer->getFillExtrusionTranslateAnchor(), propertyValue, - @"Setting fillExtrusionTranslationAnchor to a constant value expression should update fill-extrusion-translate-anchor."); - XCTAssertEqualObjects(layer.fillExtrusionTranslationAnchor, constantExpression, - @"fillExtrusionTranslationAnchor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillExtrusionTranslationAnchor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("viewport"), 18.0, literal("viewport")) - ); - } - - XCTAssertEqual(rawLayer->getFillExtrusionTranslateAnchor(), propertyValue, - @"Setting fillExtrusionTranslationAnchor to a camera expression should update fill-extrusion-translate-anchor."); - XCTAssertEqualObjects(layer.fillExtrusionTranslationAnchor, functionExpression, - @"fillExtrusionTranslationAnchor should round-trip camera expressions."); - - - layer.fillExtrusionTranslationAnchor = nil; - XCTAssertTrue(rawLayer->getFillExtrusionTranslateAnchor().isUndefined(), - @"Unsetting fillExtrusionTranslationAnchor should return fill-extrusion-translate-anchor to the default value."); - XCTAssertEqualObjects(layer.fillExtrusionTranslationAnchor, defaultExpression, - @"fillExtrusionTranslationAnchor should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } -} - -- (void)testPropertyNames { - [self testPropertyName:@"fill-extrusion-base" isBoolean:NO]; - [self testPropertyName:@"fill-extrusion-color" isBoolean:NO]; - [self testPropertyName:@"fill-extrusion-has-vertical-gradient" isBoolean:YES]; - [self testPropertyName:@"fill-extrusion-height" isBoolean:NO]; - [self testPropertyName:@"fill-extrusion-opacity" isBoolean:NO]; - [self testPropertyName:@"fill-extrusion-pattern" isBoolean:NO]; - [self testPropertyName:@"fill-extrusion-translation" isBoolean:NO]; - [self testPropertyName:@"fill-extrusion-translation-anchor" isBoolean:NO]; -} - -- (void)testValueAdditions { - XCTAssertEqual([NSValue valueWithMGLFillExtrusionTranslationAnchor:MGLFillExtrusionTranslationAnchorMap].MGLFillExtrusionTranslationAnchorValue, MGLFillExtrusionTranslationAnchorMap); - XCTAssertEqual([NSValue valueWithMGLFillExtrusionTranslationAnchor:MGLFillExtrusionTranslationAnchorViewport].MGLFillExtrusionTranslationAnchorValue, MGLFillExtrusionTranslationAnchorViewport); -} - -@end diff --git a/platform/darwin/test/MGLFillStyleLayerTests.mm b/platform/darwin/test/MGLFillStyleLayerTests.mm deleted file mode 100644 index e37bd537a7b..00000000000 --- a/platform/darwin/test/MGLFillStyleLayerTests.mm +++ /dev/null @@ -1,487 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLStyleLayerTests.h" -#import "../../darwin/src/NSDate+MGLAdditions.h" - -#import "MGLStyleLayer_Private.h" - -#include -#include -#include - -@interface MGLFillLayerTests : MGLStyleLayerTests -@end - -@implementation MGLFillLayerTests - -+ (NSString *)layerType { - return @"fill"; -} - -- (void)testPredicates { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - MGLFillStyleLayer *layer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - - XCTAssertNil(layer.sourceLayerIdentifier); - layer.sourceLayerIdentifier = @"layerID"; - XCTAssertEqualObjects(layer.sourceLayerIdentifier, @"layerID"); - layer.sourceLayerIdentifier = nil; - XCTAssertNil(layer.sourceLayerIdentifier); - - XCTAssertNil(layer.predicate); - layer.predicate = [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]; - XCTAssertEqualObjects(layer.predicate, [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]); - layer.predicate = nil; - XCTAssertNil(layer.predicate); -} - -- (void)testProperties { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - - MGLFillStyleLayer *layer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertEqualObjects(@(layer.rawLayer->getTypeInfo()->type), @"fill"); - auto rawLayer = static_cast(layer.rawLayer); - - MGLTransition transitionTest = MGLTransitionMake(5, 4); - - - // fill-antialias - { - XCTAssertTrue(rawLayer->getFillAntialias().isUndefined(), - @"fill-antialias should be unset initially."); - NSExpression *defaultExpression = layer.fillAntialiased; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"false"]; - layer.fillAntialiased = constantExpression; - mbgl::style::PropertyValue propertyValue = { false }; - XCTAssertEqual(rawLayer->getFillAntialias(), propertyValue, - @"Setting fillAntialiased to a constant value expression should update fill-antialias."); - XCTAssertEqualObjects(layer.fillAntialiased, constantExpression, - @"fillAntialiased should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"false"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillAntialiased = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(false), 18.0, literal(false)) - ); - } - - XCTAssertEqual(rawLayer->getFillAntialias(), propertyValue, - @"Setting fillAntialiased to a camera expression should update fill-antialias."); - XCTAssertEqualObjects(layer.fillAntialiased, functionExpression, - @"fillAntialiased should round-trip camera expressions."); - - - layer.fillAntialiased = nil; - XCTAssertTrue(rawLayer->getFillAntialias().isUndefined(), - @"Unsetting fillAntialiased should return fill-antialias to the default value."); - XCTAssertEqualObjects(layer.fillAntialiased, defaultExpression, - @"fillAntialiased should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.fillAntialiased = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.fillAntialiased = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // fill-color - { - XCTAssertTrue(rawLayer->getFillColor().isUndefined(), - @"fill-color should be unset initially."); - NSExpression *defaultExpression = layer.fillColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.fillColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getFillColor(), propertyValue, - @"Setting fillColor to a constant value expression should update fill-color."); - XCTAssertEqualObjects(layer.fillColor, constantExpression, - @"fillColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getFillColor(), propertyValue, - @"Setting fillColor to a camera expression should update fill-color."); - XCTAssertEqualObjects(layer.fillColor, functionExpression, - @"fillColor should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.fillColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getFillColor(), propertyValue, - @"Setting fillColor to a data expression should update fill-color."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.fillColor, pedanticFunctionExpression, - @"fillColor should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.fillColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1)))) - ); - } - - XCTAssertEqual(rawLayer->getFillColor(), propertyValue, - @"Setting fillColor to a camera-data expression should update fill-color."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.fillColor, pedanticFunctionExpression, - @"fillColor should round-trip camera-data expressions."); - - layer.fillColor = nil; - XCTAssertTrue(rawLayer->getFillColor().isUndefined(), - @"Unsetting fillColor should return fill-color to the default value."); - XCTAssertEqualObjects(layer.fillColor, defaultExpression, - @"fillColor should return the default value after being unset."); - // Transition property test - layer.fillColorTransition = transitionTest; - auto toptions = rawLayer->getFillColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition fillColorTransition = layer.fillColorTransition; - XCTAssertEqual(fillColorTransition.delay, transitionTest.delay); - XCTAssertEqual(fillColorTransition.duration, transitionTest.duration); - } - - // fill-opacity - { - XCTAssertTrue(rawLayer->getFillOpacity().isUndefined(), - @"fill-opacity should be unset initially."); - NSExpression *defaultExpression = layer.fillOpacity; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.fillOpacity = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getFillOpacity(), propertyValue, - @"Setting fillOpacity to a constant value expression should update fill-opacity."); - XCTAssertEqualObjects(layer.fillOpacity, constantExpression, - @"fillOpacity should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getFillOpacity(), propertyValue, - @"Setting fillOpacity to a camera expression should update fill-opacity."); - XCTAssertEqualObjects(layer.fillOpacity, functionExpression, - @"fillOpacity should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.fillOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getFillOpacity(), propertyValue, - @"Setting fillOpacity to a data expression should update fill-opacity."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.fillOpacity, pedanticFunctionExpression, - @"fillOpacity should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.fillOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getFillOpacity(), propertyValue, - @"Setting fillOpacity to a camera-data expression should update fill-opacity."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.fillOpacity, pedanticFunctionExpression, - @"fillOpacity should round-trip camera-data expressions."); - - layer.fillOpacity = nil; - XCTAssertTrue(rawLayer->getFillOpacity().isUndefined(), - @"Unsetting fillOpacity should return fill-opacity to the default value."); - XCTAssertEqualObjects(layer.fillOpacity, defaultExpression, - @"fillOpacity should return the default value after being unset."); - // Transition property test - layer.fillOpacityTransition = transitionTest; - auto toptions = rawLayer->getFillOpacityTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition fillOpacityTransition = layer.fillOpacityTransition; - XCTAssertEqual(fillOpacityTransition.delay, transitionTest.delay); - XCTAssertEqual(fillOpacityTransition.duration, transitionTest.duration); - } - - // fill-outline-color - { - XCTAssertTrue(rawLayer->getFillOutlineColor().isUndefined(), - @"fill-outline-color should be unset initially."); - NSExpression *defaultExpression = layer.fillOutlineColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.fillOutlineColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getFillOutlineColor(), propertyValue, - @"Setting fillOutlineColor to a constant value expression should update fill-outline-color."); - XCTAssertEqualObjects(layer.fillOutlineColor, constantExpression, - @"fillOutlineColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillOutlineColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getFillOutlineColor(), propertyValue, - @"Setting fillOutlineColor to a camera expression should update fill-outline-color."); - XCTAssertEqualObjects(layer.fillOutlineColor, functionExpression, - @"fillOutlineColor should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.fillOutlineColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getFillOutlineColor(), propertyValue, - @"Setting fillOutlineColor to a data expression should update fill-outline-color."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.fillOutlineColor, pedanticFunctionExpression, - @"fillOutlineColor should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.fillOutlineColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1)))) - ); - } - - XCTAssertEqual(rawLayer->getFillOutlineColor(), propertyValue, - @"Setting fillOutlineColor to a camera-data expression should update fill-outline-color."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.fillOutlineColor, pedanticFunctionExpression, - @"fillOutlineColor should round-trip camera-data expressions."); - - layer.fillOutlineColor = nil; - XCTAssertTrue(rawLayer->getFillOutlineColor().isUndefined(), - @"Unsetting fillOutlineColor should return fill-outline-color to the default value."); - XCTAssertEqualObjects(layer.fillOutlineColor, defaultExpression, - @"fillOutlineColor should return the default value after being unset."); - // Transition property test - layer.fillOutlineColorTransition = transitionTest; - auto toptions = rawLayer->getFillOutlineColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition fillOutlineColorTransition = layer.fillOutlineColorTransition; - XCTAssertEqual(fillOutlineColorTransition.delay, transitionTest.delay); - XCTAssertEqual(fillOutlineColorTransition.duration, transitionTest.duration); - } - - // fill-pattern - { - XCTAssertTrue(rawLayer->getFillPattern().isUndefined(), - @"fill-pattern should be unset initially."); - NSExpression *defaultExpression = layer.fillPattern; - - NSExpression *constantExpression = [NSExpression expressionForConstantValue:@"Fill Pattern"]; - layer.fillPattern = constantExpression; - mbgl::style::PropertyValue propertyValue = { "Fill Pattern" }; - XCTAssertEqual(rawLayer->getFillPattern(), propertyValue, - @"Setting fillPattern to a constant value expression should update fill-pattern."); - XCTAssertEqualObjects(layer.fillPattern, constantExpression, - @"fillPattern should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"MGL_FUNCTION('image', 'Fill Pattern')"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillPattern = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), image(literal("Fill Pattern")), 18.0, image(literal("Fill Pattern"))) - ); - } - - XCTAssertEqual(rawLayer->getFillPattern(), propertyValue, - @"Setting fillPattern to a camera expression should update fill-pattern."); - XCTAssertEqualObjects(layer.fillPattern, functionExpression, - @"fillPattern should round-trip camera expressions."); - - - layer.fillPattern = nil; - XCTAssertTrue(rawLayer->getFillPattern().isUndefined(), - @"Unsetting fillPattern should return fill-pattern to the default value."); - XCTAssertEqualObjects(layer.fillPattern, defaultExpression, - @"fillPattern should return the default value after being unset."); - // Transition property test - layer.fillPatternTransition = transitionTest; - auto toptions = rawLayer->getFillPatternTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition fillPatternTransition = layer.fillPatternTransition; - XCTAssertEqual(fillPatternTransition.delay, transitionTest.delay); - XCTAssertEqual(fillPatternTransition.duration, transitionTest.duration); - } - - // fill-translate - { - XCTAssertTrue(rawLayer->getFillTranslate().isUndefined(), - @"fill-translate should be unset initially."); - NSExpression *defaultExpression = layer.fillTranslation; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", -#if TARGET_OS_IPHONE - [NSValue valueWithCGVector:CGVectorMake(1, 1)] -#else - [NSValue valueWithMGLVector:CGVectorMake(1, -1)] -#endif - ]; - layer.fillTranslation = constantExpression; - mbgl::style::PropertyValue> propertyValue = { { 1, 1 } }; - XCTAssertEqual(rawLayer->getFillTranslate(), propertyValue, - @"Setting fillTranslation to a constant value expression should update fill-translate."); - XCTAssertEqualObjects(layer.fillTranslation, constantExpression, - @"fillTranslation should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillTranslation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({ 1, 1 }), 18.0, literal({ 1, 1 })) - ); - } - - XCTAssertEqual(rawLayer->getFillTranslate(), propertyValue, - @"Setting fillTranslation to a camera expression should update fill-translate."); - XCTAssertEqualObjects(layer.fillTranslation, functionExpression, - @"fillTranslation should round-trip camera expressions."); - - - layer.fillTranslation = nil; - XCTAssertTrue(rawLayer->getFillTranslate().isUndefined(), - @"Unsetting fillTranslation should return fill-translate to the default value."); - XCTAssertEqualObjects(layer.fillTranslation, defaultExpression, - @"fillTranslation should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.fillTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.fillTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // fill-translate-anchor - { - XCTAssertTrue(rawLayer->getFillTranslateAnchor().isUndefined(), - @"fill-translate-anchor should be unset initially."); - NSExpression *defaultExpression = layer.fillTranslationAnchor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - layer.fillTranslationAnchor = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::TranslateAnchorType::Viewport }; - XCTAssertEqual(rawLayer->getFillTranslateAnchor(), propertyValue, - @"Setting fillTranslationAnchor to a constant value expression should update fill-translate-anchor."); - XCTAssertEqualObjects(layer.fillTranslationAnchor, constantExpression, - @"fillTranslationAnchor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.fillTranslationAnchor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("viewport"), 18.0, literal("viewport")) - ); - } - - XCTAssertEqual(rawLayer->getFillTranslateAnchor(), propertyValue, - @"Setting fillTranslationAnchor to a camera expression should update fill-translate-anchor."); - XCTAssertEqualObjects(layer.fillTranslationAnchor, functionExpression, - @"fillTranslationAnchor should round-trip camera expressions."); - - - layer.fillTranslationAnchor = nil; - XCTAssertTrue(rawLayer->getFillTranslateAnchor().isUndefined(), - @"Unsetting fillTranslationAnchor should return fill-translate-anchor to the default value."); - XCTAssertEqualObjects(layer.fillTranslationAnchor, defaultExpression, - @"fillTranslationAnchor should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.fillTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.fillTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } -} - -- (void)testPropertyNames { - [self testPropertyName:@"is-fill-antialiased" isBoolean:YES]; - [self testPropertyName:@"fill-color" isBoolean:NO]; - [self testPropertyName:@"fill-opacity" isBoolean:NO]; - [self testPropertyName:@"fill-outline-color" isBoolean:NO]; - [self testPropertyName:@"fill-pattern" isBoolean:NO]; - [self testPropertyName:@"fill-translation" isBoolean:NO]; - [self testPropertyName:@"fill-translation-anchor" isBoolean:NO]; -} - -- (void)testValueAdditions { - XCTAssertEqual([NSValue valueWithMGLFillTranslationAnchor:MGLFillTranslationAnchorMap].MGLFillTranslationAnchorValue, MGLFillTranslationAnchorMap); - XCTAssertEqual([NSValue valueWithMGLFillTranslationAnchor:MGLFillTranslationAnchorViewport].MGLFillTranslationAnchorValue, MGLFillTranslationAnchorViewport); -} - -@end diff --git a/platform/darwin/test/MGLGeometryTests.mm b/platform/darwin/test/MGLGeometryTests.mm deleted file mode 100644 index e3b1836e8d9..00000000000 --- a/platform/darwin/test/MGLGeometryTests.mm +++ /dev/null @@ -1,211 +0,0 @@ -#import -#import - -#import "../../darwin/src/MGLGeometry_Private.h" - -@interface MGLGeometryTests : XCTestCase -@end - -@implementation MGLGeometryTests - -- (void)testCoordinateBoundsIsEmpty { - MGLCoordinateBounds emptyBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(10, 0)); - XCTAssertTrue(MGLCoordinateBoundsIsEmpty(emptyBounds)); - XCTAssertFalse(MGLCoordinateSpanEqualToCoordinateSpan(MGLCoordinateSpanZero, MGLCoordinateBoundsGetCoordinateSpan(emptyBounds))); -} - -- (void)testAngleConversions { - XCTAssertEqualWithAccuracy(-180, MGLDegreesFromRadians(-M_PI), 1e-5); - XCTAssertEqual(0, MGLDegreesFromRadians(0)); - XCTAssertEqualWithAccuracy(45, MGLDegreesFromRadians(M_PI_4), 1e-5); - XCTAssertEqualWithAccuracy(90, MGLDegreesFromRadians(M_PI_2), 1e-5); - XCTAssertEqualWithAccuracy(180, MGLDegreesFromRadians(M_PI), 1e-5); - XCTAssertEqualWithAccuracy(360, MGLDegreesFromRadians(2 * M_PI), 1e-5); - XCTAssertEqualWithAccuracy(720, MGLDegreesFromRadians(4 * M_PI), 1e-5); - - XCTAssertEqualWithAccuracy(-360, MGLDegreesFromRadians(MGLRadiansFromDegrees(-360)), 1e-4); - XCTAssertEqualWithAccuracy(-180, MGLDegreesFromRadians(MGLRadiansFromDegrees(-180)), 1e-5); - XCTAssertEqualWithAccuracy(-90, MGLDegreesFromRadians(MGLRadiansFromDegrees(-90)), 1e-5); - XCTAssertEqualWithAccuracy(-45, MGLDegreesFromRadians(MGLRadiansFromDegrees(-45)), 1e-5); - XCTAssertEqualWithAccuracy(0, MGLDegreesFromRadians(MGLRadiansFromDegrees(0)), 1e-5); - XCTAssertEqualWithAccuracy(45, MGLDegreesFromRadians(MGLRadiansFromDegrees(45)), 1e-5); - XCTAssertEqualWithAccuracy(90, MGLDegreesFromRadians(MGLRadiansFromDegrees(90)), 1e-5); - XCTAssertEqualWithAccuracy(180, MGLDegreesFromRadians(MGLRadiansFromDegrees(180)), 1e-5); - XCTAssertEqualWithAccuracy(360, MGLDegreesFromRadians(MGLRadiansFromDegrees(360)), 1e-4); -} - -- (void)testAltitudeConversions { - CGSize tallSize = CGSizeMake(600, 1200); - CGSize midSize = CGSizeMake(600, 800); - CGSize shortSize = CGSizeMake(600, 400); - - XCTAssertEqualWithAccuracy(1800, MGLAltitudeForZoomLevel(MGLZoomLevelForAltitude(1800, 0, 0, midSize), 0, 0, midSize), 1e-8); - XCTAssertLessThan(MGLZoomLevelForAltitude(1800, 0, 0, midSize), MGLZoomLevelForAltitude(1800, 0, 0, tallSize)); - XCTAssertGreaterThan(MGLZoomLevelForAltitude(1800, 0, 0, midSize), MGLZoomLevelForAltitude(1800, 0, 0, shortSize)); - - XCTAssertEqualWithAccuracy(0, MGLZoomLevelForAltitude(MGLAltitudeForZoomLevel(0, 0, 0, midSize), 0, 0, midSize), 1e-8); - XCTAssertEqualWithAccuracy(18, MGLZoomLevelForAltitude(MGLAltitudeForZoomLevel(18, 0, 0, midSize), 0, 0, midSize), 1e-8); - - XCTAssertEqualWithAccuracy(0, MGLZoomLevelForAltitude(MGLAltitudeForZoomLevel(0, 0, 40, midSize), 0, 40, midSize), 1e-8); - XCTAssertEqualWithAccuracy(18, MGLZoomLevelForAltitude(MGLAltitudeForZoomLevel(18, 0, 40, midSize), 0, 40, midSize), 1e-8); - - XCTAssertEqualWithAccuracy(0, MGLZoomLevelForAltitude(MGLAltitudeForZoomLevel(0, 60, 40, midSize), 60, 40, midSize), 1e-8); - XCTAssertEqualWithAccuracy(18, MGLZoomLevelForAltitude(MGLAltitudeForZoomLevel(18, 60, 40, midSize), 60, 40, midSize), 1e-8); -} - -- (void)testGeometryBoxing { - CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(38.9131982, -77.0325453144239); - CLLocationCoordinate2D roundTrippedCoordinate = [NSValue valueWithMGLCoordinate:coordinate].MGLCoordinateValue; - - XCTAssertEqual(coordinate.latitude, roundTrippedCoordinate.latitude, @"Latitude should round-trip."); - XCTAssertEqual(coordinate.longitude, roundTrippedCoordinate.longitude, @"Longitude should round-trip."); - - MGLCoordinateSpan span = MGLCoordinateSpanMake(4.383333333333335, -4.299999999999997); - MGLCoordinateSpan roundTrippedSpan = [NSValue valueWithMGLCoordinateSpan:span].MGLCoordinateSpanValue; - - XCTAssertEqual(span.latitudeDelta, roundTrippedSpan.latitudeDelta, @"Latitude delta should round-trip."); - XCTAssertEqual(span.longitudeDelta, roundTrippedSpan.longitudeDelta, @"Longitude delta should round-trip."); - - MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(38.9131982, -77.0325453144239), - CLLocationCoordinate2DMake(37.7757368, -122.4135302)); - MGLCoordinateBounds roundTrippedBounds = [NSValue valueWithMGLCoordinateBounds:bounds].MGLCoordinateBoundsValue; - - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:bounds.sw], - [NSValue valueWithMGLCoordinate:roundTrippedBounds.sw], - @"Southwest should round-trip."); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:bounds.ne], - [NSValue valueWithMGLCoordinate:roundTrippedBounds.ne], - @"Northeast should round-trip."); -} - -- (void)testCoordinateInCoordinateBounds { - CLLocationCoordinate2D ne = CLLocationCoordinate2DMake(45, -104); - CLLocationCoordinate2D sw = CLLocationCoordinate2DMake(41, -111); - MGLCoordinateBounds wyoming = MGLCoordinateBoundsMake(sw, ne); - - CLLocationCoordinate2D centerOfWyoming = CLLocationCoordinate2DMake(43, -107.5); - - XCTAssertTrue(MGLCoordinateInCoordinateBounds(ne, wyoming)); - XCTAssertTrue(MGLCoordinateInCoordinateBounds(sw, wyoming)); - XCTAssertTrue(MGLCoordinateInCoordinateBounds(centerOfWyoming, wyoming)); - - CLLocationCoordinate2D australia = CLLocationCoordinate2DMake(-25, 135); - CLLocationCoordinate2D brazil = CLLocationCoordinate2DMake(-12, -50); - CLLocationCoordinate2D china = CLLocationCoordinate2DMake(35, 100); - - XCTAssertFalse(MGLCoordinateInCoordinateBounds(australia, wyoming)); - XCTAssertFalse(MGLCoordinateInCoordinateBounds(brazil, wyoming)); - XCTAssertFalse(MGLCoordinateInCoordinateBounds(china, wyoming)); - XCTAssertFalse(MGLCoordinateInCoordinateBounds(kCLLocationCoordinate2DInvalid, wyoming)); -} - -- (void)testGeoJSONDeserialization { - NSData *data = [@"{\"type\": \"Feature\", \"geometry\": {\"type\": \"Point\", \"coordinates\": [0, 0]}, \"properties\": {}}" dataUsingEncoding:NSUTF8StringEncoding]; - NSError *error; - MGLPointFeature *feature = (MGLPointFeature *)[MGLShape shapeWithData:data encoding:NSUTF8StringEncoding error:&error]; - XCTAssertNil(error, @"Valid GeoJSON data should produce no error on deserialization."); - XCTAssertNotNil(feature, @"Valid GeoJSON data should produce an object on deserialization."); - XCTAssertTrue([feature isKindOfClass:[MGLPointFeature class]], @"Valid GeoJSON point feature data should produce an MGLPointFeature."); - XCTAssertEqual(feature.attributes.count, 0UL); - XCTAssertEqual(feature.coordinate.latitude, 0); - XCTAssertEqual(feature.coordinate.longitude, 0); - - data = [@"{\"type\": \"Feature\", \"feature\": {\"type\": \"Point\", \"coordinates\": [0, 0]}}" dataUsingEncoding:NSUTF8StringEncoding]; - error = nil; - MGLShape *shape = [MGLShape shapeWithData:data encoding:NSUTF8StringEncoding error:&error]; - XCTAssertNotNil(error, @"Invalid GeoJSON data should produce an error on deserialization."); - XCTAssertNil(shape, @"Invalid GeoJSON data should produce no object on deserialization."); -} - -- (void)testGeoJSONSerialization { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - feature.identifier = @504; - feature.coordinate = CLLocationCoordinate2DMake(29.95, -90.066667); - - NSData *data = [feature geoJSONDataUsingEncoding:NSUTF8StringEncoding]; - XCTAssertNotNil(data, @"MGLPointFeature should serialize as an UTF-8 string data object."); - NSError *error; - NSDictionary *serializedGeoJSON = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; - XCTAssertNil(error, @"Serialized GeoJSON data should be deserializable JSON."); - XCTAssertNotNil(serializedGeoJSON, @"Serialized GeoJSON data should be valid JSON."); - XCTAssertTrue([serializedGeoJSON isKindOfClass:[NSDictionary class]], @"Serialized GeoJSON data should be a JSON object."); - NSDictionary *geoJSON = @{ - @"type": @"Feature", - @"id": @504, - @"geometry": @{ - @"type": @"Point", - @"coordinates": @[ - @(-90.066667), - @29.95, - ], - }, - @"properties": @{}, - }; - XCTAssertEqualObjects(serializedGeoJSON, geoJSON, @"MGLPointFeature should serialize as a GeoJSON point feature."); -} - -- (void)testMGLCoordinateBoundsToMGLCoordinateQuad { - MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(37.936, -80.425), - CLLocationCoordinate2DMake(46.437, -71.516)); - - MGLCoordinateQuad quad = MGLCoordinateQuadFromCoordinateBounds(bounds); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:bounds.sw], - [NSValue valueWithMGLCoordinate:quad.bottomLeft], - @"Bounds southwest should be bottom left of quad."); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:bounds.ne], - [NSValue valueWithMGLCoordinate:quad.topRight], - @"Bounds northeast should be top right of quad."); - - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(46.437, -80.425)], - [NSValue valueWithMGLCoordinate:quad.topLeft], - @"Quad top left should be computed correctly."); - XCTAssertEqualObjects([NSValue valueWithMGLCoordinate:CLLocationCoordinate2DMake(37.936, -71.516)], - [NSValue valueWithMGLCoordinate:quad.bottomRight], - @"Quad bottom right should be computed correctly."); -} - -- (void)testMGLMapPoint { - MGLMapPoint point = MGLMapPointForCoordinate(CLLocationCoordinate2DMake(37.936, -80.425), 0.0); - - MGLMapPoint roundTrippedPoint = [NSValue valueWithMGLMapPoint:point].MGLMapPointValue; - XCTAssertEqual(point.x, roundTrippedPoint.x); - XCTAssertEqual(point.y, roundTrippedPoint.y); - XCTAssertEqual(point.zoomLevel, roundTrippedPoint.zoomLevel); -} - -- (void)testMGLLocationCoordinate2DIsValid { - { - CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(37.936, -71.516); - XCTAssertTrue(MGLLocationCoordinate2DIsValid(coordinate)); - } - { - CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(46.816368, 5.844469); - XCTAssertTrue(MGLLocationCoordinate2DIsValid(coordinate)); - } - { - CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(-21.512680, 23.334703); - XCTAssertTrue(MGLLocationCoordinate2DIsValid(coordinate)); - } - { - CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(-44.947936, -73.081313); - XCTAssertTrue(MGLLocationCoordinate2DIsValid(coordinate)); - } - { - CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(19.333630, 203.555405); - XCTAssertTrue(MGLLocationCoordinate2DIsValid(coordinate)); - } - { - CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(23.254696, -240.795323); - XCTAssertTrue(MGLLocationCoordinate2DIsValid(coordinate)); - } - { - CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(91, 361); - XCTAssertFalse(MGLLocationCoordinate2DIsValid(coordinate)); - } - { - CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(-91, -361); - XCTAssertFalse(MGLLocationCoordinate2DIsValid(coordinate)); - } -} - -@end diff --git a/platform/darwin/test/MGLHeatmapColorTests.mm b/platform/darwin/test/MGLHeatmapColorTests.mm deleted file mode 100644 index 19f9b4e86e1..00000000000 --- a/platform/darwin/test/MGLHeatmapColorTests.mm +++ /dev/null @@ -1,62 +0,0 @@ -#import -#import - -#import "MGLStyleLayer_Private.h" - -#include - -@interface MGLHeatmapColorTests : XCTestCase -@end - -@implementation MGLHeatmapColorTests - -- (void)testProperties { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - MGLHeatmapStyleLayer *layer = [[MGLHeatmapStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - - auto rawLayer = static_cast(layer.rawLayer); - - XCTAssertTrue(rawLayer->getHeatmapColor().isUndefined(), - @"heatmap-color should be unset initially."); - NSExpression *defaultExpression = layer.heatmapColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.heatmapColor = constantExpression; - - - mbgl::style::PropertyValue propertyValue = { 0xff }; - XCTAssertEqual(rawLayer->getHeatmapColor().evaluate(0.0), mbgl::Color::red(), - @"Setting heatmapColor to a constant value expression should update heatmap-color."); - XCTAssertEqualObjects(layer.heatmapColor, constantExpression, - @"heatmapColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *constantExpression2 = [NSExpression expressionWithFormat:@"%@", [MGLColor blueColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($heatmapDensity, %@, %@)", constantExpression, @{@12: constantExpression2}]; - layer.heatmapColor = functionExpression; - - XCTAssertEqual(rawLayer->getHeatmapColor().evaluate(11.0), mbgl::Color::red(), - @"Setting heatmapColor to an expression depending on $heatmapDensity should update heatmap-color."); - XCTAssertEqual(rawLayer->getHeatmapColor().evaluate(12.0), mbgl::Color::blue(), - @"Setting heatmapColor to an expression depending on $heatmapDensity should update heatmap-color."); - XCTAssertEqualObjects(layer.heatmapColor, functionExpression, - @"heatmapColor should round-trip expressions depending on $heatmapDensity."); - - layer.heatmapColor = nil; - XCTAssertTrue(rawLayer->getHeatmapColor().isUndefined(), - @"Unsetting heatmapColor should return heatmap-color to the default value."); - // The contained colors aren’t object equal, even though their descriptions are. - XCTAssertEqualObjects(layer.heatmapColor.description, defaultExpression.description, - @"heatmapColor should return the default value after being unset."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - XCTAssertThrowsSpecificNamed(layer.heatmapColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a camera expression is applied to heatmapColor."); - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.heatmapColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a data expression is applied to heatmapColor."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.heatmapColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); -} - -@end diff --git a/platform/darwin/test/MGLHeatmapStyleLayerTests.mm b/platform/darwin/test/MGLHeatmapStyleLayerTests.mm deleted file mode 100644 index 98d314cb9f6..00000000000 --- a/platform/darwin/test/MGLHeatmapStyleLayerTests.mm +++ /dev/null @@ -1,313 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLStyleLayerTests.h" -#import "../../darwin/src/NSDate+MGLAdditions.h" - -#import "MGLStyleLayer_Private.h" - -#include -#include -#include - -@interface MGLHeatmapLayerTests : MGLStyleLayerTests -@end - -@implementation MGLHeatmapLayerTests - -+ (NSString *)layerType { - return @"heatmap"; -} - -- (void)testPredicates { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - MGLHeatmapStyleLayer *layer = [[MGLHeatmapStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - - XCTAssertNil(layer.sourceLayerIdentifier); - layer.sourceLayerIdentifier = @"layerID"; - XCTAssertEqualObjects(layer.sourceLayerIdentifier, @"layerID"); - layer.sourceLayerIdentifier = nil; - XCTAssertNil(layer.sourceLayerIdentifier); - - XCTAssertNil(layer.predicate); - layer.predicate = [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]; - XCTAssertEqualObjects(layer.predicate, [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]); - layer.predicate = nil; - XCTAssertNil(layer.predicate); -} - -- (void)testProperties { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - - MGLHeatmapStyleLayer *layer = [[MGLHeatmapStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertEqualObjects(@(layer.rawLayer->getTypeInfo()->type), @"heatmap"); - auto rawLayer = static_cast(layer.rawLayer); - - MGLTransition transitionTest = MGLTransitionMake(5, 4); - - - // heatmap-intensity - { - XCTAssertTrue(rawLayer->getHeatmapIntensity().isUndefined(), - @"heatmap-intensity should be unset initially."); - NSExpression *defaultExpression = layer.heatmapIntensity; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.heatmapIntensity = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getHeatmapIntensity(), propertyValue, - @"Setting heatmapIntensity to a constant value expression should update heatmap-intensity."); - XCTAssertEqualObjects(layer.heatmapIntensity, constantExpression, - @"heatmapIntensity should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.heatmapIntensity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getHeatmapIntensity(), propertyValue, - @"Setting heatmapIntensity to a camera expression should update heatmap-intensity."); - XCTAssertEqualObjects(layer.heatmapIntensity, functionExpression, - @"heatmapIntensity should round-trip camera expressions."); - - - layer.heatmapIntensity = nil; - XCTAssertTrue(rawLayer->getHeatmapIntensity().isUndefined(), - @"Unsetting heatmapIntensity should return heatmap-intensity to the default value."); - XCTAssertEqualObjects(layer.heatmapIntensity, defaultExpression, - @"heatmapIntensity should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.heatmapIntensity = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.heatmapIntensity = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.heatmapIntensityTransition = transitionTest; - auto toptions = rawLayer->getHeatmapIntensityTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition heatmapIntensityTransition = layer.heatmapIntensityTransition; - XCTAssertEqual(heatmapIntensityTransition.delay, transitionTest.delay); - XCTAssertEqual(heatmapIntensityTransition.duration, transitionTest.duration); - } - - // heatmap-opacity - { - XCTAssertTrue(rawLayer->getHeatmapOpacity().isUndefined(), - @"heatmap-opacity should be unset initially."); - NSExpression *defaultExpression = layer.heatmapOpacity; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.heatmapOpacity = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getHeatmapOpacity(), propertyValue, - @"Setting heatmapOpacity to a constant value expression should update heatmap-opacity."); - XCTAssertEqualObjects(layer.heatmapOpacity, constantExpression, - @"heatmapOpacity should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.heatmapOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getHeatmapOpacity(), propertyValue, - @"Setting heatmapOpacity to a camera expression should update heatmap-opacity."); - XCTAssertEqualObjects(layer.heatmapOpacity, functionExpression, - @"heatmapOpacity should round-trip camera expressions."); - - - layer.heatmapOpacity = nil; - XCTAssertTrue(rawLayer->getHeatmapOpacity().isUndefined(), - @"Unsetting heatmapOpacity should return heatmap-opacity to the default value."); - XCTAssertEqualObjects(layer.heatmapOpacity, defaultExpression, - @"heatmapOpacity should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.heatmapOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.heatmapOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLHeatmapLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.heatmapOpacityTransition = transitionTest; - auto toptions = rawLayer->getHeatmapOpacityTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition heatmapOpacityTransition = layer.heatmapOpacityTransition; - XCTAssertEqual(heatmapOpacityTransition.delay, transitionTest.delay); - XCTAssertEqual(heatmapOpacityTransition.duration, transitionTest.duration); - } - - // heatmap-radius - { - XCTAssertTrue(rawLayer->getHeatmapRadius().isUndefined(), - @"heatmap-radius should be unset initially."); - NSExpression *defaultExpression = layer.heatmapRadius; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.heatmapRadius = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getHeatmapRadius(), propertyValue, - @"Setting heatmapRadius to a constant value expression should update heatmap-radius."); - XCTAssertEqualObjects(layer.heatmapRadius, constantExpression, - @"heatmapRadius should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.heatmapRadius = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getHeatmapRadius(), propertyValue, - @"Setting heatmapRadius to a camera expression should update heatmap-radius."); - XCTAssertEqualObjects(layer.heatmapRadius, functionExpression, - @"heatmapRadius should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.heatmapRadius = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getHeatmapRadius(), propertyValue, - @"Setting heatmapRadius to a data expression should update heatmap-radius."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.heatmapRadius, pedanticFunctionExpression, - @"heatmapRadius should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.heatmapRadius = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getHeatmapRadius(), propertyValue, - @"Setting heatmapRadius to a camera-data expression should update heatmap-radius."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.heatmapRadius, pedanticFunctionExpression, - @"heatmapRadius should round-trip camera-data expressions."); - - layer.heatmapRadius = nil; - XCTAssertTrue(rawLayer->getHeatmapRadius().isUndefined(), - @"Unsetting heatmapRadius should return heatmap-radius to the default value."); - XCTAssertEqualObjects(layer.heatmapRadius, defaultExpression, - @"heatmapRadius should return the default value after being unset."); - // Transition property test - layer.heatmapRadiusTransition = transitionTest; - auto toptions = rawLayer->getHeatmapRadiusTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition heatmapRadiusTransition = layer.heatmapRadiusTransition; - XCTAssertEqual(heatmapRadiusTransition.delay, transitionTest.delay); - XCTAssertEqual(heatmapRadiusTransition.duration, transitionTest.duration); - } - - // heatmap-weight - { - XCTAssertTrue(rawLayer->getHeatmapWeight().isUndefined(), - @"heatmap-weight should be unset initially."); - NSExpression *defaultExpression = layer.heatmapWeight; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.heatmapWeight = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getHeatmapWeight(), propertyValue, - @"Setting heatmapWeight to a constant value expression should update heatmap-weight."); - XCTAssertEqualObjects(layer.heatmapWeight, constantExpression, - @"heatmapWeight should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.heatmapWeight = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getHeatmapWeight(), propertyValue, - @"Setting heatmapWeight to a camera expression should update heatmap-weight."); - XCTAssertEqualObjects(layer.heatmapWeight, functionExpression, - @"heatmapWeight should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.heatmapWeight = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getHeatmapWeight(), propertyValue, - @"Setting heatmapWeight to a data expression should update heatmap-weight."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.heatmapWeight, pedanticFunctionExpression, - @"heatmapWeight should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.heatmapWeight = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getHeatmapWeight(), propertyValue, - @"Setting heatmapWeight to a camera-data expression should update heatmap-weight."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.heatmapWeight, pedanticFunctionExpression, - @"heatmapWeight should round-trip camera-data expressions."); - - layer.heatmapWeight = nil; - XCTAssertTrue(rawLayer->getHeatmapWeight().isUndefined(), - @"Unsetting heatmapWeight should return heatmap-weight to the default value."); - XCTAssertEqualObjects(layer.heatmapWeight, defaultExpression, - @"heatmapWeight should return the default value after being unset."); - } -} - -- (void)testPropertyNames { - [self testPropertyName:@"heatmap-intensity" isBoolean:NO]; - [self testPropertyName:@"heatmap-opacity" isBoolean:NO]; - [self testPropertyName:@"heatmap-radius" isBoolean:NO]; - [self testPropertyName:@"heatmap-weight" isBoolean:NO]; -} - -@end diff --git a/platform/darwin/test/MGLHillshadeStyleLayerTests.mm b/platform/darwin/test/MGLHillshadeStyleLayerTests.mm deleted file mode 100644 index a52f36e8c66..00000000000 --- a/platform/darwin/test/MGLHillshadeStyleLayerTests.mm +++ /dev/null @@ -1,349 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLStyleLayerTests.h" -#import "../../darwin/src/NSDate+MGLAdditions.h" - -#import "MGLStyleLayer_Private.h" - -#include -#include -#include - -@interface MGLHillshadeLayerTests : MGLStyleLayerTests -@end - -@implementation MGLHillshadeLayerTests - -+ (NSString *)layerType { - return @"hillshade"; -} - -- (void)testProperties { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - - MGLHillshadeStyleLayer *layer = [[MGLHillshadeStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertEqualObjects(@(layer.rawLayer->getTypeInfo()->type), @"hillshade"); - auto rawLayer = static_cast(layer.rawLayer); - - MGLTransition transitionTest = MGLTransitionMake(5, 4); - - - // hillshade-accent-color - { - XCTAssertTrue(rawLayer->getHillshadeAccentColor().isUndefined(), - @"hillshade-accent-color should be unset initially."); - NSExpression *defaultExpression = layer.hillshadeAccentColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.hillshadeAccentColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getHillshadeAccentColor(), propertyValue, - @"Setting hillshadeAccentColor to a constant value expression should update hillshade-accent-color."); - XCTAssertEqualObjects(layer.hillshadeAccentColor, constantExpression, - @"hillshadeAccentColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.hillshadeAccentColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getHillshadeAccentColor(), propertyValue, - @"Setting hillshadeAccentColor to a camera expression should update hillshade-accent-color."); - XCTAssertEqualObjects(layer.hillshadeAccentColor, functionExpression, - @"hillshadeAccentColor should round-trip camera expressions."); - - - layer.hillshadeAccentColor = nil; - XCTAssertTrue(rawLayer->getHillshadeAccentColor().isUndefined(), - @"Unsetting hillshadeAccentColor should return hillshade-accent-color to the default value."); - XCTAssertEqualObjects(layer.hillshadeAccentColor, defaultExpression, - @"hillshadeAccentColor should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.hillshadeAccentColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.hillshadeAccentColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.hillshadeAccentColorTransition = transitionTest; - auto toptions = rawLayer->getHillshadeAccentColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition hillshadeAccentColorTransition = layer.hillshadeAccentColorTransition; - XCTAssertEqual(hillshadeAccentColorTransition.delay, transitionTest.delay); - XCTAssertEqual(hillshadeAccentColorTransition.duration, transitionTest.duration); - } - - // hillshade-exaggeration - { - XCTAssertTrue(rawLayer->getHillshadeExaggeration().isUndefined(), - @"hillshade-exaggeration should be unset initially."); - NSExpression *defaultExpression = layer.hillshadeExaggeration; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.hillshadeExaggeration = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getHillshadeExaggeration(), propertyValue, - @"Setting hillshadeExaggeration to a constant value expression should update hillshade-exaggeration."); - XCTAssertEqualObjects(layer.hillshadeExaggeration, constantExpression, - @"hillshadeExaggeration should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.hillshadeExaggeration = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getHillshadeExaggeration(), propertyValue, - @"Setting hillshadeExaggeration to a camera expression should update hillshade-exaggeration."); - XCTAssertEqualObjects(layer.hillshadeExaggeration, functionExpression, - @"hillshadeExaggeration should round-trip camera expressions."); - - - layer.hillshadeExaggeration = nil; - XCTAssertTrue(rawLayer->getHillshadeExaggeration().isUndefined(), - @"Unsetting hillshadeExaggeration should return hillshade-exaggeration to the default value."); - XCTAssertEqualObjects(layer.hillshadeExaggeration, defaultExpression, - @"hillshadeExaggeration should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.hillshadeExaggeration = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.hillshadeExaggeration = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.hillshadeExaggerationTransition = transitionTest; - auto toptions = rawLayer->getHillshadeExaggerationTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition hillshadeExaggerationTransition = layer.hillshadeExaggerationTransition; - XCTAssertEqual(hillshadeExaggerationTransition.delay, transitionTest.delay); - XCTAssertEqual(hillshadeExaggerationTransition.duration, transitionTest.duration); - } - - // hillshade-highlight-color - { - XCTAssertTrue(rawLayer->getHillshadeHighlightColor().isUndefined(), - @"hillshade-highlight-color should be unset initially."); - NSExpression *defaultExpression = layer.hillshadeHighlightColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.hillshadeHighlightColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getHillshadeHighlightColor(), propertyValue, - @"Setting hillshadeHighlightColor to a constant value expression should update hillshade-highlight-color."); - XCTAssertEqualObjects(layer.hillshadeHighlightColor, constantExpression, - @"hillshadeHighlightColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.hillshadeHighlightColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getHillshadeHighlightColor(), propertyValue, - @"Setting hillshadeHighlightColor to a camera expression should update hillshade-highlight-color."); - XCTAssertEqualObjects(layer.hillshadeHighlightColor, functionExpression, - @"hillshadeHighlightColor should round-trip camera expressions."); - - - layer.hillshadeHighlightColor = nil; - XCTAssertTrue(rawLayer->getHillshadeHighlightColor().isUndefined(), - @"Unsetting hillshadeHighlightColor should return hillshade-highlight-color to the default value."); - XCTAssertEqualObjects(layer.hillshadeHighlightColor, defaultExpression, - @"hillshadeHighlightColor should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.hillshadeHighlightColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.hillshadeHighlightColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.hillshadeHighlightColorTransition = transitionTest; - auto toptions = rawLayer->getHillshadeHighlightColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition hillshadeHighlightColorTransition = layer.hillshadeHighlightColorTransition; - XCTAssertEqual(hillshadeHighlightColorTransition.delay, transitionTest.delay); - XCTAssertEqual(hillshadeHighlightColorTransition.duration, transitionTest.duration); - } - - // hillshade-illumination-anchor - { - XCTAssertTrue(rawLayer->getHillshadeIlluminationAnchor().isUndefined(), - @"hillshade-illumination-anchor should be unset initially."); - NSExpression *defaultExpression = layer.hillshadeIlluminationAnchor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - layer.hillshadeIlluminationAnchor = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::HillshadeIlluminationAnchorType::Viewport }; - XCTAssertEqual(rawLayer->getHillshadeIlluminationAnchor(), propertyValue, - @"Setting hillshadeIlluminationAnchor to a constant value expression should update hillshade-illumination-anchor."); - XCTAssertEqualObjects(layer.hillshadeIlluminationAnchor, constantExpression, - @"hillshadeIlluminationAnchor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.hillshadeIlluminationAnchor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("viewport"), 18.0, literal("viewport")) - ); - } - - XCTAssertEqual(rawLayer->getHillshadeIlluminationAnchor(), propertyValue, - @"Setting hillshadeIlluminationAnchor to a camera expression should update hillshade-illumination-anchor."); - XCTAssertEqualObjects(layer.hillshadeIlluminationAnchor, functionExpression, - @"hillshadeIlluminationAnchor should round-trip camera expressions."); - - - layer.hillshadeIlluminationAnchor = nil; - XCTAssertTrue(rawLayer->getHillshadeIlluminationAnchor().isUndefined(), - @"Unsetting hillshadeIlluminationAnchor should return hillshade-illumination-anchor to the default value."); - XCTAssertEqualObjects(layer.hillshadeIlluminationAnchor, defaultExpression, - @"hillshadeIlluminationAnchor should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.hillshadeIlluminationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.hillshadeIlluminationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // hillshade-illumination-direction - { - XCTAssertTrue(rawLayer->getHillshadeIlluminationDirection().isUndefined(), - @"hillshade-illumination-direction should be unset initially."); - NSExpression *defaultExpression = layer.hillshadeIlluminationDirection; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.hillshadeIlluminationDirection = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getHillshadeIlluminationDirection(), propertyValue, - @"Setting hillshadeIlluminationDirection to a constant value expression should update hillshade-illumination-direction."); - XCTAssertEqualObjects(layer.hillshadeIlluminationDirection, constantExpression, - @"hillshadeIlluminationDirection should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.hillshadeIlluminationDirection = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getHillshadeIlluminationDirection(), propertyValue, - @"Setting hillshadeIlluminationDirection to a camera expression should update hillshade-illumination-direction."); - XCTAssertEqualObjects(layer.hillshadeIlluminationDirection, functionExpression, - @"hillshadeIlluminationDirection should round-trip camera expressions."); - - - layer.hillshadeIlluminationDirection = nil; - XCTAssertTrue(rawLayer->getHillshadeIlluminationDirection().isUndefined(), - @"Unsetting hillshadeIlluminationDirection should return hillshade-illumination-direction to the default value."); - XCTAssertEqualObjects(layer.hillshadeIlluminationDirection, defaultExpression, - @"hillshadeIlluminationDirection should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.hillshadeIlluminationDirection = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.hillshadeIlluminationDirection = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // hillshade-shadow-color - { - XCTAssertTrue(rawLayer->getHillshadeShadowColor().isUndefined(), - @"hillshade-shadow-color should be unset initially."); - NSExpression *defaultExpression = layer.hillshadeShadowColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.hillshadeShadowColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getHillshadeShadowColor(), propertyValue, - @"Setting hillshadeShadowColor to a constant value expression should update hillshade-shadow-color."); - XCTAssertEqualObjects(layer.hillshadeShadowColor, constantExpression, - @"hillshadeShadowColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.hillshadeShadowColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getHillshadeShadowColor(), propertyValue, - @"Setting hillshadeShadowColor to a camera expression should update hillshade-shadow-color."); - XCTAssertEqualObjects(layer.hillshadeShadowColor, functionExpression, - @"hillshadeShadowColor should round-trip camera expressions."); - - - layer.hillshadeShadowColor = nil; - XCTAssertTrue(rawLayer->getHillshadeShadowColor().isUndefined(), - @"Unsetting hillshadeShadowColor should return hillshade-shadow-color to the default value."); - XCTAssertEqualObjects(layer.hillshadeShadowColor, defaultExpression, - @"hillshadeShadowColor should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.hillshadeShadowColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.hillshadeShadowColor = functionExpression, NSException, NSInvalidArgumentException, @"MGLHillshadeLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.hillshadeShadowColorTransition = transitionTest; - auto toptions = rawLayer->getHillshadeShadowColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition hillshadeShadowColorTransition = layer.hillshadeShadowColorTransition; - XCTAssertEqual(hillshadeShadowColorTransition.delay, transitionTest.delay); - XCTAssertEqual(hillshadeShadowColorTransition.duration, transitionTest.duration); - } -} - -- (void)testPropertyNames { - [self testPropertyName:@"hillshade-accent-color" isBoolean:NO]; - [self testPropertyName:@"hillshade-exaggeration" isBoolean:NO]; - [self testPropertyName:@"hillshade-highlight-color" isBoolean:NO]; - [self testPropertyName:@"hillshade-illumination-anchor" isBoolean:NO]; - [self testPropertyName:@"hillshade-illumination-direction" isBoolean:NO]; - [self testPropertyName:@"hillshade-shadow-color" isBoolean:NO]; -} - -- (void)testValueAdditions { - XCTAssertEqual([NSValue valueWithMGLHillshadeIlluminationAnchor:MGLHillshadeIlluminationAnchorMap].MGLHillshadeIlluminationAnchorValue, MGLHillshadeIlluminationAnchorMap); - XCTAssertEqual([NSValue valueWithMGLHillshadeIlluminationAnchor:MGLHillshadeIlluminationAnchorViewport].MGLHillshadeIlluminationAnchorValue, MGLHillshadeIlluminationAnchorViewport); -} - -@end diff --git a/platform/darwin/test/MGLImageSourceTests.m b/platform/darwin/test/MGLImageSourceTests.m deleted file mode 100644 index 38fcd38709b..00000000000 --- a/platform/darwin/test/MGLImageSourceTests.m +++ /dev/null @@ -1,42 +0,0 @@ -#import - -#import - -@interface MGLImageSourceTests : XCTestCase - -@end - -@implementation MGLImageSourceTests - - -- (void)testMGLImageSourceWithImageURL { - - MGLCoordinateQuad quad = { { 80, 37}, { 81, 37}, { 81, 39}, { 80, 39}}; - MGLImageSource *source = [[MGLImageSource alloc] initWithIdentifier:@"source-id" coordinateQuad:quad URL:[NSURL URLWithString:@"http://host/image.png"]]; - - XCTAssertNotNil(source.URL); - XCTAssertEqualObjects(source.URL.absoluteString, @"http://host/image.png"); - XCTAssertNil(source.image); -} - -- (void)testMGLImageSourceWithImage { - - NSString *imageName = @"RadarImage"; -#if TARGET_OS_IPHONE - MGLImage *image = [MGLImage imageNamed:imageName - inBundle:[NSBundle bundleForClass:[self class]] - compatibleWithTraitCollection:nil]; -#else - MGLImage *image = [[NSBundle bundleForClass:[self class]] imageForResource:imageName]; -#endif - XCTAssertNotNil(image); - - MGLCoordinateQuad quad = { { 80, 37}, { 81, 37}, { 81, 39}, { 80, 39}}; - MGLImageSource *source = [[MGLImageSource alloc] initWithIdentifier:@"source-id" coordinateQuad:quad image:image]; - - XCTAssertNotNil(source.image); - XCTAssertEqualObjects(source.image, image); - XCTAssertNil(source.URL); -} - -@end diff --git a/platform/darwin/test/MGLLightTest.mm b/platform/darwin/test/MGLLightTest.mm deleted file mode 100644 index 0bc7b15af3b..00000000000 --- a/platform/darwin/test/MGLLightTest.mm +++ /dev/null @@ -1,133 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -#import -#import - -#import "MGLLight_Private.h" - -#import "../../darwin/src/NSDate+MGLAdditions.h" - -#import -#import -#include - -@interface MGLLightTest : XCTestCase - -@end - -@implementation MGLLightTest - -- (void)testProperties { - - MGLTransition defaultTransition = MGLTransitionMake(0, 0); - MGLTransition transition = MGLTransitionMake(6, 3); - mbgl::style::TransitionOptions transitionOptions { { MGLDurationFromTimeInterval(6) }, { MGLDurationFromTimeInterval(3) } }; - - // anchor - { - mbgl::style::Light light; - MGLLight *mglLight = [[MGLLight alloc] initWithMBGLLight:&light]; - auto lightFromMGLLight = mglLight.mbglLight; - - XCTAssertEqual(light.getDefaultAnchor(), lightFromMGLLight.getAnchor()); - XCTAssertEqual(mglLight.anchor.expressionType, NSConstantValueExpressionType, @"mglLight.anchor isn’t a constant value expression."); - XCTAssertEqualObjects(mglLight.anchor.constantValue, @"viewport"); - - mbgl::style::PropertyValue propertyValue = { mbgl::style::LightAnchorType::Viewport }; - light.setAnchor(propertyValue); - mglLight = [[MGLLight alloc] initWithMBGLLight:&light]; - lightFromMGLLight = mglLight.mbglLight; - - XCTAssertEqual(light.getAnchor(), lightFromMGLLight.getAnchor()); - } - - // position - { - mbgl::style::Light light; - MGLLight *mglLight = [[MGLLight alloc] initWithMBGLLight:&light]; - auto lightFromMGLLight = mglLight.mbglLight; - - XCTAssertEqual(light.getDefaultPosition(), lightFromMGLLight.getPosition()); - auto positionTransition = lightFromMGLLight.getPositionTransition(); - XCTAssert(positionTransition.delay && MGLTimeIntervalFromDuration(*positionTransition.delay) == defaultTransition.delay); - XCTAssert(positionTransition.duration && MGLTimeIntervalFromDuration(*positionTransition.duration) == defaultTransition.duration); - - std::array positionArray = { { 6, 180, 90 } }; - mbgl::style::Position position = { positionArray }; - mbgl::style::PropertyValue propertyValue = { position }; - light.setPosition(propertyValue); - light.setPositionTransition(transitionOptions); - - mglLight = [[MGLLight alloc] initWithMBGLLight:&light]; - lightFromMGLLight = mglLight.mbglLight; - - XCTAssertEqual(light.getPosition(), lightFromMGLLight.getPosition()); - positionTransition = lightFromMGLLight.getPositionTransition(); - XCTAssert(positionTransition.delay && MGLTimeIntervalFromDuration(*positionTransition.delay) == transition.delay); - XCTAssert(positionTransition.duration && MGLTimeIntervalFromDuration(*positionTransition.duration) == transition.duration); - - } - - // color - { - mbgl::style::Light light; - MGLLight *mglLight = [[MGLLight alloc] initWithMBGLLight:&light]; - auto lightFromMGLLight = mglLight.mbglLight; - - XCTAssertEqual(light.getDefaultColor(), lightFromMGLLight.getColor()); - auto colorTransition = lightFromMGLLight.getColorTransition(); - XCTAssert(colorTransition.delay && MGLTimeIntervalFromDuration(*colorTransition.delay) == defaultTransition.delay); - XCTAssert(colorTransition.duration && MGLTimeIntervalFromDuration(*colorTransition.duration) == defaultTransition.duration); - - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - light.setColor(propertyValue); - light.setColorTransition(transitionOptions); - - mglLight = [[MGLLight alloc] initWithMBGLLight:&light]; - lightFromMGLLight = mglLight.mbglLight; - - XCTAssertEqual(light.getColor(), lightFromMGLLight.getColor()); - colorTransition = lightFromMGLLight.getColorTransition(); - XCTAssert(colorTransition.delay && MGLTimeIntervalFromDuration(*colorTransition.delay) == transition.delay); - XCTAssert(colorTransition.duration && MGLTimeIntervalFromDuration(*colorTransition.duration) == transition.duration); - - } - - // intensity - { - mbgl::style::Light light; - MGLLight *mglLight = [[MGLLight alloc] initWithMBGLLight:&light]; - auto lightFromMGLLight = mglLight.mbglLight; - - XCTAssertEqual(light.getDefaultIntensity(), lightFromMGLLight.getIntensity()); - auto intensityTransition = lightFromMGLLight.getIntensityTransition(); - XCTAssert(intensityTransition.delay && MGLTimeIntervalFromDuration(*intensityTransition.delay) == defaultTransition.delay); - XCTAssert(intensityTransition.duration && MGLTimeIntervalFromDuration(*intensityTransition.duration) == defaultTransition.duration); - - mbgl::style::PropertyValue propertyValue = { 1.0 }; - light.setIntensity(propertyValue); - light.setIntensityTransition(transitionOptions); - - mglLight = [[MGLLight alloc] initWithMBGLLight:&light]; - lightFromMGLLight = mglLight.mbglLight; - - XCTAssertEqual(light.getIntensity(), lightFromMGLLight.getIntensity()); - intensityTransition = lightFromMGLLight.getIntensityTransition(); - XCTAssert(intensityTransition.delay && MGLTimeIntervalFromDuration(*intensityTransition.delay) == transition.delay); - XCTAssert(intensityTransition.duration && MGLTimeIntervalFromDuration(*intensityTransition.duration) == transition.duration); - - } - -} - -- (void)testValueAdditions { - MGLSphericalPosition position = MGLSphericalPositionMake(1.15, 210, 30); - - XCTAssertEqual([NSValue valueWithMGLSphericalPosition:position].MGLSphericalPositionValue.radial, position.radial); - XCTAssertEqual([NSValue valueWithMGLSphericalPosition:position].MGLSphericalPositionValue.azimuthal, position.azimuthal); - XCTAssertEqual([NSValue valueWithMGLSphericalPosition:position].MGLSphericalPositionValue.polar, position.polar); - XCTAssertEqual([NSValue valueWithMGLLightAnchor:MGLLightAnchorMap].MGLLightAnchorValue, MGLLightAnchorMap); - XCTAssertEqual([NSValue valueWithMGLLightAnchor:MGLLightAnchorViewport].MGLLightAnchorValue, MGLLightAnchorViewport); -} - -@end diff --git a/platform/darwin/test/MGLLightTest.mm.ejs b/platform/darwin/test/MGLLightTest.mm.ejs deleted file mode 100644 index 35ff58b6d5d..00000000000 --- a/platform/darwin/test/MGLLightTest.mm.ejs +++ /dev/null @@ -1,91 +0,0 @@ -<% - const type = locals.type; - const properties = locals.properties; --%> -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. -#import -#import - -#import "MGLLight_Private.h" - -#import "../../darwin/src/NSDate+MGLAdditions.h" - -#import -#import -#include - -@interface MGLLightTest : XCTestCase - -@end - -@implementation MGLLightTest - -- (void)testProperties { - - MGLTransition defaultTransition = MGLTransitionMake(0, 0); - MGLTransition transition = MGLTransitionMake(6, 3); - mbgl::style::TransitionOptions transitionOptions { { MGLDurationFromTimeInterval(6) }, { MGLDurationFromTimeInterval(3) } }; - -<% for (const property of properties) { -%> - // <%- property.name %> - { - mbgl::style::Light light; - MGLLight *mglLight = [[MGLLight alloc] initWithMBGLLight:&light]; - auto lightFromMGLLight = mglLight.mbglLight; - - XCTAssertEqual(light.getDefault<%- camelize(property.name) -%>(), lightFromMGLLight.get<%- camelize(property.name) -%>()); -<% if (property.transition) { -%> - auto <%- camelizeWithLeadingLowercase(property.name) -%>Transition = lightFromMGLLight.get<%- camelize(property.name) -%>Transition(); - XCTAssert(<%- camelizeWithLeadingLowercase(property.name) -%>Transition.delay && MGLTimeIntervalFromDuration(*<%- camelizeWithLeadingLowercase(property.name) -%>Transition.delay) == defaultTransition.delay); - XCTAssert(<%- camelizeWithLeadingLowercase(property.name) -%>Transition.duration && MGLTimeIntervalFromDuration(*<%- camelizeWithLeadingLowercase(property.name) -%>Transition.duration) == defaultTransition.duration); - -<% } -%> -<% if (property.type == "enum" && property.default) { -%> - XCTAssertEqual(mglLight.<%- camelizeWithLeadingLowercase(property.name) -%>.expressionType, NSConstantValueExpressionType, @"mglLight.<%- camelizeWithLeadingLowercase(property.name) -%> isn’t a constant value expression."); - XCTAssertEqualObjects(mglLight.<%- camelizeWithLeadingLowercase(property.name) -%>.constantValue, @"<%- property.default -%>"); - -<% } -%> -<% if (property.type == "array") { -%> - std::array positionArray = { { 6, 180, 90 } }; - mbgl::style::Position position = { positionArray }; - mbgl::style::PropertyValue propertyValue = { position }; -<% } else { -%> - mbgl::style::PropertyValue<<%- mbglType(property) %>> propertyValue = { <%- mbglTestValue(property, type) %> }; -<% } -%> - light.set<%- camelize(property.name) -%>(propertyValue); -<% if (property.transition) { -%> - light.set<%- camelize(property.name) -%>Transition(transitionOptions); - -<% } -%> - mglLight = [[MGLLight alloc] initWithMBGLLight:&light]; - lightFromMGLLight = mglLight.mbglLight; - - XCTAssertEqual(light.get<%- camelize(property.name) -%>(), lightFromMGLLight.get<%- camelize(property.name) -%>()); -<% if (property.transition) { -%> - <%- camelizeWithLeadingLowercase(property.name) -%>Transition = lightFromMGLLight.get<%- camelize(property.name) -%>Transition(); - XCTAssert(<%- camelizeWithLeadingLowercase(property.name) -%>Transition.delay && MGLTimeIntervalFromDuration(*<%- camelizeWithLeadingLowercase(property.name) -%>Transition.delay) == transition.delay); - XCTAssert(<%- camelizeWithLeadingLowercase(property.name) -%>Transition.duration && MGLTimeIntervalFromDuration(*<%- camelizeWithLeadingLowercase(property.name) -%>Transition.duration) == transition.duration); - -<% } -%> - } - -<% } -%> -} - -- (void)testValueAdditions { - MGLSphericalPosition position = MGLSphericalPositionMake(1.15, 210, 30); - - XCTAssertEqual([NSValue valueWithMGLSphericalPosition:position].MGLSphericalPositionValue.radial, position.radial); - XCTAssertEqual([NSValue valueWithMGLSphericalPosition:position].MGLSphericalPositionValue.azimuthal, position.azimuthal); - XCTAssertEqual([NSValue valueWithMGLSphericalPosition:position].MGLSphericalPositionValue.polar, position.polar); -<% for (const property of properties) { -%> -<% if (property.type == "enum") { -%> -<% for (const value in property.values) { -%> - XCTAssertEqual([NSValue valueWithMGLLight<%- camelize(property.name) %>:MGLLight<%- camelize(property.name) %><%- camelize(value) %>].MGLLight<%- camelize(property.name) %>Value, MGLLight<%- camelize(property.name) %><%- camelize(value) %>); -<% } -%> -<% } -%> -<% } -%> -} - -@end diff --git a/platform/darwin/test/MGLLineStyleLayerTests.mm b/platform/darwin/test/MGLLineStyleLayerTests.mm deleted file mode 100644 index 46f040b6019..00000000000 --- a/platform/darwin/test/MGLLineStyleLayerTests.mm +++ /dev/null @@ -1,904 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLStyleLayerTests.h" -#import "../../darwin/src/NSDate+MGLAdditions.h" - -#import "MGLStyleLayer_Private.h" - -#include -#include -#include - -@interface MGLLineLayerTests : MGLStyleLayerTests -@end - -@implementation MGLLineLayerTests - -+ (NSString *)layerType { - return @"line"; -} - -- (void)testPredicates { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - MGLLineStyleLayer *layer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - - XCTAssertNil(layer.sourceLayerIdentifier); - layer.sourceLayerIdentifier = @"layerID"; - XCTAssertEqualObjects(layer.sourceLayerIdentifier, @"layerID"); - layer.sourceLayerIdentifier = nil; - XCTAssertNil(layer.sourceLayerIdentifier); - - XCTAssertNil(layer.predicate); - layer.predicate = [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]; - XCTAssertEqualObjects(layer.predicate, [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]); - layer.predicate = nil; - XCTAssertNil(layer.predicate); -} - -- (void)testProperties { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - - MGLLineStyleLayer *layer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertEqualObjects(@(layer.rawLayer->getTypeInfo()->type), @"line"); - auto rawLayer = static_cast(layer.rawLayer); - - MGLTransition transitionTest = MGLTransitionMake(5, 4); - - - // line-cap - { - XCTAssertTrue(rawLayer->getLineCap().isUndefined(), - @"line-cap should be unset initially."); - NSExpression *defaultExpression = layer.lineCap; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'square'"]; - layer.lineCap = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::LineCapType::Square }; - XCTAssertEqual(rawLayer->getLineCap(), propertyValue, - @"Setting lineCap to a constant value expression should update line-cap."); - XCTAssertEqualObjects(layer.lineCap, constantExpression, - @"lineCap should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'square'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineCap = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("square"), 18.0, literal("square")) - ); - } - - XCTAssertEqual(rawLayer->getLineCap(), propertyValue, - @"Setting lineCap to a camera expression should update line-cap."); - XCTAssertEqualObjects(layer.lineCap, functionExpression, - @"lineCap should round-trip camera expressions."); - - - layer.lineCap = nil; - XCTAssertTrue(rawLayer->getLineCap().isUndefined(), - @"Unsetting lineCap should return line-cap to the default value."); - XCTAssertEqualObjects(layer.lineCap, defaultExpression, - @"lineCap should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.lineCap = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.lineCap = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // line-join - { - XCTAssertTrue(rawLayer->getLineJoin().isUndefined(), - @"line-join should be unset initially."); - NSExpression *defaultExpression = layer.lineJoin; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'miter'"]; - layer.lineJoin = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::LineJoinType::Miter }; - XCTAssertEqual(rawLayer->getLineJoin(), propertyValue, - @"Setting lineJoin to a constant value expression should update line-join."); - XCTAssertEqualObjects(layer.lineJoin, constantExpression, - @"lineJoin should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'miter'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineJoin = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("miter"), 18.0, literal("miter")) - ); - } - - XCTAssertEqual(rawLayer->getLineJoin(), propertyValue, - @"Setting lineJoin to a camera expression should update line-join."); - XCTAssertEqualObjects(layer.lineJoin, functionExpression, - @"lineJoin should round-trip camera expressions."); - - - layer.lineJoin = nil; - XCTAssertTrue(rawLayer->getLineJoin().isUndefined(), - @"Unsetting lineJoin should return line-join to the default value."); - XCTAssertEqualObjects(layer.lineJoin, defaultExpression, - @"lineJoin should return the default value after being unset."); - } - - // line-miter-limit - { - XCTAssertTrue(rawLayer->getLineMiterLimit().isUndefined(), - @"line-miter-limit should be unset initially."); - NSExpression *defaultExpression = layer.lineMiterLimit; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.lineMiterLimit = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getLineMiterLimit(), propertyValue, - @"Setting lineMiterLimit to a constant value expression should update line-miter-limit."); - XCTAssertEqualObjects(layer.lineMiterLimit, constantExpression, - @"lineMiterLimit should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineMiterLimit = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getLineMiterLimit(), propertyValue, - @"Setting lineMiterLimit to a camera expression should update line-miter-limit."); - XCTAssertEqualObjects(layer.lineMiterLimit, functionExpression, - @"lineMiterLimit should round-trip camera expressions."); - - - layer.lineMiterLimit = nil; - XCTAssertTrue(rawLayer->getLineMiterLimit().isUndefined(), - @"Unsetting lineMiterLimit should return line-miter-limit to the default value."); - XCTAssertEqualObjects(layer.lineMiterLimit, defaultExpression, - @"lineMiterLimit should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.lineMiterLimit = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.lineMiterLimit = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // line-round-limit - { - XCTAssertTrue(rawLayer->getLineRoundLimit().isUndefined(), - @"line-round-limit should be unset initially."); - NSExpression *defaultExpression = layer.lineRoundLimit; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.lineRoundLimit = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getLineRoundLimit(), propertyValue, - @"Setting lineRoundLimit to a constant value expression should update line-round-limit."); - XCTAssertEqualObjects(layer.lineRoundLimit, constantExpression, - @"lineRoundLimit should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineRoundLimit = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getLineRoundLimit(), propertyValue, - @"Setting lineRoundLimit to a camera expression should update line-round-limit."); - XCTAssertEqualObjects(layer.lineRoundLimit, functionExpression, - @"lineRoundLimit should round-trip camera expressions."); - - - layer.lineRoundLimit = nil; - XCTAssertTrue(rawLayer->getLineRoundLimit().isUndefined(), - @"Unsetting lineRoundLimit should return line-round-limit to the default value."); - XCTAssertEqualObjects(layer.lineRoundLimit, defaultExpression, - @"lineRoundLimit should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.lineRoundLimit = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.lineRoundLimit = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // line-blur - { - XCTAssertTrue(rawLayer->getLineBlur().isUndefined(), - @"line-blur should be unset initially."); - NSExpression *defaultExpression = layer.lineBlur; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.lineBlur = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getLineBlur(), propertyValue, - @"Setting lineBlur to a constant value expression should update line-blur."); - XCTAssertEqualObjects(layer.lineBlur, constantExpression, - @"lineBlur should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineBlur = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getLineBlur(), propertyValue, - @"Setting lineBlur to a camera expression should update line-blur."); - XCTAssertEqualObjects(layer.lineBlur, functionExpression, - @"lineBlur should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.lineBlur = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getLineBlur(), propertyValue, - @"Setting lineBlur to a data expression should update line-blur."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.lineBlur, pedanticFunctionExpression, - @"lineBlur should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.lineBlur = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getLineBlur(), propertyValue, - @"Setting lineBlur to a camera-data expression should update line-blur."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.lineBlur, pedanticFunctionExpression, - @"lineBlur should round-trip camera-data expressions."); - - layer.lineBlur = nil; - XCTAssertTrue(rawLayer->getLineBlur().isUndefined(), - @"Unsetting lineBlur should return line-blur to the default value."); - XCTAssertEqualObjects(layer.lineBlur, defaultExpression, - @"lineBlur should return the default value after being unset."); - // Transition property test - layer.lineBlurTransition = transitionTest; - auto toptions = rawLayer->getLineBlurTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition lineBlurTransition = layer.lineBlurTransition; - XCTAssertEqual(lineBlurTransition.delay, transitionTest.delay); - XCTAssertEqual(lineBlurTransition.duration, transitionTest.duration); - } - - // line-color - { - XCTAssertTrue(rawLayer->getLineColor().isUndefined(), - @"line-color should be unset initially."); - NSExpression *defaultExpression = layer.lineColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.lineColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getLineColor(), propertyValue, - @"Setting lineColor to a constant value expression should update line-color."); - XCTAssertEqualObjects(layer.lineColor, constantExpression, - @"lineColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getLineColor(), propertyValue, - @"Setting lineColor to a camera expression should update line-color."); - XCTAssertEqualObjects(layer.lineColor, functionExpression, - @"lineColor should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.lineColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getLineColor(), propertyValue, - @"Setting lineColor to a data expression should update line-color."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.lineColor, pedanticFunctionExpression, - @"lineColor should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.lineColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1)))) - ); - } - - XCTAssertEqual(rawLayer->getLineColor(), propertyValue, - @"Setting lineColor to a camera-data expression should update line-color."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.lineColor, pedanticFunctionExpression, - @"lineColor should round-trip camera-data expressions."); - - layer.lineColor = nil; - XCTAssertTrue(rawLayer->getLineColor().isUndefined(), - @"Unsetting lineColor should return line-color to the default value."); - XCTAssertEqualObjects(layer.lineColor, defaultExpression, - @"lineColor should return the default value after being unset."); - // Transition property test - layer.lineColorTransition = transitionTest; - auto toptions = rawLayer->getLineColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition lineColorTransition = layer.lineColorTransition; - XCTAssertEqual(lineColorTransition.delay, transitionTest.delay); - XCTAssertEqual(lineColorTransition.duration, transitionTest.duration); - } - - // line-dasharray - { - XCTAssertTrue(rawLayer->getLineDasharray().isUndefined(), - @"line-dasharray should be unset initially."); - NSExpression *defaultExpression = layer.lineDashPattern; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"{1, 2}"]; - layer.lineDashPattern = constantExpression; - mbgl::style::PropertyValue> propertyValue = { {1, 2} }; - XCTAssertEqual(rawLayer->getLineDasharray(), propertyValue, - @"Setting lineDashPattern to a constant value expression should update line-dasharray."); - XCTAssertEqualObjects(layer.lineDashPattern, constantExpression, - @"lineDashPattern should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{1, 2}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineDashPattern = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({1, 2}), 18.0, literal({1, 2})) - ); - } - - XCTAssertEqual(rawLayer->getLineDasharray(), propertyValue, - @"Setting lineDashPattern to a camera expression should update line-dasharray."); - XCTAssertEqualObjects(layer.lineDashPattern, functionExpression, - @"lineDashPattern should round-trip camera expressions."); - - - layer.lineDashPattern = nil; - XCTAssertTrue(rawLayer->getLineDasharray().isUndefined(), - @"Unsetting lineDashPattern should return line-dasharray to the default value."); - XCTAssertEqualObjects(layer.lineDashPattern, defaultExpression, - @"lineDashPattern should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.lineDashPattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.lineDashPattern = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // line-gap-width - { - XCTAssertTrue(rawLayer->getLineGapWidth().isUndefined(), - @"line-gap-width should be unset initially."); - NSExpression *defaultExpression = layer.lineGapWidth; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.lineGapWidth = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getLineGapWidth(), propertyValue, - @"Setting lineGapWidth to a constant value expression should update line-gap-width."); - XCTAssertEqualObjects(layer.lineGapWidth, constantExpression, - @"lineGapWidth should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineGapWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getLineGapWidth(), propertyValue, - @"Setting lineGapWidth to a camera expression should update line-gap-width."); - XCTAssertEqualObjects(layer.lineGapWidth, functionExpression, - @"lineGapWidth should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.lineGapWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getLineGapWidth(), propertyValue, - @"Setting lineGapWidth to a data expression should update line-gap-width."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.lineGapWidth, pedanticFunctionExpression, - @"lineGapWidth should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.lineGapWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getLineGapWidth(), propertyValue, - @"Setting lineGapWidth to a camera-data expression should update line-gap-width."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.lineGapWidth, pedanticFunctionExpression, - @"lineGapWidth should round-trip camera-data expressions."); - - layer.lineGapWidth = nil; - XCTAssertTrue(rawLayer->getLineGapWidth().isUndefined(), - @"Unsetting lineGapWidth should return line-gap-width to the default value."); - XCTAssertEqualObjects(layer.lineGapWidth, defaultExpression, - @"lineGapWidth should return the default value after being unset."); - // Transition property test - layer.lineGapWidthTransition = transitionTest; - auto toptions = rawLayer->getLineGapWidthTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition lineGapWidthTransition = layer.lineGapWidthTransition; - XCTAssertEqual(lineGapWidthTransition.delay, transitionTest.delay); - XCTAssertEqual(lineGapWidthTransition.duration, transitionTest.duration); - } - - // line-offset - { - XCTAssertTrue(rawLayer->getLineOffset().isUndefined(), - @"line-offset should be unset initially."); - NSExpression *defaultExpression = layer.lineOffset; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.lineOffset = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getLineOffset(), propertyValue, - @"Setting lineOffset to a constant value expression should update line-offset."); - XCTAssertEqualObjects(layer.lineOffset, constantExpression, - @"lineOffset should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineOffset = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getLineOffset(), propertyValue, - @"Setting lineOffset to a camera expression should update line-offset."); - XCTAssertEqualObjects(layer.lineOffset, functionExpression, - @"lineOffset should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.lineOffset = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getLineOffset(), propertyValue, - @"Setting lineOffset to a data expression should update line-offset."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.lineOffset, pedanticFunctionExpression, - @"lineOffset should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.lineOffset = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getLineOffset(), propertyValue, - @"Setting lineOffset to a camera-data expression should update line-offset."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.lineOffset, pedanticFunctionExpression, - @"lineOffset should round-trip camera-data expressions."); - - layer.lineOffset = nil; - XCTAssertTrue(rawLayer->getLineOffset().isUndefined(), - @"Unsetting lineOffset should return line-offset to the default value."); - XCTAssertEqualObjects(layer.lineOffset, defaultExpression, - @"lineOffset should return the default value after being unset."); - // Transition property test - layer.lineOffsetTransition = transitionTest; - auto toptions = rawLayer->getLineOffsetTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition lineOffsetTransition = layer.lineOffsetTransition; - XCTAssertEqual(lineOffsetTransition.delay, transitionTest.delay); - XCTAssertEqual(lineOffsetTransition.duration, transitionTest.duration); - } - - // line-opacity - { - XCTAssertTrue(rawLayer->getLineOpacity().isUndefined(), - @"line-opacity should be unset initially."); - NSExpression *defaultExpression = layer.lineOpacity; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.lineOpacity = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getLineOpacity(), propertyValue, - @"Setting lineOpacity to a constant value expression should update line-opacity."); - XCTAssertEqualObjects(layer.lineOpacity, constantExpression, - @"lineOpacity should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getLineOpacity(), propertyValue, - @"Setting lineOpacity to a camera expression should update line-opacity."); - XCTAssertEqualObjects(layer.lineOpacity, functionExpression, - @"lineOpacity should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.lineOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getLineOpacity(), propertyValue, - @"Setting lineOpacity to a data expression should update line-opacity."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.lineOpacity, pedanticFunctionExpression, - @"lineOpacity should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.lineOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getLineOpacity(), propertyValue, - @"Setting lineOpacity to a camera-data expression should update line-opacity."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.lineOpacity, pedanticFunctionExpression, - @"lineOpacity should round-trip camera-data expressions."); - - layer.lineOpacity = nil; - XCTAssertTrue(rawLayer->getLineOpacity().isUndefined(), - @"Unsetting lineOpacity should return line-opacity to the default value."); - XCTAssertEqualObjects(layer.lineOpacity, defaultExpression, - @"lineOpacity should return the default value after being unset."); - // Transition property test - layer.lineOpacityTransition = transitionTest; - auto toptions = rawLayer->getLineOpacityTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition lineOpacityTransition = layer.lineOpacityTransition; - XCTAssertEqual(lineOpacityTransition.delay, transitionTest.delay); - XCTAssertEqual(lineOpacityTransition.duration, transitionTest.duration); - } - - // line-pattern - { - XCTAssertTrue(rawLayer->getLinePattern().isUndefined(), - @"line-pattern should be unset initially."); - NSExpression *defaultExpression = layer.linePattern; - - NSExpression *constantExpression = [NSExpression expressionForConstantValue:@"Line Pattern"]; - layer.linePattern = constantExpression; - mbgl::style::PropertyValue propertyValue = { "Line Pattern" }; - XCTAssertEqual(rawLayer->getLinePattern(), propertyValue, - @"Setting linePattern to a constant value expression should update line-pattern."); - XCTAssertEqualObjects(layer.linePattern, constantExpression, - @"linePattern should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"MGL_FUNCTION('image', 'Line Pattern')"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.linePattern = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), image(literal("Line Pattern")), 18.0, image(literal("Line Pattern"))) - ); - } - - XCTAssertEqual(rawLayer->getLinePattern(), propertyValue, - @"Setting linePattern to a camera expression should update line-pattern."); - XCTAssertEqualObjects(layer.linePattern, functionExpression, - @"linePattern should round-trip camera expressions."); - - - layer.linePattern = nil; - XCTAssertTrue(rawLayer->getLinePattern().isUndefined(), - @"Unsetting linePattern should return line-pattern to the default value."); - XCTAssertEqualObjects(layer.linePattern, defaultExpression, - @"linePattern should return the default value after being unset."); - // Transition property test - layer.linePatternTransition = transitionTest; - auto toptions = rawLayer->getLinePatternTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition linePatternTransition = layer.linePatternTransition; - XCTAssertEqual(linePatternTransition.delay, transitionTest.delay); - XCTAssertEqual(linePatternTransition.duration, transitionTest.duration); - } - - // line-translate - { - XCTAssertTrue(rawLayer->getLineTranslate().isUndefined(), - @"line-translate should be unset initially."); - NSExpression *defaultExpression = layer.lineTranslation; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", -#if TARGET_OS_IPHONE - [NSValue valueWithCGVector:CGVectorMake(1, 1)] -#else - [NSValue valueWithMGLVector:CGVectorMake(1, -1)] -#endif - ]; - layer.lineTranslation = constantExpression; - mbgl::style::PropertyValue> propertyValue = { { 1, 1 } }; - XCTAssertEqual(rawLayer->getLineTranslate(), propertyValue, - @"Setting lineTranslation to a constant value expression should update line-translate."); - XCTAssertEqualObjects(layer.lineTranslation, constantExpression, - @"lineTranslation should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineTranslation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({ 1, 1 }), 18.0, literal({ 1, 1 })) - ); - } - - XCTAssertEqual(rawLayer->getLineTranslate(), propertyValue, - @"Setting lineTranslation to a camera expression should update line-translate."); - XCTAssertEqualObjects(layer.lineTranslation, functionExpression, - @"lineTranslation should round-trip camera expressions."); - - - layer.lineTranslation = nil; - XCTAssertTrue(rawLayer->getLineTranslate().isUndefined(), - @"Unsetting lineTranslation should return line-translate to the default value."); - XCTAssertEqualObjects(layer.lineTranslation, defaultExpression, - @"lineTranslation should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.lineTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.lineTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // line-translate-anchor - { - XCTAssertTrue(rawLayer->getLineTranslateAnchor().isUndefined(), - @"line-translate-anchor should be unset initially."); - NSExpression *defaultExpression = layer.lineTranslationAnchor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - layer.lineTranslationAnchor = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::TranslateAnchorType::Viewport }; - XCTAssertEqual(rawLayer->getLineTranslateAnchor(), propertyValue, - @"Setting lineTranslationAnchor to a constant value expression should update line-translate-anchor."); - XCTAssertEqualObjects(layer.lineTranslationAnchor, constantExpression, - @"lineTranslationAnchor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineTranslationAnchor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("viewport"), 18.0, literal("viewport")) - ); - } - - XCTAssertEqual(rawLayer->getLineTranslateAnchor(), propertyValue, - @"Setting lineTranslationAnchor to a camera expression should update line-translate-anchor."); - XCTAssertEqualObjects(layer.lineTranslationAnchor, functionExpression, - @"lineTranslationAnchor should round-trip camera expressions."); - - - layer.lineTranslationAnchor = nil; - XCTAssertTrue(rawLayer->getLineTranslateAnchor().isUndefined(), - @"Unsetting lineTranslationAnchor should return line-translate-anchor to the default value."); - XCTAssertEqualObjects(layer.lineTranslationAnchor, defaultExpression, - @"lineTranslationAnchor should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.lineTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.lineTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLLineLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // line-width - { - XCTAssertTrue(rawLayer->getLineWidth().isUndefined(), - @"line-width should be unset initially."); - NSExpression *defaultExpression = layer.lineWidth; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.lineWidth = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getLineWidth(), propertyValue, - @"Setting lineWidth to a constant value expression should update line-width."); - XCTAssertEqualObjects(layer.lineWidth, constantExpression, - @"lineWidth should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.lineWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getLineWidth(), propertyValue, - @"Setting lineWidth to a camera expression should update line-width."); - XCTAssertEqualObjects(layer.lineWidth, functionExpression, - @"lineWidth should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.lineWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getLineWidth(), propertyValue, - @"Setting lineWidth to a data expression should update line-width."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.lineWidth, pedanticFunctionExpression, - @"lineWidth should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.lineWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getLineWidth(), propertyValue, - @"Setting lineWidth to a camera-data expression should update line-width."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.lineWidth, pedanticFunctionExpression, - @"lineWidth should round-trip camera-data expressions."); - - layer.lineWidth = nil; - XCTAssertTrue(rawLayer->getLineWidth().isUndefined(), - @"Unsetting lineWidth should return line-width to the default value."); - XCTAssertEqualObjects(layer.lineWidth, defaultExpression, - @"lineWidth should return the default value after being unset."); - // Transition property test - layer.lineWidthTransition = transitionTest; - auto toptions = rawLayer->getLineWidthTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition lineWidthTransition = layer.lineWidthTransition; - XCTAssertEqual(lineWidthTransition.delay, transitionTest.delay); - XCTAssertEqual(lineWidthTransition.duration, transitionTest.duration); - } -} - -- (void)testPropertyNames { - [self testPropertyName:@"line-cap" isBoolean:NO]; - [self testPropertyName:@"line-join" isBoolean:NO]; - [self testPropertyName:@"line-miter-limit" isBoolean:NO]; - [self testPropertyName:@"line-round-limit" isBoolean:NO]; - [self testPropertyName:@"line-blur" isBoolean:NO]; - [self testPropertyName:@"line-color" isBoolean:NO]; - [self testPropertyName:@"line-dash-pattern" isBoolean:NO]; - [self testPropertyName:@"line-gap-width" isBoolean:NO]; - [self testPropertyName:@"line-offset" isBoolean:NO]; - [self testPropertyName:@"line-opacity" isBoolean:NO]; - [self testPropertyName:@"line-pattern" isBoolean:NO]; - [self testPropertyName:@"line-translation" isBoolean:NO]; - [self testPropertyName:@"line-translation-anchor" isBoolean:NO]; - [self testPropertyName:@"line-width" isBoolean:NO]; -} - -- (void)testValueAdditions { - XCTAssertEqual([NSValue valueWithMGLLineCap:MGLLineCapButt].MGLLineCapValue, MGLLineCapButt); - XCTAssertEqual([NSValue valueWithMGLLineCap:MGLLineCapRound].MGLLineCapValue, MGLLineCapRound); - XCTAssertEqual([NSValue valueWithMGLLineCap:MGLLineCapSquare].MGLLineCapValue, MGLLineCapSquare); - XCTAssertEqual([NSValue valueWithMGLLineJoin:MGLLineJoinBevel].MGLLineJoinValue, MGLLineJoinBevel); - XCTAssertEqual([NSValue valueWithMGLLineJoin:MGLLineJoinRound].MGLLineJoinValue, MGLLineJoinRound); - XCTAssertEqual([NSValue valueWithMGLLineJoin:MGLLineJoinMiter].MGLLineJoinValue, MGLLineJoinMiter); - XCTAssertEqual([NSValue valueWithMGLLineTranslationAnchor:MGLLineTranslationAnchorMap].MGLLineTranslationAnchorValue, MGLLineTranslationAnchorMap); - XCTAssertEqual([NSValue valueWithMGLLineTranslationAnchor:MGLLineTranslationAnchorViewport].MGLLineTranslationAnchorValue, MGLLineTranslationAnchorViewport); -} - -@end diff --git a/platform/darwin/test/MGLMapCameraTests.m b/platform/darwin/test/MGLMapCameraTests.m deleted file mode 100644 index 9fbf6b9e45d..00000000000 --- a/platform/darwin/test/MGLMapCameraTests.m +++ /dev/null @@ -1,106 +0,0 @@ -#import -#import -#import -#import - -@interface MGLMapCameraTests : XCTestCase - -@end - -@implementation MGLMapCameraTests - -- (void)testEyeCoordinateInitialization { - CLLocationCoordinate2D fountainSquare = CLLocationCoordinate2DMake(39.10152215, -84.5124439696089); - CLLocationCoordinate2D unionTerminal = CLLocationCoordinate2DMake(39.10980955, -84.5352778794236); - - MGLMapCamera *camera = [MGLMapCamera cameraLookingAtCenterCoordinate:fountainSquare - fromEyeCoordinate:fountainSquare - eyeAltitude:1000]; - MKMapCamera *mkCamera = [MKMapCamera cameraLookingAtCenterCoordinate:fountainSquare - fromEyeCoordinate:fountainSquare - eyeAltitude:1000]; - XCTAssertEqual(camera.centerCoordinate.latitude, fountainSquare.latitude); - XCTAssertEqual(camera.centerCoordinate.longitude, fountainSquare.longitude); - XCTAssertEqual(camera.centerCoordinate.latitude, mkCamera.centerCoordinate.latitude); - XCTAssertEqual(camera.centerCoordinate.longitude, mkCamera.centerCoordinate.longitude); - XCTAssertEqual(camera.altitude, 1000, @"Eye altitude should be equivalent to altitude in untilted camera."); - XCTAssertEqual(camera.altitude, mkCamera.altitude, @"Eye altitude in untilted camera should match MapKit."); - XCTAssertEqual(camera.pitch, 0, @"Camera directly over center coordinate should be untilted."); - XCTAssertEqual(camera.pitch, mkCamera.pitch, @"Camera directly over center coordinate should have same pitch as MapKit."); - XCTAssertEqual(camera.heading, 0, @"Camera directly over center coordinate should be unrotated."); - XCTAssertEqual(camera.heading, mkCamera.heading, @"Camera directly over center coordinate should have same heading as MapKit."); - - camera = [MGLMapCamera cameraLookingAtCenterCoordinate:fountainSquare - fromEyeCoordinate:unionTerminal - eyeAltitude:1000]; - mkCamera = [MKMapCamera cameraLookingAtCenterCoordinate:fountainSquare - fromEyeCoordinate:unionTerminal - eyeAltitude:1000]; - XCTAssertEqual(camera.centerCoordinate.latitude, fountainSquare.latitude); - XCTAssertEqual(camera.centerCoordinate.longitude, fountainSquare.longitude); - XCTAssertEqual(camera.centerCoordinate.latitude, mkCamera.centerCoordinate.latitude); - XCTAssertEqual(camera.centerCoordinate.longitude, mkCamera.centerCoordinate.longitude); - XCTAssertEqual(camera.altitude, 1000); - XCTAssertEqual(camera.altitude, mkCamera.altitude, @"Eye altitude in tilted camera should match MapKit."); - XCTAssertEqualWithAccuracy(camera.pitch, 65.3469146074, 0.01); - XCTAssertEqual(camera.pitch, mkCamera.pitch); - XCTAssertEqualWithAccuracy(camera.heading, 115.066396383, 0.01); - XCTAssertEqualWithAccuracy(camera.heading, mkCamera.heading, 0.01); -} - -- (void)testViewingDistanceInitialization { - CLLocationCoordinate2D fountainSquare = CLLocationCoordinate2DMake(39.10152215, -84.5124439696089); - MGLMapCamera *camera = [MGLMapCamera cameraLookingAtCenterCoordinate:fountainSquare - acrossDistance:10000 - pitch:0 - heading:0]; - MKMapCamera *mkCamera = [MKMapCamera cameraLookingAtCenterCoordinate:fountainSquare - fromDistance:10000 - pitch:0 - heading:0]; - XCTAssertEqualWithAccuracy(camera.altitude, 10000, 0.01, @"Untilted camera should use distance verbatim."); - XCTAssertEqualWithAccuracy(camera.altitude, mkCamera.altitude, 0.01, @"Untilted camera altitude should match MapKit."); - - camera = [MGLMapCamera cameraLookingAtCenterCoordinate:fountainSquare - altitude:10000 - pitch:0 - heading:0]; - XCTAssertEqual(camera.altitude, 10000, @"Untilted camera should use altitude verbatim."); - - camera = [MGLMapCamera cameraLookingAtCenterCoordinate:fountainSquare - acrossDistance:10000 - pitch:60 - heading:0]; - mkCamera = [MKMapCamera cameraLookingAtCenterCoordinate:fountainSquare - fromDistance:10000 - pitch:60 - heading:0]; - XCTAssertEqualWithAccuracy(camera.altitude, 5000, 0.01, @"Tilted camera altitude should account for pitch."); - XCTAssertEqualWithAccuracy(camera.altitude, mkCamera.altitude, 0.01, @"Tilted camera altitude should match MapKit."); - - camera = [MGLMapCamera cameraLookingAtCenterCoordinate:fountainSquare - altitude:10000 - pitch:60 - heading:0]; - XCTAssertEqual(camera.altitude, 10000, @"Tilted camera should use altitude verbatim."); -} - -- (void)testViewingDistance { - MGLMapCamera *camera = [MGLMapCamera camera]; - camera.altitude = 10000; - XCTAssertEqual(camera.altitude, 10000); - XCTAssertEqual(camera.viewingDistance, 10000); - camera.viewingDistance = 10000; - XCTAssertEqual(camera.altitude, 10000); - XCTAssertEqual(camera.viewingDistance, 10000); - - camera.pitch = 60; - camera.altitude = 10000; - XCTAssertEqual(camera.altitude, 10000); - XCTAssertEqualWithAccuracy(camera.viewingDistance, 20000, 0.01); - camera.viewingDistance = 10000; - XCTAssertEqualWithAccuracy(camera.altitude, 5000, 0.01); - XCTAssertEqual(camera.viewingDistance, 10000); -} - -@end diff --git a/platform/darwin/test/MGLMapViewTests.m b/platform/darwin/test/MGLMapViewTests.m deleted file mode 100644 index 9ad7016a61e..00000000000 --- a/platform/darwin/test/MGLMapViewTests.m +++ /dev/null @@ -1,155 +0,0 @@ -#import -#import -#import - -#if TARGET_OS_IPHONE - #define MGLEdgeInsetsZero UIEdgeInsetsZero -#else - #define MGLEdgeInsetsZero NSEdgeInsetsZero -#endif - -static MGLMapView *mapView; - -@interface MGLMapViewTests : XCTestCase -@end - -@implementation MGLMapViewTests - -- (void)setUp { - [super setUp]; - - [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"]; - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - mapView = [[MGLMapView alloc] initWithFrame:CGRectMake(0, 0, 64, 64) styleURL:styleURL]; -} - -- (void)tearDown { - mapView = nil; - [MGLAccountManager setAccessToken:nil]; - [super tearDown]; -} - -- (void)testCoordinateBoundsConversion { - [mapView setCenterCoordinate:CLLocationCoordinate2DMake(33, 179)]; - - MGLCoordinateBounds leftAntimeridianBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(-75, 175), CLLocationCoordinate2DMake(75, 180)); - CGRect leftAntimeridianBoundsRect = [mapView convertCoordinateBounds:leftAntimeridianBounds toRectToView:mapView]; - - MGLCoordinateBounds rightAntimeridianBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(-75, -180), CLLocationCoordinate2DMake(75, -175)); - CGRect rightAntimeridianBoundsRect = [mapView convertCoordinateBounds:rightAntimeridianBounds toRectToView:mapView]; - - MGLCoordinateBounds spanningBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(24, 140), CLLocationCoordinate2DMake(44, 240)); - CGRect spanningBoundsRect = [mapView convertCoordinateBounds:spanningBounds toRectToView:mapView]; - - // If the resulting CGRect from -convertCoordinateBounds:toRectToView: - // intersects the set of bounds to the left and right of the - // antimeridian, then we know that the CGRect spans across the antimeridian - XCTAssertTrue(CGRectIntersectsRect(spanningBoundsRect, leftAntimeridianBoundsRect), @"Resulting"); - XCTAssertTrue(CGRectIntersectsRect(spanningBoundsRect, rightAntimeridianBoundsRect), @"Something"); -} - -#if TARGET_OS_IPHONE -- (void)testUserTrackingModeCompletion { - __block BOOL completed = NO; - [mapView setUserTrackingMode:MGLUserTrackingModeNone animated:NO completionHandler:^{ - completed = YES; - }]; - XCTAssertTrue(completed, @"Completion block should get called synchronously when the mode is unchanged."); - - completed = NO; - [mapView setUserTrackingMode:MGLUserTrackingModeNone animated:YES completionHandler:^{ - completed = YES; - }]; - XCTAssertTrue(completed, @"Completion block should get called synchronously when the mode is unchanged."); - - completed = NO; - [mapView setUserTrackingMode:MGLUserTrackingModeFollow animated:NO completionHandler:^{ - completed = YES; - }]; - XCTAssertTrue(completed, @"Completion block should get called synchronously when there’s no location."); - - completed = NO; - [mapView setUserTrackingMode:MGLUserTrackingModeFollowWithHeading animated:YES completionHandler:^{ - completed = YES; - }]; - XCTAssertTrue(completed, @"Completion block should get called synchronously when there’s no location."); -} - -- (void)testTargetCoordinateCompletion { - __block BOOL completed = NO; - [mapView setTargetCoordinate:kCLLocationCoordinate2DInvalid animated:NO completionHandler:^{ - completed = YES; - }]; - XCTAssertTrue(completed, @"Completion block should get called synchronously when the target coordinate is unchanged."); - - completed = NO; - [mapView setTargetCoordinate:kCLLocationCoordinate2DInvalid animated:YES completionHandler:^{ - completed = YES; - }]; - XCTAssertTrue(completed, @"Completion block should get called synchronously when the target coordinate is unchanged."); - - completed = NO; - [mapView setUserTrackingMode:MGLUserTrackingModeFollow animated:NO completionHandler:nil]; - [mapView setTargetCoordinate:CLLocationCoordinate2DMake(39.128106, -84.516293) animated:YES completionHandler:^{ - completed = YES; - }]; - XCTAssertTrue(completed, @"Completion block should get called synchronously when not tracking user course."); - - completed = NO; - [mapView setUserTrackingMode:MGLUserTrackingModeFollowWithCourse animated:NO completionHandler:nil]; - [mapView setTargetCoordinate:CLLocationCoordinate2DMake(39.224407, -84.394957) animated:YES completionHandler:^{ - completed = YES; - }]; - XCTAssertTrue(completed, @"Completion block should get called synchronously when there’s no location."); -} -#endif - -- (void)testVisibleCoordinatesCompletion { - XCTestExpectation *expectation = [self expectationWithDescription:@"Completion block should get called when not animated"]; - MGLCoordinateBounds unitBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(1, 1)); - [mapView setVisibleCoordinateBounds:unitBounds edgePadding:MGLEdgeInsetsZero animated:NO completionHandler:^{ - [expectation fulfill]; - }]; - [self waitForExpectations:@[expectation] timeout:1]; - -#if TARGET_OS_IPHONE - expectation = [self expectationWithDescription:@"Completion block should get called when animated"]; - CLLocationCoordinate2D antiunitCoordinates[] = { - CLLocationCoordinate2DMake(0, 0), - CLLocationCoordinate2DMake(-1, -1), - }; - [mapView setVisibleCoordinates:antiunitCoordinates - count:sizeof(antiunitCoordinates) / sizeof(antiunitCoordinates[0]) - edgePadding:UIEdgeInsetsZero - direction:0 - duration:0 - animationTimingFunction:nil - completionHandler:^{ - [expectation fulfill]; - }]; - [self waitForExpectations:@[expectation] timeout:1]; -#endif -} - -- (void)testShowAnnotationsCompletion { - __block BOOL completed = NO; - [mapView showAnnotations:@[] edgePadding:MGLEdgeInsetsZero animated:NO completionHandler:^{ - completed = YES; - }]; - XCTAssertTrue(completed, @"Completion block should get called synchronously when there are no annotations to show."); - - XCTestExpectation *expectation = [self expectationWithDescription:@"Completion block should get called when not animated"]; - MGLPointAnnotation *annotation = [[MGLPointAnnotation alloc] init]; - [mapView showAnnotations:@[annotation] edgePadding:MGLEdgeInsetsZero animated:NO completionHandler:^{ - [expectation fulfill]; - }]; - [self waitForExpectations:@[expectation] timeout:1]; - - expectation = [self expectationWithDescription:@"Completion block should get called when animated."]; - [mapView showAnnotations:@[annotation] edgePadding:MGLEdgeInsetsZero animated:YES completionHandler:^{ - [expectation fulfill]; - }]; - [self waitForExpectations:@[expectation] timeout:1]; -} - -@end diff --git a/platform/darwin/test/MGLNSDateAdditionsTests.mm b/platform/darwin/test/MGLNSDateAdditionsTests.mm deleted file mode 100644 index 6d8d9510246..00000000000 --- a/platform/darwin/test/MGLNSDateAdditionsTests.mm +++ /dev/null @@ -1,40 +0,0 @@ -#import - -#include -#import "../../darwin/src/NSDate+MGLAdditions.h" - -using namespace std::chrono_literals; - -@interface MGLNSDateAdditionsTests : XCTestCase -@end - -@implementation MGLNSDateAdditionsTests - -- (void)testDurationToNSTimeInterval { - - NSTimeInterval timeInterval = 5; - mbgl::Duration duration = MGLDurationFromTimeInterval(timeInterval); - NSTimeInterval durationTimeInterval = MGLTimeIntervalFromDuration(duration); - - mbgl::Duration expectedDuration = 5s; - mbgl::Duration expectedDurationMiliSeconds = 5000ms; - mbgl::Duration expectedDurationMicroSeconds = 5000000us; - mbgl::Duration expectedDurationNanoSeconds = 5000000000ns; - - XCTAssertEqual(timeInterval, durationTimeInterval); - XCTAssertEqual(timeInterval, MGLTimeIntervalFromDuration(expectedDuration)); - XCTAssertEqual(timeInterval, MGLTimeIntervalFromDuration(expectedDurationMiliSeconds)); - XCTAssertEqual(timeInterval, MGLTimeIntervalFromDuration(expectedDurationMicroSeconds)); - XCTAssertEqual(timeInterval, MGLTimeIntervalFromDuration(expectedDurationNanoSeconds)); - - mbgl::Duration durationMiliSeconds = 2500ms; - mbgl::Duration durationMicroSeconds = 2500000us; - mbgl::Duration durationNanoSeconds = 2500000000ns; - - XCTAssertEqual(NSTimeInterval(2.5), MGLTimeIntervalFromDuration(durationMiliSeconds)); - XCTAssertEqual(NSTimeInterval(2.5), MGLTimeIntervalFromDuration(durationMicroSeconds)); - XCTAssertEqual(NSTimeInterval(2.5), MGLTimeIntervalFromDuration(durationNanoSeconds)); - -} - -@end diff --git a/platform/darwin/test/MGLNSStringAdditionsTests.m b/platform/darwin/test/MGLNSStringAdditionsTests.m deleted file mode 100644 index 872a8ce664c..00000000000 --- a/platform/darwin/test/MGLNSStringAdditionsTests.m +++ /dev/null @@ -1,89 +0,0 @@ -#import - -#import "NSString+MGLAdditions.h" - -@interface MGLNSStringAdditionsTests : XCTestCase - -@end - -@implementation MGLNSStringAdditionsTests - -- (void)testTitleCasedString { - NSLocale *locale = [NSLocale localeWithLocaleIdentifier:@"en_US"]; - - XCTAssertEqualObjects([@"© OpenStreetMap" mgl_titleCasedStringWithLocale:locale], @"© OpenStreetMap"); - XCTAssertEqualObjects([@"© OSM" mgl_titleCasedStringWithLocale:locale], @"© OSM"); - - XCTAssertEqualObjects([@"Improve this map" mgl_titleCasedStringWithLocale:locale], @"Improve This Map"); - XCTAssertEqualObjects([@"Improve This Map" mgl_titleCasedStringWithLocale:locale], @"Improve This Map"); - - XCTAssertEqualObjects([@"Improve the map" mgl_titleCasedStringWithLocale:locale], @"Improve the Map"); - XCTAssertEqualObjects([@"Improve The Map" mgl_titleCasedStringWithLocale:locale], @"Improve The Map"); - - XCTAssertEqualObjects([@"Improve a map" mgl_titleCasedStringWithLocale:locale], @"Improve a Map"); - XCTAssertEqualObjects([@"Improve A Map" mgl_titleCasedStringWithLocale:locale], @"Improve A Map"); - - XCTAssertEqualObjects([@"Improve for the map" mgl_titleCasedStringWithLocale:locale], @"Improve for the Map"); - XCTAssertEqualObjects([@"Improve For The Map" mgl_titleCasedStringWithLocale:locale], @"Improve For The Map"); - - XCTAssertEqualObjects([@"Improve and map" mgl_titleCasedStringWithLocale:locale], @"Improve and Map"); - XCTAssertEqualObjects([@"Improve And Map" mgl_titleCasedStringWithLocale:locale], @"Improve And Map"); - - XCTAssertEqualObjects([@"Improve while mapping" mgl_titleCasedStringWithLocale:locale], @"Improve While Mapping"); - XCTAssertEqualObjects([@"Improve While Mapping" mgl_titleCasedStringWithLocale:locale], @"Improve While Mapping"); - - XCTAssertEqualObjects([@"Improve with the map" mgl_titleCasedStringWithLocale:locale], @"Improve With the Map"); - XCTAssertEqualObjects([@"Improve With The Map" mgl_titleCasedStringWithLocale:locale], @"Improve With The Map"); - - XCTAssertEqualObjects([@"Improve this iPhone" mgl_titleCasedStringWithLocale:locale], @"Improve This iPhone"); - XCTAssertEqualObjects([@"Improve This iPhone" mgl_titleCasedStringWithLocale:locale], @"Improve This iPhone"); -} - -- (void)testTransliteratedString { - XCTAssertEqualObjects([@"Portland" mgl_stringByTransliteratingIntoScript:@"Latn"], @"Portland"); - XCTAssertEqualObjects([@"Portland" mgl_stringByTransliteratingIntoScript:@"Hans"], @"Portland"); - XCTAssertEqualObjects([@"Portland" mgl_stringByTransliteratingIntoScript:@"Hant"], @"Portland"); - XCTAssertEqualObjects([@"Portland" mgl_stringByTransliteratingIntoScript:@"Cyrl"], @"Портланд"); - XCTAssertEqualObjects([@"Portland" mgl_stringByTransliteratingIntoScript:@"Arab"], @"پُرتلَند"); - XCTAssertEqualObjects([@"Portland" mgl_stringByTransliteratingIntoScript:@"Jpan"], @"ポルテランデ"); - XCTAssertEqualObjects([@"Portland" mgl_stringByTransliteratingIntoScript:@"Kore"], @"폹란드"); - XCTAssertEqualObjects([@"Portland" mgl_stringByTransliteratingIntoScript:@"Fake"], @"Portland"); - - XCTAssertEqualObjects([@"北京" mgl_stringByTransliteratingIntoScript:@"Latn"], @"běi jīng"); - XCTAssertEqualObjects([@"北京" mgl_stringByTransliteratingIntoScript:@"Hans"], @"北京"); - XCTAssertEqualObjects([@"北京" mgl_stringByTransliteratingIntoScript:@"Hant"], @"北京"); - XCTAssertEqualObjects([@"北京" mgl_stringByTransliteratingIntoScript:@"Cyrl"], @"бе̌и йӣнг"); - XCTAssertEqualObjects([@"北京" mgl_stringByTransliteratingIntoScript:@"Arab"], @"بِِ̌ جِينگ"); - XCTAssertEqualObjects([@"北京" mgl_stringByTransliteratingIntoScript:@"Jpan"], @"ベ̌イ ジーング"); - XCTAssertEqualObjects([@"北京" mgl_stringByTransliteratingIntoScript:@"Kore"], @"베̌이 지̄늑"); - XCTAssertEqualObjects([@"北京" mgl_stringByTransliteratingIntoScript:@"Fake"], @"北京"); - - XCTAssertEqualObjects([@"九龍" mgl_stringByTransliteratingIntoScript:@"Latn"], @"jiǔ lóng"); - XCTAssertEqualObjects([@"九龍" mgl_stringByTransliteratingIntoScript:@"Hans"], @"九龙"); - XCTAssertEqualObjects([@"九龍" mgl_stringByTransliteratingIntoScript:@"Hant"], @"九龍"); - XCTAssertEqualObjects([@"九龍" mgl_stringByTransliteratingIntoScript:@"Cyrl"], @"йиу̌ ло́нг"); - XCTAssertEqualObjects([@"九龍" mgl_stringByTransliteratingIntoScript:@"Arab"], @"جُِ̌ لُ́نگ"); - XCTAssertEqualObjects([@"九龍" mgl_stringByTransliteratingIntoScript:@"Jpan"], @"ジウ̌ ロ́ング"); - XCTAssertEqualObjects([@"九龍" mgl_stringByTransliteratingIntoScript:@"Kore"], @"지우̌ 로́늑"); - XCTAssertEqualObjects([@"九龍" mgl_stringByTransliteratingIntoScript:@"Fake"], @"九龍"); - - XCTAssertEqualObjects([@"Mосква" mgl_stringByTransliteratingIntoScript:@"Latn"], @"Moskva"); - XCTAssertEqualObjects([@"Mосква" mgl_stringByTransliteratingIntoScript:@"Hans"], @"Mосква"); - XCTAssertEqualObjects([@"Mосква" mgl_stringByTransliteratingIntoScript:@"Hant"], @"Mосква"); - XCTAssertEqualObjects([@"Mосква" mgl_stringByTransliteratingIntoScript:@"Cyrl"], @"Москва"); - XCTAssertEqualObjects([@"Mосква" mgl_stringByTransliteratingIntoScript:@"Arab"], @"مُسكڤَ"); - XCTAssertEqualObjects([@"Mосква" mgl_stringByTransliteratingIntoScript:@"Jpan"], @"モスクヷ"); - XCTAssertEqualObjects([@"Mосква" mgl_stringByTransliteratingIntoScript:@"Kore"], @"못크바"); - XCTAssertEqualObjects([@"Mосква" mgl_stringByTransliteratingIntoScript:@"Fake"], @"Mосква"); - - XCTAssertEqualObjects([@"ロンドン" mgl_stringByTransliteratingIntoScript:@"Latn"], @"rondon"); - XCTAssertEqualObjects([@"ロンドン" mgl_stringByTransliteratingIntoScript:@"Hans"], @"ロンドン"); - XCTAssertEqualObjects([@"ロンドン" mgl_stringByTransliteratingIntoScript:@"Hant"], @"ロンドン"); - XCTAssertEqualObjects([@"ロンドン" mgl_stringByTransliteratingIntoScript:@"Cyrl"], @"рондон"); - XCTAssertEqualObjects([@"ロンドン" mgl_stringByTransliteratingIntoScript:@"Arab"], @"رُندُن"); - XCTAssertEqualObjects([@"ロンドン" mgl_stringByTransliteratingIntoScript:@"Jpan"], @"ロンドン"); - XCTAssertEqualObjects([@"ロンドン" mgl_stringByTransliteratingIntoScript:@"Kore"], @"론돈"); - XCTAssertEqualObjects([@"ロンドン" mgl_stringByTransliteratingIntoScript:@"Fake"], @"ロンドン"); -} - -@end diff --git a/platform/darwin/test/MGLOfflinePackTests.mm b/platform/darwin/test/MGLOfflinePackTests.mm deleted file mode 100644 index 6b454ee8ca0..00000000000 --- a/platform/darwin/test/MGLOfflinePackTests.mm +++ /dev/null @@ -1,58 +0,0 @@ -#import -#import -#import "MGLOfflinePack_Private.h" -#import "MGLTestAssertionHandler.h" - -@interface MGLOfflinePackTests : XCTestCase - -@end - -@implementation MGLOfflinePackTests - -- (void)testInvalidation { - MGLOfflinePack *invalidPack = [[MGLOfflinePack alloc] init]; - - XCTAssertEqual(invalidPack.state, MGLOfflinePackStateInvalid, @"Offline pack should be invalid when initialized independently of MGLOfflineStorage."); - - XCTAssertThrowsSpecificNamed(invalidPack.region, NSException, MGLInvalidOfflinePackException, @"Invalid offline pack should raise an exception when accessing its region."); - XCTAssertThrowsSpecificNamed(invalidPack.context, NSException, MGLInvalidOfflinePackException, @"Invalid offline pack should raise an exception when accessing its context."); - XCTAssertThrowsSpecificNamed([invalidPack resume], NSException, MGLInvalidOfflinePackException, @"Invalid offline pack should raise an exception when being resumed."); - XCTAssertThrowsSpecificNamed([invalidPack suspend], NSException, MGLInvalidOfflinePackException, @"Invalid offline pack should raise an exception when being suspended."); -} - -- (void)testInvalidatingAnInvalidPack { - MGLOfflinePack *invalidPack = [[MGLOfflinePack alloc] init]; - - XCTAssertThrowsSpecificNamed([invalidPack invalidate], NSException, NSInternalInconsistencyException, @"Invalid offline pack should raise an exception when being invalidated."); - - // Now try again, without asserts - NSAssertionHandler *oldHandler = [NSAssertionHandler currentHandler]; - MGLTestAssertionHandler *newHandler = [[MGLTestAssertionHandler alloc] initWithTestCase:self]; - [[[NSThread currentThread] threadDictionary] setValue:newHandler forKey:NSAssertionHandlerKey]; - - // Make sure this doesn't crash without asserts - [invalidPack invalidate]; - - [[[NSThread currentThread] threadDictionary] setValue:oldHandler forKey:NSAssertionHandlerKey]; -} - -- (void)testProgressBoxing { - MGLOfflinePackProgress progress = { - .countOfResourcesCompleted = 3, - .countOfResourcesExpected = 2, - .countOfBytesCompleted = 7, - .countOfTilesCompleted = 1, - .countOfTileBytesCompleted = 6, - .maximumResourcesExpected = UINT64_MAX, - }; - MGLOfflinePackProgress roundTrippedProgress = [NSValue valueWithMGLOfflinePackProgress:progress].MGLOfflinePackProgressValue; - - XCTAssertEqual(progress.countOfResourcesCompleted, roundTrippedProgress.countOfResourcesCompleted, @"Completed resources should round-trip."); - XCTAssertEqual(progress.countOfResourcesExpected, roundTrippedProgress.countOfResourcesExpected, @"Expected resources should round-trip."); - XCTAssertEqual(progress.countOfBytesCompleted, roundTrippedProgress.countOfBytesCompleted, @"Completed bytes should round-trip."); - XCTAssertEqual(progress.countOfTilesCompleted, roundTrippedProgress.countOfTilesCompleted, @"Completed tiles should round-trip."); - XCTAssertEqual(progress.countOfTileBytesCompleted, roundTrippedProgress.countOfTileBytesCompleted, @"Completed tile bytes should round-trip."); - XCTAssertEqual(progress.maximumResourcesExpected, roundTrippedProgress.maximumResourcesExpected, @"Maximum expected resources should round-trip."); -} - -@end diff --git a/platform/darwin/test/MGLOfflineRegionTests.m b/platform/darwin/test/MGLOfflineRegionTests.m deleted file mode 100644 index 0af9ebb5fa9..00000000000 --- a/platform/darwin/test/MGLOfflineRegionTests.m +++ /dev/null @@ -1,71 +0,0 @@ -#import - -#import - -@interface MGLOfflineRegionTests : XCTestCase - -@end - -@implementation MGLOfflineRegionTests - -- (void)testStyleURLs { - MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(kCLLocationCoordinate2DInvalid, kCLLocationCoordinate2DInvalid); - MGLTilePyramidOfflineRegion *region = [[MGLTilePyramidOfflineRegion alloc] initWithStyleURL:nil bounds:bounds fromZoomLevel:0 toZoomLevel:DBL_MAX]; - XCTAssertEqualObjects(region.styleURL, [MGLStyle streetsStyleURLWithVersion:MGLStyleDefaultVersion], @"Streets isn’t the default style."); - - NSURL *localURL = [NSURL URLWithString:@"beautiful.style"]; - XCTAssertThrowsSpecificNamed([[MGLTilePyramidOfflineRegion alloc] initWithStyleURL:localURL bounds:bounds fromZoomLevel:0 toZoomLevel:DBL_MAX], NSException, MGLInvalidStyleURLException, @"No exception raised when initializing region with a local file URL as the style URL."); -} - -- (void)testTilePyramidRegionEquality { - MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(kCLLocationCoordinate2DInvalid, kCLLocationCoordinate2DInvalid); - MGLTilePyramidOfflineRegion *original = [[MGLTilePyramidOfflineRegion alloc] initWithStyleURL:[MGLStyle lightStyleURLWithVersion:MGLStyleDefaultVersion] bounds:bounds fromZoomLevel:5 toZoomLevel:10]; - MGLTilePyramidOfflineRegion *copy = [original copy]; - XCTAssertEqualObjects(original, copy, @"Tile pyramid region should be equal to its copy."); - - XCTAssertEqualObjects(original.styleURL, copy.styleURL, @"Style URL has changed."); - XCTAssert(MGLCoordinateBoundsEqualToCoordinateBounds(original.bounds, copy.bounds), @"Bounds have changed."); - XCTAssertEqual(original.minimumZoomLevel, copy.minimumZoomLevel, @"Minimum zoom level has changed."); - XCTAssertEqual(original.maximumZoomLevel, copy.maximumZoomLevel, @"Maximum zoom level has changed."); - XCTAssertEqual(original.includesIdeographicGlyphs, copy.includesIdeographicGlyphs, @"Include ideographs has changed."); -} - -- (void)testGeometryRegionEquality { - NSString *geojson = @"{\"type\": \"Point\", \"coordinates\": [-3.8671874999999996, 52.482780222078226] }"; - NSError *error; - MGLShape *shape = [MGLShape shapeWithData: [geojson dataUsingEncoding:NSUTF8StringEncoding] encoding: NSUTF8StringEncoding error:&error]; - XCTAssertNil(error); - - MGLShapeOfflineRegion *original = [[MGLShapeOfflineRegion alloc] initWithStyleURL:[MGLStyle lightStyleURLWithVersion:MGLStyleDefaultVersion] shape:shape fromZoomLevel:5 toZoomLevel:10]; - original.includesIdeographicGlyphs = NO; - MGLShapeOfflineRegion *copy = [original copy]; - XCTAssertEqualObjects(original, copy, @"Shape region should be equal to its copy."); - - XCTAssertEqualObjects(original.styleURL, copy.styleURL, @"Style URL has changed."); - XCTAssertEqualObjects(original.shape, copy.shape, @"Geometry has changed."); - XCTAssertEqual(original.minimumZoomLevel, copy.minimumZoomLevel, @"Minimum zoom level has changed."); - XCTAssertEqual(original.maximumZoomLevel, copy.maximumZoomLevel, @"Maximum zoom level has changed."); - XCTAssertEqual(original.includesIdeographicGlyphs, copy.includesIdeographicGlyphs, @"Include ideographs has changed."); -} - -- (void)testIncludesIdeographicGlyphsByDefault { - - // Tile pyramid offline region - { - MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(kCLLocationCoordinate2DInvalid, kCLLocationCoordinate2DInvalid); - MGLTilePyramidOfflineRegion *tilePyramidOfflineRegion = [[MGLTilePyramidOfflineRegion alloc] initWithStyleURL:[MGLStyle lightStyleURLWithVersion:MGLStyleDefaultVersion] bounds:bounds fromZoomLevel:5 toZoomLevel:10]; - XCTAssertFalse(tilePyramidOfflineRegion.includesIdeographicGlyphs, @"tile pyramid offline region should not include ideographic glyphs"); - } - - // Shape offline region - { - NSString *geojson = @"{\"type\": \"Point\", \"coordinates\": [-3.8671874999999996, 52.482780222078226] }"; - NSError *error; - MGLShape *shape = [MGLShape shapeWithData: [geojson dataUsingEncoding:NSUTF8StringEncoding] encoding: NSUTF8StringEncoding error:&error]; - XCTAssertNil(error); - MGLShapeOfflineRegion *shapeOfflineRegion = [[MGLShapeOfflineRegion alloc] initWithStyleURL:[MGLStyle lightStyleURLWithVersion:MGLStyleDefaultVersion] shape:shape fromZoomLevel:5 toZoomLevel:10]; - XCTAssertFalse(shapeOfflineRegion.includesIdeographicGlyphs, @"tile pyramid offline region should not include ideographic glyphs"); - } -} - -@end diff --git a/platform/darwin/test/MGLOfflineStorageTests.mm b/platform/darwin/test/MGLOfflineStorageTests.mm deleted file mode 100644 index 8f6114658ad..00000000000 --- a/platform/darwin/test/MGLOfflineStorageTests.mm +++ /dev/null @@ -1,671 +0,0 @@ -#import -#import - -#import "MGLOfflineStorage_Private.h" -#import "NSBundle+MGLAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "MGLTestAssertionHandler.h" - -#include -#include - -#pragma clang diagnostic ignored "-Wshadow" - - -@interface MGLOfflineStorageTests : XCTestCase -@end - -@implementation MGLOfflineStorageTests - -+ (void)tearDown { - NSURL *cacheDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory - inDomain:NSUserDomainMask - appropriateForURL:nil - create:NO - error:nil]; - NSString *bundleIdentifier = [NSBundle mgl_applicationBundleIdentifier]; - cacheDirectoryURL = [cacheDirectoryURL URLByAppendingPathComponent:bundleIdentifier]; - cacheDirectoryURL = [cacheDirectoryURL URLByAppendingPathComponent:@".mapbox"]; - XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:cacheDirectoryURL.path], @"Cache subdirectory should exist."); - - NSURL *cacheURL = [cacheDirectoryURL URLByAppendingPathComponent:@"cache.db"]; - - [[NSFileManager defaultManager] removeItemAtURL:cacheURL error:nil]; - XCTAssertFalse([[NSFileManager defaultManager] fileExistsAtPath:cacheURL.path], @"Cache subdirectory should not exist."); -} - -- (void)setUp { - [super setUp]; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - XCTestExpectation *expectation = [self keyValueObservingExpectationForObject:[MGLOfflineStorage sharedOfflineStorage] keyPath:@"packs" handler:^BOOL(id _Nonnull observedObject, NSDictionary * _Nonnull change) { - const auto changeKind = static_cast([change[NSKeyValueChangeKindKey] unsignedLongValue]); - return changeKind == NSKeyValueChangeSetting; - }]; - if ([MGLOfflineStorage sharedOfflineStorage].packs) { - [expectation fulfill]; - [self waitForExpectationsWithTimeout:0 handler:nil]; - } else { - [self waitForExpectationsWithTimeout:10 handler:nil]; - } - - XCTAssertNotNil([MGLOfflineStorage sharedOfflineStorage].packs, @"Shared offline storage object should have a non-nil collection of packs by this point."); - }); -} - -- (void)testSharedObject { - XCTAssertEqual([MGLOfflineStorage sharedOfflineStorage], [MGLOfflineStorage sharedOfflineStorage], @"There should only be one shared offline storage object."); -} - -- (void)testAddPackForBounds { - NSUInteger countOfPacks = [MGLOfflineStorage sharedOfflineStorage].packs.count; - - NSURL *styleURL = [MGLStyle lightStyleURLWithVersion:8]; - /// Somewhere near Grape Grove, Ohio, United States. - MGLCoordinateBounds bounds = { - { .latitude = 39.70358155855172, .longitude = -83.69506472545841 }, - { .latitude = 39.703818870225376, .longitude = -83.69420641857361 }, - }; - double zoomLevel = 20; - MGLTilePyramidOfflineRegion *region = [[MGLTilePyramidOfflineRegion alloc] initWithStyleURL:styleURL bounds:bounds fromZoomLevel:zoomLevel toZoomLevel:zoomLevel]; - - NSString *nameKey = @"Name"; - NSString *name = @"🍇 Grape Grove"; - - NSData *context = [NSKeyedArchiver archivedDataWithRootObject:@{ - nameKey: name, - }]; - - __block MGLOfflinePack *pack; - [self keyValueObservingExpectationForObject:[MGLOfflineStorage sharedOfflineStorage] keyPath:@"packs" handler:^BOOL(id _Nonnull observedObject, NSDictionary * _Nonnull change) { - const auto changeKind = static_cast([change[NSKeyValueChangeKindKey] unsignedLongValue]); - NSIndexSet *indices = change[NSKeyValueChangeIndexesKey]; - return changeKind == NSKeyValueChangeInsertion && indices.count == 1; - }]; - XCTestExpectation *additionCompletionHandlerExpectation = [self expectationWithDescription:@"add pack completion handler"]; - [[MGLOfflineStorage sharedOfflineStorage] addPackForRegion:region withContext:context completionHandler:^(MGLOfflinePack * _Nullable completionHandlerPack, NSError * _Nullable error) { - XCTAssertNotNil(completionHandlerPack, @"Added pack should exist."); - XCTAssertEqual(completionHandlerPack.state, MGLOfflinePackStateInactive, @"New pack should initially have inactive state."); - pack = completionHandlerPack; - [additionCompletionHandlerExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; - - XCTAssertEqual([MGLOfflineStorage sharedOfflineStorage].packs.count, countOfPacks + 1, @"Added pack should have been added to the canonical collection of packs owned by the shared offline storage object. This assertion can fail if this test is run before -testAAALoadPacks."); - - XCTAssertEqual(pack, [MGLOfflineStorage sharedOfflineStorage].packs.lastObject, @"Pack should be appended to end of packs array."); - - XCTAssertEqualObjects(pack.region, region, @"Added pack’s region has changed."); - - NSDictionary *userInfo = [NSKeyedUnarchiver unarchiveObjectWithData:pack.context]; - XCTAssert([userInfo isKindOfClass:[NSDictionary class]], @"Context of offline pack isn’t a dictionary."); - XCTAssert([userInfo[nameKey] isKindOfClass:[NSString class]], @"Name of offline pack isn’t a string."); - XCTAssertEqualObjects(userInfo[nameKey], name, @"Name of offline pack has changed."); - - XCTAssertEqual(pack.state, MGLOfflinePackStateInactive, @"New pack should initially have inactive state."); - - [self keyValueObservingExpectationForObject:pack keyPath:@"state" handler:^BOOL(id _Nonnull observedObject, NSDictionary * _Nonnull change) { - const auto changeKind = static_cast([change[NSKeyValueChangeKindKey] unsignedLongValue]); - const auto state = static_cast([change[NSKeyValueChangeNewKey] longValue]); - return changeKind == NSKeyValueChangeSetting && state == MGLOfflinePackStateInactive; - }]; - [self expectationForNotification:MGLOfflinePackProgressChangedNotification object:pack handler:^BOOL(NSNotification * _Nonnull notification) { - MGLOfflinePack *notificationPack = notification.object; - XCTAssert([notificationPack isKindOfClass:[MGLOfflinePack class]], @"Object of notification should be an MGLOfflinePack."); - - NSDictionary *userInfo = notification.userInfo; - XCTAssertNotNil(userInfo, @"Progress change notification should have a userInfo dictionary."); - - NSNumber *stateNumber = userInfo[MGLOfflinePackUserInfoKeyState]; - XCTAssert([stateNumber isKindOfClass:[NSNumber class]], @"Progress change notification’s state should be an NSNumber."); - XCTAssertEqual(stateNumber.integerValue, pack.state, @"State in a progress change notification should match the pack’s state."); - - NSValue *progressValue = userInfo[MGLOfflinePackUserInfoKeyProgress]; - XCTAssert([progressValue isKindOfClass:[NSValue class]], @"Progress change notification’s progress should be an NSValue."); - XCTAssertEqualObjects(progressValue, [NSValue valueWithMGLOfflinePackProgress:pack.progress], @"Progress change notification’s progress should match pack’s progress."); - - return notificationPack == pack && pack.state == MGLOfflinePackStateInactive; - }]; - [pack requestProgress]; - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testAddPackForGeometry { - NSUInteger countOfPacks = [MGLOfflineStorage sharedOfflineStorage].packs.count; - - NSURL *styleURL = [MGLStyle lightStyleURLWithVersion:8]; - double zoomLevel = 20; - NSString *geojson = @"{ \"type\": \"Polygon\", \"coordinates\": [ [ [ 5.1299285888671875, 52.10365839097971 ], [ 5.103063583374023, 52.110037078604236 ], [ 5.080232620239258, 52.09548601177304 ], [ 5.106925964355469, 52.07987524347506 ], [ 5.1299285888671875, 52.10365839097971 ] ] ]}"; - NSError *error; - MGLShape *shape = [MGLShape shapeWithData: [geojson dataUsingEncoding:NSUTF8StringEncoding] encoding: NSUTF8StringEncoding error:&error]; - XCTAssertNil(error); - MGLShapeOfflineRegion *region = [[MGLShapeOfflineRegion alloc] initWithStyleURL:styleURL shape:shape fromZoomLevel:zoomLevel toZoomLevel:zoomLevel]; - region.includesIdeographicGlyphs = NO; - - NSString *nameKey = @"Name"; - NSString *name = @"Utrecht centrum"; - - NSData *context = [NSKeyedArchiver archivedDataWithRootObject:@{nameKey: name}]; - - __block MGLOfflinePack *pack; - [self keyValueObservingExpectationForObject:[MGLOfflineStorage sharedOfflineStorage] keyPath:@"packs" handler:^BOOL(id _Nonnull observedObject, NSDictionary * _Nonnull change) { - const auto changeKind = static_cast([change[NSKeyValueChangeKindKey] unsignedLongValue]); - NSIndexSet *indices = change[NSKeyValueChangeIndexesKey]; - return changeKind == NSKeyValueChangeInsertion && indices.count == 1; - }]; - XCTestExpectation *additionCompletionHandlerExpectation = [self expectationWithDescription:@"add pack completion handler"]; - [[MGLOfflineStorage sharedOfflineStorage] addPackForRegion:region withContext:context completionHandler:^(MGLOfflinePack * _Nullable completionHandlerPack, NSError * _Nullable error) { - XCTAssertNotNil(completionHandlerPack, @"Added pack should exist."); - XCTAssertEqual(completionHandlerPack.state, MGLOfflinePackStateInactive, @"New pack should initially have inactive state."); - pack = completionHandlerPack; - [additionCompletionHandlerExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; - - XCTAssertEqual([MGLOfflineStorage sharedOfflineStorage].packs.count, countOfPacks + 1, @"Added pack should have been added to the canonical collection of packs owned by the shared offline storage object. This assertion can fail if this test is run before -testAAALoadPacks."); - - XCTAssertEqual(pack, [MGLOfflineStorage sharedOfflineStorage].packs.lastObject, @"Pack should be appended to end of packs array."); - - XCTAssertEqualObjects(pack.region, region, @"Added pack’s region has changed."); - - NSDictionary *userInfo = [NSKeyedUnarchiver unarchiveObjectWithData:pack.context]; - XCTAssert([userInfo isKindOfClass:[NSDictionary class]], @"Context of offline pack isn’t a dictionary."); - XCTAssert([userInfo[nameKey] isKindOfClass:[NSString class]], @"Name of offline pack isn’t a string."); - XCTAssertEqualObjects(userInfo[nameKey], name, @"Name of offline pack has changed."); - - XCTAssertEqual(pack.state, MGLOfflinePackStateInactive, @"New pack should initially have inactive state."); - - [self keyValueObservingExpectationForObject:pack keyPath:@"state" handler:^BOOL(id _Nonnull observedObject, NSDictionary * _Nonnull change) { - const auto changeKind = static_cast([change[NSKeyValueChangeKindKey] unsignedLongValue]); - const auto state = static_cast([change[NSKeyValueChangeNewKey] longValue]); - return changeKind == NSKeyValueChangeSetting && state == MGLOfflinePackStateInactive; - }]; - [self expectationForNotification:MGLOfflinePackProgressChangedNotification object:pack handler:^BOOL(NSNotification * _Nonnull notification) { - MGLOfflinePack *notificationPack = notification.object; - XCTAssert([notificationPack isKindOfClass:[MGLOfflinePack class]], @"Object of notification should be an MGLOfflinePack."); - - NSDictionary *userInfo = notification.userInfo; - XCTAssertNotNil(userInfo, @"Progress change notification should have a userInfo dictionary."); - - NSNumber *stateNumber = userInfo[MGLOfflinePackUserInfoKeyState]; - XCTAssert([stateNumber isKindOfClass:[NSNumber class]], @"Progress change notification’s state should be an NSNumber."); - XCTAssertEqual(stateNumber.integerValue, pack.state, @"State in a progress change notification should match the pack’s state."); - - NSValue *progressValue = userInfo[MGLOfflinePackUserInfoKeyProgress]; - XCTAssert([progressValue isKindOfClass:[NSValue class]], @"Progress change notification’s progress should be an NSValue."); - XCTAssertEqualObjects(progressValue, [NSValue valueWithMGLOfflinePackProgress:pack.progress], @"Progress change notification’s progress should match pack’s progress."); - - return notificationPack == pack && pack.state == MGLOfflinePackStateInactive; - }]; - [pack requestProgress]; - [self waitForExpectationsWithTimeout:5 handler:nil]; - pack = nil; -} - -- (void)testInvalidatePack { - XCTestExpectation *expectation = [self expectationWithDescription:@"Expect offline pack to be invalidated without an error."]; - MGLCoordinateBounds bounds = { - { .latitude = 48.8660, .longitude = 2.3306 }, - { .latitude = 48.8603, .longitude = 2.3213 }, - }; - - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - MGLTilePyramidOfflineRegion *region = [[MGLTilePyramidOfflineRegion alloc] initWithStyleURL:styleURL bounds:bounds fromZoomLevel:10 toZoomLevel:11]; - - NSString *nameKey = @"Name"; - NSString *name = @"Paris square"; - - NSData *context = [NSKeyedArchiver archivedDataWithRootObject:@{nameKey: name}]; - [[MGLOfflineStorage sharedOfflineStorage] addPackForRegion:region withContext:context completionHandler:^(MGLOfflinePack * _Nullable pack, NSError * _Nullable error) { - XCTAssertNotNil(pack); - [[MGLOfflineStorage sharedOfflineStorage] invalidatePack:pack withCompletionHandler:^(NSError * _Nullable) { - XCTAssertNotNil(pack); - XCTAssertNil(error); - [expectation fulfill]; - }]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testSetMaximumAmbientCache { - XCTestExpectation *expectation = [self expectationWithDescription:@"Expect maximum cache size to be raised without an error."]; - [[MGLOfflineStorage sharedOfflineStorage] setMaximumAmbientCacheSize:0 withCompletionHandler:^(NSError * _Nullable error) { - XCTAssertNil(error); - [expectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testInvalidateAmbientCache { - XCTestExpectation *expectation = [self expectationWithDescription:@"Expect cache to be invalidated without an error."]; - [[MGLOfflineStorage sharedOfflineStorage] invalidateAmbientCacheWithCompletionHandler:^(NSError * _Nullable error) { - XCTAssertNil(error); - [expectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testClearCache { - XCTestExpectation *expectation = [self expectationWithDescription:@"Expect cache to be cleared without an error."]; - [[MGLOfflineStorage sharedOfflineStorage] clearAmbientCacheWithCompletionHandler:^(NSError * _Nullable error) { - XCTAssertNil(error); - [expectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testResetDatabase { - XCTestExpectation *expectation = [self expectationWithDescription:@"Expect database to be reset without an error."]; - [[MGLOfflineStorage sharedOfflineStorage] resetDatabaseWithCompletionHandler:^(NSError * _Nullable error) { - XCTAssertNil(error); - [expectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testBackupExclusion { - NSURL *cacheDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory - inDomain:NSUserDomainMask - appropriateForURL:nil - create:NO - error:nil]; - // As of iOS SDK 12.2 unit tests now have a bundle id: com.apple.dt.xctest.tool - NSString *bundleIdentifier = [NSBundle mgl_applicationBundleIdentifier]; - cacheDirectoryURL = [cacheDirectoryURL URLByAppendingPathComponent:bundleIdentifier]; - cacheDirectoryURL = [cacheDirectoryURL URLByAppendingPathComponent:@".mapbox"]; - XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:cacheDirectoryURL.path], @"Cache subdirectory should exist."); - - NSURL *cacheURL = [cacheDirectoryURL URLByAppendingPathComponent:@"cache.db"]; - XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:cacheURL.path], @"Cache database should exist."); - - NSError *error = nil; - NSNumber *exclusionFlag = nil; - [cacheDirectoryURL getResourceValue:&exclusionFlag - forKey:NSURLIsExcludedFromBackupKey - error:&error]; - XCTAssertTrue(exclusionFlag && [exclusionFlag boolValue], @"Backup exclusion flag should be set for the directory containing the cache database."); - XCTAssertNil(error, @"No errors should be returned when checking backup exclusion flag."); -} - -- (void)testRemovePack { - NSUInteger countOfPacks = [MGLOfflineStorage sharedOfflineStorage].packs.count; - - MGLOfflinePack *pack = [MGLOfflineStorage sharedOfflineStorage].packs.lastObject; - XCTAssertNotNil(pack, @"Added pack should still exist."); - - [self keyValueObservingExpectationForObject:[MGLOfflineStorage sharedOfflineStorage] keyPath:@"packs" handler:^BOOL(id _Nonnull observedObject, NSDictionary * _Nonnull change) { - const auto changeKind = static_cast([change[NSKeyValueChangeKindKey] unsignedLongValue]); - NSIndexSet *indices = change[NSKeyValueChangeIndexesKey]; - return changeKind == NSKeyValueChangeRemoval && indices.count == 1; - }]; - XCTestExpectation *completionHandlerExpectation = [self expectationWithDescription:@"remove pack completion handler"]; - [[MGLOfflineStorage sharedOfflineStorage] removePack:pack withCompletionHandler:^(NSError * _Nullable error) { - XCTAssertEqual(pack.state, MGLOfflinePackStateInvalid, @"Removed pack should be invalid in the completion handler."); - [completionHandlerExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; - - XCTAssertEqual(pack.state, MGLOfflinePackStateInvalid, @"Removed pack should have been invalidated synchronously."); - - XCTAssertEqual([MGLOfflineStorage sharedOfflineStorage].packs.count, countOfPacks - 1, @"Removed pack should have been removed from the canonical collection of packs owned by the shared offline storage object. This assertion can fail if this test is run before -testAAALoadPacks or -testAddPack."); -} - -- (void)addPacks:(NSInteger)count { - - XCTestExpectation *expectation = [self expectationWithDescription:@"added packs"]; - - NSURL *styleURL = [MGLStyle lightStyleURLWithVersion:8]; - - MGLCoordinateBounds bounds[] = { - {{51.5, -0.2}, {51.6, -0.1}}, // London - {{60.1, 24.8}, {60.3, 25.1}}, // Helsinki - {{38.9, -77.1}, {38.9, -77.0}}, // DC - {{37.7, -122.5}, {37.9, -122.4}} // SF - }; - - int arraySize = sizeof(bounds)/sizeof(bounds[0]); - - count = MIN(count, arraySize); - - dispatch_group_t group = dispatch_group_create(); - - for (int i = 0; i < count; i++) { - - dispatch_group_enter(group); - MGLTilePyramidOfflineRegion *region = [[MGLTilePyramidOfflineRegion alloc] initWithStyleURL:styleURL bounds:bounds[i] fromZoomLevel:20 toZoomLevel:20]; - NSData *context = [NSKeyedArchiver archivedDataWithRootObject:@{ - @"index": @(i) - }]; - - [[MGLOfflineStorage sharedOfflineStorage] addPackForRegion:region - withContext:context - completionHandler:^(MGLOfflinePack * _Nullable pack, NSError * _Nullable error) { - XCTAssertNotNil(pack); - XCTAssertNil(error); - - dispatch_group_leave(group); - }]; - } - - dispatch_group_notify(group, dispatch_get_main_queue(), ^{ - [expectation fulfill]; - }); - - [self waitForExpectations:@[expectation] timeout:1.0]; -} - -- (void)testRemovePackTwiceInSuccession { - - [self addPacks:1]; - - NSUInteger countOfPacks = [MGLOfflineStorage sharedOfflineStorage].packs.count; - - MGLOfflinePack *pack = [MGLOfflineStorage sharedOfflineStorage].packs.lastObject; - XCTAssertNotNil(pack, @"Added pack should still exist."); - - [self keyValueObservingExpectationForObject:[MGLOfflineStorage sharedOfflineStorage] keyPath:@"packs" handler:^BOOL(id _Nonnull observedObject, NSDictionary * _Nonnull change) { - const auto changeKind = static_cast([change[NSKeyValueChangeKindKey] unsignedLongValue]); - NSIndexSet *indices = change[NSKeyValueChangeIndexesKey]; - return changeKind == NSKeyValueChangeRemoval && indices.count == 1; - }]; - - XCTestExpectation *completionHandlerExpectation = [self expectationWithDescription:@"remove pack completion handler"]; - - [[MGLOfflineStorage sharedOfflineStorage] removePack:pack withCompletionHandler:nil]; - - NSAssertionHandler *oldHandler = [NSAssertionHandler currentHandler]; - MGLTestAssertionHandler *newHandler = [[MGLTestAssertionHandler alloc] initWithTestCase:self]; - - [[[NSThread currentThread] threadDictionary] setValue:newHandler forKey:NSAssertionHandlerKey]; - - [[MGLOfflineStorage sharedOfflineStorage] removePack:pack withCompletionHandler:^(NSError * _Nullable error) { - XCTAssertEqual(pack.state, MGLOfflinePackStateInvalid, @"Removed pack should be invalid in the completion handler."); - [completionHandlerExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; - - [[[NSThread currentThread] threadDictionary] setValue:oldHandler forKey:NSAssertionHandlerKey]; - - XCTAssertEqual(pack.state, MGLOfflinePackStateInvalid, @"Removed pack should have been invalidated synchronously."); - - XCTAssertEqual([MGLOfflineStorage sharedOfflineStorage].packs.count, countOfPacks - 1, @"Removed pack should have been removed from the canonical collection of packs owned by the shared offline storage object. This assertion can fail if this test is run before -testAAALoadPacks or -testAddPack."); - - NSLog(@"Test `%@` complete", NSStringFromSelector(_cmd)); -} - -- (void)test15536RemovePacksWhileReloading { - - // This test triggers - // - // throw std::runtime_error("Malformed offline region definition"); - // - // in offline.cpp - // - // Reloading packs, while trying to remove them is currently problematic. - - [self addPacks:4]; - - NSInteger countOfPacks = [MGLOfflineStorage sharedOfflineStorage].packs.count; - XCTAssert(countOfPacks > 0); - - // Now delete packs one by one - XCTestExpectation *expectation = [self expectationWithDescription:@"All packs removed"]; - expectation.expectedFulfillmentCount = countOfPacks; - - MGLOfflineStorage *storage = [MGLOfflineStorage sharedOfflineStorage]; - NSArray *packs = [storage.packs copy]; - - // Simulate what happens the first time sharedOfflineStorage is accessed - [storage reloadPacks]; - - NSArray *validPacks = [packs filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary * _Nullable bindings) { - MGLOfflinePack *pack = (MGLOfflinePack*)evaluatedObject; - return pack.state != MGLOfflinePackStateInvalid; - }]]; - - NSAssertionHandler *oldHandler = [NSAssertionHandler currentHandler]; - MGLTestAssertionHandler *newHandler = [[MGLTestAssertionHandler alloc] initWithTestCase:self]; - - [[[NSThread currentThread] threadDictionary] setValue:newHandler forKey:NSAssertionHandlerKey]; - - for (MGLOfflinePack *pack in validPacks) { - [storage removePack:pack withCompletionHandler:^(NSError * _Nullable error) { - [expectation fulfill]; - }]; - } - - [[[NSThread currentThread] threadDictionary] setValue:oldHandler forKey:NSAssertionHandlerKey]; - - [self waitForExpectations:@[expectation] timeout:10.0]; - - // TODO: What should we expect here? All packs removed? - - NSLog(@"Test `%@` complete", NSStringFromSelector(_cmd)); -} - -// Test to explore https://github.com/mapbox/mapbox-gl-native/issues/15536 -- (void)test15536RemovePacksOnBackgroundQueueWhileReloading { - - [self addPacks:4]; - - NSInteger countOfPacks = [MGLOfflineStorage sharedOfflineStorage].packs.count; - XCTAssert(countOfPacks > 0); - - // Now delete packs one by one - dispatch_queue_t queue = dispatch_queue_create("com.mapbox.testRemovePacks", DISPATCH_QUEUE_SERIAL); - - XCTestExpectation *expectation = [self expectationWithDescription:@"all packs removed"]; - expectation.expectedFulfillmentCount = countOfPacks; - - MGLOfflineStorage *storage = [MGLOfflineStorage sharedOfflineStorage]; - - // Simulate what happens the first time sharedOfflineStorage is accessed - [storage reloadPacks]; - -// NSArray *packs = [storage.packs copy]; - - dispatch_async(queue, ^{ - NSArray *packs = storage.packs; - NSAssertionHandler *oldHandler = [NSAssertionHandler currentHandler]; - MGLTestAssertionHandler *newHandler = [[MGLTestAssertionHandler alloc] initWithTestCase:self]; - - [[[NSThread currentThread] threadDictionary] setValue:newHandler forKey:NSAssertionHandlerKey]; - - NSArray *validPacks = [packs filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary * _Nullable bindings) { - MGLOfflinePack *pack = (MGLOfflinePack*)evaluatedObject; - return pack.state != MGLOfflinePackStateInvalid; - }]]; - - for (MGLOfflinePack *pack in validPacks) { - // NOTE: pack can be invalid, as we have two threads potentially - // modifying the same MGLOfflinePack. - - dispatch_group_t group = dispatch_group_create(); - dispatch_group_enter(group); - [storage removePack:pack withCompletionHandler:^(NSError * _Nullable error) { - dispatch_group_leave(group); - }]; - dispatch_group_wait(group, DISPATCH_TIME_FOREVER); - - [expectation fulfill]; - } - - [[[NSThread currentThread] threadDictionary] setValue:oldHandler forKey:NSAssertionHandlerKey]; - }); - - [self waitForExpectations:@[expectation] timeout:60.0]; - - // TODO: What should we expect here? All packs removed? - - NSLog(@"Test `%@` complete", NSStringFromSelector(_cmd)); -} - -- (void)testCountOfBytesCompleted { - XCTAssertGreaterThan([MGLOfflineStorage sharedOfflineStorage].countOfBytesCompleted, 0UL); -} - -- (NSURL *)offlineStorage:(MGLOfflineStorage *)storage - URLForResourceOfKind:(MGLResourceKind)kind - withURL:(NSURL *)url { - if ([url.scheme isEqual: @"test"] && [url.host isEqual: @"api"]) { - return [NSURL URLWithString:@"https://api.mapbox.com"]; - } else { - return url; - } -} - -- (void)testResourceTransform { - MGLOfflineStorage *os = [MGLOfflineStorage sharedOfflineStorage]; - [os setDelegate:self]; - - auto fs = os.mbglFileSource; - - // Delegate returns "https://api.mapbox.com" as a replacement URL. - const mbgl::Resource resource { mbgl::Resource::Unknown, "test://api" }; - std::unique_ptr req; - req = fs->request(resource, [&](mbgl::Response res) { - req.reset(); - XCTAssertFalse(res.error.get(), @"Request should not return an error"); - XCTAssertTrue(res.data.get(), @"Request should return data"); - XCTAssertEqual("{\"api\":\"mapbox\"}", *res.data, @"Request did not return expected data"); - CFRunLoopStop(CFRunLoopGetCurrent()); - }); - - CFRunLoopRun(); - - [os setDelegate:nil]; -} - -- (void)testAddFileContent { - NSFileManager *fileManager = [NSFileManager defaultManager]; - - // Valid database - [XCTContext runActivityNamed:@"Valid database" block:^(id activity) { - NSURL *resourceURL = [NSURL fileURLWithPath:[[NSBundle bundleForClass:[self class]] pathForResource:@"sideload_sat" ofType:@"db"]]; - - NSError *error; - NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:resourceURL.path error:&error]; - XCTAssertNil(error, @"Getting the file's attributes should not return an error. (%@)", resourceURL.path); - - NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize]; - long long fileSize = [fileSizeNumber longLongValue]; - long long databaseFileSize = 73728; - // Merging databases creates an empty file if the file does not exist at the given path. - XCTAssertEqual(fileSize, databaseFileSize, @"The database file size must be:%lld actual size:%lld", databaseFileSize, fileSize); - - NSUInteger countOfPacks = [MGLOfflineStorage sharedOfflineStorage].packs.count; - - [self keyValueObservingExpectationForObject:[MGLOfflineStorage sharedOfflineStorage] keyPath:@"packs" handler:^BOOL(id _Nonnull observedObject, NSDictionary * _Nonnull change) { - const auto changeKind = static_cast([change[NSKeyValueChangeKindKey] unsignedLongValue]); - NSIndexSet *indices = change[NSKeyValueChangeIndexesKey]; - return changeKind == NSKeyValueChangeInsertion && indices.count == 1; - }]; - - XCTestExpectation *fileAdditionCompletionHandlerExpectation = [self expectationWithDescription:@"add database content completion handler"]; - MGLOfflineStorage *os = [MGLOfflineStorage sharedOfflineStorage]; - [os addContentsOfURL:resourceURL withCompletionHandler:^(NSURL *fileURL, NSArray * _Nullable packs, NSError * _Nullable error) { - XCTAssertNotNil(fileURL, @"The fileURL should not be nil."); - XCTAssertNotNil(packs, @"Adding the contents of the sideload_sat.db should update one pack."); - XCTAssertNil(error, @"Adding contents to a file should not return an error."); - for (MGLOfflinePack *pack in [MGLOfflineStorage sharedOfflineStorage].packs) { - NSLog(@"PACK:%@", pack); - } - [fileAdditionCompletionHandlerExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - // Depending on the database it may update or add a pack. For this case specifically the offline database adds one pack. - XCTAssertEqual([MGLOfflineStorage sharedOfflineStorage].packs.count, countOfPacks + 1, @"Adding contents of sideload_sat.db should add one pack."); - }]; - - // Invalid database type - [XCTContext runActivityNamed:@"Invalid database type" block:^(id activity) { - NSURL *resourceURL = [NSURL fileURLWithPath:[[NSBundle bundleForClass:[self class]] pathForResource:@"one-liner" ofType:@"json"]]; - - XCTestExpectation *invalidFileCompletionHandlerExpectation = [self expectationWithDescription:@"invalid content database completion handler"]; - MGLOfflineStorage *os = [MGLOfflineStorage sharedOfflineStorage]; - [os addContentsOfFile:resourceURL.path withCompletionHandler:^(NSURL *fileURL, NSArray * _Nullable packs, NSError * _Nullable error) { - XCTAssertNotNil(error, @"Passing an invalid offline database file should return an error."); - XCTAssertNil(packs, @"Passing an invalid offline database file should not add packs to the offline database."); - [invalidFileCompletionHandlerExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - }]; - - // File does not exist - [XCTContext runActivityNamed:@"File does not exist" block:^(id activity) { - NSURL *resourceURL = [NSURL URLWithString:@"nonexistent.db"]; - - MGLOfflineStorage *os = [MGLOfflineStorage sharedOfflineStorage]; - XCTAssertThrowsSpecificNamed([os addContentsOfURL:resourceURL withCompletionHandler:nil], NSException, NSInvalidArgumentException, "MGLOfflineStorage should rise an exception if an invalid database file is passed."); - }]; - - // URL to a non-file - [XCTContext runActivityNamed:@"URL to a non-file" block:^(id activity) { - NSURL *resourceURL = [NSURL URLWithString:@"https://www.mapbox.com"]; - - MGLOfflineStorage *os = [MGLOfflineStorage sharedOfflineStorage]; - XCTAssertThrowsSpecificNamed([os addContentsOfURL:resourceURL withCompletionHandler:nil], NSException, NSInvalidArgumentException, "MGLOfflineStorage should rise an exception if an invalid URL file is passed."); - }]; -} - -- (void)testPutResourceForURL { - NSURL *styleURL = [NSURL URLWithString:@"https://api.mapbox.com/some/thing"]; - - MGLOfflineStorage *os = [MGLOfflineStorage sharedOfflineStorage]; - std::string testData("test data"); - NSData *data = [NSData dataWithBytes:testData.c_str() length:testData.length()]; - [os preloadData:data forURL:styleURL modificationDate:nil expirationDate:nil eTag:nil mustRevalidate:NO]; - - auto fs = os.mbglFileSource; - const mbgl::Resource resource { mbgl::Resource::Unknown, "https://api.mapbox.com/some/thing" }; - std::unique_ptr req; - req = fs->request(resource, [&](mbgl::Response res) { - req.reset(); - XCTAssertFalse(res.error.get(), @"Request should not return an error"); - XCTAssertTrue(res.data.get(), @"Request should return data"); - XCTAssertFalse(res.modified, @"Request should not have a modification timestamp"); - XCTAssertFalse(res.expires, @"Request should not have an expiration timestamp"); - XCTAssertFalse(res.etag, @"Request should not have an entity tag"); - XCTAssertFalse(res.mustRevalidate, @"Request should not require revalidation"); - XCTAssertEqual("test data", *res.data, @"Request did not return expected data"); - CFRunLoopStop(CFRunLoopGetCurrent()); - }); - - CFRunLoopRun(); -} - -- (void)testPutResourceForURLWithTimestamps { - NSURL *styleURL = [NSURL URLWithString:@"https://api.mapbox.com/some/thing"]; - - MGLOfflineStorage *os = [MGLOfflineStorage sharedOfflineStorage]; - std::string testData("test data"); - NSDate *now = [NSDate date]; - NSDate *future = [now dateByAddingTimeInterval:600]; - NSData *data = [NSData dataWithBytes:testData.c_str() length:testData.length()]; - [os preloadData:data forURL:styleURL modificationDate:now expirationDate:future eTag:@"some etag" mustRevalidate:YES]; - - auto fs = os.mbglFileSource; - const mbgl::Resource resource { mbgl::Resource::Unknown, "https://api.mapbox.com/some/thing" }; - std::unique_ptr req; - req = fs->request(resource, [&](mbgl::Response res) { - req.reset(); - XCTAssertFalse(res.error.get(), @"Request should not return an error"); - XCTAssertTrue(res.data.get(), @"Request should return data"); - XCTAssertTrue(res.modified, @"Request should have a modification timestamp"); - XCTAssertEqual(MGLTimeIntervalFromDuration(res.modified->time_since_epoch()), floor(now.timeIntervalSince1970), @"Modification timestamp should roundtrip"); - XCTAssertTrue(res.expires, @"Request should have an expiration timestamp"); - XCTAssertEqual(MGLTimeIntervalFromDuration(res.expires->time_since_epoch()), floor(future.timeIntervalSince1970), @"Expiration timestamp should roundtrip"); - XCTAssertTrue(res.etag, @"Request should have an entity tag"); - XCTAssertEqual(*res.etag, "some etag", @"Entity tag should roundtrip"); - XCTAssertTrue(res.mustRevalidate, @"Request should require revalidation"); - XCTAssertEqual("test data", *res.data, @"Request did not return expected data"); - CFRunLoopStop(CFRunLoopGetCurrent()); - }); - - CFRunLoopRun(); -} - -@end diff --git a/platform/darwin/test/MGLPredicateTests.mm b/platform/darwin/test/MGLPredicateTests.mm deleted file mode 100644 index 2ed18d48fc1..00000000000 --- a/platform/darwin/test/MGLPredicateTests.mm +++ /dev/null @@ -1,426 +0,0 @@ -#import -#import - -#import "NSPredicate+MGLPrivateAdditions.h" -#import "MGLValueEvaluator.h" - -@interface MGLPredicateTests : XCTestCase -@end - -@implementation MGLPredicateTests - -- (void)testUnsupportedFilterPredicates { - XCTAssertThrowsSpecificNamed([NSPredicate predicateWithFormat:@"a BEGINSWITH 'L'"].mgl_filter, NSException, NSInvalidArgumentException); - XCTAssertThrowsSpecificNamed([NSPredicate predicateWithFormat:@"a ENDSWITH 'itude'"].mgl_filter, NSException, NSInvalidArgumentException); - XCTAssertThrowsSpecificNamed([NSPredicate predicateWithFormat:@"a LIKE 'glob?trotter'"].mgl_filter, NSException, NSInvalidArgumentException); - XCTAssertThrowsSpecificNamed([NSPredicate predicateWithFormat:@"a MATCHES 'i\\w{18}n'"].mgl_filter, NSException, NSInvalidArgumentException); - NSPredicate *selectorPredicate = [NSPredicate predicateWithFormat:@"(SELF isKindOfClass: %@)", [MGLPolyline class]]; - XCTAssertThrowsSpecificNamed(selectorPredicate.mgl_filter, NSException, NSInvalidArgumentException); - - XCTAssertThrowsSpecificNamed([NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary * _Nullable bindings) { - XCTAssertTrue(NO, @"Predicate block should not be evaluated."); - return NO; - }].mgl_filter, NSException, NSInvalidArgumentException); -} - -- (void)testComparisonPredicates { - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"x == YES"]; - NSArray *jsonExpression = @[@"==", @[@"get", @"x"], @YES]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(x, 'NSNumber') < 5"]; - NSArray *jsonExpression = @[@"<", @[@"to-number", @[@"get", @"x"]], @5]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(x, 'NSNumber') > 5"]; - NSArray *jsonExpression = @[@">", @[@"to-number", @[@"get", @"x"]], @5]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(x, 'NSNumber') <= 5"]; - NSArray *jsonExpression = @[@"<=", @[@"to-number", @[@"get", @"x"]], @5]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(x, 'NSNumber') >= 5"]; - NSArray *jsonExpression = @[@">=", @[@"to-number", @[@"get", @"x"]], @5]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(x, 'NSString') > 'value'"]; - NSArray *jsonExpression = @[@">", @[@"to-string", @[@"get", @"x"]], @"value"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a = 'b'"]; - NSArray *jsonExpression = @[@"==", @[@"get", @"a"], @"b"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"$geometryType = 'Point'"]; - NSArray *jsonExpression = @[@"==", @[@"geometry-type"], @"Point"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"$featureIdentifier = 67086180"]; - NSArray *jsonExpression = @[@"==", @[@"id"], @67086180]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"$featureIdentifier = nil"]; - NSArray *jsonExpression = @[@"==", @[@"id"], [NSNull null]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a = nil"]; - NSArray *jsonExpression = @[@"==", @[@"get", @"a"], [NSNull null]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"$geometryType != 'Point'"]; - NSArray *jsonExpression = @[@"!=", @[@"geometry-type"], @"Point"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"$featureIdentifier != 67086180"]; - NSArray *jsonExpression = @[@"!=", @[@"id"], @67086180]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"$featureIdentifier != nil"]; - NSArray *jsonExpression = @[@"!=", @[@"id"], [NSNull null]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a != 'b'"]; - NSArray *jsonExpression = @[@"!=", @[@"get", @"a"], @"b"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a != nil"]; - NSArray *jsonExpression = @[@"!=", @[@"get", @"a"], [NSNull null]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(a, 'NSString') < 'b'"]; - NSArray *jsonExpression = @[@"<", @[@"to-string", @[@"get", @"a"]], @"b"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(a, 'NSString') <= 'b'"]; - NSArray *jsonExpression = @[@"<=", @[@"to-string", @[@"get", @"a"]], @"b"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(a, 'NSString') > 'b'"]; - NSArray *jsonExpression = @[@">", @[@"to-string", @[@"get", @"a"]], @"b"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(a, 'NSString') >= 'b'"]; - NSArray *jsonExpression = @[@">=", @[@"to-string", @[@"get", @"a"]], @"b"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(a, 'NSString') BETWEEN {'b', 'z'}"]; - NSArray *jsonExpression =@[@"all", @[@"<=", @"b", @[@"to-string", @[@"get", @"a"]]], @[@"<=", @[@"to-string", @[@"get", @"a"]], @"z"]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSExpression *limits = [NSExpression expressionForAggregate:@[[NSExpression expressionForConstantValue:@10], [NSExpression expressionForConstantValue:@100]]]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(x, 'NSNumber') BETWEEN %@", limits]; - NSArray *jsonExpression = @[@"all", @[@">=", @[@"to-number", @[@"get", @"x"]], @10], @[@"<=", @[@"to-number", @[@"get", @"x"]], @100]]; - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSArray *expected = @[@"all", @[@"<=", @10, @[@"to-number", @[@"get", @"x"]]], @[@"<=", @[@"to-number", @[@"get", @"x"]], @100]]; - NSExpression *limits = [NSExpression expressionForAggregate:@[[NSExpression expressionForConstantValue:@10], [NSExpression expressionForConstantValue:@100]]]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(x, 'NSNumber') BETWEEN %@", limits]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:expected], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:expected] - mustRoundTrip:NO]; - } - { - NSArray *expected = @[@"all", @[@"<=", @10, @[@"to-number", @[@"get", @"x"]]], @[@">=", @100, @[@"to-number", @[@"get", @"x"]]]]; - NSExpression *limits = [NSExpression expressionForAggregate:@[[NSExpression expressionForConstantValue:@10], [NSExpression expressionForConstantValue:@100]]]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(x, 'NSNumber') BETWEEN %@", limits]; - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:expected], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:expected] - mustRoundTrip:NO]; - } - { - NSArray *expected = @[@"all", @[@">=", @[@"to-number", @[@"get", @"x"]], @10], @[@">=", @100, @[@"to-number", @[@"get", @"x"]]]]; - NSExpression *limits = [NSExpression expressionForAggregate:@[[NSExpression expressionForConstantValue:@10], [NSExpression expressionForConstantValue:@100]]]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(x, 'NSNumber') BETWEEN %@", limits]; - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:expected], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:expected] - mustRoundTrip:NO]; - } - { - NSArray *expected = @[@"match", @[@"id"], @[@6, @5, @4, @3], @YES, @NO]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"$featureIdentifier IN { 6, 5, 4, 3}"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected); - NSPredicate *predicateAfter = [NSPredicate predicateWithFormat:@"MGL_MATCH($featureIdentifier, { 3, 4, 5, 6 }, YES, NO) == YES"]; - auto forwardFilter = [NSPredicate predicateWithMGLJSONObject:expected].mgl_filter; - NSPredicate *forwardPredicateAfter = [NSPredicate mgl_predicateWithFilter:forwardFilter]; - XCTAssertEqualObjects(predicateAfter, forwardPredicateAfter); - } - { - NSArray *expected = @[@"match", @[@"to-number", @[@"id"]], @[@3002970001, @3004140052, @3002950027, @3002970033], @YES, @NO]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST($featureIdentifier, 'NSNumber') IN { 3002970001, 3004140052, 3002950027, 3002970033 }"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected); - NSPredicate *predicateAfter = [NSPredicate predicateWithFormat:@"MGL_MATCH(CAST($featureIdentifier, 'NSNumber'), { 3002950027, 3002970001, 3002970033, 3004140052 }, YES, NO) == YES"]; - auto forwardFilter = [NSPredicate predicateWithMGLJSONObject:expected].mgl_filter; - NSPredicate *forwardPredicateAfter = [NSPredicate mgl_predicateWithFilter:forwardFilter]; - XCTAssertEqualObjects(predicateAfter, forwardPredicateAfter); - } - { - NSArray *expected = @[@"!", @[@"match", @[@"get", @"x"], @[@6, @5, @4, @3], @YES, @NO]]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT x IN { 6, 5, 4, 3}"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected); - NSPredicate *predicateAfter = [NSPredicate predicateWithFormat:@"NOT MGL_MATCH(x, { 3, 4, 5, 6 }, YES, NO) == YES"]; - auto forwardFilter = [NSPredicate predicateWithMGLJSONObject:expected].mgl_filter; - NSPredicate *forwardPredicateAfter = [NSPredicate mgl_predicateWithFilter:forwardFilter]; - XCTAssertEqualObjects(predicateAfter, forwardPredicateAfter); - } - { - NSArray *expected = @[@"match", @[@"get", @"a"], @[@"b", @"c"], @YES, @NO]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a IN { 'b', 'c' }"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected); - NSPredicate *predicateAfter = [NSPredicate predicateWithFormat:@"MGL_MATCH(a, { 'b', 'c' }, YES, NO) == YES"]; - auto forwardFilter = [NSPredicate predicateWithMGLJSONObject:expected].mgl_filter; - NSPredicate *forwardPredicateAfter = [NSPredicate mgl_predicateWithFilter:forwardFilter]; - XCTAssertEqualObjects(predicateAfter, forwardPredicateAfter); - } - { - NSArray *expected = @[@"match", @[@"geometry-type"], @[@"LineString", @"Polygon"], @YES, @NO]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ IN %@", [NSExpression expressionForVariable:@"geometryType"], @[@"LineString", @"Polygon"]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected); - NSPredicate *predicateAfter = [NSPredicate predicateWithFormat:@"MGL_MATCH($geometryType, { 'LineString', 'Polygon' }, YES, NO) == YES"]; - auto forwardFilter = [NSPredicate predicateWithMGLJSONObject:expected].mgl_filter; - NSPredicate *forwardPredicateAfter = [NSPredicate mgl_predicateWithFilter:forwardFilter]; - XCTAssertEqualObjects(predicateAfter, forwardPredicateAfter); - } - { - NSArray *expected = @[@"match", @[@"get", @"x"], @[@6, @5, @4, @3], @YES, @NO]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"{ 6, 5, 4, 3 } CONTAINS x"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected); - NSPredicate *predicateAfter = [NSPredicate predicateWithFormat:@"MGL_MATCH(x, { 3, 4, 5, 6 }, YES, NO) == YES"]; - auto forwardFilter = [NSPredicate predicateWithMGLJSONObject:expected].mgl_filter; - NSPredicate *forwardPredicateAfter = [NSPredicate mgl_predicateWithFilter:forwardFilter]; - XCTAssertEqualObjects(predicateAfter, forwardPredicateAfter); - } - { - NSArray *expected = @[@"match", @[@"geometry-type"], @[@"LineString", @"Polygon"], @YES, @NO]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ CONTAINS %@", @[@"LineString", @"Polygon"], [NSExpression expressionForVariable:@"geometryType"]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected); - NSPredicate *predicateAfter = [NSPredicate predicateWithFormat:@"MGL_MATCH($geometryType, { 'LineString', 'Polygon' }, YES, NO) == YES"]; - auto forwardFilter = [NSPredicate predicateWithMGLJSONObject:expected].mgl_filter; - NSPredicate *forwardPredicateAfter = [NSPredicate mgl_predicateWithFilter:forwardFilter]; - XCTAssertEqualObjects(predicateAfter, forwardPredicateAfter); - } - { - NSArray *expected = @[@"match", @[@"id"], @[@6, @5, @4, @3], @YES, @NO]; - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"{ 6, 5, 4, 3} CONTAINS $featureIdentifier"]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected); - NSPredicate *predicateAfter = [NSPredicate predicateWithFormat:@"MGL_MATCH($featureIdentifier, { 3, 4, 5, 6 }, YES, NO) == YES"]; - auto forwardFilter = [NSPredicate predicateWithMGLJSONObject:expected].mgl_filter; - NSPredicate *forwardPredicateAfter = [NSPredicate mgl_predicateWithFilter:forwardFilter]; - XCTAssertEqualObjects(predicateAfter, forwardPredicateAfter); - } -} - -- (void)testComparisonPredicatesWithOptions { - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a =[c] 'b'"]; - NSArray *jsonExpression = @[@"==", @[@"get", @"a"], @"b", @[@"collator", @{@"case-sensitive": @NO, @"diacritic-sensitive": @YES}]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a =[d] 'b'"]; - NSArray *jsonExpression = @[@"==", @[@"get", @"a"], @"b", @[@"collator", @{@"case-sensitive": @YES, @"diacritic-sensitive": @NO}]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a =[cd] 'b'"]; - NSArray *jsonExpression = @[@"==", @[@"get", @"a"], @"b", @[@"collator", @{@"case-sensitive": @NO, @"diacritic-sensitive": @NO}]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a !=[cd] 'b'"]; - NSArray *jsonExpression = @[@"!=", @[@"get", @"a"], @"b", @[@"collator", @{@"case-sensitive": @NO, @"diacritic-sensitive": @NO}]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(a, 'NSString') <[cd] 'b'"]; - NSArray *jsonExpression = @[@"<", @[@"to-string", @[@"get", @"a"]], @"b", @[@"collator", @{@"case-sensitive": @NO, @"diacritic-sensitive": @NO}]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(a, 'NSString') <=[cd] 'b'"]; - NSArray *jsonExpression = @[@"<=", @[@"to-string", @[@"get", @"a"]], @"b", @[@"collator", @{@"case-sensitive": @NO, @"diacritic-sensitive": @NO}]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(a, 'NSString') >[cd] 'b'"]; - NSArray *jsonExpression = @[@">", @[@"to-string", @[@"get", @"a"]], @"b", @[@"collator", @{@"case-sensitive": @NO, @"diacritic-sensitive": @NO}]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST(a, 'NSString') >=[cd] 'b'"]; - NSArray *jsonExpression = @[@">=", @[@"to-string", @[@"get", @"a"]], @"b", @[@"collator", @{@"case-sensitive": @NO, @"diacritic-sensitive": @NO}]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"TRUE = MGL_FUNCTION('==', a, 'b', MGL_FUNCTION('collator', %@))", @{ - @"case-sensitive": @NO, - @"diacritic-sensitive": @NO, - @"locale": @"tlh", - }]; - NSArray *jsonExpression = @[@"==", @[@"get", @"a"], @"b", - @[@"collator", - @{@"case-sensitive": @NO, - @"diacritic-sensitive": @NO, - @"locale": @"tlh"}]]; - XCTAssertEqualObjects([predicate.mgl_jsonExpressionObject lastObject], jsonExpression); - } -} - -- (void)testCompoundPredicates { - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a == 'b' AND c == 'd'"]; - NSArray *jsonExpression = @[@"all", @[@"==", @[@"get", @"a"], @"b"], @[@"==", @[@"get", @"c"], @"d"]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a == 'b' OR c == 'd'"]; - NSArray *jsonExpression = @[@"any", @[@"==", @[@"get", @"a"], @"b"], @[@"==", @[@"get", @"c"], @"d"]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT(a == 'b' AND c == 'd')"]; - NSArray *jsonExpression = @[@"!", @[@"all", @[@"==", @[@"get", @"a"], @"b"], @[@"==", @[@"get", @"c"], @"d"]]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT(a == 'b' OR c == 'd')"]; - NSArray *jsonExpression = @[@"!", @[@"any", @[@"==", @[@"get", @"a"], @"b"], @[@"==", @[@"get", @"c"], @"d"]]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - XCTAssertEqualObjects([NSPredicate predicateWithMGLJSONObject:jsonExpression], predicate); - [self testSymmetryWithPredicate:[NSPredicate predicateWithMGLJSONObject:jsonExpression] - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT a == nil"]; - NSArray *jsonExpression = @[@"!", @[@"==", @[@"get", @"a"], [NSNull null]]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } - { - NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT a != nil"]; - NSArray *jsonExpression = @[@"!", @[@"!=", @[@"get", @"a"], [NSNull null]]]; - XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, jsonExpression); - [self testSymmetryWithPredicate:predicate - mustRoundTrip:NO]; - } -} - -- (void)testSymmetryWithPredicate:(NSPredicate *)forwardPredicate mustRoundTrip:(BOOL)mustRoundTrip { - auto forwardFilter = forwardPredicate.mgl_filter; - NSPredicate *forwardPredicateAfter = [NSPredicate mgl_predicateWithFilter:forwardFilter]; - if (mustRoundTrip) { - // A collection of ints may turn into an aggregate of longs, for - // example, so compare formats instead of the predicates themselves. - XCTAssertEqualObjects(forwardPredicate.predicateFormat, forwardPredicateAfter.predicateFormat); - } else { - XCTAssertEqualObjects(forwardPredicate, forwardPredicateAfter); - } -} - -@end diff --git a/platform/darwin/test/MGLRasterStyleLayerTests.mm b/platform/darwin/test/MGLRasterStyleLayerTests.mm deleted file mode 100644 index 5168d2e0d48..00000000000 --- a/platform/darwin/test/MGLRasterStyleLayerTests.mm +++ /dev/null @@ -1,430 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLStyleLayerTests.h" -#import "../../darwin/src/NSDate+MGLAdditions.h" - -#import "MGLStyleLayer_Private.h" - -#include -#include -#include - -@interface MGLRasterLayerTests : MGLStyleLayerTests -@end - -@implementation MGLRasterLayerTests - -+ (NSString *)layerType { - return @"raster"; -} - -- (void)testProperties { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - - MGLRasterStyleLayer *layer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertEqualObjects(@(layer.rawLayer->getTypeInfo()->type), @"raster"); - auto rawLayer = static_cast(layer.rawLayer); - - MGLTransition transitionTest = MGLTransitionMake(5, 4); - - - // raster-brightness-max - { - XCTAssertTrue(rawLayer->getRasterBrightnessMax().isUndefined(), - @"raster-brightness-max should be unset initially."); - NSExpression *defaultExpression = layer.maximumRasterBrightness; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.maximumRasterBrightness = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getRasterBrightnessMax(), propertyValue, - @"Setting maximumRasterBrightness to a constant value expression should update raster-brightness-max."); - XCTAssertEqualObjects(layer.maximumRasterBrightness, constantExpression, - @"maximumRasterBrightness should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.maximumRasterBrightness = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getRasterBrightnessMax(), propertyValue, - @"Setting maximumRasterBrightness to a camera expression should update raster-brightness-max."); - XCTAssertEqualObjects(layer.maximumRasterBrightness, functionExpression, - @"maximumRasterBrightness should round-trip camera expressions."); - - - layer.maximumRasterBrightness = nil; - XCTAssertTrue(rawLayer->getRasterBrightnessMax().isUndefined(), - @"Unsetting maximumRasterBrightness should return raster-brightness-max to the default value."); - XCTAssertEqualObjects(layer.maximumRasterBrightness, defaultExpression, - @"maximumRasterBrightness should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.maximumRasterBrightness = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.maximumRasterBrightness = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // raster-brightness-min - { - XCTAssertTrue(rawLayer->getRasterBrightnessMin().isUndefined(), - @"raster-brightness-min should be unset initially."); - NSExpression *defaultExpression = layer.minimumRasterBrightness; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.minimumRasterBrightness = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getRasterBrightnessMin(), propertyValue, - @"Setting minimumRasterBrightness to a constant value expression should update raster-brightness-min."); - XCTAssertEqualObjects(layer.minimumRasterBrightness, constantExpression, - @"minimumRasterBrightness should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.minimumRasterBrightness = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getRasterBrightnessMin(), propertyValue, - @"Setting minimumRasterBrightness to a camera expression should update raster-brightness-min."); - XCTAssertEqualObjects(layer.minimumRasterBrightness, functionExpression, - @"minimumRasterBrightness should round-trip camera expressions."); - - - layer.minimumRasterBrightness = nil; - XCTAssertTrue(rawLayer->getRasterBrightnessMin().isUndefined(), - @"Unsetting minimumRasterBrightness should return raster-brightness-min to the default value."); - XCTAssertEqualObjects(layer.minimumRasterBrightness, defaultExpression, - @"minimumRasterBrightness should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.minimumRasterBrightness = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.minimumRasterBrightness = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // raster-contrast - { - XCTAssertTrue(rawLayer->getRasterContrast().isUndefined(), - @"raster-contrast should be unset initially."); - NSExpression *defaultExpression = layer.rasterContrast; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.rasterContrast = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getRasterContrast(), propertyValue, - @"Setting rasterContrast to a constant value expression should update raster-contrast."); - XCTAssertEqualObjects(layer.rasterContrast, constantExpression, - @"rasterContrast should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.rasterContrast = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getRasterContrast(), propertyValue, - @"Setting rasterContrast to a camera expression should update raster-contrast."); - XCTAssertEqualObjects(layer.rasterContrast, functionExpression, - @"rasterContrast should round-trip camera expressions."); - - - layer.rasterContrast = nil; - XCTAssertTrue(rawLayer->getRasterContrast().isUndefined(), - @"Unsetting rasterContrast should return raster-contrast to the default value."); - XCTAssertEqualObjects(layer.rasterContrast, defaultExpression, - @"rasterContrast should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.rasterContrast = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.rasterContrast = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.rasterContrastTransition = transitionTest; - auto toptions = rawLayer->getRasterContrastTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition rasterContrastTransition = layer.rasterContrastTransition; - XCTAssertEqual(rasterContrastTransition.delay, transitionTest.delay); - XCTAssertEqual(rasterContrastTransition.duration, transitionTest.duration); - } - - // raster-fade-duration - { - XCTAssertTrue(rawLayer->getRasterFadeDuration().isUndefined(), - @"raster-fade-duration should be unset initially."); - NSExpression *defaultExpression = layer.rasterFadeDuration; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.rasterFadeDuration = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getRasterFadeDuration(), propertyValue, - @"Setting rasterFadeDuration to a constant value expression should update raster-fade-duration."); - XCTAssertEqualObjects(layer.rasterFadeDuration, constantExpression, - @"rasterFadeDuration should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.rasterFadeDuration = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getRasterFadeDuration(), propertyValue, - @"Setting rasterFadeDuration to a camera expression should update raster-fade-duration."); - XCTAssertEqualObjects(layer.rasterFadeDuration, functionExpression, - @"rasterFadeDuration should round-trip camera expressions."); - - - layer.rasterFadeDuration = nil; - XCTAssertTrue(rawLayer->getRasterFadeDuration().isUndefined(), - @"Unsetting rasterFadeDuration should return raster-fade-duration to the default value."); - XCTAssertEqualObjects(layer.rasterFadeDuration, defaultExpression, - @"rasterFadeDuration should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.rasterFadeDuration = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.rasterFadeDuration = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // raster-hue-rotate - { - XCTAssertTrue(rawLayer->getRasterHueRotate().isUndefined(), - @"raster-hue-rotate should be unset initially."); - NSExpression *defaultExpression = layer.rasterHueRotation; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.rasterHueRotation = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getRasterHueRotate(), propertyValue, - @"Setting rasterHueRotation to a constant value expression should update raster-hue-rotate."); - XCTAssertEqualObjects(layer.rasterHueRotation, constantExpression, - @"rasterHueRotation should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.rasterHueRotation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getRasterHueRotate(), propertyValue, - @"Setting rasterHueRotation to a camera expression should update raster-hue-rotate."); - XCTAssertEqualObjects(layer.rasterHueRotation, functionExpression, - @"rasterHueRotation should round-trip camera expressions."); - - - layer.rasterHueRotation = nil; - XCTAssertTrue(rawLayer->getRasterHueRotate().isUndefined(), - @"Unsetting rasterHueRotation should return raster-hue-rotate to the default value."); - XCTAssertEqualObjects(layer.rasterHueRotation, defaultExpression, - @"rasterHueRotation should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.rasterHueRotation = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.rasterHueRotation = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // raster-opacity - { - XCTAssertTrue(rawLayer->getRasterOpacity().isUndefined(), - @"raster-opacity should be unset initially."); - NSExpression *defaultExpression = layer.rasterOpacity; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.rasterOpacity = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getRasterOpacity(), propertyValue, - @"Setting rasterOpacity to a constant value expression should update raster-opacity."); - XCTAssertEqualObjects(layer.rasterOpacity, constantExpression, - @"rasterOpacity should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.rasterOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getRasterOpacity(), propertyValue, - @"Setting rasterOpacity to a camera expression should update raster-opacity."); - XCTAssertEqualObjects(layer.rasterOpacity, functionExpression, - @"rasterOpacity should round-trip camera expressions."); - - - layer.rasterOpacity = nil; - XCTAssertTrue(rawLayer->getRasterOpacity().isUndefined(), - @"Unsetting rasterOpacity should return raster-opacity to the default value."); - XCTAssertEqualObjects(layer.rasterOpacity, defaultExpression, - @"rasterOpacity should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.rasterOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.rasterOpacity = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.rasterOpacityTransition = transitionTest; - auto toptions = rawLayer->getRasterOpacityTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition rasterOpacityTransition = layer.rasterOpacityTransition; - XCTAssertEqual(rasterOpacityTransition.delay, transitionTest.delay); - XCTAssertEqual(rasterOpacityTransition.duration, transitionTest.duration); - } - - // raster-resampling - { - XCTAssertTrue(rawLayer->getRasterResampling().isUndefined(), - @"raster-resampling should be unset initially."); - NSExpression *defaultExpression = layer.rasterResamplingMode; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'nearest'"]; - layer.rasterResamplingMode = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::RasterResamplingType::Nearest }; - XCTAssertEqual(rawLayer->getRasterResampling(), propertyValue, - @"Setting rasterResamplingMode to a constant value expression should update raster-resampling."); - XCTAssertEqualObjects(layer.rasterResamplingMode, constantExpression, - @"rasterResamplingMode should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'nearest'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.rasterResamplingMode = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("nearest"), 18.0, literal("nearest")) - ); - } - - XCTAssertEqual(rawLayer->getRasterResampling(), propertyValue, - @"Setting rasterResamplingMode to a camera expression should update raster-resampling."); - XCTAssertEqualObjects(layer.rasterResamplingMode, functionExpression, - @"rasterResamplingMode should round-trip camera expressions."); - - - layer.rasterResamplingMode = nil; - XCTAssertTrue(rawLayer->getRasterResampling().isUndefined(), - @"Unsetting rasterResamplingMode should return raster-resampling to the default value."); - XCTAssertEqualObjects(layer.rasterResamplingMode, defaultExpression, - @"rasterResamplingMode should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.rasterResamplingMode = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.rasterResamplingMode = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // raster-saturation - { - XCTAssertTrue(rawLayer->getRasterSaturation().isUndefined(), - @"raster-saturation should be unset initially."); - NSExpression *defaultExpression = layer.rasterSaturation; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.rasterSaturation = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getRasterSaturation(), propertyValue, - @"Setting rasterSaturation to a constant value expression should update raster-saturation."); - XCTAssertEqualObjects(layer.rasterSaturation, constantExpression, - @"rasterSaturation should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.rasterSaturation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getRasterSaturation(), propertyValue, - @"Setting rasterSaturation to a camera expression should update raster-saturation."); - XCTAssertEqualObjects(layer.rasterSaturation, functionExpression, - @"rasterSaturation should round-trip camera expressions."); - - - layer.rasterSaturation = nil; - XCTAssertTrue(rawLayer->getRasterSaturation().isUndefined(), - @"Unsetting rasterSaturation should return raster-saturation to the default value."); - XCTAssertEqualObjects(layer.rasterSaturation, defaultExpression, - @"rasterSaturation should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.rasterSaturation = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.rasterSaturation = functionExpression, NSException, NSInvalidArgumentException, @"MGLRasterLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - // Transition property test - layer.rasterSaturationTransition = transitionTest; - auto toptions = rawLayer->getRasterSaturationTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition rasterSaturationTransition = layer.rasterSaturationTransition; - XCTAssertEqual(rasterSaturationTransition.delay, transitionTest.delay); - XCTAssertEqual(rasterSaturationTransition.duration, transitionTest.duration); - } -} - -- (void)testPropertyNames { - [self testPropertyName:@"maximum-raster-brightness" isBoolean:NO]; - [self testPropertyName:@"minimum-raster-brightness" isBoolean:NO]; - [self testPropertyName:@"raster-contrast" isBoolean:NO]; - [self testPropertyName:@"raster-fade-duration" isBoolean:NO]; - [self testPropertyName:@"raster-hue-rotation" isBoolean:NO]; - [self testPropertyName:@"raster-opacity" isBoolean:NO]; - [self testPropertyName:@"raster-resampling-mode" isBoolean:NO]; - [self testPropertyName:@"raster-saturation" isBoolean:NO]; -} - -- (void)testValueAdditions { - XCTAssertEqual([NSValue valueWithMGLRasterResamplingMode:MGLRasterResamplingModeLinear].MGLRasterResamplingModeValue, MGLRasterResamplingModeLinear); - XCTAssertEqual([NSValue valueWithMGLRasterResamplingMode:MGLRasterResamplingModeNearest].MGLRasterResamplingModeValue, MGLRasterResamplingModeNearest); -} - -@end diff --git a/platform/darwin/test/MGLRendererConfigurationTests.mm b/platform/darwin/test/MGLRendererConfigurationTests.mm deleted file mode 100644 index 6483aa35876..00000000000 --- a/platform/darwin/test/MGLRendererConfigurationTests.mm +++ /dev/null @@ -1,197 +0,0 @@ -#import -#import -#import "MGLRendererConfiguration.h" - -static NSString * const MGLRendererConfigurationTests_collisionBehaviorKey = @"MGLCollisionBehaviorPre4_0"; - -@interface MGLRendererConfiguration (Tests) -- (instancetype)initWithPropertyDictionary:(nonnull NSDictionary*)bundle; -- (mbgl::optional)_localFontFamilyNameWithPropertyDictionary:(nonnull NSDictionary *)properties; -@end - - -@interface MGLRendererConfigurationTests : XCTestCase -@end - -@implementation MGLRendererConfigurationTests -- (void)setUp { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:MGLRendererConfigurationTests_collisionBehaviorKey]; -} - -- (void)tearDown { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:MGLRendererConfigurationTests_collisionBehaviorKey]; -} - -// Emulate what would happen with an Info.plist. -- (void)testSettingMGLCollisionBehaviorPre40WithEmptyDictionary -{ - MGLRendererConfiguration *config = [[MGLRendererConfiguration alloc] initWithPropertyDictionary:@{}]; - XCTAssertFalse(config.perSourceCollisions); -} - -- (void)testSettingMGLCollisionBehaviorPre40WithYESDictionary -{ - MGLRendererConfiguration *config = [[MGLRendererConfiguration alloc] initWithPropertyDictionary:@{MGLRendererConfigurationTests_collisionBehaviorKey:@(NO)}]; - XCTAssertFalse(config.perSourceCollisions); -} - -- (void)testSettingMGLCollisionBehaviorPre40WithNODictionary -{ - MGLRendererConfiguration *config = [[MGLRendererConfiguration alloc] initWithPropertyDictionary:@{MGLRendererConfigurationTests_collisionBehaviorKey:@(YES)}]; - XCTAssert(config.perSourceCollisions); -} - -- (void)testSettingMGLCollisionBehaviorPre40InNSUserDefaults { - { - XCTAssertNil([[NSUserDefaults standardUserDefaults] objectForKey:MGLRendererConfigurationTests_collisionBehaviorKey]); - MGLRendererConfiguration *config = [MGLRendererConfiguration currentConfiguration]; - XCTAssertFalse(config.perSourceCollisions); - } - - [[NSUserDefaults standardUserDefaults] setObject:@(NO) forKey:MGLRendererConfigurationTests_collisionBehaviorKey]; - { - XCTAssertNotNil([[NSUserDefaults standardUserDefaults] objectForKey:MGLRendererConfigurationTests_collisionBehaviorKey]); - MGLRendererConfiguration *config = [MGLRendererConfiguration currentConfiguration]; - XCTAssertFalse(config.perSourceCollisions); - } - - [[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:MGLRendererConfigurationTests_collisionBehaviorKey]; - { - XCTAssertNotNil([[NSUserDefaults standardUserDefaults] objectForKey:MGLRendererConfigurationTests_collisionBehaviorKey]); - MGLRendererConfiguration *config = [MGLRendererConfiguration currentConfiguration]; - XCTAssert(config.perSourceCollisions); - } -} - -- (void)testSettingMGLCollisionBehaviorPre40PListValueUsingString { - // Dictionary = "NO" - { - MGLRendererConfiguration *config = [[MGLRendererConfiguration alloc] initWithPropertyDictionary:@{MGLRendererConfigurationTests_collisionBehaviorKey:@"NO"}]; - XCTAssertFalse(config.perSourceCollisions); - } - - // Dictionary = "YES" - { - MGLRendererConfiguration *config = [[MGLRendererConfiguration alloc] initWithPropertyDictionary:@{MGLRendererConfigurationTests_collisionBehaviorKey:@"YES"}]; - XCTAssert(config.perSourceCollisions); - } -} - -- (void)testOverridingMGLCollisionBehaviorPre40 { - // Dictionary = NO, NSUserDefaults = YES - { - [[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:MGLRendererConfigurationTests_collisionBehaviorKey]; - MGLRendererConfiguration *config = [[MGLRendererConfiguration alloc] initWithPropertyDictionary:@{MGLRendererConfigurationTests_collisionBehaviorKey:@(NO)}]; - XCTAssert(config.perSourceCollisions); - } - // Dictionary = YES, NSUserDefaults = NO - { - [[NSUserDefaults standardUserDefaults] setObject:@(NO) forKey:MGLRendererConfigurationTests_collisionBehaviorKey]; - MGLRendererConfiguration *config = [[MGLRendererConfiguration alloc] initWithPropertyDictionary:@{MGLRendererConfigurationTests_collisionBehaviorKey:@(YES)}]; - XCTAssertFalse(config.perSourceCollisions); - } -} - -- (void)testDefaultLocalFontFamilyName { - - MGLRendererConfiguration *config = [[MGLRendererConfiguration alloc] init]; - std::string localFontFamilyName = config.localFontFamilyName.value(); - - std::string systemFontFamilyName; -#if TARGET_OS_IPHONE - systemFontFamilyName = std::string([[UIFont systemFontOfSize:0 weight:UIFontWeightRegular].familyName UTF8String]); -#else - systemFontFamilyName = std::string([[NSFont systemFontOfSize:0 weight:NSFontWeightRegular].familyName UTF8String]); -#endif - - XCTAssertEqual(localFontFamilyName, systemFontFamilyName, @"Default local font family name should match default system font"); -} - -- (void)testSettingMGLIdeographicFontFamilyNameWithPlistValue { - - MGLRendererConfiguration *config = [[MGLRendererConfiguration alloc] init]; - NSDictionary *dic; - - // `MGLIdeographicFontFamilyName` set to bool value `YES` - { - dic = @{@"MGLIdeographicFontFamilyName": @(YES)}; - std::string localFontFamilyName = ([config _localFontFamilyNameWithPropertyDictionary:dic]).value(); - - std::string systemFontFamilyName; -#if TARGET_OS_IPHONE - systemFontFamilyName = std::string([[UIFont systemFontOfSize:0 weight:UIFontWeightRegular].familyName UTF8String]); -#else - systemFontFamilyName = std::string([[NSFont systemFontOfSize:0 weight:NSFontWeightRegular].familyName UTF8String]); -#endif - XCTAssertEqual(localFontFamilyName, systemFontFamilyName, @"Local font family name should match default system font name when setting `YES`"); - } - - // `MGLIdeographicFontFamilyName` set to bool value `NO` - { - dic = @{@"MGLIdeographicFontFamilyName": @(NO)}; - mbgl::optional localFontFamilyName = [config _localFontFamilyNameWithPropertyDictionary:dic]; - XCTAssertFalse(localFontFamilyName.has_value(), @"Client rendering font should use remote font when setting `NO`"); - } - - // `MGLIdeographicFontFamilyName` set to a valid font string value - { - dic = @{@"MGLIdeographicFontFamilyName": @"PingFang TC"}; - std::string localFontFamilyName = ([config _localFontFamilyNameWithPropertyDictionary:dic]).value(); - std::string targetFontFamilyName = std::string([@"PingFang TC" UTF8String]); - XCTAssertEqual(localFontFamilyName, targetFontFamilyName, @"Local font family name should match a custom valid font name"); - } - - // `MGLIdeographicFontFamilyName` set to an invalid font string value - { - dic = @{@"MGLIdeographicFontFamilyName": @"test font"}; - std::string localFontFamilyName = ([config _localFontFamilyNameWithPropertyDictionary:dic]).value(); - - std::string systemFontFamilyName; -#if TARGET_OS_IPHONE - systemFontFamilyName = std::string([[UIFont systemFontOfSize:0 weight:UIFontWeightRegular].familyName UTF8String]); -#else - systemFontFamilyName = std::string([[NSFont systemFontOfSize:0 weight:NSFontWeightRegular].familyName UTF8String]); -#endif - XCTAssertEqual(localFontFamilyName, systemFontFamilyName, @"Local font family name should match default system font name when setting an invalid font string"); - } - - // `MGLIdeographicFontFamilyName` set to a valid font family names array value - { - dic = @{@"MGLIdeographicFontFamilyName": @[@"test font 1", @"PingFang TC", @"test font 2"]}; - std::string localFontFamilyName = ([config _localFontFamilyNameWithPropertyDictionary:dic]).value(); - std::string targetFontFamilyName = std::string([@"PingFang TC" UTF8String]); - XCTAssertEqual(localFontFamilyName, targetFontFamilyName, @"Local font family name should match a custom valid font name in a font family names array"); - } - - // `MGLIdeographicFontFamilyName` set to an invalid font family names array value - { - dic = @{@"MGLIdeographicFontFamilyName": @[@"test font 1", @"test font 2", @"test font 3"]}; - std::string localFontFamilyName = ([config _localFontFamilyNameWithPropertyDictionary:dic]).value(); - - std::string systemFontFamilyName; -#if TARGET_OS_IPHONE - systemFontFamilyName = std::string([[UIFont systemFontOfSize:0 weight:UIFontWeightRegular].familyName UTF8String]); -#else - systemFontFamilyName = std::string([[NSFont systemFontOfSize:0 weight:NSFontWeightRegular].familyName UTF8String]); -#endif - XCTAssertEqual(localFontFamilyName, systemFontFamilyName, @"Local font family name should match default system font name when setting an invalid font family names array"); - } - - // `MGLIdeographicFontFamilyName` set to an invalid value type: NSDictionary, NSNumber, NSData, etc. - { - dic = @{@"MGLIdeographicFontFamilyName": [@"test font 1" dataUsingEncoding:NSUTF8StringEncoding]}; - std::string localFontFamilyName = ([config _localFontFamilyNameWithPropertyDictionary:dic]).value(); - - std::string systemFontFamilyName; -#if TARGET_OS_IPHONE - systemFontFamilyName = std::string([[UIFont systemFontOfSize:0 weight:UIFontWeightRegular].familyName UTF8String]); -#else - systemFontFamilyName = std::string([[NSFont systemFontOfSize:0 weight:NSFontWeightRegular].familyName UTF8String]); -#endif - XCTAssertEqual(localFontFamilyName, systemFontFamilyName, @"Local font family name should match default system font name when setting an invalid value type"); - } -} - - - -@end diff --git a/platform/darwin/test/MGLResourceTests.mm b/platform/darwin/test/MGLResourceTests.mm deleted file mode 100644 index 7fcccc535c8..00000000000 --- a/platform/darwin/test/MGLResourceTests.mm +++ /dev/null @@ -1,85 +0,0 @@ -#import -#import -#import - -namespace mbgl { - extern NSURL *resourceURLWithAccountType(const Resource& resource, NSInteger accountType); -} - -@interface MGLResourceTests : XCTestCase -@end - -@implementation MGLResourceTests - -- (void)testOfflineQueryParameterIsAddedForOfflineResource { - - using namespace mbgl; - - std::string testURL = "test://mapbox.com/testing_offline_query?a=one&b=two"; - - // Is our test URL "correct" for subsequent checks? - { - NSURL *url = [NSURL URLWithString:@(testURL.c_str())]; - NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; - NSArray *items = components.queryItems; - XCTAssert(items.count == 2); - } - - Resource resource(Resource::Kind::Unknown, testURL); - - // By default, resources are NOT offline - { - bool skuTokenQueryItemFound; - NSURL *url = resourceURLWithAccountType(resource, 0); - NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; - for (NSURLQueryItem *item in components.queryItems) { - XCTAssertFalse([item.name isEqualToString:@"offline"]); - if ([item.name isEqualToString:@"sku"]) { - skuTokenQueryItemFound = YES; - } - } - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - XCTAssertTrue(skuTokenQueryItemFound, "Default resource URL should have SKU token query item"); -#else - XCTAssertFalse(skuTokenQueryItemFound, "Non-iOS platforms should not have a SKU token query item"); -#endif - } - - // Now check offline - resource.setUsage(Resource::Usage::Offline); - - { - NSURL *url = resourceURLWithAccountType(resource, 0); - NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; - - // For offline, we expect a single offline query item - NSInteger foundCount = 0; - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - for (NSURLQueryItem *item in components.queryItems) { - if (([item.name isEqualToString:@"offline"] && [item.value isEqualToString:@"true"]) || - ([item.name isEqualToString:@"a"] && [item.value isEqualToString:@"one"]) || - ([item.name isEqualToString:@"b"] && [item.value isEqualToString:@"two"])) { - foundCount++; - } - XCTAssertFalse([item.name isEqualToString:@"sku"]); - } - - XCTAssert(foundCount == 3); -#else - // NOTE: Currently the macOS SDK does not supply the sku or offline query parameters - for (NSURLQueryItem *item in components.queryItems) { - if (([item.name isEqualToString:@"a"] && [item.value isEqualToString:@"one"]) || - ([item.name isEqualToString:@"b"] && [item.value isEqualToString:@"two"])) { - foundCount++; - } - XCTAssertFalse([item.name isEqualToString:@"sku"]); - } - - XCTAssert(foundCount == 2); -#endif - } -} - -@end diff --git a/platform/darwin/test/MGLSDKTestHelpers.swift b/platform/darwin/test/MGLSDKTestHelpers.swift deleted file mode 100644 index c836f7c2fda..00000000000 --- a/platform/darwin/test/MGLSDKTestHelpers.swift +++ /dev/null @@ -1,48 +0,0 @@ -import XCTest - -class MGLSDKTestHelpers { - - class func checkTestsContainAllMethods(testClass: Swift.AnyClass, in p: Protocol) { - let testMethods = self.classMethodDescriptions(testClass) - let subjectMethods = self.protocolMethodDescriptions(p) - - for method in subjectMethods { - if !testMethods.contains(method) { - XCTFail("\(String(describing: testClass)) does not contain \(method) from \(String(describing: p))") - } - } - - XCTAssert(true) - } - -} - -extension MGLSDKTestHelpers { - - class func protocolMethodDescriptions(_ p: Protocol) -> Set { - var methods = Set() - var methodCount = UInt32() - let methodDescriptionList = protocol_copyMethodDescriptionList(p, false, true, &methodCount) - for i in 0.. Set { - var methods = Set() - var methodCount = UInt32() - let methodList = class_copyMethodList(cls, &methodCount) - for i in 0.. - -#import -#import "MGLFeature_Private.h" -#import "MGLShapeSource_Private.h" -#import "MGLSource_Private.h" - -#include - -@interface MGLShapeSourceTests : XCTestCase -@end - -@implementation MGLShapeSourceTests - -- (void)testGeoJSONOptionsFromDictionary { - NSExpression *reduceExpression = [NSExpression expressionForFunction:@"sum:" arguments:@[[NSExpression expressionForKeyPath:@"featureAccumulated"], [NSExpression expressionForKeyPath:@"sumValue"]]]; - NSExpression *mapExpression = [NSExpression expressionForKeyPath:@"mag"]; - NSArray *clusterPropertyArray = @[reduceExpression, mapExpression]; - NSDictionary *options = @{MGLShapeSourceOptionClustered: @YES, - MGLShapeSourceOptionClusterRadius: @42, - MGLShapeSourceOptionClusterProperties: @{@"sumValue": clusterPropertyArray}, - MGLShapeSourceOptionMaximumZoomLevelForClustering: @98, - MGLShapeSourceOptionMaximumZoomLevel: @99, - MGLShapeSourceOptionBuffer: @1976, - MGLShapeSourceOptionSimplificationTolerance: @0.42, - MGLShapeSourceOptionLineDistanceMetrics: @YES}; - - auto mbglOptions = MGLGeoJSONOptionsFromDictionary(options); - XCTAssertTrue(mbglOptions->cluster); - XCTAssertEqual(mbglOptions->clusterRadius, 42); - XCTAssertEqual(mbglOptions->clusterMaxZoom, 98); - XCTAssertEqual(mbglOptions->maxzoom, 99); - XCTAssertEqual(mbglOptions->buffer, 1976); - XCTAssertEqual(mbglOptions->tolerance, 0.42); - XCTAssertTrue(mbglOptions->lineMetrics); - XCTAssertTrue(!mbglOptions->clusterProperties.empty()); - - options = @{MGLShapeSourceOptionClustered: @"number 1"}; - XCTAssertThrows(MGLGeoJSONOptionsFromDictionary(options)); -} - -- (void)testNilShape { - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"id" shape:nil options:nil]; - XCTAssertNil(source.shape); -} - -- (void)testUnclusterableShape { - NSDictionary *options = @{ - MGLShapeSourceOptionClustered: @YES, - }; - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"id" shape:[[MGLPointFeature alloc] init] options:options]; - XCTAssertTrue([source.shape isKindOfClass:[MGLPointFeature class]]); - - MGLShapeCollectionFeature *feature = [MGLShapeCollectionFeature shapeCollectionWithShapes:@[]]; - source = [[MGLShapeSource alloc] initWithIdentifier:@"id" shape:feature options:options]; - XCTAssertTrue([source.shape isKindOfClass:[MGLShapeCollectionFeature class]]); -} - -- (void)testMGLShapeSourceWithDataMultipleFeatures { - - NSString *geoJSON = @"{\"type\": \"FeatureCollection\",\"features\": [{\"type\": \"Feature\",\"properties\": {},\"geometry\": {\"type\": \"LineString\",\"coordinates\": [[-107.75390625,40.329795743702064],[-104.34814453125,37.64903402157866]]}}]}"; - - NSData *data = [geoJSON dataUsingEncoding:NSUTF8StringEncoding]; - NSError *error; - MGLShape *shape = [MGLShape shapeWithData:data encoding:NSUTF8StringEncoding error:&error]; - XCTAssertNil(error); - XCTAssertNotNil(shape); - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"source-id" shape:shape options:nil]; - - MGLShapeCollection *collection = (MGLShapeCollection *)source.shape; - XCTAssertNotNil(collection); - XCTAssertEqual(collection.shapes.count, 1UL); - XCTAssertTrue([collection.shapes.firstObject isMemberOfClass:[MGLPolylineFeature class]]); -} - -- (void)testMGLShapeSourceWithSingleGeometry { - NSData *data = [@"{\"type\": \"Point\", \"coordinates\": [0, 0]}" dataUsingEncoding:NSUTF8StringEncoding]; - NSError *error; - MGLShape *shape = [MGLShape shapeWithData:data encoding:NSUTF8StringEncoding error:&error]; - XCTAssertNil(error); - XCTAssertNotNil(shape); - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"geojson" shape:shape options:nil]; - XCTAssertNotNil(source.shape); - XCTAssert([source.shape isKindOfClass:[MGLPointAnnotation class]]); -} - -- (void)testMGLGeoJSONSourceWithSingleFeature { - NSString *geoJSON = @"{\"type\": \"Feature\", \"properties\": {\"color\": \"green\"}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ -114.06847000122069, 51.050459433092655 ] }}"; - NSData *data = [geoJSON dataUsingEncoding:NSUTF8StringEncoding]; - NSError *error; - MGLShape *shape = [MGLShape shapeWithData:data encoding:NSUTF8StringEncoding error:&error]; - XCTAssertNil(error); - XCTAssertNotNil(shape); - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"geojson" shape:shape options:nil]; - XCTAssertNotNil(source.shape); - XCTAssert([source.shape isKindOfClass:[MGLPointFeature class]]); - MGLPointFeature *feature = (MGLPointFeature *)source.shape; - XCTAssert([feature.attributes.allKeys containsObject:@"color"]); -} - -- (void)testMGLShapeSourceWithPolylineFeatures { - CLLocationCoordinate2D coordinates[] = { CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(10, 10)}; - MGLPolylineFeature *polylineFeature = [MGLPolylineFeature polylineWithCoordinates:coordinates count:2]; - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"source-id" shape:polylineFeature options:nil]; - - XCTAssertNotNil(source.shape); - XCTAssertTrue([source.shape isMemberOfClass:[MGLPolylineFeature class]]); -} - -- (void)testMGLShapeSourceWithPolygonFeatures { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0.0, 100.0), - CLLocationCoordinate2DMake(0.0, 101.0), - CLLocationCoordinate2DMake(1.0, 101.0), - CLLocationCoordinate2DMake(1.0, 100.0), - CLLocationCoordinate2DMake(0.0, 100.0)}; - - MGLPolygonFeature *polygonFeature = [MGLPolygonFeature polygonWithCoordinates:coordinates count:5]; - polygonFeature.identifier = @"feature-id"; - NSString *stringAttribute = @"string"; - NSNumber *boolAttribute = [NSNumber numberWithBool:YES]; - NSNumber *doubleAttribute = [NSNumber numberWithDouble:1.23]; - NSDictionary *nestedDictionaryValue = @{@"nested-key-1": @"nested-string-value"}; - NSArray *arrayValue = @[@"string-value", @2]; - NSDictionary *dictionaryValue = @{@"key-1": @"string-value", - @"key-2": @1, - @"key-3": nestedDictionaryValue, - @"key-4": arrayValue}; - NSArray *arrayOfArrays = @[@[@1, @"string-value", @[@"jagged"]]]; - NSArray *arrayOfDictionaries = @[@{@"key": @"value"}]; - - polygonFeature.attributes = @{@"name": stringAttribute, - @"bool": boolAttribute, - @"double": doubleAttribute, - @"dictionary-attribute": dictionaryValue, - @"array-attribute": arrayValue, - @"array-of-array-attribute": arrayOfArrays, - @"array-of-dictionary-attribute": arrayOfDictionaries}; - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"source-id" shape:polygonFeature options:nil]; - - XCTAssertNotNil(source.shape); - MGLPolygonFeature *expectedPolygonFeature = (MGLPolygonFeature *)source.shape; - XCTAssertEqualObjects(expectedPolygonFeature.identifier, polygonFeature.identifier); - XCTAssertTrue([expectedPolygonFeature isMemberOfClass:[MGLPolygonFeature class]]); - XCTAssertEqualObjects(expectedPolygonFeature.identifier, polygonFeature.identifier); - XCTAssertEqualObjects(expectedPolygonFeature.attributes[@"name"], stringAttribute); - XCTAssertEqualObjects(expectedPolygonFeature.attributes[@"bool"], boolAttribute); - XCTAssertEqualObjects(expectedPolygonFeature.attributes[@"double"], doubleAttribute); - XCTAssertEqualObjects(expectedPolygonFeature.attributes[@"dictionary-attribute"], dictionaryValue); - XCTAssertEqualObjects(expectedPolygonFeature.attributes[@"array-attribute"], arrayValue); - XCTAssertEqualObjects(expectedPolygonFeature.attributes[@"array-of-array-attribute"], arrayOfArrays); - XCTAssertEqualObjects(expectedPolygonFeature.attributes[@"array-of-dictionary-attribute"], arrayOfDictionaries); -} - -- (void)testMGLShapeSourceWithPolygonFeaturesInculdingInteriorPolygons { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0.0, 100.0), - CLLocationCoordinate2DMake(0.0, 101.0), - CLLocationCoordinate2DMake(1.0, 101.0), - CLLocationCoordinate2DMake(1.0, 100.0), - CLLocationCoordinate2DMake(0.0, 100.0)}; - - CLLocationCoordinate2D interiorCoordinates[] = { - CLLocationCoordinate2DMake(0.2, 100.2), - CLLocationCoordinate2DMake(0.2, 100.8), - CLLocationCoordinate2DMake(0.8, 100.8), - CLLocationCoordinate2DMake(0.8, 100.2), - CLLocationCoordinate2DMake(0.2, 100.2)}; - - MGLPolygon *polygon = [MGLPolygon polygonWithCoordinates:interiorCoordinates count:5]; - - MGLPolygonFeature *polygonFeature = [MGLPolygonFeature polygonWithCoordinates:coordinates count:5 interiorPolygons:@[polygon]]; - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"source-id" shape:polygonFeature options:nil]; - - XCTAssertNotNil(source.shape); - XCTAssertTrue([source.shape isMemberOfClass:[MGLPolygonFeature class]]); -} - -- (void)testMGLShapeSourceWithMultiPolylineFeatures { - CLLocationCoordinate2D firstCoordinates[] = { CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(10, 10)}; - MGLPolylineFeature *firstPolylineFeature = [MGLPolylineFeature polylineWithCoordinates:firstCoordinates count:2]; - CLLocationCoordinate2D secondCoordinates[] = { CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(10, 10)}; - MGLPolylineFeature *secondPolylineFeature = [MGLPolylineFeature polylineWithCoordinates:secondCoordinates count:2]; - MGLMultiPolylineFeature *multiPolylineFeature = [MGLMultiPolylineFeature multiPolylineWithPolylines:@[firstPolylineFeature, secondPolylineFeature]]; - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"source-id" shape:multiPolylineFeature options:nil]; - - XCTAssertNotNil(source.shape); - XCTAssertTrue([source.shape isMemberOfClass:[MGLMultiPolylineFeature class]]); -} - -- (void)testMGLShapeSourceWithMultiPolygonFeatures { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0.0, 100.0), - CLLocationCoordinate2DMake(0.0, 101.0), - CLLocationCoordinate2DMake(1.0, 101.0), - CLLocationCoordinate2DMake(1.0, 100.0), - CLLocationCoordinate2DMake(0.0, 100.0)}; - - CLLocationCoordinate2D interiorCoordinates[] = { - CLLocationCoordinate2DMake(0.2, 100.2), - CLLocationCoordinate2DMake(0.2, 100.8), - CLLocationCoordinate2DMake(0.8, 100.8), - CLLocationCoordinate2DMake(0.8, 100.2), - CLLocationCoordinate2DMake(0.2, 100.2)}; - - MGLPolygon *polygon = [MGLPolygon polygonWithCoordinates:interiorCoordinates count:5]; - - MGLPolygonFeature *firstPolygon = [MGLPolygonFeature polygonWithCoordinates:coordinates count:5 interiorPolygons:@[polygon]]; - MGLPolygonFeature *secondPolygon = [MGLPolygonFeature polygonWithCoordinates:coordinates count:5 interiorPolygons:@[polygon]]; - - MGLMultiPolygonFeature *multiPolygonFeature = [MGLMultiPolygonFeature multiPolygonWithPolygons:@[firstPolygon, secondPolygon]]; - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"source-id" shape:multiPolygonFeature options:nil]; - - XCTAssertNotNil(source.shape); - XCTAssertTrue([source.shape isMemberOfClass:[MGLMultiPolygonFeature class]]); -} - -- (void)testMGLShapeSourceWithPointFeature { - MGLPointFeature *pointFeature = [MGLPointFeature new]; - pointFeature.coordinate = CLLocationCoordinate2DMake(0.2, 100.2); - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"souce-id" shape:pointFeature options:nil]; - - XCTAssertNotNil(source.shape); - XCTAssertTrue([source.shape isMemberOfClass:[MGLPointFeature class]]); -} - -- (void)testMGLShapeSourceWithPointCollectionFeature { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0.0, 100.0), - CLLocationCoordinate2DMake(0.0, 101.0), - CLLocationCoordinate2DMake(1.0, 101.0), - CLLocationCoordinate2DMake(1.0, 100.0), - CLLocationCoordinate2DMake(0.0, 100.0)}; - MGLPointCollectionFeature *pointCollectionFeature = [MGLPointCollectionFeature pointCollectionWithCoordinates:coordinates count:5]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"souce-id" shape:pointCollectionFeature options:nil]; - - XCTAssertNotNil(source.shape); - XCTAssertTrue([source.shape isMemberOfClass:[MGLPointCollectionFeature class]]); -} - -- (void)testMGLShapeSourceWithShapeCollectionFeatures { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0.0, 100.0), - CLLocationCoordinate2DMake(0.0, 101.0), - CLLocationCoordinate2DMake(1.0, 101.0), - CLLocationCoordinate2DMake(1.0, 100.0), - CLLocationCoordinate2DMake(0.0, 100.0)}; - - CLLocationCoordinate2D interiorCoordinates[] = { - CLLocationCoordinate2DMake(0.2, 100.2), - CLLocationCoordinate2DMake(0.2, 100.8), - CLLocationCoordinate2DMake(0.8, 100.8), - CLLocationCoordinate2DMake(0.8, 100.2), - CLLocationCoordinate2DMake(0.2, 100.2)}; - - MGLPolygon *polygon = [MGLPolygon polygonWithCoordinates:interiorCoordinates count:5]; - - MGLPolygonFeature *polygonFeature = [MGLPolygonFeature polygonWithCoordinates:coordinates count:5 interiorPolygons:@[polygon]]; - - CLLocationCoordinate2D coordinates_2[] = { CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(10, 10)}; - MGLPolylineFeature *polylineFeature = [MGLPolylineFeature polylineWithCoordinates:coordinates_2 count:2]; - - MGLMultiPolygonFeature *multiPolygonFeature = [MGLMultiPolygonFeature multiPolygonWithPolygons:@[polygonFeature, polygonFeature]]; - - MGLMultiPolylineFeature *multiPolylineFeature = [MGLMultiPolylineFeature multiPolylineWithPolylines:@[polylineFeature, polylineFeature]]; - - MGLPointCollectionFeature *pointCollectionFeature = [MGLPointCollectionFeature pointCollectionWithCoordinates:coordinates count:5]; - - MGLPointFeature *pointFeature = [MGLPointFeature new]; - pointFeature.coordinate = CLLocationCoordinate2DMake(0.2, 100.2); - - MGLShapeCollectionFeature *shapeCollectionFeature = [MGLShapeCollectionFeature shapeCollectionWithShapes:@[polygonFeature, polylineFeature, multiPolygonFeature, multiPolylineFeature, pointCollectionFeature, pointFeature]]; - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"source-id" shape:shapeCollectionFeature options:nil]; - - MGLShapeCollectionFeature *shape = (MGLShapeCollectionFeature *)source.shape; - XCTAssertNotNil(shape); - XCTAssert(shape.shapes.count == 6, @"Shape collection should contain 6 shapes"); -} - -- (void)testMGLShapeSourceWithFeaturesConvenienceInitializer { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0.0, 100.0), - CLLocationCoordinate2DMake(0.0, 101.0), - CLLocationCoordinate2DMake(1.0, 101.0), - CLLocationCoordinate2DMake(1.0, 100.0), - CLLocationCoordinate2DMake(0.0, 100.0)}; - - MGLPolygonFeature *polygonFeature = [MGLPolygonFeature polygonWithCoordinates:coordinates count:sizeof(coordinates)/sizeof(coordinates[0]) interiorPolygons:nil]; - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"source-id" features:@[polygonFeature] options:nil]; - MGLShapeCollectionFeature *shape = (MGLShapeCollectionFeature *)source.shape; - - XCTAssertTrue([shape isKindOfClass:[MGLShapeCollectionFeature class]]); - XCTAssertEqual(shape.shapes.count, 1UL, @"Shape collection should contain 1 shape"); - - // when a shape is included in the features array - MGLPolygon *polygon = [MGLPolygon polygonWithCoordinates:coordinates count:sizeof(coordinates)/sizeof(coordinates[0]) interiorPolygons:nil]; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wobjc-literal-conversion" - XCTAssertThrowsSpecificNamed([[MGLShapeSource alloc] initWithIdentifier:@"source-id-invalid" features:@[polygon] options:nil], NSException, NSInvalidArgumentException, @"Shape source should raise an exception if a shape is sent to the features initializer"); -#pragma clang diagnostic pop -} - -- (void)testMGLShapeSourceWithShapesConvenienceInitializer { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0.0, 100.0), - CLLocationCoordinate2DMake(0.0, 101.0), - CLLocationCoordinate2DMake(1.0, 101.0), - CLLocationCoordinate2DMake(1.0, 100.0), - CLLocationCoordinate2DMake(0.0, 100.0)}; - - MGLPolygon *polygon = [MGLPolygon polygonWithCoordinates:coordinates count:sizeof(coordinates)/sizeof(coordinates[0]) interiorPolygons:nil]; - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"source-id" shapes:@[polygon] options:nil]; - MGLShapeCollectionFeature *shape = (MGLShapeCollectionFeature *)source.shape; - - XCTAssertTrue([shape isKindOfClass:[MGLShapeCollection class]]); - XCTAssertEqual(shape.shapes.count, 1UL, @"Shape collection should contain 1 shape"); -} - -@end diff --git a/platform/darwin/test/MGLSourceQueryTests.m b/platform/darwin/test/MGLSourceQueryTests.m deleted file mode 100644 index b321da1ea48..00000000000 --- a/platform/darwin/test/MGLSourceQueryTests.m +++ /dev/null @@ -1,25 +0,0 @@ -#import -#import - -@interface MGLSourceQueryTests : XCTestCase - -@end - -@implementation MGLSourceQueryTests - -- (void) testQueryVectorTileSource { - MGLVectorTileSource *source = [[MGLVectorTileSource alloc] initWithIdentifier:@"vector" tileURLTemplates:@[@"fake"] options:nil]; - NSSet *sourceLayers = [NSSet setWithObjects:@"buildings", @"water", nil]; - NSArray* features = [source featuresInSourceLayersWithIdentifiers:sourceLayers predicate:nil]; - // Source not added yet, so features is 0 - XCTAssertEqual([features count], 0); -} - -- (void) testQueryShapeSource { - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"shape" shape:[MGLShapeCollection shapeCollectionWithShapes:@[]] options:nil]; - NSArray* features = [source featuresMatchingPredicate:nil]; - // Source not added yet, so features is 0 - XCTAssertEqual([features count], 0); -} - -@end diff --git a/platform/darwin/test/MGLStyleLayerTests.h b/platform/darwin/test/MGLStyleLayerTests.h deleted file mode 100644 index c7577819b80..00000000000 --- a/platform/darwin/test/MGLStyleLayerTests.h +++ /dev/null @@ -1,28 +0,0 @@ -#import -#import - -#define MGLConstantExpression(constant) \ - [NSExpression expressionForConstantValue:constant] - -@interface MGLStyleLayerTests : XCTestCase - -@property (nonatomic, copy, readonly, class) NSString *layerType; - -- (void)testPropertyName:(NSString *)name isBoolean:(BOOL)isBoolean; - -@end - -@interface NSString (MGLStyleLayerTestAdditions) - -@property (nonatomic, readonly, copy) NSArray *lexicalClasses; -@property (nonatomic, readonly, copy) NSString *lemma; - -@end - -@interface NSValue (MGLStyleLayerTestAdditions) - -+ (instancetype)valueWithMGLVector:(CGVector)vector; - -@property (readonly) CGVector MGLVectorValue; - -@end diff --git a/platform/darwin/test/MGLStyleLayerTests.m b/platform/darwin/test/MGLStyleLayerTests.m deleted file mode 100644 index 5dc97dc5817..00000000000 --- a/platform/darwin/test/MGLStyleLayerTests.m +++ /dev/null @@ -1,125 +0,0 @@ -#import "MGLStyleLayerTests.h" - -#import "NSString+MGLAdditions.h" - -#define TEST_STRICT_NAMING_CONVENTIONS 0 - -@implementation MGLStyleLayerTests - -@dynamic layerType; - -- (void)testProperties { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - - MGLFillStyleLayer *layer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - - XCTAssertEqualObjects(layer.identifier, @"layerID"); - XCTAssertEqualObjects(layer.sourceIdentifier, source.identifier); - - XCTAssertTrue(layer.visible); - layer.visible = NO; - XCTAssertFalse(layer.visible); - layer.visible = YES; - XCTAssertTrue(layer.visible); - - XCTAssertEqual(layer.minimumZoomLevel, -INFINITY); - layer.minimumZoomLevel = 22; - XCTAssertEqual(layer.minimumZoomLevel, 22); - - XCTAssertEqual(layer.maximumZoomLevel, INFINITY); - layer.maximumZoomLevel = 0; - XCTAssertEqual(layer.maximumZoomLevel, 0); -} - -- (void)testPropertyName:(NSString *)name isBoolean:(BOOL)isBoolean { - NSMutableArray *components = [name componentsSeparatedByString:@"-"].mutableCopy; - if (isBoolean) { - if ([components.firstObject isEqualToString:@"is"]) { - [components removeObjectAtIndex:0]; - - // Xcode 10 incorrectly classifies "optional" as a verb, so return early to avoid the verb checks. - // https://openradar.appspot.com/44149950 - if ([components.lastObject isEqualToString:@"optional"] && NSFoundationVersionNumber >= 1548) { - return; - } - - if (![components.lastObject.lexicalClasses containsObject:NSLinguisticTagAdjective]) { - XCTAssertTrue([components.lastObject.lexicalClasses containsObject:NSLinguisticTagVerb], - @"Boolean getter %@ that starts with “is” should contain an adjective, past participle, or verb.", name); - XCTAssertNotEqualObjects(components.lastObject.lemma, components.lastObject, - @"Boolean getter %@ should not have infinitive, imperative, or present tense verb.", name); - } - } else { - if ([components.firstObject isEqualToString:[self class].layerType] - || [components.firstObject isEqualToString:@"icon"] || [components.firstObject isEqualToString:@"text"]) { - [components removeObjectAtIndex:0]; - } -#if TEST_STRICT_NAMING_CONVENTIONS - XCTAssertTrue([components.firstObject.lexicalClasses containsObject:NSLinguisticTagVerb], - @"Boolean getter %@ that doesn’t start with “is” should contain a verb.", name); - XCTAssertNotEqualObjects(components.firstObject.lemma, components.lastObject); -#endif - } - } else { - XCTAssertFalse([components.firstObject isEqualToString:@"is"]); -#if TEST_STRICT_NAMING_CONVENTIONS - XCTAssertTrue([components.lastObject.lexicalClasses containsObject:NSLinguisticTagNoun], - @"Non-Boolean getter %@ should contain a noun.", name); -#endif - } -} - -@end - -@implementation NSString (MGLStyleLayerTestAdditions) - -- (NSArray *)lexicalClasses { - NSOrthography *orthography = [NSOrthography orthographyWithDominantScript:@"Latn" - languageMap:@{@"Latn": @[@"en"]}]; - NSLinguisticTaggerOptions options = (NSLinguisticTaggerOmitPunctuation - | NSLinguisticTaggerOmitWhitespace - | NSLinguisticTaggerOmitOther); - return [self linguisticTagsInRange:self.mgl_wholeRange - scheme:NSLinguisticTagSchemeLexicalClass - options:options - orthography:orthography - tokenRanges:NULL]; -} - -- (NSString *)lemma { - NSOrthography *orthography = [NSOrthography orthographyWithDominantScript:@"Latn" - languageMap:@{@"Latn": @[@"en"]}]; - NSLinguisticTaggerOptions options = (NSLinguisticTaggerOmitPunctuation - | NSLinguisticTaggerOmitWhitespace - | NSLinguisticTaggerOmitOther); - return [self linguisticTagsInRange:self.mgl_wholeRange - scheme:NSLinguisticTagSchemeLemma - options:options - orthography:orthography - tokenRanges:NULL].firstObject; -} - -@end - -@implementation NSValue (MGLStyleLayerTestAdditions) - -+ (instancetype)valueWithMGLVector:(CGVector)vector { -#if TARGET_OS_IPHONE - return [self valueWithCGVector:vector]; -#else - return [self value:&vector withObjCType:@encode(CGVector)]; -#endif -} - -- (CGVector)MGLVectorValue { -#if TARGET_OS_IPHONE - return self.CGVectorValue; -#else - CGVector vector; - [self getValue:&vector]; - return vector; -#endif -} - -@end diff --git a/platform/darwin/test/MGLStyleLayerTests.mm.ejs b/platform/darwin/test/MGLStyleLayerTests.mm.ejs deleted file mode 100644 index a764f163be8..00000000000 --- a/platform/darwin/test/MGLStyleLayerTests.mm.ejs +++ /dev/null @@ -1,232 +0,0 @@ -<% - const type = locals.type; - const properties = locals.properties; - const enumProperties = locals.enumProperties; --%> -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLStyleLayerTests.h" -#import "../../darwin/src/NSDate+MGLAdditions.h" -<% if (type === 'symbol') { -%> -#include "../../darwin/src/MGLAttributedExpression.h" -<% } -%> - -#import "MGLStyleLayer_Private.h" - -#include _layer.hpp> -#include -#include - -@interface MGL<%- camelize(type) %>LayerTests : MGLStyleLayerTests -@end - -@implementation MGL<%- camelize(type) %>LayerTests - -+ (NSString *)layerType { - return @"<%- type %>"; -} - -<% if (type !== 'background' && type !== 'raster' && type !== 'hillshade') { -%> -- (void)testPredicates { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - MGL<%- camelize(type) %>StyleLayer *layer = [[MGL<%- camelize(type) %>StyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - - XCTAssertNil(layer.sourceLayerIdentifier); - layer.sourceLayerIdentifier = @"layerID"; - XCTAssertEqualObjects(layer.sourceLayerIdentifier, @"layerID"); - layer.sourceLayerIdentifier = nil; - XCTAssertNil(layer.sourceLayerIdentifier); - - XCTAssertNil(layer.predicate); - layer.predicate = [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]; - XCTAssertEqualObjects(layer.predicate, [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]); - layer.predicate = nil; - XCTAssertNil(layer.predicate); -} - -<% } -%> -- (void)testProperties { -<% if (type === 'background') { -%> - MGL<%- camelize(type) %>StyleLayer *layer = [[MGL<%- camelize(type) %>StyleLayer alloc] initWithIdentifier:@"layerID"]; -<% } else { -%> - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - - MGL<%- camelize(type) %>StyleLayer *layer = [[MGL<%- camelize(type) %>StyleLayer alloc] initWithIdentifier:@"layerID" source:source]; -<% } -%> - XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertEqualObjects(@(layer.rawLayer->getTypeInfo()->type), @"<%- type %>"); - auto rawLayer = static_castLayer*>(layer.rawLayer); - - MGLTransition transitionTest = MGLTransitionMake(5, 4); - -<% for (const property of properties) { -%> -<% if (property['property-type'] === 'color-ramp') continue; -%> - - // <%- originalPropertyName(property) %> - { - XCTAssertTrue(rawLayer->get<%- camelize(originalPropertyName(property)) %>().isUndefined(), - @"<%- originalPropertyName(property) %> should be unset initially."); - NSExpression *defaultExpression = layer.<%- objCName(property) %>; - -<% if (property.type === 'formatted') { -%> - NSExpression *constantExpression = [NSExpression expressionWithFormat:<%- objCTestValue(property, 'string', true, 3) %>]; -<% } else if (property.type === 'resolvedImage'){ -%> - NSExpression *constantExpression = [NSExpression expressionForConstantValue:<%- objCTestValue(property, 'string', true, 3) %>]; -<% } else { -%> - NSExpression *constantExpression = [NSExpression expressionWithFormat:<%- objCTestValue(property, type, true, 3) %>]; -<% } -%> - layer.<%- objCName(property) %> = constantExpression; - mbgl::style::PropertyValue<<%- mbglType(property) %>> propertyValue = { <%- mbglTestValue(property, type) %> }; - XCTAssertEqual(rawLayer->get<%- camelize(originalPropertyName(property)) %>(), propertyValue, - @"Setting <%- objCName(property) %> to a constant value expression should update <%- originalPropertyName(property) %>."); - XCTAssertEqualObjects(layer.<%- objCName(property) %>, constantExpression, - @"<%- objCName(property) %> should round-trip constant value expressions."); - -<% if (property.type !== 'formatted') { -%> - constantExpression = [NSExpression expressionWithFormat:<%- objCTestValue(property, type, false, 3) %>]; -<% } else { -%> - MGLAttributedExpression *attributedConstantExpression = [[MGLAttributedExpression alloc] initWithExpression:[NSExpression expressionWithFormat:<%- objCTestValue(property, 'string', true, 3) %>] - attributes:@{}]; - constantExpression = [NSExpression mgl_expressionForAttributedExpressions:@[[NSExpression expressionForConstantValue:attributedConstantExpression]]]; -<% } -%> - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.<%- objCName(property) %> = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression<<%- mbglType(property) %>>( -<% if (property.type === 'formatted') { -%> - step(zoom(), format(<%- mbglExpressionTestValue(property, type) %>), 18.0, format(<%- mbglExpressionTestValue(property, type) %>)) -<% } else if (property.type === 'resolvedImage') { -%> - step(zoom(), image(literal(<%- mbglExpressionTestValue(property, type) %>)), 18.0, image(literal(<%- mbglExpressionTestValue(property, type) %>))) -<% } else { -%> - step(zoom(), literal(<%- mbglExpressionTestValue(property, type) %>), 18.0, literal(<%- mbglExpressionTestValue(property, type) %>)) -<% } -%> - ); - } - - XCTAssertEqual(rawLayer->get<%- camelize(originalPropertyName(property)) %>(), propertyValue, - @"Setting <%- objCName(property) %> to a camera expression should update <%- originalPropertyName(property) %>."); - XCTAssertEqualObjects(layer.<%- objCName(property) %>, functionExpression, - @"<%- objCName(property) %> should round-trip camera expressions."); - -<% if (isDataDriven(property) && isInterpolatable(property)) { -%> - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.<%- objCName(property) %> = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression<<%- mbglType(property) %>>( - interpolate(linear(), number(get("keyName")), 18.0, literal(<%- mbglExpressionTestValue(property, type) %>)) - ); - } - - XCTAssertEqual(rawLayer->get<%- camelize(originalPropertyName(property)) %>(), propertyValue, - @"Setting <%- objCName(property) %> to a data expression should update <%- originalPropertyName(property) %>."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.<%- objCName(property) %>, pedanticFunctionExpression, - @"<%- objCName(property) %> should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.<%- objCName(property) %> = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression<<%- mbglType(property) %>>( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(<%- mbglExpressionTestValue(property, type) %>))) - ); - } - - XCTAssertEqual(rawLayer->get<%- camelize(originalPropertyName(property)) %>(), propertyValue, - @"Setting <%- objCName(property) %> to a camera-data expression should update <%- originalPropertyName(property) %>."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.<%- objCName(property) %>, pedanticFunctionExpression, - @"<%- objCName(property) %> should round-trip camera-data expressions."); -<% } -%> -<% if (!property.required) { -%> - - layer.<%- objCName(property) %> = nil; - XCTAssertTrue(rawLayer->get<%- camelize(originalPropertyName(property)) %>().isUndefined(), - @"Unsetting <%- objCName(property) %> should return <%- originalPropertyName(property) %> to the default value."); - XCTAssertEqualObjects(layer.<%- objCName(property) %>, defaultExpression, - @"<%- objCName(property) %> should return the default value after being unset."); -<% } -%> -<% if (!isDataDriven(property)) { -%> - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.<%- objCName(property) %> = functionExpression, NSException, NSInvalidArgumentException, @"MGL<%- camelize(type) %>Layer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.<%- objCName(property) %> = functionExpression, NSException, NSInvalidArgumentException, @"MGL<%- camelize(type) %>Layer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); -<% } -%> -<% if (property["transition"] && !property.original) { -%> - // Transition property test - layer.<%- camelizeWithLeadingLowercase(originalPropertyName(property)) %>Transition = transitionTest; - auto toptions = rawLayer->get<%- camelize(originalPropertyName(property)) %>Transition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition <%- camelizeWithLeadingLowercase(originalPropertyName(property)) %>Transition = layer.<%- camelizeWithLeadingLowercase(originalPropertyName(property)) %>Transition; - XCTAssertEqual(<%- camelizeWithLeadingLowercase(originalPropertyName(property)) %>Transition.delay, transitionTest.delay); - XCTAssertEqual(<%- camelizeWithLeadingLowercase(originalPropertyName(property)) %>Transition.duration, transitionTest.duration); -<% } -%> -<% if (property.tokens) { -%> - - // Tokens test - layer.<%- objCName(property) %> = [NSExpression expressionForConstantValue:@"{token}"]; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression<<%- mbglType(property) %>>( -<% if (property.type === 'formatted') { -%> - format(toString(get(literal("token")))) -<% } else if (property.type === 'resolvedImage') { -%> - image(toString(get(literal("token")))) -<% } else { -%> - toString(get(literal("token"))) -<% } -%> - ); - } - - XCTAssertEqual(rawLayer->get<%- camelize(originalPropertyName(property)) %>(), propertyValue, - @"Setting <%- objCName(property) %> to a constant string with tokens should convert to an expression."); - -<% if (property.type === 'formatted') { -%> - MGLAttributedExpression *tokenAttibutedExpression = [[MGLAttributedExpression alloc] initWithExpression:[NSExpression expressionWithFormat:@"CAST(token, 'NSString')"] - attributes:@{}]; - NSExpression* tokenExpression = [NSExpression mgl_expressionForAttributedExpressions:@[[NSExpression expressionForConstantValue:tokenAttibutedExpression]]]; -<% } else if (property.type === 'resolvedImage') { -%> - NSExpression* tokenExpression = [NSExpression expressionWithFormat:@"MGL_FUNCTION('image', CAST(token, \"NSString\"))"]; -<% } else { -%> - NSExpression* tokenExpression = [NSExpression expressionWithFormat:@"CAST(token, \"NSString\")"]; -<% } -%> - XCTAssertEqualObjects(layer.<%- objCName(property) %>, tokenExpression, - @"Setting <%- objCName(property) %> to a constant string with tokens should convert to an expression."); -<% } -%> - } -<% } -%> -} - -- (void)testPropertyNames { -<% for (const property of properties) { -%> -<% if (property['property-type'] === 'color-ramp') continue; -%> - [self testPropertyName:@"<%- property.getter || property.name %>" isBoolean:<%- property.type === 'boolean' ? 'YES' : 'NO' %>]; -<% } -%> -} - -<% if (enumProperties) { -%> -- (void)testValueAdditions { -<% for (let property of enumProperties) { -%> -<% for (let value in property.values) { -%> -<% if (property.values.hasOwnProperty(value)) { -%> - XCTAssertEqual([NSValue valueWithMGL<%- camelize(enumName(property)) %>:MGL<%- camelize(enumName(property)) %><%- camelize(value) %>].MGL<%- camelize(enumName(property)) %>Value, MGL<%- camelize(enumName(property)) %><%- camelize(value) %>); -<% } -%> -<% } -%> -<% } -%> -} - -<% } -%> -@end diff --git a/platform/darwin/test/MGLStyleTests.mm b/platform/darwin/test/MGLStyleTests.mm deleted file mode 100644 index ec2605646c8..00000000000 --- a/platform/darwin/test/MGLStyleTests.mm +++ /dev/null @@ -1,500 +0,0 @@ -#import - -#import "NSBundle+MGLAdditions.h" -#import "MGLVectorTileSource_Private.h" - -#import - -#import -#if TARGET_OS_IPHONE - #import -#else - #import -#endif -#import - -@interface MGLStyleTests : XCTestCase - -@property (nonatomic) MGLMapView *mapView; -@property (nonatomic) MGLStyle *style; - -@end - -@implementation MGLStyleTests { - XCTestExpectation *_styleLoadingExpectation; -} - -- (void)setUp { - [super setUp]; - - [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"]; - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - self.mapView = [[MGLMapView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) styleURL:styleURL]; - self.mapView.delegate = self; - if (!self.mapView.style) { - _styleLoadingExpectation = [self expectationWithDescription:@"Map view should finish loading style."]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - } -} - -- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style { - XCTAssertNotNil(mapView.style); - XCTAssertEqual(mapView.style, style); - - [_styleLoadingExpectation fulfill]; -} - -- (void)tearDown { - _styleLoadingExpectation = nil; - self.mapView = nil; - - [super tearDown]; -} - -- (MGLStyle *)style { - return self.mapView.style; -} - -- (void)testUnversionedStyleURLs { - XCTAssertEqual(mbgl::util::default_styles::streets.currentVersion, MGLStyleDefaultVersion, - "mbgl::util::default_styles::streets.currentVersion and MGLStyleDefaultVersion disagree."); - - XCTAssertEqualObjects([MGLStyle streetsStyleURL].absoluteString, @(mbgl::util::default_styles::streets.url)); - XCTAssertEqualObjects([MGLStyle outdoorsStyleURL].absoluteString, @(mbgl::util::default_styles::outdoors.url)); - XCTAssertEqualObjects([MGLStyle lightStyleURL].absoluteString, @(mbgl::util::default_styles::light.url)); - XCTAssertEqualObjects([MGLStyle darkStyleURL].absoluteString, @(mbgl::util::default_styles::dark.url)); - XCTAssertEqualObjects([MGLStyle satelliteStyleURL].absoluteString, @(mbgl::util::default_styles::satellite.url)); - XCTAssertEqualObjects([MGLStyle satelliteStreetsStyleURL].absoluteString, @(mbgl::util::default_styles::satelliteStreets.url)); -} - -- (void)testVersionedStyleURLs { - // Test that all the default styles have publicly-declared MGLStyle class - // methods and that the URLs all have the right values. - XCTAssertEqualObjects([MGLStyle streetsStyleURLWithVersion:mbgl::util::default_styles::streets.currentVersion].absoluteString, - @(mbgl::util::default_styles::streets.url)); - XCTAssertEqualObjects([MGLStyle streetsStyleURLWithVersion:99].absoluteString, - @"mapbox://styles/mapbox/streets-v99"); - XCTAssertEqualObjects([MGLStyle outdoorsStyleURLWithVersion:mbgl::util::default_styles::outdoors.currentVersion].absoluteString, - @(mbgl::util::default_styles::outdoors.url)); - XCTAssertEqualObjects([MGLStyle outdoorsStyleURLWithVersion:99].absoluteString, - @"mapbox://styles/mapbox/outdoors-v99"); - XCTAssertEqualObjects([MGLStyle lightStyleURLWithVersion:mbgl::util::default_styles::light.currentVersion].absoluteString, - @(mbgl::util::default_styles::light.url)); - XCTAssertEqualObjects([MGLStyle lightStyleURLWithVersion:99].absoluteString, - @"mapbox://styles/mapbox/light-v99"); - XCTAssertEqualObjects([MGLStyle darkStyleURLWithVersion:mbgl::util::default_styles::dark.currentVersion].absoluteString, - @(mbgl::util::default_styles::dark.url)); - XCTAssertEqualObjects([MGLStyle darkStyleURLWithVersion:99].absoluteString, - @"mapbox://styles/mapbox/dark-v99"); - XCTAssertEqualObjects([MGLStyle satelliteStyleURLWithVersion:mbgl::util::default_styles::satellite.currentVersion].absoluteString, - @(mbgl::util::default_styles::satellite.url)); - XCTAssertEqualObjects([MGLStyle satelliteStyleURLWithVersion:99].absoluteString, - @"mapbox://styles/mapbox/satellite-v99"); - XCTAssertEqualObjects([MGLStyle satelliteStreetsStyleURLWithVersion:mbgl::util::default_styles::satelliteStreets.currentVersion].absoluteString, - @(mbgl::util::default_styles::satelliteStreets.url)); - XCTAssertEqualObjects([MGLStyle satelliteStreetsStyleURLWithVersion:99].absoluteString, - @"mapbox://styles/mapbox/satellite-streets-v99"); - - static_assert(6 == mbgl::util::default_styles::numOrderedStyles, - "MGLStyleTests isn’t testing all the styles in mbgl::util::default_styles."); -} - -- (void)testStyleURLDeclarations { - // Make sure this test is comprehensive. - const unsigned numImplicitArgs = 2 /* _cmd, self */; - unsigned numMethods = 0; - Method *methods = class_copyMethodList(object_getClass([MGLStyle class]), &numMethods); - unsigned numVersionedMethods = 0; - for (NSUInteger i = 0; i < numMethods; i++) { - Method method = methods[i]; - SEL selector = method_getName(method); - NSString *name = @(sel_getName(selector)); - unsigned numArgs = method_getNumberOfArguments(method); - if ([name hasSuffix:@"StyleURL"]) { - XCTAssertEqual(numArgs, numImplicitArgs, @"Unversioned style URL method should have no parameters, but it has %u.", numArgs - numImplicitArgs); - } else if ([name hasSuffix:@"StyleURLWithVersion:"]) { - XCTAssertEqual(numArgs, numImplicitArgs + 1, @"Versioned style URL method should have one parameter, but it has %u.", numArgs - numImplicitArgs); - numVersionedMethods++; - } else { - XCTAssertEqual([name rangeOfString:@"URL"].location, NSNotFound, @"MGLStyle style URL method %@ is malformed.", name); - } - } - XCTAssertEqual(mbgl::util::default_styles::numOrderedStyles, numVersionedMethods, - @"There are %lu default styles but MGLStyleTests only provides versioned style URL methods for %u of them.", - mbgl::util::default_styles::numOrderedStyles, numVersionedMethods); - - // Test that all the versioned style methods are in the public header. - NSString *styleHeader = self.stringWithContentsOfStyleHeader; - - NSError *versionedMethodError; - NSString *versionedMethodExpressionString = @(R"RE(^\+\s*\(NSURL\s*\*\s*\)\s*(?!traffic)\w+StyleURLWithVersion\s*:\s*\(\s*NSInteger\s*\)\s*version\s*\b)RE"); - NSRegularExpression *versionedMethodExpression = [NSRegularExpression regularExpressionWithPattern:versionedMethodExpressionString options:NSRegularExpressionAnchorsMatchLines error:&versionedMethodError]; - XCTAssertNil(versionedMethodError, @"Error compiling regular expression to search for versioned methods."); - NSUInteger numVersionedMethodDeclarations = [versionedMethodExpression numberOfMatchesInString:styleHeader options:0 range:NSMakeRange(0, styleHeader.length)]; - XCTAssertEqual(numVersionedMethodDeclarations, numVersionedMethods); -} - -- (void)testName { - XCTAssertNil(self.style.name); -} - -- (void)testSources { - NSSet *initialSources = self.style.sources; - if ([initialSources.anyObject.identifier isEqualToString:@"com.mapbox.annotations"]) { - XCTAssertEqual(self.style.sources.count, 1UL); - } else { - XCTAssertEqual(self.style.sources.count, 0UL); - } - MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"shapeSource" shape:nil options:nil]; - [self.style addSource:shapeSource]; - XCTAssertEqual(self.style.sources.count, initialSources.count + 1); - XCTAssertEqual(shapeSource, [self.style sourceWithIdentifier:@"shapeSource"]); - [self.style removeSource:shapeSource]; - XCTAssertEqual(self.style.sources.count, initialSources.count); -} - -- (void)testAddingSourcesTwice { - MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"shapeSource" shape:nil options:nil]; - [self.style addSource:shapeSource]; - XCTAssertThrowsSpecificNamed([self.style addSource:shapeSource], NSException, MGLRedundantSourceException); - - MGLRasterTileSource *rasterTileSource = [[MGLRasterTileSource alloc] initWithIdentifier:@"rasterTileSource" configurationURL:[NSURL URLWithString:@".json"] tileSize:42]; - [self.style addSource:rasterTileSource]; - XCTAssertThrowsSpecificNamed([self.style addSource:rasterTileSource], NSException, MGLRedundantSourceException); - - MGLVectorTileSource *vectorTileSource = [[MGLVectorTileSource alloc] initWithIdentifier:@"vectorTileSource" configurationURL:[NSURL URLWithString:@".json"]]; - [self.style addSource:vectorTileSource]; - XCTAssertThrowsSpecificNamed([self.style addSource:vectorTileSource], NSException, MGLRedundantSourceException); -} - -- (void)testAddingSourcesWithDuplicateIdentifiers { - MGLVectorTileSource *source1 = [[MGLVectorTileSource alloc] initWithIdentifier:@"my-source" configurationURL:[NSURL URLWithString:@"mapbox://mapbox.mapbox-terrain-v2"]]; - MGLVectorTileSource *source2 = [[MGLVectorTileSource alloc] initWithIdentifier:@"my-source" configurationURL:[NSURL URLWithString:@"mapbox://mapbox.mapbox-terrain-v2"]]; - - [self.style addSource: source1]; - XCTAssertThrowsSpecificNamed([self.style addSource: source2], NSException, MGLRedundantSourceIdentifierException); -} - -- (void)testRemovingSourcesBeforeAddingThem { - MGLRasterTileSource *rasterTileSource = [[MGLRasterTileSource alloc] initWithIdentifier:@"raster-tile-source" tileURLTemplates:@[] options:nil]; - [self.style removeSource:rasterTileSource]; - [self.style addSource:rasterTileSource]; - XCTAssertNotNil([self.style sourceWithIdentifier:rasterTileSource.identifier]); - - MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"shape-source" shape:nil options:nil]; - [self.style removeSource:shapeSource]; - [self.style addSource:shapeSource]; - XCTAssertNotNil([self.style sourceWithIdentifier:shapeSource.identifier]); - - MGLVectorTileSource *vectorTileSource = [[MGLVectorTileSource alloc] initWithIdentifier:@"vector-tile-source" tileURLTemplates:@[] options:nil]; - [self.style removeSource:vectorTileSource]; - [self.style addSource:vectorTileSource]; - XCTAssertNotNil([self.style sourceWithIdentifier:vectorTileSource.identifier]); -} - -- (void)testAddingSourceOfTypeABeforeSourceOfTypeBWithSameIdentifier { - // Add a raster tile source - MGLRasterTileSource *rasterTileSource = [[MGLRasterTileSource alloc] initWithIdentifier:@"some-identifier" tileURLTemplates:@[] options:nil]; - [self.style addSource:rasterTileSource]; - - // Attempt to remove an image source with the same identifier as the raster tile source - MGLImageSource *imageSource = [[MGLImageSource alloc] initWithIdentifier:@"some-identifier" coordinateQuad: { } URL:[NSURL URLWithString:@"http://host/image.png"]]; - [self.style removeSource:imageSource]; - // The raster tile source should still be added - XCTAssertTrue([[self.style sourceWithIdentifier:rasterTileSource.identifier] isMemberOfClass:[MGLRasterTileSource class]]); - - // Remove the raster tile source - [self.style removeSource:rasterTileSource]; - - // Add the shape source - [self.style addSource:imageSource]; - - // Attempt to remove a vector tile source with the same identifer as the shape source - MGLVectorTileSource *vectorTileSource = [[MGLVectorTileSource alloc] initWithIdentifier:@"some-identifier" tileURLTemplates:@[] options:nil]; - [self.style removeSource:vectorTileSource]; - // The image source should still be added - XCTAssertTrue([[self.style sourceWithIdentifier:imageSource.identifier] isMemberOfClass:[MGLImageSource class]]); - - // Remove the image source - [self.style removeSource:imageSource]; - - // Add the vector tile source - [self.style addSource:vectorTileSource]; - - // Attempt to remove the previously created raster tile source that has the same identifer as the shape source - [self.style removeSource:rasterTileSource]; - // The vector tile source should still be added - XCTAssertTrue([[self.style sourceWithIdentifier:imageSource.identifier] isMemberOfClass:[MGLVectorTileSource class]]); -} - -- (void)testRemovingSourceInUse { - // Add a raster tile source - MGLVectorTileSource *vectorTileSource = [[MGLVectorTileSource alloc] initWithIdentifier:@"some-identifier" tileURLTemplates:@[] options:nil]; - [self.style addSource:vectorTileSource]; - - // Add a layer using it - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"fillLayer" source:vectorTileSource]; - [self.style addLayer:fillLayer]; - - // Attempt to remove the raster tile source - NSError *error; - BOOL result = [self.style removeSource:vectorTileSource error:&error]; - - XCTAssertFalse(result); - XCTAssertEqualObjects(error.domain, MGLErrorDomain); - XCTAssertEqual(error.code, MGLErrorCodeSourceIsInUseCannotRemove); - - // Ensure it is still there - XCTAssertTrue([[self.style sourceWithIdentifier:vectorTileSource.identifier] isMemberOfClass:[MGLVectorTileSource class]]); -} - -- (void)testLayers { - NSArray *initialLayers = self.style.layers; - if ([initialLayers.firstObject.identifier isEqualToString:@"com.mapbox.annotations.points"]) { - XCTAssertEqual(self.style.layers.count, 1UL); - } else { - XCTAssertEqual(self.style.layers.count, 0UL); - } - MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"shapeSource" shape:nil options:nil]; - [self.style addSource:shapeSource]; - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"fillLayer" source:shapeSource]; - [self.style addLayer:fillLayer]; - XCTAssertEqual(self.style.layers.count, initialLayers.count + 1); - XCTAssertEqual(fillLayer, [self.style layerWithIdentifier:@"fillLayer"]); - [self.style removeLayer:fillLayer]; - XCTAssertEqual(self.style.layers.count, initialLayers.count); -} - -- (void)testAddingLayersTwice { - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"shapeSource" shape:nil options:nil]; - - MGLBackgroundStyleLayer *backgroundLayer = [[MGLBackgroundStyleLayer alloc] initWithIdentifier:@"backgroundLayer"]; - [self.style addLayer:backgroundLayer]; - XCTAssertThrowsSpecificNamed([self.style addLayer:backgroundLayer], NSException, MGLRedundantLayerException); - - MGLCircleStyleLayer *circleLayer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"circleLayer" source:source]; - [self.style addLayer:circleLayer]; - XCTAssertThrowsSpecificNamed([self.style addLayer:circleLayer], NSException, MGLRedundantLayerException); - - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"fillLayer" source:source]; - [self.style addLayer:fillLayer]; - XCTAssertThrowsSpecificNamed([self.style addLayer:fillLayer], NSException, MGLRedundantLayerException); - - MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"lineLayer" source:source]; - [self.style addLayer:lineLayer]; - XCTAssertThrowsSpecificNamed([self.style addLayer:lineLayer], NSException, MGLRedundantLayerException); - - MGLRasterStyleLayer *rasterLayer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"rasterLayer" source:source]; - [self.style addLayer:rasterLayer]; - XCTAssertThrowsSpecificNamed([self.style addLayer:rasterLayer], NSException, MGLRedundantLayerException); - - MGLSymbolStyleLayer *symbolLayer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"symbolLayer" source:source]; - [self.style addLayer:symbolLayer]; - XCTAssertThrowsSpecificNamed([self.style addLayer:symbolLayer], NSException, MGLRedundantLayerException); -} - -- (void)testAddingLayersWithDuplicateIdentifiers { - // Just some source - MGLVectorTileSource *source = [[MGLVectorTileSource alloc] initWithIdentifier:@"my-source" configurationURL:[NSURL URLWithString:@"mapbox://mapbox.mapbox-terrain-v2"]]; - [self.style addSource: source]; - - // Add initial layer - MGLFillStyleLayer *initial = [[MGLFillStyleLayer alloc] initWithIdentifier:@"my-layer" source:source]; - [self.style addLayer:initial]; - - // Try to add the duplicate - XCTAssertThrowsSpecificNamed([self.style addLayer:[[MGLFillStyleLayer alloc] initWithIdentifier:@"my-layer" source:source]], NSException, @"MGLRedundantLayerIdentifierException"); - XCTAssertThrowsSpecificNamed([self.style insertLayer:[[MGLFillStyleLayer alloc] initWithIdentifier:@"my-layer" source:source] belowLayer:initial],NSException, @"MGLRedundantLayerIdentifierException"); - XCTAssertThrowsSpecificNamed([self.style insertLayer:[[MGLFillStyleLayer alloc] initWithIdentifier:@"my-layer" source:source] aboveLayer:initial], NSException, @"MGLRedundantLayerIdentifierException"); - XCTAssertThrowsSpecificNamed([self.style insertLayer:[[MGLFillStyleLayer alloc] initWithIdentifier:@"my-layer" source:source] atIndex:0], NSException, @"MGLRedundantLayerIdentifierException"); - XCTAssertThrowsSpecificNamed([self.style insertLayer:[[MGLOpenGLStyleLayer alloc] initWithIdentifier:@"my-layer"] atIndex:0], NSException, @"MGLRedundantLayerIdentifierException"); -} - -- (void)testRemovingLayerBeforeAddingSameLayer { - { - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"shape-source-removing-before-adding" shape:nil options:nil]; - - // Attempting to find a layer with identifier will trigger an exception if the source associated with the layer is not added - [self.style addSource:source]; - - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"fill-layer" source:source]; - [self.style removeLayer:fillLayer]; - [self.style addLayer:fillLayer]; - XCTAssertNotNil([self.style layerWithIdentifier:fillLayer.identifier]); - - MGLSymbolStyleLayer *symbolLayer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"symbol-layer" source:source]; - [self.style removeLayer:symbolLayer]; - [self.style addLayer:symbolLayer]; - XCTAssertNotNil([self.style layerWithIdentifier:symbolLayer.identifier]); - - MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"line-layer" source:source]; - [self.style removeLayer:lineLayer]; - [self.style addLayer:lineLayer]; - XCTAssertNotNil([self.style layerWithIdentifier:lineLayer.identifier]); - - MGLCircleStyleLayer *circleLayer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"circle-layer" source:source]; - [self.style removeLayer:circleLayer]; - [self.style addLayer:circleLayer]; - XCTAssertNotNil([self.style layerWithIdentifier:circleLayer.identifier]); - - MGLBackgroundStyleLayer *backgroundLayer = [[MGLBackgroundStyleLayer alloc] initWithIdentifier:@"background-layer"]; - [self.style removeLayer:backgroundLayer]; - [self.style addLayer:backgroundLayer]; - XCTAssertNotNil([self.style layerWithIdentifier:backgroundLayer.identifier]); - } - - { - MGLRasterTileSource *rasterSource = [[MGLRasterTileSource alloc] initWithIdentifier:@"raster-tile-source" tileURLTemplates:@[] options:nil]; - [self.style addSource:rasterSource]; - - MGLRasterStyleLayer *rasterLayer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"raster-layer" source:rasterSource]; - [self.style removeLayer:rasterLayer]; - [self.style addLayer:rasterLayer]; - XCTAssertNotNil([self.style layerWithIdentifier:rasterLayer.identifier]); - } -} - -- (void)testAddingLayerOfTypeABeforeRemovingLayerOfTypeBWithSameIdentifier { - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"shape-source-identifier" shape:nil options:nil]; - [self.style addSource:source]; - - // Add a fill layer - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"some-identifier" source:source]; - [self.style addLayer:fillLayer]; - - // Attempt to remove a line layer with the same identifier as the fill layer - MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:fillLayer.identifier source:source]; - [self.style removeLayer:lineLayer]; - - XCTAssertTrue([[self.style layerWithIdentifier:fillLayer.identifier] isMemberOfClass:[MGLFillStyleLayer class]]); -} - -- (NSString *)stringWithContentsOfStyleHeader { - NSURL *styleHeaderURL = [[[NSBundle mgl_frameworkBundle].bundleURL - URLByAppendingPathComponent:@"Headers" isDirectory:YES] - URLByAppendingPathComponent:@"MGLStyle.h"]; - NSError *styleHeaderError; - NSString *styleHeader = [NSString stringWithContentsOfURL:styleHeaderURL usedEncoding:nil error:&styleHeaderError]; - XCTAssertNil(styleHeaderError, @"Error getting contents of MGLStyle.h."); - return styleHeader; -} - -- (void)testImages { - NSString *imageName = @"TrackingLocationMask"; -#if TARGET_OS_IPHONE - MGLImage *image = [MGLImage imageNamed:imageName - inBundle:[NSBundle bundleForClass:[self class]] - compatibleWithTraitCollection:nil]; -#else - MGLImage *image = [[NSBundle bundleForClass:[self class]] imageForResource:imageName]; -#endif - XCTAssertNotNil(image); - - [self.style setImage:image forName:imageName]; - MGLImage *styleImage = [self.style imageForName:imageName]; - - XCTAssertNotNil(styleImage); - XCTAssertEqual(image.size.width, styleImage.size.width); - XCTAssertEqual(image.size.height, styleImage.size.height); -} - -- (void)testLayersOrder { - NSString *filePath = [[NSBundle bundleForClass:self.class] pathForResource:@"amsterdam" ofType:@"geojson"]; - NSURL *url = [NSURL fileURLWithPath:filePath]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" URL:url options:nil]; - [self.style addSource:source]; - - MGLCircleStyleLayer *layer1 = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layer1" source:source]; - [self.style addLayer:layer1]; - - MGLCircleStyleLayer *layer3 = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layer3" source:source]; - [self.style addLayer:layer3]; - - MGLCircleStyleLayer *layer2 = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layer2" source:source]; - [self.style insertLayer:layer2 aboveLayer:layer1]; - - MGLCircleStyleLayer *layer4 = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layer4" source:source]; - [self.style insertLayer:layer4 aboveLayer:layer3]; - - MGLCircleStyleLayer *layer0 = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"layer0" source:source]; - [self.style insertLayer:layer0 belowLayer:layer1]; - - NSArray *layers = [self.style layers]; - NSUInteger startIndex = 0; - if ([layers.firstObject.identifier isEqualToString:@"com.mapbox.annotations.points"]) { - startIndex++; - } - - XCTAssertEqualObjects(layers[startIndex++].identifier, layer0.identifier); - XCTAssertEqualObjects(layers[startIndex++].identifier, layer1.identifier); - XCTAssertEqualObjects(layers[startIndex++].identifier, layer2.identifier); - XCTAssertEqualObjects(layers[startIndex++].identifier, layer3.identifier); - XCTAssertEqualObjects(layers[startIndex++].identifier, layer4.identifier); -} - -#pragma mark Localization tests - -- (void)testLanguageMatching { - { - NSArray *preferences = @[@"en"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"en"); - } - { - NSArray *preferences = @[@"en-US"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"en"); - } - { - NSArray *preferences = @[@"fr"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"fr"); - } - { - NSArray *preferences = @[@"zh-Hans"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"zh-Hans"); - } - { - NSArray *preferences = @[@"zh-Hans", @"en"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"zh-Hans"); - } - { - NSArray *preferences = @[@"zh-Hant"]; - XCTAssertNil([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences]); - } - { - NSArray *preferences = @[@"en", @"fr", @"el"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"en"); - } - { - NSArray *preferences = @[@"tlh"]; - XCTAssertNil([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences]); - } - { - NSArray *preferences = @[@"tlh", @"en"]; - XCTAssertEqualObjects([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences], @"en"); - } - { - NSArray *preferences = @[@"mul"]; - XCTAssertNil([MGLVectorTileSource preferredMapboxStreetsLanguageForPreferences:preferences]); - } -} - -#pragma mark Transition tests - -- (void)testTransition -{ - MGLTransition transitionTest = MGLTransitionMake(5, 4); - - self.style.transition = transitionTest; - - XCTAssert(self.style.transition.delay == transitionTest.delay); - XCTAssert(self.style.transition.duration == transitionTest.duration); -} - -- (void)testPerformsPlacementTransitions -{ - XCTAssertTrue(self.style.performsPlacementTransitions, @"The default value for enabling placement transitions should be YES."); - - self.style.performsPlacementTransitions = NO; - XCTAssertFalse(self.style.performsPlacementTransitions, @"Enabling placement transitions should be NO."); -} - -@end diff --git a/platform/darwin/test/MGLSymbolStyleLayerTests.mm b/platform/darwin/test/MGLSymbolStyleLayerTests.mm deleted file mode 100644 index 04ef3fc7122..00000000000 --- a/platform/darwin/test/MGLSymbolStyleLayerTests.mm +++ /dev/null @@ -1,3204 +0,0 @@ -// This file is generated. -// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`. - -#import "MGLStyleLayerTests.h" -#import "../../darwin/src/NSDate+MGLAdditions.h" -#include "../../darwin/src/MGLAttributedExpression.h" - -#import "MGLStyleLayer_Private.h" - -#include -#include -#include - -@interface MGLSymbolLayerTests : MGLStyleLayerTests -@end - -@implementation MGLSymbolLayerTests - -+ (NSString *)layerType { - return @"symbol"; -} - -- (void)testPredicates { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - MGLSymbolStyleLayer *layer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - - XCTAssertNil(layer.sourceLayerIdentifier); - layer.sourceLayerIdentifier = @"layerID"; - XCTAssertEqualObjects(layer.sourceLayerIdentifier, @"layerID"); - layer.sourceLayerIdentifier = nil; - XCTAssertNil(layer.sourceLayerIdentifier); - - XCTAssertNil(layer.predicate); - layer.predicate = [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]; - XCTAssertEqualObjects(layer.predicate, [NSPredicate predicateWithFormat:@"$featureIdentifier = 1"]); - layer.predicate = nil; - XCTAssertNil(layer.predicate); -} - -- (void)testProperties { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - - MGLSymbolStyleLayer *layer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"layerID" source:source]; - XCTAssertNotEqual(layer.rawLayer, nullptr); - XCTAssertEqualObjects(@(layer.rawLayer->getTypeInfo()->type), @"symbol"); - auto rawLayer = static_cast(layer.rawLayer); - - MGLTransition transitionTest = MGLTransitionMake(5, 4); - - - // icon-allow-overlap - { - XCTAssertTrue(rawLayer->getIconAllowOverlap().isUndefined(), - @"icon-allow-overlap should be unset initially."); - NSExpression *defaultExpression = layer.iconAllowsOverlap; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"true"]; - layer.iconAllowsOverlap = constantExpression; - mbgl::style::PropertyValue propertyValue = { true }; - XCTAssertEqual(rawLayer->getIconAllowOverlap(), propertyValue, - @"Setting iconAllowsOverlap to a constant value expression should update icon-allow-overlap."); - XCTAssertEqualObjects(layer.iconAllowsOverlap, constantExpression, - @"iconAllowsOverlap should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"true"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconAllowsOverlap = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(true), 18.0, literal(true)) - ); - } - - XCTAssertEqual(rawLayer->getIconAllowOverlap(), propertyValue, - @"Setting iconAllowsOverlap to a camera expression should update icon-allow-overlap."); - XCTAssertEqualObjects(layer.iconAllowsOverlap, functionExpression, - @"iconAllowsOverlap should round-trip camera expressions."); - - - layer.iconAllowsOverlap = nil; - XCTAssertTrue(rawLayer->getIconAllowOverlap().isUndefined(), - @"Unsetting iconAllowsOverlap should return icon-allow-overlap to the default value."); - XCTAssertEqualObjects(layer.iconAllowsOverlap, defaultExpression, - @"iconAllowsOverlap should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.iconAllowsOverlap = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.iconAllowsOverlap = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // icon-anchor - { - XCTAssertTrue(rawLayer->getIconAnchor().isUndefined(), - @"icon-anchor should be unset initially."); - NSExpression *defaultExpression = layer.iconAnchor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'bottom-right'"]; - layer.iconAnchor = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::SymbolAnchorType::BottomRight }; - XCTAssertEqual(rawLayer->getIconAnchor(), propertyValue, - @"Setting iconAnchor to a constant value expression should update icon-anchor."); - XCTAssertEqualObjects(layer.iconAnchor, constantExpression, - @"iconAnchor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'bottom-right'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconAnchor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("bottom-right"), 18.0, literal("bottom-right")) - ); - } - - XCTAssertEqual(rawLayer->getIconAnchor(), propertyValue, - @"Setting iconAnchor to a camera expression should update icon-anchor."); - XCTAssertEqualObjects(layer.iconAnchor, functionExpression, - @"iconAnchor should round-trip camera expressions."); - - - layer.iconAnchor = nil; - XCTAssertTrue(rawLayer->getIconAnchor().isUndefined(), - @"Unsetting iconAnchor should return icon-anchor to the default value."); - XCTAssertEqualObjects(layer.iconAnchor, defaultExpression, - @"iconAnchor should return the default value after being unset."); - } - - // icon-ignore-placement - { - XCTAssertTrue(rawLayer->getIconIgnorePlacement().isUndefined(), - @"icon-ignore-placement should be unset initially."); - NSExpression *defaultExpression = layer.iconIgnoresPlacement; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"true"]; - layer.iconIgnoresPlacement = constantExpression; - mbgl::style::PropertyValue propertyValue = { true }; - XCTAssertEqual(rawLayer->getIconIgnorePlacement(), propertyValue, - @"Setting iconIgnoresPlacement to a constant value expression should update icon-ignore-placement."); - XCTAssertEqualObjects(layer.iconIgnoresPlacement, constantExpression, - @"iconIgnoresPlacement should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"true"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconIgnoresPlacement = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(true), 18.0, literal(true)) - ); - } - - XCTAssertEqual(rawLayer->getIconIgnorePlacement(), propertyValue, - @"Setting iconIgnoresPlacement to a camera expression should update icon-ignore-placement."); - XCTAssertEqualObjects(layer.iconIgnoresPlacement, functionExpression, - @"iconIgnoresPlacement should round-trip camera expressions."); - - - layer.iconIgnoresPlacement = nil; - XCTAssertTrue(rawLayer->getIconIgnorePlacement().isUndefined(), - @"Unsetting iconIgnoresPlacement should return icon-ignore-placement to the default value."); - XCTAssertEqualObjects(layer.iconIgnoresPlacement, defaultExpression, - @"iconIgnoresPlacement should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.iconIgnoresPlacement = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.iconIgnoresPlacement = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // icon-image - { - XCTAssertTrue(rawLayer->getIconImage().isUndefined(), - @"icon-image should be unset initially."); - NSExpression *defaultExpression = layer.iconImageName; - - NSExpression *constantExpression = [NSExpression expressionForConstantValue:@"Icon Image"]; - layer.iconImageName = constantExpression; - mbgl::style::PropertyValue propertyValue = { "Icon Image" }; - XCTAssertEqual(rawLayer->getIconImage(), propertyValue, - @"Setting iconImageName to a constant value expression should update icon-image."); - XCTAssertEqualObjects(layer.iconImageName, constantExpression, - @"iconImageName should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"MGL_FUNCTION('image', 'Icon Image')"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconImageName = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), image(literal("Icon Image")), 18.0, image(literal("Icon Image"))) - ); - } - - XCTAssertEqual(rawLayer->getIconImage(), propertyValue, - @"Setting iconImageName to a camera expression should update icon-image."); - XCTAssertEqualObjects(layer.iconImageName, functionExpression, - @"iconImageName should round-trip camera expressions."); - - - layer.iconImageName = nil; - XCTAssertTrue(rawLayer->getIconImage().isUndefined(), - @"Unsetting iconImageName should return icon-image to the default value."); - XCTAssertEqualObjects(layer.iconImageName, defaultExpression, - @"iconImageName should return the default value after being unset."); - - // Tokens test - layer.iconImageName = [NSExpression expressionForConstantValue:@"{token}"]; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - image(toString(get(literal("token")))) - ); - } - - XCTAssertEqual(rawLayer->getIconImage(), propertyValue, - @"Setting iconImageName to a constant string with tokens should convert to an expression."); - - NSExpression* tokenExpression = [NSExpression expressionWithFormat:@"MGL_FUNCTION('image', CAST(token, \"NSString\"))"]; - XCTAssertEqualObjects(layer.iconImageName, tokenExpression, - @"Setting iconImageName to a constant string with tokens should convert to an expression."); - } - - // icon-offset - { - XCTAssertTrue(rawLayer->getIconOffset().isUndefined(), - @"icon-offset should be unset initially."); - NSExpression *defaultExpression = layer.iconOffset; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", -#if TARGET_OS_IPHONE - [NSValue valueWithCGVector:CGVectorMake(1, 1)] -#else - [NSValue valueWithMGLVector:CGVectorMake(1, -1)] -#endif - ]; - layer.iconOffset = constantExpression; - mbgl::style::PropertyValue> propertyValue = { { 1, 1 } }; - XCTAssertEqual(rawLayer->getIconOffset(), propertyValue, - @"Setting iconOffset to a constant value expression should update icon-offset."); - XCTAssertEqualObjects(layer.iconOffset, constantExpression, - @"iconOffset should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconOffset = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({ 1, 1 }), 18.0, literal({ 1, 1 })) - ); - } - - XCTAssertEqual(rawLayer->getIconOffset(), propertyValue, - @"Setting iconOffset to a camera expression should update icon-offset."); - XCTAssertEqualObjects(layer.iconOffset, functionExpression, - @"iconOffset should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.iconOffset = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - interpolate(linear(), number(get("keyName")), 18.0, literal({ 1, 1 })) - ); - } - - XCTAssertEqual(rawLayer->getIconOffset(), propertyValue, - @"Setting iconOffset to a data expression should update icon-offset."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.iconOffset, pedanticFunctionExpression, - @"iconOffset should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.iconOffset = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal({ 1, 1 }))) - ); - } - - XCTAssertEqual(rawLayer->getIconOffset(), propertyValue, - @"Setting iconOffset to a camera-data expression should update icon-offset."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.iconOffset, pedanticFunctionExpression, - @"iconOffset should round-trip camera-data expressions."); - - layer.iconOffset = nil; - XCTAssertTrue(rawLayer->getIconOffset().isUndefined(), - @"Unsetting iconOffset should return icon-offset to the default value."); - XCTAssertEqualObjects(layer.iconOffset, defaultExpression, - @"iconOffset should return the default value after being unset."); - } - - // icon-optional - { - XCTAssertTrue(rawLayer->getIconOptional().isUndefined(), - @"icon-optional should be unset initially."); - NSExpression *defaultExpression = layer.iconOptional; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"true"]; - layer.iconOptional = constantExpression; - mbgl::style::PropertyValue propertyValue = { true }; - XCTAssertEqual(rawLayer->getIconOptional(), propertyValue, - @"Setting iconOptional to a constant value expression should update icon-optional."); - XCTAssertEqualObjects(layer.iconOptional, constantExpression, - @"iconOptional should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"true"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconOptional = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(true), 18.0, literal(true)) - ); - } - - XCTAssertEqual(rawLayer->getIconOptional(), propertyValue, - @"Setting iconOptional to a camera expression should update icon-optional."); - XCTAssertEqualObjects(layer.iconOptional, functionExpression, - @"iconOptional should round-trip camera expressions."); - - - layer.iconOptional = nil; - XCTAssertTrue(rawLayer->getIconOptional().isUndefined(), - @"Unsetting iconOptional should return icon-optional to the default value."); - XCTAssertEqualObjects(layer.iconOptional, defaultExpression, - @"iconOptional should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.iconOptional = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.iconOptional = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // icon-padding - { - XCTAssertTrue(rawLayer->getIconPadding().isUndefined(), - @"icon-padding should be unset initially."); - NSExpression *defaultExpression = layer.iconPadding; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.iconPadding = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getIconPadding(), propertyValue, - @"Setting iconPadding to a constant value expression should update icon-padding."); - XCTAssertEqualObjects(layer.iconPadding, constantExpression, - @"iconPadding should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconPadding = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getIconPadding(), propertyValue, - @"Setting iconPadding to a camera expression should update icon-padding."); - XCTAssertEqualObjects(layer.iconPadding, functionExpression, - @"iconPadding should round-trip camera expressions."); - - - layer.iconPadding = nil; - XCTAssertTrue(rawLayer->getIconPadding().isUndefined(), - @"Unsetting iconPadding should return icon-padding to the default value."); - XCTAssertEqualObjects(layer.iconPadding, defaultExpression, - @"iconPadding should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.iconPadding = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.iconPadding = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // icon-pitch-alignment - { - XCTAssertTrue(rawLayer->getIconPitchAlignment().isUndefined(), - @"icon-pitch-alignment should be unset initially."); - NSExpression *defaultExpression = layer.iconPitchAlignment; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'auto'"]; - layer.iconPitchAlignment = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::AlignmentType::Auto }; - XCTAssertEqual(rawLayer->getIconPitchAlignment(), propertyValue, - @"Setting iconPitchAlignment to a constant value expression should update icon-pitch-alignment."); - XCTAssertEqualObjects(layer.iconPitchAlignment, constantExpression, - @"iconPitchAlignment should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'auto'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconPitchAlignment = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("auto"), 18.0, literal("auto")) - ); - } - - XCTAssertEqual(rawLayer->getIconPitchAlignment(), propertyValue, - @"Setting iconPitchAlignment to a camera expression should update icon-pitch-alignment."); - XCTAssertEqualObjects(layer.iconPitchAlignment, functionExpression, - @"iconPitchAlignment should round-trip camera expressions."); - - - layer.iconPitchAlignment = nil; - XCTAssertTrue(rawLayer->getIconPitchAlignment().isUndefined(), - @"Unsetting iconPitchAlignment should return icon-pitch-alignment to the default value."); - XCTAssertEqualObjects(layer.iconPitchAlignment, defaultExpression, - @"iconPitchAlignment should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.iconPitchAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.iconPitchAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // icon-rotate - { - XCTAssertTrue(rawLayer->getIconRotate().isUndefined(), - @"icon-rotate should be unset initially."); - NSExpression *defaultExpression = layer.iconRotation; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.iconRotation = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getIconRotate(), propertyValue, - @"Setting iconRotation to a constant value expression should update icon-rotate."); - XCTAssertEqualObjects(layer.iconRotation, constantExpression, - @"iconRotation should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconRotation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getIconRotate(), propertyValue, - @"Setting iconRotation to a camera expression should update icon-rotate."); - XCTAssertEqualObjects(layer.iconRotation, functionExpression, - @"iconRotation should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.iconRotation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getIconRotate(), propertyValue, - @"Setting iconRotation to a data expression should update icon-rotate."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.iconRotation, pedanticFunctionExpression, - @"iconRotation should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.iconRotation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getIconRotate(), propertyValue, - @"Setting iconRotation to a camera-data expression should update icon-rotate."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.iconRotation, pedanticFunctionExpression, - @"iconRotation should round-trip camera-data expressions."); - - layer.iconRotation = nil; - XCTAssertTrue(rawLayer->getIconRotate().isUndefined(), - @"Unsetting iconRotation should return icon-rotate to the default value."); - XCTAssertEqualObjects(layer.iconRotation, defaultExpression, - @"iconRotation should return the default value after being unset."); - } - - // icon-rotation-alignment - { - XCTAssertTrue(rawLayer->getIconRotationAlignment().isUndefined(), - @"icon-rotation-alignment should be unset initially."); - NSExpression *defaultExpression = layer.iconRotationAlignment; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'auto'"]; - layer.iconRotationAlignment = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::AlignmentType::Auto }; - XCTAssertEqual(rawLayer->getIconRotationAlignment(), propertyValue, - @"Setting iconRotationAlignment to a constant value expression should update icon-rotation-alignment."); - XCTAssertEqualObjects(layer.iconRotationAlignment, constantExpression, - @"iconRotationAlignment should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'auto'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconRotationAlignment = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("auto"), 18.0, literal("auto")) - ); - } - - XCTAssertEqual(rawLayer->getIconRotationAlignment(), propertyValue, - @"Setting iconRotationAlignment to a camera expression should update icon-rotation-alignment."); - XCTAssertEqualObjects(layer.iconRotationAlignment, functionExpression, - @"iconRotationAlignment should round-trip camera expressions."); - - - layer.iconRotationAlignment = nil; - XCTAssertTrue(rawLayer->getIconRotationAlignment().isUndefined(), - @"Unsetting iconRotationAlignment should return icon-rotation-alignment to the default value."); - XCTAssertEqualObjects(layer.iconRotationAlignment, defaultExpression, - @"iconRotationAlignment should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.iconRotationAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.iconRotationAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // icon-size - { - XCTAssertTrue(rawLayer->getIconSize().isUndefined(), - @"icon-size should be unset initially."); - NSExpression *defaultExpression = layer.iconScale; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.iconScale = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getIconSize(), propertyValue, - @"Setting iconScale to a constant value expression should update icon-size."); - XCTAssertEqualObjects(layer.iconScale, constantExpression, - @"iconScale should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconScale = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getIconSize(), propertyValue, - @"Setting iconScale to a camera expression should update icon-size."); - XCTAssertEqualObjects(layer.iconScale, functionExpression, - @"iconScale should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.iconScale = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getIconSize(), propertyValue, - @"Setting iconScale to a data expression should update icon-size."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.iconScale, pedanticFunctionExpression, - @"iconScale should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.iconScale = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getIconSize(), propertyValue, - @"Setting iconScale to a camera-data expression should update icon-size."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.iconScale, pedanticFunctionExpression, - @"iconScale should round-trip camera-data expressions."); - - layer.iconScale = nil; - XCTAssertTrue(rawLayer->getIconSize().isUndefined(), - @"Unsetting iconScale should return icon-size to the default value."); - XCTAssertEqualObjects(layer.iconScale, defaultExpression, - @"iconScale should return the default value after being unset."); - } - - // icon-text-fit - { - XCTAssertTrue(rawLayer->getIconTextFit().isUndefined(), - @"icon-text-fit should be unset initially."); - NSExpression *defaultExpression = layer.iconTextFit; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'both'"]; - layer.iconTextFit = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::IconTextFitType::Both }; - XCTAssertEqual(rawLayer->getIconTextFit(), propertyValue, - @"Setting iconTextFit to a constant value expression should update icon-text-fit."); - XCTAssertEqualObjects(layer.iconTextFit, constantExpression, - @"iconTextFit should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'both'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconTextFit = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("both"), 18.0, literal("both")) - ); - } - - XCTAssertEqual(rawLayer->getIconTextFit(), propertyValue, - @"Setting iconTextFit to a camera expression should update icon-text-fit."); - XCTAssertEqualObjects(layer.iconTextFit, functionExpression, - @"iconTextFit should round-trip camera expressions."); - - - layer.iconTextFit = nil; - XCTAssertTrue(rawLayer->getIconTextFit().isUndefined(), - @"Unsetting iconTextFit should return icon-text-fit to the default value."); - XCTAssertEqualObjects(layer.iconTextFit, defaultExpression, - @"iconTextFit should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.iconTextFit = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.iconTextFit = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // icon-text-fit-padding - { - XCTAssertTrue(rawLayer->getIconTextFitPadding().isUndefined(), - @"icon-text-fit-padding should be unset initially."); - NSExpression *defaultExpression = layer.iconTextFitPadding; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", -#if TARGET_OS_IPHONE - [NSValue valueWithUIEdgeInsets:UIEdgeInsetsMake(1, 1, 1, 1)] -#else - [NSValue valueWithEdgeInsets:NSEdgeInsetsMake(1, 1, 1, 1)] -#endif - ]; - layer.iconTextFitPadding = constantExpression; - mbgl::style::PropertyValue> propertyValue = { { 1, 1, 1, 1 } }; - XCTAssertEqual(rawLayer->getIconTextFitPadding(), propertyValue, - @"Setting iconTextFitPadding to a constant value expression should update icon-text-fit-padding."); - XCTAssertEqualObjects(layer.iconTextFitPadding, constantExpression, - @"iconTextFitPadding should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{1, 1, 1, 1}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconTextFitPadding = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({ 1, 1, 1, 1 }), 18.0, literal({ 1, 1, 1, 1 })) - ); - } - - XCTAssertEqual(rawLayer->getIconTextFitPadding(), propertyValue, - @"Setting iconTextFitPadding to a camera expression should update icon-text-fit-padding."); - XCTAssertEqualObjects(layer.iconTextFitPadding, functionExpression, - @"iconTextFitPadding should round-trip camera expressions."); - - - layer.iconTextFitPadding = nil; - XCTAssertTrue(rawLayer->getIconTextFitPadding().isUndefined(), - @"Unsetting iconTextFitPadding should return icon-text-fit-padding to the default value."); - XCTAssertEqualObjects(layer.iconTextFitPadding, defaultExpression, - @"iconTextFitPadding should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.iconTextFitPadding = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.iconTextFitPadding = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // icon-keep-upright - { - XCTAssertTrue(rawLayer->getIconKeepUpright().isUndefined(), - @"icon-keep-upright should be unset initially."); - NSExpression *defaultExpression = layer.keepsIconUpright; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"true"]; - layer.keepsIconUpright = constantExpression; - mbgl::style::PropertyValue propertyValue = { true }; - XCTAssertEqual(rawLayer->getIconKeepUpright(), propertyValue, - @"Setting keepsIconUpright to a constant value expression should update icon-keep-upright."); - XCTAssertEqualObjects(layer.keepsIconUpright, constantExpression, - @"keepsIconUpright should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"true"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.keepsIconUpright = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(true), 18.0, literal(true)) - ); - } - - XCTAssertEqual(rawLayer->getIconKeepUpright(), propertyValue, - @"Setting keepsIconUpright to a camera expression should update icon-keep-upright."); - XCTAssertEqualObjects(layer.keepsIconUpright, functionExpression, - @"keepsIconUpright should round-trip camera expressions."); - - - layer.keepsIconUpright = nil; - XCTAssertTrue(rawLayer->getIconKeepUpright().isUndefined(), - @"Unsetting keepsIconUpright should return icon-keep-upright to the default value."); - XCTAssertEqualObjects(layer.keepsIconUpright, defaultExpression, - @"keepsIconUpright should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.keepsIconUpright = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.keepsIconUpright = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-keep-upright - { - XCTAssertTrue(rawLayer->getTextKeepUpright().isUndefined(), - @"text-keep-upright should be unset initially."); - NSExpression *defaultExpression = layer.keepsTextUpright; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"false"]; - layer.keepsTextUpright = constantExpression; - mbgl::style::PropertyValue propertyValue = { false }; - XCTAssertEqual(rawLayer->getTextKeepUpright(), propertyValue, - @"Setting keepsTextUpright to a constant value expression should update text-keep-upright."); - XCTAssertEqualObjects(layer.keepsTextUpright, constantExpression, - @"keepsTextUpright should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"false"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.keepsTextUpright = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(false), 18.0, literal(false)) - ); - } - - XCTAssertEqual(rawLayer->getTextKeepUpright(), propertyValue, - @"Setting keepsTextUpright to a camera expression should update text-keep-upright."); - XCTAssertEqualObjects(layer.keepsTextUpright, functionExpression, - @"keepsTextUpright should round-trip camera expressions."); - - - layer.keepsTextUpright = nil; - XCTAssertTrue(rawLayer->getTextKeepUpright().isUndefined(), - @"Unsetting keepsTextUpright should return text-keep-upright to the default value."); - XCTAssertEqualObjects(layer.keepsTextUpright, defaultExpression, - @"keepsTextUpright should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.keepsTextUpright = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.keepsTextUpright = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-max-angle - { - XCTAssertTrue(rawLayer->getTextMaxAngle().isUndefined(), - @"text-max-angle should be unset initially."); - NSExpression *defaultExpression = layer.maximumTextAngle; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.maximumTextAngle = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getTextMaxAngle(), propertyValue, - @"Setting maximumTextAngle to a constant value expression should update text-max-angle."); - XCTAssertEqualObjects(layer.maximumTextAngle, constantExpression, - @"maximumTextAngle should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.maximumTextAngle = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextMaxAngle(), propertyValue, - @"Setting maximumTextAngle to a camera expression should update text-max-angle."); - XCTAssertEqualObjects(layer.maximumTextAngle, functionExpression, - @"maximumTextAngle should round-trip camera expressions."); - - - layer.maximumTextAngle = nil; - XCTAssertTrue(rawLayer->getTextMaxAngle().isUndefined(), - @"Unsetting maximumTextAngle should return text-max-angle to the default value."); - XCTAssertEqualObjects(layer.maximumTextAngle, defaultExpression, - @"maximumTextAngle should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.maximumTextAngle = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.maximumTextAngle = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-max-width - { - XCTAssertTrue(rawLayer->getTextMaxWidth().isUndefined(), - @"text-max-width should be unset initially."); - NSExpression *defaultExpression = layer.maximumTextWidth; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.maximumTextWidth = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getTextMaxWidth(), propertyValue, - @"Setting maximumTextWidth to a constant value expression should update text-max-width."); - XCTAssertEqualObjects(layer.maximumTextWidth, constantExpression, - @"maximumTextWidth should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.maximumTextWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextMaxWidth(), propertyValue, - @"Setting maximumTextWidth to a camera expression should update text-max-width."); - XCTAssertEqualObjects(layer.maximumTextWidth, functionExpression, - @"maximumTextWidth should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.maximumTextWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextMaxWidth(), propertyValue, - @"Setting maximumTextWidth to a data expression should update text-max-width."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.maximumTextWidth, pedanticFunctionExpression, - @"maximumTextWidth should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.maximumTextWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getTextMaxWidth(), propertyValue, - @"Setting maximumTextWidth to a camera-data expression should update text-max-width."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.maximumTextWidth, pedanticFunctionExpression, - @"maximumTextWidth should round-trip camera-data expressions."); - - layer.maximumTextWidth = nil; - XCTAssertTrue(rawLayer->getTextMaxWidth().isUndefined(), - @"Unsetting maximumTextWidth should return text-max-width to the default value."); - XCTAssertEqualObjects(layer.maximumTextWidth, defaultExpression, - @"maximumTextWidth should return the default value after being unset."); - } - - // symbol-avoid-edges - { - XCTAssertTrue(rawLayer->getSymbolAvoidEdges().isUndefined(), - @"symbol-avoid-edges should be unset initially."); - NSExpression *defaultExpression = layer.symbolAvoidsEdges; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"true"]; - layer.symbolAvoidsEdges = constantExpression; - mbgl::style::PropertyValue propertyValue = { true }; - XCTAssertEqual(rawLayer->getSymbolAvoidEdges(), propertyValue, - @"Setting symbolAvoidsEdges to a constant value expression should update symbol-avoid-edges."); - XCTAssertEqualObjects(layer.symbolAvoidsEdges, constantExpression, - @"symbolAvoidsEdges should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"true"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.symbolAvoidsEdges = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(true), 18.0, literal(true)) - ); - } - - XCTAssertEqual(rawLayer->getSymbolAvoidEdges(), propertyValue, - @"Setting symbolAvoidsEdges to a camera expression should update symbol-avoid-edges."); - XCTAssertEqualObjects(layer.symbolAvoidsEdges, functionExpression, - @"symbolAvoidsEdges should round-trip camera expressions."); - - - layer.symbolAvoidsEdges = nil; - XCTAssertTrue(rawLayer->getSymbolAvoidEdges().isUndefined(), - @"Unsetting symbolAvoidsEdges should return symbol-avoid-edges to the default value."); - XCTAssertEqualObjects(layer.symbolAvoidsEdges, defaultExpression, - @"symbolAvoidsEdges should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.symbolAvoidsEdges = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.symbolAvoidsEdges = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // symbol-placement - { - XCTAssertTrue(rawLayer->getSymbolPlacement().isUndefined(), - @"symbol-placement should be unset initially."); - NSExpression *defaultExpression = layer.symbolPlacement; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'line-center'"]; - layer.symbolPlacement = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::SymbolPlacementType::LineCenter }; - XCTAssertEqual(rawLayer->getSymbolPlacement(), propertyValue, - @"Setting symbolPlacement to a constant value expression should update symbol-placement."); - XCTAssertEqualObjects(layer.symbolPlacement, constantExpression, - @"symbolPlacement should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'line-center'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.symbolPlacement = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("line-center"), 18.0, literal("line-center")) - ); - } - - XCTAssertEqual(rawLayer->getSymbolPlacement(), propertyValue, - @"Setting symbolPlacement to a camera expression should update symbol-placement."); - XCTAssertEqualObjects(layer.symbolPlacement, functionExpression, - @"symbolPlacement should round-trip camera expressions."); - - - layer.symbolPlacement = nil; - XCTAssertTrue(rawLayer->getSymbolPlacement().isUndefined(), - @"Unsetting symbolPlacement should return symbol-placement to the default value."); - XCTAssertEqualObjects(layer.symbolPlacement, defaultExpression, - @"symbolPlacement should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.symbolPlacement = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.symbolPlacement = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // symbol-sort-key - { - XCTAssertTrue(rawLayer->getSymbolSortKey().isUndefined(), - @"symbol-sort-key should be unset initially."); - NSExpression *defaultExpression = layer.symbolSortKey; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.symbolSortKey = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getSymbolSortKey(), propertyValue, - @"Setting symbolSortKey to a constant value expression should update symbol-sort-key."); - XCTAssertEqualObjects(layer.symbolSortKey, constantExpression, - @"symbolSortKey should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.symbolSortKey = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getSymbolSortKey(), propertyValue, - @"Setting symbolSortKey to a camera expression should update symbol-sort-key."); - XCTAssertEqualObjects(layer.symbolSortKey, functionExpression, - @"symbolSortKey should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.symbolSortKey = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getSymbolSortKey(), propertyValue, - @"Setting symbolSortKey to a data expression should update symbol-sort-key."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.symbolSortKey, pedanticFunctionExpression, - @"symbolSortKey should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.symbolSortKey = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getSymbolSortKey(), propertyValue, - @"Setting symbolSortKey to a camera-data expression should update symbol-sort-key."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.symbolSortKey, pedanticFunctionExpression, - @"symbolSortKey should round-trip camera-data expressions."); - - layer.symbolSortKey = nil; - XCTAssertTrue(rawLayer->getSymbolSortKey().isUndefined(), - @"Unsetting symbolSortKey should return symbol-sort-key to the default value."); - XCTAssertEqualObjects(layer.symbolSortKey, defaultExpression, - @"symbolSortKey should return the default value after being unset."); - } - - // symbol-spacing - { - XCTAssertTrue(rawLayer->getSymbolSpacing().isUndefined(), - @"symbol-spacing should be unset initially."); - NSExpression *defaultExpression = layer.symbolSpacing; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.symbolSpacing = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getSymbolSpacing(), propertyValue, - @"Setting symbolSpacing to a constant value expression should update symbol-spacing."); - XCTAssertEqualObjects(layer.symbolSpacing, constantExpression, - @"symbolSpacing should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.symbolSpacing = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getSymbolSpacing(), propertyValue, - @"Setting symbolSpacing to a camera expression should update symbol-spacing."); - XCTAssertEqualObjects(layer.symbolSpacing, functionExpression, - @"symbolSpacing should round-trip camera expressions."); - - - layer.symbolSpacing = nil; - XCTAssertTrue(rawLayer->getSymbolSpacing().isUndefined(), - @"Unsetting symbolSpacing should return symbol-spacing to the default value."); - XCTAssertEqualObjects(layer.symbolSpacing, defaultExpression, - @"symbolSpacing should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.symbolSpacing = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.symbolSpacing = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // symbol-z-order - { - XCTAssertTrue(rawLayer->getSymbolZOrder().isUndefined(), - @"symbol-z-order should be unset initially."); - NSExpression *defaultExpression = layer.symbolZOrder; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'source'"]; - layer.symbolZOrder = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::SymbolZOrderType::Source }; - XCTAssertEqual(rawLayer->getSymbolZOrder(), propertyValue, - @"Setting symbolZOrder to a constant value expression should update symbol-z-order."); - XCTAssertEqualObjects(layer.symbolZOrder, constantExpression, - @"symbolZOrder should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'source'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.symbolZOrder = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("source"), 18.0, literal("source")) - ); - } - - XCTAssertEqual(rawLayer->getSymbolZOrder(), propertyValue, - @"Setting symbolZOrder to a camera expression should update symbol-z-order."); - XCTAssertEqualObjects(layer.symbolZOrder, functionExpression, - @"symbolZOrder should round-trip camera expressions."); - - - layer.symbolZOrder = nil; - XCTAssertTrue(rawLayer->getSymbolZOrder().isUndefined(), - @"Unsetting symbolZOrder should return symbol-z-order to the default value."); - XCTAssertEqualObjects(layer.symbolZOrder, defaultExpression, - @"symbolZOrder should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.symbolZOrder = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.symbolZOrder = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-field - { - XCTAssertTrue(rawLayer->getTextField().isUndefined(), - @"text-field should be unset initially."); - NSExpression *defaultExpression = layer.text; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'Text Field'"]; - layer.text = constantExpression; - mbgl::style::PropertyValue propertyValue = { "Text Field" }; - XCTAssertEqual(rawLayer->getTextField(), propertyValue, - @"Setting text to a constant value expression should update text-field."); - XCTAssertEqualObjects(layer.text, constantExpression, - @"text should round-trip constant value expressions."); - - MGLAttributedExpression *attributedConstantExpression = [[MGLAttributedExpression alloc] initWithExpression:[NSExpression expressionWithFormat:@"'Text Field'"] - attributes:@{}]; - constantExpression = [NSExpression mgl_expressionForAttributedExpressions:@[[NSExpression expressionForConstantValue:attributedConstantExpression]]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.text = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), format("Text Field"), 18.0, format("Text Field")) - ); - } - - XCTAssertEqual(rawLayer->getTextField(), propertyValue, - @"Setting text to a camera expression should update text-field."); - XCTAssertEqualObjects(layer.text, functionExpression, - @"text should round-trip camera expressions."); - - - layer.text = nil; - XCTAssertTrue(rawLayer->getTextField().isUndefined(), - @"Unsetting text should return text-field to the default value."); - XCTAssertEqualObjects(layer.text, defaultExpression, - @"text should return the default value after being unset."); - - // Tokens test - layer.text = [NSExpression expressionForConstantValue:@"{token}"]; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - format(toString(get(literal("token")))) - ); - } - - XCTAssertEqual(rawLayer->getTextField(), propertyValue, - @"Setting text to a constant string with tokens should convert to an expression."); - - MGLAttributedExpression *tokenAttibutedExpression = [[MGLAttributedExpression alloc] initWithExpression:[NSExpression expressionWithFormat:@"CAST(token, 'NSString')"] - attributes:@{}]; - NSExpression* tokenExpression = [NSExpression mgl_expressionForAttributedExpressions:@[[NSExpression expressionForConstantValue:tokenAttibutedExpression]]]; - XCTAssertEqualObjects(layer.text, tokenExpression, - @"Setting text to a constant string with tokens should convert to an expression."); - } - - // text-allow-overlap - { - XCTAssertTrue(rawLayer->getTextAllowOverlap().isUndefined(), - @"text-allow-overlap should be unset initially."); - NSExpression *defaultExpression = layer.textAllowsOverlap; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"true"]; - layer.textAllowsOverlap = constantExpression; - mbgl::style::PropertyValue propertyValue = { true }; - XCTAssertEqual(rawLayer->getTextAllowOverlap(), propertyValue, - @"Setting textAllowsOverlap to a constant value expression should update text-allow-overlap."); - XCTAssertEqualObjects(layer.textAllowsOverlap, constantExpression, - @"textAllowsOverlap should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"true"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textAllowsOverlap = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(true), 18.0, literal(true)) - ); - } - - XCTAssertEqual(rawLayer->getTextAllowOverlap(), propertyValue, - @"Setting textAllowsOverlap to a camera expression should update text-allow-overlap."); - XCTAssertEqualObjects(layer.textAllowsOverlap, functionExpression, - @"textAllowsOverlap should round-trip camera expressions."); - - - layer.textAllowsOverlap = nil; - XCTAssertTrue(rawLayer->getTextAllowOverlap().isUndefined(), - @"Unsetting textAllowsOverlap should return text-allow-overlap to the default value."); - XCTAssertEqualObjects(layer.textAllowsOverlap, defaultExpression, - @"textAllowsOverlap should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.textAllowsOverlap = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.textAllowsOverlap = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-anchor - { - XCTAssertTrue(rawLayer->getTextAnchor().isUndefined(), - @"text-anchor should be unset initially."); - NSExpression *defaultExpression = layer.textAnchor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'bottom-right'"]; - layer.textAnchor = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::SymbolAnchorType::BottomRight }; - XCTAssertEqual(rawLayer->getTextAnchor(), propertyValue, - @"Setting textAnchor to a constant value expression should update text-anchor."); - XCTAssertEqualObjects(layer.textAnchor, constantExpression, - @"textAnchor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'bottom-right'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textAnchor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("bottom-right"), 18.0, literal("bottom-right")) - ); - } - - XCTAssertEqual(rawLayer->getTextAnchor(), propertyValue, - @"Setting textAnchor to a camera expression should update text-anchor."); - XCTAssertEqualObjects(layer.textAnchor, functionExpression, - @"textAnchor should round-trip camera expressions."); - - - layer.textAnchor = nil; - XCTAssertTrue(rawLayer->getTextAnchor().isUndefined(), - @"Unsetting textAnchor should return text-anchor to the default value."); - XCTAssertEqualObjects(layer.textAnchor, defaultExpression, - @"textAnchor should return the default value after being unset."); - } - - // text-font - { - XCTAssertTrue(rawLayer->getTextFont().isUndefined(), - @"text-font should be unset initially."); - NSExpression *defaultExpression = layer.textFontNames; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"{'Text Font', 'Tnof Txet'}"]; - layer.textFontNames = constantExpression; - mbgl::style::PropertyValue> propertyValue = { { "Text Font", "Tnof Txet" } }; - XCTAssertEqual(rawLayer->getTextFont(), propertyValue, - @"Setting textFontNames to a constant value expression should update text-font."); - XCTAssertEqualObjects(layer.textFontNames, constantExpression, - @"textFontNames should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{'Text Font', 'Tnof Txet'}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textFontNames = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({ "Text Font", "Tnof Txet" }), 18.0, literal({ "Text Font", "Tnof Txet" })) - ); - } - - XCTAssertEqual(rawLayer->getTextFont(), propertyValue, - @"Setting textFontNames to a camera expression should update text-font."); - XCTAssertEqualObjects(layer.textFontNames, functionExpression, - @"textFontNames should round-trip camera expressions."); - - - layer.textFontNames = nil; - XCTAssertTrue(rawLayer->getTextFont().isUndefined(), - @"Unsetting textFontNames should return text-font to the default value."); - XCTAssertEqualObjects(layer.textFontNames, defaultExpression, - @"textFontNames should return the default value after being unset."); - } - - // text-size - { - XCTAssertTrue(rawLayer->getTextSize().isUndefined(), - @"text-size should be unset initially."); - NSExpression *defaultExpression = layer.textFontSize; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.textFontSize = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getTextSize(), propertyValue, - @"Setting textFontSize to a constant value expression should update text-size."); - XCTAssertEqualObjects(layer.textFontSize, constantExpression, - @"textFontSize should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textFontSize = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextSize(), propertyValue, - @"Setting textFontSize to a camera expression should update text-size."); - XCTAssertEqualObjects(layer.textFontSize, functionExpression, - @"textFontSize should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.textFontSize = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextSize(), propertyValue, - @"Setting textFontSize to a data expression should update text-size."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.textFontSize, pedanticFunctionExpression, - @"textFontSize should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.textFontSize = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getTextSize(), propertyValue, - @"Setting textFontSize to a camera-data expression should update text-size."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.textFontSize, pedanticFunctionExpression, - @"textFontSize should round-trip camera-data expressions."); - - layer.textFontSize = nil; - XCTAssertTrue(rawLayer->getTextSize().isUndefined(), - @"Unsetting textFontSize should return text-size to the default value."); - XCTAssertEqualObjects(layer.textFontSize, defaultExpression, - @"textFontSize should return the default value after being unset."); - } - - // text-ignore-placement - { - XCTAssertTrue(rawLayer->getTextIgnorePlacement().isUndefined(), - @"text-ignore-placement should be unset initially."); - NSExpression *defaultExpression = layer.textIgnoresPlacement; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"true"]; - layer.textIgnoresPlacement = constantExpression; - mbgl::style::PropertyValue propertyValue = { true }; - XCTAssertEqual(rawLayer->getTextIgnorePlacement(), propertyValue, - @"Setting textIgnoresPlacement to a constant value expression should update text-ignore-placement."); - XCTAssertEqualObjects(layer.textIgnoresPlacement, constantExpression, - @"textIgnoresPlacement should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"true"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textIgnoresPlacement = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(true), 18.0, literal(true)) - ); - } - - XCTAssertEqual(rawLayer->getTextIgnorePlacement(), propertyValue, - @"Setting textIgnoresPlacement to a camera expression should update text-ignore-placement."); - XCTAssertEqualObjects(layer.textIgnoresPlacement, functionExpression, - @"textIgnoresPlacement should round-trip camera expressions."); - - - layer.textIgnoresPlacement = nil; - XCTAssertTrue(rawLayer->getTextIgnorePlacement().isUndefined(), - @"Unsetting textIgnoresPlacement should return text-ignore-placement to the default value."); - XCTAssertEqualObjects(layer.textIgnoresPlacement, defaultExpression, - @"textIgnoresPlacement should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.textIgnoresPlacement = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.textIgnoresPlacement = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-justify - { - XCTAssertTrue(rawLayer->getTextJustify().isUndefined(), - @"text-justify should be unset initially."); - NSExpression *defaultExpression = layer.textJustification; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'right'"]; - layer.textJustification = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::TextJustifyType::Right }; - XCTAssertEqual(rawLayer->getTextJustify(), propertyValue, - @"Setting textJustification to a constant value expression should update text-justify."); - XCTAssertEqualObjects(layer.textJustification, constantExpression, - @"textJustification should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'right'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textJustification = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("right"), 18.0, literal("right")) - ); - } - - XCTAssertEqual(rawLayer->getTextJustify(), propertyValue, - @"Setting textJustification to a camera expression should update text-justify."); - XCTAssertEqualObjects(layer.textJustification, functionExpression, - @"textJustification should round-trip camera expressions."); - - - layer.textJustification = nil; - XCTAssertTrue(rawLayer->getTextJustify().isUndefined(), - @"Unsetting textJustification should return text-justify to the default value."); - XCTAssertEqualObjects(layer.textJustification, defaultExpression, - @"textJustification should return the default value after being unset."); - } - - // text-letter-spacing - { - XCTAssertTrue(rawLayer->getTextLetterSpacing().isUndefined(), - @"text-letter-spacing should be unset initially."); - NSExpression *defaultExpression = layer.textLetterSpacing; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.textLetterSpacing = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getTextLetterSpacing(), propertyValue, - @"Setting textLetterSpacing to a constant value expression should update text-letter-spacing."); - XCTAssertEqualObjects(layer.textLetterSpacing, constantExpression, - @"textLetterSpacing should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textLetterSpacing = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextLetterSpacing(), propertyValue, - @"Setting textLetterSpacing to a camera expression should update text-letter-spacing."); - XCTAssertEqualObjects(layer.textLetterSpacing, functionExpression, - @"textLetterSpacing should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.textLetterSpacing = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextLetterSpacing(), propertyValue, - @"Setting textLetterSpacing to a data expression should update text-letter-spacing."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.textLetterSpacing, pedanticFunctionExpression, - @"textLetterSpacing should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.textLetterSpacing = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getTextLetterSpacing(), propertyValue, - @"Setting textLetterSpacing to a camera-data expression should update text-letter-spacing."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.textLetterSpacing, pedanticFunctionExpression, - @"textLetterSpacing should round-trip camera-data expressions."); - - layer.textLetterSpacing = nil; - XCTAssertTrue(rawLayer->getTextLetterSpacing().isUndefined(), - @"Unsetting textLetterSpacing should return text-letter-spacing to the default value."); - XCTAssertEqualObjects(layer.textLetterSpacing, defaultExpression, - @"textLetterSpacing should return the default value after being unset."); - } - - // text-line-height - { - XCTAssertTrue(rawLayer->getTextLineHeight().isUndefined(), - @"text-line-height should be unset initially."); - NSExpression *defaultExpression = layer.textLineHeight; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.textLineHeight = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getTextLineHeight(), propertyValue, - @"Setting textLineHeight to a constant value expression should update text-line-height."); - XCTAssertEqualObjects(layer.textLineHeight, constantExpression, - @"textLineHeight should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textLineHeight = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextLineHeight(), propertyValue, - @"Setting textLineHeight to a camera expression should update text-line-height."); - XCTAssertEqualObjects(layer.textLineHeight, functionExpression, - @"textLineHeight should round-trip camera expressions."); - - - layer.textLineHeight = nil; - XCTAssertTrue(rawLayer->getTextLineHeight().isUndefined(), - @"Unsetting textLineHeight should return text-line-height to the default value."); - XCTAssertEqualObjects(layer.textLineHeight, defaultExpression, - @"textLineHeight should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.textLineHeight = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.textLineHeight = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-offset - { - XCTAssertTrue(rawLayer->getTextOffset().isUndefined(), - @"text-offset should be unset initially."); - NSExpression *defaultExpression = layer.textOffset; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", -#if TARGET_OS_IPHONE - [NSValue valueWithCGVector:CGVectorMake(1, 1)] -#else - [NSValue valueWithMGLVector:CGVectorMake(1, -1)] -#endif - ]; - layer.textOffset = constantExpression; - mbgl::style::PropertyValue> propertyValue = { { 1, 1 } }; - XCTAssertEqual(rawLayer->getTextOffset(), propertyValue, - @"Setting textOffset to a constant value expression should update text-offset."); - XCTAssertEqualObjects(layer.textOffset, constantExpression, - @"textOffset should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textOffset = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({ 1, 1 }), 18.0, literal({ 1, 1 })) - ); - } - - XCTAssertEqual(rawLayer->getTextOffset(), propertyValue, - @"Setting textOffset to a camera expression should update text-offset."); - XCTAssertEqualObjects(layer.textOffset, functionExpression, - @"textOffset should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.textOffset = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - interpolate(linear(), number(get("keyName")), 18.0, literal({ 1, 1 })) - ); - } - - XCTAssertEqual(rawLayer->getTextOffset(), propertyValue, - @"Setting textOffset to a data expression should update text-offset."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.textOffset, pedanticFunctionExpression, - @"textOffset should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.textOffset = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal({ 1, 1 }))) - ); - } - - XCTAssertEqual(rawLayer->getTextOffset(), propertyValue, - @"Setting textOffset to a camera-data expression should update text-offset."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.textOffset, pedanticFunctionExpression, - @"textOffset should round-trip camera-data expressions."); - - layer.textOffset = nil; - XCTAssertTrue(rawLayer->getTextOffset().isUndefined(), - @"Unsetting textOffset should return text-offset to the default value."); - XCTAssertEqualObjects(layer.textOffset, defaultExpression, - @"textOffset should return the default value after being unset."); - } - - // text-optional - { - XCTAssertTrue(rawLayer->getTextOptional().isUndefined(), - @"text-optional should be unset initially."); - NSExpression *defaultExpression = layer.textOptional; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"true"]; - layer.textOptional = constantExpression; - mbgl::style::PropertyValue propertyValue = { true }; - XCTAssertEqual(rawLayer->getTextOptional(), propertyValue, - @"Setting textOptional to a constant value expression should update text-optional."); - XCTAssertEqualObjects(layer.textOptional, constantExpression, - @"textOptional should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"true"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textOptional = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(true), 18.0, literal(true)) - ); - } - - XCTAssertEqual(rawLayer->getTextOptional(), propertyValue, - @"Setting textOptional to a camera expression should update text-optional."); - XCTAssertEqualObjects(layer.textOptional, functionExpression, - @"textOptional should round-trip camera expressions."); - - - layer.textOptional = nil; - XCTAssertTrue(rawLayer->getTextOptional().isUndefined(), - @"Unsetting textOptional should return text-optional to the default value."); - XCTAssertEqualObjects(layer.textOptional, defaultExpression, - @"textOptional should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.textOptional = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.textOptional = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-padding - { - XCTAssertTrue(rawLayer->getTextPadding().isUndefined(), - @"text-padding should be unset initially."); - NSExpression *defaultExpression = layer.textPadding; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.textPadding = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getTextPadding(), propertyValue, - @"Setting textPadding to a constant value expression should update text-padding."); - XCTAssertEqualObjects(layer.textPadding, constantExpression, - @"textPadding should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textPadding = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextPadding(), propertyValue, - @"Setting textPadding to a camera expression should update text-padding."); - XCTAssertEqualObjects(layer.textPadding, functionExpression, - @"textPadding should round-trip camera expressions."); - - - layer.textPadding = nil; - XCTAssertTrue(rawLayer->getTextPadding().isUndefined(), - @"Unsetting textPadding should return text-padding to the default value."); - XCTAssertEqualObjects(layer.textPadding, defaultExpression, - @"textPadding should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.textPadding = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.textPadding = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-pitch-alignment - { - XCTAssertTrue(rawLayer->getTextPitchAlignment().isUndefined(), - @"text-pitch-alignment should be unset initially."); - NSExpression *defaultExpression = layer.textPitchAlignment; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'auto'"]; - layer.textPitchAlignment = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::AlignmentType::Auto }; - XCTAssertEqual(rawLayer->getTextPitchAlignment(), propertyValue, - @"Setting textPitchAlignment to a constant value expression should update text-pitch-alignment."); - XCTAssertEqualObjects(layer.textPitchAlignment, constantExpression, - @"textPitchAlignment should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'auto'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textPitchAlignment = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("auto"), 18.0, literal("auto")) - ); - } - - XCTAssertEqual(rawLayer->getTextPitchAlignment(), propertyValue, - @"Setting textPitchAlignment to a camera expression should update text-pitch-alignment."); - XCTAssertEqualObjects(layer.textPitchAlignment, functionExpression, - @"textPitchAlignment should round-trip camera expressions."); - - - layer.textPitchAlignment = nil; - XCTAssertTrue(rawLayer->getTextPitchAlignment().isUndefined(), - @"Unsetting textPitchAlignment should return text-pitch-alignment to the default value."); - XCTAssertEqualObjects(layer.textPitchAlignment, defaultExpression, - @"textPitchAlignment should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.textPitchAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.textPitchAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-radial-offset - { - XCTAssertTrue(rawLayer->getTextRadialOffset().isUndefined(), - @"text-radial-offset should be unset initially."); - NSExpression *defaultExpression = layer.textRadialOffset; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.textRadialOffset = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getTextRadialOffset(), propertyValue, - @"Setting textRadialOffset to a constant value expression should update text-radial-offset."); - XCTAssertEqualObjects(layer.textRadialOffset, constantExpression, - @"textRadialOffset should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textRadialOffset = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextRadialOffset(), propertyValue, - @"Setting textRadialOffset to a camera expression should update text-radial-offset."); - XCTAssertEqualObjects(layer.textRadialOffset, functionExpression, - @"textRadialOffset should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.textRadialOffset = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextRadialOffset(), propertyValue, - @"Setting textRadialOffset to a data expression should update text-radial-offset."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.textRadialOffset, pedanticFunctionExpression, - @"textRadialOffset should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.textRadialOffset = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getTextRadialOffset(), propertyValue, - @"Setting textRadialOffset to a camera-data expression should update text-radial-offset."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.textRadialOffset, pedanticFunctionExpression, - @"textRadialOffset should round-trip camera-data expressions."); - - layer.textRadialOffset = nil; - XCTAssertTrue(rawLayer->getTextRadialOffset().isUndefined(), - @"Unsetting textRadialOffset should return text-radial-offset to the default value."); - XCTAssertEqualObjects(layer.textRadialOffset, defaultExpression, - @"textRadialOffset should return the default value after being unset."); - } - - // text-rotate - { - XCTAssertTrue(rawLayer->getTextRotate().isUndefined(), - @"text-rotate should be unset initially."); - NSExpression *defaultExpression = layer.textRotation; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.textRotation = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getTextRotate(), propertyValue, - @"Setting textRotation to a constant value expression should update text-rotate."); - XCTAssertEqualObjects(layer.textRotation, constantExpression, - @"textRotation should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textRotation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextRotate(), propertyValue, - @"Setting textRotation to a camera expression should update text-rotate."); - XCTAssertEqualObjects(layer.textRotation, functionExpression, - @"textRotation should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.textRotation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextRotate(), propertyValue, - @"Setting textRotation to a data expression should update text-rotate."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.textRotation, pedanticFunctionExpression, - @"textRotation should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.textRotation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getTextRotate(), propertyValue, - @"Setting textRotation to a camera-data expression should update text-rotate."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.textRotation, pedanticFunctionExpression, - @"textRotation should round-trip camera-data expressions."); - - layer.textRotation = nil; - XCTAssertTrue(rawLayer->getTextRotate().isUndefined(), - @"Unsetting textRotation should return text-rotate to the default value."); - XCTAssertEqualObjects(layer.textRotation, defaultExpression, - @"textRotation should return the default value after being unset."); - } - - // text-rotation-alignment - { - XCTAssertTrue(rawLayer->getTextRotationAlignment().isUndefined(), - @"text-rotation-alignment should be unset initially."); - NSExpression *defaultExpression = layer.textRotationAlignment; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'auto'"]; - layer.textRotationAlignment = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::AlignmentType::Auto }; - XCTAssertEqual(rawLayer->getTextRotationAlignment(), propertyValue, - @"Setting textRotationAlignment to a constant value expression should update text-rotation-alignment."); - XCTAssertEqualObjects(layer.textRotationAlignment, constantExpression, - @"textRotationAlignment should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'auto'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textRotationAlignment = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("auto"), 18.0, literal("auto")) - ); - } - - XCTAssertEqual(rawLayer->getTextRotationAlignment(), propertyValue, - @"Setting textRotationAlignment to a camera expression should update text-rotation-alignment."); - XCTAssertEqualObjects(layer.textRotationAlignment, functionExpression, - @"textRotationAlignment should round-trip camera expressions."); - - - layer.textRotationAlignment = nil; - XCTAssertTrue(rawLayer->getTextRotationAlignment().isUndefined(), - @"Unsetting textRotationAlignment should return text-rotation-alignment to the default value."); - XCTAssertEqualObjects(layer.textRotationAlignment, defaultExpression, - @"textRotationAlignment should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.textRotationAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.textRotationAlignment = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-transform - { - XCTAssertTrue(rawLayer->getTextTransform().isUndefined(), - @"text-transform should be unset initially."); - NSExpression *defaultExpression = layer.textTransform; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'lowercase'"]; - layer.textTransform = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::TextTransformType::Lowercase }; - XCTAssertEqual(rawLayer->getTextTransform(), propertyValue, - @"Setting textTransform to a constant value expression should update text-transform."); - XCTAssertEqualObjects(layer.textTransform, constantExpression, - @"textTransform should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'lowercase'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textTransform = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("lowercase"), 18.0, literal("lowercase")) - ); - } - - XCTAssertEqual(rawLayer->getTextTransform(), propertyValue, - @"Setting textTransform to a camera expression should update text-transform."); - XCTAssertEqualObjects(layer.textTransform, functionExpression, - @"textTransform should round-trip camera expressions."); - - - layer.textTransform = nil; - XCTAssertTrue(rawLayer->getTextTransform().isUndefined(), - @"Unsetting textTransform should return text-transform to the default value."); - XCTAssertEqualObjects(layer.textTransform, defaultExpression, - @"textTransform should return the default value after being unset."); - } - - // text-variable-anchor - { - XCTAssertTrue(rawLayer->getTextVariableAnchor().isUndefined(), - @"text-variable-anchor should be unset initially."); - NSExpression *defaultExpression = layer.textVariableAnchor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"{'top','bottom'}"]; - layer.textVariableAnchor = constantExpression; - mbgl::style::PropertyValue> propertyValue = { { mbgl::style::SymbolAnchorType::Top, mbgl::style::SymbolAnchorType::Bottom } }; - XCTAssertEqual(rawLayer->getTextVariableAnchor(), propertyValue, - @"Setting textVariableAnchor to a constant value expression should update text-variable-anchor."); - XCTAssertEqualObjects(layer.textVariableAnchor, constantExpression, - @"textVariableAnchor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{'top','bottom'}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textVariableAnchor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({"top", "bottom"}), 18.0, literal({"top", "bottom"})) - ); - } - - XCTAssertEqual(rawLayer->getTextVariableAnchor(), propertyValue, - @"Setting textVariableAnchor to a camera expression should update text-variable-anchor."); - XCTAssertEqualObjects(layer.textVariableAnchor, functionExpression, - @"textVariableAnchor should round-trip camera expressions."); - - - layer.textVariableAnchor = nil; - XCTAssertTrue(rawLayer->getTextVariableAnchor().isUndefined(), - @"Unsetting textVariableAnchor should return text-variable-anchor to the default value."); - XCTAssertEqualObjects(layer.textVariableAnchor, defaultExpression, - @"textVariableAnchor should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.textVariableAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.textVariableAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-writing-mode - { - XCTAssertTrue(rawLayer->getTextWritingMode().isUndefined(), - @"text-writing-mode should be unset initially."); - NSExpression *defaultExpression = layer.textWritingModes; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"{'horizontal','vertical'}"]; - layer.textWritingModes = constantExpression; - mbgl::style::PropertyValue> propertyValue = { { mbgl::style::TextWritingModeType::Horizontal, mbgl::style::TextWritingModeType::Vertical } }; - XCTAssertEqual(rawLayer->getTextWritingMode(), propertyValue, - @"Setting textWritingModes to a constant value expression should update text-writing-mode."); - XCTAssertEqualObjects(layer.textWritingModes, constantExpression, - @"textWritingModes should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{'horizontal','vertical'}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textWritingModes = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({"horizontal", "vertical"}), 18.0, literal({"horizontal", "vertical"})) - ); - } - - XCTAssertEqual(rawLayer->getTextWritingMode(), propertyValue, - @"Setting textWritingModes to a camera expression should update text-writing-mode."); - XCTAssertEqualObjects(layer.textWritingModes, functionExpression, - @"textWritingModes should round-trip camera expressions."); - - - layer.textWritingModes = nil; - XCTAssertTrue(rawLayer->getTextWritingMode().isUndefined(), - @"Unsetting textWritingModes should return text-writing-mode to the default value."); - XCTAssertEqualObjects(layer.textWritingModes, defaultExpression, - @"textWritingModes should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.textWritingModes = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.textWritingModes = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // icon-color - { - XCTAssertTrue(rawLayer->getIconColor().isUndefined(), - @"icon-color should be unset initially."); - NSExpression *defaultExpression = layer.iconColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.iconColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getIconColor(), propertyValue, - @"Setting iconColor to a constant value expression should update icon-color."); - XCTAssertEqualObjects(layer.iconColor, constantExpression, - @"iconColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getIconColor(), propertyValue, - @"Setting iconColor to a camera expression should update icon-color."); - XCTAssertEqualObjects(layer.iconColor, functionExpression, - @"iconColor should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.iconColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getIconColor(), propertyValue, - @"Setting iconColor to a data expression should update icon-color."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.iconColor, pedanticFunctionExpression, - @"iconColor should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.iconColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1)))) - ); - } - - XCTAssertEqual(rawLayer->getIconColor(), propertyValue, - @"Setting iconColor to a camera-data expression should update icon-color."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.iconColor, pedanticFunctionExpression, - @"iconColor should round-trip camera-data expressions."); - - layer.iconColor = nil; - XCTAssertTrue(rawLayer->getIconColor().isUndefined(), - @"Unsetting iconColor should return icon-color to the default value."); - XCTAssertEqualObjects(layer.iconColor, defaultExpression, - @"iconColor should return the default value after being unset."); - // Transition property test - layer.iconColorTransition = transitionTest; - auto toptions = rawLayer->getIconColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition iconColorTransition = layer.iconColorTransition; - XCTAssertEqual(iconColorTransition.delay, transitionTest.delay); - XCTAssertEqual(iconColorTransition.duration, transitionTest.duration); - } - - // icon-halo-blur - { - XCTAssertTrue(rawLayer->getIconHaloBlur().isUndefined(), - @"icon-halo-blur should be unset initially."); - NSExpression *defaultExpression = layer.iconHaloBlur; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.iconHaloBlur = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getIconHaloBlur(), propertyValue, - @"Setting iconHaloBlur to a constant value expression should update icon-halo-blur."); - XCTAssertEqualObjects(layer.iconHaloBlur, constantExpression, - @"iconHaloBlur should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconHaloBlur = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getIconHaloBlur(), propertyValue, - @"Setting iconHaloBlur to a camera expression should update icon-halo-blur."); - XCTAssertEqualObjects(layer.iconHaloBlur, functionExpression, - @"iconHaloBlur should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.iconHaloBlur = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getIconHaloBlur(), propertyValue, - @"Setting iconHaloBlur to a data expression should update icon-halo-blur."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.iconHaloBlur, pedanticFunctionExpression, - @"iconHaloBlur should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.iconHaloBlur = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getIconHaloBlur(), propertyValue, - @"Setting iconHaloBlur to a camera-data expression should update icon-halo-blur."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.iconHaloBlur, pedanticFunctionExpression, - @"iconHaloBlur should round-trip camera-data expressions."); - - layer.iconHaloBlur = nil; - XCTAssertTrue(rawLayer->getIconHaloBlur().isUndefined(), - @"Unsetting iconHaloBlur should return icon-halo-blur to the default value."); - XCTAssertEqualObjects(layer.iconHaloBlur, defaultExpression, - @"iconHaloBlur should return the default value after being unset."); - // Transition property test - layer.iconHaloBlurTransition = transitionTest; - auto toptions = rawLayer->getIconHaloBlurTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition iconHaloBlurTransition = layer.iconHaloBlurTransition; - XCTAssertEqual(iconHaloBlurTransition.delay, transitionTest.delay); - XCTAssertEqual(iconHaloBlurTransition.duration, transitionTest.duration); - } - - // icon-halo-color - { - XCTAssertTrue(rawLayer->getIconHaloColor().isUndefined(), - @"icon-halo-color should be unset initially."); - NSExpression *defaultExpression = layer.iconHaloColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.iconHaloColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getIconHaloColor(), propertyValue, - @"Setting iconHaloColor to a constant value expression should update icon-halo-color."); - XCTAssertEqualObjects(layer.iconHaloColor, constantExpression, - @"iconHaloColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconHaloColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getIconHaloColor(), propertyValue, - @"Setting iconHaloColor to a camera expression should update icon-halo-color."); - XCTAssertEqualObjects(layer.iconHaloColor, functionExpression, - @"iconHaloColor should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.iconHaloColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getIconHaloColor(), propertyValue, - @"Setting iconHaloColor to a data expression should update icon-halo-color."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.iconHaloColor, pedanticFunctionExpression, - @"iconHaloColor should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.iconHaloColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1)))) - ); - } - - XCTAssertEqual(rawLayer->getIconHaloColor(), propertyValue, - @"Setting iconHaloColor to a camera-data expression should update icon-halo-color."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.iconHaloColor, pedanticFunctionExpression, - @"iconHaloColor should round-trip camera-data expressions."); - - layer.iconHaloColor = nil; - XCTAssertTrue(rawLayer->getIconHaloColor().isUndefined(), - @"Unsetting iconHaloColor should return icon-halo-color to the default value."); - XCTAssertEqualObjects(layer.iconHaloColor, defaultExpression, - @"iconHaloColor should return the default value after being unset."); - // Transition property test - layer.iconHaloColorTransition = transitionTest; - auto toptions = rawLayer->getIconHaloColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition iconHaloColorTransition = layer.iconHaloColorTransition; - XCTAssertEqual(iconHaloColorTransition.delay, transitionTest.delay); - XCTAssertEqual(iconHaloColorTransition.duration, transitionTest.duration); - } - - // icon-halo-width - { - XCTAssertTrue(rawLayer->getIconHaloWidth().isUndefined(), - @"icon-halo-width should be unset initially."); - NSExpression *defaultExpression = layer.iconHaloWidth; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.iconHaloWidth = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getIconHaloWidth(), propertyValue, - @"Setting iconHaloWidth to a constant value expression should update icon-halo-width."); - XCTAssertEqualObjects(layer.iconHaloWidth, constantExpression, - @"iconHaloWidth should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconHaloWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getIconHaloWidth(), propertyValue, - @"Setting iconHaloWidth to a camera expression should update icon-halo-width."); - XCTAssertEqualObjects(layer.iconHaloWidth, functionExpression, - @"iconHaloWidth should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.iconHaloWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getIconHaloWidth(), propertyValue, - @"Setting iconHaloWidth to a data expression should update icon-halo-width."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.iconHaloWidth, pedanticFunctionExpression, - @"iconHaloWidth should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.iconHaloWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getIconHaloWidth(), propertyValue, - @"Setting iconHaloWidth to a camera-data expression should update icon-halo-width."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.iconHaloWidth, pedanticFunctionExpression, - @"iconHaloWidth should round-trip camera-data expressions."); - - layer.iconHaloWidth = nil; - XCTAssertTrue(rawLayer->getIconHaloWidth().isUndefined(), - @"Unsetting iconHaloWidth should return icon-halo-width to the default value."); - XCTAssertEqualObjects(layer.iconHaloWidth, defaultExpression, - @"iconHaloWidth should return the default value after being unset."); - // Transition property test - layer.iconHaloWidthTransition = transitionTest; - auto toptions = rawLayer->getIconHaloWidthTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition iconHaloWidthTransition = layer.iconHaloWidthTransition; - XCTAssertEqual(iconHaloWidthTransition.delay, transitionTest.delay); - XCTAssertEqual(iconHaloWidthTransition.duration, transitionTest.duration); - } - - // icon-opacity - { - XCTAssertTrue(rawLayer->getIconOpacity().isUndefined(), - @"icon-opacity should be unset initially."); - NSExpression *defaultExpression = layer.iconOpacity; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.iconOpacity = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getIconOpacity(), propertyValue, - @"Setting iconOpacity to a constant value expression should update icon-opacity."); - XCTAssertEqualObjects(layer.iconOpacity, constantExpression, - @"iconOpacity should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getIconOpacity(), propertyValue, - @"Setting iconOpacity to a camera expression should update icon-opacity."); - XCTAssertEqualObjects(layer.iconOpacity, functionExpression, - @"iconOpacity should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.iconOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getIconOpacity(), propertyValue, - @"Setting iconOpacity to a data expression should update icon-opacity."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.iconOpacity, pedanticFunctionExpression, - @"iconOpacity should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.iconOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getIconOpacity(), propertyValue, - @"Setting iconOpacity to a camera-data expression should update icon-opacity."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.iconOpacity, pedanticFunctionExpression, - @"iconOpacity should round-trip camera-data expressions."); - - layer.iconOpacity = nil; - XCTAssertTrue(rawLayer->getIconOpacity().isUndefined(), - @"Unsetting iconOpacity should return icon-opacity to the default value."); - XCTAssertEqualObjects(layer.iconOpacity, defaultExpression, - @"iconOpacity should return the default value after being unset."); - // Transition property test - layer.iconOpacityTransition = transitionTest; - auto toptions = rawLayer->getIconOpacityTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition iconOpacityTransition = layer.iconOpacityTransition; - XCTAssertEqual(iconOpacityTransition.delay, transitionTest.delay); - XCTAssertEqual(iconOpacityTransition.duration, transitionTest.duration); - } - - // icon-translate - { - XCTAssertTrue(rawLayer->getIconTranslate().isUndefined(), - @"icon-translate should be unset initially."); - NSExpression *defaultExpression = layer.iconTranslation; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", -#if TARGET_OS_IPHONE - [NSValue valueWithCGVector:CGVectorMake(1, 1)] -#else - [NSValue valueWithMGLVector:CGVectorMake(1, -1)] -#endif - ]; - layer.iconTranslation = constantExpression; - mbgl::style::PropertyValue> propertyValue = { { 1, 1 } }; - XCTAssertEqual(rawLayer->getIconTranslate(), propertyValue, - @"Setting iconTranslation to a constant value expression should update icon-translate."); - XCTAssertEqualObjects(layer.iconTranslation, constantExpression, - @"iconTranslation should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconTranslation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({ 1, 1 }), 18.0, literal({ 1, 1 })) - ); - } - - XCTAssertEqual(rawLayer->getIconTranslate(), propertyValue, - @"Setting iconTranslation to a camera expression should update icon-translate."); - XCTAssertEqualObjects(layer.iconTranslation, functionExpression, - @"iconTranslation should round-trip camera expressions."); - - - layer.iconTranslation = nil; - XCTAssertTrue(rawLayer->getIconTranslate().isUndefined(), - @"Unsetting iconTranslation should return icon-translate to the default value."); - XCTAssertEqualObjects(layer.iconTranslation, defaultExpression, - @"iconTranslation should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.iconTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.iconTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // icon-translate-anchor - { - XCTAssertTrue(rawLayer->getIconTranslateAnchor().isUndefined(), - @"icon-translate-anchor should be unset initially."); - NSExpression *defaultExpression = layer.iconTranslationAnchor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - layer.iconTranslationAnchor = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::TranslateAnchorType::Viewport }; - XCTAssertEqual(rawLayer->getIconTranslateAnchor(), propertyValue, - @"Setting iconTranslationAnchor to a constant value expression should update icon-translate-anchor."); - XCTAssertEqualObjects(layer.iconTranslationAnchor, constantExpression, - @"iconTranslationAnchor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.iconTranslationAnchor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("viewport"), 18.0, literal("viewport")) - ); - } - - XCTAssertEqual(rawLayer->getIconTranslateAnchor(), propertyValue, - @"Setting iconTranslationAnchor to a camera expression should update icon-translate-anchor."); - XCTAssertEqualObjects(layer.iconTranslationAnchor, functionExpression, - @"iconTranslationAnchor should round-trip camera expressions."); - - - layer.iconTranslationAnchor = nil; - XCTAssertTrue(rawLayer->getIconTranslateAnchor().isUndefined(), - @"Unsetting iconTranslationAnchor should return icon-translate-anchor to the default value."); - XCTAssertEqualObjects(layer.iconTranslationAnchor, defaultExpression, - @"iconTranslationAnchor should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.iconTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.iconTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-color - { - XCTAssertTrue(rawLayer->getTextColor().isUndefined(), - @"text-color should be unset initially."); - NSExpression *defaultExpression = layer.textColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.textColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getTextColor(), propertyValue, - @"Setting textColor to a constant value expression should update text-color."); - XCTAssertEqualObjects(layer.textColor, constantExpression, - @"textColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getTextColor(), propertyValue, - @"Setting textColor to a camera expression should update text-color."); - XCTAssertEqualObjects(layer.textColor, functionExpression, - @"textColor should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.textColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getTextColor(), propertyValue, - @"Setting textColor to a data expression should update text-color."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.textColor, pedanticFunctionExpression, - @"textColor should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.textColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1)))) - ); - } - - XCTAssertEqual(rawLayer->getTextColor(), propertyValue, - @"Setting textColor to a camera-data expression should update text-color."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.textColor, pedanticFunctionExpression, - @"textColor should round-trip camera-data expressions."); - - layer.textColor = nil; - XCTAssertTrue(rawLayer->getTextColor().isUndefined(), - @"Unsetting textColor should return text-color to the default value."); - XCTAssertEqualObjects(layer.textColor, defaultExpression, - @"textColor should return the default value after being unset."); - // Transition property test - layer.textColorTransition = transitionTest; - auto toptions = rawLayer->getTextColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition textColorTransition = layer.textColorTransition; - XCTAssertEqual(textColorTransition.delay, transitionTest.delay); - XCTAssertEqual(textColorTransition.duration, transitionTest.duration); - } - - // text-halo-blur - { - XCTAssertTrue(rawLayer->getTextHaloBlur().isUndefined(), - @"text-halo-blur should be unset initially."); - NSExpression *defaultExpression = layer.textHaloBlur; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.textHaloBlur = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getTextHaloBlur(), propertyValue, - @"Setting textHaloBlur to a constant value expression should update text-halo-blur."); - XCTAssertEqualObjects(layer.textHaloBlur, constantExpression, - @"textHaloBlur should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textHaloBlur = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextHaloBlur(), propertyValue, - @"Setting textHaloBlur to a camera expression should update text-halo-blur."); - XCTAssertEqualObjects(layer.textHaloBlur, functionExpression, - @"textHaloBlur should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.textHaloBlur = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextHaloBlur(), propertyValue, - @"Setting textHaloBlur to a data expression should update text-halo-blur."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.textHaloBlur, pedanticFunctionExpression, - @"textHaloBlur should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.textHaloBlur = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getTextHaloBlur(), propertyValue, - @"Setting textHaloBlur to a camera-data expression should update text-halo-blur."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.textHaloBlur, pedanticFunctionExpression, - @"textHaloBlur should round-trip camera-data expressions."); - - layer.textHaloBlur = nil; - XCTAssertTrue(rawLayer->getTextHaloBlur().isUndefined(), - @"Unsetting textHaloBlur should return text-halo-blur to the default value."); - XCTAssertEqualObjects(layer.textHaloBlur, defaultExpression, - @"textHaloBlur should return the default value after being unset."); - // Transition property test - layer.textHaloBlurTransition = transitionTest; - auto toptions = rawLayer->getTextHaloBlurTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition textHaloBlurTransition = layer.textHaloBlurTransition; - XCTAssertEqual(textHaloBlurTransition.delay, transitionTest.delay); - XCTAssertEqual(textHaloBlurTransition.duration, transitionTest.duration); - } - - // text-halo-color - { - XCTAssertTrue(rawLayer->getTextHaloColor().isUndefined(), - @"text-halo-color should be unset initially."); - NSExpression *defaultExpression = layer.textHaloColor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - layer.textHaloColor = constantExpression; - mbgl::style::PropertyValue propertyValue = { { 1, 0, 0, 1 } }; - XCTAssertEqual(rawLayer->getTextHaloColor(), propertyValue, - @"Setting textHaloColor to a constant value expression should update text-halo-color."); - XCTAssertEqualObjects(layer.textHaloColor, constantExpression, - @"textHaloColor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"%@", [MGLColor redColor]]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textHaloColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(mbgl::Color(1, 0, 0, 1)), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getTextHaloColor(), propertyValue, - @"Setting textHaloColor to a camera expression should update text-halo-color."); - XCTAssertEqualObjects(layer.textHaloColor, functionExpression, - @"textHaloColor should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.textHaloColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1))) - ); - } - - XCTAssertEqual(rawLayer->getTextHaloColor(), propertyValue, - @"Setting textHaloColor to a data expression should update text-halo-color."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.textHaloColor, pedanticFunctionExpression, - @"textHaloColor should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.textHaloColor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(mbgl::Color(1, 0, 0, 1)))) - ); - } - - XCTAssertEqual(rawLayer->getTextHaloColor(), propertyValue, - @"Setting textHaloColor to a camera-data expression should update text-halo-color."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.textHaloColor, pedanticFunctionExpression, - @"textHaloColor should round-trip camera-data expressions."); - - layer.textHaloColor = nil; - XCTAssertTrue(rawLayer->getTextHaloColor().isUndefined(), - @"Unsetting textHaloColor should return text-halo-color to the default value."); - XCTAssertEqualObjects(layer.textHaloColor, defaultExpression, - @"textHaloColor should return the default value after being unset."); - // Transition property test - layer.textHaloColorTransition = transitionTest; - auto toptions = rawLayer->getTextHaloColorTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition textHaloColorTransition = layer.textHaloColorTransition; - XCTAssertEqual(textHaloColorTransition.delay, transitionTest.delay); - XCTAssertEqual(textHaloColorTransition.duration, transitionTest.duration); - } - - // text-halo-width - { - XCTAssertTrue(rawLayer->getTextHaloWidth().isUndefined(), - @"text-halo-width should be unset initially."); - NSExpression *defaultExpression = layer.textHaloWidth; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.textHaloWidth = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getTextHaloWidth(), propertyValue, - @"Setting textHaloWidth to a constant value expression should update text-halo-width."); - XCTAssertEqualObjects(layer.textHaloWidth, constantExpression, - @"textHaloWidth should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textHaloWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextHaloWidth(), propertyValue, - @"Setting textHaloWidth to a camera expression should update text-halo-width."); - XCTAssertEqualObjects(layer.textHaloWidth, functionExpression, - @"textHaloWidth should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.textHaloWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextHaloWidth(), propertyValue, - @"Setting textHaloWidth to a data expression should update text-halo-width."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.textHaloWidth, pedanticFunctionExpression, - @"textHaloWidth should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.textHaloWidth = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getTextHaloWidth(), propertyValue, - @"Setting textHaloWidth to a camera-data expression should update text-halo-width."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.textHaloWidth, pedanticFunctionExpression, - @"textHaloWidth should round-trip camera-data expressions."); - - layer.textHaloWidth = nil; - XCTAssertTrue(rawLayer->getTextHaloWidth().isUndefined(), - @"Unsetting textHaloWidth should return text-halo-width to the default value."); - XCTAssertEqualObjects(layer.textHaloWidth, defaultExpression, - @"textHaloWidth should return the default value after being unset."); - // Transition property test - layer.textHaloWidthTransition = transitionTest; - auto toptions = rawLayer->getTextHaloWidthTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition textHaloWidthTransition = layer.textHaloWidthTransition; - XCTAssertEqual(textHaloWidthTransition.delay, transitionTest.delay); - XCTAssertEqual(textHaloWidthTransition.duration, transitionTest.duration); - } - - // text-opacity - { - XCTAssertTrue(rawLayer->getTextOpacity().isUndefined(), - @"text-opacity should be unset initially."); - NSExpression *defaultExpression = layer.textOpacity; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"1"]; - layer.textOpacity = constantExpression; - mbgl::style::PropertyValue propertyValue = { 1.0 }; - XCTAssertEqual(rawLayer->getTextOpacity(), propertyValue, - @"Setting textOpacity to a constant value expression should update text-opacity."); - XCTAssertEqualObjects(layer.textOpacity, constantExpression, - @"textOpacity should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"1"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal(1.0), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextOpacity(), propertyValue, - @"Setting textOpacity to a camera expression should update text-opacity."); - XCTAssertEqualObjects(layer.textOpacity, functionExpression, - @"textOpacity should round-trip camera expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(keyName, 'linear', nil, %@)", @{@18: constantExpression}]; - layer.textOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), number(get("keyName")), 18.0, literal(1.0)) - ); - } - - XCTAssertEqual(rawLayer->getTextOpacity(), propertyValue, - @"Setting textOpacity to a data expression should update text-opacity."); - NSExpression *pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:(CAST(keyName, 'NSNumber'), 'linear', nil, %@)", @{@18: constantExpression}]; - XCTAssertEqualObjects(layer.textOpacity, pedanticFunctionExpression, - @"textOpacity should round-trip data expressions."); - - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - layer.textOpacity = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - interpolate(linear(), zoom(), 10.0, interpolate(linear(), number(get("keyName")), 18.0, literal(1.0))) - ); - } - - XCTAssertEqual(rawLayer->getTextOpacity(), propertyValue, - @"Setting textOpacity to a camera-data expression should update text-opacity."); - pedanticFunctionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: pedanticFunctionExpression}]; - XCTAssertEqualObjects(layer.textOpacity, pedanticFunctionExpression, - @"textOpacity should round-trip camera-data expressions."); - - layer.textOpacity = nil; - XCTAssertTrue(rawLayer->getTextOpacity().isUndefined(), - @"Unsetting textOpacity should return text-opacity to the default value."); - XCTAssertEqualObjects(layer.textOpacity, defaultExpression, - @"textOpacity should return the default value after being unset."); - // Transition property test - layer.textOpacityTransition = transitionTest; - auto toptions = rawLayer->getTextOpacityTransition(); - XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay); - XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration); - - MGLTransition textOpacityTransition = layer.textOpacityTransition; - XCTAssertEqual(textOpacityTransition.delay, transitionTest.delay); - XCTAssertEqual(textOpacityTransition.duration, transitionTest.duration); - } - - // text-translate - { - XCTAssertTrue(rawLayer->getTextTranslate().isUndefined(), - @"text-translate should be unset initially."); - NSExpression *defaultExpression = layer.textTranslation; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"%@", -#if TARGET_OS_IPHONE - [NSValue valueWithCGVector:CGVectorMake(1, 1)] -#else - [NSValue valueWithMGLVector:CGVectorMake(1, -1)] -#endif - ]; - layer.textTranslation = constantExpression; - mbgl::style::PropertyValue> propertyValue = { { 1, 1 } }; - XCTAssertEqual(rawLayer->getTextTranslate(), propertyValue, - @"Setting textTranslation to a constant value expression should update text-translate."); - XCTAssertEqualObjects(layer.textTranslation, constantExpression, - @"textTranslation should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"{1, 1}"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textTranslation = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression>( - step(zoom(), literal({ 1, 1 }), 18.0, literal({ 1, 1 })) - ); - } - - XCTAssertEqual(rawLayer->getTextTranslate(), propertyValue, - @"Setting textTranslation to a camera expression should update text-translate."); - XCTAssertEqualObjects(layer.textTranslation, functionExpression, - @"textTranslation should round-trip camera expressions."); - - - layer.textTranslation = nil; - XCTAssertTrue(rawLayer->getTextTranslate().isUndefined(), - @"Unsetting textTranslation should return text-translate to the default value."); - XCTAssertEqualObjects(layer.textTranslation, defaultExpression, - @"textTranslation should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.textTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.textTranslation = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } - - // text-translate-anchor - { - XCTAssertTrue(rawLayer->getTextTranslateAnchor().isUndefined(), - @"text-translate-anchor should be unset initially."); - NSExpression *defaultExpression = layer.textTranslationAnchor; - - NSExpression *constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - layer.textTranslationAnchor = constantExpression; - mbgl::style::PropertyValue propertyValue = { mbgl::style::TranslateAnchorType::Viewport }; - XCTAssertEqual(rawLayer->getTextTranslateAnchor(), propertyValue, - @"Setting textTranslationAnchor to a constant value expression should update text-translate-anchor."); - XCTAssertEqualObjects(layer.textTranslationAnchor, constantExpression, - @"textTranslationAnchor should round-trip constant value expressions."); - - constantExpression = [NSExpression expressionWithFormat:@"'viewport'"]; - NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}]; - layer.textTranslationAnchor = functionExpression; - - { - using namespace mbgl::style::expression::dsl; - propertyValue = mbgl::style::PropertyExpression( - step(zoom(), literal("viewport"), 18.0, literal("viewport")) - ); - } - - XCTAssertEqual(rawLayer->getTextTranslateAnchor(), propertyValue, - @"Setting textTranslationAnchor to a camera expression should update text-translate-anchor."); - XCTAssertEqualObjects(layer.textTranslationAnchor, functionExpression, - @"textTranslationAnchor should round-trip camera expressions."); - - - layer.textTranslationAnchor = nil; - XCTAssertTrue(rawLayer->getTextTranslateAnchor().isUndefined(), - @"Unsetting textTranslationAnchor should return text-translate-anchor to the default value."); - XCTAssertEqualObjects(layer.textTranslationAnchor, defaultExpression, - @"textTranslationAnchor should return the default value after being unset."); - - functionExpression = [NSExpression expressionForKeyPath:@"bogus"]; - XCTAssertThrowsSpecificNamed(layer.textTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}]; - functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}]; - XCTAssertThrowsSpecificNamed(layer.textTranslationAnchor = functionExpression, NSException, NSInvalidArgumentException, @"MGLSymbolLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes."); - } -} - -- (void)testPropertyNames { - [self testPropertyName:@"icon-allows-overlap" isBoolean:YES]; - [self testPropertyName:@"icon-anchor" isBoolean:NO]; - [self testPropertyName:@"icon-ignores-placement" isBoolean:YES]; - [self testPropertyName:@"icon-image-name" isBoolean:NO]; - [self testPropertyName:@"icon-offset" isBoolean:NO]; - [self testPropertyName:@"is-icon-optional" isBoolean:YES]; - [self testPropertyName:@"icon-padding" isBoolean:NO]; - [self testPropertyName:@"icon-pitch-alignment" isBoolean:NO]; - [self testPropertyName:@"icon-rotation" isBoolean:NO]; - [self testPropertyName:@"icon-rotation-alignment" isBoolean:NO]; - [self testPropertyName:@"icon-scale" isBoolean:NO]; - [self testPropertyName:@"icon-text-fit" isBoolean:NO]; - [self testPropertyName:@"icon-text-fit-padding" isBoolean:NO]; - [self testPropertyName:@"keeps-icon-upright" isBoolean:YES]; - [self testPropertyName:@"keeps-text-upright" isBoolean:YES]; - [self testPropertyName:@"maximum-text-angle" isBoolean:NO]; - [self testPropertyName:@"maximum-text-width" isBoolean:NO]; - [self testPropertyName:@"symbol-avoids-edges" isBoolean:YES]; - [self testPropertyName:@"symbol-placement" isBoolean:NO]; - [self testPropertyName:@"symbol-sort-key" isBoolean:NO]; - [self testPropertyName:@"symbol-spacing" isBoolean:NO]; - [self testPropertyName:@"symbol-z-order" isBoolean:NO]; - [self testPropertyName:@"text" isBoolean:NO]; - [self testPropertyName:@"text-allows-overlap" isBoolean:YES]; - [self testPropertyName:@"text-anchor" isBoolean:NO]; - [self testPropertyName:@"text-font-names" isBoolean:NO]; - [self testPropertyName:@"text-font-size" isBoolean:NO]; - [self testPropertyName:@"text-ignores-placement" isBoolean:YES]; - [self testPropertyName:@"text-justification" isBoolean:NO]; - [self testPropertyName:@"text-letter-spacing" isBoolean:NO]; - [self testPropertyName:@"text-line-height" isBoolean:NO]; - [self testPropertyName:@"text-offset" isBoolean:NO]; - [self testPropertyName:@"is-text-optional" isBoolean:YES]; - [self testPropertyName:@"text-padding" isBoolean:NO]; - [self testPropertyName:@"text-pitch-alignment" isBoolean:NO]; - [self testPropertyName:@"text-radial-offset" isBoolean:NO]; - [self testPropertyName:@"text-rotation" isBoolean:NO]; - [self testPropertyName:@"text-rotation-alignment" isBoolean:NO]; - [self testPropertyName:@"text-transform" isBoolean:NO]; - [self testPropertyName:@"text-variable-anchor" isBoolean:NO]; - [self testPropertyName:@"text-writing-modes" isBoolean:NO]; - [self testPropertyName:@"icon-color" isBoolean:NO]; - [self testPropertyName:@"icon-halo-blur" isBoolean:NO]; - [self testPropertyName:@"icon-halo-color" isBoolean:NO]; - [self testPropertyName:@"icon-halo-width" isBoolean:NO]; - [self testPropertyName:@"icon-opacity" isBoolean:NO]; - [self testPropertyName:@"icon-translation" isBoolean:NO]; - [self testPropertyName:@"icon-translation-anchor" isBoolean:NO]; - [self testPropertyName:@"text-color" isBoolean:NO]; - [self testPropertyName:@"text-halo-blur" isBoolean:NO]; - [self testPropertyName:@"text-halo-color" isBoolean:NO]; - [self testPropertyName:@"text-halo-width" isBoolean:NO]; - [self testPropertyName:@"text-opacity" isBoolean:NO]; - [self testPropertyName:@"text-translation" isBoolean:NO]; - [self testPropertyName:@"text-translation-anchor" isBoolean:NO]; -} - -- (void)testValueAdditions { - XCTAssertEqual([NSValue valueWithMGLIconAnchor:MGLIconAnchorCenter].MGLIconAnchorValue, MGLIconAnchorCenter); - XCTAssertEqual([NSValue valueWithMGLIconAnchor:MGLIconAnchorLeft].MGLIconAnchorValue, MGLIconAnchorLeft); - XCTAssertEqual([NSValue valueWithMGLIconAnchor:MGLIconAnchorRight].MGLIconAnchorValue, MGLIconAnchorRight); - XCTAssertEqual([NSValue valueWithMGLIconAnchor:MGLIconAnchorTop].MGLIconAnchorValue, MGLIconAnchorTop); - XCTAssertEqual([NSValue valueWithMGLIconAnchor:MGLIconAnchorBottom].MGLIconAnchorValue, MGLIconAnchorBottom); - XCTAssertEqual([NSValue valueWithMGLIconAnchor:MGLIconAnchorTopLeft].MGLIconAnchorValue, MGLIconAnchorTopLeft); - XCTAssertEqual([NSValue valueWithMGLIconAnchor:MGLIconAnchorTopRight].MGLIconAnchorValue, MGLIconAnchorTopRight); - XCTAssertEqual([NSValue valueWithMGLIconAnchor:MGLIconAnchorBottomLeft].MGLIconAnchorValue, MGLIconAnchorBottomLeft); - XCTAssertEqual([NSValue valueWithMGLIconAnchor:MGLIconAnchorBottomRight].MGLIconAnchorValue, MGLIconAnchorBottomRight); - XCTAssertEqual([NSValue valueWithMGLIconPitchAlignment:MGLIconPitchAlignmentMap].MGLIconPitchAlignmentValue, MGLIconPitchAlignmentMap); - XCTAssertEqual([NSValue valueWithMGLIconPitchAlignment:MGLIconPitchAlignmentViewport].MGLIconPitchAlignmentValue, MGLIconPitchAlignmentViewport); - XCTAssertEqual([NSValue valueWithMGLIconPitchAlignment:MGLIconPitchAlignmentAuto].MGLIconPitchAlignmentValue, MGLIconPitchAlignmentAuto); - XCTAssertEqual([NSValue valueWithMGLIconRotationAlignment:MGLIconRotationAlignmentMap].MGLIconRotationAlignmentValue, MGLIconRotationAlignmentMap); - XCTAssertEqual([NSValue valueWithMGLIconRotationAlignment:MGLIconRotationAlignmentViewport].MGLIconRotationAlignmentValue, MGLIconRotationAlignmentViewport); - XCTAssertEqual([NSValue valueWithMGLIconRotationAlignment:MGLIconRotationAlignmentAuto].MGLIconRotationAlignmentValue, MGLIconRotationAlignmentAuto); - XCTAssertEqual([NSValue valueWithMGLIconTextFit:MGLIconTextFitNone].MGLIconTextFitValue, MGLIconTextFitNone); - XCTAssertEqual([NSValue valueWithMGLIconTextFit:MGLIconTextFitWidth].MGLIconTextFitValue, MGLIconTextFitWidth); - XCTAssertEqual([NSValue valueWithMGLIconTextFit:MGLIconTextFitHeight].MGLIconTextFitValue, MGLIconTextFitHeight); - XCTAssertEqual([NSValue valueWithMGLIconTextFit:MGLIconTextFitBoth].MGLIconTextFitValue, MGLIconTextFitBoth); - XCTAssertEqual([NSValue valueWithMGLSymbolPlacement:MGLSymbolPlacementPoint].MGLSymbolPlacementValue, MGLSymbolPlacementPoint); - XCTAssertEqual([NSValue valueWithMGLSymbolPlacement:MGLSymbolPlacementLine].MGLSymbolPlacementValue, MGLSymbolPlacementLine); - XCTAssertEqual([NSValue valueWithMGLSymbolPlacement:MGLSymbolPlacementLineCenter].MGLSymbolPlacementValue, MGLSymbolPlacementLineCenter); - XCTAssertEqual([NSValue valueWithMGLSymbolZOrder:MGLSymbolZOrderAuto].MGLSymbolZOrderValue, MGLSymbolZOrderAuto); - XCTAssertEqual([NSValue valueWithMGLSymbolZOrder:MGLSymbolZOrderViewportY].MGLSymbolZOrderValue, MGLSymbolZOrderViewportY); - XCTAssertEqual([NSValue valueWithMGLSymbolZOrder:MGLSymbolZOrderSource].MGLSymbolZOrderValue, MGLSymbolZOrderSource); - XCTAssertEqual([NSValue valueWithMGLTextAnchor:MGLTextAnchorCenter].MGLTextAnchorValue, MGLTextAnchorCenter); - XCTAssertEqual([NSValue valueWithMGLTextAnchor:MGLTextAnchorLeft].MGLTextAnchorValue, MGLTextAnchorLeft); - XCTAssertEqual([NSValue valueWithMGLTextAnchor:MGLTextAnchorRight].MGLTextAnchorValue, MGLTextAnchorRight); - XCTAssertEqual([NSValue valueWithMGLTextAnchor:MGLTextAnchorTop].MGLTextAnchorValue, MGLTextAnchorTop); - XCTAssertEqual([NSValue valueWithMGLTextAnchor:MGLTextAnchorBottom].MGLTextAnchorValue, MGLTextAnchorBottom); - XCTAssertEqual([NSValue valueWithMGLTextAnchor:MGLTextAnchorTopLeft].MGLTextAnchorValue, MGLTextAnchorTopLeft); - XCTAssertEqual([NSValue valueWithMGLTextAnchor:MGLTextAnchorTopRight].MGLTextAnchorValue, MGLTextAnchorTopRight); - XCTAssertEqual([NSValue valueWithMGLTextAnchor:MGLTextAnchorBottomLeft].MGLTextAnchorValue, MGLTextAnchorBottomLeft); - XCTAssertEqual([NSValue valueWithMGLTextAnchor:MGLTextAnchorBottomRight].MGLTextAnchorValue, MGLTextAnchorBottomRight); - XCTAssertEqual([NSValue valueWithMGLTextJustification:MGLTextJustificationAuto].MGLTextJustificationValue, MGLTextJustificationAuto); - XCTAssertEqual([NSValue valueWithMGLTextJustification:MGLTextJustificationLeft].MGLTextJustificationValue, MGLTextJustificationLeft); - XCTAssertEqual([NSValue valueWithMGLTextJustification:MGLTextJustificationCenter].MGLTextJustificationValue, MGLTextJustificationCenter); - XCTAssertEqual([NSValue valueWithMGLTextJustification:MGLTextJustificationRight].MGLTextJustificationValue, MGLTextJustificationRight); - XCTAssertEqual([NSValue valueWithMGLTextPitchAlignment:MGLTextPitchAlignmentMap].MGLTextPitchAlignmentValue, MGLTextPitchAlignmentMap); - XCTAssertEqual([NSValue valueWithMGLTextPitchAlignment:MGLTextPitchAlignmentViewport].MGLTextPitchAlignmentValue, MGLTextPitchAlignmentViewport); - XCTAssertEqual([NSValue valueWithMGLTextPitchAlignment:MGLTextPitchAlignmentAuto].MGLTextPitchAlignmentValue, MGLTextPitchAlignmentAuto); - XCTAssertEqual([NSValue valueWithMGLTextRotationAlignment:MGLTextRotationAlignmentMap].MGLTextRotationAlignmentValue, MGLTextRotationAlignmentMap); - XCTAssertEqual([NSValue valueWithMGLTextRotationAlignment:MGLTextRotationAlignmentViewport].MGLTextRotationAlignmentValue, MGLTextRotationAlignmentViewport); - XCTAssertEqual([NSValue valueWithMGLTextRotationAlignment:MGLTextRotationAlignmentAuto].MGLTextRotationAlignmentValue, MGLTextRotationAlignmentAuto); - XCTAssertEqual([NSValue valueWithMGLTextTransform:MGLTextTransformNone].MGLTextTransformValue, MGLTextTransformNone); - XCTAssertEqual([NSValue valueWithMGLTextTransform:MGLTextTransformUppercase].MGLTextTransformValue, MGLTextTransformUppercase); - XCTAssertEqual([NSValue valueWithMGLTextTransform:MGLTextTransformLowercase].MGLTextTransformValue, MGLTextTransformLowercase); - XCTAssertEqual([NSValue valueWithMGLTextWritingMode:MGLTextWritingModeHorizontal].MGLTextWritingModeValue, MGLTextWritingModeHorizontal); - XCTAssertEqual([NSValue valueWithMGLTextWritingMode:MGLTextWritingModeVertical].MGLTextWritingModeValue, MGLTextWritingModeVertical); - XCTAssertEqual([NSValue valueWithMGLIconTranslationAnchor:MGLIconTranslationAnchorMap].MGLIconTranslationAnchorValue, MGLIconTranslationAnchorMap); - XCTAssertEqual([NSValue valueWithMGLIconTranslationAnchor:MGLIconTranslationAnchorViewport].MGLIconTranslationAnchorValue, MGLIconTranslationAnchorViewport); - XCTAssertEqual([NSValue valueWithMGLTextTranslationAnchor:MGLTextTranslationAnchorMap].MGLTextTranslationAnchorValue, MGLTextTranslationAnchorMap); - XCTAssertEqual([NSValue valueWithMGLTextTranslationAnchor:MGLTextTranslationAnchorViewport].MGLTextTranslationAnchorValue, MGLTextTranslationAnchorViewport); -} - -@end diff --git a/platform/darwin/test/MGLTestAssertionHandler.h b/platform/darwin/test/MGLTestAssertionHandler.h deleted file mode 100644 index f1aa39921e3..00000000000 --- a/platform/darwin/test/MGLTestAssertionHandler.h +++ /dev/null @@ -1,18 +0,0 @@ -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -// Use to catch or log assertions that occur in dispatch blocks, timers or -// other asynchronous operations. -@interface MGLTestAssertionHandler : NSAssertionHandler - -- (instancetype)initWithTestCase:(XCTestCase *)testCase; -@property (nonatomic, weak) XCTestCase *testCase; - -// If YES, use `_XCTPreformattedFailureHandler` to "fail" the test, -// otherwise log the assert. -@property (nonatomic) BOOL shouldFail; -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/darwin/test/MGLTestAssertionHandler.m b/platform/darwin/test/MGLTestAssertionHandler.m deleted file mode 100644 index 4b504427b5f..00000000000 --- a/platform/darwin/test/MGLTestAssertionHandler.m +++ /dev/null @@ -1,77 +0,0 @@ -#import "MGLTestAssertionHandler.h" - -@implementation MGLTestAssertionHandler - -- (instancetype)initWithTestCase:(XCTestCase *)testCase { - if ((self = [super init])) { - _testCase = testCase; - } - return self; -} - -- (void)handleFailureInMethod:(SEL)selector - object:(id)object - file:(NSString *)fileName - lineNumber:(NSInteger)line - description:(NSString *)format, ... -{ - va_list args; - va_start(args, format); - NSString *description = [[NSString alloc] initWithFormat:format arguments:args]; - va_end(args); - - NSString *condition = [NSString stringWithFormat: - @"`[%@ %@]`", - object, NSStringFromSelector(selector) - ]; - - if (self.testCase && self.shouldFail) { - _XCTPreformattedFailureHandler(self.testCase, - YES, - fileName, - line, - condition, - description - ); - } - else { - NSLog(@"Assertion Failure: %@:%lu: %@ - %@", - fileName, - line, - condition, - description); - } -} - -- (void)handleFailureInFunction:(NSString *)functionName - file:(NSString *)fileName - lineNumber:(NSInteger)line - description:(NSString *)format, ... -{ - va_list args; - va_start(args, format); - NSString *description = [[NSString alloc] initWithFormat:format arguments:args]; - va_end(args); - - NSString *condition = [NSString stringWithFormat: - @"`%@`", - functionName]; - - if (self.testCase && self.shouldFail) { - _XCTPreformattedFailureHandler(self.testCase, - YES, - fileName, - line, - condition, - description); - } - else { - NSLog(@"Assertion Failure: %@:%lu: %@ - %@", - fileName, - line, - condition, - description); - } -} -@end - diff --git a/platform/darwin/test/MGLTestUtility.h b/platform/darwin/test/MGLTestUtility.h deleted file mode 100644 index 2e02e4f9de4..00000000000 --- a/platform/darwin/test/MGLTestUtility.h +++ /dev/null @@ -1,27 +0,0 @@ - -/** - MGL_CHECK_IF_PENDING_TEST_SHOULD_RUN() - - Include this macro at the top of a "pending" test - one that would normally fail, - but you want to include is as a compile-time test or as a reminder. - - This will output the included warning in the test log, which `xcpretty` will detect. - This allows such pending tests to be identified in CI logs. - - If you provide `MAPBOX_RUN_PENDING_TESTS` as an environment variable ALL pending - tests will run. - - In addition, it's a good idea to append `PENDING` to the test method name, as this - will also be picked up by xcpretty. PENDING tests will be distinguished by a `⧖` - and `[PENDING]` - */ -#define MGL_CHECK_IF_PENDING_TEST_SHOULD_RUN() \ - /* By default, skip pending tests. Otherwise check environment for MAPBOX_RUN_PENDING_TESTS */ \ - { \ - NSString *runPendingTests = [[NSProcessInfo processInfo] environment][@"MAPBOX_RUN_PENDING_TESTS"]; \ - if (![runPendingTests boolValue]) { \ - /* The following warning will be picked up by xcpretty */ \ - printf("warning: '%s' is a pending test - skipping\n", __PRETTY_FUNCTION__); \ - return; \ - } \ - } diff --git a/platform/darwin/test/MGLTileSetTests.mm b/platform/darwin/test/MGLTileSetTests.mm deleted file mode 100644 index 65e096ae7f8..00000000000 --- a/platform/darwin/test/MGLTileSetTests.mm +++ /dev/null @@ -1,149 +0,0 @@ -#import - -#import -#import "MGLTileSource_Private.h" -#import "MGLGeometry_Private.h" - -#include - -@interface MGLTileSetTests : XCTestCase - -@end - -@implementation MGLTileSetTests - -- (void)testTileSetFromTileURLTemplates { - // a tile set that provides an mbgl tile set - NSArray *tileURLTemplates = @[@"tile.1", @"tile.2", @"tile.3"]; - mbgl::Tileset tileSet = MGLTileSetFromTileURLTemplates(tileURLTemplates, nil); - - // has the correct URL templates - XCTAssertEqual(tileSet.tiles.size(), 3UL); - XCTAssertEqual(tileSet.tiles[0], "tile.1"); - XCTAssertEqual(tileSet.tiles[1], "tile.2"); - XCTAssertEqual(tileSet.tiles[2], "tile.3"); - - // has the default scheme - XCTAssertEqual(tileSet.scheme, mbgl::Tileset::Scheme::XYZ); - - // when the tile set has no min or max zoom level set - // the mbgl object has default values for min and max zoom level - XCTAssertEqual(tileSet.zoomRange.min, 0); - XCTAssertEqual(tileSet.zoomRange.max, 22); - - // when the tile set has min and/or max zoom level set - tileSet = MGLTileSetFromTileURLTemplates(@[@"tile.1"], @{ - MGLTileSourceOptionMinimumZoomLevel: @1, - MGLTileSourceOptionMaximumZoomLevel: @2, - }); - - // the mbgl object reflects the set values for min and max zoom level - XCTAssertEqual(tileSet.zoomRange.min, 1); - XCTAssertEqual(tileSet.zoomRange.max, 2); - - // when the tile set has a bounds set - MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(12, 34), CLLocationCoordinate2DMake(56, 78)); - tileSet = MGLTileSetFromTileURLTemplates(@[@"tile.1"], @{ - MGLTileSourceOptionCoordinateBounds: @(bounds), - }); - - // the mbgl object reflects the set values for the bounds - XCTAssert(!!tileSet.bounds, @"The bounds are set after setting the bounds"); - if (tileSet.bounds) { - MGLCoordinateBounds actual = MGLCoordinateBoundsFromLatLngBounds(*tileSet.bounds); - XCTAssert(MGLCoordinateBoundsEqualToCoordinateBounds(bounds, actual), @"The bounds round-trip"); - } - - // when the tile set has an attribution - NSString *attribution = @"my tileset © ©️🎈"; - tileSet = MGLTileSetFromTileURLTemplates(tileURLTemplates, @{ - MGLTileSourceOptionAttributionHTMLString: attribution, - }); - - // the attribution is reflected by the mbgl tileset - XCTAssertEqual(tileSet.attribution, attribution.UTF8String); - - // when the tile set has attribution infos - MGLAttributionInfo *mapboxInfo = [[MGLAttributionInfo alloc] initWithTitle:[[NSAttributedString alloc] initWithString:@"Mapbox"] - URL:[NSURL URLWithString:@"https://www.mapbox.com/"]]; -#if TARGET_OS_IPHONE - UIColor *redColor = [UIColor redColor]; -#else - // CSS uses the sRGB color space. In macOS 10.12 Sierra and below, - // -[NSColor redColor] is in the calibrated RGB space and has a slightly - // different sRGB value than on iOS and macOS 10.13 High Sierra. - NSColor *redColor = [NSColor colorWithSRGBRed:1 green:0 blue:0 alpha:1]; -#endif - NSAttributedString *gl = [[NSAttributedString alloc] initWithString:@"GL" attributes:@{ - NSBackgroundColorAttributeName: redColor, - }]; - MGLAttributionInfo *glInfo = [[MGLAttributionInfo alloc] initWithTitle:gl URL:nil]; - tileSet = MGLTileSetFromTileURLTemplates(tileURLTemplates, @{ - MGLTileSourceOptionAttributionInfos: @[mapboxInfo, glInfo], - }); - - // the attribution is reflected by the mbgl tileset -#if TARGET_OS_IPHONE - NSString *html; - if (@available(iOS 13.0, *)) { - // TODO: investigate visual impact - // iOS 13 evidently changes font size from points to pixels - html = (@"" - @"Mapbox " - @"GL\n"); - } else { - html = (@"" - @"Mapbox " - @"GL\n"); - } -#else - NSString *html = (@"" - @"Mapbox " - @"GL\n"); -#endif - XCTAssertEqualObjects(@(tileSet.attribution.c_str()), html); - - // when the tile coordinate system is changed using an NSNumber - tileSet = MGLTileSetFromTileURLTemplates(tileURLTemplates, @{ - MGLTileSourceOptionTileCoordinateSystem: @(MGLTileCoordinateSystemTMS), - }); - - // the scheme is reflected by the mbgl tileset - XCTAssertEqual(tileSet.scheme, mbgl::Tileset::Scheme::TMS); - - // when the tile coordinate system is changed using an NSValue - MGLTileCoordinateSystem tms = MGLTileCoordinateSystemTMS; - tileSet = MGLTileSetFromTileURLTemplates(tileURLTemplates, @{ - MGLTileSourceOptionTileCoordinateSystem: [NSValue value:&tms withObjCType:@encode(MGLTileCoordinateSystem)], - }); - - // the scheme is reflected by the mbgl tileset - XCTAssertEqual(tileSet.scheme, mbgl::Tileset::Scheme::TMS); - - // when the dem encoding is changed using an NSNumber - tileSet = MGLTileSetFromTileURLTemplates(tileURLTemplates, @{ - MGLTileSourceOptionDEMEncoding: @(MGLDEMEncodingTerrarium), - }); - - // the encoding is reflected by the mbgl tileset - XCTAssertEqual(tileSet.encoding, mbgl::Tileset::DEMEncoding::Terrarium); - - // when the dem encoding is changed using an NSValue - MGLDEMEncoding terrarium = MGLDEMEncodingTerrarium; - tileSet = MGLTileSetFromTileURLTemplates(tileURLTemplates, @{ - MGLTileSourceOptionDEMEncoding: [NSValue value:&terrarium withObjCType:@encode(MGLDEMEncoding)], - }); - - // the encoding is reflected by the mbgl tileset - XCTAssertEqual(tileSet.encoding, mbgl::Tileset::DEMEncoding::Terrarium); -} - -- (void)testInvalidTileSet { - // a tile set that provides an mbgl tile set and invalid (crossed) minimum and maximum zoom levels throws an exception - XCTAssertThrowsSpecificNamed(MGLTileSetFromTileURLTemplates(@[@"tile.1"], @{ - MGLTileSourceOptionMinimumZoomLevel: @10, - MGLTileSourceOptionMaximumZoomLevel: @9, - }), NSException, NSInvalidArgumentException); -} - -@end diff --git a/platform/darwin/test/MGLVersionNumber.m b/platform/darwin/test/MGLVersionNumber.m deleted file mode 100644 index fae08a087d0..00000000000 --- a/platform/darwin/test/MGLVersionNumber.m +++ /dev/null @@ -1,15 +0,0 @@ -#import - -#import - -@interface MGLVersionTests : XCTestCase - -@end - -@implementation MGLVersionTests - -- (void)testVersionNumber { - XCTAssertEqual(1, MapboxVersionNumber); -} - -@end diff --git a/platform/darwin/test/Media.xcassets/Contents.json b/platform/darwin/test/Media.xcassets/Contents.json deleted file mode 100644 index da4a164c918..00000000000 --- a/platform/darwin/test/Media.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/darwin/test/Media.xcassets/RadarImage.imageset/Contents.json b/platform/darwin/test/Media.xcassets/RadarImage.imageset/Contents.json deleted file mode 100644 index 79be9ed970c..00000000000 --- a/platform/darwin/test/Media.xcassets/RadarImage.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "radar.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/darwin/test/Media.xcassets/RadarImage.imageset/radar.png b/platform/darwin/test/Media.xcassets/RadarImage.imageset/radar.png deleted file mode 100644 index e23697f42a8456062caabe5cf887b2251e01b8d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44094 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 diff --git a/platform/darwin/test/Media.xcassets/TrackingLocationMask.imageset/Contents.json b/platform/darwin/test/Media.xcassets/TrackingLocationMask.imageset/Contents.json deleted file mode 100644 index 08cd551fc72..00000000000 --- a/platform/darwin/test/Media.xcassets/TrackingLocationMask.imageset/Contents.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "TrackingLocationMask.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "TrackingLocationMask@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "TrackingLocationMask@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - }, - "properties" : { - "template-rendering-intent" : "template" - } -} \ No newline at end of file diff --git a/platform/darwin/test/Media.xcassets/TrackingLocationMask.imageset/TrackingLocationMask.png b/platform/darwin/test/Media.xcassets/TrackingLocationMask.imageset/TrackingLocationMask.png deleted file mode 100644 index bb7348c482f3cbbc9dfe456cdfc57af20e8b0ac4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmeAS@N?(olHy`uVBq!ia0vp^;vmey1|%P7U0DF67>k44ofy`glX(f`$Yi?shX83N zAO-;*Al87=+(7!{SMU3$f%INa7sn6}-lT*Db_uLflAK5OUNMPc$%qgYuxEVq-$91q zhzN7+0?y5iKdc3sc~~DtJDg!TlEOH_EneXs_Yni;i7!ive4esqonn7vZNbAD`GKp$ zvT;Vn0-g{{#twT%!%f^9H@@yPy~??wKw03w>Y;!MuJ;=xL^fJ5vInTKcIY!2noWNw zJiG05Nag|;ZGru2hXW?GD%@YmV8~^_{%IQHM}383&$XP2vIBjVHZ-4A^5#0@e6cI< zN1#Zg20PIG|Nq}+I}ih8B!E1UoS?w}hds;r7~>Pk=2-Df2e&tP&Dfx=>@RZj1J9?P z18cd{erPWc^1E~D#NtZga%%c>Qqx~9iQ^!16$ iZgcdsA5FO!Aj;4rTvNV%!AVdcGI+ZBxvX#yWBdysu8aTIX&kQ9iMv?LO0?O`Y-+>|gqM$ra0o zEwB!}d?Q8t*m9jJ{&>DanbXTl77n#WwZ7?_O-kmjEkDbLPmQ;V85^7!?xU8c2 zS=O$V+`nV=Pfg0ZY%w>_Zqdu?=3~{9^7K8Hi*x<7jo9P8i}%2kJjJ8=5vNyAD*3(4 z+ruzezw>)?c=qiQzVio`C2Z(A=u{IB{{99N|FaKOIg^?rd7gZ5 zjNhBg?J(gmd+pc0vkw=%iWQxGBtbmd{Dy4D>00MSRmY$H2rOi13HPx#32;bRa{vG#H~;`4H~~eLF<<}y032yVPgDQ^00IC20000003!eZ04M+e03!eZ z03rYY0v#855;6b)0qIFZK~#7F?3ghuMKKhHUxdWM!oFpv=8Kf_6yrY`NdZBOsjP}8MCu~VmMO42_s5r`{wN+8&4=SzXYsq?hP zN5qCf<02yc01mneRi#dsxzIV)k=`eDh61qHsg3l$sna$l8Fx{UY8t1`Yn(`8O0rf> zr03N6m=Okp%pU1Eb-pWrK~S_@TJRb=5 zy~nW+m+Sv+qdwzgkv=sX9|-2X(Ib6o5axcSQJ=mj(tiU00RR8zNKe@S009q4L_t*T zmcb3eKnw&Ue*7tcCg_4H2vtB8&;?WhO{4@0;D^BXh=kB8XKO#_ERpi@*|K+hCvDfY z{k?6x=s#G^qHS5+bWtEBf5)|Kzd8!#VUm{Z%i<=CLOF2la#Tm4JWbLnhb(T&2$U1o zDo?c+%F86J^T^^R^+LIDZE{t6p=@%=;->XLxp6J>RePXp^U2~Su0ff-rAPQ`PCvJQ6e&yZg(79?Jy7l_NiFvKeB>-W zTKG2TWwX-kh5U!X`^dIUw@(jzEW6jYDNTYB{i d@YkP?zz0UnU}&3;hF|~y002ovPDHLkV1f=4ihlqA diff --git a/platform/darwin/test/amsterdam.geojson b/platform/darwin/test/amsterdam.geojson deleted file mode 100644 index a690f8c8aaf..00000000000 --- a/platform/darwin/test/amsterdam.geojson +++ /dev/null @@ -1,2283 +0,0 @@ -{ - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Westerpark", - "type": "park", - "description": "The \"Westerpark\" is a public urban park in Amsterdam, Netherlands. The former borough of Westerpark is named after the park, as is the current neighborhood. The verdant space of the former Westergasfabriek (gasworks) along Haarlemmerweg has become a place for cultural avant-garde businesses and events. The park is stretched along the railway, offering a biotope area to experience nature in the city. In addition Westerpark is home to one of the Netherlands’ oldest volkstuin (Gardenpark)." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.88093376159668, - 52.38560608655206 - ], - [ - 4.881706237792968, - 52.3864966440161 - ], - [ - 4.870891571044922, - 52.388696767789725 - ], - [ - 4.864625930786133, - 52.38906344442449 - ], - [ - 4.85072135925293, - 52.389220590621235 - ], - [ - 4.846086502075195, - 52.38864438516467 - ], - [ - 4.84522819519043, - 52.38607756038855 - ], - [ - 4.845314025878906, - 52.38560608655206 - ], - [ - 4.84745979309082, - 52.38560608655206 - ], - [ - 4.848232269287109, - 52.38518699447024 - ], - [ - 4.88093376159668, - 52.38560608655206 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "vondelpark", - "type": "park", - "description": "Vondelpark has opened its gates since 1885 and is Amsterdam's busiest park, with 10 Million visitors per year, situated at the south-west corner of the canal ring. It is very popular in summer for both tourists and locals, and all year round as a training area for runners, with many bootcamps taking place all over the park." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.881491661071777, - 52.36194735288177 - ], - [ - 4.882135391235352, - 52.361711487760196 - ], - [ - 4.882307052612305, - 52.361475621379526 - ], - [ - 4.875826835632324, - 52.35966727063089 - ], - [ - 4.875226020812988, - 52.35846166234964 - ], - [ - 4.866771697998047, - 52.356207610808546 - ], - [ - 4.867458343505859, - 52.355159175569305 - ], - [ - 4.86668586730957, - 52.35497569684526 - ], - [ - 4.864239692687988, - 52.35563097450493 - ], - [ - 4.861965179443359, - 52.35578823969753 - ], - [ - 4.858918190002441, - 52.35437283281734 - ], - [ - 4.857029914855957, - 52.35468737159704 - ], - [ - 4.855892658233642, - 52.354634948622525 - ], - [ - 4.855034351348877, - 52.356391084418235 - ], - [ - 4.875226020812988, - 52.36126596131745 - ], - [ - 4.876556396484375, - 52.360453519180375 - ], - [ - 4.881491661071777, - 52.36194735288177 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Jordaan", - "type": "neighbourhood", - "description": "The Jordan was originally a working-class neighbourhood, and has now become a more upscale neighborhood. It is home to many art galleries, particularly for modern art, and is also dotted with speciality shops and restaurants. Markets are held regularly at Noordermarkt, the Westerstraat and Lindengracht." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.888465404510498, - 52.38053742479665 - ], - [ - 4.883208274841309, - 52.374865596670936 - ], - [ - 4.882457256317139, - 52.36667749309006 - ], - [ - 4.882757663726807, - 52.36619270976844 - ], - [ - 4.879302978515624, - 52.36490866337324 - ], - [ - 4.874324798583984, - 52.37186565170666 - ], - [ - 4.8818135261535645, - 52.38427021667093 - ], - [ - 4.888465404510498, - 52.38053742479665 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Prinseneiland", - "type": "neighbourhood", - "description": "Between 1610 and 1615 Prinseneiland was built as an extension of the harbor. Until the end of the 19th century this was an area with many wharfs, little industries and warehouses, related to the shipping trades. After the second World war the desolated area was discovered by many artists, who established their homes and studios in the vacant buildings. During the second half of the 20th century the old warehouses were transformed into apartments one after another, and new apartments were built. Nevertheless a lot of the atmosphere of the glorious past is still present in the old buildings and wooden drawbridges." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.883251190185547, - 52.38618233166844 - ], - [ - 4.889817237854004, - 52.38264616355127 - ], - [ - 4.896254539489746, - 52.38356297507495 - ], - [ - 4.891490936279297, - 52.390425359543386 - ], - [ - 4.884967803955078, - 52.39068726147953 - ], - [ - 4.883251190185547, - 52.38618233166844 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Sarphatipark", - "type": "park", - "description": "Sarphatipark is a small park in the popular De Pijp neighbourhood. It was openend in late 19th century, and named after Samuel Sarphati." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.894580841064453, - 52.35337022551748 - ], - [ - 4.899033308029174, - 52.354267986060016 - ], - [ - 4.89815354347229, - 52.35544094498385 - ], - [ - 4.893786907196045, - 52.35446457352601 - ], - [ - 4.894580841064453, - 52.35337022551748 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Museumsplein", - "type": "area", - "description": "Museumplein is a large open space which hosts different events throughout the year. Along the edges of the open square, some of the Dutch capitals most important art museums, such as Stedelijk Museum, Van Gogh Museum and Rijksmuseum." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.880322217941284, - 52.35625347928239 - ], - [ - 4.881459474563598, - 52.35610932106146 - ], - [ - 4.882693290710448, - 52.356921843071525 - ], - [ - 4.883508682250977, - 52.357996446011384 - ], - [ - 4.884324073791504, - 52.35783263627572 - ], - [ - 4.884721040725708, - 52.35903498560687 - ], - [ - 4.886341094970703, - 52.35875651523955 - ], - [ - 4.886770248413086, - 52.36003418836164 - ], - [ - 4.884881973266602, - 52.36113492327348 - ], - [ - 4.884538650512695, - 52.36066318309746 - ], - [ - 4.883229732513428, - 52.36028971855292 - ], - [ - 4.883841276168823, - 52.35953622784582 - ], - [ - 4.882038831710815, - 52.35897929167382 - ], - [ - 4.882339239120483, - 52.35861236518361 - ], - [ - 4.880794286727905, - 52.35790471263422 - ], - [ - 4.880847930908203, - 52.357780217032044 - ], - [ - 4.879699945449829, - 52.35691529053445 - ], - [ - 4.880322217941284, - 52.35625347928239 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Marineterrein", - "type": "area", - "description": "The Marineterrein exists already for more than 350 years. The area lies on the island known as ‘Kattenburg’, in close vicinity to Centraal Station and Amsterdam’s Maritime Museum. During the Golden Age the VOC used this area to build large warships. After years of use through the Dutch marines, the area has now been opened for the public and workspaces are filled by tech startups." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.914064407348633, - 52.37083068892153 - ], - [ - 4.917154312133789, - 52.37187875234601 - ], - [ - 4.921102523803711, - 52.37444640263532 - ], - [ - 4.921188354492187, - 52.37481319763409 - ], - [ - 4.914150238037109, - 52.37586116655898 - ], - [ - 4.913034439086914, - 52.374917995645625 - ], - [ - 4.914493560791016, - 52.37339840013861 - ], - [ - 4.914064407348633, - 52.37083068892153 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "erasmuspark" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.849905967712402, - 52.37300539279099 - ], - [ - 4.852695465087891, - 52.37350320150736 - ], - [ - 4.855098724365234, - 52.37428920384616 - ], - [ - 4.854240417480469, - 52.3765423330248 - ], - [ - 4.848318099975586, - 52.37552057938607 - ], - [ - 4.849905967712402, - 52.37300539279099 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Sloterdijk", - "type": "area", - "description": "To protect the area around Sloten from the as-yet undrained IJ the Spaarndammerdijk was laid along the south bank of this inlet. In this vicinity at the same time, a dam on the Slochter (or Slooter) river was built, the Slooterdam. Trade grew in the vicinity, and in the 15th century a weigh house and a church were built. The area is nowadays best known as a large intersection of train lines and a business and industrial centre north-west of Amsterdam." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.8665571212768555, - 52.39312287505632 - ], - [ - 4.849648475646973, - 52.400638383557414 - ], - [ - 4.845571517944336, - 52.39681532315127 - ], - [ - 4.8445844650268555, - 52.39411803332277 - ], - [ - 4.844756126403809, - 52.38911582655221 - ], - [ - 4.85072135925293, - 52.38935154535783 - ], - [ - 4.871063232421875, - 52.389299163509826 - ], - [ - 4.8665571212768555, - 52.39312287505632 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Nine Streets (Negen Straatjes)", - "type": "poi", - "description": "De Negen Straatjes (Dutch for \"the nine little streets\") are nine side streets of the Prinsengracht, Keizersgracht, Herengracht and Singel in central Amsterdam which have been promoting themselves with that name since the 1990s. Together they form a sub-neighborhood within the larger western Grachtengordel (\"Canal Belt\"), one with many small and diverse shops and restaurants. The construction in this area goes back to the first half of the 17th century." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.887650012969971, - 52.368629674781644 - ], - [ - 4.8884546756744385, - 52.37242897568859 - ], - [ - 4.883047342300415, - 52.372664783594274 - ], - [ - 4.882628917694092, - 52.36839384533322 - ], - [ - 4.887650012969971, - 52.368629674781644 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Artis", - "type": "poi", - "description": "Artis, short for Natura Artis Magistra (Latin for \"Nature is the teacher of art and science\"), is a zoo in the centre of Amsterdam. It is the oldest zoo in the Netherlands and one of the oldest zoos of mainland Europe. Artis Royal Zoo is not just a zoo, it also contains an aquarium and a planetarium. Artis also has an arboretum and a fairly large art collection. A part of the art collection is on display in the Aquarium building of the zoo. Artis contains 27 monumental buildings, most of which are used as enclosures for the animals, making Artis a unique cultural heritage of the 19th century." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.911768436431885, - 52.36642855096776 - ], - [ - 4.913313388824463, - 52.36802699702209 - ], - [ - 4.916939735412598, - 52.36679541255308 - ], - [ - 4.9175190925598145, - 52.3673456992188 - ], - [ - 4.921274185180664, - 52.366048583971256 - ], - [ - 4.921660423278808, - 52.36551138367574 - ], - [ - 4.918656349182129, - 52.36400456750192 - ], - [ - 4.911768436431885, - 52.36642855096776 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Oosterpark", - "type": "park", - "description": "Oosterpark was the first large park opened by the municipality of Amsterdam in 1891. The park was designed as an English garden by Dutch landscape architect Leonard Anthony Springer." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.915802478790282, - 52.36062387118878 - ], - [ - 4.9173688888549805, - 52.35804231262857 - ], - [ - 4.925351142883301, - 52.36002108420944 - ], - [ - 4.923892021179199, - 52.36192114570822 - ], - [ - 4.92213249206543, - 52.36150182881734 - ], - [ - 4.92161750793457, - 52.36223563076494 - ], - [ - 4.919493198394775, - 52.36159355472725 - ], - [ - 4.91987943649292, - 52.36101698870163 - ], - [ - 4.918956756591797, - 52.360741806809884 - ], - [ - 4.918656349182129, - 52.36097767710775 - ], - [ - 4.917240142822266, - 52.36063697516221 - ], - [ - 4.916982650756836, - 52.360899053815025 - ], - [ - 4.915802478790282, - 52.36062387118878 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Park Frankendael", - "type": "park", - "description": "As Amsterdam rapidly grew in the sixteen and the beginning of eighteen century, the real estate in the city became so expensive, that rich people who wanted to enjoy a bigger property had to move further from the capital. The Park Frankendael (7 acres) in East Amsterdam, was originally one of these wealthy estates. The entrance to the park with an old ornamented gate is at the Middenweg, less than one mile (1300m) from the Tropenmuseum, driving out of the city. The beautiful old land house Frankendael (built in 1659) is visible from the street – it is one of the few of these estates remaining in Amsterdam" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.925265312194824, - 52.35007391180776 - ], - [ - 4.9283552169799805, - 52.352079253210675 - ], - [ - 4.930479526519775, - 52.3535995821349 - ], - [ - 4.93483543395996, - 52.35080790353051 - ], - [ - 4.929170608520508, - 52.34772767795072 - ], - [ - 4.925265312194824, - 52.35007391180776 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Stedelijk Museum", - "type": "poi", - "description": "Colloquially known as the Stedelijk, it is a museum for modern art, contemporary art, and design. The 19th century building was designed by Adriaan Willem Weissman and the 21st century wing with the current entrance was designed by Benthem Crouwel Architects. The collection comprises art from the early 20th century up to the 21st century. " - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.879399538040161, - 52.357400175655954 - ], - [ - 4.88067626953125, - 52.3577933218488 - ], - [ - 4.880236387252808, - 52.35841579616774 - ], - [ - 4.8789381980896, - 52.35808817919812 - ], - [ - 4.879399538040161, - 52.357400175655954 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Rembrandtpark", - "type": "park", - "description": "Rembrandtpark is a hidden gem west of the 'famous' Vondelpark. It is often not known to tourists and expats, but loved by locals for the outdoor gym and kids' playgrounds. It's great to combine both, Vondelpark and Rembrandtpark on a run or walk." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.845314025878906, - 52.369179938598464 - ], - [ - 4.84522819519043, - 52.36763394187947 - ], - [ - 4.843039512634277, - 52.36755533043126 - ], - [ - 4.8429107666015625, - 52.36490866337324 - ], - [ - 4.8442840576171875, - 52.36456799173892 - ], - [ - 4.84419822692871, - 52.36323148534417 - ], - [ - 4.843082427978516, - 52.36302183361385 - ], - [ - 4.843254089355469, - 52.36019143788499 - ], - [ - 4.844799041748047, - 52.36027006243683 - ], - [ - 4.8451852798461905, - 52.35924793235075 - ], - [ - 4.843854904174805, - 52.35888100809126 - ], - [ - 4.844112396240234, - 52.35822577862119 - ], - [ - 4.848747253417969, - 52.35825198798652 - ], - [ - 4.8487043380737305, - 52.36079422254044 - ], - [ - 4.849519729614258, - 52.361292168879636 - ], - [ - 4.849262237548828, - 52.363572167284175 - ], - [ - 4.850249290466309, - 52.3637031981001 - ], - [ - 4.850249290466309, - 52.36540656334422 - ], - [ - 4.8484039306640625, - 52.369546777334904 - ], - [ - 4.845314025878906, - 52.369179938598464 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Sloterpark", - "type": "park", - "description": "Amsterdam's largest park is Sloter Park with 91 hectares. It was created in the 1950s using excavated soil of the former Sloterdijkermeer Polder." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.823555946350098, - 52.3639652585661 - ], - [ - 4.826860427856445, - 52.36414869996741 - ], - [ - 4.826817512512207, - 52.36585204803552 - ], - [ - 4.830508232116699, - 52.370280445668364 - ], - [ - 4.826602935791016, - 52.373031593389626 - ], - [ - 4.822740554809569, - 52.37360800262741 - ], - [ - 4.821324348449707, - 52.37235037277361 - ], - [ - 4.819135665893555, - 52.371695343041914 - ], - [ - 4.81201171875, - 52.37187875234601 - ], - [ - 4.807548522949219, - 52.372402774732464 - ], - [ - 4.805660247802734, - 52.37046386084771 - ], - [ - 4.80926513671875, - 52.36349354860812 - ], - [ - 4.8105525970458975, - 52.36328389812132 - ], - [ - 4.8113250732421875, - 52.36150182881734 - ], - [ - 4.807033538818359, - 52.360899053815025 - ], - [ - 4.809608459472655, - 52.35654834690599 - ], - [ - 4.815659523010254, - 52.3577540073869 - ], - [ - 4.818663597106934, - 52.357963684112846 - ], - [ - 4.818620681762695, - 52.359483810623004 - ], - [ - 4.823555946350098, - 52.3639652585661 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Amsterdamse Bos", - "type": "park", - "description": "Every year almost 4.5 million people visit the Amsterdamse Bos, which has a size of 1,000 hectares and is approximately three times the size of New York's Central Park. The park was designed as a landscape park and is great for running, walking and cycling." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.849991798400879, - 52.33090717211467 - ], - [ - 4.849863052368164, - 52.331746382485676 - ], - [ - 4.853982925415039, - 52.33187750766789 - ], - [ - 4.853467941284179, - 52.332323330379836 - ], - [ - 4.848232269287109, - 52.33258557693488 - ], - [ - 4.848318099975586, - 52.33321496232317 - ], - [ - 4.8319244384765625, - 52.33145790571652 - ], - [ - 4.8181915283203125, - 52.330828495326095 - ], - [ - 4.820079803466797, - 52.32327487205222 - ], - [ - 4.816474914550781, - 52.31299147898779 - ], - [ - 4.813899993896484, - 52.30879348896445 - ], - [ - 4.809093475341796, - 52.30585465906291 - ], - [ - 4.824028015136719, - 52.29000260620264 - ], - [ - 4.832954406738281, - 52.29441235610253 - ], - [ - 4.8427391052246085, - 52.29220753602784 - ], - [ - 4.844627380371094, - 52.30060626328963 - ], - [ - 4.842395782470703, - 52.30396530825102 - ], - [ - 4.842395782470703, - 52.30407027430016 - ], - [ - 4.839649200439453, - 52.30504119845803 - ], - [ - 4.841108322143555, - 52.30732409839935 - ], - [ - 4.840335845947266, - 52.31708413595253 - ], - [ - 4.848575592041015, - 52.317189070898415 - ], - [ - 4.8558712005615225, - 52.31645452105213 - ], - [ - 4.8566436767578125, - 52.323484712336324 - ], - [ - 4.856557846069336, - 52.32757639896581 - ], - [ - 4.855785369873047, - 52.33085472093785 - ], - [ - 4.849991798400879, - 52.33090717211467 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Amstelpark", - "type": "park", - "description": "The Amstelpark is a park in Amsterdam-Zuid. The park includes a labyrinth, a café, a restaurant, two galleries, an orangery, petting zoo and a mini-golf course. The Amstelpark was built and opened for the 1972 Floriade gardening exhibition. The park offers the Amstel train which runs through the Rosarium, the rhododendron valley and the Riekermolen. The park lost about 30 percent of its larger trees due to disease. The rhododendron valley contains about 139 species of rhododendrons, blooming between April and May. At the Great Pond in the park is the Japanese Garden. At the time of the celebration of the 400-year relationship between the Netherlands and Japan in 2001, the gardens were renovated." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.892907142639159, - 52.32445521070514 - ], - [ - 4.891705513000488, - 52.325110940795255 - ], - [ - 4.890632629394531, - 52.32513716979672 - ], - [ - 4.89041805267334, - 52.3336869954871 - ], - [ - 4.892778396606445, - 52.33373944330546 - ], - [ - 4.894108772277832, - 52.333949233956965 - ], - [ - 4.897370338439941, - 52.33255935234935 - ], - [ - 4.897799491882323, - 52.33085472093785 - ], - [ - 4.897327423095702, - 52.32907134391899 - ], - [ - 4.895954132080078, - 52.32734035040776 - ], - [ - 4.894537925720215, - 52.32458635750065 - ], - [ - 4.892907142639159, - 52.32445521070514 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Martin Luther Kingpark", - "type": "park", - "description": "Martin Luther Kingpark is part of the Rivierenbuurt and has been renamed from Amstelpark, after the new Amstelpark in Buitenveldert was created. The park hosts the famous theater festival Parade every year in summer since the 1990s. " - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.906554222106933, - 52.33813172737753 - ], - [ - 4.906167984008789, - 52.33685997655858 - ], - [ - 4.90389347076416, - 52.33743685775091 - ], - [ - 4.901747703552246, - 52.33821039117558 - ], - [ - 4.901790618896484, - 52.3400982803501 - ], - [ - 4.90689754486084, - 52.34004584007248 - ], - [ - 4.905717372894287, - 52.33836771835187 - ], - [ - 4.906554222106933, - 52.33813172737753 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Beatrixpark", - "type": "park", - "description": "Beatrixpark, named after Queen Beatrix is located in the borough of Amsterdam-Zuid." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.87818717956543, - 52.34435884510934 - ], - [ - 4.88093376159668, - 52.34582700615622 - ], - [ - 4.882993698120117, - 52.34456858538671 - ], - [ - 4.8854827880859375, - 52.34435884510934 - ], - [ - 4.884710311889648, - 52.33984918847747 - ], - [ - 4.882392883300781, - 52.33995406943698 - ], - [ - 4.879045486450195, - 52.33984918847747 - ], - [ - 4.878787994384765, - 52.340688229188224 - ], - [ - 4.881620407104492, - 52.34074066870404 - ], - [ - 4.881706237792968, - 52.341789445960536 - ], - [ - 4.878444671630859, - 52.341789445960536 - ], - [ - 4.87818717956543, - 52.34435884510934 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Park de Schinkeleilanden", - "type": "Park", - "description": "This park was built between 2005 and 2010 and is popular for the neighborhoods surrounding the Schinkel waterway. It's allowed to BBQ here, and it's a popular spot for running and hiking." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.851171970367432, - 52.34405734171741 - ], - [ - 4.851021766662597, - 52.34514536601911 - ], - [ - 4.851686954498291, - 52.34628579648493 - ], - [ - 4.851021766662597, - 52.3465610683968 - ], - [ - 4.848833084106445, - 52.342785761313266 - ], - [ - 4.849659204483032, - 52.340747223639156 - ], - [ - 4.852405786514282, - 52.34110774357341 - ], - [ - 4.852041006088257, - 52.34196642466951 - ], - [ - 4.852041006088257, - 52.341979534175316 - ], - [ - 4.851665496826172, - 52.34280870252078 - ], - [ - 4.851171970367432, - 52.34405734171741 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Schiphol", - "type": "area", - "description": "Schiphol is the main international airport of the Netherlands. Schiphol Airport is an important European airport, ranking as Europe's fifth busiest and the world's fourteenth busiest by total passenger traffic in 2015. It also ranks as the world's fifth busiest by international passenger traffic. The entire airport is below sea level; the lowest point sits at 3.4 m (11 ft) below sea level." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.729099273681641, - 52.28811257899827 - ], - [ - 4.734764099121094, - 52.28559241729168 - ], - [ - 4.762744903564453, - 52.292522517043615 - ], - [ - 4.776134490966797, - 52.284857343123655 - ], - [ - 4.7907257080078125, - 52.293992398835414 - ], - [ - 4.793128967285156, - 52.30081621106509 - ], - [ - 4.803943634033203, - 52.30564473517634 - ], - [ - 4.810981750488281, - 52.311942018805624 - ], - [ - 4.796905517578125, - 52.319707434957024 - ], - [ - 4.788494110107422, - 52.320966563244205 - ], - [ - 4.779567718505859, - 52.32442898129939 - ], - [ - 4.77081298828125, - 52.3191827875965 - ], - [ - 4.756736755371094, - 52.31886799619451 - ], - [ - 4.750041961669922, - 52.310367781878 - ], - [ - 4.7454071044921875, - 52.30281066528705 - ], - [ - 4.7426605224609375, - 52.29798183210937 - ], - [ - 4.729099273681641, - 52.28811257899827 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Noorderpark", - "type": "park", - "description": "The Noorderpark is a park just 5 minutes north of the ferry that crosses the IJ canal behind Amsterdam Central Station. It came to exist in 2014 after combining Florapark and Volewijkspark." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.921703338623047, - 52.39046464493288 - ], - [ - 4.921939373016357, - 52.389652739777624 - ], - [ - 4.92436408996582, - 52.39068726147955 - ], - [ - 4.924213886260986, - 52.390922971893374 - ], - [ - 4.92460012435913, - 52.39105392157937 - ], - [ - 4.923999309539795, - 52.39326691251008 - ], - [ - 4.924793243408203, - 52.39486438729677 - ], - [ - 4.922282695770264, - 52.39698553494043 - ], - [ - 4.919922351837158, - 52.39847813327716 - ], - [ - 4.917948246002197, - 52.397705654476155 - ], - [ - 4.918398857116699, - 52.39618684316538 - ], - [ - 4.917948246002197, - 52.39527029380819 - ], - [ - 4.917197227478027, - 52.39200984251752 - ], - [ - 4.9161458015441895, - 52.39068726147955 - ], - [ - 4.918420314788818, - 52.389901551009025 - ], - [ - 4.920244216918945, - 52.39115868104846 - ], - [ - 4.921402931213379, - 52.39157771643836 - ], - [ - 4.922153949737548, - 52.39121106068977 - ], - [ - 4.921703338623047, - 52.39046464493288 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Vliegenbos", - "type": "park", - "description": "The Vliegenbos is the oldest city forest in Amsterdam. Here you've got plenty of space to run or cycle through a dense forest. It also hosts a camping ground, and is an amazingly well located starting point for excursions to the fishing villages along the IJsselmeer. " - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.925222396850586, - 52.389403927143704 - ], - [ - 4.925136566162109, - 52.39003250372539 - ], - [ - 4.926724433898926, - 52.39105392157937 - ], - [ - 4.933032989501953, - 52.391525337232174 - ], - [ - 4.93311882019043, - 52.390739641680284 - ], - [ - 4.938998222351074, - 52.38969202585476 - ], - [ - 4.9376678466796875, - 52.38686333892666 - ], - [ - 4.927024841308593, - 52.38906344442449 - ], - [ - 4.926466941833496, - 52.38948249970591 - ], - [ - 4.9253082275390625, - 52.38945630886739 - ], - [ - 4.925222396850586, - 52.389403927143704 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Flevopark", - "type": "park", - "description": "Flevopark is the jewel in the East of Amsterdam. Its offerings include an outdoor swimming pool, several lakes, restaurants. It's awesome for a bbq in summer or a foggy walk or run on a winter morning." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.948225021362305, - 52.36493486877479 - ], - [ - 4.9527740478515625, - 52.36517071668903 - ], - [ - 4.954404830932617, - 52.36517071668903 - ], - [ - 4.955005645751953, - 52.36459419734253 - ], - [ - 4.952559471130371, - 52.36215700971062 - ], - [ - 4.952859878540038, - 52.35953622784585 - ], - [ - 4.952731132507324, - 52.35809473156134 - ], - [ - 4.944963455200195, - 52.35859270832139 - ], - [ - 4.946165084838867, - 52.362314251679365 - ], - [ - 4.947195053100586, - 52.362602527168704 - ], - [ - 4.947667121887207, - 52.36417490581972 - ], - [ - 4.948225021362305, - 52.36493486877479 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Amsterdam Centraal", - "type": "station", - "description": "Amsterdam's Central Station." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.896576404571533, - 52.37985631995486 - ], - [ - 4.89715576171875, - 52.38066840529253 - ], - [ - 4.90389347076416, - 52.37820590695898 - ], - [ - 4.902949333190918, - 52.37738067732881 - ], - [ - 4.896576404571533, - 52.37985631995486 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Amsterdam Amstel", - "type": "station", - "description": "Amsterdam Amstel is a trainstation in the South East, close to the river Amstel." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.916896820068359, - 52.3468101224592 - ], - [ - 4.917690753936768, - 52.34704606711881 - ], - [ - 4.918248653411864, - 52.34604984776767 - ], - [ - 4.9173903465271, - 52.34584011451739 - ], - [ - 4.916896820068359, - 52.3468101224592 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Ouderkerk", - "type": "poi", - "description": "Ouderkerk aan de Amstel is a picturesque village in the Dutch province of North Holland. It lies about 9 km south of Amsterdam. The town is a popular destination for Amsterdammers on the weekends. The town is the location of the Beth Haim of Ouderkerk aan de Amstel, the oldest Jewish cemetery in the Netherlands." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.922518730163574, - 52.29236502681571 - ], - [ - 4.922819137573242, - 52.28777131549237 - ], - [ - 4.90788459777832, - 52.29034385252062 - ], - [ - 4.892692565917969, - 52.29456983905114 - ], - [ - 4.898228645324707, - 52.29824428222637 - ], - [ - 4.902563095092773, - 52.299267822821434 - ], - [ - 4.908742904663086, - 52.29879542240944 - ], - [ - 4.916167259216309, - 52.30149853446092 - ], - [ - 4.920544624328613, - 52.29666955819423 - ], - [ - 4.922518730163574, - 52.29236502681571 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "NDSM terrein", - "type": "poi", - "description": "The former NDSM Amsterdam ship wharf is a stunning hangout. Just 10 minutes by free ferry and a large area is there to explore. Restaurants, bars, terraces, skatepark, new and old architecture, all with the amazing view on the IJ-waters. Many of the old buildings that were in use for the making of large ships are still there, housing creative enterprises." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.890182018280029, - 52.401711923144106 - ], - [ - 4.894495010375977, - 52.40307344797437 - ], - [ - 4.899129867553711, - 52.400939500955296 - ], - [ - 4.896554946899414, - 52.39881854337136 - ], - [ - 4.8909544944763175, - 52.39813772055684 - ], - [ - 4.891490936279297, - 52.400847856747404 - ], - [ - 4.890182018280029, - 52.401711923144106 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Amsterdam Zuid", - "type": "station", - "description": "Station Amsterdam Zuid" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.8720502853393555, - 52.33950832364112 - ], - [ - 4.874711036682129, - 52.33969186657182 - ], - [ - 4.8749041557312, - 52.338459492279576 - ], - [ - 4.872071743011475, - 52.33835460777523 - ], - [ - 4.8720502853393555, - 52.33950832364112 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Het Twiske", - "type": "park", - "description": "Het Twiske recreational area lies to the north of Amsterdam between Zaanstad and Purmerend. It’s the ideal place for a day out on your bicycle, as Amsterdam’s bike paths connect directly to the paths in Het Twiske." - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.888744354248047, - 52.43555429631541 - ], - [ - 4.900503158569336, - 52.43445541622349 - ], - [ - 4.910116195678711, - 52.43586825702301 - ], - [ - 4.910888671875, - 52.442199320554714 - ], - [ - 4.907197952270508, - 52.44852947442261 - ], - [ - 4.90565299987793, - 52.449941863962756 - ], - [ - 4.905910491943359, - 52.45135420821245 - ], - [ - 4.903764724731445, - 52.4549633266463 - ], - [ - 4.903507232666016, - 52.45846754991504 - ], - [ - 4.904794692993164, - 52.461866903001194 - ], - [ - 4.906854629516602, - 52.46489995032684 - ], - [ - 4.906940460205078, - 52.465736616263186 - ], - [ - 4.9031639099121085, - 52.4673576112622 - ], - [ - 4.896640777587891, - 52.468560246396606 - ], - [ - 4.895782470703125, - 52.46793278868704 - ], - [ - 4.892778396606445, - 52.465422868400594 - ], - [ - 4.890289306640625, - 52.46416785458775 - ], - [ - 4.882049560546875, - 52.46191919869101 - ], - [ - 4.876041412353516, - 52.45982732264483 - ], - [ - 4.87492561340332, - 52.45825835038316 - ], - [ - 4.873895645141601, - 52.45648011423114 - ], - [ - 4.873037338256836, - 52.454911022694276 - ], - [ - 4.873552322387695, - 52.452714200611055 - ], - [ - 4.874839782714844, - 52.44805866784458 - ], - [ - 4.879388809204102, - 52.44277482667677 - ], - [ - 4.883165359497069, - 52.43926935464697 - ], - [ - 4.887542724609374, - 52.43597291009513 - ], - [ - 4.888744354248047, - 52.43555429631541 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Diemerpark", - "type": "park" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.974660873413086, - 52.35694150067703 - ], - [ - 4.980497360229492, - 52.357989893633615 - ], - [ - 4.985218048095703, - 52.35827819733633 - ], - [ - 4.986248016357422, - 52.35720360124792 - ], - [ - 4.985218048095703, - 52.355971715048284 - ], - [ - 4.985218048095703, - 52.3552640202125 - ], - [ - 4.986376762390137, - 52.3545563140442 - ], - [ - 4.987921714782714, - 52.353901020450564 - ], - [ - 4.988865852355957, - 52.353901020450564 - ], - [ - 4.989681243896484, - 52.353219504806525 - ], - [ - 4.991183280944824, - 52.352642829515084 - ], - [ - 4.992728233337402, - 52.35169916280845 - ], - [ - 4.994831085205078, - 52.34996905485244 - ], - [ - 4.995818138122559, - 52.34991662628147 - ], - [ - 4.997320175170898, - 52.348763181988105 - ], - [ - 4.997320175170898, - 52.348081587122245 - ], - [ - 4.99852180480957, - 52.34658728467996 - ], - [ - 4.999551773071289, - 52.34535510256526 - ], - [ - 4.999337196350098, - 52.345197800248926 - ], - [ - 4.976506233215332, - 52.35573581802885 - ], - [ - 4.974660873413086, - 52.35694150067703 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Amstelfeld", - "type": "poi" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.897080659866332, - 52.36253045847271 - ], - [ - 4.8978424072265625, - 52.36269425079362 - ], - [ - 4.89815354347229, - 52.362137354425165 - ], - [ - 4.896329641342163, - 52.36185562770631 - ], - [ - 4.896275997161865, - 52.36240597590272 - ], - [ - 4.897080659866332, - 52.36253045847271 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Albert Cuyp Markt", - "type": "poi" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.890514612197876, - 52.35491672137934 - ], - [ - 4.894967079162598, - 52.35580134510498 - ], - [ - 4.896436929702759, - 52.356168294935955 - ], - [ - 4.899580478668213, - 52.3570725511568 - ], - [ - 4.899430274963379, - 52.35731499351983 - ], - [ - 4.897252321243286, - 52.356587662440496 - ], - [ - 4.895503520965576, - 52.356076557763856 - ], - [ - 4.893561601638794, - 52.355683396297984 - ], - [ - 4.8904502391815186, - 52.35510020034824 - ], - [ - 4.890514612197876, - 52.35491672137934 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "stroke": "#555555", - "stroke-width": 2, - "stroke-opacity": 1, - "fill": "#555555", - "fill-opacity": 0.5, - "name": "Noordermarkt", - "type": "poi" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 4.885987043380737, - 52.37978100483205 - ], - [ - 4.886265993118286, - 52.37907041669766 - ], - [ - 4.886485934257507, - 52.37900819875896 - ], - [ - 4.886732697486877, - 52.37907041669766 - ], - [ - 4.887698292732239, - 52.38007244089837 - ], - [ - 4.885987043380737, - 52.37978100483205 - ] - ] - ] - } - } - ] -} diff --git a/platform/darwin/test/one-liner.json b/platform/darwin/test/one-liner.json deleted file mode 100644 index 23c546181fb..00000000000 --- a/platform/darwin/test/one-liner.json +++ /dev/null @@ -1 +0,0 @@ -{"version":8,"sources":{},"layers":[]} \ No newline at end of file diff --git a/platform/darwin/test/test-Bridging-Header.h b/platform/darwin/test/test-Bridging-Header.h deleted file mode 100644 index 1b2cb5d6d09..00000000000 --- a/platform/darwin/test/test-Bridging-Header.h +++ /dev/null @@ -1,4 +0,0 @@ -// -// Use this file to import your target's public headers that you would like to expose to Swift. -// - diff --git a/platform/ios/Integration Test Harness/AppDelegate.h b/platform/ios/Integration Test Harness/AppDelegate.h deleted file mode 100644 index 2a9bac67c90..00000000000 --- a/platform/ios/Integration Test Harness/AppDelegate.h +++ /dev/null @@ -1,8 +0,0 @@ -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end - diff --git a/platform/ios/Integration Test Harness/AppDelegate.m b/platform/ios/Integration Test Harness/AppDelegate.m deleted file mode 100644 index 4483c5f98ad..00000000000 --- a/platform/ios/Integration Test Harness/AppDelegate.m +++ /dev/null @@ -1,14 +0,0 @@ -#import "AppDelegate.h" - -@interface AppDelegate () - -@end - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - - return YES; -} - -@end diff --git a/platform/ios/Integration Test Harness/Assets.xcassets/AppIcon.appiconset/Contents.json b/platform/ios/Integration Test Harness/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d8db8d65fd7..00000000000 --- a/platform/ios/Integration Test Harness/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x" - }, - { - "idiom" : "ios-marketing", - "size" : "1024x1024", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/ios/Integration Test Harness/Base.lproj/LaunchScreen.storyboard b/platform/ios/Integration Test Harness/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f83f6fd5810..00000000000 --- a/platform/ios/Integration Test Harness/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/ios/Integration Test Harness/Info.plist b/platform/ios/Integration Test Harness/Info.plist deleted file mode 100644 index be30bb5cc5b..00000000000 --- a/platform/ios/Integration Test Harness/Info.plist +++ /dev/null @@ -1,45 +0,0 @@ - - - - - NSLocationWhenInUseUsageDescription - Used to run user location tests - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/platform/ios/Integration Test Harness/main.m b/platform/ios/Integration Test Harness/main.m deleted file mode 100644 index 81e84cbb781..00000000000 --- a/platform/ios/Integration Test Harness/main.m +++ /dev/null @@ -1,8 +0,0 @@ -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/platform/ios/Integration Tests/Annotation Tests/MGLAnnotationViewIntegrationTests.mm b/platform/ios/Integration Tests/Annotation Tests/MGLAnnotationViewIntegrationTests.mm deleted file mode 100644 index 1b3603419e7..00000000000 --- a/platform/ios/Integration Tests/Annotation Tests/MGLAnnotationViewIntegrationTests.mm +++ /dev/null @@ -1,818 +0,0 @@ -#import "MGLMapViewIntegrationTest.h" -#import "MGLTestUtility.h" -#import "MGLMapAccessibilityElement.h" -#import "MGLTestLocationManager.h" -#import "MGLCompactCalloutView.h" - -#import "MGLGeometry_Private.h" -#import "MGLMapView_Private.h" - -#include -#include -#include - -@interface MGLTestCalloutView : MGLCompactCalloutView -@property (nonatomic) BOOL implementsMarginHints; -@end - -@implementation MGLTestCalloutView -- (BOOL)respondsToSelector:(SEL)aSelector { - if (!self.implementsMarginHints && - (aSelector == @selector(marginInsetsHintForPresentationFromRect:))) { - return NO; - } - return [super respondsToSelector:aSelector]; -} -@end - - -@interface MGLMapView (Tests) -- (MGLAnnotationTag)annotationTagAtPoint:(CGPoint)point persistingResults:(BOOL)persist; -- (id )annotationWithTag:(MGLAnnotationTag)tag; -- (MGLMapCamera *)cameraByRotatingToDirection:(CLLocationDirection)degrees aroundAnchorPoint:(CGPoint)anchorPoint; -- (MGLMapCamera *)cameraByZoomingToZoomLevel:(double)zoom aroundAnchorPoint:(CGPoint)anchorPoint; -- (MGLMapCamera *)cameraForCameraOptions:(const mbgl::CameraOptions &)cameraOptions; -@property (nonatomic) UIView *calloutViewForSelectedAnnotation; -@end - -@interface MGLAnnotationViewIntegrationTests : MGLMapViewIntegrationTest -@end - -@implementation MGLAnnotationViewIntegrationTests - -#pragma mark - Offscreen/panning selection tests - -typedef struct PanTestData { - CGPoint relativeCoord; - BOOL showsCallout; - BOOL implementsMargins; - BOOL moveIntoView; - BOOL expectMapToHavePanned; - BOOL calloutOnScreen; -} PanTestData; - -#define PAN_TEST_TERMINATOR {{FLT_MAX, FLT_MAX}, NO, NO, NO, NO, NO} -static const CGPoint kAnnotationRelativeScale = { 0.05f, 0.125f }; - -- (void)internalTestOffscreenSelectionTitle:(NSString*)title withTestData:(PanTestData)test animateSelection:(BOOL)animateSelection { - - CGPoint relativeCoordinate = test.relativeCoord; - BOOL showsCallout = test.showsCallout; - BOOL calloutImplementsMarginHints = test.implementsMargins; - BOOL moveIntoView = test.moveIntoView; - BOOL expectMapToHavePanned = test.expectMapToHavePanned; - BOOL expectCalloutToBeFullyOnscreen = test.calloutOnScreen; - - // Reset the map to a consistent state - want the map to be zoomed in, so that - // it's free to be panned without hitting boundaries. - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(0, 0) zoomLevel:14 animated:NO]; - [self waitForMapViewToBeRenderedWithTimeout:1.0]; - - XCTAssert(self.mapView.annotations.count == 0); - - NSString * const MGLTestAnnotationReuseIdentifer = @"MGLTestAnnotationReuseIdentifer"; - CGSize size = self.mapView.bounds.size; - CGSize annotationSize = CGSizeMake(floor(size.width*kAnnotationRelativeScale.x), floor(size.height*kAnnotationRelativeScale.y)); - - self.viewForAnnotation = ^MGLAnnotationView*(MGLMapView *view, id annotation) { - - if (![annotation isKindOfClass:[MGLPointAnnotation class]]) { - return nil; - } - - // No dequeue - MGLAnnotationView *annotationView = [[MGLAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:MGLTestAnnotationReuseIdentifer]; - annotationView.bounds = (CGRect){ .origin = CGPointZero, .size = annotationSize }; - annotationView.backgroundColor = UIColor.redColor; - annotationView.enabled = YES; - - return annotationView; - }; - - // Coordinate for annotation screen coordinate - CGPoint annotationPoint = CGPointMake(floor(relativeCoordinate.x * size.width), floor(relativeCoordinate.y * size.height) ); - CLLocationCoordinate2D coordinate = [self.mapView convertPoint:annotationPoint toCoordinateFromView:self.mapView]; - - MGLPointAnnotation *point = [[MGLPointAnnotation alloc] init]; - point.title = title; - point.coordinate = coordinate; - - self.mapViewAnnotationCanShowCalloutForAnnotation = ^BOOL(MGLMapView *mapView, id annotation) { - return showsCallout; - }; - - self.mapViewCalloutViewForAnnotation = ^id(MGLMapView *mapView, id annotation) { - if (!showsCallout) - return nil; - - MGLTestCalloutView *calloutView = [[MGLTestCalloutView alloc] init]; - calloutView.representedObject = annotation; - calloutView.implementsMarginHints = calloutImplementsMarginHints; - return calloutView; - }; - - [self.mapView addAnnotation:point]; - - // Check assumptions before selection - UIView *annotationViewBeforeSelection = [self.mapView viewForAnnotation:point]; - XCTAssertNotNil(annotationViewBeforeSelection); - - CLLocationCoordinate2D mapCenterBeforeSelection = self.mapView.centerCoordinate; - XCTAssert(CLLocationCoordinate2DIsValid(mapCenterBeforeSelection)); - - // Also note, that at this point, the internal mechanism that determines if - // an annotation view is offscreen and should be put back in the reuse queue - // will have run, and `viewForAnnotation` may return nil - - XCTestExpectation *selectionCompleted = [self expectationWithDescription:@"Selection completed"]; - [self.mapView selectAnnotation:point moveIntoView:moveIntoView animateSelection:animateSelection completionHandler:^{ - [selectionCompleted fulfill]; - }]; - - // Animated selection takes MGLAnimationDuration (0.3 seconds), so wait a little - // longer. We don't need to wait as long if we're not animated (but we do - // want the runloop to tick over) - [self waitForExpectations:@[selectionCompleted] timeout:animateSelection ? 0.4: 0.05]; - - UIView *annotationViewAfterSelection = [self.mapView viewForAnnotation:point]; - CLLocationCoordinate2D mapCenterAfterSelection = self.mapView.centerCoordinate; - XCTAssert(CLLocationCoordinate2DIsValid(mapCenterAfterSelection)); - - // If the annotation is still "offscreen" at this point, then the above annotation view - // may be nil, which is expected. - BOOL (^CGRectContainsRectWithAccuracy)(CGRect, CGRect, CGFloat) = ^(CGRect rect1, CGRect rect2, CGFloat accuracy) { - CGRect expandedRect1 = CGRectInset(rect1, -accuracy, -accuracy); - return (BOOL)CGRectContainsRect(expandedRect1, rect2); - }; - - CGFloat epsilon = 0.00001; - if (expectMapToHavePanned) { - CLLocationDegrees latitudeDelta = fabs(mapCenterAfterSelection.latitude - mapCenterBeforeSelection.latitude); - CLLocationDegrees longitudeDelta = fabs(mapCenterAfterSelection.longitude - mapCenterBeforeSelection.longitude); - - XCTAssert( (latitudeDelta > epsilon) || (longitudeDelta > epsilon), @"Deltas: lat=%f, long=%f", latitudeDelta, longitudeDelta); // One of them should have moved - - // If the map panned - the intention is that the annotation is on-screen, - // and so should have an annotation view and that it is fully on screen - CGRect annotationFrameAfterSelection = annotationViewAfterSelection.frame; - - XCTAssertNotNil(annotationViewAfterSelection); - - XCTAssert(CGRectContainsRectWithAccuracy(self.mapView.bounds, annotationFrameAfterSelection, 0.25), @"Mapview:%@ frame:%@", NSStringFromCGRect(self.mapView.bounds), NSStringFromCGRect(annotationFrameAfterSelection)); - - // Check the callout - if (showsCallout) { - UIView *calloutView = self.mapView.calloutViewForSelectedAnnotation; - XCTAssertNotNil(calloutView); - - // This can fail if the callout view's width is < the annotations. This is really a warning, so - // if you need this NOT to fail the tests, consider replacing with MGLTestWarning - XCTAssert(expectCalloutToBeFullyOnscreen == CGRectContainsRectWithAccuracy(self.mapView.bounds, calloutView.frame, 0.25), - @"Expect contains:%d, Mapview:%@ annotation:%@ callout:%@", - expectCalloutToBeFullyOnscreen, - NSStringFromCGRect(self.mapView.bounds), - NSStringFromCGRect(annotationFrameAfterSelection), - NSStringFromCGRect(calloutView.frame)); - } - } - else { - // The map shouldn't have moved, so use equality (rather than an error check) - XCTAssertEqual(mapCenterBeforeSelection.latitude, mapCenterAfterSelection.latitude); - XCTAssertEqual(mapCenterBeforeSelection.longitude, mapCenterAfterSelection.longitude); - - // Annotation shouldn't have moved - CGPoint annotationPoint2 = [self.mapView convertCoordinate:point.coordinate toPointToView:self.mapView]; - CGFloat xDelta = fabs(annotationPoint2.x - annotationPoint.x); - CGFloat yDelta = fabs(annotationPoint2.y - annotationPoint.y); - - XCTAssert((xDelta < epsilon) && (yDelta < epsilon)); - - if (showsCallout) { - UIView *calloutView = self.mapView.calloutViewForSelectedAnnotation; - - if (annotationViewAfterSelection) { - XCTAssertNotNil(calloutView); - - // If kAnnotationScale == 0.25, then the following assert can fail. - // This is really a warning (see https://github.com/mapbox/mapbox-gl-native/issues/13744 ) - // If you need this NOT to fail the tests, consider replacing with MGLTestWarning - XCTAssert((expectCalloutToBeFullyOnscreen == CGRectContainsRectWithAccuracy(self.mapView.bounds, calloutView.frame, 0.25)), - @"Mapview:%@ annotation:%@ callout:%@", - NSStringFromCGRect(self.mapView.bounds), - NSStringFromCGRect(annotationViewAfterSelection.frame), - NSStringFromCGRect(calloutView.frame)); - } - else { - // If there's no annotation view, should we expect a callout? - XCTAssertNil(calloutView); - XCTAssertFalse(expectCalloutToBeFullyOnscreen); - } - } - } - - // Remove the annotation - [self.mapView removeAnnotation:point]; - - XCTAssert(self.mapView.annotations.count == 0); -} - -// See https://github.com/mapbox/mapbox-gl-native/pull/13727#issuecomment-454028698 -// What follows are tests based on this table. -// This is not a full-set of possible combinations, just the most important/likely -// ones -- (void)internalRunTests:(PanTestData*)testData -{ - // Test both animated and not-animated. - for (int i = 0; i<2; i++) { - int row = 0; - PanTestData *test = testData; - while (test->relativeCoord.x != FLT_MAX) { - NSString *activityTitle = [NSString stringWithFormat:@"Row %d/%d", row, i]; - [XCTContext runActivityNamed:activityTitle - block:^(id _Nonnull activity) { - [self internalTestOffscreenSelectionTitle:activityTitle - withTestData:*test - animateSelection:!i]; - }]; - ++test; - ++row; - } - } -} - -- (void)testBasicSelection { - // Tests moveIntoView:NO - // WITHOUT a callout - - PanTestData tests[] = { - // Coord showsCallout impl margins? moveIntoView expectMapToPan calloutOnScreen - // Offscreen - { {-1.0f, 0.5f}, NO, NO, NO, NO, NO }, - { { 2.0f, 0.5f}, NO, NO, NO, NO, NO }, - { { 0.5f,-1.0f}, NO, NO, NO, NO, NO }, - { { 0.5f, 2.0f}, NO, NO, NO, NO, NO }, - - // Partial - { { 0.0f, 0.5f}, NO, NO, NO, NO, NO }, - { { 1.0f, 0.5f}, NO, NO, NO, NO, NO }, - { { 0.5f, 0.0f}, NO, NO, NO, NO, NO }, - { { 0.5f, 1.0f}, NO, NO, NO, NO, NO }, - - // Onscreen - { { 0.5f, 0.5f}, NO, NO, NO, NO, NO }, - - PAN_TEST_TERMINATOR - }; - - [self internalRunTests:tests]; -} - -- (void)testBasicSelectionWithCallout { - // Tests moveIntoView:NO - // WITH the default callout (implements marginshint) - - PanTestData tests[] = { - // Coord showsCallout impl margins? moveIntoView expectMapToPan calloutOnScreen - { {-1.0f, 0.5f}, YES, YES, NO, NO, NO }, - { { 0.0f, 0.5f}, YES, YES, NO, NO, NO }, - { { 0.5f, 1.0f}, YES, YES, NO, NO, YES }, // Because annotation was off the bottom of screen, and callout is above annotation - { { 0.5f, 0.5f}, YES, YES, NO, NO, YES }, - - PAN_TEST_TERMINATOR - }; - - [self internalRunTests:tests]; -} - -- (void)testSelectionMoveIntoView { - // Tests moveIntoView:YES - // without a callout - - // From https://github.com/mapbox/mapbox-gl-native/pull/13727#issuecomment-454028698 - // - // | Annotation position | Has callout? | Callout implements `marginInsets...`? | Map pans when selected with moveIntoView=YES? | - // |---------------------|--------------|---------------------------------------|-----------------------------------------------| - // | Offscreen | No | n/a | Yes (no margins) | - // | Partially | No | n/a | No | - // | Onscreen | No | n/a | No | - // - - PanTestData tests[] = { - // Coord showsCallout impl margins? moveIntoView expectMapToPan calloutOnScreen - // Offscreen - { {-1.0f, 0.5f}, NO, NO, YES, YES, NO }, - { { 2.0f, 0.5f}, NO, NO, YES, YES, NO }, - { { 0.5f,-1.0f}, NO, NO, YES, YES, NO }, - { { 0.5f, 2.0f}, NO, NO, YES, YES, NO }, - - // Partial - { { 0.0f, 0.5f}, NO, NO, YES, NO, NO }, - { { 1.0f, 0.5f}, NO, NO, YES, NO, NO }, - { { 0.5f, 0.0f}, NO, NO, YES, NO, NO }, - { { 0.5f, 1.0f}, NO, NO, YES, NO, NO }, - - // Onscreen - { { 0.5f, 0.5f}, NO, NO, YES, NO, NO }, - - PAN_TEST_TERMINATOR - }; - - [self internalRunTests:tests]; -} - -- (void)testSelectionMoveIntoViewWithCallout { - // Tests moveIntoView:YES - // WITH the default callout (implements marginshint) - - // From https://github.com/mapbox/mapbox-gl-native/pull/13727#issuecomment-454028698 - // - // | Annotation position | Has callout? | Callout implements `marginInsets...`? | Map pans when selected with moveIntoView=YES? | - // |---------------------|--------------|---------------------------------------|-----------------------------------------------| - // | Offscreen | Yes | Yes | Yes to ensure callout is fully visible | - // | Partially | Yes | Yes | Yes to ensure callout is fully visible | - // | Onscreen | Yes | Yes | Yes, but *only* to ensure callout is fully visible | - // - - CGFloat offset = kAnnotationRelativeScale.x * 0.5f; - - PanTestData tests[] = { - // Coord showsCallout impl margins? moveIntoView expectMapToPan calloutOnScreen - // Offscreen - { {-1.0f, 0.5f}, YES, YES, YES, YES, YES }, - { { 2.0f, 0.5f}, YES, YES, YES, YES, YES }, - { { 0.5f,-1.0f}, YES, YES, YES, YES, YES }, - { { 0.5f, 2.0f}, YES, YES, YES, YES, YES }, - - // Partial - { { 0.0f, 0.5f}, YES, YES, YES, YES, YES }, - { { 1.0f, 0.5f}, YES, YES, YES, YES, YES }, - { { 0.5f, 0.0f}, YES, YES, YES, YES, YES }, - { { 0.5f, 1.0f}, YES, YES, YES, YES, YES }, - - // Onscreen - { { 0.5f, 0.5f}, YES, YES, YES, NO, YES }, - - // Just at the edge of the screen. - // Expects to move, because although onscreen, callout would not be. - // However, if the scale is 0.25, then expectToPan should be NO, because - // of the width of the annotation - - // Coord showsCallout impl margins? moveIntoView expectMapToPan calloutOnScreen - { {offset, 0.5f}, YES, YES, YES, YES, YES }, - { {1.0 - offset, 0.5f}, YES, YES, YES, YES, YES }, - - PAN_TEST_TERMINATOR - }; - - [self internalRunTests:tests]; -} - -- (void)testSelectionMoveIntoViewWithBasicCallout { - // Tests moveIntoView:YES - // WITH a callout that DOES NOT implement marginshint - - // From https://github.com/mapbox/mapbox-gl-native/pull/13727#issuecomment-454028698 - // - // | Annotation position | Has callout? | Callout implements `marginInsets...`? | Map pans when selected with moveIntoView=YES? | - // |---------------------|--------------|---------------------------------------|-----------------------------------------------| - // | Offscreen | Yes | No | Yes, but only to show annotation (not callout) with no margins | - // | Partially | Yes | No | No | - // | Onscreen | Yes | No | No | - // - - PanTestData tests[] = { - // Coord showsCallout impl margins? moveIntoView expectMapToPan calloutOnScreen - // Offscreen - { {-1.0f, 0.5f}, YES, NO, YES, YES, NO }, - { { 2.0f, 0.5f}, YES, NO, YES, YES, NO }, - { { 0.5f,-1.0f}, YES, NO, YES, YES, NO }, - { { 0.5f, 2.0f}, YES, NO, YES, YES, YES }, // Because annotation was off the bottom of screen, and callout is above annotation - { { 2.0f, 2.0f}, YES, NO, YES, YES, NO }, - - // Partial - { { 0.0f, 0.5f}, YES, NO, YES, NO, NO }, - { { 1.0f, 0.5f}, YES, NO, YES, NO, NO }, - { { 0.5f, 0.0f}, YES, NO, YES, NO, NO }, - { { 0.5f, 1.0f}, YES, NO, YES, NO, YES }, // Because annotation was off the bottom of screen, and callout is above annotation - { { 1.0f, 1.0f}, YES, NO, YES, NO, NO }, - - // Onscreen - { { 0.5f, 0.5f}, YES, NO, YES, NO, YES }, - - PAN_TEST_TERMINATOR - }; - - [self internalRunTests:tests]; -} - -#pragma mark - Selection with an offset - -- (void)testSelectingAnnotationWithCenterOffset { - - for (CGFloat dx = -100.0; dx <= 100.0; dx += 100.0 ) { - for (CGFloat dy = -100.0; dy <= 100.0; dy += 100.0 ) { - CGVector offset = CGVectorMake(dx, dy); - UIEdgeInsets edgeInsets = UIEdgeInsetsMake(fmax(-dy, 0.0), fmax(-dy, 0.0), fmax(dy, 0.0), fmax(dx, 0.0)); - [self internalTestSelectingAnnotationWithCenterOffsetWithOffset:offset edgeInsets:edgeInsets]; - } - } -} - -- (void)internalTestSelectingAnnotationWithCenterOffsetWithOffset:(CGVector)offset edgeInsets:(UIEdgeInsets)edgeInsets { - - NSString * const MGLTestAnnotationReuseIdentifer = @"MGLTestAnnotationReuseIdentifer"; - - self.mapView.contentInset = edgeInsets; - CGSize size = self.mapView.bounds.size; - - CGSize annotationSize = CGSizeMake(40.0, 40.0); - - self.viewForAnnotation = ^MGLAnnotationView*(MGLMapView *view, id annotation) { - - if (![annotation isKindOfClass:[MGLPointAnnotation class]]) { - return nil; - } - - // No dequeue - MGLAnnotationView *annotationView = [[MGLAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:MGLTestAnnotationReuseIdentifer]; - annotationView.bounds = (CGRect){ .origin = CGPointZero, .size = annotationSize }; - annotationView.backgroundColor = UIColor.redColor; - annotationView.enabled = YES; - annotationView.centerOffset = offset; - - return annotationView; - }; - - MGLPointAnnotation *point = [[MGLPointAnnotation alloc] init]; - point.title = NSStringFromSelector(_cmd); - point.coordinate = CLLocationCoordinate2DMake(0.0, 0.0); - [self.mapView addAnnotation:point]; - - // From https://github.com/mapbox/mapbox-gl-native/issues/12259#issuecomment-401414168 - // - // queryRenderedFeatures depends on collision detection having been run - // before it shows results [...]. Collision detection runs asynchronously - // (at least every 300ms, sometimes more often), and therefore the results - // of queryRenderedFeatures are similarly asynchronous. - // - // So, we need to wait before `annotationTagAtPoint:persistingResults:` will - // return out newly added annotation - - [self waitForCollisionDetectionToRun]; - - // Check that the annotation is in the center of the view - CGPoint annotationPoint = [self.mapView convertCoordinate:point.coordinate toPointToView:self.mapView]; - XCTAssertEqualWithAccuracy(annotationPoint.x, (size.width - edgeInsets.right + edgeInsets.left)/2.0, 0.25); - XCTAssertEqualWithAccuracy(annotationPoint.y, (size.height - edgeInsets.bottom + edgeInsets.top)/2.0, 0.25); - - // Now test taps around the annotation - CGPoint tapPoint = CGPointMake(annotationPoint.x + offset.dx, annotationPoint.y + offset.dy); - - MGLAnnotationTag tagAtPoint = [self.mapView annotationTagAtPoint:tapPoint persistingResults:YES]; - XCTAssert(tagAtPoint != UINT32_MAX, @"Should have tapped on annotation"); - - CGPoint testPoints[] = { - { tapPoint.x - annotationSize.width, tapPoint.y }, - { tapPoint.x + annotationSize.width, tapPoint.y }, - { tapPoint.x, tapPoint.y - annotationSize.height }, - { tapPoint.x, tapPoint.y + annotationSize.height }, - CGPointZero - }; - - CGPoint *testPoint = testPoints; - - while (!CGPointEqualToPoint(*testPoint, CGPointZero)) { - tagAtPoint = [self.mapView annotationTagAtPoint:*testPoints persistingResults:YES]; - XCTAssert(tagAtPoint == UINT32_MAX, @"Tap should to the side of the annotation"); - testPoint++; - } -} - -- (void)testUserLocationWithOffsetAnchorPoint { - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(37.787357, -122.39899)]; - MGLTestLocationManager *locationManager = [[MGLTestLocationManager alloc] init]; - self.mapView.locationManager = locationManager; - - [self.mapView setUserTrackingMode:MGLUserTrackingModeFollow animated:NO completionHandler:nil]; - CGRect originalFrame = [self.mapView viewForAnnotation:self.mapView.userLocation].frame; - - // Temporarily disable location tracking so we can save the value of - // the originalFrame in memory - [self.mapView setUserTrackingMode:MGLUserTrackingModeNone animated:NO completionHandler:nil]; - - CGPoint offset = CGPointMake(20, 20); - - self.mapViewUserLocationAnchorPoint = ^CGPoint (MGLMapView *mapView) { - return offset;; - }; - - [self.mapView setUserTrackingMode:MGLUserTrackingModeFollow animated:NO completionHandler:nil]; - CGRect offsetFrame = [self.mapView viewForAnnotation:self.mapView.userLocation].frame; - - XCTAssertEqual(originalFrame.origin.x + offset.x, offsetFrame.origin.x); - XCTAssertEqual(originalFrame.origin.y + offset.y, offsetFrame.origin.y); -} - -#pragma mark - Rotating/zooming - -- (void)testSelectingAnnotationWhenMapIsRotated { - - CLLocationCoordinate2D coordinates[] = { - { 40.0, 40.0 }, - { NAN, NAN } - }; - - NSArray *annotations = [self internalAddAnnotationsAtCoordinates:coordinates]; - MGLPointAnnotation *annotation = annotations.firstObject; - - // Rotate - CLLocationDirection lastAngle = 0.0; - - srand48(0); - for (NSInteger iter = 0; iter < 10; iter++ ) { - - CLLocationDirection angle = (CLLocationDirection)((drand48()*1080.0) - 540.0); - - CGPoint anchor = CGPointMake(drand48()*CGRectGetWidth(self.mapView.bounds), drand48()*CGRectGetHeight(self.mapView.bounds)); - - NSString *activityTitle = [NSString stringWithFormat:@"Rotate to: %0.1f from: %0.1f", angle, lastAngle]; - [XCTContext runActivityNamed:activityTitle - block:^(id _Nonnull activity) { - - MGLMapCamera *toCamera = [self.mapView cameraByRotatingToDirection:angle aroundAnchorPoint:anchor]; - [self internalTestSelecting:annotation withCamera:toCamera]; - }]; - - lastAngle = angle; - } -} - -- (void)testSelectingAnnotationWhenMapIsScaled { - - CLLocationCoordinate2D coordinates[] = { - { 0.005, 0.005 }, - { NAN, NAN } - }; - - NSArray *annotations = [self internalAddAnnotationsAtCoordinates:coordinates]; - MGLPointAnnotation *annotation = annotations.firstObject; - - CGPoint anchor = CGPointMake(CGRectGetMidX(self.mapView.bounds), CGRectGetMidY(self.mapView.bounds)); - - srand48(0); - for (NSInteger iter = 0; iter < 10; iter++ ) { - - double zoom = (double)(drand48()*14.0); - - NSString *activityTitle = [NSString stringWithFormat:@"Zoom to %0.1f", zoom]; - [XCTContext runActivityNamed:activityTitle - block:^(id _Nonnull activity) { - MGLMapCamera *toCamera = [self.mapView cameraByZoomingToZoomLevel:zoom aroundAnchorPoint:anchor]; - [self internalTestSelecting:annotation withCamera:toCamera]; - }]; - } -} - -- (void)testSelectingAnnotationWhenMapIsScaledAndRotated { - - CLLocationCoordinate2D coordinates[] = { - { 0.005, 0.005 }, - { NAN, NAN } - }; - - NSArray *annotations = [self internalAddAnnotationsAtCoordinates:coordinates]; - MGLPointAnnotation *annotation = annotations.firstObject; - - srand48(0); - for (NSInteger iter = 0; iter < 10; iter++ ) { - - double zoom = (double)(7.0 + drand48()*7.0); - CLLocationDirection angle = (CLLocationDirection)((drand48()*1080.0) - 540.0); - - CGPoint anchor = CGPointMake(drand48()*CGRectGetWidth(self.mapView.bounds), drand48()*CGRectGetHeight(self.mapView.bounds)); - - NSString *activityTitle = [NSString stringWithFormat:@"Zoom to %0.1f", zoom]; - [XCTContext runActivityNamed:activityTitle - block:^(id _Nonnull activity) - { - mbgl::CameraOptions currentCameraOptions; - - currentCameraOptions.bearing = angle; - currentCameraOptions.anchor = mbgl::ScreenCoordinate { anchor.x, anchor.y }; - currentCameraOptions.zoom = zoom; - MGLMapCamera *toCamera = [self.mapView cameraForCameraOptions:currentCameraOptions]; - - [self internalTestSelecting:annotation withCamera:toCamera]; - }]; - } -} - - -- (void)testShowingAnnotationsThenSelectingAnimated { - [self internalTestShowingAnnotationsThenSelectingAnimated:YES]; -} - -- (void)testShowingAnnotationsThenSelecting { - [self internalTestShowingAnnotationsThenSelectingAnimated:NO]; -} - -- (void)internalTestShowingAnnotationsThenSelectingAnimated:(BOOL)animated { - srand48(0); - - CGFloat maxXPadding = std::max(CGRectGetWidth(self.mapView.bounds)/5.0, 100.0); - CGFloat maxYPadding = std::max(CGRectGetHeight(self.mapView.bounds)/5.0, 100.0); - - for (int i = 0; i < 10; i++) { - UIEdgeInsets edgePadding; - edgePadding.top = floor(drand48()*maxYPadding); - edgePadding.bottom = floor(drand48()*maxYPadding); - edgePadding.left = floor(drand48()*maxXPadding); - edgePadding.right = floor(drand48()*maxXPadding); - - UIEdgeInsets contentInsets; - contentInsets.top = floor(drand48()*maxYPadding); - contentInsets.bottom = floor(drand48()*maxYPadding); - contentInsets.left = floor(drand48()*maxXPadding); - contentInsets.right = floor(drand48()*maxXPadding); - - [self internalTestShowingAnnotationsThenSelectingAnimated:animated edgePadding:edgePadding contentInsets:contentInsets]; - } -} - -- (void)internalTestShowingAnnotationsThenSelectingAnimated:(BOOL)animated edgePadding:(UIEdgeInsets)edgeInsets contentInsets:(UIEdgeInsets)contentInsets { - CLLocationCoordinate2D coordinates[21]; - - for (int i = 0; i < (int)(sizeof(coordinates)/sizeof(coordinates[0])); i++) - { - coordinates[i].latitude = drand48(); - coordinates[i].longitude = drand48(); - } - coordinates[20] = CLLocationCoordinate2DMake(NAN, NAN); - - NSArray *annotations = [self internalAddAnnotationsAtCoordinates:coordinates]; - - XCTestExpectation *showCompleted = [self expectationWithDescription:@"showCompleted"]; - - self.mapView.contentInset = contentInsets; - [self.mapView showAnnotations:annotations - edgePadding:edgeInsets - animated:animated - completionHandler:^{ - [showCompleted fulfill]; - }]; - - [self waitForExpectations:@[showCompleted] timeout:3.5]; - - // These tests will fail if this isn't here. But this isn't quite what we're - // seeing in https://github.com/mapbox/mapbox-gl-native/issues/15106 - [self waitForCollisionDetectionToRun]; - - for (MGLPointAnnotation *point in annotations) { - [self internalSelectDeselectAnnotation:point]; - } - - [self.mapView removeAnnotations:annotations]; - self.mapView.contentInset = UIEdgeInsetsZero; - [self waitForCollisionDetectionToRun]; -} - -- (NSArray*)internalAddAnnotationsAtCoordinates:(CLLocationCoordinate2D*)coordinates -{ - __block NSMutableArray *annotations = [NSMutableArray array]; - - [XCTContext runActivityNamed:@"Map setup" - block:^(id _Nonnull activity) - { - - NSString * const MGLTestAnnotationReuseIdentifer = @"MGLTestAnnotationReuseIdentifer"; - - CGSize annotationSize = CGSizeMake(40.0, 40.0); - - self.viewForAnnotation = ^MGLAnnotationView*(MGLMapView *view, id annotation2) { - - if (![annotation2 isKindOfClass:[MGLPointAnnotation class]]) { - return nil; - } - - // No dequeue - MGLAnnotationView *annotationView = [[MGLAnnotationView alloc] initWithAnnotation:annotation2 reuseIdentifier:MGLTestAnnotationReuseIdentifer]; - annotationView.bounds = (CGRect){ .origin = CGPointZero, .size = annotationSize }; - annotationView.backgroundColor = UIColor.redColor; - annotationView.enabled = YES; - - return annotationView; - }; - - CLLocationCoordinate2D *coordinatePtr = coordinates; - while (!isnan(coordinatePtr->latitude)) { - CLLocationCoordinate2D coordinate = *coordinatePtr++; - - MGLPointAnnotation *annotation = [[MGLPointAnnotation alloc] init]; - annotation.title = NSStringFromSelector(_cmd); - annotation.coordinate = coordinate; - [annotations addObject:annotation]; - } - - [self.mapView addAnnotations:annotations]; - - }]; - - NSArray *copiedAnnotations = [annotations copy]; - annotations = nil; - - return copiedAnnotations; -} - -- (void)internalTestSelecting:(MGLPointAnnotation*)point withCamera:(MGLMapCamera*)camera { - - // Rotate - XCTestExpectation *rotationCompleted = [self expectationWithDescription:@"rotationCompleted"]; - [self.mapView setCamera:camera withDuration:0.1 animationTimingFunction:nil completionHandler:^{ - [rotationCompleted fulfill]; - }]; - - [self waitForExpectations:@[rotationCompleted] timeout:1.5]; - - // Collision detection may not have completed, if not we may not get our annotation. - [self waitForCollisionDetectionToRun]; - - // Look up annotation at point - [self internalSelectDeselectAnnotation:point]; -} - -- (void)internalSelectDeselectAnnotation:(MGLPointAnnotation*)point { - [XCTContext runActivityNamed:[NSString stringWithFormat:@"Select annotation: %@", point] - block:^(id _Nonnull activity) - { - CGPoint annotationPoint = [self.mapView convertCoordinate:point.coordinate toPointToView:self.mapView]; - - MGLAnnotationTag tagAtPoint = [self.mapView annotationTagAtPoint:annotationPoint persistingResults:YES]; - if (tagAtPoint != UINT32_MAX) - { - id annotation = [self.mapView annotationWithTag:tagAtPoint]; - XCTAssertNotNil(annotation); - - // Select - XCTestExpectation *selectionCompleted = [self expectationWithDescription:@"Selection completed"]; - [self.mapView selectAnnotation:annotation moveIntoView:NO animateSelection:NO completionHandler:^{ - [selectionCompleted fulfill]; - }]; - - [self waitForExpectations:@[selectionCompleted] timeout:0.05]; - - XCTAssert(self.mapView.selectedAnnotations.count == 1, @"There should only be 1 selected annotation"); - XCTAssertEqualObjects(self.mapView.selectedAnnotations.firstObject, annotation, @"The annotation should be selected"); - - // Deselect - [self.mapView deselectAnnotation:annotation animated:NO]; - } - else - { - XCTFail(@"Should be an annotation at this point: %@", NSStringFromCGPoint(annotationPoint)); - } - }]; - -} - -#pragma mark - Utilities - -- (void)runRunLoop { - [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; -} - -- (void)waitFor:(NSTimeInterval)seconds { - XCTestExpectation *timerExpired = [self expectationWithDescription:@"Timer expires"]; - - NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1 - target:self - selector:@selector(runRunLoop) - userInfo:nil - repeats:YES]; - - double duration = seconds * (double)NSEC_PER_SEC; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)duration), dispatch_get_main_queue(), ^{ - [timerExpired fulfill]; - }); - - [self waitForExpectations:@[timerExpired] timeout:seconds + 1.0]; - [timer invalidate]; -} - -- (void)waitForCollisionDetectionToRun { - XCTAssertNil(self.renderFinishedExpectation, @"Incorrect test setup"); - - [self.mapView setNeedsRerender]; - self.renderFinishedExpectation = [self expectationWithDescription:@"Map view should be rendered"]; - XCTestExpectation *timerExpired = [self expectationWithDescription:@"Timer expires"]; - - // Wait 1/2 second - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(NSEC_PER_SEC >> 1)), dispatch_get_main_queue(), ^{ - [timerExpired fulfill]; - }); - - [self waitForExpectations:@[timerExpired, self.renderFinishedExpectation] timeout:5]; - - self.renderFinishedExpectation = nil; -} - -@end diff --git a/platform/ios/Integration Tests/Camera Tests/MGLCameraTransitionFinishTests.mm b/platform/ios/Integration Tests/Camera Tests/MGLCameraTransitionFinishTests.mm deleted file mode 100644 index 1527e8dbe56..00000000000 --- a/platform/ios/Integration Tests/Camera Tests/MGLCameraTransitionFinishTests.mm +++ /dev/null @@ -1,109 +0,0 @@ -#import "MGLMapViewIntegrationTest.h" -#import "MGLTestUtility.h" -#import "../../darwin/src/MGLGeometry_Private.h" - -#include - -@interface MGLCameraTransitionFinishTests : MGLMapViewIntegrationTest -@end - -@implementation MGLCameraTransitionFinishTests - -- (void)testEaseToCompletionHandler { - - MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0.0, 0.0), - CLLocationCoordinate2DMake(1.0, 1.0)); - MGLMapCamera *camera = [self.mapView cameraThatFitsCoordinateBounds:bounds]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Completion block should be called"]; - - [self.mapView setCamera:camera - withDuration:0.0 - animationTimingFunction:nil - completionHandler:^{ - [expectation fulfill]; - }]; - - [self waitForExpectations:@[expectation] timeout:0.5]; -} - -- (void)testEaseToCompletionHandlerAnimated { - - MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0.0, 0.0), - CLLocationCoordinate2DMake(1.0, 1.0)); - MGLMapCamera *camera = [self.mapView cameraThatFitsCoordinateBounds:bounds]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Completion block should be called"]; - - [self.mapView setCamera:camera - withDuration:0.3 - animationTimingFunction:nil - completionHandler:^{ - [expectation fulfill]; - }]; - - [self waitForExpectations:@[expectation] timeout:0.5]; -} - -- (void)testFlyToCompletionHandler { - - MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0.0, 0.0), - CLLocationCoordinate2DMake(1.0, 1.0)); - MGLMapCamera *camera = [self.mapView cameraThatFitsCoordinateBounds:bounds]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Completion block should be called"]; - - [self.mapView flyToCamera:camera - withDuration:0.0 - completionHandler:^{ - [expectation fulfill]; - }]; - - [self waitForExpectations:@[expectation] timeout:0.5]; -} - -- (void)testFlyToCompletionHandlerAnimated { - - MGLCoordinateBounds bounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0.0, 0.0), - CLLocationCoordinate2DMake(1.0, 1.0)); - MGLMapCamera *camera = [self.mapView cameraThatFitsCoordinateBounds:bounds]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"Completion block should be called"]; - - [self.mapView flyToCamera:camera - withDuration:0.3 - completionHandler:^{ - [expectation fulfill]; - }]; - - [self waitForExpectations:@[expectation] timeout:0.5]; -} -@end - -#pragma mark - camera transitions with NaN values - -@interface MGLMapView (MGLCameraTransitionFinishNaNTests) -- (mbgl::CameraOptions)cameraOptionsObjectForAnimatingToCamera:(MGLMapCamera *)camera edgePadding:(UIEdgeInsets)insets; -@end - -@interface MGLCameraTransitionNaNZoomMapView: MGLMapView -@end - -@implementation MGLCameraTransitionNaNZoomMapView -- (mbgl::CameraOptions)cameraOptionsObjectForAnimatingToCamera:(MGLMapCamera *)camera edgePadding:(UIEdgeInsets)insets { - mbgl::CameraOptions options = [super cameraOptionsObjectForAnimatingToCamera:camera edgePadding:insets]; - options.zoom = NAN; - return options; -} -@end - -// Subclass the entire test suite, but with a different MGLMapView subclass -@interface MGLCameraTransitionFinishNaNTests : MGLCameraTransitionFinishTests -@end - -@implementation MGLCameraTransitionFinishNaNTests -- (MGLMapView *)mapViewForTestWithFrame:(CGRect)rect styleURL:(NSURL *)styleURL { - return [[MGLCameraTransitionNaNZoomMapView alloc] initWithFrame:rect styleURL:styleURL]; -} -@end - diff --git a/platform/ios/Integration Tests/Camera Tests/MGLCameraTransitionTests.mm b/platform/ios/Integration Tests/Camera Tests/MGLCameraTransitionTests.mm deleted file mode 100644 index 27ab7964c1f..00000000000 --- a/platform/ios/Integration Tests/Camera Tests/MGLCameraTransitionTests.mm +++ /dev/null @@ -1,394 +0,0 @@ -#import "MGLMapViewIntegrationTest.h" -#import "MGLTestUtility.h" -#import "../../darwin/src/MGLGeometry_Private.h" - -@interface MGLCameraTransitionTests : MGLMapViewIntegrationTest -@end - -@implementation MGLCameraTransitionTests - -- (void)testSetAndResetNorthWithDispatchAsyncInDelegateMethod { - - XCTestExpectation *expectation = [self expectationWithDescription:@"regionDidChange expectation"]; - expectation.expectedFulfillmentCount = 2; - expectation.assertForOverFulfill = YES; - - __weak typeof(self) weakself = self; - - self.regionDidChange = ^(MGLMapView *mapView, MGLCameraChangeReason reason, BOOL animated) { - - MGLCameraTransitionTests *strongSelf = weakself; - - if (!strongSelf) return; - - [expectation fulfill]; - - MGLTestAssert(strongSelf, mapView.userTrackingMode != MGLUserTrackingModeFollowWithHeading); - if (mapView.direction != 0.0) { - dispatch_async(dispatch_get_main_queue(), ^{ - [mapView resetNorth]; - }); - } - }; - - [self.mapView setDirection:90 animated:YES]; - - // loop, render, and wait - [self waitForExpectations:@[expectation] timeout:10]; -} - - -- (void)testSetAndResetNorthInDelegateMethod { - - XCTestExpectation *expectation = [self expectationWithDescription:@"regionDidChange expectation"]; - expectation.expectedFulfillmentCount = 2; - expectation.assertForOverFulfill = YES; - - __weak typeof(self) weakself = self; - - self.regionDidChange = ^(MGLMapView *mapView, MGLCameraChangeReason reason, BOOL animated) { - - MGLCameraTransitionTests *strongSelf = weakself; - - if (!strongSelf) return; - - [expectation fulfill]; - - MGLTestAssert(strongSelf, mapView.userTrackingMode != MGLUserTrackingModeFollowWithHeading); - if (mapView.direction != 0.0) { - NSLog(@"Reset to north"); - [mapView resetNorth]; - } - }; - - [self.mapView setDirection:90 animated:YES]; - [self waitForExpectations:@[expectation] timeout:10]; -} - -- (void)testInterruptingAndResetNorthOnlyOnceInIsChanging { - - // Reset to non-zero, prior to testing - [self.mapView setDirection:45 animated:NO]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"regionDidChange expectation"]; - expectation.expectedFulfillmentCount = 1; - expectation.assertForOverFulfill = YES; - - __weak typeof(self) weakself = self; - __block BOOL startedReset = NO; - __block BOOL finishedReset = NO; - - self.regionIsChanging = ^(MGLMapView *mapView) { - MGLCameraTransitionTests *strongSelf = weakself; - if (!strongSelf) return; - - if (!startedReset) { - NSLog(@"Reset to north, interrupting the previous transition"); - startedReset = YES; - [mapView resetNorth]; - finishedReset = YES; - } - }; - - self.regionDidChange = ^(MGLMapView *mapView, MGLCameraChangeReason reason, BOOL animated) { - MGLCameraTransitionTests *strongSelf = weakself; - if (!strongSelf) return; - - MGLTestAssert(strongSelf, startedReset); - - if (finishedReset) { - MGLTestAssert(strongSelf, !(reason & MGLCameraChangeReasonTransitionCancelled)); - [expectation fulfill]; - } - else { - MGLTestAssert(strongSelf, reason & MGLCameraChangeReasonTransitionCancelled); - } - }; - - [self.mapView setDirection:90 animated:YES]; - [self waitForExpectations:@[expectation] timeout:10]; - - XCTAssertEqualWithAccuracy(self.mapView.direction, 0.0, 0.001, @"Camera should have reset to north. %0.3f", self.mapView.direction); -} - -- (void)testSetCenterCancelsTransitions { - XCTestExpectation *cameraIsInDCExpectation = [self expectationWithDescription:@"camera reset to DC"]; - - CLLocationCoordinate2D dc = CLLocationCoordinate2DMake(38.894368, -77.036487); - CLLocationCoordinate2D dc_west = CLLocationCoordinate2DMake(38.894368, -77.076487); - - double zoomLevel = 15.0; - - [self.mapView setCenterCoordinate:dc zoomLevel:zoomLevel animated:NO]; - [self.mapView setCenterCoordinate:dc_west zoomLevel:zoomLevel animated:YES]; - - __weak typeof(self) weakself = self; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.15 * NSEC_PER_SEC), - dispatch_get_main_queue(), - ^{ - MGLCameraTransitionTests *strongSelf = weakself; - - [strongSelf.mapView setCenterCoordinate:dc zoomLevel:zoomLevel animated:NO]; - MGLTestAssertEqualWithAccuracy(strongSelf, - dc.latitude, - strongSelf.mapView.centerCoordinate.latitude, - 0.0005, - @"setting center coordinate should cancel transitions"); - MGLTestAssertEqualWithAccuracy(strongSelf, - dc.longitude, - strongSelf.mapView.centerCoordinate.longitude, - 0.0005, - @"setting center coordinate should cancel transitions"); - [cameraIsInDCExpectation fulfill]; - }); - - [self waitForExpectations:@[cameraIsInDCExpectation] timeout:10.0]; -} - -- (void)testSetCenterCoordinateInDelegateMethod { - - XCTestExpectation *expectation = [self expectationWithDescription:@"regionDidChange expectation"]; - expectation.expectedFulfillmentCount = 2; - expectation.assertForOverFulfill = YES; - - __weak typeof(self) weakself = self; - __block NSInteger delegateCallCount = 0; - - CLLocationCoordinate2D target = CLLocationCoordinate2DMake(40.0, 40.0); - CLLocationCoordinate2D target2 = CLLocationCoordinate2DMake(-40.0, -40.0); - - self.regionDidChange = ^(MGLMapView *mapView, MGLCameraChangeReason reason, BOOL animated) { - - MGLCameraTransitionTests *strongSelf = weakself; - - if (!strongSelf) return; - - MGLTestAssert(strongSelf, mapView.userTrackingMode != MGLUserTrackingModeFollowWithHeading); - - CLLocationCoordinate2D center = mapView.centerCoordinate; - - switch(delegateCallCount) { - case 0: - { - // Our center coordinate should match our target (assuming we're not - // constrained by zoom level) - MGLTestAssertEqualWithAccuracy(strongSelf, - target.longitude, - center.longitude, - 0.0005, - @"center coordinate longitude should be at target"); - - MGLTestAssertEqualWithAccuracy(strongSelf, - target.latitude, - center.latitude, - 0.0005, - @"center coordinate latitude should be at target"); - - // Now set another coordinate. - // Should take MGLAnimationDuration seconds (0.3s) - [mapView setCenterCoordinate:target2 animated:YES]; - break; - } - - case 1: - { - // Our center coordinate should match our target (assuming we're not - // constrained by zoom level) - MGLTestAssertEqualWithAccuracy(strongSelf, - target2.longitude, - center.longitude, - 0.0005, - @"center coordinate longitude should be at target2"); - - MGLTestAssertEqualWithAccuracy(strongSelf, - target2.latitude, - center.latitude, - 0.0005, - @"center coordinate latitude should be at target2"); - break; - - } - - default: - MGLTestFail(strongSelf); - break; - } - - delegateCallCount++; - - [expectation fulfill]; - }; - - // Should take MGLAnimationDuration seconds (0.3) - [self.mapView setCenterCoordinate:target zoomLevel:15.0 animated:YES]; - [self waitForExpectations:@[expectation] timeout:10]; -} - -- (void)testFlyToCameraInDelegateMethod { - - XCTestExpectation *expectation = [self expectationWithDescription:@"regionDidChange expectation"]; - - __weak typeof(self) weakself = self; - __block NSInteger delegateCallCount = 0; - expectation.expectedFulfillmentCount = 3; - expectation.assertForOverFulfill = YES; - - CLLocationCoordinate2D target = CLLocationCoordinate2DMake(40.0, 40.0); - CLLocationCoordinate2D target2 = CLLocationCoordinate2DMake(30.0, 30.0); - - __block BOOL runloop = YES; - - NSTimeInterval stop0 = CACurrentMediaTime(); - __block NSTimeInterval stop1 = 0.0; - __block NSTimeInterval stop2 = 0.0; - - double zoomLevel = 5.0; - double altitude = MGLAltitudeForZoomLevel(zoomLevel, 0.0, target.latitude, self.mapView.frame.size); - - self.regionDidChange = ^(MGLMapView *mapView, MGLCameraChangeReason reason, BOOL animated) { - - MGLCameraTransitionTests *strongSelf = weakself; - - if (!strongSelf) return; - - MGLTestAssert(strongSelf, mapView.userTrackingMode != MGLUserTrackingModeFollowWithHeading); - - CLLocationCoordinate2D center = mapView.centerCoordinate; - - switch(delegateCallCount) { - case 0: - { - stop1 = CACurrentMediaTime(); - - // Our center coordinate should match our target (assuming we're not - // constrained by zoom level) - MGLTestAssertEqualWithAccuracy(strongSelf, - target.longitude, - center.longitude, - 0.0005, - @"center coordinate longitude should be at target"); - - MGLTestAssertEqualWithAccuracy(strongSelf, - target.latitude, - center.latitude, - 0.0005, - @"center coordinate latitude should be at target"); - - // Now set another coordinate. - MGLMapCamera *camera = [MGLMapCamera cameraLookingAtCenterCoordinate:target2 - altitude:altitude - pitch:0.0 - heading:0.0]; - - // flyToCamera can take a while... - [mapView flyToCamera:camera completionHandler:^{ - MGLTestAssert(strongSelf, !runloop, @"Completion block should be called after delegate method"); - [expectation fulfill]; - stop2 = CACurrentMediaTime(); - }]; - break; - } - - case 1: - { - // Our center coordinate should match our target (assuming we're not - // constrained by zoom level) - MGLTestAssertEqualWithAccuracy(strongSelf, - target2.longitude, - center.longitude, - 0.0005, - @"center coordinate longitude should be at target2"); - - MGLTestAssertEqualWithAccuracy(strongSelf, - target2.latitude, - center.latitude, - 0.0005, - @"center coordinate latitude should be at target2"); - - runloop = NO; - break; - } - - default: - MGLTestFail(strongSelf); - break; - } - - delegateCallCount++; - - [expectation fulfill]; - }; - - // Should take MGLAnimationDuration - [self.mapView setCenterCoordinate:target zoomLevel:zoomLevel animated:YES]; - - [self waitForExpectations:@[expectation] timeout:10]; - - NSLog(@"setCenterCoordinate: %0.4fs", stop1 - stop0); - NSLog(@"flyToCamera: %0.4fs", stop2 - stop1); - - XCTAssert(delegateCallCount == 2, @"Expecting 2 regionDidChange callbacks, got %ld", (long)delegateCallCount); // Once for the setDirection and once for the reset north -} - -#pragma mark - Pending tests - -- (void)testContinuallyResettingNorthInIsChanging🙁{ - // See https://github.com/mapbox/mapbox-gl-native/pull/11614 - // This test currently fails, unsurprisingly, since we're continually - // setting the camera to the same parameters during its update. - // - // Possible solutions/expectations: - // - If you set camera parameters that match the *current* target parameters - // then the transition could be a no-op. We'd need to consider any completion - // block - // - Ideally we would detect this case and disallow it. - - // Reset to non-zero, prior to testing - [self.mapView setDirection:45 animated:NO]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"regionDidChange expectation"]; - expectation.expectedFulfillmentCount = 2; - expectation.assertForOverFulfill = YES; - - self.regionIsChanging = ^(MGLMapView *mapView) { - [mapView resetNorth]; - }; - - self.regionDidChange = ^(MGLMapView *mapView, MGLCameraChangeReason reason, BOOL animated) { - [expectation fulfill]; - }; - - [self.mapView setDirection:90 animated:YES]; - [self waitForExpectations:@[expectation] timeout:10]; - - XCTAssertEqualWithAccuracy(self.mapView.direction, 0.0, 0.001, @"Camera should have reset to north. %0.3f", self.mapView.direction); -} - -- (void)testContinuallySettingCoordinateInIsChanging🙁 { - // See above comment in `-testContinuallyResettingNorthInIsChanging🙁` - - // Reset to non-zero, prior to testing - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(0.0, 0.0) animated:NO]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"regionDidChange expectation"]; - expectation.expectedFulfillmentCount = 2; - expectation.assertForOverFulfill = YES; - - __weak typeof(self) weakself = self; - - self.regionIsChanging = ^(MGLMapView *mapView) { - [weakself.mapView setCenterCoordinate:CLLocationCoordinate2DMake(-40.0, -40.0) animated:YES]; - }; - - self.regionDidChange = ^(MGLMapView *mapView, MGLCameraChangeReason reason, BOOL animated) { - [expectation fulfill]; - }; - - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(40.0, 40.0) animated:YES]; - [self waitForExpectations:@[expectation] timeout:10]; - - XCTAssertEqualWithAccuracy(self.mapView.direction, 0.0, 0.001, @"Camera should have reset to north. %0.3f", self.mapView.direction); -} - -@end diff --git a/platform/ios/Integration Tests/Info.plist b/platform/ios/Integration Tests/Info.plist deleted file mode 100644 index 6c40a6cd0c4..00000000000 --- a/platform/ios/Integration Tests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/platform/ios/Integration Tests/MBGLIntegrationTests.mm b/platform/ios/Integration Tests/MBGLIntegrationTests.mm deleted file mode 100644 index d0f5f6a79d1..00000000000 --- a/platform/ios/Integration Tests/MBGLIntegrationTests.mm +++ /dev/null @@ -1,252 +0,0 @@ -#import "MGLMapViewIntegrationTest.h" -#import "MGLMapView_Private.h" -#import "MGLMapView+Impl.h" - -#include - -@interface MBGLIntegrationTests : MGLMapViewIntegrationTest -@end - -@implementation MBGLIntegrationTests - -#pragma mark - Tests - -- (void)waitForMapViewToBeRendered { - [self waitForMapViewToBeRenderedWithTimeout:10]; -} - -// This test does not strictly need to be in this test file/target. Including here for convenience. -- (void)testOpenGLLayerDoesNotLeakWhenCreatedAndDestroyedWithoutAddingToStyle { - MGLOpenGLStyleLayer *layer = [[MGLOpenGLStyleLayer alloc] initWithIdentifier:@"gl-layer"]; - __weak id weakLayer = layer; - layer = nil; - - XCTAssertNil(weakLayer); -} - -- (void)testAddingRemovingOpenGLLayerWithoutRendering { - XCTAssertNotNil(self.style); - - void(^addRemoveGLLayer)(void) = ^{ - __weak id weakLayer = nil; - - @autoreleasepool { - MGLOpenGLStyleLayer *layer = [[MGLOpenGLStyleLayer alloc] initWithIdentifier:@"gl-layer"]; - [self.style insertLayer:layer atIndex:0]; - weakLayer = layer; - - // Nil the layer prior to remove to ensure it's being retained - layer = nil; - [self.style removeLayer:weakLayer]; - } - - XCTAssertNil(weakLayer); - }; - - addRemoveGLLayer(); - addRemoveGLLayer(); - addRemoveGLLayer(); -} - -- (void)testReusingOpenGLLayerIdentifier { - __weak MGLOpenGLStyleLayer *weakLayer2; - - @autoreleasepool { - MGLOpenGLStyleLayer *layer1 = [[MGLOpenGLStyleLayer alloc] initWithIdentifier:@"gl-layer"]; - [self.style insertLayer:layer1 atIndex:0]; - [self waitForMapViewToBeRendered]; - [self.style removeLayer:layer1]; - - MGLOpenGLStyleLayer *layer2 = [[MGLOpenGLStyleLayer alloc] initWithIdentifier:@"gl-layer"]; - weakLayer2 = layer2; - - XCTAssertNotNil(layer2); - XCTAssert(layer1 != layer2); - - [self.style insertLayer:layer2 atIndex:0]; - [self waitForMapViewToBeRendered]; - [self.style removeLayer:layer2]; - - XCTAssertNil([layer1 style]); - XCTAssertNil([layer2 style]); - } - - // At this point, layer2 (and layer1) should still be around, - // since the render process needs to keep a reference to them. - XCTAssertNotNil(weakLayer2); - - // Let render loop run enough to release the layers - [self waitForMapViewToBeRendered]; - XCTAssertNil(weakLayer2); -} - -- (void)testAddingRemovingOpenGLLayer { - XCTAssertNotNil(self.style); - - void(^addRemoveGLLayer)(void) = ^{ - - __weak id retrievedLayer = nil; - - @autoreleasepool { - MGLOpenGLStyleLayer *layer = [[MGLOpenGLStyleLayer alloc] initWithIdentifier:@"gl-layer"]; - [self.style insertLayer:layer atIndex:0]; - layer = nil; - - [self waitForMapViewToBeRendered]; - - retrievedLayer = [self.style layerWithIdentifier:@"gl-layer"]; - XCTAssertNotNil(retrievedLayer); - - [self.style removeLayer:retrievedLayer]; - [self waitForMapViewToBeRendered]; - } - - XCTAssertNil(retrievedLayer); - }; - - addRemoveGLLayer(); - addRemoveGLLayer(); - addRemoveGLLayer(); -} - -- (void)testReusingOpenGLLayer { - MGLOpenGLStyleLayer *layer = [[MGLOpenGLStyleLayer alloc] initWithIdentifier:@"gl-layer"]; - [self.style insertLayer:layer atIndex:0]; - [self waitForMapViewToBeRendered]; - - [self.style removeLayer:layer]; - [self waitForMapViewToBeRendered]; - - [self.style insertLayer:layer atIndex:0]; - [self waitForMapViewToBeRendered]; - - [self.style removeLayer:layer]; - [self waitForMapViewToBeRendered]; -} - -- (void)testOpenGLLayerDoesNotLeakWhenRemovedFromStyle { - __weak id weakLayer; - @autoreleasepool { - MGLOpenGLStyleLayer *layer = [[MGLOpenGLStyleLayer alloc] initWithIdentifier:@"gl-layer"]; - weakLayer = layer; - [self.style insertLayer:layer atIndex:0]; - layer = nil; - - [self waitForMapViewToBeRendered]; - [self.style removeLayer:[self.style layerWithIdentifier:@"gl-layer"]]; - } - - MGLStyleLayer *layer2 = weakLayer; - - XCTAssertNotNil(weakLayer); - [self waitForMapViewToBeRendered]; - - layer2 = nil; - XCTAssertNil(weakLayer); -} - -- (void)testOpenGLLayerDoesNotLeakWhenStyleChanged { - __weak MGLOpenGLStyleLayer *weakLayer; - - @autoreleasepool { - { - MGLOpenGLStyleLayer *layer = [[MGLOpenGLStyleLayer alloc] initWithIdentifier:@"gl-layer"]; - weakLayer = layer; - [self.style insertLayer:layer atIndex:0]; - layer = nil; - } - } - - XCTAssertNotNil(weakLayer); - - [self waitForMapViewToBeRendered]; - - MGLStyleLayer *layer2 = [self.mapView.style layerWithIdentifier:@"gl-layer"]; - - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - self.styleLoadingExpectation = [self expectationWithDescription:@"Map view should finish loading style."]; - [self.mapView setStyleURL:styleURL]; - [self waitForExpectations:@[self.styleLoadingExpectation] timeout:10]; - - // At this point the C++ CustomLayer will have been destroyed, and the rawLayer pointer has been NULLed - XCTAssert(weakLayer == layer2); - XCTAssertNotNil(weakLayer); - - // Asking the style for the layer should return nil - MGLStyleLayer *layer3 = [self.mapView.style layerWithIdentifier:@"gl-layer"]; - XCTAssertNil(layer3); -} - - -- (void)testOpenGLLayerDoesNotLeakWhenMapViewDeallocs { - __weak id weakLayer; - - @autoreleasepool { - - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - MGLMapView *mapView2 = [[MGLMapView alloc] initWithFrame:UIScreen.mainScreen.bounds styleURL:styleURL]; - mapView2.delegate = self; - - XCTAssertNil(mapView2.style); - - self.styleLoadingExpectation = [self expectationWithDescription:@"Map view should finish loading style."]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - - MGLOpenGLStyleLayer *layer = [[MGLOpenGLStyleLayer alloc] initWithIdentifier:@"gl-layer"]; - weakLayer = layer; - [mapView2.style insertLayer:layer atIndex:0]; - layer = nil; - - [self waitForMapViewToBeRendered]; - } - XCTAssertNil(weakLayer); -} - -- (void)testMGLMapViewImplHasCorrectSize { - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - self.styleLoadingExpectation = [self expectationWithDescription:@"Map view should finish loading style."]; - [self.mapView setStyleURL:styleURL]; - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(9.6315313, 52.4133574) animated:NO]; - [self waitForExpectations:@[self.styleLoadingExpectation] timeout:1]; - - MGLMapViewImpl *mapViewImpl = [self.mapView viewImpl]; - CGFloat scaleFactor = [UIScreen mainScreen].scale; - mbgl::Size renderableSize = mapViewImpl->getRendererBackend().getDefaultRenderable().getSize(); - mbgl::Size viewSize = { - static_cast(self.mapView.bounds.size.width * scaleFactor), - static_cast(self.mapView.bounds.size.height * scaleFactor) - }; - - // Test that mapView and default renderable have the same size. - XCTAssertTrue(renderableSize == viewSize); - - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(9.6315313, 52.4133574), - CLLocationCoordinate2DMake(24.9410248, 60.1733244)}; - - MGLPointCollectionFeature *points = [MGLPointCollectionFeature pointCollectionWithCoordinates:coordinates count:sizeof(coordinates)/sizeof(coordinates[0])]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"heatmap" shape:points options:nil]; - [self.style addSource:source]; - - MGLHeatmapStyleLayer *heatmapLayer = [[MGLHeatmapStyleLayer alloc] initWithIdentifier:@"lineLayer" source:source]; - [self.style addLayer:heatmapLayer]; - - // Test that heatmap layer can create a texture and be successfully rendered. - [self waitForMapViewToBeRendered]; - - // Resize frame of the view. - [self.mapView setFrame: CGRect{self.mapView.bounds.origin, {256, 256}}]; - - // Force sync re-layout. - [self.mapView layoutIfNeeded]; - - // Test that mapView and default renderable have the same size after re-layout. - renderableSize = mapViewImpl->getRendererBackend().getDefaultRenderable().getSize(); - viewSize = { static_cast(self.mapView.bounds.size.width * scaleFactor), - static_cast(self.mapView.bounds.size.height * scaleFactor) }; - XCTAssertTrue(renderableSize == viewSize); - [self waitForMapViewToBeRendered]; -} - -@end - diff --git a/platform/ios/Integration Tests/MGLMapViewIntegrationTest.h b/platform/ios/Integration Tests/MGLMapViewIntegrationTest.h deleted file mode 100644 index 08576e884af..00000000000 --- a/platform/ios/Integration Tests/MGLMapViewIntegrationTest.h +++ /dev/null @@ -1,45 +0,0 @@ -#import -#import -#import "MGLTestUtility.h" - -#define MGLTestFail(myself, ...) \ - _XCTPrimitiveFail(myself, __VA_ARGS__) - -#define MGLTestAssert(myself, expression, ...) \ - _XCTPrimitiveAssertTrue(myself, expression, @#expression, __VA_ARGS__) - -#define MGLTestAssertEqualWithAccuracy(myself, expression1, expression2, accuracy, ...) \ - _XCTPrimitiveAssertEqualWithAccuracy(myself, expression1, @#expression1, expression2, @#expression2, accuracy, @#accuracy, __VA_ARGS__) -#define MGLTestAssertNil(myself, expression, ...) \ - _XCTPrimitiveAssertNil(myself, expression, @#expression, __VA_ARGS__) - -#define MGLTestAssertNotNil(myself, expression, ...) \ - _XCTPrimitiveAssertNotNil(myself, expression, @#expression, __VA_ARGS__) - -#define MGLTestWarning(expression, format, ...) \ -({ \ - if (!(expression)) { \ - NSString *message = [NSString stringWithFormat:format, ##__VA_ARGS__]; \ - printf("warning: Test Case '%s' at line %d: '%s' %s\n", __PRETTY_FUNCTION__, __LINE__, #expression, message.UTF8String); \ - } \ -}) - -@interface MGLMapViewIntegrationTest : XCTestCase -@property (nonatomic) MGLMapView *mapView; -@property (nonatomic) UIWindow *window; -@property (nonatomic) MGLStyle *style; -@property (nonatomic) XCTestExpectation *styleLoadingExpectation; -@property (nonatomic) XCTestExpectation *renderFinishedExpectation; -@property (nonatomic) MGLAnnotationView * (^viewForAnnotation)(MGLMapView *mapView, id annotation); -@property (nonatomic) void (^regionWillChange)(MGLMapView *mapView, BOOL animated); -@property (nonatomic) void (^regionIsChanging)(MGLMapView *mapView); -@property (nonatomic) void (^regionDidChange)(MGLMapView *mapView, MGLCameraChangeReason reason, BOOL animated); -@property (nonatomic) CGPoint (^mapViewUserLocationAnchorPoint)(MGLMapView *mapView); -@property (nonatomic) BOOL (^mapViewAnnotationCanShowCalloutForAnnotation)(MGLMapView *mapView, id annotation); -@property (nonatomic) id (^mapViewCalloutViewForAnnotation)(MGLMapView *mapView, id annotation); - -// Utility methods -- (void)waitForMapViewToFinishLoadingStyleWithTimeout:(NSTimeInterval)timeout; -- (void)waitForMapViewToBeRenderedWithTimeout:(NSTimeInterval)timeout; -- (MGLMapView *)mapViewForTestWithFrame:(CGRect)rect styleURL:(NSURL *)styleURL; -@end diff --git a/platform/ios/Integration Tests/MGLMapViewIntegrationTest.m b/platform/ios/Integration Tests/MGLMapViewIntegrationTest.m deleted file mode 100644 index 4095b4620b4..00000000000 --- a/platform/ios/Integration Tests/MGLMapViewIntegrationTest.m +++ /dev/null @@ -1,200 +0,0 @@ -#import "MGLMapViewIntegrationTest.h" - -@interface MGLMapView (MGLMapViewIntegrationTest) -- (void)updateFromDisplayLink:(CADisplayLink *)displayLink; -- (void)setNeedsRerender; -@end - -@implementation MGLMapViewIntegrationTest - -+ (XCTestSuite*)defaultTestSuite { - - XCTestSuite *defaultTestSuite = [super defaultTestSuite]; - - NSArray *tests = defaultTestSuite.tests; - - XCTestSuite *newTestSuite = [XCTestSuite testSuiteWithName:defaultTestSuite.name]; - - BOOL runPendingTests = [[[NSProcessInfo processInfo] environment][@"MAPBOX_RUN_PENDING_TESTS"] boolValue]; - NSString *accessToken = [[NSProcessInfo processInfo] environment][@"MAPBOX_ACCESS_TOKEN"]; - - for (XCTest *test in tests) { - - // Check for pending tests - if ([test.name containsString:@"PENDING"] || - [test.name containsString:@"🙁"]) { - if (!runPendingTests) { - printf("warning: '%s' is a pending test - skipping\n", test.name.UTF8String); - continue; - } - } - - // Check for tests that require a valid access token - if ([test.name containsString:@"🔒"]) { - if (!accessToken) { - printf("warning: MAPBOX_ACCESS_TOKEN env var is required for test '%s' - skipping.\n", test.name.UTF8String); - continue; - } - } - - [newTestSuite addTest:test]; - } - - return newTestSuite; -} - -- (MGLMapView *)mapViewForTestWithFrame:(CGRect)rect styleURL:(NSURL *)styleURL { - return [[MGLMapView alloc] initWithFrame:UIScreen.mainScreen.bounds styleURL:styleURL]; -} - -- (void)setUp { - [super setUp]; - - NSString *accessToken; - - if ([self.name containsString:@"🔒"]) { - accessToken = [[NSProcessInfo processInfo] environment][@"MAPBOX_ACCESS_TOKEN"]; - - if (!accessToken) { - printf("warning: MAPBOX_ACCESS_TOKEN env var is required for test '%s' - trying anyway.\n", self.name.UTF8String); - } - } - - [MGLAccountManager setAccessToken:accessToken ?: @"pk.feedcafedeadbeefbadebede"]; - - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - - self.mapView = [self mapViewForTestWithFrame:UIScreen.mainScreen.bounds styleURL:styleURL]; - self.mapView.delegate = self; - - UIView *superView = [[UIView alloc] initWithFrame:UIScreen.mainScreen.bounds]; - [superView addSubview:self.mapView]; - self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; - [self.window addSubview:superView]; - [self.window makeKeyAndVisible]; - - if (!self.mapView.style) { - [self waitForMapViewToFinishLoadingStyleWithTimeout:10]; - } -} - -- (void)tearDown { - self.styleLoadingExpectation = nil; - self.renderFinishedExpectation = nil; - self.mapView = nil; - self.style = nil; - self.window = nil; - [MGLAccountManager setAccessToken:nil]; - - [super tearDown]; -} - -#pragma mark - MGLMapViewDelegate - -- (MGLAnnotationView*)mapView:(MGLMapView *)mapView viewForAnnotation:(id)annotation { - if (self.viewForAnnotation) { - return self.viewForAnnotation(mapView, annotation); - } - - return nil; -} - -- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style { - XCTAssertNotNil(mapView.style); - XCTAssertEqual(mapView.style, style); - - [self.styleLoadingExpectation fulfill]; -} - -- (void)mapViewDidFinishRenderingFrame:(MGLMapView *)mapView fullyRendered:(__unused BOOL)fullyRendered { - [self.renderFinishedExpectation fulfill]; - self.renderFinishedExpectation = nil; -} - -- (void)mapView:(MGLMapView *)mapView regionWillChangeAnimated:(BOOL)animated { - if (self.regionWillChange) { - self.regionWillChange(mapView, animated); - } -} - -- (void)mapViewRegionIsChanging:(MGLMapView *)mapView { - if (self.regionIsChanging) { - self.regionIsChanging(mapView); - } -} - -- (void)mapView:(MGLMapView *)mapView regionDidChangeWithReason:(MGLCameraChangeReason)reason animated:(BOOL)animated { - if (self.regionDidChange) { - self.regionDidChange(mapView, reason, animated); - } -} - -- (CGPoint)mapViewUserLocationAnchorPoint:(MGLMapView *)mapView { - if (self.mapViewUserLocationAnchorPoint) { - return self.mapViewUserLocationAnchorPoint(mapView); - } - return CGPointZero; -} - -- (BOOL)mapView:(MGLMapView *)mapView annotationCanShowCallout:(id)annotation { - if (self.mapViewAnnotationCanShowCalloutForAnnotation) { - return self.mapViewAnnotationCanShowCalloutForAnnotation(mapView, annotation); - } - return NO; -} - -- (id)mapView:(MGLMapView *)mapView calloutViewForAnnotation:(id)annotation { - if (self.mapViewCalloutViewForAnnotation) { - return self.mapViewCalloutViewForAnnotation(mapView, annotation); - } - return nil; -} - -#pragma mark - Utilities - -- (void)waitForMapViewToFinishLoadingStyleWithTimeout:(NSTimeInterval)timeout { - XCTAssertNil(self.styleLoadingExpectation); - self.styleLoadingExpectation = [self expectationWithDescription:@"Map view should finish loading style."]; - [self waitForExpectations:@[self.styleLoadingExpectation] timeout:timeout]; - self.styleLoadingExpectation = nil; -} - -- (void)waitForMapViewToBeRenderedWithTimeout:(NSTimeInterval)timeout { - XCTAssertNil(self.renderFinishedExpectation); - [self.mapView setNeedsRerender]; - self.renderFinishedExpectation = [self expectationWithDescription:@"Map view should be rendered"]; - [self waitForExpectations:@[self.renderFinishedExpectation] timeout:timeout]; - self.renderFinishedExpectation = nil; -} - -- (void)waitForExpectations:(NSArray *)expectations timeout:(NSTimeInterval)seconds { - - NSTimer *timer; - - if (@available(iOS 10.0, *)) { - // We're good. - } - else if (self.mapView) { - // Before iOS 10 it seems that the display link is not called during the - // waitForExpectations below - - timer = [NSTimer scheduledTimerWithTimeInterval:1.0/30.0 - target:self - selector:@selector(updateMapViewDisplayLinkFromTimer:) - userInfo:nil - repeats:YES]; - } - - [super waitForExpectations:expectations timeout:seconds]; - [timer invalidate]; -} - -- (void)updateMapViewDisplayLinkFromTimer:(NSTimer *)timer { - [self.mapView updateFromDisplayLink:nil]; -} - -- (MGLStyle *)style { - return self.mapView.style; -} - -@end diff --git a/platform/ios/Integration Tests/MGLMapViewPendingBlockTests.m b/platform/ios/Integration Tests/MGLMapViewPendingBlockTests.m deleted file mode 100644 index c7925d7896b..00000000000 --- a/platform/ios/Integration Tests/MGLMapViewPendingBlockTests.m +++ /dev/null @@ -1,366 +0,0 @@ -#import "MGLMapViewIntegrationTest.h" -#import "MGLTestUtility.h" - -@interface MGLMapView (MGLMapViewPendingBlockTests) -@property (nonatomic) NSMutableArray *pendingCompletionBlocks; -- (void)pauseRendering:(__unused NSNotification *)notification; -@end - -@interface MGLMapViewPendingBlockTests : MGLMapViewIntegrationTest -@property (nonatomic, copy) void (^observation)(NSDictionary*); -@property (nonatomic) BOOL completionHandlerCalled; -@end - -@implementation MGLMapViewPendingBlockTests - -- (void)testSetCenterCoordinate { - __typeof__(self) weakSelf = self; - - void (^transition)(dispatch_block_t) = ^(dispatch_block_t completion) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf) { - [strongSelf.mapView setCenterCoordinate:CLLocationCoordinate2DMake(10.0, 10.0) - zoomLevel:10.0 - direction:0 - animated:NO - completionHandler:completion]; - } - else { - completion(); - } - }; - - [self internalTestCompletionBlockAddedToPendingForTestName:NSStringFromSelector(_cmd) - transition:transition - addToPendingCallback:nil]; -} - -- (void)testSetCenterCoordinateAnimated { - __typeof__(self) weakSelf = self; - - void (^transition)(dispatch_block_t) = ^(dispatch_block_t completion) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf) { - [strongSelf.mapView setCenterCoordinate:CLLocationCoordinate2DMake(10.0, 10.0) - zoomLevel:10.0 - direction:0 - animated:YES - completionHandler:completion]; - } - else { - completion(); - } - }; - - [self internalTestCompletionBlockAddedToPendingForTestName:NSStringFromSelector(_cmd) - transition:transition - addToPendingCallback:nil]; -} - -- (void)testSetVisibleCoordinateBounds { - __typeof__(self) weakSelf = self; - - void (^transition)(dispatch_block_t) = ^(dispatch_block_t completion) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf) { - MGLCoordinateBounds unitBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(1, 1)); - [strongSelf.mapView setVisibleCoordinateBounds:unitBounds - edgePadding:UIEdgeInsetsZero - animated:NO - completionHandler:completion]; - } - else { - completion(); - } - }; - - [self internalTestCompletionBlockAddedToPendingForTestName:NSStringFromSelector(_cmd) - transition:transition - addToPendingCallback:nil]; -} - -- (void)testSetVisibleCoordinateBoundsAnimated { - __typeof__(self) weakSelf = self; - - void (^transition)(dispatch_block_t) = ^(dispatch_block_t completion) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf) { - MGLCoordinateBounds unitBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(1, 1)); - [strongSelf.mapView setVisibleCoordinateBounds:unitBounds - edgePadding:UIEdgeInsetsZero - animated:YES - completionHandler:completion]; - } - else { - completion(); - } - }; - - [self internalTestCompletionBlockAddedToPendingForTestName:NSStringFromSelector(_cmd) - transition:transition - addToPendingCallback:nil]; -} - -- (void)testSetCamera { - __typeof__(self) weakSelf = self; - - void (^transition)(dispatch_block_t) = ^(dispatch_block_t completion) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf) { - MGLCoordinateBounds unitBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(1, 1)); - MGLMapCamera *camera = [strongSelf.mapView cameraThatFitsCoordinateBounds:unitBounds]; - - [strongSelf.mapView setCamera:camera withDuration:0.0 animationTimingFunction:nil completionHandler:completion]; - } - else { - completion(); - } - }; - - [self internalTestCompletionBlockAddedToPendingForTestName:NSStringFromSelector(_cmd) - transition:transition - addToPendingCallback:nil]; -} - -- (void)testSetCameraAnimated { - __typeof__(self) weakSelf = self; - - void (^transition)(dispatch_block_t) = ^(dispatch_block_t completion) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf) { - MGLCoordinateBounds unitBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(1, 1)); - MGLMapCamera *camera = [strongSelf.mapView cameraThatFitsCoordinateBounds:unitBounds]; - - [strongSelf.mapView setCamera:camera withDuration:0.3 animationTimingFunction:nil completionHandler:completion]; - } - else { - completion(); - } - }; - - [self internalTestCompletionBlockAddedToPendingForTestName:NSStringFromSelector(_cmd) - transition:transition - addToPendingCallback:nil]; -} - -- (void)testFlyToCamera { - __typeof__(self) weakSelf = self; - - void (^transition)(dispatch_block_t) = ^(dispatch_block_t completion) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf) { - MGLCoordinateBounds unitBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(1, 1)); - MGLMapCamera *camera = [strongSelf.mapView cameraThatFitsCoordinateBounds:unitBounds]; - - [strongSelf.mapView flyToCamera:camera withDuration:0.0 completionHandler:completion]; - } - else { - completion(); - } - }; - - [self internalTestCompletionBlockAddedToPendingForTestName:NSStringFromSelector(_cmd) - transition:transition - addToPendingCallback:nil]; -} - -- (void)testFlyToCameraAnimated { - - __typeof__(self) weakSelf = self; - - void (^transition)(dispatch_block_t) = ^(dispatch_block_t completion) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf) { - MGLCoordinateBounds unitBounds = MGLCoordinateBoundsMake(CLLocationCoordinate2DMake(0, 0), CLLocationCoordinate2DMake(1, 1)); - MGLMapCamera *camera = [strongSelf.mapView cameraThatFitsCoordinateBounds:unitBounds]; - - [strongSelf.mapView flyToCamera:camera withDuration:0.3 completionHandler:completion]; - } - else { - completion(); - } - }; - - [self internalTestCompletionBlockAddedToPendingForTestName:NSStringFromSelector(_cmd) - transition:transition - addToPendingCallback:nil]; -} - - -#pragma mark - test interrupting regular rendering - -- (void)testSetCenterCoordinateSetHidden { - - __typeof__(self) weakSelf = self; - - void (^transition)(dispatch_block_t) = ^(dispatch_block_t completion) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf) { - [strongSelf.mapView setCenterCoordinate:CLLocationCoordinate2DMake(10.0, 10.0) - zoomLevel:10.0 - direction:0 - animated:NO - completionHandler:completion]; - } - else { - completion(); - } - }; - - dispatch_block_t addedToPending = ^{ - __typeof__(self) strongSelf = weakSelf; - - MGLTestAssert(strongSelf, !strongSelf.completionHandlerCalled); - - // Now hide the mapview - strongSelf.mapView.hidden = YES; - - MGLTestAssert(strongSelf, strongSelf.completionHandlerCalled); - }; - - [self internalTestCompletionBlockAddedToPendingForTestName:NSStringFromSelector(_cmd) - transition:transition - addToPendingCallback:addedToPending]; -} - -- (void)testSetCenterCoordinatePauseRendering { - - __typeof__(self) weakSelf = self; - - void (^transition)(dispatch_block_t) = ^(dispatch_block_t completion) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf) { - [strongSelf.mapView setCenterCoordinate:CLLocationCoordinate2DMake(10.0, 10.0) - zoomLevel:10.0 - direction:0 - animated:NO - completionHandler:completion]; - } - else { - completion(); - } - }; - - dispatch_block_t addedToPending = ^{ - __typeof__(self) strongSelf = weakSelf; - - MGLTestAssert(strongSelf, !strongSelf.completionHandlerCalled); - - // Pause rendering, stopping display link - [strongSelf.mapView pauseRendering:nil]; - - MGLTestAssert(strongSelf, strongSelf.completionHandlerCalled); - }; - - [self internalTestCompletionBlockAddedToPendingForTestName:NSStringFromSelector(_cmd) - transition:transition - addToPendingCallback:addedToPending]; -} - -- (void)testSetCenterCoordinateRemoveFromSuperview { - - __typeof__(self) weakSelf = self; - - void (^transition)(dispatch_block_t) = ^(dispatch_block_t completion) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf) { - [strongSelf.mapView setCenterCoordinate:CLLocationCoordinate2DMake(10.0, 10.0) - zoomLevel:10.0 - direction:0 - animated:NO - completionHandler:completion]; - } - else { - completion(); - } - }; - - dispatch_block_t addedToPending = ^{ - __typeof__(self) strongSelf = weakSelf; - - MGLTestAssert(strongSelf, !strongSelf.completionHandlerCalled); - - // Remove from window, triggering validateDisplayLink - [strongSelf.mapView removeFromSuperview]; - - MGLTestAssert(strongSelf, strongSelf.completionHandlerCalled); - }; - - [self internalTestCompletionBlockAddedToPendingForTestName:NSStringFromSelector(_cmd) - transition:transition - addToPendingCallback:addedToPending]; -} - -#pragma mark - Shared utility methods - -- (void)internalTestCompletionBlockAddedToPendingForTestName:(NSString *)testName - transition:(void (^)(dispatch_block_t))transition - addToPendingCallback:(dispatch_block_t)addToPendingCallback { - - XCTestExpectation *expectation = [self expectationWithDescription:testName]; - - __weak __typeof__(self) myself = self; - - dispatch_block_t block = ^{ - myself.completionHandlerCalled = YES; - [expectation fulfill]; - }; - - XCTAssertNotNil(transition); - transition(block); - - XCTAssert(!self.completionHandlerCalled); - XCTAssert(self.mapView.pendingCompletionBlocks.count == 0); - - __block BOOL blockAddedToPendingBlocks = NO; - - // Observes changes to pendingCompletionBlocks (including additions) - self.observation = ^(NSDictionary *change){ - - NSLog(@"change = %@ count = %lu", change, myself.mapView.pendingCompletionBlocks.count); - - NSArray *value = change[NSKeyValueChangeNewKey]; - - MGLTestAssert(myself, [value isKindOfClass:[NSArray class]]); - - if (value.count > 0) { - MGLTestAssert(myself, [value containsObject:block]); - MGLTestAssert(myself, !blockAddedToPendingBlocks); - if ([myself.mapView.pendingCompletionBlocks containsObject:block]) { - blockAddedToPendingBlocks = YES; - - if (addToPendingCallback) { - addToPendingCallback(); - } - } - } - }; - - [self.mapView addObserver:self forKeyPath:@"pendingCompletionBlocks" options:NSKeyValueObservingOptionNew context:_cmd]; - - [self waitForExpectations:@[expectation] timeout:0.5]; - - XCTAssert(blockAddedToPendingBlocks); - XCTAssert(self.completionHandlerCalled); - XCTAssert(self.mapView.pendingCompletionBlocks.count == 0); - - [self.mapView removeObserver:self forKeyPath:@"pendingCompletionBlocks" context:_cmd]; -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if (self.observation) { - self.observation(change); - } -} -@end diff --git a/platform/ios/Integration Tests/MGLShapeSourceTests.m b/platform/ios/Integration Tests/MGLShapeSourceTests.m deleted file mode 100644 index 836118450e8..00000000000 --- a/platform/ios/Integration Tests/MGLShapeSourceTests.m +++ /dev/null @@ -1,163 +0,0 @@ -// -// MBShapeSourceTests.m -// integration -// -// Created by Julian Rex on 4/5/18. -// Copyright © 2018 Mapbox. All rights reserved. -// - -#import "MGLMapViewIntegrationTest.h" - -@interface MGLShapeSourceTests : MGLMapViewIntegrationTest -@end - -@implementation MGLShapeSourceTests - -- (void)testSettingShapeSourceToNilInRegionDidChange { - - NSMutableArray *features = [[NSMutableArray alloc] init]; - - for (NSUInteger i = 0; i <= 180; i+=5) { - CLLocationCoordinate2D coord[4] = { - CLLocationCoordinate2DMake(round(0), round(i)), - CLLocationCoordinate2DMake(round(20), round(i)), - CLLocationCoordinate2DMake(round(0), round(i / 2 )), - CLLocationCoordinate2DMake(round(20), round(i / 2))}; - - MGLPolygonFeature *feature = [MGLPolygonFeature polygonWithCoordinates:coord count:4]; - [features addObject:feature]; - } - - MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"source" features:features options:nil]; - [self.style addSource:shapeSource]; - - MGLFillStyleLayer *layer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"layer" source:shapeSource]; - layer.fillOpacity = [NSExpression expressionForConstantValue:@0.5]; - [self.style addLayer:layer]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"regionDidChange expectation"]; - expectation.expectedFulfillmentCount = 1; - expectation.assertForOverFulfill = YES; - - __weak typeof(self) weakself = self; - __block NSInteger delegateCallCount = 0; - - self.regionDidChange = ^(MGLMapView *mapView, MGLCameraChangeReason reason, BOOL animated) { - - MGLShapeSourceTests *strongSelf = weakself; - - if (!strongSelf) - return; - - delegateCallCount++; - - // Setting the shapeSource.shape = nil, was causing an infinite loop, so here - // we check for a runaway call. 10 here is arbitrary. We could argue that this - // should check that the call count is only 1, however in this case we particularly - // want to check for the infinite loop. - // See https://github.com/mapbox/mapbox-gl-native/issues/11180 - - if (delegateCallCount > 10) { - MGLTestFail(strongSelf); - } - else { - shapeSource.shape = nil; - } - - [expectation fulfill]; - }; - - // setCenterCoordinate is NOT animated here. - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(10.0, 10.0)]; - [self waitForExpectations:@[expectation] timeout:5.0]; -} - -- (void)testSettingShapeSourceToNilInRegionIsChanging { - - NSMutableArray *features = [[NSMutableArray alloc] init]; - - for (NSUInteger i = 0; i <= 180; i+=5) { - CLLocationCoordinate2D coord[4] = { - CLLocationCoordinate2DMake(round(0), round(i)), - CLLocationCoordinate2DMake(round(20), round(i)), - CLLocationCoordinate2DMake(round(0), round(i / 2 )), - CLLocationCoordinate2DMake(round(20), round(i / 2))}; - - MGLPolygonFeature *feature = [MGLPolygonFeature polygonWithCoordinates:coord count:4]; - [features addObject:feature]; - } - - MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"source" features:features options:nil]; - [self.style addSource:shapeSource]; - - MGLFillStyleLayer *layer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"layer" source:shapeSource]; - layer.fillOpacity = [NSExpression expressionForConstantValue:@0.5]; - [self.style addLayer:layer]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"regionDidChange expectation"]; - expectation.expectedFulfillmentCount = 1; - expectation.assertForOverFulfill = YES; - - __block NSInteger delegateCallCount = 0; - __weak typeof(self) weakself = self; - - self.regionIsChanging = ^(MGLMapView *mapView) { - // See https://github.com/mapbox/mapbox-gl-native/issues/11180 - shapeSource.shape = nil; - }; - - self.regionDidChange = ^(MGLMapView *mapView, MGLCameraChangeReason reason, BOOL animated) { - - delegateCallCount++; - - if (delegateCallCount > 1) { - MGLTestFail(weakself); - } - - [expectation fulfill]; - }; - - // Should take MGLAnimationDuration seconds (0.3) - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(10.0, 10.0) animated:YES]; - [self waitForExpectations:@[expectation] timeout:1.0]; -} - -- (void)testShapeSourceWithLineDistanceMetrics { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(9.6315313, 52.4133574), - CLLocationCoordinate2DMake(24.9410248, 60.1733244)}; - - MGLPolylineFeature *polylineFeature = [MGLPolylineFeature polylineWithCoordinates:coordinates count:sizeof(coordinates)/sizeof(coordinates[0])]; - NSDictionary *options = @{MGLShapeSourceOptionLineDistanceMetrics: @YES}; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"route" shape:polylineFeature options:options]; - MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"lineLayer" source:source]; - - [self.style addSource:source]; - [self.style addLayer:lineLayer]; - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(9.6315313, 52.4133574) animated:YES]; - - XCTestExpectation *expectation = [self expectationWithDescription:@"regionDidChange expectation"]; - expectation.expectedFulfillmentCount = 1; - expectation.assertForOverFulfill = YES; - - __weak id weakself = self; - self.regionDidChange = ^(MGLMapView *mapView, MGLCameraChangeReason reason, BOOL animated) { - - id strongSelf = weakself; - if (!strongSelf) - return; - - NSArray *features = [source featuresMatchingPredicate:nil]; - MGLTestAssert(strongSelf, features.count == 1UL, @"Should contain one Feature"); - - MGLPolylineFeature *feature = [features objectAtIndex:0]; - MGLTestAssertNotNil(strongSelf, [feature.attributes objectForKey:@"mapbox_clip_start"], @"Attributes should contain mapbox_clip_start property"); - MGLTestAssertNotNil(strongSelf, [feature.attributes objectForKey:@"mapbox_clip_end"], @"Attributes should contain mapbox_clip_end property"); - - [expectation fulfill]; - }; - - [self waitForExpectations:@[expectation] timeout:1.0]; -} - -@end diff --git a/platform/ios/Integration Tests/MGLSourceTests.swift b/platform/ios/Integration Tests/MGLSourceTests.swift deleted file mode 100644 index 69fa0182b5d..00000000000 --- a/platform/ios/Integration Tests/MGLSourceTests.swift +++ /dev/null @@ -1,45 +0,0 @@ -import XCTest - -class MGLSourceTests: MGLMapViewIntegrationTest { - - // See testForRaisingExceptionsOnStaleStyleObjects for Obj-C sibling. - func testForRaisingExceptionsOnStaleStyleObjectsOnRemoveFromMapView() { - - guard - let configURL = URL(string: "mapbox://examples.2uf7qges") else { - XCTFail() - return - } - - let source = MGLVectorTileSource(identifier: "trees", configurationURL: configURL) - mapView.style?.addSource(source) - - let bundle = Bundle(for: type(of: self)) - - guard let styleURL = bundle.url(forResource: "one-liner", withExtension: "json") else { - XCTFail() - return - } - - styleLoadingExpectation = nil; - - mapView.centerCoordinate = CLLocationCoordinate2D(latitude : 38.897, longitude : -77.039) - mapView.zoomLevel = 10.5 - mapView.styleURL = styleURL - - waitForMapViewToFinishLoadingStyle(withTimeout: 10.0) - - let expect = expectation(description: "Remove source should error") - - do { - try mapView.style?.removeSource(source, error: ()) - } - catch let error as NSError { - XCTAssertEqual(error.domain, MGLErrorDomain) - XCTAssertEqual(error.code, MGLErrorCode.sourceCannotBeRemovedFromStyle.rawValue) - expect.fulfill() - } - - wait(for: [expect], timeout: 0.1) - } -} diff --git a/platform/ios/Integration Tests/MGLStyleLayerIntegrationTests.m b/platform/ios/Integration Tests/MGLStyleLayerIntegrationTests.m deleted file mode 100644 index f5f2f957d3c..00000000000 --- a/platform/ios/Integration Tests/MGLStyleLayerIntegrationTests.m +++ /dev/null @@ -1,112 +0,0 @@ -#import "MGLMapViewIntegrationTest.h" - -@interface MGLStyleLayerIntegrationTests : MGLMapViewIntegrationTest -@end - -@implementation MGLStyleLayerIntegrationTests - -- (MGLCircleStyleLayer*)setupCircleStyleLayer { - // Adapted from https://docs.mapbox.com/ios/examples/dds-circle-layer/ - - // "mapbox://examples.2uf7qges" is a tileset ID. For more - // more information, see docs.mapbox.com/help/glossary/tileset-id/ - MGLSource *source = [[MGLVectorTileSource alloc] initWithIdentifier:@"trees" configurationURL:[NSURL URLWithString:@"mapbox://examples.2uf7qges"]]; - [self.mapView.style addSource:source]; - - MGLCircleStyleLayer *layer = [[MGLCircleStyleLayer alloc] initWithIdentifier: @"tree-style" source:source]; - - // The source name from the source's TileJSON metadata: mapbox.com/api-documentation/maps/#retrieve-tilejson-metadata - layer.sourceLayerIdentifier = @"yoshino-trees-a0puw5"; - - return layer; -} - -- (void)testForInterpolatingExpressionRenderCrashWithEmptyStops { - // Tests: https://github.com/mapbox/mapbox-gl-native/issues/9539 - // Adapted from https://docs.mapbox.com/ios/examples/dds-circle-layer/ - self.mapView.centerCoordinate = CLLocationCoordinate2DMake(38.897,-77.039); - self.mapView.zoomLevel = 10.5; - - MGLCircleStyleLayer *layer = [self setupCircleStyleLayer]; - - NSExpression *interpExpression = [NSExpression mgl_expressionForInterpolatingExpression:NSExpression.zoomLevelVariableExpression - withCurveType:MGLExpressionInterpolationModeLinear - parameters:nil - stops:[NSExpression expressionForConstantValue:@{}]]; - - XCTAssertThrowsSpecificNamed((layer.circleColor = interpExpression), NSException, NSInvalidArgumentException); - - [self.mapView.style addLayer:layer]; - [self waitForMapViewToBeRenderedWithTimeout:10]; -} - -- (void)testForSteppingExpressionRenderCrashWithEmptyStops { - // Tests: https://github.com/mapbox/mapbox-gl-native/issues/9539 - // Adapted from https://docs.mapbox.com/ios/examples/dds-circle-layer/ - self.mapView.centerCoordinate = CLLocationCoordinate2DMake(38.897,-77.039); - self.mapView.zoomLevel = 10.5; - - MGLCircleStyleLayer *layer = [self setupCircleStyleLayer]; - - NSExpression *steppingExpression = [NSExpression mgl_expressionForSteppingExpression:NSExpression.zoomLevelVariableExpression - fromExpression:[NSExpression expressionForConstantValue:[UIColor greenColor]] - stops:[NSExpression expressionForConstantValue:@{}]]; - - XCTAssertThrowsSpecificNamed((layer.circleColor = steppingExpression), NSException, NSInvalidArgumentException); - - [self.mapView.style addLayer:layer]; - [self waitForMapViewToBeRenderedWithTimeout:10]; -} - -- (void)testForRaisingExceptionsOnStaleStyleObjects { - self.mapView.centerCoordinate = CLLocationCoordinate2DMake(38.897,-77.039); - self.mapView.zoomLevel = 10.5; - - MGLVectorTileSource *source = [[MGLVectorTileSource alloc] initWithIdentifier:@"trees" configurationURL:[NSURL URLWithString:@"mapbox://examples.2uf7qges"]]; - [self.mapView.style addSource:source]; - - self.styleLoadingExpectation = nil; - [self.mapView setStyleURL:[[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]]; - [self waitForMapViewToFinishLoadingStyleWithTimeout:10]; - - XCTAssertNotNil(source.description); - XCTAssertThrowsSpecificNamed(source.configurationURL, NSException, MGLInvalidStyleSourceException, @"MGLSource should raise an exception if its core peer got invalidated"); -} - -- (void)testForRaisingExceptionsOnStaleLayerObject { - self.mapView.centerCoordinate = CLLocationCoordinate2DMake(38.897,-77.039); - self.mapView.zoomLevel = 10.5; - - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"sourceID" shape:feature options:nil]; - - // Testing generated layers - MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"lineLayerID" source:source]; - MGLCircleStyleLayer *circleLayer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"circleLayerID" source:source]; - - [self.mapView.style addSource:source]; - [self.mapView.style addLayer:lineLayer]; - [self.mapView.style addLayer:circleLayer]; - - XCTAssertNoThrow(lineLayer.isVisible); - XCTAssertNoThrow(circleLayer.isVisible); - - XCTAssert(![source.description containsString:@""]); - XCTAssert(![lineLayer.description containsString:@""]); - XCTAssert(![circleLayer.description containsString:@""]); - - self.styleLoadingExpectation = nil; - [self.mapView setStyleURL:[[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]]; - [self waitForMapViewToFinishLoadingStyleWithTimeout:10]; - - XCTAssert([source.description containsString:@""]); - XCTAssert([lineLayer.description containsString:@""]); - XCTAssert([circleLayer.description containsString:@""]); - - XCTAssertThrowsSpecificNamed(lineLayer.isVisible, NSException, MGLInvalidStyleLayerException, @"Layer should raise an exception if its core peer got invalidated"); - XCTAssertThrowsSpecificNamed(circleLayer.isVisible, NSException, MGLInvalidStyleLayerException, @"Layer should raise an exception if its core peer got invalidated"); - - XCTAssertThrowsSpecificNamed([self.mapView.style removeLayer:lineLayer], NSException, NSInvalidArgumentException, @"Style should raise an exception when attempting to remove an invalid layer (e.g. if its core peer got invalidated)"); - XCTAssertThrowsSpecificNamed([self.mapView.style removeLayer:circleLayer], NSException, NSInvalidArgumentException, @"Style should raise an exception when attempting to remove an invalid layer (e.g. if its core peer got invalidated)"); -} -@end diff --git a/platform/ios/Integration Tests/MGLStyleURLIntegrationTest.m b/platform/ios/Integration Tests/MGLStyleURLIntegrationTest.m deleted file mode 100644 index 22de4c6aa5f..00000000000 --- a/platform/ios/Integration Tests/MGLStyleURLIntegrationTest.m +++ /dev/null @@ -1,38 +0,0 @@ -#import "MGLMapViewIntegrationTest.h" - -@interface MGLStyleURLIntegrationTest : MGLMapViewIntegrationTest -@end - -@implementation MGLStyleURLIntegrationTest - -- (void)internalTestWithStyleSelector:(SEL)selector { - self.mapView.styleURL = [MGLStyle performSelector:selector]; - [self waitForMapViewToFinishLoadingStyleWithTimeout:5]; -} - - -- (void)testLoadingStreetsStyleURL🔒 { - [self internalTestWithStyleSelector:@selector(streetsStyleURL)]; -} - -- (void)testLoadingOutdoorsStyleURL🔒 { - [self internalTestWithStyleSelector:@selector(outdoorsStyleURL)]; -} - -- (void)testLoadingLightStyleURL🔒 { - [self internalTestWithStyleSelector:@selector(lightStyleURL)]; -} - -- (void)testLoadingDarkStyleURL🔒 { - [self internalTestWithStyleSelector:@selector(darkStyleURL)]; -} - -- (void)testLoadingSatelliteStyleURL🔒 { - [self internalTestWithStyleSelector:@selector(satelliteStyleURL)]; -} - -- (void)testLoadingSatelliteStreetsStyleURL🔒 { - [self internalTestWithStyleSelector:@selector(satelliteStreetsStyleURL)]; -} - -@end diff --git a/platform/ios/Integration Tests/MGLTestLocationManager.h b/platform/ios/Integration Tests/MGLTestLocationManager.h deleted file mode 100644 index e0e6f25bb28..00000000000 --- a/platform/ios/Integration Tests/MGLTestLocationManager.h +++ /dev/null @@ -1,10 +0,0 @@ -#import -#import -#import "MGLTestUtility.h" - -@interface MGLTestLocationManager : NSObject -@end - -@interface MGLTestLocationManager() - -@end diff --git a/platform/ios/Integration Tests/MGLTestLocationManager.m b/platform/ios/Integration Tests/MGLTestLocationManager.m deleted file mode 100644 index f9a5a8650f0..00000000000 --- a/platform/ios/Integration Tests/MGLTestLocationManager.m +++ /dev/null @@ -1,44 +0,0 @@ -#import "MGLTestLocationManager.h" - -// Used to supply integration tests with a simulated location manager. -// Methods that are empty are not used within integration tests and are -// therefore unimplemented. - -@implementation MGLTestLocationManager - -@synthesize delegate; - -- (CLAuthorizationStatus)authorizationStatus { return kCLAuthorizationStatusAuthorizedAlways; } - -- (void)setHeadingOrientation:(CLDeviceOrientation)headingOrientation { } - -- (CLDeviceOrientation)headingOrientation { return 90; } - -- (void)requestAlwaysAuthorization { } - -- (void)requestWhenInUseAuthorization { } - -- (void)startUpdatingHeading { } - -// Simulate one location update -- (void)startUpdatingLocation -{ - if ([self.delegate respondsToSelector:@selector(locationManager:didUpdateLocations:)]) { - CLLocation *location = [[CLLocation alloc] initWithLatitude:37.787357 longitude:-122.39899]; - [self.delegate locationManager:self didUpdateLocations:@[location]]; - } -} - -- (void)stopUpdatingHeading { } - -- (void)stopUpdatingLocation { } - -- (void)dismissHeadingCalibrationDisplay { } - -- (void)dealloc { self.delegate = nil; } - -- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { } - -- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)manager { return NO; } - -@end diff --git a/platform/ios/Integration Tests/Snapshotter Tests/MGLMapSnapshotterSwiftTests.swift b/platform/ios/Integration Tests/Snapshotter Tests/MGLMapSnapshotterSwiftTests.swift deleted file mode 100644 index d33a986beb8..00000000000 --- a/platform/ios/Integration Tests/Snapshotter Tests/MGLMapSnapshotterSwiftTests.swift +++ /dev/null @@ -1,77 +0,0 @@ -import XCTest - -class MGLMapSnapshotterSwiftTests: MGLMapViewIntegrationTest { - - // Create snapshot options - private class func snapshotterOptions(size: CGSize) -> MGLMapSnapshotOptions { - let camera = MGLMapCamera() - - let options = MGLMapSnapshotOptions(styleURL: MGLStyle.satelliteStreetsStyleURL, camera: camera, size: size) - - let sw = CLLocationCoordinate2D(latitude: 52.3, longitude: 13.0) - let ne = CLLocationCoordinate2D(latitude: 52.5, longitude: 13.2) - options.coordinateBounds = MGLCoordinateBounds(sw:sw, ne:ne) - - return options - } - - func testCapturingSnapshotterInSnapshotCompletion🔒() { - // See the Obj-C testDeallocatingSnapshotterDuringSnapshot - // This Swift test, is essentially the same except for capturing the snapshotter - - let timeout: TimeInterval = 10.0 - let expectation = self.expectation(description: "snapshot") - - let options = MGLMapSnapshotterSwiftTests.snapshotterOptions(size: mapView.bounds.size) - - let backgroundQueue = DispatchQueue.main - - backgroundQueue.async { - let dg = DispatchGroup() - dg.enter() - - DispatchQueue.main.async { - - let snapshotter = MGLMapSnapshotter(options: options) - - snapshotter.start(completionHandler: { (snapshot, error) in - -// // Without capturing snapshotter: -// XCTAssertNil(snapshot) -// XCTAssertNotNil(error) - - // Capture snapshotter - dump(snapshotter) - XCTAssertNotNil(snapshot) - XCTAssertNil(error) - - dg.leave() - }) - } - - dg.notify(queue: .main) { - expectation.fulfill() - } - } - - wait(for: [expectation], timeout: timeout) - } - - func testSnapshotOverlaySwiftErgonomics🔒() { - let options = MGLMapSnapshotterSwiftTests.snapshotterOptions(size: mapView.bounds.size) - let snapshotter = MGLMapSnapshotter(options: options) - let expectation = self.expectation(description: "snapshot") - expectation.expectedFulfillmentCount = 2 - - snapshotter.start(overlayHandler: { (overlay) in - guard let _ = overlay.context.makeImage() else { - XCTFail() - return - } - expectation.fulfill() - }) { (_, _) in - expectation.fulfill() - } - wait(for: [expectation], timeout: 10) - } -} diff --git a/platform/ios/Integration Tests/Snapshotter Tests/MGLMapSnapshotterTest.m b/platform/ios/Integration Tests/Snapshotter Tests/MGLMapSnapshotterTest.m deleted file mode 100644 index 9ef2054dff9..00000000000 --- a/platform/ios/Integration Tests/Snapshotter Tests/MGLMapSnapshotterTest.m +++ /dev/null @@ -1,537 +0,0 @@ -#import "MGLMapViewIntegrationTest.h" -#import "MGLMapSnapshotter_Private.h" - -@interface MGLMapSnapshotter () -@property (nonatomic) BOOL cancelled; -@end - - -@interface MGLMapSnapshotterTest : MGLMapViewIntegrationTest -@end - -// Convenience func to create snapshotter -MGLMapSnapshotter* snapshotterWithCoordinates(CLLocationCoordinate2D coordinates, CGSize size) { - // Create snapshot options - MGLMapCamera* mapCamera = [[MGLMapCamera alloc] init]; - mapCamera.pitch = 20; - mapCamera.centerCoordinate = coordinates; - MGLMapSnapshotOptions* options = [[MGLMapSnapshotOptions alloc] initWithStyleURL:[MGLStyle satelliteStreetsStyleURL] - camera:mapCamera - size:size]; - options.zoomLevel = 10; - - // Create and start the snapshotter - MGLMapSnapshotter* snapshotter = [[MGLMapSnapshotter alloc] initWithOptions:options]; - return snapshotter; -} - -MGLMapSnapshotter* snapshotterWithBounds(MGLCoordinateBounds bounds, CGSize size) { - - MGLMapCamera* mapCamera = [[MGLMapCamera alloc] init]; - MGLMapSnapshotOptions* options = [[MGLMapSnapshotOptions alloc] initWithStyleURL:[MGLStyle satelliteStreetsStyleURL] - camera:mapCamera - size:size]; - options.coordinateBounds = bounds; - - // Create and start the snapshotter - MGLMapSnapshotter* snapshotter = [[MGLMapSnapshotter alloc] initWithOptions:options]; - return snapshotter; -} - - - -@implementation MGLMapSnapshotterTest - -- (void)testMultipleSnapshotsWithASingleSnapshotter🔒 { - CGSize size = self.mapView.bounds.size; - - XCTestExpectation *expectation = [self expectationWithDescription:@"snapshots"]; - expectation.expectedFulfillmentCount = 2; - expectation.assertForOverFulfill = YES; - - CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(30.0, 30.0); - - MGLMapSnapshotter *snapshotter = snapshotterWithCoordinates(coord, size); - XCTAssertNotNil(snapshotter); - - [snapshotter startWithCompletionHandler:^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { - [expectation fulfill]; - }]; - - @try { - [snapshotter startWithCompletionHandler:^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { - XCTFail(@"Should not be called - but should it?"); - }]; - XCTFail(@"Should not be called"); - } - @catch (NSException *exception) { - XCTAssert(exception.name == NSInternalInconsistencyException); - [expectation fulfill]; - } - - [self waitForExpectations:@[expectation] timeout:10.0]; -} - -- (void)testDeallocatingSnapshotterDuringSnapshot🔒 { - // See also https://github.com/mapbox/mapbox-gl-native/issues/12336 - - NSTimeInterval timeout = 10.0; - XCTestExpectation *expectation = [self expectationWithDescription:@"snapshot"]; - CGSize size = self.mapView.bounds.size; - CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(30.0, 30.0); - - // Test triggering to main queue - dispatch_queue_t backgroundQueue = dispatch_get_main_queue(); -// dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - - __weak __typeof__(self) weakself = self; - - dispatch_async(backgroundQueue, ^{ - - dispatch_group_t dg = dispatch_group_create(); - dispatch_group_enter(dg); - - dispatch_async(dispatch_get_main_queue(), ^{ - MGLMapSnapshotter *snapshotter = snapshotterWithCoordinates(coord, size); - __weak MGLMapSnapshotter *weakSnapshotter = snapshotter; - - [snapshotter startWithCompletionHandler:^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { - // We expect this completion block to be called with an error - __typeof__(self) strongself = weakself; - - MGLTestAssertNil(strongself, snapshot); - MGLTestAssert(strongself, - ([error.domain isEqualToString:MGLErrorDomain] && error.code == MGLErrorCodeSnapshotFailed), - @"Should have errored"); - MGLTestAssertNil(strongself, weakSnapshotter, @"Snapshotter should have been deallocated"); - - dispatch_group_leave(dg); - }]; - }); - - dispatch_group_notify(dg, dispatch_get_main_queue(), ^{ - [expectation fulfill]; - }); - }); - - [self waitForExpectations:@[expectation] timeout:timeout]; -} - -- (void)testSnapshotterUsingNestedDispatchQueues🔒 { - // This is the opposite pair to the above test `testDeallocatingSnapshotterDuringSnapshot` - // The only significant difference is that the snapshotter is a `__block` variable, so - // its lifetime should continue until it's set to nil in the completion block. - // See also https://github.com/mapbox/mapbox-gl-native/issues/12336 - - NSTimeInterval timeout = 10.0; - XCTestExpectation *expectation = [self expectationWithDescription:@"snapshot"]; - CGSize size = self.mapView.bounds.size; - CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(30.0, 30.0); - - // Test triggering to main queue - dispatch_queue_t backgroundQueue = dispatch_get_main_queue(); - // dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - - __weak __typeof__(self) weakself = self; - - dispatch_async(backgroundQueue, ^{ - - dispatch_group_t dg = dispatch_group_create(); - dispatch_group_enter(dg); - - dispatch_async(dispatch_get_main_queue(), ^{ - - __block MGLMapSnapshotter *snapshotter = snapshotterWithCoordinates(coord, size); - - [snapshotter startWithCompletionHandler:^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { - // We expect this completion block to be called with an error - __typeof__(self) strongself = weakself; - MGLTestAssertNotNil(strongself, snapshot); - MGLTestAssertNil(strongself, error, @"Snapshotter should have completed"); - dispatch_group_leave(dg); - snapshotter = nil; - }]; - }); - - dispatch_group_notify(dg, dispatch_get_main_queue(), ^{ - [expectation fulfill]; - }); - }); - - [self waitForExpectations:@[expectation] timeout:timeout]; -} - -- (void)testCancellingSnapshot🔒 { - XCTestExpectation *expectation = [self expectationWithDescription:@"snapshots"]; - expectation.assertForOverFulfill = YES; - expectation.expectedFulfillmentCount = 1; - - CGSize size = self.mapView.bounds.size; - CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(30.0, 30.0); - - MGLMapSnapshotter *snapshotter = snapshotterWithCoordinates(coord, size); - - __weak __typeof__(self) weakself = self; - - [snapshotter startWithCompletionHandler:^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { - // We expect this completion block to be called with an error - __typeof__(self) strongself = weakself; - - MGLTestAssertNil(strongself, snapshot); - MGLTestAssert(strongself, - ([error.domain isEqualToString:MGLErrorDomain] && error.code == MGLErrorCodeSnapshotFailed), - @"Should have been cancelled"); - MGLTestAssert(strongself, snapshotter.cancelled, @"Should have been cancelled"); - [expectation fulfill]; - }]; - - [snapshotter cancel]; - - [self waitForExpectations:@[expectation] timeout:5.0]; -} - -- (void)testAllocatingSnapshotOnBackgroundQueue🔒 { - XCTestExpectation *expectation = [self expectationWithDescription:@"snapshots"]; - - CGSize size = self.mapView.bounds.size; - CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(30.0, 30.0); - - dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INITIATED, QOS_MIN_RELATIVE_PRIORITY); - dispatch_queue_t backgroundQueue = dispatch_queue_create(__PRETTY_FUNCTION__, attr); - - dispatch_async(backgroundQueue, ^{ - - // Create the snapshotter - DO NOT START. - MGLMapSnapshotter* snapshotter = snapshotterWithCoordinates(coord, size); - - dispatch_group_t group = dispatch_group_create(); - dispatch_group_enter(group); - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - dispatch_group_leave(group); - }); - - dispatch_group_wait(group, DISPATCH_TIME_FOREVER); - - snapshotter = nil; - - dispatch_sync(dispatch_get_main_queue(), ^{ - [expectation fulfill]; - }); - }); - - [self waitForExpectations:@[expectation] timeout:2.0]; -} - -- (void)testSnapshotterFromBackgroundQueueShouldFail🔒 { - CGSize size = self.mapView.bounds.size; - CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(30.0, 30.0); - - XCTestExpectation *expectation = [self expectationWithDescription:@"snapshots"]; - expectation.expectedFulfillmentCount = 1; - expectation.assertForOverFulfill = YES; - - __weak __typeof__(self) weakself = self; - - dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INITIATED, QOS_MIN_RELATIVE_PRIORITY); // also for concurrent - dispatch_queue_t backgroundQueue = dispatch_queue_create(__PRETTY_FUNCTION__, attr); - - // Use dispatch_group to keep the backgroundQueue block around (and - // so also the MGLMapSnapshotter - dispatch_group_t group = dispatch_group_create(); - dispatch_group_enter(group); - - dispatch_async(backgroundQueue, ^{ - - MGLMapSnapshotter *snapshotter = snapshotterWithCoordinates(coord, size); - XCTAssertNotNil(snapshotter); - - MGLMapSnapshotCompletionHandler completion = ^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { - // The completion block should not be called - MGLTestFail(weakself); - dispatch_group_leave(group); - }; - - @try { - [snapshotter startWithCompletionHandler:completion]; - MGLTestFail(weakself, @"startWithCompletionHandler: should raise an exception"); - } - @catch (NSException *exception) { - MGLTestAssert(weakself, exception.name == NSInvalidArgumentException); - dispatch_group_leave(group); - } - - // Wait for the snapshot to complete - dispatch_group_wait(group, DISPATCH_TIME_FOREVER); - - snapshotter = nil; - - dispatch_sync(dispatch_get_main_queue(), ^{ - [expectation fulfill]; - }); - }); - - [self waitForExpectations:@[expectation] timeout:60.0]; -} - -- (void)testMultipleSnapshotters🔒🙁 { - NSUInteger numSnapshots = 8; - CGSize size = self.mapView.bounds.size; - - XCTestExpectation *expectation = [self expectationWithDescription:@"snapshots"]; - expectation.expectedFulfillmentCount = numSnapshots; - expectation.assertForOverFulfill = YES; - - __weak __typeof__(self) weakself = self; - - for (size_t run = 0; run < numSnapshots; run++) { - - float ratio = (float)run/(float)numSnapshots; - float lon = (ratio*120.0) + ((1.0-ratio)*54.0); - CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(57.0, lon); - - __block MGLMapSnapshotter *snapshotter; - - // Allocate from an autorelease pool here, to avoid having - // snapshotter retained for longer than we'd like to test. - @autoreleasepool { - snapshotter = snapshotterWithCoordinates(coord, size); - XCTAssertNotNil(snapshotter); - } - - [snapshotter startWithCompletionHandler:^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { - - // This should be the main queue - __typeof__(self) strongself = weakself; - - MGLTestAssertNotNil(strongself, strongself); - - MGLTestAssertNotNil(strongself, snapshot); - MGLTestAssertNotNil(strongself, snapshot.image); - MGLTestAssertNil(strongself, error, @"Snapshot should not error with: %@", error); - - // Change this to XCTAttachmentLifetimeKeepAlways to be able to look at the snapshots after running - XCTAttachment *attachment = [XCTAttachment attachmentWithImage:snapshot.image]; - attachment.lifetime = XCTAttachmentLifetimeDeleteOnSuccess; - [strongself addAttachment:attachment]; - - // Dealloc the snapshotter (by having this line in the block, we - // also retained the snapshotter. Setting to nil should release, as - // this block should be the only thing retaining it (since it was - // allocated from the above autorelease pool) - snapshotter = nil; - - [expectation fulfill]; - }]; - } // end for loop - - [self waitForExpectations:@[expectation] timeout:60.0]; -} - -- (void)testSnapshotPointConversion🔒 { - CGSize size = self.mapView.bounds.size; - - XCTestExpectation *expectation = [self expectationWithDescription:@"snapshot"]; - expectation.expectedFulfillmentCount = 1; - expectation.assertForOverFulfill = YES; - - CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(30.0, 30.0); - - MGLMapSnapshotter *snapshotter = snapshotterWithCoordinates(coord, size); - XCTAssertNotNil(snapshotter); - - __weak __typeof__(self) weakself = self; - - [snapshotter startWithCompletionHandler:^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { - - __typeof__(self) myself = weakself; - - MGLTestAssertNotNil(myself, snapshot); - - CGPoint point = [snapshot pointForCoordinate:coord]; - - CGFloat epsilon = 0.000001; - - MGLTestAssertEqualWithAccuracy(myself, point.x, size.width/2.0, epsilon); - MGLTestAssertEqualWithAccuracy(myself, point.y, size.height/2.0, epsilon); - - CLLocationCoordinate2D coord2 = [snapshot coordinateForPoint:point]; - - MGLTestAssertEqualWithAccuracy(myself, coord.latitude, coord2.latitude, epsilon); - MGLTestAssertEqualWithAccuracy(myself, coord.longitude, coord2.longitude, epsilon); - - [expectation fulfill]; - }]; - - [self waitForExpectations:@[expectation] timeout:10.0]; -} - -- (void)testSnapshotPointConversionCoordinateOrdering🔒 { - CGSize size = self.mapView.bounds.size; - - XCTestExpectation *expectation = [self expectationWithDescription:@"snapshot"]; - expectation.expectedFulfillmentCount = 1; - expectation.assertForOverFulfill = YES; - - CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(30.0, 30.0); - - MGLMapSnapshotter *snapshotter = snapshotterWithCoordinates(coord, size); - XCTAssertNotNil(snapshotter); - - __weak __typeof__(self) weakself = self; - - [snapshotter startWithCompletionHandler:^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { - - __typeof__(self) myself = weakself; - - CGFloat epsilon = 0.000001; - - MGLTestAssertNotNil(myself, snapshot); - - CLLocationCoordinate2D coordTL = [snapshot coordinateForPoint:CGPointZero]; - - MGLTestAssert(myself, coordTL.longitude < coord.longitude); - MGLTestAssert(myself, coordTL.latitude > coord.latitude); - - // And check point - CGPoint tl = [snapshot pointForCoordinate:coordTL]; - MGLTestAssertEqualWithAccuracy(myself, tl.x, 0.0, epsilon); - MGLTestAssertEqualWithAccuracy(myself, tl.y, 0.0, epsilon); - - CLLocationCoordinate2D coordBR = [snapshot coordinateForPoint:CGPointMake(size.width, size.height)]; - - MGLTestAssert(myself, coordBR.longitude > coord.longitude); - MGLTestAssert(myself, coordBR.latitude < coord.latitude); - - [expectation fulfill]; - }]; - - [self waitForExpectations:@[expectation] timeout:10.0]; -} - -- (void)testSnapshotWithOverlayHandlerFailure🔒 { - CGSize size = self.mapView.bounds.size; - - XCTestExpectation *expectation = [self expectationWithDescription:@"snapshot with overlay fails"]; - expectation.expectedFulfillmentCount = 2; - - CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(30.0, 30.0); - - MGLMapSnapshotter *snapshotter = snapshotterWithCoordinates(coord, size); - XCTAssertNotNil(snapshotter); - - [snapshotter startWithOverlayHandler:^(MGLMapSnapshotOverlay *snapshotOverlay) { - XCTAssertNotNil(snapshotOverlay); - - UIGraphicsEndImageContext(); - [expectation fulfill]; - } completionHandler:^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { - XCTAssertNil(snapshot); - XCTAssertNotNil(error); - XCTAssertEqualObjects(error.domain, MGLErrorDomain); - XCTAssertEqual(error.code, MGLErrorCodeSnapshotFailed); - XCTAssertEqualObjects(error.localizedDescription, @"Failed to generate composited snapshot."); - - [expectation fulfill]; - }]; - - [self waitForExpectations:@[expectation] timeout:10.0]; -} - -- (void)testSnapshotWithOverlayHandlerSuccess🔒 { - CGSize size = self.mapView.bounds.size; - CGRect snapshotRect = CGRectMake(0, 0, size.width, size.height); - - XCTestExpectation *expectation = [self expectationWithDescription:@"snapshot with overlay succeeds"]; - expectation.expectedFulfillmentCount = 2; - - CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(30.0, 30.0); - - MGLMapSnapshotter *snapshotter = snapshotterWithCoordinates(coord, size); - XCTAssertNotNil(snapshotter); - - CGFloat scale = snapshotter.options.scale; - - [snapshotter startWithOverlayHandler:^(MGLMapSnapshotOverlay *snapshotOverlay) { - XCTAssertNotNil(snapshotOverlay); - - CGFloat width = CGBitmapContextGetWidth(snapshotOverlay.context); - CGFloat height = CGBitmapContextGetHeight(snapshotOverlay.context); - - CGRect contextRect = CGContextConvertRectToDeviceSpace(snapshotOverlay.context, CGRectMake(0, 0, 1, 0)); - CGFloat scaleFromContext = contextRect.size.width; - XCTAssertEqual(scale, scaleFromContext); - XCTAssertEqual(width, size.width*scale); - XCTAssertEqual(height, size.height*scale); - - CGContextSetFillColorWithColor(snapshotOverlay.context, [UIColor.greenColor CGColor]); - CGContextSetAlpha(snapshotOverlay.context, 0.2); - CGContextAddRect(snapshotOverlay.context, snapshotRect); - CGContextFillRect(snapshotOverlay.context, snapshotRect); - [expectation fulfill]; - } completionHandler:^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { - XCTAssertNil(error); - XCTAssertNotNil(snapshot); - [expectation fulfill]; - }]; - - [self waitForExpectations:@[expectation] timeout:10.0]; -} - -- (void)testSnapshotCoordinatesWithOverlayHandler🔒 { - CGSize size = self.mapView.bounds.size; - - XCTestExpectation *expectation = [self expectationWithDescription:@"snapshot with overlay succeeds"]; - expectation.expectedFulfillmentCount = 2; - - CLLocationCoordinate2D london = { .latitude = 51.5074, .longitude = -0.1278 }; - CLLocationCoordinate2D paris = { .latitude = 48.8566, .longitude = 2.3522 }; - - MGLCoordinateBounds bounds = { - .ne = london, - .sw = paris - }; - - MGLMapSnapshotter *snapshotter = snapshotterWithBounds(bounds, size); - XCTAssertNotNil(snapshotter); - - void (^testCoordinates)(id) = ^(id snapshot){ - XCTAssertNotNil(snapshot); - - CGPoint londonPoint = [snapshot pointForCoordinate:london]; - CGPoint parisPoint = [snapshot pointForCoordinate:paris]; - - XCTAssertEqualWithAccuracy(londonPoint.x, 0, 0.1); - XCTAssertEqualWithAccuracy(parisPoint.x, size.width, 0.1); - - // Vertically, London and Paris are inset (due to the size vs coordinate bounds) - XCTAssert(parisPoint.y > londonPoint.y); - XCTAssert(londonPoint.y > 0.0); - XCTAssert(parisPoint.y < size.height); - - CLLocationCoordinate2D london2 = [snapshot coordinateForPoint:londonPoint]; - CLLocationCoordinate2D paris2 = [snapshot coordinateForPoint:parisPoint]; - - XCTAssertEqualWithAccuracy(london.latitude, london2.latitude, 0.0000001); - XCTAssertEqualWithAccuracy(london.longitude, london2.longitude, 0.0000001); - XCTAssertEqualWithAccuracy(paris.latitude, paris2.latitude, 0.0000001); - XCTAssertEqualWithAccuracy(paris.longitude, paris2.longitude, 0.0000001); - }; - - [snapshotter startWithOverlayHandler:^(MGLMapSnapshotOverlay *snapshotOverlay) { - XCTAssert([snapshotOverlay conformsToProtocol:@protocol(MGLMapSnapshotProtocol)]); - testCoordinates((id)snapshotOverlay); - - [expectation fulfill]; - } completionHandler:^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable error) { - XCTAssert([snapshot conformsToProtocol:@protocol(MGLMapSnapshotProtocol)]); - testCoordinates((id)snapshot); - - [expectation fulfill]; - }]; - - [self waitForExpectations:@[expectation] timeout:10.0]; -} - - -@end diff --git a/platform/ios/Integration Tests/integration-Bridging-Header.h b/platform/ios/Integration Tests/integration-Bridging-Header.h deleted file mode 100644 index 55b44ea57b9..00000000000 --- a/platform/ios/Integration Tests/integration-Bridging-Header.h +++ /dev/null @@ -1,5 +0,0 @@ -// -// Use this file to import your target's public headers that you would like to expose to Swift. -// -#import "MGLMapViewIntegrationTest.h" - diff --git a/platform/ios/Mapbox-iOS-SDK-snapshot-dynamic.podspec b/platform/ios/Mapbox-iOS-SDK-snapshot-dynamic.podspec deleted file mode 100644 index 84ce50bb4fc..00000000000 --- a/platform/ios/Mapbox-iOS-SDK-snapshot-dynamic.podspec +++ /dev/null @@ -1,32 +0,0 @@ -Pod::Spec.new do |m| - - version = '5.5.0-alpha.2' - - m.name = 'Mapbox-iOS-SDK-snapshot-dynamic' - m.version = "#{version}-snapshot" - - m.summary = 'Open source vector map solution for iOS with full styling capabilities.' - m.description = 'Open source, OpenGL-based vector map solution for iOS with full styling capabilities and Cocoa Touch APIs.' - m.homepage = 'https://docs.mapbox.com/ios/maps/' - m.license = { :type => 'BSD', :file => 'LICENSE.md' } - m.author = { 'Mapbox' => 'mobile@mapbox.com' } - m.screenshot = "https://docs.mapbox.com/ios/api/maps/#{version}/img/screenshot.png" - m.social_media_url = 'https://twitter.com/mapbox' - m.documentation_url = 'https://docs.mapbox.com/ios/api/maps/' - - m.source = { - :http => "https://mapbox.s3.amazonaws.com/mapbox-gl-native/ios/builds/mapbox-ios-sdk-snapshot-dynamic.zip", - :flatten => true - } - - m.platform = :ios - m.ios.deployment_target = '9.0' - - m.requires_arc = true - - m.vendored_frameworks = 'dynamic/Mapbox.framework' - m.module_name = 'Mapbox' - - m.preserve_path = '**/*.bcsymbolmap' - -end diff --git a/platform/ios/Mapbox-iOS-SDK-stripped.podspec b/platform/ios/Mapbox-iOS-SDK-stripped.podspec deleted file mode 100644 index 51d7087c635..00000000000 --- a/platform/ios/Mapbox-iOS-SDK-stripped.podspec +++ /dev/null @@ -1,32 +0,0 @@ -Pod::Spec.new do |m| - - version = '5.5.0-alpha.2' - - m.name = 'Mapbox-iOS-SDK-stripped' - m.version = "#{version}-stripped" - - m.summary = 'Open source vector map solution for iOS with full styling capabilities.' - m.description = 'Open source, OpenGL-based vector map solution for iOS with full styling capabilities and Cocoa Touch APIs.' - m.homepage = 'https://docs.mapbox.com/ios/maps/' - m.license = { :type => 'BSD', :file => 'LICENSE.md' } - m.author = { 'Mapbox' => 'mobile@mapbox.com' } - m.screenshot = "https://docs.mapbox.com/ios/api/maps/#{version}/img/screenshot.png" - m.social_media_url = 'https://twitter.com/mapbox' - m.documentation_url = 'https://docs.mapbox.com/ios/api/maps/' - - m.source = { - :http => "https://mapbox.s3.amazonaws.com/mapbox-gl-native/ios/builds/mapbox-ios-sdk-#{m.version.to_s}-dynamic.zip", - :flatten => true - } - - m.platform = :ios - m.ios.deployment_target = '9.0' - - m.requires_arc = true - - m.vendored_frameworks = 'dynamic/Mapbox.framework' - m.module_name = 'Mapbox' - - m.preserve_path = '**/*.bcsymbolmap' - -end diff --git a/platform/ios/Mapbox-iOS-SDK.podspec b/platform/ios/Mapbox-iOS-SDK.podspec deleted file mode 100644 index c4f686f060f..00000000000 --- a/platform/ios/Mapbox-iOS-SDK.podspec +++ /dev/null @@ -1,32 +0,0 @@ -Pod::Spec.new do |m| - - version = '5.5.0-alpha.2' - - m.name = 'Mapbox-iOS-SDK' - m.version = version - - m.summary = 'Open source vector map solution for iOS with full styling capabilities.' - m.description = 'Open source, OpenGL-based vector map solution for iOS with full styling capabilities and Cocoa Touch APIs.' - m.homepage = 'https://docs.mapbox.com/ios/maps/' - m.license = { :type => 'BSD', :file => 'LICENSE.md' } - m.author = { 'Mapbox' => 'mobile@mapbox.com' } - m.screenshot = "https://docs.mapbox.com/ios/api/maps/#{version}/img/screenshot.png" - m.social_media_url = 'https://twitter.com/mapbox' - m.documentation_url = 'https://docs.mapbox.com/ios/api/maps/' - - m.source = { - :http => "https://mapbox.s3.amazonaws.com/mapbox-gl-native/ios/builds/mapbox-ios-sdk-#{m.version.to_s}-dynamic.zip", - :flatten => true - } - - m.platform = :ios - m.ios.deployment_target = '9.0' - - m.requires_arc = true - - m.vendored_frameworks = 'dynamic/Mapbox.framework' - m.module_name = 'Mapbox' - - m.preserve_path = '**/*.bcsymbolmap' - -end diff --git a/platform/ios/Mapbox.playground/Contents.swift b/platform/ios/Mapbox.playground/Contents.swift deleted file mode 100644 index 3bdb870fb5a..00000000000 --- a/platform/ios/Mapbox.playground/Contents.swift +++ /dev/null @@ -1,154 +0,0 @@ -import UIKit -import PlaygroundSupport -import Mapbox - -let width: CGFloat = 700 -let height: CGFloat = 800 - -class Responder: NSObject { - var mapView: MGLMapView? - @objc func togglePitch(sender: UISwitch) { - let camera = mapView!.camera - camera.pitch = sender.isOn ? 60 : 0 - mapView!.setCamera(camera, animated: false) - } -} - -//: A control panel -let panelWidth: CGFloat = 200 -let panel = UIView(frame: CGRect(x: width - panelWidth, y: 0, width: 200, height: 100)) -panel.alpha = 0.8 -panel.backgroundColor = .white - -// Delete markers -let deleteSwitchLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 30)) -deleteSwitchLabel.adjustsFontSizeToFitWidth = true -deleteSwitchLabel.text = "Delete Markers" -let deleteMarkerSwitchView = UISwitch(frame: CGRect(x: panelWidth - panelWidth / 2.0, y:0, width: 100, height: 50)) -panel.addSubview(deleteSwitchLabel) -panel.addSubview(deleteMarkerSwitchView) - -// Hide markers -let hideSwitchLabel = UILabel(frame: CGRect(x: 0, y: 30, width: 100, height: 30)) -hideSwitchLabel.adjustsFontSizeToFitWidth = true -hideSwitchLabel.text = "Hide Markers" -let hideMarkerSwitchView = UISwitch(frame: CGRect(x: panelWidth - panelWidth / 2.0, y: 30, width: 100, height: 50)) -panel.addSubview(hideSwitchLabel) -panel.addSubview(hideMarkerSwitchView) - -// Pitch map -let pitchLabel = UILabel(frame: CGRect(x: 0, y: 60, width: 100, height: 30)) -pitchLabel.text = "Pitch" -let pitchSwitch = UISwitch(frame: CGRect(x: panelWidth-panelWidth / 2.0, y: 60, width: 100, height: 50)) -let responder = Responder() -pitchSwitch.addTarget(responder, action: #selector(responder.togglePitch(sender:)), for: .valueChanged) -panel.addSubview(pitchLabel) -panel.addSubview(pitchSwitch) - -//: # Mapbox Maps - -/*: - Put your access token into a plain text file called `token`. Then select the “token” placeholder below, go to Editor ‣ Insert File Literal, and select the `token` file. - */ -var accessToken = try String(contentsOfURL: <#token#>) -MGLAccountManager.accessToken = accessToken - -class PlaygroundAnnotationView: MGLAnnotationView { - - override func prepareForReuse() { - isHidden = hideMarkerSwitchView.isOn - } - -} - -//: Define a map delegate - -class MapDelegate: NSObject, MGLMapViewDelegate { - - var annotationViewByAnnotation = [MGLPointAnnotation: PlaygroundAnnotationView]() - - func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView? { - - var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "annotation") as? PlaygroundAnnotationView - - if (annotationView == nil) { - let av = PlaygroundAnnotationView(reuseIdentifier: "annotation") - av.frame = CGRect(x: 0, y: 0, width: 30, height: 30) - av.centerOffset = CGVector(dx: -15, dy: -15) - let centerView = UIView(frame: av.bounds.insetBy(dx: 3, dy: 3)) - centerView.backgroundColor = .white - av.addSubview(centerView) - av.backgroundColor = .purple - annotationView = av - } else { - annotationView!.subviews.first?.backgroundColor = .green - } - - annotationViewByAnnotation[annotation as! MGLPointAnnotation] = annotationView - - return annotationView - } - - func mapView(_ mapView: MGLMapView, didSelect annotation: MGLAnnotation) { - let pointAnnotation = annotation as! MGLPointAnnotation - let annotationView: PlaygroundAnnotationView = annotationViewByAnnotation[pointAnnotation]! - - for view in annotationViewByAnnotation.values { - view.layer.zPosition = -1 - } - - annotationView.layer.zPosition = 1 - - UIView.animate(withDuration: 1.25, delay: 0, usingSpringWithDamping: 0.4, initialSpringVelocity: 0.6, options: .curveEaseOut, animations: { - annotationView.transform = CGAffineTransform(scaleX: 1.8, y: 1.8) - }) { _ in - annotationView.transform = CGAffineTransform(scaleX: 1, y: 1) - - if deleteMarkerSwitchView.isOn { - mapView.removeAnnotation(pointAnnotation) - return - } - - if hideMarkerSwitchView.isOn { - annotationView.isHidden = true - } - } - } - - @objc func handleTap(press: UILongPressGestureRecognizer) { - let mapView: MGLMapView = press.view as! MGLMapView - - let isRecognized = press.state == .recognized - - if (isRecognized) { - let annotation = MGLPointAnnotation() - annotation.title = "Dropped Marker" - annotation.coordinate = mapView.convert(press.location(in: mapView), toCoordinateFrom: mapView) - mapView.addAnnotation(annotation) - mapView.showAnnotations([annotation], animated: true) - } - } - -} - -//: Create a map and its delegate - -let mapView = MGLMapView(frame: CGRect(x: 0, y: 0, width: width, height: height)) -mapView.frame = CGRect(x: 0, y: 0, width: width, height: height) - -PlaygroundPage.current.liveView = mapView - -let mapDelegate = MapDelegate() -mapView.delegate = mapDelegate -responder.mapView = mapView - -let tapGesture = UILongPressGestureRecognizer(target: mapDelegate, action: #selector(mapDelegate.handleTap)) -mapView.addGestureRecognizer(tapGesture) - -//: Zoom in to a location - -mapView.setCenter(CLLocationCoordinate2D(latitude: 37.174057, longitude: -104.490984), zoomLevel: 12, animated: false) - -//: Add control panel - -mapView.addSubview(panel) diff --git a/platform/ios/Mapbox.playground/contents.xcplayground b/platform/ios/Mapbox.playground/contents.xcplayground deleted file mode 100644 index c8659f26e46..00000000000 --- a/platform/ios/Mapbox.playground/contents.xcplayground +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/platform/ios/WorkspaceSettings.xcsettings b/platform/ios/WorkspaceSettings.xcsettings deleted file mode 100644 index 20a7accf01f..00000000000 --- a/platform/ios/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,22 +0,0 @@ - - - - - BuildLocationStyle - CustomLocation - CustomBuildIntermediatesPath - ../../build/ios - CustomBuildLocationType - RelativeToWorkspace - CustomBuildProductsPath - ../../build/ios - DerivedDataCustomLocation - ../../build/ios - DerivedDataLocationStyle - WorkspaceRelativePath - IssueFilterStyle - ShowActiveSchemeOnly - LiveSourceIssuesEnabled - - - diff --git a/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Contents.json b/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index ccfb66f047b..00000000000 --- a/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-Spotlight-40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-60@3x.png", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-Small.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-29@2x-1.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-40.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-40@2x-1.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-1024.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-1024.png b/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-1024.png deleted file mode 100644 index d1cb5c50f72002bc31beb36751b179e47b19118d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12225 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 diff --git a/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png b/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png deleted file mode 100644 index 15544d27019243f3ff540efd8e8e62444f55aa7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1745 zcmV;?1}^!DP)1nGfJk}Omhvc|0>vt|v_=F9VuHvc zh#v@=pn@nqq91$^i5j&LBlw6$1rekgNEAL$O)ADCC@u?g9OMP zDp>YH0ykwvH%4I4X}3zAf6$>*QdHwxscRQl__)KQF~R*3=%3TZNuIbzBI4)B^CTra zIZHBOWUxVfgO17;JburG$uoq2r|xsez0NK-h9eo_z-`TO2N7kkJVp# z)Sc3|P3aD^@03g!XB(6n*Py+g#gUuwbr3uWpgs zd{?F@E!RJ+Nu%v-Gqy_Uj<2<;6uiI2Gv=qWrb;>_!i?MXCVW(+PwsOv1wE6^b{Ro) zuk)7}d|$5EcTi6`AYE|F@NlP7$4afCf7OJKaFHY>j2LD%&m^!c zRUH!H(V0%f^D4j(TlEjlX2uy4hCzLdeVkLx3E25t+eY4jHt$rdD)y-Uqjf)~ zJ)(2R@DezyiMv`*zelj`dm=yi%HI{wz3X!Qwc$0|a=LBbqj>K#FXATFwTszfojdA5 zV|ENV-2k<9=5{-OQ@p+U|0y1FVe!Y2ApwRAi2gjN1+8zi@95A``&4h&Ud4`I!|h8p zdmKKd|F2E>XfW8S1wGpY4Tj{pS%;35Si08ZfT50i?-WU*AqXC2zvY^Y^_%0Wa>#fB}E?s2KEs=HdAurP#@XYZpDee&F!p;W5uN&Ihp!t z)LoO5o0N5pVETB;*j(Ye@V35Gzs{Rw1-h|9ap16`Us_}#eJ`&lh{d)^mzU)v_3w5WU;f&&JQ#c28By_z( zklG8t&{)2TdVxNJoN=yTL-VLbYuF0)~`Y#c;!Qv<36hN5a9GuUZr^B6MY#n zUQ!Acf9z^&NRbri4#S3@6`toZf3|a8StMQxg~E^}n}a>!z?U^jHY;lDT%LPSU)YL; zYU^O(@?f59R#XS?irtEb3PO}s#%~^P+M$?N5Q+*CVt6YhKSwZUy3{5WezgCPVnvbX zD}?A2)9W`vK>i59q|uU`Orfp%wI$CB=dSBZJvMHQ&25x(w#DmWa*t%l9VW;gDj3*D z&^Pt}TVu_tZ-j$K!j=7PdlXxCDXY3u5XB9&EhQyFr~hCZ8iO6ygR0%`0zw$9J>gpF nlDXY^8T4Y)WzdUFmkj8?rQa~R$gi5d00000NkvXXu0mjfOUp*C diff --git a/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png b/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png deleted file mode 100644 index 15544d27019243f3ff540efd8e8e62444f55aa7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1745 zcmV;?1}^!DP)1nGfJk}Omhvc|0>vt|v_=F9VuHvc zh#v@=pn@nqq91$^i5j&LBlw6$1rekgNEAL$O)ADCC@u?g9OMP zDp>YH0ykwvH%4I4X}3zAf6$>*QdHwxscRQl__)KQF~R*3=%3TZNuIbzBI4)B^CTra zIZHBOWUxVfgO17;JburG$uoq2r|xsez0NK-h9eo_z-`TO2N7kkJVp# z)Sc3|P3aD^@03g!XB(6n*Py+g#gUuwbr3uWpgs zd{?F@E!RJ+Nu%v-Gqy_Uj<2<;6uiI2Gv=qWrb;>_!i?MXCVW(+PwsOv1wE6^b{Ro) zuk)7}d|$5EcTi6`AYE|F@NlP7$4afCf7OJKaFHY>j2LD%&m^!c zRUH!H(V0%f^D4j(TlEjlX2uy4hCzLdeVkLx3E25t+eY4jHt$rdD)y-Uqjf)~ zJ)(2R@DezyiMv`*zelj`dm=yi%HI{wz3X!Qwc$0|a=LBbqj>K#FXATFwTszfojdA5 zV|ENV-2k<9=5{-OQ@p+U|0y1FVe!Y2ApwRAi2gjN1+8zi@95A``&4h&Ud4`I!|h8p zdmKKd|F2E>XfW8S1wGpY4Tj{pS%;35Si08ZfT50i?-WU*AqXC2zvY^Y^_%0Wa>#fB}E?s2KEs=HdAurP#@XYZpDee&F!p;W5uN&Ihp!t z)LoO5o0N5pVETB;*j(Ye@V35Gzs{Rw1-h|9ap16`Us_}#eJ`&lh{d)^mzU)v_3w5WU;f&&JQ#c28By_z( zklG8t&{)2TdVxNJoN=yTL-VLbYuF0)~`Y#c;!Qv<36hN5a9GuUZr^B6MY#n zUQ!Acf9z^&NRbri4#S3@6`toZf3|a8StMQxg~E^}n}a>!z?U^jHY;lDT%LPSU)YL; zYU^O(@?f59R#XS?irtEb3PO}s#%~^P+M$?N5Q+*CVt6YhKSwZUy3{5WezgCPVnvbX zD}?A2)9W`vK>i59q|uU`Orfp%wI$CB=dSBZJvMHQ&25x(w#DmWa*t%l9VW;gDj3*D z&^Pt}TVu_tZ-j$K!j=7PdlXxCDXY3u5XB9&EhQyFr~hCZ8iO6ygR0%`0zw$9J>gpF nlDXY^8T4Y)WzdUFmkj8?rQa~R$gi5d00000NkvXXu0mjfOUp*C diff --git a/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png b/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png deleted file mode 100644 index a07e385c761aaf4d01c01e788cb18ed24f5b0bbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2580 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 V5JuWc#ialM002ovPDHLkV1j%Lh!p?; diff --git a/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png b/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png deleted file mode 100644 index a15e380f0f9ae9506a2660940b922ce5db87f0a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2351 zcmV+~3DEY5P)1NCVi4+)(G@j>X&4jc&;l~7gzMJ1A|n%3^&t+c9u zaY0BOBp5M7Fr>erPqHAPbJOLeg#1Fu*-LQrl;pExl7F9(gq+CrxjrJ&d*Of$V}=Uu zxzl3&FhPvrUszrNyAC*P`KRQ_Nr{Z`&OTxS#s%U2i59c&wMgm`o;J>1l4Ndn*uFP% zRvC5yg@F4fSv>lnMVF4@Z0RPKu1Hp_bJ%?_{I(HR0SELJJo|l%l>Q=IO*G5i!;;0T zL*!o#UmIZ)aO!x$&%S39j15Qa>Qq$1tE)on%n6U3`2H3S*znvBY^IKH9jmKPyLkB3 zJewi?9agM!e1FOKx{waW!i)3Uj(D{Q0W+ssEc}s8Y>dBk`zBy878X5YGiGSp60a^3 zMhISb$|m6Byz@ms%Yt7%ZZmXH+ZC^tF+&AEpKBw0>Z&gSKAmAPVMN;(ua>(<3m$ve zpUG!z%;{-@2h#nGNmNzCp)VvkM)zP_8c;Ms~9a~k`v*z1p(T}8};EUDk|Z`goX$AL||9p=9r;y?L%_K=xJJWE}?xFGywj#|5A*Wvjk4i#Uj_h-&@Z)4Ja zs^4vb!Trpvuc{hedDFqsn7QA%%i`OUEc*9SYx~Sa$y*<(H*m*5;pt7TE#TBU&8KeW zCWrHv)u&i&49vX8^;0^Q^8R**%Nn7q$zvlRV0xO_^ew*T`aT_|PqawvQro_JcA`Rc z4O&)sS6Y|_?AcAwBT>7JTUfirp|VQ7e87fTQ*Ub|hN0zNyg?k+|Q(VJmfrHAy_s=EQZawKKf z)yfVXBzWann;*|^*u{ViuP?B9{t27D3e#Cfz?1>XMcuyW6jt>;P4V%8maT7OieT=; zEuW(Z;rgseqipsbmc03a!-;c^3zdIWUBKQw^v0+qpl;=Lsj7y9$C@5ULT7hxt-C}L z0>%v!j7_!KxZB~6s~awl@(b1L(;cJo6cz#!I%(B?3x`ffs;Zm*y{HrxE(@_f+tE(n zC@FK_wky^(zP7xf5i3aSjMlbJ*#hH(dKK5_NM6g+sGtaztZ`Vq(c!_nEoMxyXxB`r zte^<8{_e1GSM#EGY_Hx=%W~J9&HdSR(Gt*vFV3p_p^`FKxxwLs9S%=t*rbnc_|Gj_ zNC}rU z-h_22Er*S}Zgp&{KGa)Fj?|3zU9VIxt0kbL(hC<0%?@sgN^kC9-rlHZeHqjAf~8kW^$bPJ2kJyn>Y{Q$ z)DrJ(b~t`o?-Z?D0!*Kv=jL_Cs8ze}c|$EVKBVPdDRLvts@5R{{B(}3oxrI(MlAu4 zpV6xOE2?}-0Ml_H8PhCJhhE1{hfzSCO?h2(oU$K$ce2IYhrF%OKGz(hmVxINO7aUO z$w`_UZd)`SqD(N>Jtui%q0R8GoBdJSJd8~{x#;Xg$pPT*GS@G-5X1>G49k%P81|{HH$y$uq?}a^10^( z%L7LxJ98xI8fU3pJ3-e@^~<+zW^49dslE2Ai%~pq>Dmyb9#hiV0wrazJj;7-AQ%dG zwFG|mhWh@rEg_}bcdrqqT8tyo`*J1kY;MK-rXG3wBZvJOamA+aC8YnC_Z{twgVto* z9?440sCHBMBA}G;hqoL){a4$c%b$EMS@c)`+>URDN;g8VU}=cW|7g3Gxb;)XZ+jZBGDS}@-W;go{gh)_Y?!Ilk?lf8= ztQW2myTDVk8b2711l#vXmc47fRB4Wgd^2HWir~qa76Ubo7fr}JCs~%|80|1riP%Rc zgn+TBf{bZa*lu;^=1DR)Iqb`g+}ArI{@D|NzR7|q;{@rW1--hPiFu(wvSYtw+a7Q6 zJX2alz`Ar#aMNm22DrI-y?Y3{b#1)tm16hY_WWhZ(Nk^^K=%y8Z(3czric&TJPN4% z(kwS8oV2-bXVp?!)pkXzOZ4k)hC~H4Br2dGQ2`B!3TQ}FKtrMe8WI)Ikf?x${1@^W V5JuWc#ialM002ovPDHLkV1j%Lh!p?; diff --git a/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png deleted file mode 100644 index a46522d3683a6e9b836a57702609ec48f481e440..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3497 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 YKef;F!eUYOW&i*H07*qoM6N<$g6027;{X5v diff --git a/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png b/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png deleted file mode 100644 index db8f040ca46898b8f2d155067086d9186929a4b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4425 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 diff --git a/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png b/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png deleted file mode 100644 index 7dc725be771d8ca4557f543d5e2481e04e8c6dd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4895 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 aU=Iq~I#brs*kL}iuvC>a70cx<0{;h$hm?Z= diff --git a/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-Small.png b/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-Small.png deleted file mode 100644 index 6973929c919d761ff287d93139cb8357c8782707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 907 zcmV;619bd}P)!PS4cUTg1wt0Su;gkvzB*?GZ!sdKaNfw6}q-avVW_@ zXT;_GRx}DH>nv_QvSP->+}_oNlFDskPnypM2ewP3gd6qVU{C1$S%S(^Z(yhw>aJTn zeQDA29WsKjJWsNDjU+hLiQB(L()LNw_F3OZPv?q_5}(I(-ghXr zT)Atp>qwM09~?l64=PH$C$5d=%@^ck>P7Qo0IF*&!u`(JszO1^@Z`e%aPYM0dY+pl z$epKqY0%<)?<&1~%i?R7vyzE^*uBAEb)jPs?uW~_-FYnX@YA4+v-O~%2wc7Im}Slo z94-03(QzBWCW5=ZiV8?pN$|d%F zci0V055|E`NU^ug3p%1uA5p;`~+1_0H0TZs@?E?Hdyc(AB2{20SJLaO|AvYI&&v*u2JV8R|{oJ8f!7 z{7et^IoH!N1jj24SAzg(e4POFVUr$YjM94plc98-q~?&p?CE;Z)HmvWTHk4IwR4r5 zrZ)}GIM7LPE{FN)s00%5!iRkr2R{Ry|?YN z;zX^PJP|l`!SV#cC`a3!CyHp)5Zbk(Yt8I1^rVgK6@*ZQPTgt h$pXg(9gqGA^cQ(380&ZJv^D?$002ovPDHLkV1g;Fry2kN diff --git a/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png b/platform/ios/app/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png deleted file mode 100644 index a46522d3683a6e9b836a57702609ec48f481e440..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3497 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 AV*mgE diff --git a/platform/ios/app/Assets.xcassets/TrackingHeadingMask.imageset/TrackingHeadingMask@2x.png b/platform/ios/app/Assets.xcassets/TrackingHeadingMask.imageset/TrackingHeadingMask@2x.png deleted file mode 100644 index 0df8ccc229d0e7990f1124cfa22a225a64d228fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 467 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 diff --git a/platform/ios/app/Assets.xcassets/TrackingLocationOffMask.imageset/Contents.json b/platform/ios/app/Assets.xcassets/TrackingLocationOffMask.imageset/Contents.json deleted file mode 100644 index 3ccbab44aa8..00000000000 --- a/platform/ios/app/Assets.xcassets/TrackingLocationOffMask.imageset/Contents.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "TrackingLocationOffMask.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "TrackingLocationOffMask@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "TrackingLocationOffMask@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - }, - "properties" : { - "template-rendering-intent" : "template" - } -} \ No newline at end of file diff --git a/platform/ios/app/Assets.xcassets/TrackingLocationOffMask.imageset/TrackingLocationOffMask.png b/platform/ios/app/Assets.xcassets/TrackingLocationOffMask.imageset/TrackingLocationOffMask.png deleted file mode 100644 index 87b26c57100529ff8158bff69e98a8ae126126d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493 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 vr3JSDM9{*L2MXe~;^X1x5ySZZyZkHN+}xj1 - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - $(PRODUCT_NAME) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.mapbox.MapboxGL - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 0.0.2 - CFBundleSignature - MBGL - CFBundleVersion - 7877 - LSRequiresIPhoneOS - - NSHumanReadableCopyright - © 2014–2019 Mapbox - NSLocationAlwaysUsageDescription - The map will display your location. The map may also use your location when it isn’t visible in order to improve OpenStreetMap and Mapbox products. - NSLocationWhenInUseUsageDescription - The map will display your location. - NSLocationAlwaysAndWhenInUseUsageDescription - The map will display your location. If you choose Always, the map may also use your location when it isn’t visible in order to improve OpenStreetMap and Mapbox products. - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIApplicationShortcutItems - - - UIApplicationShortcutItemTitle - Settings - UIApplicationShortcutItemType - $(PRODUCT_BUNDLE_IDENTIFIER).settings - UIApplicationShortcutItemIconFile - settings - - - - diff --git a/platform/ios/app/LaunchScreen.storyboard b/platform/ios/app/LaunchScreen.storyboard deleted file mode 100644 index 299e1868863..00000000000 --- a/platform/ios/app/LaunchScreen.storyboard +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/ios/app/MBXAnnotationView.h b/platform/ios/app/MBXAnnotationView.h deleted file mode 100644 index 6bd799673d3..00000000000 --- a/platform/ios/app/MBXAnnotationView.h +++ /dev/null @@ -1,4 +0,0 @@ -@import Mapbox; - -@interface MBXAnnotationView : MGLAnnotationView -@end diff --git a/platform/ios/app/MBXAnnotationView.m b/platform/ios/app/MBXAnnotationView.m deleted file mode 100644 index 6877c5cd3d5..00000000000 --- a/platform/ios/app/MBXAnnotationView.m +++ /dev/null @@ -1,52 +0,0 @@ -#import "MBXAnnotationView.h" - -@interface MBXAnnotationView () -@end - -@implementation MBXAnnotationView - -- (void)layoutSubviews { - [super layoutSubviews]; - - self.layer.borderColor = [UIColor blueColor].CGColor; - self.layer.borderWidth = 1; - self.layer.cornerRadius = 2; -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - self.layer.borderColor = selected ? [UIColor blackColor].CGColor : [UIColor whiteColor].CGColor; - self.layer.borderWidth = selected ? 2.0 : 0; -} - -- (void)setDragState:(MGLAnnotationViewDragState)dragState animated:(BOOL)animated -{ - [super setDragState:dragState animated:NO]; - - switch (dragState) { - case MGLAnnotationViewDragStateNone: - break; - case MGLAnnotationViewDragStateStarting: { - [UIView animateWithDuration:.4 delay:0 usingSpringWithDamping:.4 initialSpringVelocity:.5 options:UIViewAnimationOptionCurveLinear animations:^{ - self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 2, 2); - } completion:nil]; - break; - } - case MGLAnnotationViewDragStateDragging: - break; - case MGLAnnotationViewDragStateCanceling: - break; - case MGLAnnotationViewDragStateEnding: { - self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 2, 2); - [UIView animateWithDuration:.4 delay:0 usingSpringWithDamping:.4 initialSpringVelocity:.5 options:UIViewAnimationOptionCurveLinear animations:^{ - self.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 1); - } completion:nil]; - break; - } - } - -} - -@end diff --git a/platform/ios/app/MBXAppDelegate.h b/platform/ios/app/MBXAppDelegate.h deleted file mode 100644 index e719cd9e6a7..00000000000 --- a/platform/ios/app/MBXAppDelegate.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -@interface MBXAppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/platform/ios/app/MBXAppDelegate.m b/platform/ios/app/MBXAppDelegate.m deleted file mode 100644 index bf62866b8eb..00000000000 --- a/platform/ios/app/MBXAppDelegate.m +++ /dev/null @@ -1,48 +0,0 @@ -@import Mapbox; - -#import "MBXAppDelegate.h" -#import "MBXViewController.h" - -@interface MBXAppDelegate() - -@end - -@implementation MBXAppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ -#ifndef MGL_DISABLE_LOGGING - [MGLLoggingConfiguration sharedConfiguration].loggingLevel = MGLLoggingLevelFault; -#endif - - [MGLMetricsManager sharedManager].delegate = self; - return YES; -} - -#pragma mark - Quick actions - -- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler { - completionHandler([self handleShortcut:shortcutItem]); -} - -- (BOOL)handleShortcut:(UIApplicationShortcutItem *)shortcut { - if ([[shortcut.type componentsSeparatedByString:@"."].lastObject isEqual:@"settings"]) { - dispatch_async(dispatch_get_main_queue(), ^{ - [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; - }); - - return YES; - } - - return NO; -} - -- (BOOL)metricsManager:(MGLMetricsManager *)metricsManager shouldHandleMetric:(MGLMetricType)metricType { - return YES; -} - -- (void)metricsManager:(MGLMetricsManager *)metricsManager didCollectMetric:(MGLMetricType)metricType withAttributes:(NSDictionary *)attributes { - [[MGLMetricsManager sharedManager] pushMetric:metricType withAttributes:attributes]; -} - -@end diff --git a/platform/ios/app/MBXCustomCalloutView.h b/platform/ios/app/MBXCustomCalloutView.h deleted file mode 100644 index 5a7c9c926f0..00000000000 --- a/platform/ios/app/MBXCustomCalloutView.h +++ /dev/null @@ -1,13 +0,0 @@ -@import Mapbox; - -/** - * Basic custom callout view to demonstrate how to - * add your own on your app. Will only show the - * callout title for demonstration purpose. - */ -@interface MBXCustomCalloutView : UIView - -@property (nonatomic, assign, getter=isAnchoredToAnnotation) BOOL anchoredToAnnotation; -@property (nonatomic, assign) BOOL dismissesAutomatically; - -@end diff --git a/platform/ios/app/MBXCustomCalloutView.m b/platform/ios/app/MBXCustomCalloutView.m deleted file mode 100644 index 2d70e8b7b35..00000000000 --- a/platform/ios/app/MBXCustomCalloutView.m +++ /dev/null @@ -1,110 +0,0 @@ -#import "MBXCustomCalloutView.h" - -static CGFloat const tipHeight = 10.0; -static CGFloat const tipWidth = 10.0; - -@interface MBXCustomCalloutView () - -@property (strong, nonatomic) UILabel *mainLabel; - -@end - -@implementation MBXCustomCalloutView { - id _representedObject; - UIView *_leftAccessoryView; - UIView *_rightAccessoryView; - __weak id _delegate; -} - -@synthesize representedObject = _representedObject; -@synthesize anchoredToAnnotation = _anchoredToAnnotation; -@synthesize dismissesAutomatically = _dismissesAutomatically; -@synthesize leftAccessoryView = _leftAccessoryView; -@synthesize rightAccessoryView = _rightAccessoryView; -@synthesize delegate = _delegate; - -- (instancetype)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) - { - self.backgroundColor = [UIColor clearColor]; - _mainLabel = [[UILabel alloc] initWithFrame: CGRectZero]; - _mainLabel.backgroundColor = [UIColor clearColor]; - - [self addSubview: _mainLabel]; - } - return self; -} - -#pragma mark - API - -- (void)presentCalloutFromRect:(CGRect)rect inView:(nonnull UIView *)view constrainedToRect:(__unused CGRect)constrainedRect animated:(BOOL)animated -{ - if ([self.delegate respondsToSelector:@selector(calloutViewWillAppear:)]) - { - [self.delegate performSelector:@selector(calloutViewWillAppear:) withObject:self]; - } - - [view addSubview:self]; - // prepare title label - if ([self.representedObject respondsToSelector:@selector(title)]) - { - self.mainLabel.text = self.representedObject.title; - [self.mainLabel sizeToFit]; - } - // prepare our frame - CGFloat frameWidth = self.mainLabel.bounds.size.width; - CGFloat frameHeight = self.mainLabel.bounds.size.height * 2.0; - CGFloat frameOriginX = rect.origin.x + (rect.size.width/2.0) - (frameWidth/2.0); - CGFloat frameOriginY = rect.origin.y - frameHeight; - self.frame = CGRectMake(frameOriginX, frameOriginY, - frameWidth, frameHeight); - - if ([self.delegate respondsToSelector:@selector(calloutViewDidAppear:)]) - { - [self.delegate performSelector:@selector(calloutViewDidAppear:) withObject:self]; - } -} - -- (void)setCenter:(CGPoint)center { - center.y = center.y - CGRectGetMidY(self.bounds); - [super setCenter:center]; -} - -- (void)dismissCalloutAnimated:(BOOL)animated -{ - if (self.superview) - [self removeFromSuperview]; -} - -#pragma mark - internals - -- (void)drawRect:(CGRect)rect -{ - UIColor *fillColor = [UIColor colorWithWhite:0.7 alpha:1.0]; - - CGFloat tipLeft = rect.origin.x + (rect.size.width / 2.0) - (tipWidth / 2.0); - CGPoint tipBottom = CGPointMake(rect.origin.x + (rect.size.width / 2.0), rect.origin.y +rect.size.height); - CGFloat heightWithoutTip = rect.size.height - tipHeight; - - // draw the white background with tip - CGContextRef ctxt = UIGraphicsGetCurrentContext(); - - CGMutablePathRef tipPath = CGPathCreateMutable(); - CGPathMoveToPoint(tipPath, NULL, 0, 0); - CGPathAddLineToPoint(tipPath, NULL, 0, heightWithoutTip); - CGPathAddLineToPoint(tipPath, NULL, tipLeft, heightWithoutTip); - CGPathAddLineToPoint(tipPath, NULL, tipBottom.x, tipBottom.y); - CGPathAddLineToPoint(tipPath, NULL, tipLeft + tipWidth, heightWithoutTip); - CGPathAddLineToPoint(tipPath, NULL, CGRectGetWidth(rect), heightWithoutTip); - CGPathAddLineToPoint(tipPath, NULL, CGRectGetWidth(rect), 0); - CGPathCloseSubpath(tipPath); - - [fillColor setFill]; - CGContextAddPath(ctxt, tipPath); - CGContextFillPath(ctxt); - CGPathRelease(tipPath); -} - -@end diff --git a/platform/ios/app/MBXCustomLocationViewController.h b/platform/ios/app/MBXCustomLocationViewController.h deleted file mode 100644 index ae6c14fe2c5..00000000000 --- a/platform/ios/app/MBXCustomLocationViewController.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface MBXCustomLocationViewController : UIViewController - -@end diff --git a/platform/ios/app/MBXCustomLocationViewController.m b/platform/ios/app/MBXCustomLocationViewController.m deleted file mode 100644 index c77d990bac5..00000000000 --- a/platform/ios/app/MBXCustomLocationViewController.m +++ /dev/null @@ -1,175 +0,0 @@ -@import Mapbox; - -#import "MBXCustomLocationViewController.h" - -@interface MBXCustomLocationManager : NSObject -@end - -@interface MBXCustomLocationManager() - -@property (nonatomic) CLLocationManager *locationManager; -@property (nonatomic, strong) NSTimer *locationUpdateTimer; -@property (nonatomic) NSUInteger index; -@property (strong, nonatomic) NSDictionary *routeCoordinates; -@property (strong, nonatomic) NSArray *coordinates; - -@end - -@implementation MBXCustomLocationManager - -@synthesize delegate; - -- (instancetype)init -{ - if (self = [super init]) { - _locationManager = [[CLLocationManager alloc] init]; - _index = 0; - } - return self; -} - -- (CLAuthorizationStatus)authorizationStatus -{ - return [CLLocationManager authorizationStatus]; -} - -- (void)setHeadingOrientation:(CLDeviceOrientation)headingOrientation -{ - _locationManager.headingOrientation = headingOrientation; -} - -- (CLDeviceOrientation)headingOrientation -{ - return _locationManager.headingOrientation; -} - -- (void)requestAlwaysAuthorization -{ - [self.locationManager requestAlwaysAuthorization]; -} - -- (void)requestWhenInUseAuthorization -{ - [self.locationManager requestWhenInUseAuthorization]; -} - -- (void)startUpdatingHeading -{ - [self.locationManager startUpdatingHeading]; -} - -- (void)startUpdatingLocation -{ - [self loadRouteCoordinates]; - self.locationUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:0.8 - target:self - selector:@selector(updateLocation) - userInfo:nil - repeats:YES]; -} - -- (void)stopUpdatingHeading -{ - [self.locationManager stopUpdatingHeading]; -} - -- (void)stopUpdatingLocation -{ - [self.locationUpdateTimer invalidate]; - self.locationUpdateTimer = nil; -} - -- (void)dismissHeadingCalibrationDisplay -{ - [self.locationManager dismissHeadingCalibrationDisplay]; -} - -- (void)dealloc -{ - [self.locationManager stopUpdatingLocation]; - [self.locationManager stopUpdatingHeading]; - self.delegate = nil; -} - -#pragma mark - Location Updates - -- (void)loadRouteCoordinates -{ - NSString *filePath = [[NSBundle bundleForClass:self.class] pathForResource:@"simple_route" ofType:@"json"]; - NSData *data = [NSData dataWithContentsOfFile:filePath]; - _routeCoordinates = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; - _coordinates = [self.routeCoordinates objectForKey:@"coordinates"]; -} - -- (void)updateLocation -{ - if ([self.delegate respondsToSelector:@selector(locationManager:didUpdateLocations:)]) { - - if (self.index >= [self.coordinates count] ) { - self.index = 0; - self.coordinates = [[self.coordinates reverseObjectEnumerator] allObjects]; - } - NSArray *loc = self.coordinates[self.index]; - CLLocationDegrees latitude = [[loc objectAtIndex:1] doubleValue]; - CLLocationDegrees longitude = [[loc objectAtIndex:0] doubleValue]; - CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude]; - self.index++; - [self.delegate locationManager:self didUpdateLocations:@[location]]; - } -} - -- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading -{ - if ([self.delegate respondsToSelector:@selector(locationManager:didUpdateHeading:)]) { - [self.delegate locationManager:self didUpdateHeading:newHeading]; - } -} - -- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(locationManagerShouldDisplayHeadingCalibration:)]) { - return [self.delegate locationManagerShouldDisplayHeadingCalibration:self]; - } - - return NO; -} - -- (void)locationManager:(CLLocationManager *)locationManager didFailWithError:(nonnull NSError *)error { - if ([self.delegate respondsToSelector:@selector(locationManager:didFailWithError:)]) { - [self.delegate locationManager:self didFailWithError:error]; - } -} - -@end - -@interface MBXCustomLocationViewController () - -@property (strong, nonatomic) MGLMapView *mapView; - -@end - -@implementation MBXCustomLocationViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.mapView = [[MGLMapView alloc] initWithFrame:self.view.bounds]; - - self.mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - MBXCustomLocationManager *mbxLocationManager = [[MBXCustomLocationManager alloc] init]; - self.mapView.locationManager = mbxLocationManager; - // Set the map’s center coordinate and zoom level. - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(37.788380, -122.400121) - zoomLevel:13 - animated:NO]; - - [self.view addSubview:self.mapView]; - self.mapView.showsUserLocation = YES; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - self.mapView.showsUserLocation = NO; -} - -@end diff --git a/platform/ios/app/MBXEmbeddedMapViewController.h b/platform/ios/app/MBXEmbeddedMapViewController.h deleted file mode 100644 index 976893d4914..00000000000 --- a/platform/ios/app/MBXEmbeddedMapViewController.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface MBXEmbeddedMapViewController : UIViewController - -@end diff --git a/platform/ios/app/MBXEmbeddedMapViewController.m b/platform/ios/app/MBXEmbeddedMapViewController.m deleted file mode 100644 index dacbdb51248..00000000000 --- a/platform/ios/app/MBXEmbeddedMapViewController.m +++ /dev/null @@ -1,90 +0,0 @@ -@import Mapbox; - -#import "MBXEmbeddedMapViewController.h" - -typedef NS_ENUM(NSInteger, MBXEmbeddedControl) { - MBXEmbeddedControlZoom = 0, - MBXEmbeddedControlScroll, - MBXEmbeddedControlRotation, - MBXEmbeddedControlPitch -}; - -@interface MBXEmbeddedMapViewController () - -@property (weak, nonatomic) IBOutlet UIScrollView *scrollView; -@property (weak, nonatomic) IBOutlet MGLMapView *mapView; - -@end - -@implementation MBXEmbeddedMapViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.scrollView.delegate = self; - self.scrollView.contentSize = self.view.bounds.size; -} - -- (IBAction)didSwitch:(UISwitch *)controlSwitch { - [self switchControl:controlSwitch.tag]; -} - -- (IBAction)rotation:(UIRotationGestureRecognizer *)rotationGesture { - self.mapView.transform = CGAffineTransformRotate(rotationGesture.view.transform, rotationGesture.rotation); -} - -- (void)switchControl:(MBXEmbeddedControl) control { - switch (control) { - case MBXEmbeddedControlZoom: - self.mapView.zoomEnabled = !self.mapView.zoomEnabled; - break; - case MBXEmbeddedControlScroll: - self.mapView.scrollEnabled = !self.mapView.scrollEnabled; - break; - case MBXEmbeddedControlRotation: - self.mapView.rotateEnabled = !self.mapView.rotateEnabled; - break; - case MBXEmbeddedControlPitch: - self.mapView.pitchEnabled = !self.mapView.pitchEnabled; - break; - } -} - -- (BOOL)statusForControl:(MBXEmbeddedControl) control { - switch (control) { - case MBXEmbeddedControlZoom: - return self.mapView.zoomEnabled; - case MBXEmbeddedControlScroll: - return self.mapView.scrollEnabled; - case MBXEmbeddedControlRotation: - return self.mapView.rotateEnabled; - case MBXEmbeddedControlPitch: - return self.mapView.pitchEnabled; - } -} - -#pragma mark UIScrollViewDelegate methods - -- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { - return self.mapView; -} - -#pragma mark Class method - -+ (NSString *)titleForControl:(MBXEmbeddedControl) control { - switch (control) { - case MBXEmbeddedControlZoom: - return @"Zoom Enabled"; - case MBXEmbeddedControlScroll: - return @"Scroll Enabled"; - break; - case MBXEmbeddedControlRotation: - return @"Rotation Enabled"; - break; - case MBXEmbeddedControlPitch: - return @"Pitch Enabled"; - break; - } -} - -@end diff --git a/platform/ios/app/MBXFrameTimeGraphView.h b/platform/ios/app/MBXFrameTimeGraphView.h deleted file mode 100644 index 9c3f6f8c322..00000000000 --- a/platform/ios/app/MBXFrameTimeGraphView.h +++ /dev/null @@ -1,11 +0,0 @@ -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MBXFrameTimeGraphView : UIView - -- (void)updatePathWithFrameDuration:(CFTimeInterval)frameDuration; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/app/MBXFrameTimeGraphView.m b/platform/ios/app/MBXFrameTimeGraphView.m deleted file mode 100644 index e881eb9f483..00000000000 --- a/platform/ios/app/MBXFrameTimeGraphView.m +++ /dev/null @@ -1,145 +0,0 @@ -#import "MBXFrameTimeGraphView.h" - -const CGFloat MBXFrameTimeExaggeration = 4.f * 1000.f; -const CGFloat MBXFrameTimeBarWidth = 4.f; - -@interface MBXFrameTimeGraphView () - -@property (nonatomic) CAScrollLayer *scrollLayer; -@property (nonatomic) CAShapeLayer *thresholdLayer; -@property (nonatomic) CGFloat currentX; -@property (nonatomic) NSMutableArray *barLayers; - -@property (nonatomic) UIColor *safeColor; -@property (nonatomic) UIColor *warningColor; -@property (nonatomic) UIColor *dangerColor; - -@end - -@implementation MBXFrameTimeGraphView - -- (instancetype)init { - if (self = [super init]) { - [self commonInit]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - if (self = [super initWithCoder:aDecoder]) { - [self commonInit]; - } - return self; -} - -- (void)commonInit { - self.userInteractionEnabled = NO; - self.layer.opacity = 0.9f; - - self.scrollLayer = [CAScrollLayer layer]; - self.scrollLayer.scrollMode = kCAScrollHorizontally; - self.scrollLayer.masksToBounds = YES; - [self.layer addSublayer:self.scrollLayer]; - - self.thresholdLayer = [CAShapeLayer layer]; - self.thresholdLayer.fillColor = [UIColor darkGrayColor].CGColor; - [self.layer addSublayer:self.thresholdLayer]; - - self.barLayers = [NSMutableArray array]; - - self.safeColor = [UIColor colorWithRed:(CGFloat)(0.f/255.f) green:(CGFloat)(190.f/255.f) blue:(CGFloat)(123.f/255.f) alpha:1.f]; - self.warningColor = [UIColor colorWithRed:(CGFloat)(255.f/255.f) green:(CGFloat)(154.f/255.f) blue:(CGFloat)(82.f/255.f) alpha:1.f]; - self.dangerColor = [UIColor colorWithRed:(CGFloat)(255.f/255.f) green:(CGFloat)(91.f/255.f) blue:(CGFloat)(86.f/255.f) alpha:1.f]; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - - if (!CGRectEqualToRect(self.scrollLayer.frame, self.bounds)) { - self.scrollLayer.frame = self.bounds; - - CGRect thresholdLineRect = CGRectMake(0, self.frame.size.height - [self renderDurationTargetMilliseconds], self.frame.size.width, 1); - - { - CGPathRef path = CGPathCreateWithRect(thresholdLineRect, nil); - self.thresholdLayer.path = path; - CGPathRelease(path); - } - } -} - -- (void)updatePathWithFrameDuration:(CFTimeInterval)frameDuration { - [CATransaction begin]; - [CATransaction setDisableActions:YES]; - - self.currentX += MBXFrameTimeBarWidth; - - CAShapeLayer *bar = [self barWithFrameDuration:frameDuration]; - bar.position = CGPointMake(self.currentX, self.frame.size.height); - - [self.scrollLayer addSublayer:bar]; - [self.barLayers addObject:bar]; - - [self.scrollLayer scrollToPoint:CGPointMake(self.currentX - self.frame.size.width, 0)]; - - [self removeStaleBars]; - - [CATransaction commit]; -} - -- (CGFloat)renderDurationTargetMilliseconds { - CGFloat maximumFramesPerSecond; - if (@available(iOS 10.3, *)) { - maximumFramesPerSecond = UIScreen.mainScreen.maximumFramesPerSecond; - } else { - // Not always strictly accurate, but works as an expedient approximation. - maximumFramesPerSecond = 60; - } - - CGFloat target = (1.0 / maximumFramesPerSecond) * MBXFrameTimeExaggeration; - return [self roundedFloat:target]; -} - -- (CGFloat)roundedFloat:(CGFloat)f { -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - CGFloat scaleFactor = [UIScreen mainScreen].nativeScale; -#elif TARGET_OS_MAC - CGFloat scaleFactor = [NSScreen mainScreen].backingScaleFactor; -#endif - return round(f * scaleFactor) / scaleFactor; -} - -- (CAShapeLayer *)barWithFrameDuration:(CFTimeInterval)frameDuration { - CAShapeLayer *bar = [CAShapeLayer layer]; - - CGRect barRect = CGRectMake(0, 0, MBXFrameTimeBarWidth, -(fminf(frameDuration * MBXFrameTimeExaggeration, self.frame.size.height))); - UIBezierPath *barPath = [UIBezierPath bezierPathWithRect:barRect]; - bar.path = barPath.CGPath; - bar.fillColor = [self colorForFrameDuration:frameDuration].CGColor; - - return bar; -} - -- (UIColor *)colorForFrameDuration:(CFTimeInterval)frameDuration { - CGFloat renderDurationTargetMilliseconds = [self renderDurationTargetMilliseconds]; - frameDuration *= MBXFrameTimeExaggeration; - - if (frameDuration < renderDurationTargetMilliseconds && frameDuration > (renderDurationTargetMilliseconds * 0.75)) { - return self.warningColor; - } else if (frameDuration > renderDurationTargetMilliseconds) { - return self.dangerColor; - } else { - return self.safeColor; - } -} - -- (void)removeStaleBars { - if (self.barLayers.count > (self.frame.size.width / MBXFrameTimeBarWidth * 3)) { - NSRange staleBarsRange = NSMakeRange(0, self.frame.size.width / MBXFrameTimeBarWidth); - NSArray *staleBars = [self.barLayers subarrayWithRange:staleBarsRange]; - [staleBars makeObjectsPerformSelector:@selector(removeFromSuperlayer)]; - [self.barLayers removeObjectsInRange:staleBarsRange]; - } -} - -@end diff --git a/platform/ios/app/MBXOfflinePacksTableViewController.h b/platform/ios/app/MBXOfflinePacksTableViewController.h deleted file mode 100644 index a0d8e703ef8..00000000000 --- a/platform/ios/app/MBXOfflinePacksTableViewController.h +++ /dev/null @@ -1,9 +0,0 @@ -#import - -@class MGLMapView; - -@interface MBXOfflinePacksTableViewController : UITableViewController - -@property (nonatomic, weak) MGLMapView *mapView; - -@end diff --git a/platform/ios/app/MBXOfflinePacksTableViewController.m b/platform/ios/app/MBXOfflinePacksTableViewController.m deleted file mode 100644 index bc8407a46dc..00000000000 --- a/platform/ios/app/MBXOfflinePacksTableViewController.m +++ /dev/null @@ -1,284 +0,0 @@ -@import Mapbox; - -#import "MBXOfflinePacksTableViewController.h" - - -static NSString * const MBXOfflinePackContextNameKey = @"Name"; - -static NSString * const MBXOfflinePacksTableViewInactiveCellReuseIdentifier = @"Inactive"; -static NSString * const MBXOfflinePacksTableViewActiveCellReuseIdentifier = @"Active"; - -@implementation MGLOfflinePack (MBXAdditions) - -- (NSString *)name { - NSDictionary *userInfo = [NSKeyedUnarchiver unarchiveObjectWithData:self.context]; - NSAssert([userInfo isKindOfClass:[NSDictionary class]], @"Context of offline pack isn’t a dictionary."); - NSString *name = userInfo[MBXOfflinePackContextNameKey]; - NSAssert([name isKindOfClass:[NSString class]], @"Name of offline pack isn’t a string."); - return name; -} - -@end - -@implementation MGLTilePyramidOfflineRegion (MBXAdditions) - -- (void)applyToMapView:(MGLMapView *)mapView { - mapView.styleURL = self.styleURL; - [mapView setVisibleCoordinateBounds:self.bounds]; - mapView.zoomLevel = MIN(self.maximumZoomLevel, MAX(self.minimumZoomLevel, mapView.zoomLevel)); -} - -@end - -@implementation MBXOfflinePacksTableViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - [[MGLOfflineStorage sharedOfflineStorage] addObserver:self forKeyPath:@"packs" options:NSKeyValueObservingOptionInitial context:NULL]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(offlinePackProgressDidChange:) name:MGLOfflinePackProgressChangedNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(offlinePackDidReceiveError:) name:MGLOfflinePackErrorNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(offlinePackDidReceiveMaximumAllowedMapboxTiles:) name:MGLOfflinePackMaximumMapboxTilesReachedNotification object:nil]; -} - -- (void)dealloc { - [[MGLOfflineStorage sharedOfflineStorage] removeObserver:self forKeyPath:@"packs"]; - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if ([keyPath isEqualToString:@"packs"]) { - NSKeyValueChange changeKind = [change[NSKeyValueChangeKindKey] unsignedIntegerValue]; - NSIndexSet *indices = change[NSKeyValueChangeIndexesKey]; - NSMutableArray *indexPaths; - if (indices) { - indexPaths = [NSMutableArray arrayWithCapacity:indices.count]; - [indices enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) { - [indexPaths addObject:[NSIndexPath indexPathForRow:idx inSection:0]]; - }]; - } - switch (changeKind) { - case NSKeyValueChangeInsertion: - [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic]; - break; - - case NSKeyValueChangeRemoval: - [self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic]; - break; - - case NSKeyValueChangeReplacement: - [self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic]; - break; - - default: - [self.tableView reloadData]; - - for (MGLOfflinePack *pack in [MGLOfflineStorage sharedOfflineStorage].packs) { - if (pack.state == MGLOfflinePackStateUnknown) { - [pack requestProgress]; - } - } - - break; - } - } else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -- (IBAction)addCurrentRegion:(id)sender { - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Add Offline Pack" message:@"Choose a name for the pack:" preferredStyle:UIAlertControllerStyleAlert]; - [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { - textField.placeholder = [NSString stringWithFormat:@"%@", MGLStringFromCoordinateBounds(self.mapView.visibleCoordinateBounds)]; - }]; - [alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]]; - - UIAlertAction *downloadAction = [UIAlertAction actionWithTitle:@"Download" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { - MGLMapView *mapView = self.mapView; - NSAssert(mapView, @"No map view to get the current region from."); - - UITextField *nameField = alertController.textFields.firstObject; - NSString *name = nameField.text; - if (!name.length) { - name = nameField.placeholder; - } - - MGLTilePyramidOfflineRegion *region = [[MGLTilePyramidOfflineRegion alloc] initWithStyleURL:mapView.styleURL bounds:mapView.visibleCoordinateBounds fromZoomLevel:mapView.zoomLevel toZoomLevel:mapView.maximumZoomLevel]; - id ideographicFontFamilyName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"MGLIdeographicFontFamilyName"]; - if([ideographicFontFamilyName isKindOfClass:[NSNumber class]] && ![ideographicFontFamilyName boolValue]){ - region.includesIdeographicGlyphs = YES; - } - NSData *context = [NSKeyedArchiver archivedDataWithRootObject:@{ - MBXOfflinePackContextNameKey: name, - }]; - - [[MGLOfflineStorage sharedOfflineStorage] addPackForRegion:region withContext:context completionHandler:^(MGLOfflinePack *pack, NSError *error) { - if (error) { - NSString *message = [NSString stringWithFormat:@"Mapbox GL was unable to add the offline pack “%@”.", name]; - UIAlertController *errorAlertController = [UIAlertController alertControllerWithTitle:@"Can’t Add Offline Pack" message:message preferredStyle:UIAlertControllerStyleAlert]; - [errorAlertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]]; - [self presentViewController:errorAlertController animated:YES completion:nil]; - } else { - [pack resume]; - } - }]; - }]; - [alertController addAction:downloadAction]; - alertController.preferredAction = downloadAction; - - [self presentViewController:alertController animated:YES completion:nil]; -} - -- (IBAction)invalidatePacks:(id)sender { - for (MGLOfflinePack *pack in [MGLOfflineStorage sharedOfflineStorage].packs) { - - CFTimeInterval start = CACurrentMediaTime(); - [[MGLOfflineStorage sharedOfflineStorage] invalidatePack:pack withCompletionHandler:^(NSError * _Nullable error) { - CFTimeInterval end = CACurrentMediaTime(); - CFTimeInterval difference = end - start; - NSLog(@"invalidatePack Started: %f Ended: %f Total Time: %f", start, end, difference); - }]; - } -} - - -#pragma mark - Table view data source - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return [MGLOfflineStorage sharedOfflineStorage].packs.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - MGLOfflinePack *pack = [MGLOfflineStorage sharedOfflineStorage].packs[indexPath.row]; - - NSString *reuseIdentifier = pack.state == MGLOfflinePackStateActive ? MBXOfflinePacksTableViewActiveCellReuseIdentifier : MBXOfflinePacksTableViewInactiveCellReuseIdentifier; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath]; - [self updateTableViewCell:cell atIndexPath:indexPath forPack:pack]; - - return cell; -} - -- (void)updateTableViewCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath forPack:(MGLOfflinePack *)pack { - cell.textLabel.text = pack.name; - MGLOfflinePackProgress progress = pack.progress; - NSString *completedString = [NSNumberFormatter localizedStringFromNumber:@(progress.countOfResourcesCompleted) - numberStyle:NSNumberFormatterDecimalStyle]; - NSString *expectedString = [NSNumberFormatter localizedStringFromNumber:@(progress.countOfResourcesExpected) - numberStyle:NSNumberFormatterDecimalStyle]; - NSString *byteCountString = [NSByteCountFormatter stringFromByteCount:progress.countOfBytesCompleted - countStyle:NSByteCountFormatterCountStyleFile]; - NSString *statusString; - switch (pack.state) { - case MGLOfflinePackStateUnknown: - statusString = @"Calculating progress…"; - break; - - case MGLOfflinePackStateInactive: - statusString = [NSString stringWithFormat:@"%@ of %@ resources (%@)", - completedString, expectedString, byteCountString]; - break; - - case MGLOfflinePackStateComplete: - statusString = [NSString stringWithFormat:@"%@ resources (%@)", - completedString, byteCountString]; - break; - - case MGLOfflinePackStateActive: - if (progress.countOfResourcesExpected) { - completedString = [NSNumberFormatter localizedStringFromNumber:@(progress.countOfResourcesCompleted + 1) - numberStyle:NSNumberFormatterDecimalStyle]; - } - if (progress.maximumResourcesExpected > progress.countOfResourcesExpected) { - expectedString = [NSString stringWithFormat:@"at least %@", expectedString]; - } - statusString = [NSString stringWithFormat:@"Downloading %@ of %@ resources (%@ so far)…", - completedString, expectedString, byteCountString]; - break; - - case MGLOfflinePackStateInvalid: - NSAssert(NO, @"Invalid offline pack at index path %@", indexPath); - break; - } - cell.detailTextLabel.text = statusString; -} - -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { - if (editingStyle == UITableViewCellEditingStyleDelete) { - MGLOfflinePack *pack = [MGLOfflineStorage sharedOfflineStorage].packs[indexPath.row]; - [[MGLOfflineStorage sharedOfflineStorage] removePack:pack withCompletionHandler:nil]; - } -} - -#pragma mark - Table view delegate - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - - MGLOfflinePack *pack = [MGLOfflineStorage sharedOfflineStorage].packs[indexPath.row]; - switch (pack.state) { - case MGLOfflinePackStateUnknown: - break; - - case MGLOfflinePackStateComplete: - if ([pack.region respondsToSelector:@selector(applyToMapView:)]) { - [pack.region performSelector:@selector(applyToMapView:) withObject:self.mapView]; - } - [self performSegueWithIdentifier:@"ReturnToMap" sender:self]; - break; - - case MGLOfflinePackStateInactive: - [pack resume]; - break; - - case MGLOfflinePackStateActive: - [pack suspend]; - break; - - case MGLOfflinePackStateInvalid: - NSAssert(NO, @"Invalid offline pack at index path %@", indexPath); - break; - } -} - -#pragma mark - Offline pack delegate - -- (void)offlinePackProgressDidChange:(NSNotification *)notification { - MGLOfflinePack *pack = notification.object; - NSAssert([pack isKindOfClass:[MGLOfflinePack class]], @"MGLOfflineStorage notification has a non-pack object."); - - NSUInteger index = [[MGLOfflineStorage sharedOfflineStorage].packs indexOfObject:pack]; - if (index == NSNotFound) { - return; - } - - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0]; - UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; - [self updateTableViewCell:cell atIndexPath:indexPath forPack:pack]; -} - -- (void)offlinePackDidReceiveError:(NSNotification *)notification { - MGLOfflinePack *pack = notification.object; - NSAssert([pack isKindOfClass:[MGLOfflinePack class]], @"MGLOfflineStorage notification has a non-pack object."); - - NSError *error = notification.userInfo[MGLOfflinePackUserInfoKeyError]; - NSAssert([error isKindOfClass:[NSError class]], @"MGLOfflineStorage notification has a non-error error."); - - NSString *message = [NSString stringWithFormat:@"Mapbox GL encountered an error while downloading the offline pack “%@”: %@", pack.name, error.localizedFailureReason]; - if (error.code == MGLErrorCodeConnectionFailed) { - NSLog(@"%@", message); - } else { - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Error Downloading Offline Pack" message:message preferredStyle:UIAlertControllerStyleAlert]; - [alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]]; - [self presentViewController:alertController animated:YES completion:nil]; - } -} - -- (void)offlinePackDidReceiveMaximumAllowedMapboxTiles:(NSNotification *)notification { - MGLOfflinePack *pack = notification.object; - NSAssert([pack isKindOfClass:[MGLOfflinePack class]], @"MGLOfflineStorage notification has a non-pack object."); - - uint64_t maximumCount = [notification.userInfo[MGLOfflinePackUserInfoKeyMaximumCount] unsignedLongLongValue]; - NSLog(@"Offline pack “%@” reached limit of %llu tiles.", pack.name, maximumCount); -} - -@end diff --git a/platform/ios/app/MBXOrnamentsViewController.h b/platform/ios/app/MBXOrnamentsViewController.h deleted file mode 100644 index 087101cdc0f..00000000000 --- a/platform/ios/app/MBXOrnamentsViewController.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface MBXOrnamentsViewController : UIViewController - -@end diff --git a/platform/ios/app/MBXOrnamentsViewController.m b/platform/ios/app/MBXOrnamentsViewController.m deleted file mode 100644 index f451f647e52..00000000000 --- a/platform/ios/app/MBXOrnamentsViewController.m +++ /dev/null @@ -1,96 +0,0 @@ -@import Mapbox; - -#import "MBXOrnamentsViewController.h" - -@interface MBXOrnamentsViewController () - -@property (nonatomic) MGLMapView *mapView; -@property (nonatomic) NSTimer *timer; -@property (nonatomic) NSInteger currentPositionIndex; - -@end - -@implementation MBXOrnamentsViewController - -- (void)setCurrentPositionIndex:(NSInteger)currentPositionIndex { - MGLOrnamentPosition ornamentPositions[5][4] = { - { - MGLOrnamentPositionTopLeft, - MGLOrnamentPositionTopRight, - MGLOrnamentPositionBottomRight, - MGLOrnamentPositionBottomLeft - }, - { - MGLOrnamentPositionTopRight, - MGLOrnamentPositionBottomRight, - MGLOrnamentPositionBottomLeft, - MGLOrnamentPositionTopLeft - }, - { - MGLOrnamentPositionBottomRight, - MGLOrnamentPositionBottomLeft, - MGLOrnamentPositionTopLeft, - MGLOrnamentPositionTopRight - }, - { - MGLOrnamentPositionBottomLeft, - MGLOrnamentPositionTopLeft, - MGLOrnamentPositionTopRight, - MGLOrnamentPositionBottomRight - }, - { - MGLOrnamentPositionTopLeft, - MGLOrnamentPositionTopRight, - MGLOrnamentPositionBottomRight, - MGLOrnamentPositionBottomLeft - } - }; - MGLOrnamentPosition *currentPosition = ornamentPositions[currentPositionIndex]; - self.mapView.scaleBarPosition = currentPosition[0]; - self.mapView.compassViewPosition = currentPosition[1]; - self.mapView.logoViewPosition = currentPosition[2]; - self.mapView.attributionButtonPosition = currentPosition[3]; - - _currentPositionIndex = currentPositionIndex; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - self.title = @"Ornaments"; - - MGLMapView *mapView = [[MGLMapView alloc] initWithFrame:self.view.bounds]; - mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - [mapView setCenterCoordinate:CLLocationCoordinate2DMake(39.915143, 116.404053) - zoomLevel:16 - direction:30 - animated:NO]; - mapView.delegate = self; - mapView.showsScale = YES; - [self.view addSubview:mapView]; - - self.mapView = mapView; -} - -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; - [self.timer invalidate]; - self.timer = nil; -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - self.timer = [NSTimer scheduledTimerWithTimeInterval:1 - target:self - selector:@selector(onTimerTick) - userInfo:nil - repeats:YES]; -} - -- (void)onTimerTick { - self.currentPositionIndex ++; - if (self.currentPositionIndex >= 4) { - self.currentPositionIndex = 0; - } -} - -@end diff --git a/platform/ios/app/MBXSnapshotsViewController.h b/platform/ios/app/MBXSnapshotsViewController.h deleted file mode 100644 index f791602e98a..00000000000 --- a/platform/ios/app/MBXSnapshotsViewController.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface MBXSnapshotsViewController : UIViewController - -@end diff --git a/platform/ios/app/MBXSnapshotsViewController.m b/platform/ios/app/MBXSnapshotsViewController.m deleted file mode 100644 index 747ff39248b..00000000000 --- a/platform/ios/app/MBXSnapshotsViewController.m +++ /dev/null @@ -1,67 +0,0 @@ -@import Mapbox; - -#import "MBXSnapshotsViewController.h" - -@interface MBXSnapshotsViewController () - -// Top row -@property (weak, nonatomic) IBOutlet UIImageView *snapshotImageViewTL; -@property (weak, nonatomic) IBOutlet UIImageView *snapshotImageViewTM; -@property (weak, nonatomic) IBOutlet UIImageView *snapshotImageViewTR; - -// Bottom row -@property (weak, nonatomic) IBOutlet UIImageView *snapshotImageViewBL; -@property (weak, nonatomic) IBOutlet UIImageView *snapshotImageViewBM; -@property (weak, nonatomic) IBOutlet UIImageView *snapshotImageViewBR; - -@end - -@implementation MBXSnapshotsViewController { - // Top row - MGLMapSnapshotter* topLeftSnapshotter; - MGLMapSnapshotter* topCenterSnapshotter; - MGLMapSnapshotter* topRightSnapshotter; - - // Bottom row - MGLMapSnapshotter* bottomLeftSnapshotter; - MGLMapSnapshotter* bottomCenterSnapshotter; - MGLMapSnapshotter* bottomRightSnapshotter; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - // Start snapshotters - topLeftSnapshotter = [self startSnapshotterForImageView:_snapshotImageViewTL coordinates:CLLocationCoordinate2DMake(37.7184, -122.4365)]; - topCenterSnapshotter = [self startSnapshotterForImageView:_snapshotImageViewTM coordinates:CLLocationCoordinate2DMake(38.8936, -77.0146)]; - topRightSnapshotter = [self startSnapshotterForImageView:_snapshotImageViewTR coordinates:CLLocationCoordinate2DMake(-13.1356, -74.2442)]; - - bottomLeftSnapshotter = [self startSnapshotterForImageView:_snapshotImageViewBL coordinates:CLLocationCoordinate2DMake(52.5072, 13.4247)]; - bottomCenterSnapshotter = [self startSnapshotterForImageView:_snapshotImageViewBM coordinates:CLLocationCoordinate2DMake(60.2118, 24.6754)]; - bottomRightSnapshotter = [self startSnapshotterForImageView:_snapshotImageViewBR coordinates:CLLocationCoordinate2DMake(31.2780, 121.4286)]; -} - -- (MGLMapSnapshotter*) startSnapshotterForImageView:(UIImageView*) imageView coordinates:(CLLocationCoordinate2D) coordinates { - // Create snapshot options - MGLMapCamera* mapCamera = [[MGLMapCamera alloc] init]; - mapCamera.pitch = 20; - mapCamera.centerCoordinate = coordinates; - MGLMapSnapshotOptions* options = [[MGLMapSnapshotOptions alloc] initWithStyleURL:[MGLStyle satelliteStreetsStyleURL] camera:mapCamera size:CGSizeMake(imageView.frame.size.width, imageView.frame.size.height)]; - options.zoomLevel = 10; - - // Create and start the snapshotter - __weak UIImageView *weakImageView = imageView; - MGLMapSnapshotter* snapshotter = [[MGLMapSnapshotter alloc] initWithOptions:options]; - [snapshotter startWithCompletionHandler: ^(MGLMapSnapshot* snapshot, NSError *error) { - if (error) { - NSLog(@"Could not load snapshot: %@", [error localizedDescription]); - } else { - weakImageView.image = snapshot.image; - } - }]; - - return snapshotter; -} - - -@end diff --git a/platform/ios/app/MBXState.h b/platform/ios/app/MBXState.h deleted file mode 100644 index cf68016e984..00000000000 --- a/platform/ios/app/MBXState.h +++ /dev/null @@ -1,33 +0,0 @@ -@import Mapbox; - -NS_ASSUME_NONNULL_BEGIN - -FOUNDATION_EXTERN NSString *const MBXCamera; -FOUNDATION_EXTERN NSString *const MBXShowsUserLocation; -FOUNDATION_EXTERN NSString *const MBXUserTrackingMode; -FOUNDATION_EXTERN NSString *const MBXMapShowsHeadingIndicator; -FOUNDATION_EXTERN NSString *const MBXShowsMapScale; -FOUNDATION_EXTERN NSString *const MBXShowsZoomLevelOrnament; -FOUNDATION_EXTERN NSString *const MBXShowsTimeFrameGraph; -FOUNDATION_EXTERN NSString *const MBXMapFramerateMeasurementEnabled; -FOUNDATION_EXTERN NSString *const MBXDebugMaskValue; -FOUNDATION_EXTERN NSString *const MBXReuseQueueStatsEnabled; - -@interface MBXState : NSObject - -@property (nonatomic, nullable) MGLMapCamera *camera; -@property (nonatomic) BOOL showsUserLocation; -@property (nonatomic) MGLUserTrackingMode userTrackingMode; -@property (nonatomic) BOOL showsUserHeadingIndicator; -@property (nonatomic) BOOL showsMapScale; -@property (nonatomic) BOOL showsZoomLevelOrnament; -@property (nonatomic) BOOL showsTimeFrameGraph; -@property (nonatomic) BOOL framerateMeasurementEnabled; -@property (nonatomic) MGLMapDebugMaskOptions debugMask; -@property (nonatomic) BOOL reuseQueueStatsEnabled; - -@property (nonatomic, readonly) NSString *debugDescription; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/app/MBXState.m b/platform/ios/app/MBXState.m deleted file mode 100644 index 455961e88a4..00000000000 --- a/platform/ios/app/MBXState.m +++ /dev/null @@ -1,80 +0,0 @@ -#import "MBXState.h" - -NSString *const MBXCamera = @"MBXCamera"; -NSString *const MBXUserTrackingMode = @"MBXUserTrackingMode"; -NSString *const MBXShowsUserLocation = @"MBXShowsUserLocation"; -NSString *const MBXDebugMaskValue = @"MBXDebugMaskValue"; -NSString *const MBXShowsZoomLevelOrnament = @"MBXShowsZoomLevelOrnament"; -NSString *const MBXShowsTimeFrameGraph = @"MBXShowsFrameTimeGraph"; -NSString *const MBXShowsMapScale = @"MBXMapShowsScale"; -NSString *const MBXMapShowsHeadingIndicator = @"MBXMapShowsHeadingIndicator"; -NSString *const MBXMapFramerateMeasurementEnabled = @"MBXMapFramerateMeasurementEnabled"; -NSString *const MBXReuseQueueStatsEnabled = @"MBXReuseQueueStatsEnabled"; - -@interface MBXState() - -@end - -@implementation MBXState - -- (void)encodeWithCoder:(NSCoder *)coder -{ - [coder encodeObject:_camera forKey:MBXCamera]; - [coder encodeObject:[NSNumber numberWithUnsignedInteger:_userTrackingMode] forKey:MBXUserTrackingMode]; - [coder encodeBool:_showsUserLocation forKey:MBXShowsUserLocation]; - [coder encodeObject:[NSNumber numberWithUnsignedInteger:_debugMask] forKey:MBXDebugMaskValue]; - [coder encodeBool:_showsZoomLevelOrnament forKey:MBXShowsZoomLevelOrnament]; - [coder encodeBool:_showsTimeFrameGraph forKey:MBXShowsTimeFrameGraph]; - [coder encodeBool:_showsMapScale forKey:MBXShowsMapScale]; - [coder encodeBool:_showsUserHeadingIndicator forKey:MBXMapShowsHeadingIndicator]; - [coder encodeBool:_framerateMeasurementEnabled forKey:MBXMapFramerateMeasurementEnabled]; - [coder encodeBool:_reuseQueueStatsEnabled forKey:MBXReuseQueueStatsEnabled]; -} - -- (nullable instancetype)initWithCoder:(nonnull NSCoder *)decoder { - if (self = [super init]) { - MGLMapCamera *decodedCamera = [decoder decodeObjectForKey:MBXCamera]; - NSNumber *decodedUserTrackingMode = [decoder decodeObjectForKey:MBXUserTrackingMode]; - BOOL decodedShowsUserLocation = [decoder decodeBoolForKey:MBXShowsUserLocation]; - NSNumber *decodedDebugMaskOptions = [decoder decodeObjectForKey:MBXDebugMaskValue]; - BOOL decodedZoomLevelOrnament = [decoder decodeBoolForKey:MBXShowsZoomLevelOrnament]; - BOOL decodedShowsTimeFrameGraph = [decoder decodeBoolForKey:MBXShowsTimeFrameGraph]; - BOOL decodedShowsMapScale = [decoder decodeBoolForKey:MBXShowsMapScale]; - BOOL decodedShowsUserHeadingIndicator = [decoder decodeBoolForKey:MBXMapShowsHeadingIndicator]; - BOOL decodedFramerateMeasurementEnabled = [decoder decodeBoolForKey:MBXMapFramerateMeasurementEnabled]; - BOOL decodedReuseQueueStatsEnabled = [decoder decodeBoolForKey:MBXReuseQueueStatsEnabled]; - - _camera = decodedCamera; - _userTrackingMode = decodedUserTrackingMode.intValue; - _showsUserLocation = decodedShowsUserLocation; - _debugMask = decodedDebugMaskOptions.intValue; - _showsZoomLevelOrnament = decodedZoomLevelOrnament; - _showsTimeFrameGraph = decodedShowsTimeFrameGraph; - _showsMapScale = decodedShowsMapScale; - _showsUserHeadingIndicator = decodedShowsUserHeadingIndicator; - _framerateMeasurementEnabled = decodedFramerateMeasurementEnabled; - _reuseQueueStatsEnabled = decodedReuseQueueStatsEnabled; - } - - return self; -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (NSString *)debugDescription { - return [NSString stringWithFormat:@"Camera: %@\nTracking mode: %lu\nShows user location: %@\nDebug mask value: %lu\nShows zoom level ornament: %@\nShows time frame graph: %@\nShows map scale: %@\nShows user heading indicator: %@\nFramerate measurement enabled: %@\nReuse queue stats enabled: %@", - self.camera, - (unsigned long)self.userTrackingMode, - self.showsUserLocation ? @"YES" : @"NO", - (unsigned long)self.debugMask, - self.showsZoomLevelOrnament ? @"YES" : @"NO", - self.showsTimeFrameGraph ? @"YES" : @"NO", - self.showsMapScale ? @"YES" : @"NO", - self.showsUserHeadingIndicator ? @"YES" : @"NO", - self.framerateMeasurementEnabled ? @"YES" : @"NO", - self.reuseQueueStatsEnabled ? @"YES" : @"NO"]; -} - -@end diff --git a/platform/ios/app/MBXStateManager.h b/platform/ios/app/MBXStateManager.h deleted file mode 100644 index 1a3c8810eb6..00000000000 --- a/platform/ios/app/MBXStateManager.h +++ /dev/null @@ -1,19 +0,0 @@ -#import -#import "MBXViewController.h" -@class MBXState; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBXStateManager : NSObject - -+ (instancetype) sharedManager; - -- (MBXState *)currentState; - -- (void)saveState:(MBXState*)mapViewController; - -- (void)resetState; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/app/MBXStateManager.m b/platform/ios/app/MBXStateManager.m deleted file mode 100644 index f9dc771e26c..00000000000 --- a/platform/ios/app/MBXStateManager.m +++ /dev/null @@ -1,43 +0,0 @@ -#import "MBXStateManager.h" -#import "MBXState.h" -#import "MBXViewController.h" - -static NSString * const MBXStateManagerMapStateKey = @"mapStateKey"; - -@interface MBXStateManager() - -@property (strong, nonatomic) MBXState *currentState; - -@end - -@implementation MBXStateManager - -+ (instancetype) sharedManager { - static dispatch_once_t once; - static MBXStateManager* sharedManager; - dispatch_once(&once, ^{ - sharedManager = [[self alloc] init]; - }); - - return sharedManager; -} - -- (MBXState*)currentState { - NSData *encodedMapState = [[NSUserDefaults standardUserDefaults] objectForKey:MBXStateManagerMapStateKey]; - MBXState *currentState = (MBXState *)[NSKeyedUnarchiver unarchiveObjectWithData:encodedMapState]; - - return currentState; -} - -- (void)saveState:(MBXState*)mapState { - NSData *encodedMapState = [NSKeyedArchiver archivedDataWithRootObject:mapState]; - [[NSUserDefaults standardUserDefaults] setObject:encodedMapState forKey:MBXStateManagerMapStateKey]; -} - -- (void)resetState { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:MBXStateManagerMapStateKey]; -} - - - -@end diff --git a/platform/ios/app/MBXUserLocationAnnotationView.h b/platform/ios/app/MBXUserLocationAnnotationView.h deleted file mode 100644 index a60658dd185..00000000000 --- a/platform/ios/app/MBXUserLocationAnnotationView.h +++ /dev/null @@ -1,5 +0,0 @@ -@import Mapbox; - -@interface MBXUserLocationAnnotationView : MGLUserLocationAnnotationView - -@end diff --git a/platform/ios/app/MBXUserLocationAnnotationView.m b/platform/ios/app/MBXUserLocationAnnotationView.m deleted file mode 100644 index 675a01930ae..00000000000 --- a/platform/ios/app/MBXUserLocationAnnotationView.m +++ /dev/null @@ -1,165 +0,0 @@ -#import "MBXUserLocationAnnotationView.h" - -const CGFloat MBXUserLocationDotSize = 10; - -@implementation MBXUserLocationAnnotationView - -- (instancetype)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self == nil) return nil; - self.backgroundColor = [UIColor clearColor]; - return self; -} - -- (void)update -{ - [self updateFrameWithSize:self.intrinsicContentSize]; - [self setNeedsDisplay]; -} - - -- (CGSize)intrinsicContentSize -{ - CGSize carSize = CGSizeMake(30, 60); - return (self.mapView.userTrackingMode == MGLUserTrackingModeFollowWithCourse) ? carSize : [self dotSize]; -} - -- (CGSize)dotSize -{ - CGFloat minDotSize = 30; - CGFloat dotSize = MAX(minDotSize, self.accuracyInPoints); - return CGSizeMake(dotSize, dotSize); -} - -- (void)updateFrameWithSize:(CGSize)size -{ - if (CGSizeEqualToSize(self.frame.size, size)) return; - - // Update frame size, keeping the existing center point. - CGRect newFrame = self.frame; - CGPoint oldCenter = self.center; - newFrame.size = size; - self.frame = newFrame; - self.center = oldCenter; -} - -- (CGFloat)accuracyInPoints -{ - CGFloat metersPerPoint = [self.mapView metersPerPointAtLatitude:self.userLocation.location.coordinate.latitude]; - return self.userLocation.location.horizontalAccuracy / metersPerPoint; -} - -- (void)drawRect:(CGRect)rect -{ - (self.mapView.userTrackingMode == MGLUserTrackingModeFollowWithCourse) ? [self drawCar] : [self drawDot]; -} - -- (void)drawDot -{ - // Accuracy - CGFloat accuracy = self.accuracyInPoints; - - CGFloat center = self.bounds.size.width / 2.0 - accuracy / 2.0; - UIBezierPath *accuracyPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(center, center, accuracy, accuracy)]; - UIColor *accuracyColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:.4]; - [accuracyColor setFill]; - [accuracyPath fill]; - - // Dot - center = self.bounds.size.width / 2.0 - MBXUserLocationDotSize / 2.0; - UIBezierPath *ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(center, center, MBXUserLocationDotSize, MBXUserLocationDotSize)]; - [UIColor.greenColor setFill]; - [ovalPath fill]; - - [UIColor.blackColor setStroke]; - ovalPath.lineWidth = 1; - [ovalPath stroke]; - - // Accuracy text - UIFont *font = [UIFont systemFontOfSize:11]; - [[NSString stringWithFormat:@"%.0f", accuracy] - drawAtPoint:CGPointZero withAttributes:@{NSFontAttributeName: font, - NSBackgroundColorAttributeName: [UIColor colorWithWhite:0 alpha:.5], - NSForegroundColorAttributeName: [UIColor whiteColor]}]; -} - -- (void)drawCar -{ - UIColor* fillColor = [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 1]; - UIColor* strokeColor = [UIColor colorWithRed: 0.592 green: 0.592 blue: 0.592 alpha: 1]; - UIColor* fillColor2 = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 1]; - - UIBezierPath* bezier2Path = [UIBezierPath bezierPath]; - [bezier2Path moveToPoint: CGPointMake(30, 7.86)]; - [bezier2Path addLineToPoint: CGPointMake(30, 52.66)]; - [bezier2Path addCurveToPoint: CGPointMake(0, 52.66) controlPoint1: CGPointMake(30, 62.05) controlPoint2: CGPointMake(0, 62.84)]; - [bezier2Path addCurveToPoint: CGPointMake(0, 7.86) controlPoint1: CGPointMake(0, 42.48) controlPoint2: CGPointMake(0, 17.89)]; - [bezier2Path addCurveToPoint: CGPointMake(30, 7.86) controlPoint1: CGPointMake(-0, -2.17) controlPoint2: CGPointMake(30, -3.05)]; - [bezier2Path closePath]; - bezier2Path.usesEvenOddFillRule = YES; - - [fillColor setFill]; - [bezier2Path fill]; - - UIBezierPath* bezier3Path = [UIBezierPath bezierPath]; - [bezier3Path moveToPoint: CGPointMake(30, 7.86)]; - [bezier3Path addLineToPoint: CGPointMake(30, 52.66)]; - [bezier3Path addCurveToPoint: CGPointMake(0, 52.66) controlPoint1: CGPointMake(30, 62.05) controlPoint2: CGPointMake(0, 62.84)]; - [bezier3Path addCurveToPoint: CGPointMake(0, 7.86) controlPoint1: CGPointMake(0, 42.48) controlPoint2: CGPointMake(0, 17.89)]; - [bezier3Path addCurveToPoint: CGPointMake(30, 7.86) controlPoint1: CGPointMake(0, -2.17) controlPoint2: CGPointMake(30, -3.05)]; - [bezier3Path closePath]; - [strokeColor setStroke]; - bezier3Path.lineWidth = 1; - [bezier3Path stroke]; - - UIBezierPath* bezier4Path = [UIBezierPath bezierPath]; - [bezier4Path moveToPoint: CGPointMake(15.56, 4.26)]; - [bezier4Path addCurveToPoint: CGPointMake(26, 6) controlPoint1: CGPointMake(21, 4.26) controlPoint2: CGPointMake(26, 6)]; - [bezier4Path addCurveToPoint: CGPointMake(23, 21) controlPoint1: CGPointMake(26, 6) controlPoint2: CGPointMake(29, 17)]; - [bezier4Path addCurveToPoint: CGPointMake(16, 21) controlPoint1: CGPointMake(20.03, 22.98) controlPoint2: CGPointMake(16, 21)]; - [bezier4Path addCurveToPoint: CGPointMake(7, 21) controlPoint1: CGPointMake(16, 21) controlPoint2: CGPointMake(9.02, 23.53)]; - [bezier4Path addCurveToPoint: CGPointMake(4, 6) controlPoint1: CGPointMake(3, 16) controlPoint2: CGPointMake(4, 6)]; - [bezier4Path addCurveToPoint: CGPointMake(15.56, 4.26) controlPoint1: CGPointMake(4, 6) controlPoint2: CGPointMake(10.12, 4.26)]; - [bezier4Path closePath]; - bezier4Path.usesEvenOddFillRule = YES; - - [fillColor2 setFill]; - [bezier4Path fill]; - - UIBezierPath* rectanglePath = [UIBezierPath bezierPath]; - [rectanglePath moveToPoint: CGPointMake(25, 46)]; - [rectanglePath addCurveToPoint: CGPointMake(21, 55) controlPoint1: CGPointMake(31, 46) controlPoint2: CGPointMake(28.5, 55)]; - [rectanglePath addCurveToPoint: CGPointMake(9, 55) controlPoint1: CGPointMake(13.5, 55) controlPoint2: CGPointMake(14, 55)]; - [rectanglePath addCurveToPoint: CGPointMake(5, 46) controlPoint1: CGPointMake(4, 55) controlPoint2: CGPointMake(0, 46)]; - [rectanglePath addCurveToPoint: CGPointMake(25, 46) controlPoint1: CGPointMake(10, 46) controlPoint2: CGPointMake(19, 46)]; - [rectanglePath closePath]; - [UIColor.whiteColor setFill]; - [rectanglePath fill]; - - UIBezierPath* bezierPath = [UIBezierPath bezierPath]; - [UIColor.whiteColor setFill]; - [bezierPath fill]; - - UIBezierPath* rectangle2Path = [UIBezierPath bezierPath]; - [rectangle2Path moveToPoint: CGPointMake(2, 35)]; - [rectangle2Path addCurveToPoint: CGPointMake(4.36, 35) controlPoint1: CGPointMake(2, 39) controlPoint2: CGPointMake(4.36, 35)]; - [rectangle2Path addCurveToPoint: CGPointMake(4.36, 22) controlPoint1: CGPointMake(4.36, 35) controlPoint2: CGPointMake(5.55, 26)]; - [rectangle2Path addCurveToPoint: CGPointMake(2, 22) controlPoint1: CGPointMake(3.18, 18) controlPoint2: CGPointMake(2, 22)]; - [rectangle2Path addCurveToPoint: CGPointMake(2, 35) controlPoint1: CGPointMake(2, 22) controlPoint2: CGPointMake(2, 31)]; - [rectangle2Path closePath]; - [UIColor.whiteColor setFill]; - [rectangle2Path fill]; - - UIBezierPath* rectangle3Path = [UIBezierPath bezierPath]; - [rectangle3Path moveToPoint: CGPointMake(28, 35)]; - [rectangle3Path addCurveToPoint: CGPointMake(25.64, 35) controlPoint1: CGPointMake(28, 39) controlPoint2: CGPointMake(25.64, 35)]; - [rectangle3Path addCurveToPoint: CGPointMake(25.64, 22) controlPoint1: CGPointMake(25.64, 35) controlPoint2: CGPointMake(24.45, 26)]; - [rectangle3Path addCurveToPoint: CGPointMake(28, 22) controlPoint1: CGPointMake(26.82, 18) controlPoint2: CGPointMake(28, 22)]; - [rectangle3Path addCurveToPoint: CGPointMake(28, 35) controlPoint1: CGPointMake(28, 22) controlPoint2: CGPointMake(28, 31)]; - [rectangle3Path closePath]; - [UIColor.whiteColor setFill]; - [rectangle3Path fill]; -} - -@end diff --git a/platform/ios/app/MBXViewController.h b/platform/ios/app/MBXViewController.h deleted file mode 100644 index 924d3af60c0..00000000000 --- a/platform/ios/app/MBXViewController.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface MBXViewController : UIViewController - -@end diff --git a/platform/ios/app/MBXViewController.m b/platform/ios/app/MBXViewController.m deleted file mode 100644 index 82a68e074a5..00000000000 --- a/platform/ios/app/MBXViewController.m +++ /dev/null @@ -1,2369 +0,0 @@ -@import Mapbox; - -#import "MBXViewController.h" - -#import "MBXAppDelegate.h" -#import "MBXCustomCalloutView.h" -#import "MBXOfflinePacksTableViewController.h" -#import "MBXAnnotationView.h" -#import "MBXUserLocationAnnotationView.h" -#import "LimeGreenStyleLayer.h" -#import "MBXEmbeddedMapViewController.h" -#import "MBXOrnamentsViewController.h" -#import "MBXStateManager.h" -#import "MBXState.h" - -#import "MBXFrameTimeGraphView.h" -#import "../src/MGLMapView_Experimental.h" - -#import - -static const CLLocationCoordinate2D WorldTourDestinations[] = { - { .latitude = 38.8999418, .longitude = -77.033996 }, - { .latitude = 37.7884307, .longitude = -122.3998631 }, - { .latitude = 52.5003103, .longitude = 13.4197763 }, - { .latitude = 60.1712627, .longitude = 24.9378866 }, - { .latitude = 53.8948782, .longitude = 27.5558476 }, -}; - -static const MGLCoordinateBounds colorado = { - .sw = { .latitude = 36.986207, .longitude = -109.049896}, - .ne = { .latitude = 40.989329, .longitude = -102.062592}, -}; - -static NSString * const MBXViewControllerAnnotationViewReuseIdentifer = @"MBXViewControllerAnnotationViewReuseIdentifer"; - -typedef NS_ENUM(NSInteger, MBXSettingsSections) { - MBXSettingsDebugTools = 0, - MBXSettingsAnnotations, - MBXSettingsRuntimeStyling, - MBXSettingsMiscellaneous, -}; - -typedef NS_ENUM(NSInteger, MBXSettingsDebugToolsRows) { - MBXSettingsDebugToolsResetPosition = 0, - MBXSettingsDebugToolsTileBoundaries, - MBXSettingsDebugToolsTileInfo, - MBXSettingsDebugToolsTimestamps, - MBXSettingsDebugToolsCollisionBoxes, - MBXSettingsDebugToolsOverdrawVisualization, - MBXSettingsDebugToolsShowZoomLevel, - MBXSettingsDebugToolsShowFrameTimeGraph, - MBXSettingsDebugToolsShowReuseQueueStats -}; - -typedef NS_ENUM(NSInteger, MBXSettingsAnnotationsRows) { - MBXSettingsAnnotations100Views = 0, - MBXSettingsAnnotations1000Views, - MBXSettingsAnnotations10000Views, - MBXSettingsAnnotations100Sprites, - MBXSettingsAnnotations1000Sprites, - MBXSettingsAnnotations10000Sprites, - MBXSettingsAnnotationAnimation, - MBXSettingsAnnotationsTestShapes, - MBXSettingsAnnotationsCustomCallout, - MBXSettingsAnnotationsQueryAnnotations, - MBXSettingsAnnotationsCustomUserDot, - MBXSettingsAnnotationsRemoveAnnotations, - MBXSettingsAnnotationSelectRandomOffscreenPointAnnotation, - MBXSettingsAnnotationCenterSelectedAnnotation, - MBXSettingsAnnotationAddVisibleAreaPolyline -}; - -typedef NS_ENUM(NSInteger, MBXSettingsRuntimeStylingRows) { - MBXSettingsRuntimeStylingBuildingExtrusions = 0, - MBXSettingsRuntimeStylingWater, - MBXSettingsRuntimeStylingRoads, - MBXSettingsRuntimeStylingRaster, - MBXSettingsRuntimeStylingShape, - MBXSettingsRuntimeStylingSymbols, - MBXSettingsRuntimeStylingBuildings, - MBXSettingsRuntimeStylingFerry, - MBXSettingsRuntimeStylingParks, - MBXSettingsRuntimeStylingFilteredFill, - MBXSettingsRuntimeStylingFilteredLines, - MBXSettingsRuntimeStylingNumericFilteredFill, - MBXSettingsRuntimeStylingStyleQuery, - MBXSettingsRuntimeStylingFeatureSource, - MBXSettingsRuntimeStylingPointCollection, - MBXSettingsRuntimeStylingUpdateShapeSourceData, - MBXSettingsRuntimeStylingUpdateShapeSourceURL, - MBXSettingsRuntimeStylingUpdateShapeSourceFeatures, - MBXSettingsRuntimeStylingVectorTileSource, - MBXSettingsRuntimeStylingRasterTileSource, - MBXSettingsRuntimeStylingImageSource, - MBXSettingsRuntimeStylingRouteLine, - MBXSettingsRuntimeStylingAddLimeGreenTriangleLayer, - MBXSettingsRuntimeStylingDDSPolygon, - MBXSettingsRuntimeStylingCustomLatLonGrid, -}; - -typedef NS_ENUM(NSInteger, MBXSettingsMiscellaneousRows) { - MBXSettingsMiscellaneousWorldTour, - MBXSettingsMiscellaneousRandomTour, - MBXSettingsMiscellaneousScrollView, - MBXSettingsMiscellaneousToggleTwoMaps, - MBXSettingsMiscellaneousLocalizeLabels, - MBXSettingsMiscellaneousShowSnapshots, - MBXSettingsMiscellaneousMissingIcon, - MBXSettingsMiscellaneousShouldLimitCameraChanges, - MBXSettingsMiscellaneousSetContentInsets, - MBXSettingsMiscellaneousShowCustomLocationManager, - MBXSettingsMiscellaneousOrnamentsPlacement, - MBXSettingsMiscellaneousPrintLogFile, - MBXSettingsMiscellaneousDeleteLogFile -}; - -// Utility methods -CLLocationCoordinate2D coordinateCentered(CLLocationCoordinate2D origin, CLLocationDegrees bearing, CLLocationDistance distance) { - - // Convert to radians - double multiplier = M_PI / 180.0; - double sourceLatitude = multiplier * origin.latitude; - double sourceLongitude = multiplier * origin.longitude; - bearing *= multiplier; - distance /= 6378137.0; - - // Pulled from MGLRadianCoordinateAtDistanceFacingDirection: - double latitude = asin((sin(sourceLatitude) * cos(distance)) + - (cos(sourceLatitude) * sin(distance) * cos(bearing))); - - double longitude = sourceLongitude + atan2((sin(bearing) * sin(distance) * cos(sourceLatitude)), - cos(distance) - (sin(sourceLatitude) * sin(latitude))); - - CLLocationCoordinate2D result; - result.latitude = fmin(85.0, fmax(-85.0, (latitude / multiplier))); - result.longitude = longitude / multiplier; - return result; -} - -CLLocationCoordinate2D randomWorldCoordinate() { - - static const struct { - CLLocationCoordinate2D coordinate; - CLLocationDistance radius; - } landmasses[] = { - // Rough land masses - {{ 38.328531, 94.778736 }, 4100000 }, // Asia - {{ 1.477244, 18.138111 }, 4100000 }, // Africa - {{ 52.310059, 22.295425 }, 2000000 }, // Europe - {{ 42.344216, -96.532700 }, 3000000 }, // N America - {{ -11.537273, -57.035181 }, 2220000 }, // S America - {{ -20.997030, 134.660541 }, 2220000 }, // Australia - - // A few cities - {{ 51.504787, -0.106977 }, 33000 }, // London - {{ 37.740186, -122.437086 }, 8500 }, // SF - {{ 52.509978, 13.406510 }, 12000 }, // Berlin - {{ 12.966246, 77.586505 }, 19000 } // Bengaluru - }; - - NSInteger index = arc4random_uniform(sizeof(landmasses)/sizeof(landmasses[0])); - CLLocationCoordinate2D coordinate = landmasses[index].coordinate; - CLLocationDistance radius = landmasses[index].radius; - - // Now create a world coord - CLLocationDegrees heading = (CLLocationDegrees)arc4random_uniform(360); - CLLocationDistance distance = (CLLocationDistance)arc4random_uniform(radius); - CLLocationCoordinate2D newLocation = coordinateCentered(coordinate, heading, distance); - return newLocation; -} - - - - - -@interface MBXDroppedPinAnnotation : MGLPointAnnotation -@end - -@implementation MBXDroppedPinAnnotation -@end - -@interface MBXCustomCalloutAnnotation : MGLPointAnnotation -@property (nonatomic, assign) BOOL anchoredToAnnotation; -@property (nonatomic, assign) BOOL dismissesAutomatically; -@end - -@implementation MBXCustomCalloutAnnotation -@end - -@interface MBXSpriteBackedAnnotation : MGLPointAnnotation -@end - -@implementation MBXSpriteBackedAnnotation -@end - -@interface MBXViewController () - - -@property (nonatomic) IBOutlet MGLMapView *mapView; -@property (nonatomic) MBXState *currentState; -@property (weak, nonatomic) IBOutlet UIButton *hudLabel; -@property (weak, nonatomic) IBOutlet MBXFrameTimeGraphView *frameTimeGraphView; -@property (nonatomic) NSInteger styleIndex; -@property (nonatomic) BOOL customUserLocationAnnnotationEnabled; -@property (nonatomic, getter=isLocalizingLabels) BOOL localizingLabels; -@property (nonatomic) BOOL reuseQueueStatsEnabled; -@property (nonatomic) BOOL frameTimeGraphEnabled; -@property (nonatomic) BOOL shouldLimitCameraChanges; -@property (nonatomic) BOOL randomWalk; -@property (nonatomic) BOOL zoomLevelOrnamentEnabled; -@property (nonatomic) NSMutableArray *helperWindows; -@property (nonatomic) NSMutableArray *contentInsetsOverlays; - -@end - -@interface MGLMapView (MBXViewController) -@property (nonatomic) NSDictionary *annotationViewReuseQueueByIdentifier; -@end - -@implementation MBXViewController -{ - BOOL _isTouringWorld; - BOOL _contentInsetsEnabled; - UIEdgeInsets _originalContentInsets; -} - -#pragma mark - Setup & Teardown - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - // Keep track of current map state and debug preferences, - // saving and restoring when the application's state changes. - self.currentState = [MBXStateManager sharedManager].currentState; - - if (!self.currentState) { - // Create a new state with the below default values - self.currentState = [[MBXState alloc] init]; - - self.mapView.showsUserHeadingIndicator = YES; - self.mapView.showsScale = YES; - self.zoomLevelOrnamentEnabled = NO; - self.frameTimeGraphEnabled = NO; - } else { - // Revert to the previously saved state - [self restoreMapState:nil]; - } - - [self updateHUD]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveCurrentMapState:) name:UIApplicationDidEnterBackgroundNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(restoreMapState:) name:UIApplicationWillEnterForegroundNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveCurrentMapState:) name:UIApplicationWillTerminateNotification object:nil]; - - if ([MGLAccountManager accessToken].length) - { - self.styleIndex = -1; - [self cycleStyles:self]; - } - - self.mapView.experimental_enableFrameRateMeasurement = YES; - self.hudLabel.titleLabel.font = [UIFont monospacedDigitSystemFontOfSize:10 weight:UIFontWeightRegular]; - - // Add fall-through single tap gesture recognizer. This will be called when - // the map view's tap recognizers fail. - UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; - for (UIGestureRecognizer *gesture in self.mapView.gestureRecognizers) { - if ([gesture isKindOfClass:[UITapGestureRecognizer class]]) { - [singleTap requireGestureRecognizerToFail:gesture]; - } - } - [self.mapView addGestureRecognizer:singleTap]; - - // Display a secondary map on any connected external display. - // https://developer.apple.com/documentation/uikit/windows_and_screens/displaying_content_on_a_connected_screen?language=objc - self.helperWindows = [NSMutableArray array]; - [[NSNotificationCenter defaultCenter] addObserverForName:UIScreenDidConnectNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) { - UIScreen *helperScreen = note.object; - UIWindow *helperWindow = [[UIWindow alloc] initWithFrame:helperScreen.bounds]; - helperWindow.screen = helperScreen; - UIViewController *helperViewController = [[UIViewController alloc] init]; - MGLMapView *helperMapView = [[MGLMapView alloc] initWithFrame:helperWindow.bounds styleURL:MGLStyle.satelliteStreetsStyleURL]; - helperMapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - helperMapView.camera = self.mapView.camera; - helperMapView.compassView.hidden = YES; - helperViewController.view = helperMapView; - helperWindow.rootViewController = helperViewController; - helperWindow.hidden = NO; - [self.helperWindows addObject:helperWindow]; - }]; - [[NSNotificationCenter defaultCenter] addObserverForName:UIScreenDidDisconnectNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) { - UIScreen *helperScreen = note.object; - for (UIWindow *window in self.helperWindows) { - if (window.screen == helperScreen) { - [self.helperWindows removeObject:window]; - } - } - }]; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskAll; -} - -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(__unused id)sender { - if ([segue.identifier isEqualToString:@"ShowOfflinePacks"]) { - MBXOfflinePacksTableViewController *controller = [segue destinationViewController]; - controller.mapView = self.mapView; - } -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - Debugging Interface - -- (IBAction)showSettings:(__unused id)sender -{ - self.randomWalk = NO; - - UITableViewController *settingsViewController = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped]; - settingsViewController.tableView.delegate = self; - settingsViewController.tableView.dataSource = self; - settingsViewController.title = @"Debugging"; - settingsViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissSettings:)]; - UINavigationController *wrapper = [[UINavigationController alloc] initWithRootViewController:settingsViewController]; - wrapper.navigationBar.tintColor = self.navigationController.navigationBar.tintColor; - [self.navigationController presentViewController:wrapper animated:YES completion:nil]; -} - -- (void)dismissSettings:(__unused id)sender -{ - [self dismissViewControllerAnimated:YES completion:nil]; -} - -- (NSArray *)settingsSectionTitles -{ - return @[ - @"Debug Tools", - @"Annotations", - @"Runtime Styling", - @"Miscellaneous" - ]; -} - -- (NSArray *)settingsTitlesForSection:(NSInteger)section -{ - NSMutableArray *settingsTitles = [NSMutableArray array]; - - MGLMapDebugMaskOptions debugMask = self.mapView.debugMask; - - switch (section) - { - case MBXSettingsDebugTools: - [settingsTitles addObjectsFromArray:@[ - @"Reset position", - [NSString stringWithFormat:@"%@ tile boundaries", - (debugMask & MGLMapDebugTileBoundariesMask ? @"Hide" :@"Show")], - [NSString stringWithFormat:@"%@ tile info", - (debugMask & MGLMapDebugTileInfoMask ? @"Hide" :@"Show")], - [NSString stringWithFormat:@"%@ tile timestamps", - (debugMask & MGLMapDebugTimestampsMask ? @"Hide" :@"Show")], - [NSString stringWithFormat:@"%@ collision boxes", - (debugMask & MGLMapDebugCollisionBoxesMask ? @"Hide" :@"Show")], - [NSString stringWithFormat:@"%@ overdraw visualization", - (debugMask & MGLMapDebugOverdrawVisualizationMask ? @"Hide" :@"Show")], - [NSString stringWithFormat:@"%@ zoom level ornament", (self.zoomLevelOrnamentEnabled ? @"Hide" :@"Show")], - [NSString stringWithFormat:@"%@ frame time graph", (self.frameTimeGraphEnabled ? @"Hide" :@"Show")], - [NSString stringWithFormat:@"%@ reuse queue stats", (self.reuseQueueStatsEnabled ? @"Hide" :@"Show")] - ]]; - break; - case MBXSettingsAnnotations: - [settingsTitles addObjectsFromArray:@[ - @"Add 100 Views", - @"Add 1,000 Views", - @"Add 10,000 Views", - @"Add 100 Sprites", - @"Add 1,000 Sprites", - @"Add 10,000 Sprites", - @"Animate an Annotation View", - @"Add Test Shapes", - @"Add Point With Custom Callout", - @"Query Annotations", - [NSString stringWithFormat:@"%@ Custom User Dot", (_customUserLocationAnnnotationEnabled ? @"Disable" : @"Enable")], - @"Remove Annotations", - @"Select an offscreen point annotation", - @"Center selected annotation", - @"Add visible area polyline" - ]]; - break; - case MBXSettingsRuntimeStyling: - [settingsTitles addObjectsFromArray:@[ - @"Add Building Extrusions", - @"Style Water With Function", - @"Style Roads With Function", - @"Add Raster & Apply Function", - @"Add Shapes & Apply Fill", - @"Style Symbol Color", - @"Style Building Fill Color", - @"Style Ferry Line Color", - @"Remove Parks", - @"Style Fill With Filter", - @"Style Lines With Filter", - @"Style Fill With Numeric Filter", - @"Query and Style Features", - @"Style Feature", - @"Style Dynamic Point Collection", - @"Update Shape Source: Data", - @"Update Shape Source: URL", - @"Update Shape Source: Features", - @"Style Vector Tile Source", - @"Style Raster Tile Source", - @"Style Image Source", - @"Add Route Line", - @"Add Lime Green Triangle Layer", - @"Dynamically Style Polygon", - @"Add Custom Lat/Lon Grid", - ]]; - break; - case MBXSettingsMiscellaneous: - [settingsTitles addObjectsFromArray:@[ - @"Start World Tour", - @"Random Tour", - @"Embedded Map View", - [NSString stringWithFormat:@"%@ Second Map", ([self.view viewWithTag:2] == nil ? @"Show" : @"Hide")], - [NSString stringWithFormat:@"Show Labels in %@", (_localizingLabels ? @"Default Language" : [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:[self bestLanguageForUser]])], - @"Show Snapshots", - @"Missing Icon", - [NSString stringWithFormat:@"%@ Camera Changes", (_shouldLimitCameraChanges ? @"Unlimit" : @"Limit")], - [NSString stringWithFormat:@"Turn %@ Content Insets", (_contentInsetsEnabled ? @"Off" : @"On")], - @"View Route Simulation", - @"Ornaments Placement", - ]]; - - break; - default: - NSAssert(NO, @"All settings sections should be implemented"); - break; - } - - return settingsTitles; -} - -- (void)performActionForSettingAtIndexPath:(NSIndexPath *)indexPath -{ - switch (indexPath.section) - { - case MBXSettingsDebugTools: - switch (indexPath.row) - { - case MBXSettingsDebugToolsResetPosition: - [self.mapView resetPosition]; - break; - case MBXSettingsDebugToolsTileBoundaries: - self.currentState.debugMask ^= MGLMapDebugTileBoundariesMask; - break; - case MBXSettingsDebugToolsTileInfo: - self.currentState.debugMask ^= MGLMapDebugTileInfoMask; - break; - case MBXSettingsDebugToolsTimestamps: - self.currentState.debugMask ^= MGLMapDebugTimestampsMask; - break; - case MBXSettingsDebugToolsCollisionBoxes: - self.currentState.debugMask ^= MGLMapDebugCollisionBoxesMask; - break; - case MBXSettingsDebugToolsOverdrawVisualization: - self.currentState.debugMask ^= MGLMapDebugOverdrawVisualizationMask; - break; - case MBXSettingsDebugToolsShowZoomLevel: - { - self.zoomLevelOrnamentEnabled = !self.zoomLevelOrnamentEnabled; - self.currentState.showsZoomLevelOrnament = self.zoomLevelOrnamentEnabled; - self.hudLabel.hidden = !self.zoomLevelOrnamentEnabled; - self.reuseQueueStatsEnabled = NO; - [self updateHUD]; - break; - } - case MBXSettingsDebugToolsShowFrameTimeGraph: - { - self.frameTimeGraphEnabled = !self.frameTimeGraphEnabled; - self.currentState.showsTimeFrameGraph = !self.currentState.showsTimeFrameGraph; - self.frameTimeGraphView.hidden = !self.frameTimeGraphEnabled; - [self updateHUD]; - break; - } - case MBXSettingsDebugToolsShowReuseQueueStats: - { - self.reuseQueueStatsEnabled = !self.currentState.reuseQueueStatsEnabled; - self.hudLabel.hidden = !self.currentState.reuseQueueStatsEnabled; - self.zoomLevelOrnamentEnabled = NO; - [self updateHUD]; - break; - } - default: - NSAssert(NO, @"All debug tools setting rows should be implemented"); - break; - } - - self.mapView.debugMask = self.currentState.debugMask; - - break; - case MBXSettingsAnnotations: - switch (indexPath.row) - { - case MBXSettingsAnnotations100Views: - [self parseFeaturesAddingCount:100 usingViews:YES]; - break; - case MBXSettingsAnnotations1000Views: - [self parseFeaturesAddingCount:1000 usingViews:YES]; - break; - case MBXSettingsAnnotations10000Views: - [self parseFeaturesAddingCount:10000 usingViews:YES]; - break; - case MBXSettingsAnnotations100Sprites: - [self parseFeaturesAddingCount:100 usingViews:NO]; - break; - case MBXSettingsAnnotations1000Sprites: - [self parseFeaturesAddingCount:1000 usingViews:NO]; - break; - case MBXSettingsAnnotations10000Sprites: - [self parseFeaturesAddingCount:10000 usingViews:NO]; - break; - case MBXSettingsAnnotationAnimation: - [self animateAnnotationView]; - break; - case MBXSettingsAnnotationsTestShapes: - [self addTestShapes]; - break; - case MBXSettingsAnnotationsCustomCallout: - [self addAnnotationWithCustomCallout]; - break; - case MBXSettingsAnnotationsQueryAnnotations: - [self testQueryPointAnnotations]; - break; - case MBXSettingsAnnotationsCustomUserDot: - [self toggleCustomUserDot]; - break; - case MBXSettingsAnnotationsRemoveAnnotations: - [self.mapView removeAnnotations:self.mapView.annotations]; - break; - case MBXSettingsAnnotationSelectRandomOffscreenPointAnnotation: - [self selectAnOffscreenPointAnnotation]; - break; - case MBXSettingsAnnotationCenterSelectedAnnotation: - [self centerSelectedAnnotation]; - break; - case MBXSettingsAnnotationAddVisibleAreaPolyline: - [self addVisibleAreaPolyline]; - break; - default: - NSAssert(NO, @"All annotations setting rows should be implemented"); - break; - } - break; - case MBXSettingsRuntimeStyling: - switch (indexPath.row) - { - case MBXSettingsRuntimeStylingBuildingExtrusions: - [self styleBuildingExtrusions]; - break; - case MBXSettingsRuntimeStylingWater: - [self styleWaterLayer]; - break; - case MBXSettingsRuntimeStylingRoads: - [self styleRoadLayer]; - break; - case MBXSettingsRuntimeStylingRaster: - [self styleRasterLayer]; - break; - case MBXSettingsRuntimeStylingShape: - [self styleShapeSource]; - break; - case MBXSettingsRuntimeStylingSymbols: - [self styleSymbolLayer]; - break; - case MBXSettingsRuntimeStylingBuildings: - [self styleBuildingLayer]; - break; - case MBXSettingsRuntimeStylingFerry: - [self styleFerryLayer]; - break; - case MBXSettingsRuntimeStylingParks: - [self removeParkLayer]; - break; - case MBXSettingsRuntimeStylingFilteredFill: - [self styleFilteredFill]; - break; - case MBXSettingsRuntimeStylingFilteredLines: - [self styleFilteredLines]; - break; - case MBXSettingsRuntimeStylingNumericFilteredFill: - [self styleNumericFilteredFills]; - break; - case MBXSettingsRuntimeStylingStyleQuery: - [self styleQuery]; - break; - case MBXSettingsRuntimeStylingFeatureSource: - [self styleFeature]; - break; - case MBXSettingsRuntimeStylingPointCollection: - [self styleDynamicPointCollection]; - break; - case MBXSettingsRuntimeStylingUpdateShapeSourceURL: - [self updateShapeSourceURL]; - break; - case MBXSettingsRuntimeStylingUpdateShapeSourceData: - [self updateShapeSourceData]; - break; - case MBXSettingsRuntimeStylingUpdateShapeSourceFeatures: - [self updateShapeSourceFeatures]; - break; - case MBXSettingsRuntimeStylingVectorTileSource: - [self styleVectorTileSource]; - break; - case MBXSettingsRuntimeStylingRasterTileSource: - [self styleRasterTileSource]; - break; - case MBXSettingsRuntimeStylingImageSource: - [self styleImageSource]; - break; - case MBXSettingsRuntimeStylingRouteLine: - [self styleRouteLine]; - break; - case MBXSettingsRuntimeStylingAddLimeGreenTriangleLayer: - [self styleAddLimeGreenTriangleLayer]; - break; - case MBXSettingsRuntimeStylingDDSPolygon: - [self stylePolygonWithDDS]; - break; - case MBXSettingsRuntimeStylingCustomLatLonGrid: - [self addLatLonGrid]; - break; - default: - NSAssert(NO, @"All runtime styling setting rows should be implemented"); - break; - } - break; - case MBXSettingsMiscellaneous: - switch (indexPath.row) - { - case MBXSettingsMiscellaneousLocalizeLabels: - [self toggleStyleLabelsLanguage]; - break; - case MBXSettingsMiscellaneousWorldTour: - [self startWorldTour]; - break; - case MBXSettingsMiscellaneousRandomTour: - [self randomWorldTour]; - break; - case MBXSettingsMiscellaneousScrollView: - { - UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; - MBXEmbeddedMapViewController *embeddedMapViewController = (MBXEmbeddedMapViewController *)[storyboard instantiateViewControllerWithIdentifier:@"MBXEmbeddedMapViewController"]; - [self.navigationController pushViewController:embeddedMapViewController animated:YES]; - break; - } - case MBXSettingsMiscellaneousToggleTwoMaps: - [self toggleSecondMapView]; - break; - case MBXSettingsMiscellaneousShowSnapshots: - { - [self performSegueWithIdentifier:@"ShowSnapshots" sender:nil]; - break; - } - case MBXSettingsMiscellaneousMissingIcon: - { - [self loadMissingIcon]; - break; - } - case MBXSettingsMiscellaneousShowCustomLocationManager: - { - [self performSegueWithIdentifier:@"ShowCustomLocationManger" sender:nil]; - break; - } - case MBXSettingsMiscellaneousShouldLimitCameraChanges: - { - self.shouldLimitCameraChanges = !self.shouldLimitCameraChanges; - if (self.shouldLimitCameraChanges) { - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(39.748947, -104.995882) zoomLevel:10 direction:0 animated:NO]; - } - break; - } - case MBXSettingsMiscellaneousSetContentInsets: - { - if (!_contentInsetsEnabled) { - _originalContentInsets = [self.mapView contentInset]; - } - _contentInsetsEnabled = !_contentInsetsEnabled; - self.automaticallyAdjustsScrollViewInsets = !_contentInsetsEnabled; - UIEdgeInsets contentInsets = self.mapView.bounds.size.width > self.mapView.bounds.size.height - ? UIEdgeInsetsMake(_originalContentInsets.top, 0.5 * self.mapView.bounds.size.width, _originalContentInsets.bottom, 0.0) - : UIEdgeInsetsMake(0.25 * self.mapView.bounds.size.height, 0.0, _originalContentInsets.bottom, 0.25 * self.mapView.bounds.size.width); - if (_contentInsetsEnabled) { - if (!self.contentInsetsOverlays) - self.contentInsetsOverlays = [NSMutableArray array]; - if (![self.contentInsetsOverlays count]) { - UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.mapView.bounds.size.width, contentInsets.top)]; - view.backgroundColor = [UIColor colorWithRed:0.0 green:0.3 blue:0.3 alpha:0.5]; - [self.contentInsetsOverlays addObject:view]; - [self.view addSubview:view]; - view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, contentInsets.left, self.mapView.bounds.size.height)]; - view.backgroundColor = [UIColor colorWithRed:0.0 green:0.3 blue:0.3 alpha:0.5]; - [self.contentInsetsOverlays addObject:view]; - [self.view addSubview:view]; - view = [[UIView alloc]initWithFrame:CGRectMake(self.mapView.bounds.size.width - contentInsets.right, 0, contentInsets.right, self.mapView.bounds.size.height)]; - view.backgroundColor = [UIColor colorWithRed:0.0 green:0.3 blue:0.3 alpha:0.5]; - [self.contentInsetsOverlays addObject:view]; - [self.view addSubview:view]; - view = [[UIView alloc]initWithFrame:CGRectMake(0, self.mapView.bounds.size.height - contentInsets.bottom, self.mapView.bounds.size.width, self.mapView.bounds.size.height)]; - view.backgroundColor = [UIColor colorWithRed:0.0 green:0.3 blue:0.3 alpha:0.5]; - [self.contentInsetsOverlays addObject:view]; - [self.view addSubview:view]; - } - [self.view bringSubviewToFront:self.contentInsetsOverlays[0]]; - [self.view bringSubviewToFront:self.contentInsetsOverlays[1]]; - [self.view bringSubviewToFront:self.contentInsetsOverlays[2]]; - [self.view bringSubviewToFront:self.contentInsetsOverlays[3]]; - - // Denver streets parallel to cardinal directions help illustrate - // viewport center offset when edge insets are set. - MGLMapCamera *camera = [MGLMapCamera cameraLookingAtCenterCoordinate:CLLocationCoordinate2DMake(39.72707, -104.9986) - acrossDistance:100 - pitch:60 - heading:0]; - __weak MBXViewController *weakSelf = self; - [self.mapView setCamera:camera withDuration:0.3 animationTimingFunction:nil completionHandler:^{ - [weakSelf.mapView setContentInset:contentInsets animated:YES completionHandler:nil]; - }]; - } else { - [self.view sendSubviewToBack:self.contentInsetsOverlays[0]]; - [self.view sendSubviewToBack:self.contentInsetsOverlays[1]]; - [self.view sendSubviewToBack:self.contentInsetsOverlays[2]]; - [self.view sendSubviewToBack:self.contentInsetsOverlays[3]]; - [self.mapView setContentInset:_originalContentInsets animated:YES completionHandler:nil]; - } - break; - } - case MBXSettingsMiscellaneousOrnamentsPlacement: - { - MBXOrnamentsViewController *ornamentsViewController = [[MBXOrnamentsViewController alloc] init]; - [self.navigationController pushViewController:ornamentsViewController animated:YES]; - break; - } - default: - NSAssert(NO, @"All miscellaneous setting rows should be implemented"); - break; - } - break; - default: - NSAssert(NO, @"All settings sections should be implemented"); - break; - } -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return [[self settingsSectionTitles] count]; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return [[self settingsTitlesForSection:section] count]; -} - -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section; -{ - return [[self settingsSectionTitles] objectAtIndex:section]; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; - - cell.textLabel.text = [[self settingsTitlesForSection:indexPath.section] objectAtIndex:indexPath.row]; - - return cell; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [tableView deselectRowAtIndexPath:indexPath animated:NO]; - - [self dismissViewControllerAnimated:YES completion:^ - { - [self performActionForSettingAtIndexPath:indexPath]; - }]; -} - -#pragma mark - Debugging Actions - -- (void)parseFeaturesAddingCount:(NSUInteger)featuresCount usingViews:(BOOL)useViews -{ - [self.mapView removeAnnotations:self.mapView.annotations]; - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ - { - NSData *featuresData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"points" ofType:@"geojson"]]; - - id features = [NSJSONSerialization JSONObjectWithData:featuresData - options:0 - error:nil]; - - if ([features isKindOfClass:[NSDictionary class]]) - { - NSMutableArray *annotations = [NSMutableArray array]; - - for (NSDictionary *feature in features[@"features"]) - { - CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake([feature[@"geometry"][@"coordinates"][1] doubleValue], - [feature[@"geometry"][@"coordinates"][0] doubleValue]); - NSString *title = feature[@"properties"][@"NAME"]; - - MGLPointAnnotation *annotation = (useViews ? [MGLPointAnnotation new] : [MBXSpriteBackedAnnotation new]); - - annotation.coordinate = coordinate; - annotation.title = title; - - [annotations addObject:annotation]; - - if (annotations.count == featuresCount) break; - } - - dispatch_async(dispatch_get_main_queue(), ^ - { - [self.mapView addAnnotations:annotations]; - [self.mapView showAnnotations:annotations animated:YES]; - }); - } - }); -} - -- (void)animateAnnotationView - { - MGLPointAnnotation *annot = [[MGLPointAnnotation alloc] init]; - annot.coordinate = self.mapView.centerCoordinate; - [self.mapView addAnnotation:annot]; - - // Move the annotation to a point that is offscreen. - CGPoint point = CGPointMake(self.view.frame.origin.x - 200, CGRectGetMidY(self.view.frame)); - - CLLocationCoordinate2D coord = [self.mapView convertPoint:point toCoordinateFromView:self.view]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [UIView animateWithDuration:10 animations:^{ - annot.coordinate = coord; - }]; - }); - }; - -- (void)addTestShapes -{ - // Pacific Northwest triangle - // - CLLocationCoordinate2D triangleCoordinates[3] = - { - CLLocationCoordinate2DMake(44, -122), - CLLocationCoordinate2DMake(46, -122), - CLLocationCoordinate2DMake(46, -121) - }; - - MGLPolygon *triangle = [MGLPolygon polygonWithCoordinates:triangleCoordinates count:3]; - - [self.mapView addAnnotation:triangle]; - - // West coast polyline - // - CLLocationCoordinate2D lineCoordinates[4] = { - CLLocationCoordinate2DMake(47.6025, -122.3327), - CLLocationCoordinate2DMake(45.5189, -122.6726), - CLLocationCoordinate2DMake(37.7790, -122.4177), - CLLocationCoordinate2DMake(34.0532, -118.2349) - }; - MGLPolyline *line = [MGLPolyline polylineWithCoordinates:lineCoordinates count:4]; - [self.mapView addAnnotation:line]; - - // Orcas Island, WA hike polyline - // - NSDictionary *hike = [NSJSONSerialization JSONObjectWithData: - [NSData dataWithContentsOfFile: - [[NSBundle mainBundle] pathForResource:@"polyline" ofType:@"geojson"]] - options:0 - error:nil]; - - NSArray *hikeCoordinatePairs = hike[@"features"][0][@"geometry"][@"coordinates"]; - - CLLocationCoordinate2D *polylineCoordinates = (CLLocationCoordinate2D *)malloc([hikeCoordinatePairs count] * sizeof(CLLocationCoordinate2D)); - - for (NSUInteger i = 0; i < [hikeCoordinatePairs count]; i++) - { - polylineCoordinates[i] = CLLocationCoordinate2DMake([hikeCoordinatePairs[i][1] doubleValue], [hikeCoordinatePairs[i][0] doubleValue]); - } - - MGLPolyline *polyline = [MGLPolyline polylineWithCoordinates:polylineCoordinates - count:[hikeCoordinatePairs count]]; - - [self.mapView addAnnotation:polyline]; - - free(polylineCoordinates); - - // PA/NJ/DE polygons - // - NSDictionary *threestates = [NSJSONSerialization JSONObjectWithData: - [NSData dataWithContentsOfFile: - [[NSBundle mainBundle] pathForResource:@"threestates" ofType:@"geojson"]] - options:0 - error:nil]; - - for (NSDictionary *feature in threestates[@"features"]) - { - NSArray *stateCoordinatePairs = feature[@"geometry"][@"coordinates"]; - - while ([stateCoordinatePairs count] == 1) stateCoordinatePairs = stateCoordinatePairs[0]; - - CLLocationCoordinate2D *polygonCoordinates = (CLLocationCoordinate2D *)malloc([stateCoordinatePairs count] * sizeof(CLLocationCoordinate2D)); - - for (NSUInteger i = 0; i < [stateCoordinatePairs count]; i++) - { - polygonCoordinates[i] = CLLocationCoordinate2DMake([stateCoordinatePairs[i][1] doubleValue], [stateCoordinatePairs[i][0] doubleValue]); - } - - MGLPolygon *polygon = [MGLPolygon polygonWithCoordinates:polygonCoordinates count:[stateCoordinatePairs count]]; - polygon.title = feature[@"properties"][@"NAME"]; - - [self.mapView addAnnotation:polygon]; - - free(polygonCoordinates); - } - - // Null Island polygon with an interior hole - // - CLLocationCoordinate2D innerCoordinates[] = { - CLLocationCoordinate2DMake(-5, -5), - CLLocationCoordinate2DMake(-5, 5), - CLLocationCoordinate2DMake(5, 5), - CLLocationCoordinate2DMake(5, -5), - }; - MGLPolygon *innerPolygon = [MGLPolygon polygonWithCoordinates:innerCoordinates count:sizeof(innerCoordinates) / sizeof(innerCoordinates[0])]; - CLLocationCoordinate2D outerCoordinates[] = { - CLLocationCoordinate2DMake(-10, -10), - CLLocationCoordinate2DMake(-10, 10), - CLLocationCoordinate2DMake(10, 10), - CLLocationCoordinate2DMake(10, -10), - }; - MGLPolygon *outerPolygon = [MGLPolygon polygonWithCoordinates:outerCoordinates count:sizeof(outerCoordinates) / sizeof(outerCoordinates[0]) interiorPolygons:@[innerPolygon]]; - [self.mapView addAnnotation:outerPolygon]; -} - -- (void)addAnnotationWithCustomCallout -{ - [self.mapView removeAnnotations:self.mapView.annotations]; - - MBXCustomCalloutAnnotation *firstAnnotation = [[MBXCustomCalloutAnnotation alloc] init]; - firstAnnotation.coordinate = CLLocationCoordinate2DMake(48.8533940, 2.3775439); - firstAnnotation.title = @"Open anchored to annotation"; - firstAnnotation.anchoredToAnnotation = YES; - firstAnnotation.dismissesAutomatically = NO; - - MBXCustomCalloutAnnotation *secondAnnotation = [[MBXCustomCalloutAnnotation alloc] init]; - secondAnnotation.coordinate = CLLocationCoordinate2DMake(48.8543940, 2.3775439); - secondAnnotation.title = @"Open not anchored to annotation"; - secondAnnotation.anchoredToAnnotation = NO; - secondAnnotation.dismissesAutomatically = NO; - - MBXCustomCalloutAnnotation *thirdAnnotation = [[MBXCustomCalloutAnnotation alloc] init]; - thirdAnnotation.coordinate = CLLocationCoordinate2DMake(48.8553940, 2.3775439); - thirdAnnotation.title = @"Dismisses automatically"; - thirdAnnotation.anchoredToAnnotation = YES; - thirdAnnotation.dismissesAutomatically = YES; - - NSArray *annotations = @[firstAnnotation, secondAnnotation, thirdAnnotation]; - [self.mapView addAnnotations:annotations]; - - [self.mapView showAnnotations:annotations animated:YES]; -} - -- (void)styleBuildingExtrusions -{ - MGLSource* source = [self.mapView.style sourceWithIdentifier:@"composite"]; - if (source) { - - MGLFillExtrusionStyleLayer* layer = [[MGLFillExtrusionStyleLayer alloc] initWithIdentifier:@"extrudedBuildings" source:source]; - layer.sourceLayerIdentifier = @"building"; - layer.predicate = [NSPredicate predicateWithFormat:@"extrude == 'true' AND CAST(height, 'NSNumber') > 0"]; - layer.fillExtrusionBase = [NSExpression expressionForKeyPath:@"min_height"]; - layer.fillExtrusionHeight = [NSExpression expressionForKeyPath:@"height"]; - - // Set the fill color to that of the existing building footprint layer, if it exists. - MGLFillStyleLayer* buildingLayer = (MGLFillStyleLayer*)[self.mapView.style layerWithIdentifier:@"building"]; - if (buildingLayer) { - if (buildingLayer.fillColor) { - layer.fillExtrusionColor = buildingLayer.fillColor; - } else { - layer.fillExtrusionColor = [NSExpression expressionForConstantValue:[UIColor whiteColor]]; - } - - layer.fillExtrusionOpacity = [NSExpression expressionForConstantValue:@0.75]; - } - - MGLStyleLayer* labelLayer = [self.mapView.style layerWithIdentifier:@"waterway-label"]; - if (labelLayer) { - [self.mapView.style insertLayer:layer belowLayer:labelLayer]; - } else { - [self.mapView.style addLayer:layer]; - } - } -} - -- (void)styleWaterLayer -{ - MGLFillStyleLayer *waterLayer = (MGLFillStyleLayer *)[self.mapView.style layerWithIdentifier:@"water"]; - NSDictionary *waterColorStops = @{@6.0f: [UIColor yellowColor], - @8.0f: [UIColor blueColor], - @10.0f: [UIColor redColor], - @12.0f: [UIColor greenColor], - @14.0f: [UIColor blueColor]}; - NSExpression *fillColorExpression = [NSExpression mgl_expressionForInterpolatingExpression:NSExpression.zoomLevelVariableExpression - withCurveType:MGLExpressionInterpolationModeLinear - parameters:nil - stops:[NSExpression expressionForConstantValue:waterColorStops]]; - waterLayer.fillColor = fillColorExpression; - - NSDictionary *fillAntialiasedStops = @{@11: @YES, - @12: @NO, - @13: @YES, - @14: @NO, - @15: @YES}; - waterLayer.fillAntialiased = [NSExpression mgl_expressionForSteppingExpression:NSExpression.zoomLevelVariableExpression - fromExpression:[NSExpression expressionForConstantValue:@NO] - stops:[NSExpression expressionForConstantValue:fillAntialiasedStops]]; -} - -- (void)styleRoadLayer -{ - MGLLineStyleLayer *roadLayer = (MGLLineStyleLayer *)[self.mapView.style layerWithIdentifier:@"road-primary"]; - roadLayer.lineColor = [NSExpression expressionForConstantValue:[UIColor blackColor]]; - - NSDictionary *lineWidthStops = @{@5: @5, - @10: @15, - @15: @30}; - NSExpression *lineWidthExpression = [NSExpression expressionWithFormat: - @"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", - lineWidthStops]; - roadLayer.lineWidth = lineWidthExpression; - roadLayer.lineGapWidth = lineWidthExpression; - - NSDictionary *roadLineColorStops = @{@10: [UIColor purpleColor], - @13: [UIColor yellowColor], - @16: [UIColor cyanColor]}; - roadLayer.lineColor = [NSExpression expressionWithFormat: - @"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", - roadLineColorStops]; - - roadLayer.visible = YES; - roadLayer.maximumZoomLevel = 15; - roadLayer.minimumZoomLevel = 13; -} - -- (void)styleRasterLayer -{ - NSURL *rasterURL = [NSURL URLWithString:@"mapbox://mapbox.satellite"]; - MGLRasterTileSource *rasterTileSource = [[MGLRasterTileSource alloc] initWithIdentifier:@"my-raster-tile-source" configurationURL:rasterURL tileSize:512]; - [self.mapView.style addSource:rasterTileSource]; - - MGLRasterStyleLayer *rasterLayer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"my-raster-layer" source:rasterTileSource]; - NSDictionary *opacityStops = @{@20.0f: @1.0f, - @5.0f: @0.0f}; - rasterLayer.rasterOpacity = [NSExpression expressionWithFormat: - @"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", - opacityStops]; - [self.mapView.style addLayer:rasterLayer]; -} - -- (void)styleShapeSource -{ - NSString *filePath = [[NSBundle bundleForClass:self.class] pathForResource:@"amsterdam" ofType:@"geojson"]; - NSURL *geoJSONURL = [NSURL fileURLWithPath:filePath]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"ams" URL:geoJSONURL options:nil]; - [self.mapView.style addSource:source]; - - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"test" source:source]; - fillLayer.fillColor = [NSExpression expressionForConstantValue:[UIColor purpleColor]]; - [self.mapView.style addLayer:fillLayer]; - -} - -- (void)styleSymbolLayer -{ - MGLSymbolStyleLayer *stateLayer = (MGLSymbolStyleLayer *)[self.mapView.style layerWithIdentifier:@"state-label-lg"]; - stateLayer.textColor = [NSExpression expressionForConstantValue:[UIColor redColor]]; -} - -- (void)styleBuildingLayer -{ - MGLTransition transition = { 5, 1 }; - self.mapView.style.transition = transition; - MGLFillStyleLayer *buildingLayer = (MGLFillStyleLayer *)[self.mapView.style layerWithIdentifier:@"building"]; - buildingLayer.fillColor = [NSExpression expressionForConstantValue:[UIColor purpleColor]]; -} - -- (void)styleFerryLayer -{ - MGLLineStyleLayer *ferryLineLayer = (MGLLineStyleLayer *)[self.mapView.style layerWithIdentifier:@"ferry"]; - ferryLineLayer.lineColor = [NSExpression expressionForConstantValue:[UIColor redColor]]; -} - -- (void)removeParkLayer -{ - MGLFillStyleLayer *parkLayer = (MGLFillStyleLayer *)[self.mapView.style layerWithIdentifier:@"park"]; - [self.mapView.style removeLayer:parkLayer]; -} - -- (void)styleFilteredFill -{ - // set style and focus on Texas - [self.mapView setStyleURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"fill_filter_style" ofType:@"json"]]]; - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(31, -100) zoomLevel:3 animated:NO]; - - // after slight delay, fill in Texas (atypical use; we want to clearly see the change for test purposes) - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ - { - MGLFillStyleLayer *statesLayer = (MGLFillStyleLayer *)[self.mapView.style layerWithIdentifier:@"states"]; - - // filter - statesLayer.predicate = [NSPredicate predicateWithFormat:@"name == 'Texas'"]; - - // paint properties - statesLayer.fillColor = [NSExpression expressionForConstantValue:[UIColor redColor]]; - statesLayer.fillOpacity = [NSExpression expressionForConstantValue:@0.25]; - }); -} - -- (void)styleFilteredLines -{ - // set style and focus on lower 48 - [self.mapView setStyleURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"line_filter_style" ofType:@"json"]]]; - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(40, -97) zoomLevel:5 animated:NO]; - - // after slight delay, change styling for all Washington-named counties (atypical use; we want to clearly see the change for test purposes) - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ - { - MGLLineStyleLayer *countiesLayer = (MGLLineStyleLayer *)[self.mapView.style layerWithIdentifier:@"counties"]; - - // filter - countiesLayer.predicate = [NSPredicate predicateWithFormat:@"NAME10 == 'Washington'"]; - - // paint properties - countiesLayer.lineColor = [NSExpression expressionForConstantValue:[UIColor redColor]]; - countiesLayer.lineOpacity = [NSExpression expressionForConstantValue:@0.75]; - countiesLayer.lineWidth = [NSExpression expressionForConstantValue:@5]; - }); -} - -- (void)styleNumericFilteredFills -{ - // set style and focus on lower 48 - [self.mapView setStyleURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"numeric_filter_style" ofType:@"json"]]]; - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(40, -97) zoomLevel:5 animated:NO]; - - // after slight delay, change styling for regions 200-299 (atypical use; we want to clearly see the change for test purposes) - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ - { - MGLFillStyleLayer *regionsLayer = (MGLFillStyleLayer *)[self.mapView.style layerWithIdentifier:@"regions"]; - - // filter (testing both inline and format strings) - regionsLayer.predicate = [NSPredicate predicateWithFormat:@"CAST(HRRNUM, 'NSNumber') >= %@ AND CAST(HRRNUM, 'NSNumber') < 300", @(200)]; - - // paint properties - regionsLayer.fillColor = [NSExpression expressionForConstantValue:[UIColor blueColor]]; - regionsLayer.fillOpacity = [NSExpression expressionForConstantValue:@0.5]; - }); -} - -- (void)styleQuery -{ - CGRect queryRect = CGRectInset(self.mapView.bounds, 100, 200); - NSArray *visibleFeatures = [self.mapView visibleFeaturesInRect:queryRect]; - - NSString *querySourceID = @"query-source-id"; - NSString *queryLayerID = @"query-layer-id"; - - // RTE if you don't remove the layer first - // RTE if you pass a nill layer to remove layer - MGLStyleLayer *layer = [self.mapView.style layerWithIdentifier:queryLayerID]; - if (layer) { - [self.mapView.style removeLayer:layer]; - } - - // RTE if you pass a nill source to remove source - MGLSource *source = [self.mapView.style sourceWithIdentifier:querySourceID]; - if (source) { - [self.mapView.style removeSource:source]; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:querySourceID features:visibleFeatures options:nil]; - [self.mapView.style addSource:shapeSource]; - - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:queryLayerID source:shapeSource]; - fillLayer.fillColor = [NSExpression expressionForConstantValue:[UIColor blueColor]]; - fillLayer.fillOpacity = [NSExpression expressionForConstantValue:@0.5]; - [self.mapView.style addLayer:fillLayer]; - }); -} - -- (void)styleFeature -{ - self.mapView.zoomLevel = 10; - self.mapView.centerCoordinate = CLLocationCoordinate2DMake(51.068585180672635, -114.06074523925781); - - CLLocationCoordinate2D leafCoords[] = { - {50.9683733218221,-114.07035827636719}, - {51.02325750523972,-114.06967163085938}, - {51.009434536947786,-114.14245605468749}, - {51.030599281184124,-114.12597656249999}, - {51.060386316691016,-114.21043395996094}, - {51.063838646941576,-114.17816162109375}, - {51.08152779888779,-114.19876098632812}, - {51.08066507029602,-114.16854858398438}, - {51.09662294502995,-114.17472839355469}, - {51.07764539352731,-114.114990234375}, - {51.13670896949613,-114.12391662597656}, - {51.13369295212583,-114.09576416015624}, - {51.17546878815025,-114.07585144042969}, - {51.140155605265896,-114.04632568359375}, - {51.15049396880196,-114.01542663574219}, - {51.088860342359965,-114.00924682617186}, - {51.12205789681453,-113.94813537597656}, - {51.106539930027225,-113.94882202148438}, - {51.117747873223344,-113.92616271972656}, - {51.10093493903458,-113.92616271972656}, - {51.10697105503078,-113.90625}, - {51.09144802136697,-113.9117431640625}, - {51.04916446529361,-113.97010803222655}, - {51.045279344649146,-113.9398956298828}, - {51.022825599852496,-114.06211853027344}, - {51.045279344649146,-113.9398956298828}, - {51.022825599852496,-114.06211853027344}, - {51.022825599852496,-114.06280517578125}, - {50.968805734317804,-114.06280517578125}, - {50.9683733218221,-114.07035827636719}, - }; - NSUInteger coordsCount = sizeof(leafCoords) / sizeof(leafCoords[0]); - - MGLPolygonFeature *feature = [MGLPolygonFeature polygonWithCoordinates:leafCoords count:coordsCount]; - feature.identifier = @"leaf-feature"; - feature.attributes = @{@"color": @"red"}; - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"leaf-source" shape:feature options:nil]; - [self.mapView.style addSource:source]; - - MGLFillStyleLayer *layer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"leaf-fill-layer" source:source]; - layer.predicate = [NSPredicate predicateWithFormat:@"color = 'red'"]; - layer.fillColor = [NSExpression expressionForConstantValue:[UIColor redColor]]; - [self.mapView.style addLayer:layer]; - - NSString *geoJSON = @"{\"type\": \"Feature\", \"properties\": {\"color\": \"green\"}, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ -114.06847000122069, 51.050459433092655 ] }}"; - - NSData *data = [geoJSON dataUsingEncoding:NSUTF8StringEncoding]; - MGLShape *shape = [MGLShape shapeWithData:data encoding:NSUTF8StringEncoding error:NULL]; - MGLShapeSource *pointSource = [[MGLShapeSource alloc] initWithIdentifier:@"leaf-point-source" shape:shape options:nil]; - [self.mapView.style addSource:pointSource]; - - MGLCircleStyleLayer *circleLayer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"leaf-circle-layer" source:pointSource]; - circleLayer.circleColor = [NSExpression expressionForConstantValue:[UIColor greenColor]]; - circleLayer.predicate = [NSPredicate predicateWithFormat:@"color = 'green'"]; - [self.mapView.style addLayer:circleLayer]; - - - CLLocationCoordinate2D squareCoords[] = { - {51.056070541830934, -114.0274429321289}, - {51.07937094724242, -114.0274429321289}, - {51.07937094724242, -113.98761749267578}, - {51.05607054183093, -113.98761749267578}, - {51.056070541830934, -114.0274429321289}, - }; - MGLPolygon *polygon = [MGLPolygon polygonWithCoordinates:squareCoords count:sizeof(squareCoords)/sizeof(squareCoords[0])]; - MGLShapeSource *plainShapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"leaf-plain-shape-source" shape:polygon options:nil]; - [self.mapView.style addSource:plainShapeSource]; - - MGLFillStyleLayer *plainFillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"leaf-plain-fill-layer" source:plainShapeSource]; - plainFillLayer.fillColor = [NSExpression expressionForConstantValue:[UIColor yellowColor]]; - [self.mapView.style addLayer:plainFillLayer]; -} - -- (void)updateShapeSourceData -{ - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(40.329795743702064, -107.75390625) zoomLevel:11 animated:NO]; - - NSString *geoJSON = @"{\"type\": \"FeatureCollection\",\"features\": [{\"type\": \"Feature\",\"properties\": {},\"geometry\": {\"type\": \"LineString\",\"coordinates\": [[-107.75390625,40.329795743702064],[-104.34814453125,37.64903402157866]]}}]}"; - - NSData *data = [geoJSON dataUsingEncoding:NSUTF8StringEncoding]; - MGLShape *shape = [MGLShape shapeWithData:data encoding:NSUTF8StringEncoding error:NULL]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"mutable-data-source-id" shape:shape options:nil]; - [self.mapView.style addSource:source]; - - MGLLineStyleLayer *layer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"mutable-data-layer-id" source:source]; - [self.mapView.style addLayer:layer]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - NSString *updatedGeoJSON = @"{\"type\": \"FeatureCollection\",\"features\": [{\"type\": \"Feature\",\"properties\": {},\"geometry\": {\"type\": \"LineString\",\"coordinates\": [[-107.75390625,40.329795743702064],[-109.34814453125,37.64903402157866]]}}]}"; - NSData *updatedData = [updatedGeoJSON dataUsingEncoding:NSUTF8StringEncoding]; - MGLShape *updatedShape = [MGLShape shapeWithData:updatedData encoding:NSUTF8StringEncoding error:NULL]; - source.shape = updatedShape; - }); -} - -- (void)updateShapeSourceURL -{ - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(48.668731, -122.857151) zoomLevel:11 animated:NO]; - - NSString *filePath = [[NSBundle bundleForClass:self.class] pathForResource:@"polyline" ofType:@"geojson"]; - NSURL *geoJSONURL = [NSURL fileURLWithPath:filePath]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"mutable-data-source-url-id" URL:geoJSONURL options:nil]; - [self.mapView.style addSource:source]; - - MGLLineStyleLayer *layer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"mutable-data-layer-url-id" source:source]; - [self.mapView.style addLayer:layer]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(41.563986787078704, -75.04843935793578) zoomLevel:8 animated:NO]; - - NSString *threeStatesFilePath = [[NSBundle bundleForClass:self.class] pathForResource:@"threestates" ofType:@"geojson"]; - NSURL *updatedGeoJSONURL = [NSURL fileURLWithPath:threeStatesFilePath]; - - source.URL = updatedGeoJSONURL; - }); -} - -- (void)updateShapeSourceFeatures -{ - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(-41.1520, 288.6592) zoomLevel:10 animated:NO]; - - CLLocationCoordinate2D smallBox[] = { - {-41.14763798539186, 288.68019104003906}, - {-41.140915920129665, 288.68019104003906}, - {-41.140915920129665, 288.6887741088867}, - {-41.14763798539186, 288.6887741088867}, - {-41.14763798539186, 288.68019104003906} - }; - - CLLocationCoordinate2D largeBox[] = { - {-41.17710352162799, 288.67298126220703}, - {-41.13962313627545, 288.67298126220703}, - {-41.13962313627545, 288.7261962890625}, - {-41.17710352162799, 288.7261962890625}, - {-41.17710352162799, 288.67298126220703} - }; - - MGLPolygonFeature *smallBoxFeature = [MGLPolygonFeature polygonWithCoordinates:smallBox count:sizeof(smallBox)/sizeof(smallBox[0])]; - MGLPolygonFeature *largeBoxFeature = [MGLPolygonFeature polygonWithCoordinates:largeBox count:sizeof(largeBox)/sizeof(largeBox[0])]; - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"mutable-data-source-features-id" - shape:smallBoxFeature - options:nil]; - [self.mapView.style addSource:source]; - - MGLFillStyleLayer *layer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"mutable-data-layer-features-id" source:source]; - layer.fillColor = [NSExpression expressionForConstantValue:[UIColor redColor]]; - [self.mapView.style addLayer:layer]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - source.shape = largeBoxFeature; - }); -} - -- (void)styleDynamicPointCollection -{ - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(36.9979, -109.0441) zoomLevel:14 animated:NO]; - - CLLocationCoordinate2D coordinates[] = { - {37.00145594210082, -109.04960632324219}, - {37.00173012609867, -109.0404224395752}, - {36.99453246847359, -109.04960632324219}, - {36.99508088541243, -109.04007911682129}, - }; - MGLPointCollectionFeature *feature = [MGLPointCollectionFeature pointCollectionWithCoordinates:coordinates count:4]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"wiggle-source" shape:feature options:nil]; - [self.mapView.style addSource:source]; - - MGLCircleStyleLayer *layer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"wiggle-layer" source:source]; - [self.mapView.style addLayer:layer]; -} - -- (void)styleVectorTileSource -{ - NSURL *url = [[NSURL alloc] initWithString:@"mapbox://mapbox.mapbox-terrain-v2"]; - MGLVectorTileSource *vectorTileSource = [[MGLVectorTileSource alloc] initWithIdentifier:@"style-vector-tile-source-id" configurationURL:url]; - [self.mapView.style addSource:vectorTileSource]; - - MGLBackgroundStyleLayer *backgroundLayer = [[MGLBackgroundStyleLayer alloc] initWithIdentifier:@"style-vector-background-layer-id"]; - backgroundLayer.backgroundColor = [NSExpression expressionForConstantValue:[UIColor blackColor]]; - [self.mapView.style addLayer:backgroundLayer]; - - MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"style-vector-line-layer-id" source:vectorTileSource]; - lineLayer.sourceLayerIdentifier = @"contour"; - lineLayer.lineJoin = [NSExpression expressionForConstantValue:@"round"]; - lineLayer.lineCap = [NSExpression expressionForConstantValue:@"round"]; - lineLayer.lineColor = [NSExpression expressionForConstantValue:[UIColor greenColor]]; - - [self.mapView.style addLayer:lineLayer]; -} - -- (void)styleRasterTileSource -{ - NSString *tileURL = [NSString stringWithFormat:@"https://stamen-tiles.a.ssl.fastly.net/terrain-background/{z}/{x}/{y}%@.jpg", UIScreen.mainScreen.nativeScale > 1 ? @"@2x" : @""]; - MGLRasterTileSource *rasterTileSource = [[MGLRasterTileSource alloc] initWithIdentifier:@"style-raster-tile-source-id" tileURLTemplates:@[tileURL] options:@{ - MGLTileSourceOptionTileSize: @256, - }]; - [self.mapView.style addSource:rasterTileSource]; - - MGLRasterStyleLayer *rasterLayer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"style-raster-layer-id" source:rasterTileSource]; - [self.mapView.style addLayer:rasterLayer]; -} - -- (void)styleImageSource -{ - MGLCoordinateQuad coordinateQuad = { - { 46.437, -80.425 }, - { 37.936, -80.425 }, - { 37.936, -71.516 }, - { 46.437, -71.516 } }; - - MGLImageSource *imageSource = [[MGLImageSource alloc] initWithIdentifier:@"style-image-source-id" coordinateQuad:coordinateQuad URL:[NSURL URLWithString:@"https://www.mapbox.com/mapbox-gl-js/assets/radar0.gif"]]; - - [self.mapView.style addSource:imageSource]; - - MGLRasterStyleLayer *rasterLayer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"style-raster-image-layer-id" source:imageSource]; - [self.mapView.style addLayer:rasterLayer]; - - [NSTimer scheduledTimerWithTimeInterval:1.0 - target:self - selector:@selector(updateAnimatedImageSource:) - userInfo:imageSource - repeats:YES]; -} - - -- (void)updateAnimatedImageSource:(NSTimer *)timer { - static int radarSuffix = 0; - MGLImageSource *imageSource = (MGLImageSource *)timer.userInfo; - NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://www.mapbox.com/mapbox-gl-js/assets/radar%d.gif", radarSuffix++]]; - [imageSource setValue:url forKey:@"URL"]; - if (radarSuffix > 3) { - radarSuffix = 0; - } -} - --(void)toggleStyleLabelsLanguage -{ - _localizingLabels = !_localizingLabels; - [self.mapView.style localizeLabelsIntoLocale:_localizingLabels ? [NSLocale localeWithLocaleIdentifier:@"mul"] : nil]; -} - -- (void)styleRouteLine -{ - CLLocationCoordinate2D coords[] = { - { 43.84455590478528, 10.504238605499268 }, - { 43.84385562343126, 10.504125952720642 }, - { 43.84388657526694, 10.503299832344055 }, - { 43.84332557075269, 10.503235459327698 }, - { 43.843441641085036, 10.502264499664307 }, - { 43.84396395478592, 10.50242006778717 }, - { 43.84406067904351, 10.501744151115416 }, - { 43.84422317544319, 10.501792430877686 } - }; - NSInteger count = sizeof(coords) / sizeof(coords[0]); - - [self.mapView setCenterCoordinate:coords[0] zoomLevel:16 animated:YES]; - - MGLPolylineFeature *routeLine = [MGLPolylineFeature polylineWithCoordinates:coords count:count]; - - MGLShapeSource *routeSource = [[MGLShapeSource alloc] initWithIdentifier:@"style-route-source" shape:routeLine options:nil]; - [self.mapView.style addSource:routeSource]; - - MGLLineStyleLayer *baseRouteLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"style-base-route-layer" source:routeSource]; - baseRouteLayer.lineColor = [NSExpression expressionForConstantValue:[UIColor orangeColor]]; - baseRouteLayer.lineWidth = [NSExpression expressionForConstantValue:@20]; - baseRouteLayer.lineOpacity = [NSExpression expressionForConstantValue:@0.5]; - baseRouteLayer.lineCap = [NSExpression expressionForConstantValue:@"round"]; - baseRouteLayer.lineJoin = [NSExpression expressionForConstantValue:@"round"]; - [self.mapView.style addLayer:baseRouteLayer]; - - MGLLineStyleLayer *routeLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"style-route-layer" source:routeSource]; - routeLayer.lineColor = [NSExpression expressionForConstantValue:[UIColor whiteColor]]; - routeLayer.lineWidth = [NSExpression expressionForConstantValue:@15]; - routeLayer.lineOpacity = [NSExpression expressionForConstantValue:@0.8]; - routeLayer.lineCap = [NSExpression expressionForConstantValue:@"round"]; - routeLayer.lineJoin = [NSExpression expressionForConstantValue:@"round"]; - [self.mapView.style addLayer:routeLayer]; -} - -- (void)styleAddLimeGreenTriangleLayer -{ - LimeGreenStyleLayer *layer = [[LimeGreenStyleLayer alloc] initWithIdentifier:@"mbx-custom"]; - [self.mapView.style addLayer:layer]; -} - -- (void)stylePolygonWithDDS { - CLLocationCoordinate2D leftCoords[] = { - {37.73081027834234, -122.49412536621094}, - {37.7566013348511, -122.49412536621094}, - {37.7566013348511, -122.46253967285156}, - {37.73081027834234, -122.46253967285156}, - {37.73081027834234, -122.49412536621094}, - }; - CLLocationCoordinate2D rightCoords[] = { - {37.73135334055843, -122.44640350341795}, - {37.75741564287944, -122.44640350341795}, - {37.75741564287944, -122.41310119628906}, - {37.73135334055843, -122.41310119628906}, - {37.73135334055843, -122.44640350341795}, - }; - MGLPolygonFeature *leftFeature = [MGLPolygonFeature polygonWithCoordinates:leftCoords count:5]; - leftFeature.attributes = @{@"fill": @(YES)}; - - MGLPolygonFeature *rightFeature = [MGLPolygonFeature polygonWithCoordinates:rightCoords count:5]; - rightFeature.attributes = @{@"opacity": @(0.5)}; - - MGLShapeSource *shapeSource = [[MGLShapeSource alloc] initWithIdentifier:@"shape-source" features:@[leftFeature, rightFeature] options:nil]; - [self.mapView.style addSource:shapeSource]; - - // source, categorical function that sets any feature with a "fill" attribute value of true to red color and anything without to green - MGLFillStyleLayer *fillStyleLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:@"fill-layer" source:shapeSource]; - fillStyleLayer.fillColor = [NSExpression mgl_expressionForConditional:[NSPredicate predicateWithFormat:@"fill == YES"] - trueExpression:[NSExpression expressionForConstantValue:[UIColor greenColor]] - falseExpresssion:[NSExpression expressionForConstantValue:[UIColor redColor]]]; - - - - // source, identity function that sets any feature with an "opacity" attribute to use that value and anything without to 1.0 - fillStyleLayer.fillOpacity = [NSExpression mgl_expressionForConditional:[NSPredicate predicateWithFormat:@"opacity != nil"] - trueExpression:[NSExpression expressionForKeyPath:@"opacity"] - falseExpresssion:[NSExpression expressionForConstantValue:@1.0]]; - [self.mapView.style addLayer:fillStyleLayer]; -} - -- (void)addLatLonGrid -{ - MGLComputedShapeSource *source = [[MGLComputedShapeSource alloc] initWithIdentifier:@"latlon" - options:@{MGLShapeSourceOptionMaximumZoomLevel:@14}]; - source.dataSource = self; - [self.mapView.style addSource:source]; - MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"latlonlines" - source:source]; - [self.mapView.style addLayer:lineLayer]; - MGLSymbolStyleLayer *labelLayer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"latlonlabels" - source:source]; - labelLayer.text = [NSExpression expressionForKeyPath:@"value"]; - [self.mapView.style addLayer:labelLayer]; -} - -- (NSString *)bestLanguageForUser -{ - // https://www.mapbox.com/vector-tiles/mapbox-streets-v8/#name-text--name_lang-code-text - NSArray *supportedLanguages = @[ @"ar", @"de", @"en", @"es", @"fr", @"ja", @"ko", @"pt", @"ru", @"zh", @"zh-Hans", @"zh-Hant" ]; - NSArray *preferredLanguages = [NSBundle preferredLocalizationsFromArray:supportedLanguages forPreferences:[NSLocale preferredLanguages]]; - NSString *mostSpecificLanguage; - - for (NSString *language in preferredLanguages) - { - if (language.length > mostSpecificLanguage.length) - { - mostSpecificLanguage = language; - } - } - - return mostSpecificLanguage ?: @"en"; -} - -- (IBAction)startWorldTour -{ - _isTouringWorld = YES; - - [self.mapView removeAnnotations:self.mapView.annotations]; - NSUInteger numberOfAnnotations = sizeof(WorldTourDestinations) / sizeof(WorldTourDestinations[0]); - NSMutableArray *annotations = [NSMutableArray arrayWithCapacity:numberOfAnnotations]; - for (NSUInteger i = 0; i < numberOfAnnotations; i++) - { - MBXDroppedPinAnnotation *annotation = [[MBXDroppedPinAnnotation alloc] init]; - annotation.coordinate = WorldTourDestinations[i]; - [annotations addObject:annotation]; - } - [self.mapView addAnnotations:annotations]; - [self continueWorldTourWithRemainingAnnotations:annotations]; -} - -- (void)continueWorldTourWithRemainingAnnotations:(NSMutableArray *)annotations -{ - MGLPointAnnotation *nextAnnotation = annotations.firstObject; - if (!nextAnnotation || !_isTouringWorld) - { - _isTouringWorld = NO; - return; - } - - [annotations removeObjectAtIndex:0]; - MGLMapCamera *camera = [MGLMapCamera cameraLookingAtCenterCoordinate:nextAnnotation.coordinate - acrossDistance:10 - pitch:arc4random_uniform(60) - heading:arc4random_uniform(360)]; - __weak MBXViewController *weakSelf = self; - [self.mapView flyToCamera:camera completionHandler:^{ - MBXViewController *strongSelf = weakSelf; - [strongSelf performSelector:@selector(continueWorldTourWithRemainingAnnotations:) - withObject:annotations - afterDelay:2]; - }]; -} - -- (void)toggleCustomUserDot -{ - _customUserLocationAnnnotationEnabled = !_customUserLocationAnnnotationEnabled; - self.mapView.showsUserLocation = NO; - self.mapView.userTrackingMode = MGLUserTrackingModeFollow; -} - -- (void)testQueryPointAnnotations { - NSNumber *visibleAnnotationCount = @(self.mapView.visibleAnnotations.count); - NSString *message; - if ([visibleAnnotationCount integerValue] == 1) { - message = [NSString stringWithFormat:@"There is %@ visible annotation.", visibleAnnotationCount]; - } else { - message = [NSString stringWithFormat:@"There are %@ visible annotations.", visibleAnnotationCount]; - } - - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Visible Annotations" message:message preferredStyle:UIAlertControllerStyleAlert]; - [alertController addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleCancel handler:nil]]; - [self presentViewController:alertController animated:YES completion:nil]; -} - -- (id)randomOffscreenPointAnnotation { - - NSPredicate *pointAnnotationPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary * _Nullable bindings) { - return [evaluatedObject isKindOfClass:[MGLPointAnnotation class]]; - }]; - - NSArray *annotations = [self.mapView.annotations filteredArrayUsingPredicate:pointAnnotationPredicate]; - - if (annotations.count == 0) { - return nil; - } - - NSArray *visibleAnnotations = [self.mapView.visibleAnnotations filteredArrayUsingPredicate:pointAnnotationPredicate]; - - if (visibleAnnotations.count == annotations.count) { - return nil; - } - - NSMutableArray *invisibleAnnotations = [annotations mutableCopy]; - - if (visibleAnnotations.count > 0) { - [invisibleAnnotations removeObjectsInArray:visibleAnnotations]; - } - - // Now pick a random offscreen annotation. - uint32_t index = arc4random_uniform((uint32_t)invisibleAnnotations.count); - return invisibleAnnotations[index]; -} - -- (void)selectAnOffscreenPointAnnotation { - id annotation = [self randomOffscreenPointAnnotation]; - if (annotation) { - [self.mapView selectAnnotation:annotation animated:YES completionHandler:nil]; - - NSAssert(self.mapView.selectedAnnotations.firstObject, @"The annotation was not selected"); - } -} - -- (void)centerSelectedAnnotation { - id annotation = self.mapView.selectedAnnotations.firstObject; - - if (!annotation) - return; - - CGPoint point = [self.mapView convertCoordinate:annotation.coordinate toPointToView:self.mapView]; - - // Animate, so that point becomes the the center - CLLocationCoordinate2D center = [self.mapView convertPoint:point toCoordinateFromView:self.mapView]; - [self.mapView setCenterCoordinate:center animated:YES]; -} - -- (void)addVisibleAreaPolyline { - CGRect constrainedRect = UIEdgeInsetsInsetRect(self.mapView.bounds, self.mapView.contentInset); - - CLLocationCoordinate2D lineCoords[5]; - - lineCoords[0] = [self.mapView convertPoint: CGPointMake(CGRectGetMinX(constrainedRect), CGRectGetMinY(constrainedRect)) toCoordinateFromView:self.mapView]; - lineCoords[1] = [self.mapView convertPoint: CGPointMake(CGRectGetMaxX(constrainedRect), CGRectGetMinY(constrainedRect)) toCoordinateFromView:self.mapView]; - lineCoords[2] = [self.mapView convertPoint: CGPointMake(CGRectGetMaxX(constrainedRect), CGRectGetMaxY(constrainedRect)) toCoordinateFromView:self.mapView]; - lineCoords[3] = [self.mapView convertPoint: CGPointMake(CGRectGetMinX(constrainedRect), CGRectGetMaxY(constrainedRect)) toCoordinateFromView:self.mapView]; - lineCoords[4] = lineCoords[0]; - - MGLPolyline *line = [MGLPolyline polylineWithCoordinates:lineCoords - count:sizeof(lineCoords)/sizeof(lineCoords[0])]; - [self.mapView addAnnotation:line]; -} - -- (void)loadMissingIcon -{ - self.mapView.centerCoordinate = CLLocationCoordinate2DMake(0, 0); - self.mapView.zoomLevel = 1; - NSURL *customStyleJSON = [[NSBundle mainBundle] URLForResource:@"missing_icon" withExtension:@"json"]; - [self.mapView setStyleURL:customStyleJSON]; -} - -- (UIImage *)mapView:(MGLMapView *)mapView didFailToLoadImage:(NSString *)imageName { - UIImage *backupImage = [UIImage imageNamed:@"AppIcon"]; - return backupImage; -} - -#pragma mark - Random World Tour - -- (void)addAnnotations:(NSInteger)numAnnotations aroundCoordinate:(CLLocationCoordinate2D)coordinate radius:(CLLocationDistance)radius { - NSMutableArray *annotations = [[NSMutableArray alloc] initWithCapacity:numAnnotations]; - for (NSInteger i = 0; i feature in features) { - if (!title) { - title = [feature attributeForKey:@"name_en"] ?: [feature attributeForKey:@"name"]; - } - } - - MBXDroppedPinAnnotation *pin = [[MBXDroppedPinAnnotation alloc] init]; - pin.coordinate = [self.mapView convertPoint:point - toCoordinateFromView:self.mapView]; - pin.title = title ?: @"Dropped Pin"; - pin.subtitle = [[[MGLCoordinateFormatter alloc] init] stringFromCoordinate:pin.coordinate]; - - - // Calling `addAnnotation:` on mapView is required here (since `selectAnnotation:animated` has - // the side effect of adding the annotation if required, but returning an incorrect callout - // positioning rect) - - [self.mapView addAnnotation:pin]; - [self.mapView selectAnnotation:pin animated:YES completionHandler:nil]; - } -} - -- (IBAction)cycleStyles:(__unused id)sender -{ - static NSArray *styleNames; - static NSArray *styleURLs; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - styleNames = @[ - @"Streets", - @"Outdoors", - @"Light", - @"Dark", - @"Satellite", - @"Satellite Streets", - ]; - styleURLs = @[ - [MGLStyle streetsStyleURL], - [MGLStyle outdoorsStyleURL], - [MGLStyle lightStyleURL], - [MGLStyle darkStyleURL], - [MGLStyle satelliteStyleURL], - [MGLStyle satelliteStreetsStyleURL] - ]; - NSAssert(styleNames.count == styleURLs.count, @"Style names and URLs don’t match."); - - // Make sure defaultStyleURLs is up-to-date. - unsigned numMethods = 0; - Method *methods = class_copyMethodList(object_getClass([MGLStyle class]), &numMethods); - unsigned numStyleURLMethods = 0; - for (NSUInteger i = 0; i < numMethods; i++) { - Method method = methods[i]; - if (method_getNumberOfArguments(method) == 3 /* _cmd, self, version */) { - SEL selector = method_getName(method); - NSString *name = @(sel_getName(selector)); - if ([name hasSuffix:@"StyleURLWithVersion:"]) { - numStyleURLMethods += 1; - } - } - } - NSAssert(numStyleURLMethods == styleNames.count, - @"MGLStyle provides %u default styles but iosapp only knows about %lu of them.", - numStyleURLMethods, (unsigned long)styleNames.count); - }); - - self.styleIndex = (self.styleIndex + 1) % styleNames.count; - - self.mapView.styleURL = styleURLs[self.styleIndex]; - - UIButton *titleButton = (UIButton *)self.navigationItem.titleView; - [titleButton setTitle:styleNames[self.styleIndex] forState:UIControlStateNormal]; -} - -- (IBAction)locateUser:(id)sender -{ - MGLUserTrackingMode nextMode; - NSString *nextAccessibilityValue; - switch (self.mapView.userTrackingMode) { - case MGLUserTrackingModeNone: - nextMode = MGLUserTrackingModeFollow; - nextAccessibilityValue = @"Follow location"; - break; - case MGLUserTrackingModeFollow: - nextMode = MGLUserTrackingModeFollowWithHeading; - nextAccessibilityValue = @"Follow location and heading"; - break; - case MGLUserTrackingModeFollowWithHeading: - nextMode = MGLUserTrackingModeFollowWithCourse; - nextAccessibilityValue = @"Follow course"; - break; - case MGLUserTrackingModeFollowWithCourse: - nextMode = MGLUserTrackingModeNone; - nextAccessibilityValue = @"Off"; - break; - } - self.mapView.userTrackingMode = nextMode; - [sender setAccessibilityValue:nextAccessibilityValue]; -} - -#pragma mark - UIViewDelegate - -- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator -{ - [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; - if (_contentInsetsEnabled) - { - _contentInsetsEnabled = NO; - self.automaticallyAdjustsScrollViewInsets = YES; - [self.mapView setContentInset:UIEdgeInsetsZero]; - } - while (self.contentInsetsOverlays && [self.contentInsetsOverlays count]) { - [[self.contentInsetsOverlays lastObject] removeFromSuperview]; - [self.contentInsetsOverlays removeLastObject]; - } -} - -#pragma mark - MGLMapViewDelegate - -- (MGLAnnotationView *)mapView:(MGLMapView *)mapView viewForAnnotation:(id)annotation -{ - if (annotation == mapView.userLocation) - { - if (_customUserLocationAnnnotationEnabled) - { - MBXUserLocationAnnotationView *annotationView = [[MBXUserLocationAnnotationView alloc] initWithFrame:CGRectZero]; - annotationView.frame = CGRectMake(0, 0, annotationView.intrinsicContentSize.width, annotationView.intrinsicContentSize.height); - return annotationView; - } - - return nil; - } - // Use GL backed pins for dropped pin annotations - if ([annotation isKindOfClass:[MBXDroppedPinAnnotation class]] || [annotation isKindOfClass:[MBXSpriteBackedAnnotation class]]) - { - return nil; - } - - MBXAnnotationView *annotationView = (MBXAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:MBXViewControllerAnnotationViewReuseIdentifer]; - if (!annotationView) - { - annotationView = [[MBXAnnotationView alloc] initWithReuseIdentifier:MBXViewControllerAnnotationViewReuseIdentifer]; - annotationView.frame = CGRectMake(0, 0, 10, 10); - annotationView.backgroundColor = [UIColor whiteColor]; - - // Note that having two long press gesture recognizers on overlapping - // views (`self.view` & `annotationView`) will cause weird behavior. - // Comment out the pin dropping functionality in the handleLongPress: - // method in this class to make draggable annotation views play nice. - annotationView.draggable = YES; - } else { - // orange indicates that the annotation view was reused - annotationView.backgroundColor = [UIColor orangeColor]; - } - return annotationView; -} - -- (MGLAnnotationImage *)mapView:(MGLMapView * __nonnull)mapView imageForAnnotation:(id __nonnull)annotation -{ - if ([annotation isKindOfClass:[MBXDroppedPinAnnotation class]] || [annotation isKindOfClass:[MBXCustomCalloutAnnotation class]]) - { - return nil; // use default marker - } - - NSAssert([annotation isKindOfClass:[MBXSpriteBackedAnnotation class]], @"Annotations should be sprite-backed."); - - NSString *title = [(MGLPointAnnotation *)annotation title]; - if (!title.length) return nil; - NSString *lastTwoCharacters = [title substringFromIndex:title.length - 2]; - - MGLAnnotationImage *annotationImage = [mapView dequeueReusableAnnotationImageWithIdentifier:lastTwoCharacters]; - - if ( ! annotationImage) - { - UIColor *color; - - // make every tenth annotation blue - if ([lastTwoCharacters hasSuffix:@"0"]) { - color = [UIColor blueColor]; - } else { - color = [UIColor redColor]; - } - - UIImage *image = [self imageWithText:lastTwoCharacters backgroundColor:color]; - annotationImage = [MGLAnnotationImage annotationImageWithImage:image reuseIdentifier:lastTwoCharacters]; - - // don't allow touches on blue annotations - if ([color isEqual:[UIColor blueColor]]) annotationImage.enabled = NO; - } - - return annotationImage; -} - - -- (UIImage *)imageWithText:(NSString *)text backgroundColor:(UIColor *)color -{ - CGRect rect = CGRectMake(0, 0, 20, 15); - - UIGraphicsBeginImageContextWithOptions(rect.size, NO, [[UIScreen mainScreen] scale]); - - CGContextRef ctx = UIGraphicsGetCurrentContext(); - - CGContextSetFillColorWithColor(ctx, [[color colorWithAlphaComponent:0.75] CGColor]); - CGContextFillRect(ctx, rect); - - CGContextSetStrokeColorWithColor(ctx, [[UIColor blackColor] CGColor]); - CGContextStrokeRectWithWidth(ctx, rect, 2); - - NSAttributedString *drawString = [[NSAttributedString alloc] initWithString:text attributes:@{ - NSFontAttributeName: [UIFont fontWithName:@"Arial-BoldMT" size:12], - NSForegroundColorAttributeName: [UIColor whiteColor], - }]; - CGSize stringSize = drawString.size; - CGRect stringRect = CGRectMake((rect.size.width - stringSize.width) / 2, - (rect.size.height - stringSize.height) / 2, - stringSize.width, - stringSize.height); - [drawString drawInRect:stringRect]; - - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -- (BOOL)mapView:(__unused MGLMapView *)mapView annotationCanShowCallout:(__unused id )annotation -{ - return YES; -} - -- (CGFloat)mapView:(__unused MGLMapView *)mapView alphaForShapeAnnotation:(MGLShape *)annotation -{ - return ([annotation isKindOfClass:[MGLPolygon class]] ? 0.5 : 1.0); -} - -- (UIColor *)mapView:(__unused MGLMapView *)mapView strokeColorForShapeAnnotation:(MGLShape *)annotation -{ - UIColor *color = [annotation isKindOfClass:[MGLPolyline class]] ? [UIColor greenColor] : [UIColor blackColor]; - return [color colorWithAlphaComponent:0.9]; -} - -- (UIColor *)mapView:(__unused MGLMapView *)mapView fillColorForPolygonAnnotation:(__unused MGLPolygon *)annotation -{ - UIColor *color = annotation.pointCount > 3 ? [UIColor greenColor] : [UIColor redColor]; - return [color colorWithAlphaComponent:0.5]; -} - -- (void)mapView:(__unused MGLMapView *)mapView didChangeUserTrackingMode:(MGLUserTrackingMode)mode animated:(__unused BOOL)animated -{ - UIImage *newButtonImage; - NSString *newButtonTitle; - - switch (mode) { - case MGLUserTrackingModeNone: - newButtonImage = [UIImage imageNamed:@"TrackingLocationOffMask.png"]; - break; - - case MGLUserTrackingModeFollow: - newButtonImage = [UIImage imageNamed:@"TrackingLocationMask.png"]; - break; - - case MGLUserTrackingModeFollowWithHeading: - newButtonImage = [UIImage imageNamed:@"TrackingHeadingMask.png"]; - break; - case MGLUserTrackingModeFollowWithCourse: - newButtonImage = nil; - newButtonTitle = @"Course"; - break; - } - - self.navigationItem.rightBarButtonItem.title = newButtonTitle; - [UIView animateWithDuration:0.25 animations:^{ - self.navigationItem.rightBarButtonItem.image = newButtonImage; - }]; -} - -- (nullable id )mapView:(__unused MGLMapView *)mapView calloutViewForAnnotation:(id)annotation -{ - if ([annotation respondsToSelector:@selector(title)] - && [annotation isKindOfClass:[MBXCustomCalloutAnnotation class]]) - { - MBXCustomCalloutAnnotation *customAnnotation = (MBXCustomCalloutAnnotation *)annotation; - MBXCustomCalloutView *calloutView = [[MBXCustomCalloutView alloc] init]; - calloutView.representedObject = annotation; - calloutView.anchoredToAnnotation = customAnnotation.anchoredToAnnotation; - calloutView.dismissesAutomatically = customAnnotation.dismissesAutomatically; - return calloutView; - } - return nil; -} - -- (UIView *)mapView:(__unused MGLMapView *)mapView leftCalloutAccessoryViewForAnnotation:(__unused id)annotation -{ - UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; - button.frame = CGRectZero; - [button setTitle:@"Left" forState:UIControlStateNormal]; - [button sizeToFit]; - return button; -} - -- (UIView *)mapView:(__unused MGLMapView *)mapView rightCalloutAccessoryViewForAnnotation:(__unused id)annotation -{ - UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; - button.frame = CGRectZero; - [button setTitle:@"Right" forState:UIControlStateNormal]; - [button sizeToFit]; - return button; -} - -- (void)mapView:(MGLMapView *)mapView tapOnCalloutForAnnotation:(id )annotation -{ - if ( ! [annotation isKindOfClass:[MGLPointAnnotation class]]) - { - return; - } - - MGLPointAnnotation *point = (MGLPointAnnotation *)annotation; - point.coordinate = [self.mapView convertPoint:self.mapView.center toCoordinateFromView:self.mapView]; -} - -- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style -{ - // Default Mapbox styles use {name_en} as their label language, which means - // that a device with an English-language locale is already effectively - // using locale-based country labels. - _localizingLabels = [[self bestLanguageForUser] isEqualToString:@"en"]; -} - -- (BOOL)mapView:(MGLMapView *)mapView shouldChangeFromCamera:(MGLMapCamera *)oldCamera toCamera:(MGLMapCamera *)newCamera { - if (_shouldLimitCameraChanges) { - // Get the current camera to restore it after. - MGLMapCamera *currentCamera = mapView.camera; - - // From the new camera obtain the center to test if it’s inside the boundaries. - CLLocationCoordinate2D newCameraCenter = newCamera.centerCoordinate; - - // Set the map’s visible bounds to newCamera. - mapView.camera = newCamera; - MGLCoordinateBounds newVisibleCoordinates = mapView.visibleCoordinateBounds; - - // Revert the camera. - mapView.camera = currentCamera; - - // Test if the newCameraCenter and newVisibleCoordinates are inside Colorado. - BOOL inside = MGLCoordinateInCoordinateBounds(newCameraCenter, colorado); - BOOL intersects = MGLCoordinateInCoordinateBounds(newVisibleCoordinates.ne, colorado) && MGLCoordinateInCoordinateBounds(newVisibleCoordinates.sw, colorado); - - return inside && intersects; - } else { - return YES; - } -} - -- (void)mapViewRegionIsChanging:(MGLMapView *)mapView -{ - [self updateHUD]; - [self updateHelperMapViews]; -} - -- (void)mapView:(MGLMapView *)mapView regionDidChangeWithReason:(MGLCameraChangeReason)reason animated:(BOOL)animated -{ - if (reason != MGLCameraChangeReasonProgrammatic) { - self.randomWalk = NO; - } - - [self updateHUD]; - [self updateHelperMapViews]; -} - -- (void)mapView:(MGLMapView *)mapView didUpdateUserLocation:(MGLUserLocation *)userLocation { - [self updateHUD]; -} - -- (void)updateHelperMapViews { - for (UIWindow *window in self.helperWindows) { - MGLMapView *mapView = (MGLMapView *)window.rootViewController.view; - mapView.camera = self.mapView.camera; - } -} - -- (void)updateHUD { - - if (self.reuseQueueStatsEnabled == NO && self.zoomLevelOrnamentEnabled == NO) { - return; - } - - NSString *hudString; - - if (self.reuseQueueStatsEnabled) { - NSUInteger queuedAnnotations = 0; - for (NSArray *queue in self.mapView.annotationViewReuseQueueByIdentifier.allValues) { - queuedAnnotations += queue.count; - } - hudString = [NSString stringWithFormat:@"Visible: %ld Queued: %ld", (unsigned long)self.mapView.visibleAnnotations.count, (unsigned long)queuedAnnotations]; - } else if (self.zoomLevelOrnamentEnabled) { - hudString = [NSString stringWithFormat:@"%.f FPS (%.1fms) ∕ %.2f ∕ ↕\U0000FE0E%.f° ∕ %.f°", - roundf(self.mapView.averageFrameRate), self.mapView.averageFrameTime, - self.mapView.zoomLevel, self.mapView.camera.pitch, self.mapView.direction]; - } - - [self.hudLabel setTitle:hudString forState:UIControlStateNormal]; -} - -#pragma mark - MGLComputedShapeSourceDataSource - -- (NSArray>*)featuresInCoordinateBounds:(MGLCoordinateBounds)bounds zoomLevel:(NSUInteger)zoom { - double gridSpacing; - if(zoom >= 13) { - gridSpacing = 0.01; - } else if(zoom >= 11) { - gridSpacing = 0.05; - } else if(zoom == 10) { - gridSpacing = .1; - } else if(zoom == 9) { - gridSpacing = 0.25; - } else if(zoom == 8) { - gridSpacing = 0.5; - } else if (zoom >= 6) { - gridSpacing = 1; - } else if(zoom == 5) { - gridSpacing = 2; - } else if(zoom >= 4) { - gridSpacing = 5; - } else if(zoom == 2) { - gridSpacing = 10; - } else { - gridSpacing = 20; - } - - NSMutableArray > * features = [NSMutableArray array]; - CLLocationCoordinate2D coords[2]; - - for (double y = ceil(bounds.ne.latitude / gridSpacing) * gridSpacing; y >= floor(bounds.sw.latitude / gridSpacing) * gridSpacing; y -= gridSpacing) { - coords[0] = CLLocationCoordinate2DMake(y, bounds.sw.longitude); - coords[1] = CLLocationCoordinate2DMake(y, bounds.ne.longitude); - MGLPolylineFeature *feature = [MGLPolylineFeature polylineWithCoordinates:coords count:2]; - feature.attributes = @{@"value": @(y)}; - [features addObject:feature]; - } - - for (double x = floor(bounds.sw.longitude / gridSpacing) * gridSpacing; x <= ceil(bounds.ne.longitude / gridSpacing) * gridSpacing; x += gridSpacing) { - coords[0] = CLLocationCoordinate2DMake(bounds.sw.latitude, x); - coords[1] = CLLocationCoordinate2DMake(bounds.ne.latitude, x); - MGLPolylineFeature *feature = [MGLPolylineFeature polylineWithCoordinates:coords count:2]; - feature.attributes = @{@"value": @(x)}; - [features addObject:feature]; - } - - return features; -} - -- (void)mapViewDidFinishRenderingFrame:(MGLMapView *)mapView fullyRendered:(BOOL)fullyRendered { - if (self.frameTimeGraphEnabled) { - [self.frameTimeGraphView updatePathWithFrameDuration:mapView.frameTime]; - } -} - -- (void)saveCurrentMapState:(__unused NSNotification *)notification { - - // The following properties can change after the view loads so we need to save their - // state before exiting the view controller. - self.currentState.camera = self.mapView.camera; - self.currentState.showsUserLocation = self.mapView.showsUserLocation; - self.currentState.userTrackingMode = self.mapView.userTrackingMode; - self.currentState.showsUserHeadingIndicator = self.mapView.showsUserHeadingIndicator; - self.currentState.showsMapScale = self.mapView.showsScale; - self.currentState.showsZoomLevelOrnament = self.zoomLevelOrnamentEnabled; - self.currentState.showsTimeFrameGraph = self.frameTimeGraphEnabled; - self.currentState.debugMask = self.mapView.debugMask; - self.currentState.reuseQueueStatsEnabled = self.reuseQueueStatsEnabled; - - [[MBXStateManager sharedManager] saveState:self.currentState]; -} - -- (void)restoreMapState:(__unused NSNotification *)notification { - MBXState *currentState = [MBXStateManager sharedManager].currentState; - - self.mapView.camera = currentState.camera; - self.mapView.showsUserLocation = currentState.showsUserLocation; - self.mapView.userTrackingMode = currentState.userTrackingMode; - self.mapView.showsUserHeadingIndicator = currentState.showsUserHeadingIndicator; - self.mapView.showsScale = currentState.showsMapScale; - self.zoomLevelOrnamentEnabled = currentState.showsZoomLevelOrnament; - self.frameTimeGraphEnabled = currentState.showsTimeFrameGraph; - self.mapView.debugMask = currentState.debugMask; - self.reuseQueueStatsEnabled = currentState.reuseQueueStatsEnabled; - - self.currentState = currentState; -} - -@end diff --git a/platform/ios/app/Main.storyboard b/platform/ios/app/Main.storyboard deleted file mode 100644 index ac83bd968f0..00000000000 --- a/platform/ios/app/Main.storyboard +++ /dev/null @@ -1,473 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/ios/app/Settings.bundle/Base.lproj/Root.strings b/platform/ios/app/Settings.bundle/Base.lproj/Root.strings deleted file mode 100644 index 1945fe1141d..00000000000 --- a/platform/ios/app/Settings.bundle/Base.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "Privacy Settings"; -"TELEMETRY_SWITCH_TITLE" = "Mapbox Telemetry"; -"TELEMETRY_GROUP_FOOTER" = "This setting allows the application to share anonymized location and usage data with Mapbox."; diff --git a/platform/ios/app/Settings.bundle/Root.plist b/platform/ios/app/Settings.bundle/Root.plist deleted file mode 100644 index fba2065a8f1..00000000000 --- a/platform/ios/app/Settings.bundle/Root.plist +++ /dev/null @@ -1,33 +0,0 @@ - - - - - PreferenceSpecifiers - - - Title - TELEMETRY_GROUP_TITLE - Type - PSGroupSpecifier - FooterText - TELEMETRY_GROUP_FOOTER - - - DefaultValue - - Key - MGLMapboxMetricsEnabled - Title - TELEMETRY_SWITCH_TITLE - Type - PSToggleSwitchSpecifier - TrueValue - - FalseValue - - - - StringsTable - Root - - diff --git a/platform/ios/app/Settings.bundle/ar.lproj/Root.strings b/platform/ios/app/Settings.bundle/ar.lproj/Root.strings deleted file mode 100644 index 352bb0eddc7..00000000000 --- a/platform/ios/app/Settings.bundle/ar.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "إعدادات الخصوصية"; -"TELEMETRY_SWITCH_TITLE" = "القياس عن بعد"; -"TELEMETRY_GROUP_FOOTER" = "يتيح هذا الإعداد للتطبيق مشاركة المكان وبيانات الاستخدام مجهّلة مع Mapbox."; diff --git a/platform/ios/app/Settings.bundle/bg.lproj/Root.strings b/platform/ios/app/Settings.bundle/bg.lproj/Root.strings deleted file mode 100644 index c86decde325..00000000000 --- a/platform/ios/app/Settings.bundle/bg.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "Настройки за поверителност"; -"TELEMETRY_SWITCH_TITLE" = "Mapbox Телеметрия"; -"TELEMETRY_GROUP_FOOTER" = "Тази настройка позволява на приложението да споделя анонимни локации и данни за използване с Mapbox."; diff --git a/platform/ios/app/Settings.bundle/ca.lproj/Root.strings b/platform/ios/app/Settings.bundle/ca.lproj/Root.strings deleted file mode 100644 index 3f6104a075f..00000000000 --- a/platform/ios/app/Settings.bundle/ca.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "Configuració de privacitat"; -"TELEMETRY_SWITCH_TITLE" = "Telemetria Mapbox"; -"TELEMETRY_GROUP_FOOTER" = "Aquest ajust permet que l’aplicació comparteixi dades anònimes de localització i ús amb Mapbox."; diff --git a/platform/ios/app/Settings.bundle/cs.lproj/Root.strings b/platform/ios/app/Settings.bundle/cs.lproj/Root.strings deleted file mode 100644 index 4af82f3ac68..00000000000 --- a/platform/ios/app/Settings.bundle/cs.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "Nastavení ochrany osobních údajů"; -"TELEMETRY_SWITCH_TITLE" = "Mapbox telemetrie"; -"TELEMETRY_GROUP_FOOTER" = "Toto nastavení umožňuje aplikaci sdílet anonymní údaje o poloze a využití s Mapboxem."; diff --git a/platform/ios/app/Settings.bundle/da.lproj/Root.strings b/platform/ios/app/Settings.bundle/da.lproj/Root.strings deleted file mode 100644 index b1129a865ae..00000000000 --- a/platform/ios/app/Settings.bundle/da.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "Privatlivs indstillinger"; -"TELEMETRY_SWITCH_TITLE" = "Mapbox Telemetry"; -"TELEMETRY_GROUP_FOOTER" = "Denne indstilling giver app'en tilladelse til at dele anonyme bruger data og position med Mapbox."; diff --git a/platform/ios/app/Settings.bundle/de.lproj/Root.strings b/platform/ios/app/Settings.bundle/de.lproj/Root.strings deleted file mode 100644 index 30bd2252cef..00000000000 --- a/platform/ios/app/Settings.bundle/de.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "Privatsphäre-Einstellungen"; -"TELEMETRY_SWITCH_TITLE" = "Mapbox-Telemetrie"; -"TELEMETRY_GROUP_FOOTER" = "Diese Einstellung erlaubt der Applikation, anonymisierte Orts- und Nutzungsdaten an Mapbox zu senden."; diff --git a/platform/ios/app/Settings.bundle/en.lproj/Root.strings b/platform/ios/app/Settings.bundle/en.lproj/Root.strings deleted file mode 100644 index 1945fe1141d..00000000000 --- a/platform/ios/app/Settings.bundle/en.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "Privacy Settings"; -"TELEMETRY_SWITCH_TITLE" = "Mapbox Telemetry"; -"TELEMETRY_GROUP_FOOTER" = "This setting allows the application to share anonymized location and usage data with Mapbox."; diff --git a/platform/ios/app/Settings.bundle/es.lproj/Root.strings b/platform/ios/app/Settings.bundle/es.lproj/Root.strings deleted file mode 100644 index 48da358189b..00000000000 --- a/platform/ios/app/Settings.bundle/es.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "Ajustes de privacidad"; -"TELEMETRY_SWITCH_TITLE" = "Telemetría Mapbox"; -"TELEMETRY_GROUP_FOOTER" = "Esta configuración permite que la aplicación comparta datos anónimos de ubicación y uso con Mapbox."; diff --git a/platform/ios/app/Settings.bundle/fi.lproj/Root.strings b/platform/ios/app/Settings.bundle/fi.lproj/Root.strings deleted file mode 100644 index b12a017e8a4..00000000000 --- a/platform/ios/app/Settings.bundle/fi.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "Yksityisyysasetukset"; -"TELEMETRY_SWITCH_TITLE" = "Mapbox-telemetria"; -"TELEMETRY_GROUP_FOOTER" = "Tämä asetus antaa sovellukselle luvan jakaa anonymisoituja sijainti- ja käyttötietoja Mapboxille."; diff --git a/platform/ios/app/Settings.bundle/fr.lproj/Root.strings b/platform/ios/app/Settings.bundle/fr.lproj/Root.strings deleted file mode 100644 index f00e8e2fe8a..00000000000 --- a/platform/ios/app/Settings.bundle/fr.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "Paramètres de confidentialité"; -"TELEMETRY_SWITCH_TITLE" = "Télémétrie Mapbox"; -"TELEMETRY_GROUP_FOOTER" = "Cette option permet à l’application de partager des données de localisation et d’utilisation anonymes avec Mapbox."; diff --git a/platform/ios/app/Settings.bundle/gl.lproj/Root.strings b/platform/ios/app/Settings.bundle/gl.lproj/Root.strings deleted file mode 100644 index 50510348de75cf22576063c33d6e3eb4cd8b56d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488 zcmaKo&1wQc5QOWTr&#s@@&ds_2xo|&$y zuHJ2T+gOR}Y7-qIQD5&GsY&kYO+D&FEy5kKBGrgk&#JW1r%FvZBTdMW3aypvOQ|yQ zgzWcNPkP|IrZdnmu)pZ_hEf8Y(e_ItC=CqR(l#w|o d-`yRdGQME8?%ut3;*C!=3m9vj?&R^Xm0$jmRkQ#A diff --git a/platform/ios/app/Settings.bundle/he.lproj/Root.strings b/platform/ios/app/Settings.bundle/he.lproj/Root.strings deleted file mode 100644 index 0fd5881e5fd..00000000000 --- a/platform/ios/app/Settings.bundle/he.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "הגדרות פרטיות"; -"TELEMETRY_SWITCH_TITLE" = "Mapbox Telemetry"; -"TELEMETRY_GROUP_FOOTER" = "הגדרה זו מתירה לאפליקציה לשתף באופן אנונימי את נתוני המיקום והשימוש עם Mapbox."; diff --git a/platform/ios/app/Settings.bundle/hu.lproj/Root.strings b/platform/ios/app/Settings.bundle/hu.lproj/Root.strings deleted file mode 100644 index 3d761f2b97e..00000000000 --- a/platform/ios/app/Settings.bundle/hu.lproj/Root.strings +++ /dev/null @@ -1,3 +0,0 @@ -"TELEMETRY_GROUP_TITLE" = "Adatvédelmi beállítások"; -"TELEMETRY_SWITCH_TITLE" = "Mapbox Telemetria"; -"TELEMETRY_GROUP_FOOTER" = "Ez a beállítás megengedi az alkalmazásnak, hogy névtelen helyzeti és használati adatokat osszon meg a Mapbox-szal."; diff --git a/platform/ios/app/Settings.bundle/it.lproj/Root.strings b/platform/ios/app/Settings.bundle/it.lproj/Root.strings deleted file mode 100644 index 4e2c67ff6986b9e1a0effb86bc2b8dae64bdc400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmaKo!D_-_5QOL4rwF<9<_nabiq=9!jS=ZdqUI2&F_1khG9|NT8ZE*tt55i{*YW9?vW z?g?OjbYDvM(l0IP&Dp~$iQoI|n-t)To|`Auv7**a8r~D;)7Ix(uguNt>Se>6UwmD| b7=", - "layer", - 2 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 100%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 10.99, - 0 - ], - [ - 11, - 1 - ] - ] - } - } - }, - { - "id": "bridge-motorway_link-2-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway_link" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 100%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": 1 - } - }, - { - "id": "bridge-trunk-2-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "trunk" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 100%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - } - } - }, - { - "id": "bridge-motorway-2-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 100%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - } - } - }, - { - "id": "bridge-trunk_link-2", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "trunk_link" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(46, 85%, 67%)" - } - }, - { - "id": "bridge-motorway_link-2", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway_link" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(26, 100%, 68%)" - } - }, - { - "id": "bridge-trunk-2", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "trunk" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(46, 85%, 67%)" - } - }, - { - "id": "bridge-motorway-2", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(26, 100%, 68%)" - } - }, - { - "id": "bridge-oneway-arrows-white", - "type": "symbol", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 16, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "type", - "primary_link", - "secondary_link", - "tertiary_link" - ], - [ - "==", - "oneway", - "true" - ], - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "link", - "motorway", - "motorway_link", - "trunk" - ] - ], - "layout": { - "symbol-placement": "line", - "icon-image": { - "base": 1, - "stops": [ - [ - 16, - "oneway-white-small" - ], - [ - 17, - "oneway-white-large" - ] - ] - }, - "symbol-spacing": 200, - "icon-padding": 2 - }, - "paint": {} - }, - { - "id": "aerialway", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "==", - "class", - "aerialway" - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-color": "hsl(230, 10%, 74%)", - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 20, - 1 - ] - ] - } - } - }, - { - "id": "admin-3-4-boundaries-bg", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "interactive": true, - "filter": [ - "all", - [ - "==", - "maritime", - 0 - ], - [ - ">=", - "admin_level", - 3 - ] - ], - "layout": { - "line-join": "bevel" - }, - "paint": { - "line-color": { - "base": 1, - "stops": [ - [ - 8, - "hsl(35, 12%, 89%)" - ], - [ - 16, - "hsl(230, 49%, 90%)" - ] - ] - }, - "line-width": { - "base": 1, - "stops": [ - [ - 7, - 3.75 - ], - [ - 12, - 5.5 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 7, - 0 - ], - [ - 8, - 0.75 - ] - ] - }, - "line-dasharray": [ - 1, - 0 - ], - "line-translate": [ - 0, - 0 - ], - "line-blur": { - "base": 1, - "stops": [ - [ - 3, - 0 - ], - [ - 8, - 3 - ] - ] - } - } - }, - { - "id": "admin-2-boundaries-bg", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "minzoom": 1, - "interactive": true, - "filter": [ - "all", - [ - "==", - "admin_level", - 2 - ], - [ - "==", - "maritime", - 0 - ] - ], - "layout": { - "line-join": "miter" - }, - "paint": { - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 3.5 - ], - [ - 10, - 8 - ] - ] - }, - "line-color": { - "base": 1, - "stops": [ - [ - 6, - "hsl(35, 12%, 89%)" - ], - [ - 8, - "hsl(230, 49%, 90%)" - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 3, - 0 - ], - [ - 4, - 0.5 - ] - ] - }, - "line-translate": [ - 0, - 0 - ], - "line-blur": { - "base": 1, - "stops": [ - [ - 3, - 0 - ], - [ - 10, - 2 - ] - ] - } - } - }, - { - "id": "admin-3-4-boundaries", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "interactive": true, - "filter": [ - "all", - [ - "==", - "maritime", - 0 - ], - [ - ">=", - "admin_level", - 3 - ] - ], - "layout": { - "line-join": "round", - "line-cap": "round" - }, - "paint": { - "line-dasharray": { - "base": 1, - "stops": [ - [ - 6, - [ - 2, - 0 - ] - ], - [ - 7, - [ - 2, - 2, - 6, - 2 - ] - ] - ] - }, - "line-width": { - "base": 1, - "stops": [ - [ - 7, - 0.75 - ], - [ - 12, - 1.5 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 2, - 0 - ], - [ - 3, - 1 - ] - ] - }, - "line-color": { - "base": 1, - "stops": [ - [ - 3, - "hsl(230, 14%, 77%)" - ], - [ - 7, - "hsl(230, 8%, 62%)" - ] - ] - } - } - }, - { - "id": "admin-2-boundaries", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "minzoom": 1, - "interactive": true, - "filter": [ - "all", - [ - "==", - "admin_level", - 2 - ], - [ - "==", - "disputed", - 0 - ], - [ - "==", - "maritime", - 0 - ] - ], - "layout": { - "line-join": "round", - "line-cap": "round" - }, - "paint": { - "line-color": "hsl(230, 8%, 51%)", - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 0.5 - ], - [ - 10, - 2 - ] - ] - } - } - }, - { - "id": "admin-2-boundaries-dispute", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "minzoom": 1, - "interactive": true, - "filter": [ - "all", - [ - "==", - "admin_level", - 2 - ], - [ - "==", - "disputed", - 1 - ], - [ - "==", - "maritime", - 0 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-dasharray": [ - 1.5, - 1.5 - ], - "line-color": "hsl(230, 8%, 51%)", - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 0.5 - ], - [ - 10, - 2 - ] - ] - } - } - }, - { - "id": "housenum-label", - "type": "symbol", - "source": "composite", - "source-layer": "housenum_label", - "minzoom": 17, - "interactive": true, - "layout": { - "text-field": "{house_num}", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-padding": 4, - "text-max-width": 7, - "text-size": 9.5 - }, - "paint": { - "text-color": "hsl(35, 2%, 69%)", - "text-halo-color": "hsl(35, 8%, 85%)", - "text-halo-width": 0.5, - "text-halo-blur": 0 - } - }, - { - "id": "waterway-label", - "type": "symbol", - "source": "composite", - "source-layer": "waterway_label", - "minzoom": 12, - "interactive": true, - "filter": [ - "in", - "class", - "canal", - "river" - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-max-angle": 30, - "text-size": { - "base": 1, - "stops": [ - [ - 13, - 12 - ], - [ - 18, - 16 - ] - ] - } - }, - "paint": { - "text-halo-width": 0.5, - "text-halo-color": "hsl(196, 80%, 70%)", - "text-color": "hsl(230, 48%, 44%)", - "text-halo-blur": 0.5 - } - }, - { - "id": "poi-scalerank4-l15", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933456003.5437" - }, - "source": "composite", - "source-layer": "poi_label", - "minzoom": 17, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ], - [ - "==", - "scalerank", - 4 - ], - [ - ">=", - "localrank", - 15 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - }, - "icon-image": "{maki}-11", - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0.65 - ], - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(26, 25%, 32%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0.5, - "text-halo-blur": 0.5 - } - }, - { - "id": "poi-scalerank4-l1", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933456003.5437" - }, - "source": "composite", - "source-layer": "poi_label", - "minzoom": 15, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ], - [ - "<=", - "localrank", - 14 - ], - [ - "==", - "scalerank", - 4 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - }, - "icon-image": "{maki}-11", - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 1, - "text-offset": [ - 0, - 0.65 - ], - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(26, 25%, 32%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0.5, - "text-halo-blur": 0.5 - } - }, - { - "id": "poi-parks_scalerank4", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933456003.5437" - }, - "source": "composite", - "source-layer": "poi_label", - "minzoom": 15, - "interactive": true, - "filter": [ - "all", - [ - "==", - "scalerank", - 4 - ], - [ - "in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - }, - "icon-image": "{maki}-11", - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 1, - "text-offset": [ - 0, - 0.65 - ], - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(100, 100%, 20%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0.5, - "text-halo-blur": 0.5 - } - }, - { - "id": "poi-scalerank3", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933372896.5967" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ], - [ - "==", - "scalerank", - 3 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - }, - "icon-image": "{maki}-11", - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 1, - "text-offset": [ - 0, - 0.65 - ], - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(26, 25%, 32%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0.5, - "text-halo-blur": 0.5 - } - }, - { - "id": "poi-parks-scalerank3", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933372896.5967" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "==", - "scalerank", - 3 - ], - [ - "in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - }, - "icon-image": "{maki}-11", - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0.65 - ], - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(100, 100%, 20%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0.5, - "text-halo-blur": 0.5 - } - }, - { - "id": "road-label-small", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933721429.3076" - }, - "source": "composite", - "source-layer": "road_label", - "minzoom": 15, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "class", - "link", - "motorway", - "pedestrian", - "primary", - "secondary", - "street", - "street_limited", - "tertiary", - "trunk" - ], - [ - "==", - "$type", - "LineString" - ] - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 15, - 10 - ], - [ - 20, - 13 - ] - ] - }, - "text-max-angle": 30, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-padding": 1, - "text-rotation-alignment": "map", - "text-field": "{name_en}", - "text-letter-spacing": 0.01 - }, - "paint": { - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1.25, - "text-halo-blur": 1 - } - }, - { - "id": "road-label-medium", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933721429.3076" - }, - "source": "composite", - "source-layer": "road_label", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "in", - "class", - "link", - "pedestrian", - "street", - "street_limited" - ] - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 11, - 10 - ], - [ - 20, - 14 - ] - ] - }, - "text-max-angle": 30, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-padding": 1, - "text-rotation-alignment": "map", - "text-field": "{name_en}", - "text-letter-spacing": 0.01 - }, - "paint": { - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1 - } - }, - { - "id": "road-label-large", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933721429.3076" - }, - "source": "composite", - "source-layer": "road_label", - "interactive": true, - "filter": [ - "in", - "class", - "motorway", - "primary", - "secondary", - "tertiary", - "trunk" - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 9, - 10 - ], - [ - 20, - 16 - ] - ] - }, - "text-max-angle": 30, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-padding": 1, - "text-rotation-alignment": "map", - "text-field": "{name_en}", - "text-letter-spacing": 0.01 - }, - "paint": { - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": "hsla(0, 0%, 100%, 0.75)", - "text-halo-width": 1, - "text-halo-blur": 1 - } - }, - { - "id": "road-shields-black", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933575858.6992" - }, - "source": "composite", - "source-layer": "road_label", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "shield", - "at-expressway", - "at-motorway", - "at-state-b", - "bg-motorway", - "bg-national", - "ch-main", - "ch-motorway", - "cz-motorway", - "cz-road", - "de-motorway", - "e-road", - "fi-main", - "gr-motorway", - "gr-national", - "hr-motorway", - "hr-state", - "hu-main", - "hu-motorway", - "nz-state", - "pl-expressway", - "pl-motorway", - "pl-national", - "ro-county", - "ro-motorway", - "ro-national", - "rs-motorway", - "rs-state-1b", - "se-main", - "si-expressway", - "si-motorway", - "sk-highway", - "sk-road", - "us-interstate", - "us-interstate-business", - "us-interstate-duplex", - "us-interstate-truck", - "za-metropolitan", - "za-national", - "za-provincial", - "za-regional" - ], - [ - "<=", - "reflen", - 6 - ] - ], - "layout": { - "text-size": 9, - "icon-image": "{shield}-{reflen}", - "icon-rotation-alignment": "viewport", - "text-max-angle": 38, - "symbol-spacing": { - "base": 1, - "stops": [ - [ - 11, - 150 - ], - [ - 14, - 200 - ] - ] - }, - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "symbol-placement": { - "base": 1, - "stops": [ - [ - 10, - "point" - ], - [ - 11, - "line" - ] - ] - }, - "text-padding": 2, - "text-rotation-alignment": "viewport", - "text-field": "{ref}", - "text-letter-spacing": 0.05, - "icon-padding": 2 - }, - "paint": { - "text-color": "hsl(0, 0%, 7%)", - "icon-halo-color": "rgba(0, 0, 0, 1)", - "icon-halo-width": 1, - "text-opacity": 1, - "icon-color": "white", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0 - } - }, - { - "id": "road-shields-white", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933575858.6992" - }, - "source": "composite", - "source-layer": "road_label", - "interactive": true, - "filter": [ - "all", - [ - "<=", - "reflen", - 6 - ], - [ - "in", - "shield", - "at-expressway", - "at-motorway", - "at-state-b", - "bg-motorway", - "bg-national", - "ch-main", - "ch-motorway", - "cz-motorway", - "cz-road", - "de-motorway", - "e-road", - "fi-main", - "gr-motorway", - "gr-national", - "hr-motorway", - "hr-state", - "hu-main", - "hu-motorway", - "nz-state", - "pl-expressway", - "pl-motorway", - "pl-national", - "ro-county", - "ro-motorway", - "ro-national", - "rs-motorway", - "rs-state-1b", - "se-main", - "si-expressway", - "si-motorway", - "sk-highway", - "sk-road", - "us-interstate", - "us-interstate-business", - "us-interstate-duplex", - "us-interstate-truck", - "za-metropolitan", - "za-national", - "za-provincial", - "za-regional" - ] - ], - "layout": { - "text-size": 9, - "icon-image": "{shield}-{reflen}", - "icon-rotation-alignment": "viewport", - "text-max-angle": 38, - "symbol-spacing": { - "base": 1, - "stops": [ - [ - 11, - 150 - ], - [ - 14, - 200 - ] - ] - }, - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "symbol-placement": { - "base": 1, - "stops": [ - [ - 10, - "point" - ], - [ - 11, - "line" - ] - ] - }, - "text-padding": 2, - "text-rotation-alignment": "viewport", - "text-field": "{ref}", - "text-letter-spacing": 0.05, - "icon-padding": 2 - }, - "paint": { - "text-color": "hsl(0, 0%, 100%)", - "icon-halo-color": "rgba(0, 0, 0, 1)", - "icon-halo-width": 1, - "text-opacity": 1, - "icon-color": "white", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0 - } - }, - { - "id": "motorway-junction", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933575858.6992" - }, - "source": "composite", - "source-layer": "motorway_junction", - "minzoom": 14, - "interactive": true, - "filter": [ - ">", - "reflen", - 0 - ], - "layout": { - "text-field": "{ref}", - "text-size": 9, - "icon-image": "motorway-exit-{reflen}", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ] - }, - "paint": { - "text-color": "hsl(0, 0%, 100%)", - "text-translate": [ - 0, - 0 - ] - } - }, - { - "id": "poi-scalerank2", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933358918.2366" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ], - [ - "==", - "scalerank", - 2 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 14, - 11 - ], - [ - 20, - 14 - ] - ] - }, - "icon-image": { - "stops": [ - [ - 14, - "{maki}-11" - ], - [ - 15, - "{maki}-15" - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0.65 - ], - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(26, 25%, 32%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0.5, - "text-halo-blur": 0.5 - } - }, - { - "id": "poi-parks-scalerank2", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933358918.2366" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "==", - "scalerank", - 2 - ], - [ - "in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 14, - 11 - ], - [ - 20, - 14 - ] - ] - }, - "icon-image": { - "stops": [ - [ - 14, - "{maki}-11" - ], - [ - 15, - "{maki}-15" - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0.65 - ], - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(100, 100%, 20%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0.5, - "text-halo-blur": 0.5 - } - }, - { - "id": "rail-label", - "type": "symbol", - "source": "composite", - "source-layer": "rail_station_label", - "minzoom": 12, - "interactive": true, - "filter": [ - "!=", - "maki", - "entrance" - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - }, - "icon-image": "{network}", - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-offset": [ - 0, - 0.85 - ], - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "" - ], - [ - 13, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.01, - "icon-padding": 0, - "text-max-width": 7 - }, - "paint": { - "text-color": "hsl(230, 48%, 44%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0.5, - "icon-halo-width": 4, - "icon-halo-color": "#fff", - "text-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - }, - "text-halo-blur": 0.5 - } - }, - { - "id": "water-label-sm", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933808272.805" - }, - "source": "composite", - "source-layer": "water_label", - "minzoom": 15, - "interactive": true, - "filter": [ - "<=", - "area", - 10000 - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 13 - ], - [ - 20, - 16 - ] - ] - } - }, - "paint": { - "text-color": "hsl(230, 48%, 44%)" - } - }, - { - "id": "water-label", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933808272.805" - }, - "source": "composite", - "source-layer": "water_label", - "minzoom": 5, - "interactive": true, - "filter": [ - ">", - "area", - 10000 - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 13, - 13 - ], - [ - 18, - 18 - ] - ] - } - }, - "paint": { - "text-color": "hsl(230, 48%, 44%)" - } - }, - { - "id": "place-residential", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 16, - "maxzoom": 18, - "interactive": true, - "filter": [ - "all", - [ - "<=", - "localrank", - 10 - ], - [ - "==", - "type", - "residential" - ] - ], - "layout": { - "text-line-height": 1.2, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 14 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "visibility": "none", - "text-offset": [ - 0, - 0 - ], - "text-rotation-alignment": "viewport", - "text-field": "{name_en}", - "text-max-width": 7 - }, - "paint": { - "text-color": "hsl(26, 25%, 32%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1, - "text-halo-blur": 0.5 - } - }, - { - "id": "poi-parks-scalerank1", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933322393.2852" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "<=", - "scalerank", - 1 - ], - [ - "in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 14 - ] - ] - }, - "icon-image": { - "stops": [ - [ - 13, - "{maki}-11" - ], - [ - 14, - "{maki}-15" - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0.65 - ], - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(100, 100%, 20%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0.5, - "text-halo-blur": 0.5 - } - }, - { - "id": "poi-scalerank1", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933322393.2852" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ], - [ - "<=", - "scalerank", - 1 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 14 - ] - ] - }, - "icon-image": { - "stops": [ - [ - 13, - "{maki}-11" - ], - [ - 14, - "{maki}-15" - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0.65 - ], - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(26, 25%, 32%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0.5, - "text-halo-blur": 0.5 - } - }, - { - "id": "airport-label", - "type": "symbol", - "source": "composite", - "source-layer": "airport_label", - "minzoom": 9, - "interactive": true, - "filter": [ - "<=", - "scalerank", - 2 - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 12 - ], - [ - 18, - 18 - ] - ] - }, - "icon-image": { - "stops": [ - [ - 12, - "{maki}-11" - ], - [ - 13, - "{maki}-15" - ] - ] - }, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0.75 - ], - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": { - "stops": [ - [ - 11, - "{ref}" - ], - [ - 12, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.01, - "text-max-width": 9 - }, - "paint": { - "text-color": "hsl(230, 48%, 44%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 0.5, - "text-halo-blur": 0.5 - } - }, - { - "id": "place-islet-archipelago-aboriginal", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "maxzoom": 16, - "interactive": true, - "filter": [ - "in", - "type", - "aboriginal_lands", - "archipelago", - "islet" - ], - "layout": { - "text-line-height": 1.2, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 16 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-rotation-alignment": "viewport", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(230, 29%, 35%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1 - } - }, - { - "id": "place-neighbourhood", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 10, - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "type", - "neighbourhood" - ], - "layout": { - "text-field": "{name_en}", - "text-transform": "uppercase", - "text-letter-spacing": 0.1, - "text-max-width": 7, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-padding": 3, - "text-size": { - "base": 1, - "stops": [ - [ - 12, - 11 - ], - [ - 16, - 16 - ] - ] - } - }, - "paint": { - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1, - "text-color": "hsl(230, 29%, 35%)", - "text-halo-blur": 0.5 - } - }, - { - "id": "place-suburb", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 10, - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "type", - "suburb" - ], - "layout": { - "text-field": "{name_en}", - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-letter-spacing": 0.15, - "text-max-width": 7, - "text-padding": 3, - "text-size": { - "base": 1, - "stops": [ - [ - 11, - 11 - ], - [ - 15, - 18 - ] - ] - } - }, - "paint": { - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1, - "text-color": "hsl(230, 29%, 35%)", - "text-halo-blur": 0.5 - } - }, - { - "id": "place-hamlet", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 10, - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "type", - "hamlet" - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 12, - 11.5 - ], - [ - 15, - 16 - ] - ] - } - }, - "paint": { - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1.25, - "text-color": "hsl(0, 0%, 0%)" - } - }, - { - "id": "place-village", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 8, - "maxzoom": 15, - "interactive": true, - "filter": [ - "==", - "type", - "village" - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11.5 - ], - [ - 16, - 18 - ] - ] - } - }, - "paint": { - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1.25, - "text-color": "hsl(0, 0%, 0%)" - } - }, - { - "id": "place-town", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 6, - "maxzoom": 15, - "interactive": true, - "filter": [ - "==", - "type", - "town" - ], - "layout": { - "icon-image": "dot-9", - "text-font": { - "base": 1, - "stops": [ - [ - 11, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 12, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7, - [ - 0, - -0.15 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "bottom" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 7, - 11.5 - ], - [ - 15, - 20 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1.25, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - } - } - }, - { - "id": "place-island", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "type", - "island" - ], - "layout": { - "text-line-height": 1.2, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 16 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-rotation-alignment": "viewport", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 7 - }, - "paint": { - "text-color": "hsl(230, 29%, 35%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1 - } - }, - { - "id": "place-city-sm", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "scalerank", - 0, - 1, - 2, - 3, - 4, - 5 - ], - [ - "==", - "type", - "city" - ] - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 6, - 12 - ], - [ - 14, - 22 - ] - ] - }, - "icon-image": "dot-9", - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - -0.2 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "bottom" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7 - }, - "paint": { - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1.25, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - } - } - }, - { - "id": "place-city-md-s", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "==", - "type", - "city" - ], - [ - "in", - "ldir", - "E", - "S", - "SE", - "SW" - ], - [ - "in", - "scalerank", - 3, - 4, - 5 - ] - ], - "layout": { - "text-field": "{name_en}", - "icon-image": "dot-10", - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "top" - ], - [ - 8, - "center" - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - 0.1 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-size": { - "base": 0.9, - "stops": [ - [ - 5, - 12 - ], - [ - 12, - 22 - ] - ] - } - }, - "paint": { - "text-halo-width": 1, - "text-halo-color": "hsl(0, 0%, 100%)", - "text-color": "hsl(0, 0%, 0%)", - "text-halo-blur": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - } - } - }, - { - "id": "place-city-md-n", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "==", - "type", - "city" - ], - [ - "in", - "ldir", - "N", - "NE", - "NW", - "W" - ], - [ - "in", - "scalerank", - 3, - 4, - 5 - ] - ], - "layout": { - "icon-image": "dot-10", - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - -0.25 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "bottom" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 0.9, - "stops": [ - [ - 5, - 12 - ], - [ - 12, - 22 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 1 - } - }, - { - "id": "place-city-lg-s", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "minzoom": 1, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "<=", - "scalerank", - 2 - ], - [ - "==", - "type", - "city" - ], - [ - "in", - "ldir", - "E", - "S", - "SE", - "SW" - ] - ], - "layout": { - "icon-image": "dot-11", - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - 0.15 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "top" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 0.9, - "stops": [ - [ - 4, - 12 - ], - [ - 10, - 22 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 1 - } - }, - { - "id": "place-city-lg-n", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "minzoom": 1, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "<=", - "scalerank", - 2 - ], - [ - "==", - "type", - "city" - ], - [ - "in", - "ldir", - "N", - "NE", - "NW", - "W" - ] - ], - "layout": { - "icon-image": "dot-11", - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - -0.25 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "bottom" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 0.9, - "stops": [ - [ - 4, - 12 - ], - [ - 10, - 22 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 0%)", - "text-opacity": 1, - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 1 - } - }, - { - "id": "marine-label-sm-ln", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 3, - "maxzoom": 10, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - ">=", - "labelrank", - 4 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 3, - 12 - ], - [ - 6, - 16 - ] - ] - }, - "symbol-spacing": { - "base": 1, - "stops": [ - [ - 4, - 100 - ], - [ - 6, - 400 - ] - ] - }, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-field": "{name_en}", - "text-letter-spacing": 0.1, - "text-max-width": 5 - }, - "paint": { - "text-color": "hsl(205, 83%, 88%)" - } - }, - { - "id": "marine-label-sm-pt", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 3, - "maxzoom": 10, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "Point" - ], - [ - ">=", - "labelrank", - 4 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 5, - "text-letter-spacing": 0.1, - "text-line-height": 1.5, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 3, - 12 - ], - [ - 6, - 16 - ] - ] - } - }, - "paint": { - "text-color": "hsl(205, 83%, 88%)" - } - }, - { - "id": "marine-label-md-ln", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 2, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "in", - "labelrank", - 2, - 3 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1.1, - "stops": [ - [ - 2, - 12 - ], - [ - 5, - 20 - ] - ] - }, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-field": "{name_en}", - "text-letter-spacing": 0.15, - "text-max-width": 5 - }, - "paint": { - "text-color": "hsl(205, 83%, 88%)" - } - }, - { - "id": "marine-label-md-pt", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 2, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "Point" - ], - [ - "in", - "labelrank", - 2, - 3 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 5, - "text-letter-spacing": 0.15, - "text-line-height": 1.5, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1.1, - "stops": [ - [ - 2, - 14 - ], - [ - 5, - 20 - ] - ] - } - }, - "paint": { - "text-color": "hsl(205, 83%, 88%)" - } - }, - { - "id": "marine-label-lg-ln", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 1, - "maxzoom": 4, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "==", - "labelrank", - 1 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 4, - "text-letter-spacing": 0.25, - "text-line-height": 1.1, - "symbol-placement": "line", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 1, - 14 - ], - [ - 4, - 30 - ] - ] - } - }, - "paint": { - "text-color": "hsl(205, 83%, 88%)" - } - }, - { - "id": "marine-label-lg-pt", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 1, - "maxzoom": 4, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "Point" - ], - [ - "==", - "labelrank", - 1 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 4, - "text-letter-spacing": 0.25, - "text-line-height": 1.5, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 1, - 14 - ], - [ - 4, - 30 - ] - ] - } - }, - "paint": { - "text-color": "hsl(205, 83%, 88%)" - } - }, - { - "id": "state-label-sm", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856151690.9143" - }, - "source": "composite", - "source-layer": "state_label", - "minzoom": 3, - "maxzoom": 9, - "interactive": true, - "filter": [ - "<", - "area", - 20000 - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 6, - 10 - ], - [ - 9, - 14 - ] - ] - }, - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{abbr}" - ], - [ - 6, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.15, - "text-max-width": 5 - }, - "paint": { - "text-opacity": 1, - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1 - } - }, - { - "id": "state-label-md", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856151690.9143" - }, - "source": "composite", - "source-layer": "state_label", - "minzoom": 3, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "<", - "area", - 80000 - ], - [ - ">=", - "area", - 20000 - ] - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 5, - 10 - ], - [ - 8, - 16 - ] - ] - }, - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{abbr}" - ], - [ - 5, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.15, - "text-max-width": 6 - }, - "paint": { - "text-opacity": 1, - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1 - } - }, - { - "id": "state-label-lg", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856151690.9143" - }, - "source": "composite", - "source-layer": "state_label", - "minzoom": 3, - "maxzoom": 7, - "interactive": true, - "filter": [ - ">=", - "area", - 80000 - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 4, - 10 - ], - [ - 7, - 18 - ] - ] - }, - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "text-padding": 1, - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{abbr}" - ], - [ - 4, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.15, - "text-max-width": 6 - }, - "paint": { - "text-opacity": 1, - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": "hsl(0, 0%, 100%)", - "text-halo-width": 1 - } - }, - { - "id": "country-label-sm", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856144497.7825" - }, - "source": "composite", - "source-layer": "country_label", - "minzoom": 1, - "maxzoom": 10, - "interactive": true, - "filter": [ - ">=", - "scalerank", - 5 - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 6, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 0.9, - "stops": [ - [ - 5, - 14 - ], - [ - 9, - 22 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": { - "base": 1, - "stops": [ - [ - 2, - "rgba(255,255,255,0.75)" - ], - [ - 3, - "hsl(0, 0%, 100%)" - ] - ] - }, - "text-halo-width": 1.25 - } - }, - { - "id": "country-label-md", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856144497.7825" - }, - "source": "composite", - "source-layer": "country_label", - "minzoom": 1, - "maxzoom": 8, - "interactive": true, - "filter": [ - "in", - "scalerank", - 3, - 4 - ], - "layout": { - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{code}" - ], - [ - 2, - "{name_en}" - ] - ] - }, - "text-max-width": 6, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 3, - 10 - ], - [ - 8, - 24 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": { - "base": 1, - "stops": [ - [ - 2, - "rgba(255,255,255,0.75)" - ], - [ - 3, - "hsl(0, 0%, 100%)" - ] - ] - }, - "text-halo-width": 1.25 - } - }, - { - "id": "country-label-lg", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856144497.7825" - }, - "source": "composite", - "source-layer": "country_label", - "minzoom": 1, - "maxzoom": 7, - "interactive": true, - "filter": [ - "in", - "scalerank", - 1, - 2 - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": { - "base": 1, - "stops": [ - [ - 0, - 5 - ], - [ - 3, - 6 - ] - ] - }, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 1, - 10 - ], - [ - 6, - 24 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 0%)", - "text-halo-color": { - "base": 1, - "stops": [ - [ - 2, - "rgba(255,255,255,0.75)" - ], - [ - 3, - "hsl(0, 0%, 100%)" - ] - ] - }, - "text-halo-width": 1.25 - } - } - ], - "created": "2016-09-21T01:16:33.105Z", - "id": "citc7ya7w00002jpa0z16cjah", - "modified": "2016-09-21T01:17:05.579Z", - "owner": "justin", - "draft": false -} \ No newline at end of file diff --git a/platform/ios/app/fr.lproj/Localizable.strings b/platform/ios/app/fr.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/gl.lproj/Localizable.strings b/platform/ios/app/gl.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/he.lproj/Localizable.strings b/platform/ios/app/he.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/hu.lproj/Localizable.strings b/platform/ios/app/hu.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/insert_access_token.sh b/platform/ios/app/insert_access_token.sh deleted file mode 100755 index 3a3a7764432..00000000000 --- a/platform/ios/app/insert_access_token.sh +++ /dev/null @@ -1,17 +0,0 @@ -if [[ "$CI" ]]; then - echo "CI environment, access token not required" - exit 0 -else - echo "Inserting Mapbox access token..." - token_file=~/.mapbox - token_file2=~/mapbox - token="$(cat $token_file 2>/dev/null || cat $token_file2 2>/dev/null)" - if [ "$token" ]; then - plutil -replace MGLMapboxAccessToken -string $token "$TARGET_BUILD_DIR/$INFOPLIST_PATH" - echo "Token insertion successful" - else - echo \'error: Missing Mapbox access token\' - echo "error: Get an access token from , then create a new file at $token_file that contains the access token." - exit 1 - fi -fi diff --git a/platform/ios/app/ja.lproj/Localizable.strings b/platform/ios/app/ja.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/ko.lproj/Localizable.strings b/platform/ios/app/ko.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/line_filter_style.json b/platform/ios/app/line_filter_style.json deleted file mode 100644 index 0685919c154..00000000000 --- a/platform/ios/app/line_filter_style.json +++ /dev/null @@ -1,8746 +0,0 @@ -{ - "version": 8, - "name": "Counties", - "metadata": { - "mapbox:autocomposite": true, - "mapbox:type": "default", - "mapbox:groups": { - "1444934828655.3389": { - "name": "Aeroways", - "collapsed": true - }, - "1444933322393.2852": { - "name": "POI labels (scalerank 1)", - "collapsed": true - }, - "1444855786460.0557": { - "name": "Roads", - "collapsed": false - }, - "1444934295202.7542": { - "name": "Admin boundaries", - "collapsed": true - }, - "1444856151690.9143": { - "name": "State labels", - "collapsed": true - }, - "1444933721429.3076": { - "name": "Road labels", - "collapsed": true - }, - "1444933358918.2366": { - "name": "POI labels (scalerank 2)", - "collapsed": true - }, - "1444933808272.805": { - "name": "Water labels", - "collapsed": true - }, - "1444933372896.5967": { - "name": "POI labels (scalerank 3)", - "collapsed": true - }, - "1444855799204.86": { - "name": "Bridges", - "collapsed": true - }, - "1444856087950.3635": { - "name": "Marine labels", - "collapsed": true - }, - "1456969573402.7817": { - "name": "Hillshading", - "collapsed": true - }, - "1444862510685.128": { - "name": "City labels", - "collapsed": true - }, - "1444855769305.6016": { - "name": "Tunnels", - "collapsed": true - }, - "1456970288113.8113": { - "name": "Landcover", - "collapsed": true - }, - "1444856144497.7825": { - "name": "Country labels", - "collapsed": true - } - } - }, - "center": [ - -87.85943678051258, - 38.70590811306201 - ], - "zoom": 5.691589021766011, - "bearing": 0, - "pitch": 0, - "sources": { - "composite": { - "url": "mapbox://mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v7,justin.7xm3smvr", - "type": "vector" - } - }, - "sprite": "mapbox://sprites/justin/citen6af800652ip1omttobg8", - "glyphs": "mapbox://fonts/justin/{fontstack}/{range}.pbf", - "layers": [ - { - "id": "background", - "type": "background", - "interactive": true, - "layout": {}, - "paint": { - "background-color": "hsl(55, 1%, 20%)" - } - }, - { - "id": "counties", - "type": "line", - "metadata": {}, - "source": "composite", - "source-layer": "county-bppyng", - "interactive": true, - "filter": [ - "in", - "$type", - "LineString", - "Point", - "Polygon" - ], - "layout": { - "visibility": "visible", - "line-join": "round" - }, - "paint": { - "line-color": "hsl(284, 77%, 49%)", - "line-blur": 0, - "line-opacity": 0.5, - "line-width": 1 - } - }, - { - "id": "landcover_wood", - "type": "fill", - "metadata": { - "mapbox:group": "1456970288113.8113" - }, - "source": "composite", - "source-layer": "landcover", - "maxzoom": 14, - "interactive": true, - "filter": [ - "==", - "class", - "wood" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(55, 1%, 20%)", - "fill-opacity": 0.1, - "fill-antialias": false - } - }, - { - "id": "landcover_scrub", - "type": "fill", - "metadata": { - "mapbox:group": "1456970288113.8113" - }, - "source": "composite", - "source-layer": "landcover", - "maxzoom": 14, - "interactive": true, - "filter": [ - "==", - "class", - "scrub" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(55, 1%, 20%)", - "fill-opacity": 0.1, - "fill-antialias": false - } - }, - { - "id": "landcover_grass", - "type": "fill", - "metadata": { - "mapbox:group": "1456970288113.8113" - }, - "source": "composite", - "source-layer": "landcover", - "maxzoom": 14, - "interactive": true, - "filter": [ - "==", - "class", - "grass" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(55, 1%, 20%)", - "fill-opacity": 0.1, - "fill-antialias": false - } - }, - { - "id": "landcover_crop", - "type": "fill", - "metadata": { - "mapbox:group": "1456970288113.8113" - }, - "source": "composite", - "source-layer": "landcover", - "maxzoom": 14, - "interactive": true, - "filter": [ - "==", - "class", - "crop" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(55, 1%, 20%)", - "fill-opacity": 0.1, - "fill-antialias": false - } - }, - { - "id": "national_park", - "type": "fill", - "source": "composite", - "source-layer": "landuse_overlay", - "interactive": true, - "filter": [ - "==", - "class", - "national_park" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(132, 2%, 20%)", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 5, - 0 - ], - [ - 6, - 0.5 - ] - ] - } - } - }, - { - "id": "parks", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "interactive": true, - "filter": [ - "==", - "class", - "park" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(132, 2%, 20%)", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 5, - 0 - ], - [ - 6, - 0.75 - ] - ] - } - } - }, - { - "id": "pitch", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "interactive": true, - "filter": [ - "==", - "class", - "pitch" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(132, 2%, 20%)" - } - }, - { - "id": "industrial", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "interactive": true, - "filter": [ - "==", - "class", - "industrial" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(0, 0%, 20%)" - } - }, - { - "id": "sand", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "interactive": true, - "filter": [ - "==", - "class", - "sand" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(132, 2%, 20%)" - } - }, - { - "id": "hillshade_highlight_bright", - "type": "fill", - "metadata": { - "mapbox:group": "1456969573402.7817" - }, - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "level", - 94 - ], - "layout": {}, - "paint": { - "fill-color": "#fff", - "fill-opacity": { - "stops": [ - [ - 14, - 0.04 - ], - [ - 16, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_highlight_med", - "type": "fill", - "metadata": { - "mapbox:group": "1456969573402.7817" - }, - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "level", - 90 - ], - "layout": {}, - "paint": { - "fill-color": "#fff", - "fill-opacity": { - "stops": [ - [ - 14, - 0.04 - ], - [ - 16, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_shadow_faint", - "type": "fill", - "metadata": { - "mapbox:group": "1456969573402.7817" - }, - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "level", - 89 - ], - "layout": {}, - "paint": { - "fill-color": "hsl(0, 0%, 35%)", - "fill-opacity": { - "stops": [ - [ - 14, - 0.033 - ], - [ - 16, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_shadow_med", - "type": "fill", - "metadata": { - "mapbox:group": "1456969573402.7817" - }, - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "level", - 78 - ], - "layout": {}, - "paint": { - "fill-color": "hsl(0, 0%, 35%)", - "fill-opacity": { - "stops": [ - [ - 14, - 0.033 - ], - [ - 16, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_shadow_dark", - "type": "fill", - "metadata": { - "mapbox:group": "1456969573402.7817" - }, - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "level", - 67 - ], - "layout": {}, - "paint": { - "fill-color": "hsl(0, 0%, 35%)", - "fill-opacity": { - "stops": [ - [ - 14, - 0.06 - ], - [ - 16, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_shadow_extreme", - "type": "fill", - "metadata": { - "mapbox:group": "1456969573402.7817" - }, - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "level", - 56 - ], - "layout": {}, - "paint": { - "fill-color": "hsl(0, 0%, 35%)", - "fill-opacity": { - "stops": [ - [ - 14, - 0.06 - ], - [ - 16, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "waterway-river-canal", - "type": "line", - "source": "composite", - "source-layer": "waterway", - "minzoom": 8, - "interactive": true, - "filter": [ - "any", - [ - "==", - "class", - "canal" - ], - [ - "==", - "class", - "river" - ] - ], - "layout": { - "line-cap": { - "base": 1, - "stops": [ - [ - 0, - "butt" - ], - [ - 11, - "round" - ] - ] - }, - "line-join": "round" - }, - "paint": { - "line-color": "hsl(185, 2%, 10%)", - "line-width": { - "base": 1.3, - "stops": [ - [ - 8.5, - 0.1 - ], - [ - 20, - 8 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 8, - 0 - ], - [ - 8.5, - 1 - ] - ] - } - } - }, - { - "id": "water shadow", - "type": "fill", - "source": "composite", - "source-layer": "water", - "interactive": true, - "layout": {}, - "paint": { - "fill-color": "hsl(185, 3%, 5%)", - "fill-translate": { - "base": 1.2, - "stops": [ - [ - 7, - [ - 0, - 0 - ] - ], - [ - 16, - [ - -1, - -1 - ] - ] - ] - }, - "fill-translate-anchor": "viewport", - "fill-opacity": 1 - } - }, - { - "id": "water", - "ref": "water shadow", - "interactive": true, - "paint": { - "fill-color": "hsl(185, 2%, 10%)" - } - }, - { - "id": "barrier_line-land-polygon", - "type": "fill", - "source": "composite", - "source-layer": "barrier_line", - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "Polygon" - ], - [ - "==", - "class", - "land" - ] - ], - "layout": {}, - "paint": { - "fill-color": "hsl(55, 1%, 20%)", - "fill-outline-color": "hsl(55, 1%, 20%)" - } - }, - { - "id": "barrier_line-land-line", - "type": "line", - "source": "composite", - "source-layer": "barrier_line", - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "==", - "class", - "land" - ] - ], - "layout": { - "line-cap": "round" - }, - "paint": { - "line-width": { - "base": 1.99, - "stops": [ - [ - 14, - 0.75 - ], - [ - 20, - 40 - ] - ] - }, - "line-color": "hsl(55, 1%, 20%)" - } - }, - { - "id": "aeroway-polygon", - "type": "fill", - "metadata": { - "mapbox:group": "1444934828655.3389" - }, - "source": "composite", - "source-layer": "aeroway", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "apron" - ], - [ - "==", - "$type", - "Polygon" - ] - ], - "layout": {}, - "paint": { - "fill-color": "hsl(0, 0%, 27%)", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 11, - 0 - ], - [ - 11.5, - 1 - ] - ] - } - } - }, - { - "id": "aeroway-runway", - "type": "line", - "metadata": { - "mapbox:group": "1444934828655.3389" - }, - "source": "composite", - "source-layer": "aeroway", - "minzoom": 9, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "==", - "type", - "runway" - ] - ], - "layout": {}, - "paint": { - "line-color": "hsl(0, 0%, 27%)", - "line-width": { - "base": 1.5, - "stops": [ - [ - 9, - 1 - ], - [ - 18, - 80 - ] - ] - } - } - }, - { - "id": "aeroway-taxiway", - "type": "line", - "metadata": { - "mapbox:group": "1444934828655.3389" - }, - "source": "composite", - "source-layer": "aeroway", - "minzoom": 9, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "==", - "type", - "taxiway" - ] - ], - "layout": {}, - "paint": { - "line-color": "hsl(0, 0%, 27%)", - "line-width": { - "base": 1.5, - "stops": [ - [ - 10, - 0.5 - ], - [ - 18, - 20 - ] - ] - } - } - }, - { - "id": "building", - "type": "fill", - "source": "composite", - "source-layer": "building", - "minzoom": 15, - "interactive": true, - "filter": [ - "==", - "underground", - "false" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(55, 1%, 17%)", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 15.5, - 0 - ], - [ - 16, - 1 - ] - ] - }, - "fill-outline-color": "hsl(55, 1%, 15%)", - "fill-antialias": true - } - }, - { - "id": "tunnel-street-low", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "street" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": { - "stops": [ - [ - 11.5, - 0 - ], - [ - 12, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "tunnel-street_limited-low", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "street_limited" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": { - "stops": [ - [ - 11.5, - 0 - ], - [ - 12, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "tunnel-service-link-track-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "trunk_link" - ], - [ - "==", - "structure", - "tunnel" - ], - [ - "in", - "class", - "link", - "service", - "track" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-street_limited-case", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-street_limited-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ], - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-street-case", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-street-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ], - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-secondary-tertiary-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "tunnel" - ], - [ - "in", - "class", - "secondary", - "tertiary" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.2, - "stops": [ - [ - 10, - 0.75 - ], - [ - 18, - 2 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ], - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)" - } - }, - { - "id": "tunnel-primary-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "primary" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ], - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)" - } - }, - { - "id": "tunnel-trunk_link-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "tunnel" - ], - [ - "==", - "type", - "trunk_link" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-motorway_link-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway_link" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-trunk-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "tunnel" - ], - [ - "==", - "type", - "trunk" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": 1, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-motorway-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": 1, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-construction", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "construction" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-join": "miter" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - }, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 0.4, - 0.8 - ] - ], - [ - 15, - [ - 0.3, - 0.6 - ] - ], - [ - 16, - [ - 0.2, - 0.3 - ] - ], - [ - 17, - [ - 0.2, - 0.25 - ] - ], - [ - 18, - [ - 0.15, - 0.15 - ] - ] - ] - } - } - }, - { - "id": "tunnel-path", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "steps" - ], - [ - "==", - "class", - "path" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 1, - 0.5 - ] - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 14, - 0 - ], - [ - 14.25, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-steps", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "structure", - "tunnel" - ], - [ - "==", - "type", - "steps" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 0.3, - 0.3 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 14, - 0 - ], - [ - 14.25, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-trunk_link", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-trunk_link-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": 1, - "line-dasharray": [ - 1, - 0 - ] - } - }, - { - "id": "tunnel-motorway_link", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-motorway_link-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": 1, - "line-dasharray": [ - 1, - 0 - ] - } - }, - { - "id": "tunnel-pedestrian", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "class", - "pedestrian" - ], - [ - "==", - "structure", - "tunnel" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": 1, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.5, - 0.4 - ] - ], - [ - 16, - [ - 1, - 0.2 - ] - ] - ] - } - } - }, - { - "id": "tunnel-service-link-track", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-service-link-track-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-dasharray": [ - 1, - 0 - ] - } - }, - { - "id": "tunnel-street_limited", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-street_limited-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-street", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-street-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-secondary-tertiary", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-secondary-tertiary-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": 1, - "line-dasharray": [ - 1, - 0 - ], - "line-blur": 0 - } - }, - { - "id": "tunnel-primary", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-primary-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": 1, - "line-dasharray": [ - 1, - 0 - ], - "line-blur": 0 - } - }, - { - "id": "tunnel-trunk", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "trunk" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)" - } - }, - { - "id": "tunnel-motorway", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-motorway-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-dasharray": [ - 1, - 0 - ], - "line-opacity": 1, - "line-color": "hsl(185, 2%, 15%)", - "line-blur": 0 - } - }, - { - "id": "road-pedestrian-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 12, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "class", - "pedestrian" - ], - [ - "==", - "structure", - "none" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 2 - ], - [ - 18, - 14.5 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": 0, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.9, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-street-low", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "class", - "street" - ], - [ - "==", - "structure", - "none" - ] - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "stops": [ - [ - 11, - 0 - ], - [ - 11.25, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "road-street_limited-low", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "class", - "street_limited" - ], - [ - "==", - "structure", - "none" - ] - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "stops": [ - [ - 11, - 0 - ], - [ - 11.25, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "road-service-link-track-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "trunk_link" - ], - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "in", - "class", - "link", - "service", - "track" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.9, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-street_limited-case", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-street_limited-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.9, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-street-case", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-street-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.9, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-main-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "in", - "class", - "secondary", - "tertiary" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.2, - "stops": [ - [ - 10, - 0.75 - ], - [ - 18, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 6, - 0 - ], - [ - 7, - 0.4 - ], - [ - 9, - 0.5 - ], - [ - 10, - 1 - ] - ] - } - } - }, - { - "id": "road-primary-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "==", - "class", - "primary" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 6, - 0 - ], - [ - 7, - 0.4 - ], - [ - 9, - 0.5 - ], - [ - 10, - 1 - ] - ] - } - } - }, - { - "id": "road-motorway_link-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 10, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "==", - "class", - "motorway_link" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 6, - 0 - ], - [ - 7, - 0.4 - ], - [ - 9, - 0.5 - ], - [ - 10, - 1 - ] - ] - } - } - }, - { - "id": "road-trunk_link-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "==", - "type", - "trunk_link" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 6, - 0 - ], - [ - 7, - 0.4 - ], - [ - 9, - 0.5 - ], - [ - 10, - 1 - ] - ] - } - } - }, - { - "id": "road-trunk-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 5, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "==", - "class", - "trunk" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 7, - 0.5 - ], - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.5 - ], - [ - 9, - 1.4 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 6, - 0 - ], - [ - 6.1, - 1 - ] - ] - } - } - }, - { - "id": "road-motorway-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "==", - "class", - "motorway" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 7, - 0.5 - ], - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": 1 - } - }, - { - "id": "road-construction", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "class", - "construction" - ], - [ - "==", - "structure", - "none" - ] - ] - ], - "layout": { - "line-join": "miter" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - }, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 0.4, - 0.8 - ] - ], - [ - 15, - [ - 0.3, - 0.6 - ] - ], - [ - 16, - [ - 0.2, - 0.3 - ] - ], - [ - 17, - [ - 0.2, - 0.25 - ] - ], - [ - 18, - [ - 0.15, - 0.15 - ] - ] - ] - } - } - }, - { - "id": "road-sidewalks", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 16, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "in", - "type", - "crossing", - "sidewalk" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 1, - 0.5 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 16, - 0 - ], - [ - 16.25, - 1 - ] - ] - } - } - }, - { - "id": "road-path", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "!in", - "type", - "crossing", - "sidewalk", - "steps" - ], - [ - "==", - "class", - "path" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 1, - 0.5 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 14, - 0 - ], - [ - 14.25, - 1 - ] - ] - } - } - }, - { - "id": "road-steps", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "==", - "type", - "steps" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 0.3, - 0.3 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 14, - 0 - ], - [ - 14.25, - 1 - ] - ] - } - } - }, - { - "id": "road-trunk_link", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-trunk_link-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": 1 - } - }, - { - "id": "road-motorway_link", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-motorway_link-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": 1 - } - }, - { - "id": "road-pedestrian", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-pedestrian-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": 1, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.5, - 0.4 - ] - ], - [ - 16, - [ - 1, - 0.2 - ] - ] - ] - } - } - }, - { - "id": "road-service-link-track", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "trunk_link" - ], - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "in", - "class", - "link", - "service", - "track" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "road-street_limited", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-street_limited-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-street", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-street-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-secondary-tertiary", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-main-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1.2, - "stops": [ - [ - 5, - 0 - ], - [ - 5.5, - 1 - ] - ] - } - } - }, - { - "id": "road-primary", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-primary-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1.2, - "stops": [ - [ - 5, - 0 - ], - [ - 5.5, - 1 - ] - ] - } - } - }, - { - "id": "road-trunk", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-trunk-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.5 - ], - [ - 9, - 1.4 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": 1 - } - }, - { - "id": "road-motorway", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-motorway-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": 1 - } - }, - { - "id": "road-rail", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "in", - "class", - "major_rail", - "minor_rail" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-color": "hsl(0, 0%, 17%)", - "line-width": { - "base": 1, - "stops": [ - [ - 14, - 0.75 - ], - [ - 20, - 1 - ] - ] - } - } - }, - { - "id": "bridge-pedestrian-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "class", - "pedestrian" - ], - [ - "==", - "structure", - "bridge" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 2 - ], - [ - 18, - 14.5 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": 0, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "bridge-street-low", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "street" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "stops": [ - [ - 11.5, - 0 - ], - [ - 12, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "bridge-street_limited-low", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "street_limited" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "stops": [ - [ - 11.5, - 0 - ], - [ - 12, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "bridge-service-link-track-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "trunk_link" - ], - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "link", - "service", - "track" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - } - } - }, - { - "id": "bridge-street_limited-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "street_limited" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - } - } - }, - { - "id": "bridge-street-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "street" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - }, - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - } - } - }, - { - "id": "bridge-secondary-tertiary-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "secondary", - "tertiary" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.2, - "stops": [ - [ - 10, - 0.75 - ], - [ - 18, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-translate": [ - 0, - 0 - ] - } - }, - { - "id": "bridge-primary-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "primary" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-translate": [ - 0, - 0 - ] - } - }, - { - "id": "bridge-trunk_link-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "trunk_link" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 10.99, - 0 - ], - [ - 11, - 1 - ] - ] - } - } - }, - { - "id": "bridge-motorway_link-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "<=", - "layer", - 1 - ], - [ - "==", - "class", - "motorway_link" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": 1 - } - }, - { - "id": "bridge-trunk-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "trunk" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - } - } - }, - { - "id": "bridge-motorway-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 7, - 0.5 - ], - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - } - } - }, - { - "id": "bridge-construction", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "construction" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "miter" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - }, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 0.4, - 0.8 - ] - ], - [ - 15, - [ - 0.3, - 0.6 - ] - ], - [ - 16, - [ - 0.2, - 0.3 - ] - ], - [ - 17, - [ - 0.2, - 0.25 - ] - ], - [ - 18, - [ - 0.15, - 0.15 - ] - ] - ] - } - } - }, - { - "id": "bridge-path", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "steps" - ], - [ - "==", - "class", - "path" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 1, - 0.5 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 14, - 0 - ], - [ - 14.25, - 1 - ] - ] - } - } - }, - { - "id": "bridge-steps", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "steps" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 0.3, - 0.3 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 14, - 0 - ], - [ - 14.25, - 1 - ] - ] - } - } - }, - { - "id": "bridge-trunk_link", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "layer", - 2, - 3, - 4, - 5 - ], - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "trunk_link" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-motorway_link", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "layer", - 2, - 3, - 4, - 5 - ], - [ - "==", - "class", - "motorway_link" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-pedestrian", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "ref": "bridge-pedestrian-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": 1, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.5, - 0.4 - ] - ], - [ - 16, - [ - 1, - 0.2 - ] - ] - ] - } - } - }, - { - "id": "bridge-service-link-track", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "trunk_link" - ], - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "link", - "service", - "track" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-street_limited", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "ref": "bridge-street_limited-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "bridge-street", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "ref": "bridge-street-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "bridge-secondary-tertiary", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "type", - "secondary", - "tertiary" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1.2, - "stops": [ - [ - 5, - 0 - ], - [ - 5.5, - 1 - ] - ] - } - } - }, - { - "id": "bridge-primary", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "primary" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1.2, - "stops": [ - [ - 5, - 0 - ], - [ - 5.5, - 1 - ] - ] - } - } - }, - { - "id": "bridge-trunk", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "layer", - 2, - 3, - 4, - 5 - ], - [ - "==", - "class", - "trunk" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-motorway", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "layer", - 2, - 3, - 4, - 5 - ], - [ - "==", - "class", - "motorway" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-rail", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "major_rail", - "minor_rail" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-color": "hsl(0, 0%, 17%)", - "line-width": { - "base": 1, - "stops": [ - [ - 14, - 0.75 - ], - [ - 20, - 1 - ] - ] - } - } - }, - { - "id": "bridge-trunk_link-2-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "trunk_link" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 10.99, - 0 - ], - [ - 11, - 1 - ] - ] - } - } - }, - { - "id": "bridge-motorway_link-2-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway_link" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": 1 - } - }, - { - "id": "bridge-trunk-2-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "trunk" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - } - } - }, - { - "id": "bridge-motorway-2-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 7, - 0.5 - ], - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - } - } - }, - { - "id": "bridge-trunk_link-2", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "trunk_link" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-motorway_link-2", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway_link" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-trunk-2", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "trunk" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-motorway-2", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "admin-3-4-boundaries-bg", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "interactive": true, - "filter": [ - "all", - [ - "==", - "maritime", - 0 - ], - [ - ">=", - "admin_level", - 3 - ] - ], - "layout": { - "line-join": "bevel" - }, - "paint": { - "line-color": "hsl(0, 0%, 10%)", - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 3.5 - ], - [ - 10, - 8 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 4, - 0 - ], - [ - 6, - 0.75 - ] - ] - }, - "line-dasharray": [ - 1, - 0 - ], - "line-translate": [ - 0, - 0 - ], - "line-blur": { - "base": 1, - "stops": [ - [ - 3, - 0 - ], - [ - 8, - 3 - ] - ] - } - } - }, - { - "id": "admin-2-boundaries-bg", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "minzoom": 1, - "interactive": true, - "filter": [ - "all", - [ - "==", - "admin_level", - 2 - ], - [ - "==", - "maritime", - 0 - ] - ], - "layout": { - "line-join": "miter" - }, - "paint": { - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 3.5 - ], - [ - 10, - 10 - ] - ] - }, - "line-color": "hsl(0, 0%, 10%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 3, - 0 - ], - [ - 4, - 0.5 - ] - ] - }, - "line-translate": [ - 0, - 0 - ], - "line-blur": { - "base": 1, - "stops": [ - [ - 3, - 0 - ], - [ - 10, - 2 - ] - ] - } - } - }, - { - "id": "admin-3-4-boundaries", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "interactive": true, - "filter": [ - "all", - [ - "==", - "maritime", - 0 - ], - [ - ">=", - "admin_level", - 3 - ] - ], - "layout": { - "line-join": "round", - "line-cap": "round" - }, - "paint": { - "line-dasharray": { - "base": 1, - "stops": [ - [ - 6, - [ - 2, - 0 - ] - ], - [ - 7, - [ - 2, - 2, - 6, - 2 - ] - ] - ] - }, - "line-width": { - "base": 1, - "stops": [ - [ - 7, - 0.75 - ], - [ - 12, - 1.5 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 2, - 0 - ], - [ - 3, - 1 - ] - ] - }, - "line-color": { - "base": 1, - "stops": [ - [ - 4, - "hsl(0, 0%, 27%)" - ], - [ - 5, - "hsl(0, 0%, 35%)" - ] - ] - } - } - }, - { - "id": "admin-2-boundaries", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "minzoom": 1, - "interactive": true, - "filter": [ - "all", - [ - "==", - "admin_level", - 2 - ], - [ - "==", - "disputed", - 0 - ], - [ - "==", - "maritime", - 0 - ] - ], - "layout": { - "line-join": "round", - "line-cap": "round" - }, - "paint": { - "line-color": "hsl(0, 0%, 43%)", - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 0.5 - ], - [ - 10, - 2 - ] - ] - } - } - }, - { - "id": "admin-2-boundaries-dispute", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "minzoom": 1, - "interactive": true, - "filter": [ - "all", - [ - "==", - "admin_level", - 2 - ], - [ - "==", - "disputed", - 1 - ], - [ - "==", - "maritime", - 0 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-dasharray": [ - 1.5, - 1.5 - ], - "line-color": "hsl(0, 0%, 14%)", - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 0.5 - ], - [ - 10, - 2 - ] - ] - } - } - }, - { - "id": "waterway-label", - "type": "symbol", - "source": "composite", - "source-layer": "waterway_label", - "minzoom": 12, - "interactive": true, - "filter": [ - "in", - "class", - "canal", - "river" - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-max-angle": 30, - "text-size": { - "base": 1, - "stops": [ - [ - 13, - 12 - ], - [ - 18, - 16 - ] - ] - } - }, - "paint": { - "text-halo-width": 0, - "text-halo-blur": 0, - "text-color": "hsl(0, 0%, 32%)" - } - }, - { - "id": "poi-scalerank3", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933372896.5967" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ], - [ - "==", - "scalerank", - 3 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 1, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(0, 0%, 60%)", - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "poi-parks-scalerank3", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933372896.5967" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "==", - "scalerank", - 3 - ], - [ - "in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 12 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-halo-blur": 0, - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-color": { - "base": 1, - "stops": [ - [ - 7, - "hsl(0, 0%, 47%)" - ], - [ - 9, - "hsl(0, 0%, 73%)" - ] - ] - } - } - }, - { - "id": "road-label-small", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933721429.3076" - }, - "source": "composite", - "source-layer": "road_label", - "minzoom": 15, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "class", - "", - "ferry", - "link", - "motorway", - "path", - "pedestrian", - "primary", - "secondary", - "street", - "street_limited", - "tertiary", - "track", - "trunk" - ], - [ - "==", - "$type", - "LineString" - ] - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 15, - 10 - ], - [ - 20, - 13 - ] - ] - }, - "text-max-angle": 30, - "symbol-spacing": 500, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-padding": 1, - "text-rotation-alignment": "map", - "text-field": "{name_en}", - "text-letter-spacing": 0.01 - }, - "paint": { - "text-color": "hsl(0, 0%, 78%)", - "text-halo-color": "#212121", - "text-halo-width": 1.25, - "text-halo-blur": 0 - } - }, - { - "id": "road-label-medium", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933721429.3076" - }, - "source": "composite", - "source-layer": "road_label", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "in", - "class", - "", - "link", - "pedestrian", - "street", - "street_limited" - ] - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 11, - 10 - ], - [ - 20, - 14 - ] - ] - }, - "text-max-angle": 30, - "symbol-spacing": 500, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-padding": 1, - "text-rotation-alignment": "map", - "text-field": "{name_en}", - "text-letter-spacing": 0.01 - }, - "paint": { - "text-color": "hsl(0, 0%, 78%)", - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "road-label-large", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933721429.3076" - }, - "source": "composite", - "source-layer": "road_label", - "minzoom": 12, - "interactive": true, - "filter": [ - "in", - "class", - "motorway", - "primary", - "secondary", - "tertiary", - "trunk" - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 9, - 10 - ], - [ - 20, - 16 - ] - ] - }, - "text-max-angle": 30, - "symbol-spacing": 400, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-padding": 1, - "text-rotation-alignment": "map", - "text-field": "{name_en}", - "text-letter-spacing": 0.01 - }, - "paint": { - "text-color": "hsl(0, 0%, 78%)", - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "poi-scalerank2", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933358918.2366" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ], - [ - "==", - "scalerank", - 2 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 14, - 11 - ], - [ - 20, - 12 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0.65 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(0, 0%, 60%)", - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "poi-parks-scalerank2", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933358918.2366" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "==", - "scalerank", - 2 - ], - [ - "in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 14, - 11 - ], - [ - 20, - 12 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": { - "base": 1, - "stops": [ - [ - 7, - "hsl(0, 0%, 47%)" - ], - [ - 9, - "hsl(0, 0%, 73%)" - ] - ] - }, - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "water-label", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933808272.805" - }, - "source": "composite", - "source-layer": "water_label", - "minzoom": 5, - "interactive": true, - "filter": [ - ">", - "area", - 10000 - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 13, - 13 - ], - [ - 18, - 18 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0 - } - }, - { - "id": "poi-parks-scalerank1", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933322393.2852" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "<=", - "scalerank", - 1 - ], - [ - "in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 12 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": { - "base": 1, - "stops": [ - [ - 7, - "hsl(0, 0%, 47%)" - ], - [ - 9, - "hsl(0, 0%, 73%)" - ] - ] - }, - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "poi-scalerank1", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933322393.2852" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ], - [ - "<=", - "scalerank", - 1 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 12 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(0, 0%, 60%)", - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "airport-label", - "type": "symbol", - "source": "composite", - "source-layer": "airport_label", - "minzoom": 10, - "interactive": true, - "filter": [ - "<=", - "scalerank", - 2 - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 12 - ], - [ - 18, - 18 - ] - ] - }, - "icon-image": { - "stops": [ - [ - 12, - "{maki}-11" - ], - [ - 13, - "{maki}-15" - ] - ] - }, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0.75 - ], - "text-anchor": "top", - "text-field": { - "stops": [ - [ - 11, - "{ref}" - ], - [ - 14, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.01, - "text-max-width": 9 - }, - "paint": { - "text-color": "hsl(0, 0%, 85%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 0.5, - "text-halo-blur": 0 - } - }, - { - "id": "place-islets-archipelago-aboriginal", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "maxzoom": 16, - "interactive": true, - "filter": [ - "in", - "type", - "aboriginal_lands", - "archipelago", - "islet" - ], - "layout": { - "text-line-height": 1.2, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 16 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(0, 0%, 85%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "place-neighbourhood", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 12, - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "type", - "neighbourhood" - ], - "layout": { - "text-field": "{name_en}", - "text-transform": "uppercase", - "text-letter-spacing": 0.1, - "text-max-width": 7, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-padding": 3, - "text-size": { - "base": 1, - "stops": [ - [ - 12, - 11 - ], - [ - 16, - 16 - ] - ] - } - }, - "paint": { - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-color": "hsl(0, 0%, 70%)", - "text-halo-blur": 0 - } - }, - { - "id": "place-suburb", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 11, - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "type", - "suburb" - ], - "layout": { - "text-field": "{name_en}", - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-letter-spacing": 0.15, - "text-max-width": 7, - "text-padding": 3, - "text-size": { - "base": 1, - "stops": [ - [ - 11, - 11 - ], - [ - 15, - 18 - ] - ] - } - }, - "paint": { - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-color": "hsl(0, 0%, 70%)", - "text-halo-blur": 0 - } - }, - { - "id": "place-hamlet", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 10, - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "type", - "hamlet" - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 12, - 11.5 - ], - [ - 15, - 16 - ] - ] - } - }, - "paint": { - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1.25, - "text-color": "hsl(0, 0%, 85%)", - "text-halo-blur": 0 - } - }, - { - "id": "place-village", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 11, - "maxzoom": 15, - "interactive": true, - "filter": [ - "==", - "type", - "village" - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11.5 - ], - [ - 16, - 18 - ] - ] - } - }, - "paint": { - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1.25, - "text-color": { - "base": 1, - "stops": [ - [ - 10, - "hsl(0, 0%, 75%)" - ], - [ - 11, - "hsl(0, 0%, 85%)" - ] - ] - }, - "text-halo-blur": 0 - } - }, - { - "id": "place-town", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 7, - "maxzoom": 15, - "interactive": true, - "filter": [ - "==", - "type", - "town" - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 7, - 11.5 - ], - [ - 15, - 20 - ] - ] - }, - "text-font": { - "base": 1, - "stops": [ - [ - 11, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 12, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-max-width": 7 - }, - "paint": { - "text-color": { - "base": 1, - "stops": [ - [ - 10, - "hsl(0, 0%, 75%)" - ], - [ - 11, - "hsl(0, 0%, 85%)" - ] - ] - }, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1.25, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 0 - } - }, - { - "id": "place-islands", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "type", - "island" - ], - "layout": { - "text-line-height": 1.2, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 16 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 7 - }, - "paint": { - "text-color": "hsl(0, 0%, 85%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "place-city-sm", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "scalerank", - 0, - 1, - 2, - 3, - 4, - 5 - ], - [ - "==", - "type", - "city" - ] - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 6, - 12 - ], - [ - 14, - 22 - ] - ] - }, - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-max-width": 7 - }, - "paint": { - "text-color": "hsl(0, 0%, 90%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1.25, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 0 - } - }, - { - "id": "place-city-md-s", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "==", - "type", - "city" - ], - [ - "in", - "ldir", - "E", - "S", - "SE", - "SW" - ], - [ - "in", - "scalerank", - 3, - 4, - 5 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-size": { - "base": 0.9, - "stops": [ - [ - 5, - 12 - ], - [ - 12, - 22 - ] - ] - }, - "text-anchor": "top", - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - 0.1 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "icon-image": "dot-10" - }, - "paint": { - "text-halo-width": 1, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-color": "hsl(0, 0%, 90%)", - "text-halo-blur": 0, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - } - } - }, - { - "id": "place-city-md-n", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "==", - "type", - "city" - ], - [ - "in", - "ldir", - "N", - "NE", - "NW", - "W" - ], - [ - "in", - "scalerank", - 3, - 4, - 5 - ] - ], - "layout": { - "text-size": { - "base": 0.9, - "stops": [ - [ - 5, - 12 - ], - [ - 12, - 22 - ] - ] - }, - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - -0.25 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": "bottom", - "text-field": "{name_en}", - "text-max-width": 7, - "icon-image": "dot-10" - }, - "paint": { - "text-color": "hsl(0, 0%, 90%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 0 - } - }, - { - "id": "place-city-lg-s", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "minzoom": 1, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "<=", - "scalerank", - 2 - ], - [ - "==", - "type", - "city" - ], - [ - "in", - "ldir", - "E", - "S", - "SE", - "SW" - ] - ], - "layout": { - "icon-image": "dot-11", - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - 0.15 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "top" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 0.9, - "stops": [ - [ - 4, - 12 - ], - [ - 10, - 22 - ] - ] - } - }, - "paint": { - "text-color": { - "base": 1, - "stops": [ - [ - 7, - "hsl(0, 0%, 95%)" - ], - [ - 9, - "hsl(0, 0%, 90%)" - ] - ] - }, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 0 - } - }, - { - "id": "place-city-lg-n", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "minzoom": 1, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "<=", - "scalerank", - 2 - ], - [ - "==", - "type", - "city" - ], - [ - "in", - "ldir", - "N", - "NE", - "NW", - "W" - ] - ], - "layout": { - "icon-image": "dot-11", - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - -0.25 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "bottom" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 0.9, - "stops": [ - [ - 4, - 12 - ], - [ - 10, - 22 - ] - ] - } - }, - "paint": { - "text-color": { - "base": 1, - "stops": [ - [ - 7, - "hsl(0, 0%, 95%)" - ], - [ - 9, - "hsl(0, 0%, 90%)" - ] - ] - }, - "text-opacity": 1, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 0 - } - }, - { - "id": "marine-label-sm-ln", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 3, - "maxzoom": 10, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - ">=", - "labelrank", - 4 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 3, - 12 - ], - [ - 6, - 16 - ] - ] - }, - "symbol-spacing": { - "base": 1, - "stops": [ - [ - 4, - 100 - ], - [ - 6, - 400 - ] - ] - }, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-field": "{name_en}", - "text-letter-spacing": 0.1, - "text-max-width": 5 - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)" - } - }, - { - "id": "marine-label-sm-pt", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 3, - "maxzoom": 10, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "Point" - ], - [ - ">=", - "labelrank", - 4 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 5, - "text-letter-spacing": 0.1, - "text-line-height": 1.5, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 3, - 12 - ], - [ - 6, - 16 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)" - } - }, - { - "id": "marine-label-md-ln", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 2, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "in", - "labelrank", - 2, - 3 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1.1, - "stops": [ - [ - 2, - 12 - ], - [ - 5, - 20 - ] - ] - }, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-field": "{name_en}", - "text-letter-spacing": 0.15, - "text-max-width": 5 - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)" - } - }, - { - "id": "marine-label-md-pt", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 2, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "Point" - ], - [ - "in", - "labelrank", - 2, - 3 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 5, - "text-letter-spacing": 0.15, - "text-line-height": 1.5, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1.1, - "stops": [ - [ - 2, - 14 - ], - [ - 5, - 20 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)" - } - }, - { - "id": "marine-label-lg-ln", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 1, - "maxzoom": 4, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "==", - "labelrank", - 1 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 4, - "text-letter-spacing": 0.25, - "text-line-height": 1.1, - "symbol-placement": "line", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 1, - 14 - ], - [ - 4, - 30 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)" - } - }, - { - "id": "marine-label-lg-pt", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 1, - "maxzoom": 4, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "Point" - ], - [ - "==", - "labelrank", - 1 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 4, - "text-letter-spacing": 0.25, - "text-line-height": 1.5, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 1, - 14 - ], - [ - 4, - 30 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)" - } - }, - { - "id": "state-label-sm", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856151690.9143" - }, - "source": "composite", - "source-layer": "state_label", - "minzoom": 3, - "maxzoom": 9, - "interactive": true, - "filter": [ - "<", - "area", - 20000 - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 6, - 10 - ], - [ - 9, - 14 - ] - ] - }, - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{abbr}" - ], - [ - 6, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.15, - "text-max-width": 5 - }, - "paint": { - "text-opacity": 1, - "text-color": "hsl(0, 0%, 50%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "state-label-md", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856151690.9143" - }, - "source": "composite", - "source-layer": "state_label", - "minzoom": 3, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "<", - "area", - 80000 - ], - [ - ">=", - "area", - 20000 - ] - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 5, - 10 - ], - [ - 8, - 16 - ] - ] - }, - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{abbr}" - ], - [ - 5, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.15, - "text-max-width": 6 - }, - "paint": { - "text-opacity": 1, - "text-color": "hsl(0, 0%, 50%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "state-label-lg", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856151690.9143" - }, - "source": "composite", - "source-layer": "state_label", - "minzoom": 3, - "maxzoom": 7, - "interactive": true, - "filter": [ - ">=", - "area", - 80000 - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 4, - 10 - ], - [ - 7, - 18 - ] - ] - }, - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "text-padding": 1, - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{abbr}" - ], - [ - 4, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.15, - "text-max-width": 6 - }, - "paint": { - "text-opacity": 1, - "text-color": "hsl(0, 0%, 50%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "country-label-sm", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856144497.7825" - }, - "source": "composite", - "source-layer": "country_label", - "minzoom": 1, - "maxzoom": 10, - "interactive": true, - "filter": [ - ">=", - "scalerank", - 5 - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 6, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 0.9, - "stops": [ - [ - 5, - 14 - ], - [ - 9, - 22 - ] - ] - } - }, - "paint": { - "text-halo-width": 1.25, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-color": "hsl(0, 0%, 45%)", - "text-halo-blur": 0 - } - }, - { - "id": "country-label-md", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856144497.7825" - }, - "source": "composite", - "source-layer": "country_label", - "minzoom": 1, - "maxzoom": 8, - "interactive": true, - "filter": [ - "in", - "scalerank", - 3, - 4 - ], - "layout": { - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{code}" - ], - [ - 2, - "{name_en}" - ] - ] - }, - "text-max-width": 6, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 3, - 10 - ], - [ - 8, - 24 - ] - ] - } - }, - "paint": { - "text-halo-width": 1.25, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-color": "hsl(0, 0%, 45%)", - "text-halo-blur": 0 - } - }, - { - "id": "country-label-lg", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856144497.7825" - }, - "source": "composite", - "source-layer": "country_label", - "minzoom": 1, - "maxzoom": 7, - "interactive": true, - "filter": [ - "in", - "scalerank", - 1, - 2 - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": { - "base": 1, - "stops": [ - [ - 0, - 5 - ], - [ - 3, - 6 - ] - ] - }, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 1, - 10 - ], - [ - 6, - 24 - ] - ] - } - }, - "paint": { - "text-halo-width": 1.25, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-color": "hsl(0, 0%, 45%)", - "text-halo-blur": 0 - } - } - ], - "created": "2016-09-22T17:58:12.692Z", - "id": "citen6af800652ip1omttobg8", - "modified": "2016-09-22T19:19:49.611Z", - "owner": "justin", - "draft": false -} \ No newline at end of file diff --git a/platform/ios/app/lt.lproj/Localizable.strings b/platform/ios/app/lt.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/main.m b/platform/ios/app/main.m deleted file mode 100644 index 954584f141a..00000000000 --- a/platform/ios/app/main.m +++ /dev/null @@ -1,10 +0,0 @@ -#import - -#import "MBXAppDelegate.h" - -int main(int argc, char * argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([MBXAppDelegate class])); - } -} diff --git a/platform/ios/app/missing_icon.json b/platform/ios/app/missing_icon.json deleted file mode 100644 index 5da41259904..00000000000 --- a/platform/ios/app/missing_icon.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "version": 8, - "name": "Mapbox Streets", - "sprite": "mapbox://sprites/mapbox/streets-v8", - "glyphs": "mapbox://fonts/mapbox/{fontstack}/{range}.pbf", - "sources": { - "point": { - "type": "geojson", - "data": { - "type": "Feature", - "properties": {}, - "geometry": { - "type": "Point", - "coordinates": [0, 0] - } - } - } - }, - "layers": [{ - "id": "bg", - "type": "background", - "paint": { - "background-color": "#f00" - } - }, { - "id": "point", - "type": "circle", - "source": "point", - "paint": { - "circle-radius": 100 - } - }, { - "id": "icon", - "type": "symbol", - "source": "point", - "layout": { - "icon-image": "missing-icon" - } - }] -} diff --git a/platform/ios/app/nl.lproj/Localizable.strings b/platform/ios/app/nl.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/numeric_filter_style.json b/platform/ios/app/numeric_filter_style.json deleted file mode 100644 index 71a57e91155..00000000000 --- a/platform/ios/app/numeric_filter_style.json +++ /dev/null @@ -1,8734 +0,0 @@ -{ - "version": 8, - "name": "Hospital Referral Regions", - "metadata": { - "mapbox:autocomposite": true, - "mapbox:type": "default", - "mapbox:groups": { - "1444934828655.3389": { - "name": "Aeroways", - "collapsed": true - }, - "1444933322393.2852": { - "name": "POI labels (scalerank 1)", - "collapsed": true - }, - "1444855786460.0557": { - "name": "Roads", - "collapsed": true - }, - "1444934295202.7542": { - "name": "Admin boundaries", - "collapsed": true - }, - "1444856151690.9143": { - "name": "State labels", - "collapsed": true - }, - "1444933721429.3076": { - "name": "Road labels", - "collapsed": true - }, - "1444933358918.2366": { - "name": "POI labels (scalerank 2)", - "collapsed": true - }, - "1444933808272.805": { - "name": "Water labels", - "collapsed": true - }, - "1444933372896.5967": { - "name": "POI labels (scalerank 3)", - "collapsed": true - }, - "1444855799204.86": { - "name": "Bridges", - "collapsed": true - }, - "1444856087950.3635": { - "name": "Marine labels", - "collapsed": true - }, - "1456969573402.7817": { - "name": "Hillshading", - "collapsed": true - }, - "1444862510685.128": { - "name": "City labels", - "collapsed": true - }, - "1444855769305.6016": { - "name": "Tunnels", - "collapsed": true - }, - "1456970288113.8113": { - "name": "Landcover", - "collapsed": true - }, - "1444856144497.7825": { - "name": "Country labels", - "collapsed": true - } - } - }, - "center": [ - -95.84116499999999, - 36.96350799999996 - ], - "zoom": 4, - "bearing": 0, - "pitch": 0, - "sources": { - "composite": { - "url": "mapbox://mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v7,justin.do53bu8c", - "type": "vector" - } - }, - "sprite": "mapbox://sprites/justin/citerrmcg00662hogpcv4o3w8", - "glyphs": "mapbox://fonts/justin/{fontstack}/{range}.pbf", - "layers": [ - { - "id": "background", - "type": "background", - "interactive": true, - "layout": {}, - "paint": { - "background-color": "hsl(55, 1%, 20%)" - } - }, - { - "id": "regions", - "type": "fill", - "source": "composite", - "source-layer": "hrr-9jhrxz", - "interactive": true, - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-opacity": 0 - } - }, - { - "id": "landcover_wood", - "type": "fill", - "metadata": { - "mapbox:group": "1456970288113.8113" - }, - "source": "composite", - "source-layer": "landcover", - "maxzoom": 14, - "interactive": true, - "filter": [ - "==", - "class", - "wood" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(55, 1%, 20%)", - "fill-opacity": 0.1, - "fill-antialias": false - } - }, - { - "id": "landcover_scrub", - "type": "fill", - "metadata": { - "mapbox:group": "1456970288113.8113" - }, - "source": "composite", - "source-layer": "landcover", - "maxzoom": 14, - "interactive": true, - "filter": [ - "==", - "class", - "scrub" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(55, 1%, 20%)", - "fill-opacity": 0.1, - "fill-antialias": false - } - }, - { - "id": "landcover_grass", - "type": "fill", - "metadata": { - "mapbox:group": "1456970288113.8113" - }, - "source": "composite", - "source-layer": "landcover", - "maxzoom": 14, - "interactive": true, - "filter": [ - "==", - "class", - "grass" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(55, 1%, 20%)", - "fill-opacity": 0.1, - "fill-antialias": false - } - }, - { - "id": "landcover_crop", - "type": "fill", - "metadata": { - "mapbox:group": "1456970288113.8113" - }, - "source": "composite", - "source-layer": "landcover", - "maxzoom": 14, - "interactive": true, - "filter": [ - "==", - "class", - "crop" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(55, 1%, 20%)", - "fill-opacity": 0.1, - "fill-antialias": false - } - }, - { - "id": "national_park", - "type": "fill", - "source": "composite", - "source-layer": "landuse_overlay", - "interactive": true, - "filter": [ - "==", - "class", - "national_park" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(132, 2%, 20%)", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 5, - 0 - ], - [ - 6, - 0.5 - ] - ] - } - } - }, - { - "id": "parks", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "interactive": true, - "filter": [ - "==", - "class", - "park" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(132, 2%, 20%)", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 5, - 0 - ], - [ - 6, - 0.75 - ] - ] - } - } - }, - { - "id": "pitch", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "interactive": true, - "filter": [ - "==", - "class", - "pitch" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(132, 2%, 20%)" - } - }, - { - "id": "industrial", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "interactive": true, - "filter": [ - "==", - "class", - "industrial" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(0, 0%, 20%)" - } - }, - { - "id": "sand", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "interactive": true, - "filter": [ - "==", - "class", - "sand" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(132, 2%, 20%)" - } - }, - { - "id": "hillshade_highlight_bright", - "type": "fill", - "metadata": { - "mapbox:group": "1456969573402.7817" - }, - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "level", - 94 - ], - "layout": {}, - "paint": { - "fill-color": "#fff", - "fill-opacity": { - "stops": [ - [ - 14, - 0.04 - ], - [ - 16, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_highlight_med", - "type": "fill", - "metadata": { - "mapbox:group": "1456969573402.7817" - }, - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "level", - 90 - ], - "layout": {}, - "paint": { - "fill-color": "#fff", - "fill-opacity": { - "stops": [ - [ - 14, - 0.04 - ], - [ - 16, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_shadow_faint", - "type": "fill", - "metadata": { - "mapbox:group": "1456969573402.7817" - }, - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "level", - 89 - ], - "layout": {}, - "paint": { - "fill-color": "hsl(0, 0%, 35%)", - "fill-opacity": { - "stops": [ - [ - 14, - 0.033 - ], - [ - 16, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_shadow_med", - "type": "fill", - "metadata": { - "mapbox:group": "1456969573402.7817" - }, - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "level", - 78 - ], - "layout": {}, - "paint": { - "fill-color": "hsl(0, 0%, 35%)", - "fill-opacity": { - "stops": [ - [ - 14, - 0.033 - ], - [ - 16, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_shadow_dark", - "type": "fill", - "metadata": { - "mapbox:group": "1456969573402.7817" - }, - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "level", - 67 - ], - "layout": {}, - "paint": { - "fill-color": "hsl(0, 0%, 35%)", - "fill-opacity": { - "stops": [ - [ - 14, - 0.06 - ], - [ - 16, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_shadow_extreme", - "type": "fill", - "metadata": { - "mapbox:group": "1456969573402.7817" - }, - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "level", - 56 - ], - "layout": {}, - "paint": { - "fill-color": "hsl(0, 0%, 35%)", - "fill-opacity": { - "stops": [ - [ - 14, - 0.06 - ], - [ - 16, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "waterway-river-canal", - "type": "line", - "source": "composite", - "source-layer": "waterway", - "minzoom": 8, - "interactive": true, - "filter": [ - "any", - [ - "==", - "class", - "canal" - ], - [ - "==", - "class", - "river" - ] - ], - "layout": { - "line-cap": { - "base": 1, - "stops": [ - [ - 0, - "butt" - ], - [ - 11, - "round" - ] - ] - }, - "line-join": "round" - }, - "paint": { - "line-color": "hsl(185, 2%, 10%)", - "line-width": { - "base": 1.3, - "stops": [ - [ - 8.5, - 0.1 - ], - [ - 20, - 8 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 8, - 0 - ], - [ - 8.5, - 1 - ] - ] - } - } - }, - { - "id": "water shadow", - "type": "fill", - "source": "composite", - "source-layer": "water", - "interactive": true, - "layout": {}, - "paint": { - "fill-color": "hsl(185, 3%, 5%)", - "fill-translate": { - "base": 1.2, - "stops": [ - [ - 7, - [ - 0, - 0 - ] - ], - [ - 16, - [ - -1, - -1 - ] - ] - ] - }, - "fill-translate-anchor": "viewport", - "fill-opacity": 1 - } - }, - { - "id": "water", - "ref": "water shadow", - "interactive": true, - "paint": { - "fill-color": "hsl(185, 2%, 10%)" - } - }, - { - "id": "barrier_line-land-polygon", - "type": "fill", - "source": "composite", - "source-layer": "barrier_line", - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "Polygon" - ], - [ - "==", - "class", - "land" - ] - ], - "layout": {}, - "paint": { - "fill-color": "hsl(55, 1%, 20%)", - "fill-outline-color": "hsl(55, 1%, 20%)" - } - }, - { - "id": "barrier_line-land-line", - "type": "line", - "source": "composite", - "source-layer": "barrier_line", - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "==", - "class", - "land" - ] - ], - "layout": { - "line-cap": "round" - }, - "paint": { - "line-width": { - "base": 1.99, - "stops": [ - [ - 14, - 0.75 - ], - [ - 20, - 40 - ] - ] - }, - "line-color": "hsl(55, 1%, 20%)" - } - }, - { - "id": "aeroway-polygon", - "type": "fill", - "metadata": { - "mapbox:group": "1444934828655.3389" - }, - "source": "composite", - "source-layer": "aeroway", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "apron" - ], - [ - "==", - "$type", - "Polygon" - ] - ], - "layout": {}, - "paint": { - "fill-color": "hsl(0, 0%, 27%)", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 11, - 0 - ], - [ - 11.5, - 1 - ] - ] - } - } - }, - { - "id": "aeroway-runway", - "type": "line", - "metadata": { - "mapbox:group": "1444934828655.3389" - }, - "source": "composite", - "source-layer": "aeroway", - "minzoom": 9, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "==", - "type", - "runway" - ] - ], - "layout": {}, - "paint": { - "line-color": "hsl(0, 0%, 27%)", - "line-width": { - "base": 1.5, - "stops": [ - [ - 9, - 1 - ], - [ - 18, - 80 - ] - ] - } - } - }, - { - "id": "aeroway-taxiway", - "type": "line", - "metadata": { - "mapbox:group": "1444934828655.3389" - }, - "source": "composite", - "source-layer": "aeroway", - "minzoom": 9, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "==", - "type", - "taxiway" - ] - ], - "layout": {}, - "paint": { - "line-color": "hsl(0, 0%, 27%)", - "line-width": { - "base": 1.5, - "stops": [ - [ - 10, - 0.5 - ], - [ - 18, - 20 - ] - ] - } - } - }, - { - "id": "building", - "type": "fill", - "source": "composite", - "source-layer": "building", - "minzoom": 15, - "interactive": true, - "filter": [ - "==", - "underground", - "false" - ], - "layout": {}, - "paint": { - "fill-color": "hsl(55, 1%, 17%)", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 15.5, - 0 - ], - [ - 16, - 1 - ] - ] - }, - "fill-outline-color": "hsl(55, 1%, 15%)", - "fill-antialias": true - } - }, - { - "id": "tunnel-street-low", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "street" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": { - "stops": [ - [ - 11.5, - 0 - ], - [ - 12, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "tunnel-street_limited-low", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "street_limited" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": { - "stops": [ - [ - 11.5, - 0 - ], - [ - 12, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "tunnel-service-link-track-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "trunk_link" - ], - [ - "==", - "structure", - "tunnel" - ], - [ - "in", - "class", - "link", - "service", - "track" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-street_limited-case", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-street_limited-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ], - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-street-case", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-street-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ], - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-secondary-tertiary-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "tunnel" - ], - [ - "in", - "class", - "secondary", - "tertiary" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.2, - "stops": [ - [ - 10, - 0.75 - ], - [ - 18, - 2 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ], - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)" - } - }, - { - "id": "tunnel-primary-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "primary" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ], - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)" - } - }, - { - "id": "tunnel-trunk_link-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "tunnel" - ], - [ - "==", - "type", - "trunk_link" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-motorway_link-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway_link" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-trunk-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "tunnel" - ], - [ - "==", - "type", - "trunk" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": 1, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-motorway-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(185, 2%, 29%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": 1, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-construction", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "construction" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-join": "miter" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - }, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 0.4, - 0.8 - ] - ], - [ - 15, - [ - 0.3, - 0.6 - ] - ], - [ - 16, - [ - 0.2, - 0.3 - ] - ], - [ - 17, - [ - 0.2, - 0.25 - ] - ], - [ - 18, - [ - 0.15, - 0.15 - ] - ] - ] - } - } - }, - { - "id": "tunnel-path", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "steps" - ], - [ - "==", - "class", - "path" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 1, - 0.5 - ] - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 14, - 0 - ], - [ - 14.25, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-steps", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "structure", - "tunnel" - ], - [ - "==", - "type", - "steps" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 0.3, - 0.3 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 14, - 0 - ], - [ - 14.25, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-trunk_link", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-trunk_link-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": 1, - "line-dasharray": [ - 1, - 0 - ] - } - }, - { - "id": "tunnel-motorway_link", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-motorway_link-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": 1, - "line-dasharray": [ - 1, - 0 - ] - } - }, - { - "id": "tunnel-pedestrian", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "class", - "pedestrian" - ], - [ - "==", - "structure", - "tunnel" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": 1, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.5, - 0.4 - ] - ], - [ - 16, - [ - 1, - 0.2 - ] - ] - ] - } - } - }, - { - "id": "tunnel-service-link-track", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-service-link-track-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-dasharray": [ - 1, - 0 - ] - } - }, - { - "id": "tunnel-street_limited", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-street_limited-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-street", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-street-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-secondary-tertiary", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-secondary-tertiary-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": 1, - "line-dasharray": [ - 1, - 0 - ], - "line-blur": 0 - } - }, - { - "id": "tunnel-primary", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-primary-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)", - "line-opacity": 1, - "line-dasharray": [ - 1, - 0 - ], - "line-blur": 0 - } - }, - { - "id": "tunnel-trunk", - "type": "line", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "trunk" - ], - [ - "==", - "structure", - "tunnel" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(185, 2%, 15%)" - } - }, - { - "id": "tunnel-motorway", - "metadata": { - "mapbox:group": "1444855769305.6016" - }, - "ref": "tunnel-motorway-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-dasharray": [ - 1, - 0 - ], - "line-opacity": 1, - "line-color": "hsl(185, 2%, 15%)", - "line-blur": 0 - } - }, - { - "id": "road-pedestrian-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 12, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "class", - "pedestrian" - ], - [ - "==", - "structure", - "none" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 2 - ], - [ - 18, - 14.5 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": 0, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.9, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-street-low", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "class", - "street" - ], - [ - "==", - "structure", - "none" - ] - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "stops": [ - [ - 11, - 0 - ], - [ - 11.25, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "road-street_limited-low", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "class", - "street_limited" - ], - [ - "==", - "structure", - "none" - ] - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "stops": [ - [ - 11, - 0 - ], - [ - 11.25, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "road-service-link-track-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "trunk_link" - ], - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "in", - "class", - "link", - "service", - "track" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.9, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-street_limited-case", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-street_limited-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.9, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-street-case", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-street-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.9, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-main-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "in", - "class", - "secondary", - "tertiary" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.2, - "stops": [ - [ - 10, - 0.75 - ], - [ - 18, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 6, - 0 - ], - [ - 7, - 0.4 - ], - [ - 9, - 0.5 - ], - [ - 10, - 1 - ] - ] - } - } - }, - { - "id": "road-primary-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "==", - "class", - "primary" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 6, - 0 - ], - [ - 7, - 0.4 - ], - [ - 9, - 0.5 - ], - [ - 10, - 1 - ] - ] - } - } - }, - { - "id": "road-motorway_link-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 10, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "==", - "class", - "motorway_link" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 6, - 0 - ], - [ - 7, - 0.4 - ], - [ - 9, - 0.5 - ], - [ - 10, - 1 - ] - ] - } - } - }, - { - "id": "road-trunk_link-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "==", - "type", - "trunk_link" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 6, - 0 - ], - [ - 7, - 0.4 - ], - [ - 9, - 0.5 - ], - [ - 10, - 1 - ] - ] - } - } - }, - { - "id": "road-trunk-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 5, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "==", - "class", - "trunk" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 7, - 0.5 - ], - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.5 - ], - [ - 9, - 1.4 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 6, - 0 - ], - [ - 6.1, - 1 - ] - ] - } - } - }, - { - "id": "road-motorway-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "==", - "class", - "motorway" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 7, - 0.5 - ], - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": 1 - } - }, - { - "id": "road-construction", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "class", - "construction" - ], - [ - "==", - "structure", - "none" - ] - ] - ], - "layout": { - "line-join": "miter" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - }, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 0.4, - 0.8 - ] - ], - [ - 15, - [ - 0.3, - 0.6 - ] - ], - [ - 16, - [ - 0.2, - 0.3 - ] - ], - [ - 17, - [ - 0.2, - 0.25 - ] - ], - [ - 18, - [ - 0.15, - 0.15 - ] - ] - ] - } - } - }, - { - "id": "road-sidewalks", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 16, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "in", - "type", - "crossing", - "sidewalk" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 1, - 0.5 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 16, - 0 - ], - [ - 16.25, - 1 - ] - ] - } - } - }, - { - "id": "road-path", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "!in", - "type", - "crossing", - "sidewalk", - "steps" - ], - [ - "==", - "class", - "path" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 1, - 0.5 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 14, - 0 - ], - [ - 14.25, - 1 - ] - ] - } - } - }, - { - "id": "road-steps", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "==", - "type", - "steps" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 0.3, - 0.3 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 14, - 0 - ], - [ - 14.25, - 1 - ] - ] - } - } - }, - { - "id": "road-trunk_link", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-trunk_link-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": 1 - } - }, - { - "id": "road-motorway_link", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-motorway_link-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": 1 - } - }, - { - "id": "road-pedestrian", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-pedestrian-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": 1, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.5, - 0.4 - ] - ], - [ - 16, - [ - 1, - 0.2 - ] - ] - ] - } - } - }, - { - "id": "road-service-link-track", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "trunk_link" - ], - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "in", - "class", - "link", - "service", - "track" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "road-street_limited", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-street_limited-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-street", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-street-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-secondary-tertiary", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-main-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1.2, - "stops": [ - [ - 5, - 0 - ], - [ - 5.5, - 1 - ] - ] - } - } - }, - { - "id": "road-primary", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-primary-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1.2, - "stops": [ - [ - 5, - 0 - ], - [ - 5.5, - 1 - ] - ] - } - } - }, - { - "id": "road-trunk", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-trunk-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.5 - ], - [ - 9, - 1.4 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": 1 - } - }, - { - "id": "road-motorway", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "ref": "road-motorway-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": 1 - } - }, - { - "id": "road-rail", - "type": "line", - "metadata": { - "mapbox:group": "1444855786460.0557" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "structure", - "bridge", - "tunnel" - ], - [ - "in", - "class", - "major_rail", - "minor_rail" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-color": "hsl(0, 0%, 17%)", - "line-width": { - "base": 1, - "stops": [ - [ - 14, - 0.75 - ], - [ - 20, - 1 - ] - ] - } - } - }, - { - "id": "bridge-pedestrian-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "class", - "pedestrian" - ], - [ - "==", - "structure", - "bridge" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 2 - ], - [ - 18, - 14.5 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": 0, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "bridge-street-low", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "street" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "stops": [ - [ - 11.5, - 0 - ], - [ - 12, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "bridge-street_limited-low", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "street_limited" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "stops": [ - [ - 11.5, - 0 - ], - [ - 12, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "bridge-service-link-track-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "trunk_link" - ], - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "link", - "service", - "track" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - } - } - }, - { - "id": "bridge-street_limited-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "street_limited" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - } - } - }, - { - "id": "bridge-street-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "street" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - }, - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - } - } - }, - { - "id": "bridge-secondary-tertiary-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "secondary", - "tertiary" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.2, - "stops": [ - [ - 10, - 0.75 - ], - [ - 18, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-translate": [ - 0, - 0 - ] - } - }, - { - "id": "bridge-primary-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "primary" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-translate": [ - 0, - 0 - ] - } - }, - { - "id": "bridge-trunk_link-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "trunk_link" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 10.99, - 0 - ], - [ - 11, - 1 - ] - ] - } - } - }, - { - "id": "bridge-motorway_link-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "<=", - "layer", - 1 - ], - [ - "==", - "class", - "motorway_link" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": 1 - } - }, - { - "id": "bridge-trunk-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "trunk" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - } - } - }, - { - "id": "bridge-motorway-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 7, - 0.5 - ], - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - } - } - }, - { - "id": "bridge-construction", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "construction" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "miter" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - }, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 0.4, - 0.8 - ] - ], - [ - 15, - [ - 0.3, - 0.6 - ] - ], - [ - 16, - [ - 0.2, - 0.3 - ] - ], - [ - 17, - [ - 0.2, - 0.25 - ] - ], - [ - 18, - [ - 0.15, - 0.15 - ] - ] - ] - } - } - }, - { - "id": "bridge-path", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "steps" - ], - [ - "==", - "class", - "path" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 1, - 0.5 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 14, - 0 - ], - [ - 14.25, - 1 - ] - ] - } - } - }, - { - "id": "bridge-steps", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "steps" - ] - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.75, - 1 - ] - ], - [ - 16, - [ - 1, - 0.75 - ] - ], - [ - 17, - [ - 0.3, - 0.3 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 14, - 0 - ], - [ - 14.25, - 1 - ] - ] - } - } - }, - { - "id": "bridge-trunk_link", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "layer", - 2, - 3, - 4, - 5 - ], - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "trunk_link" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-motorway_link", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "layer", - 2, - 3, - 4, - 5 - ], - [ - "==", - "class", - "motorway_link" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-pedestrian", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "ref": "bridge-pedestrian-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": 1, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 1, - 0 - ] - ], - [ - 15, - [ - 1.5, - 0.4 - ] - ], - [ - 16, - [ - 1, - 0.2 - ] - ] - ] - } - } - }, - { - "id": "bridge-service-link-track", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "type", - "trunk_link" - ], - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "link", - "service", - "track" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-street_limited", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "ref": "bridge-street_limited-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "bridge-street", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "ref": "bridge-street-low", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "bridge-secondary-tertiary", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "type", - "secondary", - "tertiary" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1.2, - "stops": [ - [ - 5, - 0 - ], - [ - 5.5, - 1 - ] - ] - } - } - }, - { - "id": "bridge-primary", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "primary" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-opacity": { - "base": 1.2, - "stops": [ - [ - 5, - 0 - ], - [ - 5.5, - 1 - ] - ] - } - } - }, - { - "id": "bridge-trunk", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "layer", - 2, - 3, - 4, - 5 - ], - [ - "==", - "class", - "trunk" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-motorway", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "layer", - 2, - 3, - 4, - 5 - ], - [ - "==", - "class", - "motorway" - ], - [ - "==", - "structure", - "bridge" - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-rail", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "major_rail", - "minor_rail" - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-color": "hsl(0, 0%, 17%)", - "line-width": { - "base": 1, - "stops": [ - [ - 14, - 0.75 - ], - [ - 20, - 1 - ] - ] - } - } - }, - { - "id": "bridge-trunk_link-2-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "trunk_link" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 10.99, - 0 - ], - [ - 11, - 1 - ] - ] - } - } - }, - { - "id": "bridge-motorway_link-2-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway_link" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": 1 - } - }, - { - "id": "bridge-trunk-2-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "trunk" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - } - } - }, - { - "id": "bridge-motorway-2-case", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 7, - 0.5 - ], - [ - 10, - 1 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "hsl(0, 0%, 17%)", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - } - } - }, - { - "id": "bridge-trunk_link-2", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "==", - "type", - "trunk_link" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-motorway_link-2", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway_link" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-trunk-2", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "trunk" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "bridge-motorway-2", - "type": "line", - "metadata": { - "mapbox:group": "1444855799204.86" - }, - "source": "composite", - "source-layer": "road", - "interactive": true, - "filter": [ - "all", - [ - "==", - "class", - "motorway" - ], - [ - "==", - "structure", - "bridge" - ], - [ - ">=", - "layer", - 2 - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "hsl(0, 0%, 27%)" - } - }, - { - "id": "admin-3-4-boundaries-bg", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "interactive": true, - "filter": [ - "all", - [ - "==", - "maritime", - 0 - ], - [ - ">=", - "admin_level", - 3 - ] - ], - "layout": { - "line-join": "bevel" - }, - "paint": { - "line-color": "hsl(0, 0%, 10%)", - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 3.5 - ], - [ - 10, - 8 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 4, - 0 - ], - [ - 6, - 0.75 - ] - ] - }, - "line-dasharray": [ - 1, - 0 - ], - "line-translate": [ - 0, - 0 - ], - "line-blur": { - "base": 1, - "stops": [ - [ - 3, - 0 - ], - [ - 8, - 3 - ] - ] - } - } - }, - { - "id": "admin-2-boundaries-bg", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "minzoom": 1, - "interactive": true, - "filter": [ - "all", - [ - "==", - "admin_level", - 2 - ], - [ - "==", - "maritime", - 0 - ] - ], - "layout": { - "line-join": "miter" - }, - "paint": { - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 3.5 - ], - [ - 10, - 10 - ] - ] - }, - "line-color": "hsl(0, 0%, 10%)", - "line-opacity": { - "base": 1, - "stops": [ - [ - 3, - 0 - ], - [ - 4, - 0.5 - ] - ] - }, - "line-translate": [ - 0, - 0 - ], - "line-blur": { - "base": 1, - "stops": [ - [ - 3, - 0 - ], - [ - 10, - 2 - ] - ] - } - } - }, - { - "id": "admin-3-4-boundaries", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "interactive": true, - "filter": [ - "all", - [ - "==", - "maritime", - 0 - ], - [ - ">=", - "admin_level", - 3 - ] - ], - "layout": { - "line-join": "round", - "line-cap": "round" - }, - "paint": { - "line-dasharray": { - "base": 1, - "stops": [ - [ - 6, - [ - 2, - 0 - ] - ], - [ - 7, - [ - 2, - 2, - 6, - 2 - ] - ] - ] - }, - "line-width": { - "base": 1, - "stops": [ - [ - 7, - 0.75 - ], - [ - 12, - 1.5 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 2, - 0 - ], - [ - 3, - 1 - ] - ] - }, - "line-color": { - "base": 1, - "stops": [ - [ - 4, - "hsl(0, 0%, 27%)" - ], - [ - 5, - "hsl(0, 0%, 35%)" - ] - ] - } - } - }, - { - "id": "admin-2-boundaries", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "minzoom": 1, - "interactive": true, - "filter": [ - "all", - [ - "==", - "admin_level", - 2 - ], - [ - "==", - "disputed", - 0 - ], - [ - "==", - "maritime", - 0 - ] - ], - "layout": { - "line-join": "round", - "line-cap": "round" - }, - "paint": { - "line-color": "hsl(0, 0%, 43%)", - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 0.5 - ], - [ - 10, - 2 - ] - ] - } - } - }, - { - "id": "admin-2-boundaries-dispute", - "type": "line", - "metadata": { - "mapbox:group": "1444934295202.7542" - }, - "source": "composite", - "source-layer": "admin", - "minzoom": 1, - "interactive": true, - "filter": [ - "all", - [ - "==", - "admin_level", - 2 - ], - [ - "==", - "disputed", - 1 - ], - [ - "==", - "maritime", - 0 - ] - ], - "layout": { - "line-join": "round" - }, - "paint": { - "line-dasharray": [ - 1.5, - 1.5 - ], - "line-color": "hsl(0, 0%, 14%)", - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 0.5 - ], - [ - 10, - 2 - ] - ] - } - } - }, - { - "id": "waterway-label", - "type": "symbol", - "source": "composite", - "source-layer": "waterway_label", - "minzoom": 12, - "interactive": true, - "filter": [ - "in", - "class", - "canal", - "river" - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-max-angle": 30, - "text-size": { - "base": 1, - "stops": [ - [ - 13, - 12 - ], - [ - 18, - 16 - ] - ] - } - }, - "paint": { - "text-halo-width": 0, - "text-halo-blur": 0, - "text-color": "hsl(0, 0%, 32%)" - } - }, - { - "id": "poi-scalerank3", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933372896.5967" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ], - [ - "==", - "scalerank", - 3 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 1, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(0, 0%, 60%)", - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "poi-parks-scalerank3", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933372896.5967" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "==", - "scalerank", - 3 - ], - [ - "in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 12 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-halo-blur": 0, - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-color": { - "base": 1, - "stops": [ - [ - 7, - "hsl(0, 0%, 47%)" - ], - [ - 9, - "hsl(0, 0%, 73%)" - ] - ] - } - } - }, - { - "id": "road-label-small", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933721429.3076" - }, - "source": "composite", - "source-layer": "road_label", - "minzoom": 15, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "class", - "", - "ferry", - "link", - "motorway", - "path", - "pedestrian", - "primary", - "secondary", - "street", - "street_limited", - "tertiary", - "track", - "trunk" - ], - [ - "==", - "$type", - "LineString" - ] - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 15, - 10 - ], - [ - 20, - 13 - ] - ] - }, - "text-max-angle": 30, - "symbol-spacing": 500, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-padding": 1, - "text-rotation-alignment": "map", - "text-field": "{name_en}", - "text-letter-spacing": 0.01 - }, - "paint": { - "text-color": "hsl(0, 0%, 78%)", - "text-halo-color": "#212121", - "text-halo-width": 1.25, - "text-halo-blur": 0 - } - }, - { - "id": "road-label-medium", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933721429.3076" - }, - "source": "composite", - "source-layer": "road_label", - "minzoom": 13, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "in", - "class", - "", - "link", - "pedestrian", - "street", - "street_limited" - ] - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 11, - 10 - ], - [ - 20, - 14 - ] - ] - }, - "text-max-angle": 30, - "symbol-spacing": 500, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-padding": 1, - "text-rotation-alignment": "map", - "text-field": "{name_en}", - "text-letter-spacing": 0.01 - }, - "paint": { - "text-color": "hsl(0, 0%, 78%)", - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "road-label-large", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933721429.3076" - }, - "source": "composite", - "source-layer": "road_label", - "minzoom": 12, - "interactive": true, - "filter": [ - "in", - "class", - "motorway", - "primary", - "secondary", - "tertiary", - "trunk" - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 9, - 10 - ], - [ - 20, - 16 - ] - ] - }, - "text-max-angle": 30, - "symbol-spacing": 400, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-padding": 1, - "text-rotation-alignment": "map", - "text-field": "{name_en}", - "text-letter-spacing": 0.01 - }, - "paint": { - "text-color": "hsl(0, 0%, 78%)", - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "poi-scalerank2", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933358918.2366" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ], - [ - "==", - "scalerank", - 2 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 14, - 11 - ], - [ - 20, - 12 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0.65 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(0, 0%, 60%)", - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "poi-parks-scalerank2", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933358918.2366" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "==", - "scalerank", - 2 - ], - [ - "in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 14, - 11 - ], - [ - 20, - 12 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": { - "base": 1, - "stops": [ - [ - 7, - "hsl(0, 0%, 47%)" - ], - [ - 9, - "hsl(0, 0%, 73%)" - ] - ] - }, - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "water-label", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933808272.805" - }, - "source": "composite", - "source-layer": "water_label", - "minzoom": 5, - "interactive": true, - "filter": [ - ">", - "area", - 10000 - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 13, - 13 - ], - [ - 18, - 18 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0 - } - }, - { - "id": "poi-parks-scalerank1", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933322393.2852" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "<=", - "scalerank", - 1 - ], - [ - "in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 12 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": { - "base": 1, - "stops": [ - [ - 7, - "hsl(0, 0%, 47%)" - ], - [ - 9, - "hsl(0, 0%, 73%)" - ] - ] - }, - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "poi-scalerank1", - "type": "symbol", - "metadata": { - "mapbox:group": "1444933322393.2852" - }, - "source": "composite", - "source-layer": "poi_label", - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "campsite", - "cemetery", - "dog-park", - "garden", - "golf", - "park", - "picnic-site", - "playground", - "zoo" - ], - [ - "<=", - "scalerank", - 1 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 12 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(0, 0%, 60%)", - "text-halo-color": "#212121", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "airport-label", - "type": "symbol", - "source": "composite", - "source-layer": "airport_label", - "minzoom": 10, - "interactive": true, - "filter": [ - "<=", - "scalerank", - 2 - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 12 - ], - [ - 18, - 18 - ] - ] - }, - "icon-image": { - "stops": [ - [ - 12, - "{maki}-11" - ], - [ - 13, - "{maki}-15" - ] - ] - }, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0.75 - ], - "text-anchor": "top", - "text-field": { - "stops": [ - [ - 11, - "{ref}" - ], - [ - 14, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.01, - "text-max-width": 9 - }, - "paint": { - "text-color": "hsl(0, 0%, 85%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 0.5, - "text-halo-blur": 0 - } - }, - { - "id": "place-islets-archipelago-aboriginal", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "maxzoom": 16, - "interactive": true, - "filter": [ - "in", - "type", - "aboriginal_lands", - "archipelago", - "islet" - ], - "layout": { - "text-line-height": 1.2, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 16 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 8 - }, - "paint": { - "text-color": "hsl(0, 0%, 85%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "place-neighbourhood", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 12, - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "type", - "neighbourhood" - ], - "layout": { - "text-field": "{name_en}", - "text-transform": "uppercase", - "text-letter-spacing": 0.1, - "text-max-width": 7, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-padding": 3, - "text-size": { - "base": 1, - "stops": [ - [ - 12, - 11 - ], - [ - 16, - 16 - ] - ] - } - }, - "paint": { - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-color": "hsl(0, 0%, 70%)", - "text-halo-blur": 0 - } - }, - { - "id": "place-suburb", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 11, - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "type", - "suburb" - ], - "layout": { - "text-field": "{name_en}", - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-letter-spacing": 0.15, - "text-max-width": 7, - "text-padding": 3, - "text-size": { - "base": 1, - "stops": [ - [ - 11, - 11 - ], - [ - 15, - 18 - ] - ] - } - }, - "paint": { - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-color": "hsl(0, 0%, 70%)", - "text-halo-blur": 0 - } - }, - { - "id": "place-hamlet", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 10, - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "type", - "hamlet" - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 12, - 11.5 - ], - [ - 15, - 16 - ] - ] - } - }, - "paint": { - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1.25, - "text-color": "hsl(0, 0%, 85%)", - "text-halo-blur": 0 - } - }, - { - "id": "place-village", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 11, - "maxzoom": 15, - "interactive": true, - "filter": [ - "==", - "type", - "village" - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11.5 - ], - [ - 16, - 18 - ] - ] - } - }, - "paint": { - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1.25, - "text-color": { - "base": 1, - "stops": [ - [ - 10, - "hsl(0, 0%, 75%)" - ], - [ - 11, - "hsl(0, 0%, 85%)" - ] - ] - }, - "text-halo-blur": 0 - } - }, - { - "id": "place-town", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 7, - "maxzoom": 15, - "interactive": true, - "filter": [ - "==", - "type", - "town" - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 7, - 11.5 - ], - [ - 15, - 20 - ] - ] - }, - "text-font": { - "base": 1, - "stops": [ - [ - 11, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 12, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-max-width": 7 - }, - "paint": { - "text-color": { - "base": 1, - "stops": [ - [ - 10, - "hsl(0, 0%, 75%)" - ], - [ - 11, - "hsl(0, 0%, 85%)" - ] - ] - }, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1.25, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 0 - } - }, - { - "id": "place-islands", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "maxzoom": 16, - "interactive": true, - "filter": [ - "==", - "type", - "island" - ], - "layout": { - "text-line-height": 1.2, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 16 - ] - ] - }, - "text-max-angle": 38, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-padding": 2, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "text-max-width": 7 - }, - "paint": { - "text-color": "hsl(0, 0%, 85%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "place-city-sm", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "scalerank", - 0, - 1, - 2, - 3, - 4, - 5 - ], - [ - "==", - "type", - "city" - ] - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 6, - 12 - ], - [ - 14, - 22 - ] - ] - }, - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": [ - 0, - 0 - ], - "text-field": "{name_en}", - "text-max-width": 7 - }, - "paint": { - "text-color": "hsl(0, 0%, 90%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1.25, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 0 - } - }, - { - "id": "place-city-md-s", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "==", - "type", - "city" - ], - [ - "in", - "ldir", - "E", - "S", - "SE", - "SW" - ], - [ - "in", - "scalerank", - 3, - 4, - 5 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-size": { - "base": 0.9, - "stops": [ - [ - 5, - 12 - ], - [ - 12, - 22 - ] - ] - }, - "text-anchor": "top", - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - 0.1 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "icon-image": "dot-10" - }, - "paint": { - "text-halo-width": 1, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-color": "hsl(0, 0%, 90%)", - "text-halo-blur": 0, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - } - } - }, - { - "id": "place-city-md-n", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "==", - "type", - "city" - ], - [ - "in", - "ldir", - "N", - "NE", - "NW", - "W" - ], - [ - "in", - "scalerank", - 3, - 4, - 5 - ] - ], - "layout": { - "text-size": { - "base": 0.9, - "stops": [ - [ - 5, - 12 - ], - [ - 12, - 22 - ] - ] - }, - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - -0.25 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": "bottom", - "text-field": "{name_en}", - "text-max-width": 7, - "icon-image": "dot-10" - }, - "paint": { - "text-color": "hsl(0, 0%, 90%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 0 - } - }, - { - "id": "place-city-lg-s", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "minzoom": 1, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "<=", - "scalerank", - 2 - ], - [ - "==", - "type", - "city" - ], - [ - "in", - "ldir", - "E", - "S", - "SE", - "SW" - ] - ], - "layout": { - "icon-image": "dot-11", - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - 0.15 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "top" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 0.9, - "stops": [ - [ - 4, - 12 - ], - [ - 10, - 22 - ] - ] - } - }, - "paint": { - "text-color": { - "base": 1, - "stops": [ - [ - 7, - "hsl(0, 0%, 95%)" - ], - [ - 9, - "hsl(0, 0%, 90%)" - ] - ] - }, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 0 - } - }, - { - "id": "place-city-lg-n", - "type": "symbol", - "metadata": { - "mapbox:group": "1444862510685.128" - }, - "source": "composite", - "source-layer": "place_label", - "minzoom": 1, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "<=", - "scalerank", - 2 - ], - [ - "==", - "type", - "city" - ], - [ - "in", - "ldir", - "N", - "NE", - "NW", - "W" - ] - ], - "layout": { - "icon-image": "dot-11", - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - -0.25 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "bottom" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 0.9, - "stops": [ - [ - 4, - 12 - ], - [ - 10, - 22 - ] - ] - } - }, - "paint": { - "text-color": { - "base": 1, - "stops": [ - [ - 7, - "hsl(0, 0%, 95%)" - ], - [ - 9, - "hsl(0, 0%, 90%)" - ] - ] - }, - "text-opacity": 1, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 0 - } - }, - { - "id": "marine-label-sm-ln", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 3, - "maxzoom": 10, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - ">=", - "labelrank", - 4 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1, - "stops": [ - [ - 3, - 12 - ], - [ - 6, - 16 - ] - ] - }, - "symbol-spacing": { - "base": 1, - "stops": [ - [ - 4, - 100 - ], - [ - 6, - 400 - ] - ] - }, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-field": "{name_en}", - "text-letter-spacing": 0.1, - "text-max-width": 5 - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)" - } - }, - { - "id": "marine-label-sm-pt", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 3, - "maxzoom": 10, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "Point" - ], - [ - ">=", - "labelrank", - 4 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 5, - "text-letter-spacing": 0.1, - "text-line-height": 1.5, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 3, - 12 - ], - [ - 6, - 16 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)" - } - }, - { - "id": "marine-label-md-ln", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 2, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "in", - "labelrank", - 2, - 3 - ] - ], - "layout": { - "text-line-height": 1.1, - "text-size": { - "base": 1.1, - "stops": [ - [ - 2, - 12 - ], - [ - 5, - 20 - ] - ] - }, - "symbol-spacing": 250, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-field": "{name_en}", - "text-letter-spacing": 0.15, - "text-max-width": 5 - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)" - } - }, - { - "id": "marine-label-md-pt", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 2, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "Point" - ], - [ - "in", - "labelrank", - 2, - 3 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 5, - "text-letter-spacing": 0.15, - "text-line-height": 1.5, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1.1, - "stops": [ - [ - 2, - 14 - ], - [ - 5, - 20 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)" - } - }, - { - "id": "marine-label-lg-ln", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 1, - "maxzoom": 4, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "==", - "labelrank", - 1 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 4, - "text-letter-spacing": 0.25, - "text-line-height": 1.1, - "symbol-placement": "line", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 1, - 14 - ], - [ - 4, - 30 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)" - } - }, - { - "id": "marine-label-lg-pt", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856087950.3635" - }, - "source": "composite", - "source-layer": "marine_label", - "minzoom": 1, - "maxzoom": 4, - "interactive": true, - "filter": [ - "all", - [ - "==", - "$type", - "Point" - ], - [ - "==", - "labelrank", - 1 - ] - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 4, - "text-letter-spacing": 0.25, - "text-line-height": 1.5, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 1, - 14 - ], - [ - 4, - 30 - ] - ] - } - }, - "paint": { - "text-color": "hsl(0, 0%, 32%)", - "text-halo-blur": 0, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)" - } - }, - { - "id": "state-label-sm", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856151690.9143" - }, - "source": "composite", - "source-layer": "state_label", - "minzoom": 3, - "maxzoom": 9, - "interactive": true, - "filter": [ - "<", - "area", - 20000 - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 6, - 10 - ], - [ - 9, - 14 - ] - ] - }, - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{abbr}" - ], - [ - 6, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.15, - "text-max-width": 5 - }, - "paint": { - "text-opacity": 1, - "text-color": "hsl(0, 0%, 50%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "state-label-md", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856151690.9143" - }, - "source": "composite", - "source-layer": "state_label", - "minzoom": 3, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "<", - "area", - 80000 - ], - [ - ">=", - "area", - 20000 - ] - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 5, - 10 - ], - [ - 8, - 16 - ] - ] - }, - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{abbr}" - ], - [ - 5, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.15, - "text-max-width": 6 - }, - "paint": { - "text-opacity": 1, - "text-color": "hsl(0, 0%, 50%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "state-label-lg", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856151690.9143" - }, - "source": "composite", - "source-layer": "state_label", - "minzoom": 3, - "maxzoom": 7, - "interactive": true, - "filter": [ - ">=", - "area", - 80000 - ], - "layout": { - "text-size": { - "base": 1, - "stops": [ - [ - 4, - 10 - ], - [ - 7, - 18 - ] - ] - }, - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "text-padding": 1, - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{abbr}" - ], - [ - 4, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.15, - "text-max-width": 6 - }, - "paint": { - "text-opacity": 1, - "text-color": "hsl(0, 0%, 50%)", - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "country-label-sm", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856144497.7825" - }, - "source": "composite", - "source-layer": "country_label", - "minzoom": 1, - "maxzoom": 10, - "interactive": true, - "filter": [ - ">=", - "scalerank", - 5 - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": 6, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 0.9, - "stops": [ - [ - 5, - 14 - ], - [ - 9, - 22 - ] - ] - } - }, - "paint": { - "text-halo-width": 1.25, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-color": "hsl(0, 0%, 45%)", - "text-halo-blur": 0 - } - }, - { - "id": "country-label-md", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856144497.7825" - }, - "source": "composite", - "source-layer": "country_label", - "minzoom": 1, - "maxzoom": 8, - "interactive": true, - "filter": [ - "in", - "scalerank", - 3, - 4 - ], - "layout": { - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{code}" - ], - [ - 2, - "{name_en}" - ] - ] - }, - "text-max-width": 6, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 3, - 10 - ], - [ - 8, - 24 - ] - ] - } - }, - "paint": { - "text-halo-width": 1.25, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-color": "hsl(0, 0%, 45%)", - "text-halo-blur": 0 - } - }, - { - "id": "country-label-lg", - "type": "symbol", - "metadata": { - "mapbox:group": "1444856144497.7825" - }, - "source": "composite", - "source-layer": "country_label", - "minzoom": 1, - "maxzoom": 7, - "interactive": true, - "filter": [ - "in", - "scalerank", - 1, - 2 - ], - "layout": { - "text-field": "{name_en}", - "text-max-width": { - "base": 1, - "stops": [ - [ - 0, - 5 - ], - [ - 3, - 6 - ] - ] - }, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 1, - 10 - ], - [ - 6, - 24 - ] - ] - } - }, - "paint": { - "text-halo-width": 1.25, - "text-halo-color": "hsla(0, 0%, 10%, 0.75)", - "text-color": "hsl(0, 0%, 45%)", - "text-halo-blur": 0 - } - } - ], - "created": "2016-09-22T20:06:46.804Z", - "id": "citerrmcg00662hogpcv4o3w8", - "modified": "2016-09-22T20:28:22.514Z", - "owner": "justin", - "draft": false -} \ No newline at end of file diff --git a/platform/ios/app/pl.lproj/Localizable.strings b/platform/ios/app/pl.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/points.geojson b/platform/ios/app/points.geojson deleted file mode 100644 index a34f53bd36e..00000000000 --- a/platform/ios/app/points.geojson +++ /dev/null @@ -1,136346 +0,0 @@ -{ - "crs": { - "properties": { - "name": "urn:ogc:def:crs:OGC:1.3:CRS84" - }, - "type": "name" - }, - "features": [ - { - "geometry": { - "coordinates": [ - -77.00896639534831, - 38.87031006108791, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

Not In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04299" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91636206355402, - 38.89569665945388, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04451" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0238724795834, - 38.908392080284656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

Not In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H04488" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97787257022829, - 38.8489449722363, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

Not In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H04834" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03147970117229, - 38.96902788924794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04859" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9913552472916, - 38.83709694933415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H05056" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00040502778565, - 38.85974851759818, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H05098" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99323795575543, - 38.859058565652674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

Not In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H05136" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.959878452791, - 38.88617396045632, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

Not In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05165" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98698481952468, - 38.860417884264336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H05227" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98993851902051, - 38.839618544962086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05262" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98987381620425, - 38.84045690178814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05263" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91231659856827, - 38.89190091586272, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05286" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99348740940816, - 38.83986590773414, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H05391" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98601664025121, - 38.91047765444307, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

Not In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H05422" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98957955060457, - 38.837540182413264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05485" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98470810619855, - 38.84570928130159, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05572" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98317121239893, - 38.845981386046816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

Not In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05573" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98780462640617, - 38.834545599644464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05654" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9885525170853, - 38.83350723429082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05655" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93173574657547, - 38.908409952681225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

Not In Service


Last Inspection Date: 11/02/07

Report Problem", - "NAME": "H05703" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00455649194319, - 38.845714815307616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05706" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99855738244389, - 38.83314573676457, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05711" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99759077343545, - 38.83484620257337, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H05714" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99878902851339, - 38.83402379395176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

Not In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H05715" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99584213768712, - 38.84433254766388, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H05876" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99837327570914, - 38.83016139292818, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H05932" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94244722039106, - 38.8984667850143, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

Not In Service


Last Inspection Date: 05/08/07

Report Problem", - "NAME": "H06014" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93128596530984, - 38.88813824915444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06062" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.993404398372, - 38.83796673223114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H06138" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97881935219762, - 38.84695302166241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

Not In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H06198" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98093780382641, - 38.84810364743267, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06204" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99151276057596, - 38.84277892390687, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 12/26/07

Report Problem", - "NAME": "H06281" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94245572382569, - 38.89910077971911, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

Not In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H06284" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97686929496238, - 38.847532020368746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06351" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9908307093506, - 38.83445746759559, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

Not In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H06371" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93099707003753, - 38.88749531288, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

Not In Service


Last Inspection Date: 01/16/08

Report Problem", - "NAME": "H06421" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99497416142488, - 38.83408459821604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06449" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99613574191525, - 38.83427919813744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

Not In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06450" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03172585575031, - 38.91692065774532, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 02/25/08

Report Problem", - "NAME": "H06618" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00485047487068, - 38.89142723809215, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 01/22/08

Report Problem", - "NAME": "H06681" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99666296819146, - 38.843205383344355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

Not In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06847" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.992343207122, - 38.86050844281507, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 10/17/07

Report Problem", - "NAME": "H06936" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99854678638224, - 38.84050507675981, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

Not In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H07080" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9733590055815, - 38.850989827283605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07263" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01012243607381, - 38.8674809483319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07374" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05434791651238, - 38.89321416302191, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H07410" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94283195424802, - 38.89090011532114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07469" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98402442882518, - 38.841073903098554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07489" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98553461650069, - 38.834608525707, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07553" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98635144562992, - 38.83527938483727, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07663" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94277587834381, - 38.899779302608884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07664" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9761772397151, - 38.85176761201083, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07676" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98828114282179, - 38.858208327743675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H07726" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.931872005955, - 38.881380159518855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07735" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98583667653341, - 38.91526521286277, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

Not In Service


Last Inspection Date: 02/26/08

Report Problem", - "NAME": "H07797" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98678399344202, - 38.91493268211026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

Not In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07799" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99000306666689, - 38.85427337296903, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

Not In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H07843" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0006533530727, - 38.86585272764679, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H07851" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97602904220025, - 38.85269103611326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07897" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98793210310468, - 38.87652507359999, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

Not In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H07904" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99111619748747, - 38.85435082736918, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

Not In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H07914" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99004411081333, - 38.858518228004314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H07919" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92398128690964, - 38.904010206187216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H08001" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98837064326993, - 38.83974025659751, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H08151" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01504314794114, - 38.89115951512574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

Not In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H08225" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02875131595142, - 38.898418860484426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00030" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95764882330856, - 38.883691300595814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H00031" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0529977220696, - 38.96280384942628, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H00032" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0279853511952, - 38.92300810700433, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H00033" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94119295857982, - 38.87978174909364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H00034" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94388454003413, - 38.87775490556381, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00035" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95085670222016, - 38.88763142914867, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H00036" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01632906577423, - 38.815379894850096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H00037" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0161692070949, - 38.81496240082986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H00038" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01736558362855, - 38.81439578430056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H00039" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97584637824413, - 38.850562575855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00041" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01470069113194, - 38.902140123803925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00043" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00912452852958, - 38.82135233969486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H00044" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95592616553711, - 38.884011091508654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H00045" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97148377126307, - 38.84925439555673, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00046" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01036125901071, - 38.82445226880478, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H00047" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01051174457935, - 38.825275620679086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H00048" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01418080489695, - 38.828572971819355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H00049" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97146849955459, - 38.84719842287334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00050" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96991534493175, - 38.847508707008586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00051" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01164835924266, - 38.939619564354835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00052" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97074915707135, - 38.84688159815845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00053" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96827883483726, - 38.84705917601572, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00054" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01048335544911, - 38.93900746204618, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00055" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01043348675512, - 38.9397611453294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00056" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09837205432707, - 38.94626249795688, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00057" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1002431089394, - 38.94608328309577, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00058" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10073059458767, - 38.946548997829375, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00060" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01446624081542, - 38.90114438742313, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00061" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01457754925728, - 38.89472288892249, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00062" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01266954068682, - 38.939815956010804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00063" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95160820241006, - 38.86900066345887, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H00064" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9540042960017, - 38.88668825445605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H00066" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94806876057358, - 38.8675158903519, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H00067" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97907649493274, - 38.86876087754535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00068" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97979279295288, - 38.8380891347343, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08319" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98591509719353, - 38.85459888533094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

Not In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H08368" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96468572679832, - 38.92540502852441, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

Not In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08422" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9934888941163, - 38.83204805424982, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H08435" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9923916315782, - 38.83220582513475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H08436" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03181078795048, - 38.89578957105822, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

Not In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H08515" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97706625283728, - 38.84138399430156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H08517" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0323454934693, - 38.896124103023254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

Not In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08605" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91100970788654, - 38.89390220984717, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H08619" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04064814698516, - 38.90268562195885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08887" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99703717417856, - 38.86376791978137, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

Not In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H08962" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98479626988147, - 38.8497942055782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

Not In Service


Last Inspection Date: 03/10/08

Report Problem", - "NAME": "H09118" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02615757568168, - 38.89395356410638, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

Not In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H09350" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00734329985171, - 38.83646993289141, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H00003" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98670067697417, - 38.86519768209315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H00004" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0203117912091, - 38.92266262008507, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H00005" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98622199688307, - 38.863276861458345, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00007" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06871050072776, - 38.944957189195556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 11/10/05

Report Problem", - "NAME": "H00008" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98475995153744, - 38.864828271134506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00010" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0004914276414, - 38.83780381048957, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00011" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08564775375521, - 38.90964557354399, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00012" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06476139670181, - 38.94241042259082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00013" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00056245478972, - 38.83420877857179, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00014" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98659922647472, - 38.85547111685086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/21/07

Report Problem", - "NAME": "H00015" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94285288710866, - 38.87042235053403, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00016" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01418500520768, - 38.96804162964368, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00017" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99726767139077, - 38.832052708118574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H00018" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04892152546748, - 38.917154075179845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H00023" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99842514975484, - 38.82798879487114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H00024" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92931049765984, - 38.886476330156206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H00025" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92706829183449, - 38.8861878004065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H00026" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00448639241161, - 38.82109143641948, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00027" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03080027784384, - 38.898386908064644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H00028" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03096217970821, - 38.89823578603241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00029" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9882085093919, - 38.85522304522973, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

Not In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00002" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99337048103996, - 38.832965045867496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/30/07

Report Problem", - "NAME": "H00020" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98960814925373, - 38.83596304770729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00021" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99628444071986, - 38.83016409270196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H00022" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97907972723497, - 38.84794629413317, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

Not In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00059" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98310255748365, - 38.8535688576217, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00099" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98702802537683, - 38.840136216678005, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H00108" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98590954839855, - 38.84401352998382, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 03/07/08

Report Problem", - "NAME": "H00162" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00243586107831, - 38.860670144391996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

Not In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00242" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9883830443067, - 38.85180131847511, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

Not In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00295" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00186057274746, - 38.841555320984845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00377" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93114705048231, - 38.88879526557277, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

Not In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H00407" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98775245098426, - 38.85402117476584, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

Not In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00439" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01224787233296, - 38.86738702124701, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

Not In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H00557" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03435214518555, - 38.90958196669992, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

Not In Service


Last Inspection Date: 03/01/08

Report Problem", - "NAME": "H00916" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00745622900936, - 38.90778876724929, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

Not In Service


Last Inspection Date: 02/27/08

Report Problem", - "NAME": "H00926" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99605934440424, - 38.84661700609712, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01000" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01432579829839, - 38.90474183677433, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01040" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03288981034959, - 38.9025928093699, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

Not In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H01174" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99167910301576, - 38.896665588622305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

Not In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01520" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0004169171207, - 38.841816201702336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 10/05/07

Report Problem", - "NAME": "H01590" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97841081726658, - 38.86170400692483, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01954" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9974960635124, - 38.86079489154801, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

Not In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H02363" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99259102867128, - 38.92844863358593, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H02514" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99858811144134, - 38.846513115673616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02907" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91372890917275, - 38.89570302319379, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H02976" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02349137955831, - 38.931629593522736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

Not In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03110" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91488830659483, - 38.892943258230794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03216" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03207439428094, - 38.894753239540144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03569" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03210933995463, - 38.89420376454046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

Not In Service


Last Inspection Date: 12/14/07

Report Problem", - "NAME": "H03571" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08984295641454, - 38.92389463648992, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 02/19/08

Report Problem", - "NAME": "H03846" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99973408710572, - 38.8592151743981, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

Not In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03972" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02611904840202, - 38.89309439050424, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

Not In Service


Last Inspection Date: 02/08/08

Report Problem", - "NAME": "H04031" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01362136786202, - 38.91814722262231, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H00541" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01349750327192, - 38.917126106792715, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/20/07

Report Problem", - "NAME": "H00542" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01069416546065, - 38.917051321550225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/18/07

Report Problem", - "NAME": "H00543" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98456614591932, - 38.891509061074494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/01/06

Report Problem", - "NAME": "H00544" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00596500742333, - 38.90362535603583, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00545" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97431451221271, - 38.93217484609292, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/30/07

Report Problem", - "NAME": "H00546" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05530269530544, - 38.926836501875435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 02/04/08

Report Problem", - "NAME": "H00547" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01222712033929, - 38.91326101385692, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00548" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01066007478472, - 38.91254226596518, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00550" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01410302035261, - 38.9148683670127, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00551" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97905819445877, - 38.889579267396854, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H00552" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01060315063076, - 38.918052524624756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00553" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02081744766905, - 38.89282415955387, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00554" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0580317373795, - 38.904185188942485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00555" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05876849720363, - 38.90413805829549, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H00556" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00064318580094, - 38.90117898157355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H00558" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03864316498213, - 38.91042496027107, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H00559" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00357821847021, - 38.897471673295854, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00560" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00358232493264, - 38.89821155696173, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00561" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01705764608303, - 38.86377615224299, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00562" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0716960615629, - 38.96484371625319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00563" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02283656023243, - 38.914151121175266, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H00564" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01765757602736, - 38.88802508136319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H00565" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04728176774067, - 38.91762893071494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H00566" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03699845762682, - 38.935420954181026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H00567" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01062421523633, - 38.92027888571206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00568" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98753047577941, - 38.91386381710404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00256" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00380763913427, - 38.87318300584154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00257" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98032630731235, - 38.91728943401489, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H00258" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97884164849171, - 38.917360439522476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H00259" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01143896297877, - 38.93683360770177, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00262" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98487039704727, - 38.917215395627416, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H00263" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98530576893822, - 38.917790389827125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H00264" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98572468372815, - 38.916337262896796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H00265" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9862242551418, - 38.91664589425007, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H00266" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9868049342536, - 38.91642178893458, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H00267" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98694665721162, - 38.916751473748825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H00268" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98649088696031, - 38.916933399241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H00269" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9864570392697, - 38.91744240202542, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H00270" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94719326544984, - 38.87220963464331, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00272" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99634567566413, - 38.94269296839883, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00273" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99727526617477, - 38.94268893102567, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00274" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95962196848646, - 38.873663784124524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00275" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01576688218383, - 38.87062427474521, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H00276" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01600386090753, - 38.870003293131596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H00277" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03672557398609, - 38.89188592903099, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00278" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94371693141385, - 38.867505883405656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00279" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01587309197622, - 38.863621897025915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00280" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01601303214005, - 38.866915912225586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00281" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95679786057359, - 38.871216829973505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00283" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92283554447167, - 38.883606961818316, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H00284" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97953430553923, - 38.84876394454315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00285" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99220698796537, - 38.90754303362449, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00286" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99431295277785, - 38.90823575276111, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00287" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0218231958979, - 38.89826036264599, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00288" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9957448593338, - 38.90712098582479, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00289" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92957016309505, - 38.885231086982714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H00290" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01475614091855, - 38.92943572517179, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00291" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99861660534545, - 38.90624099360779, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00293" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97991711111005, - 38.85057043674555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/30/07

Report Problem", - "NAME": "H00294" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07589836785253, - 38.93573911403619, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00296" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08869950161862, - 38.93814995551608, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00297" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98716679418177, - 38.85734559990636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H00298" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99272928621342, - 38.95636171296229, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00299" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02818482633154, - 38.88369634398283, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00300" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96897278522113, - 38.8531391199942, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00301" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96750467981876, - 38.85346269981682, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00303" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00813961377256, - 38.85060081548807, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/13/07

Report Problem", - "NAME": "H00304" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10755770729163, - 38.937131878087186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00305" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10704444237716, - 38.936322340626795, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H00306" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00918229614138, - 38.941318270327784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00307" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0091695963797, - 38.89674687962059, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/01/08

Report Problem", - "NAME": "H00308" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10705187431056, - 38.93604077025528, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H00309" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9992170519996, - 38.845839551419765, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/25/08

Report Problem", - "NAME": "H00310" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00297270660255, - 38.910666916886385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00311" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0021802943481, - 38.91118632825825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00312" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01025315333591, - 38.935422180428716, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00313" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05537847533314, - 38.974384806254754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00314" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97548607624007, - 38.86427141378945, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00316" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0102462601637, - 38.934487686969774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00317" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99933858727306, - 38.92361853570536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00319" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00476454428953, - 38.910784911867616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H00321" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01347708245554, - 38.872523830158, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H00322" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06869665102082, - 38.92534159147757, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H00323" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04250828420079, - 38.909232246583436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00324" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01889359503039, - 38.86400139527415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H00325" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02369294362221, - 38.88295690634461, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H00326" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09036995997808, - 38.93650697620551, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00328" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95618281048186, - 38.920639360080045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/29/07

Report Problem", - "NAME": "H00329" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95666317316294, - 38.92979609799884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H00330" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01537305124363, - 38.8973986676926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00331" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03533097937942, - 38.87670357453863, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00332" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03786925162169, - 38.897017243828905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H00333" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03733396338757, - 38.903825654245956, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00334" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03296804929205, - 38.87723707604876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00335" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03446942063209, - 38.87831786608508, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00338" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03782073426443, - 38.8781924770099, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00339" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0155628569985, - 38.92646573306782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H00340" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00892532376703, - 38.90917472421178, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H00341" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00920006603344, - 38.941902519530075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00342" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.029820202144, - 38.89616771783067, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H00343" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9806906561109, - 38.86216415983844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00344" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96786732214434, - 38.85145323507563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/26/07

Report Problem", - "NAME": "H00345" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96911550152376, - 38.85260936294394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00346" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04562391113357, - 38.943920923827434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H00069" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02884428137328, - 38.899911612945864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00070" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08919221658242, - 38.92148126406963, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/11/07

Report Problem", - "NAME": "H00071" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10044024780534, - 38.949247985252605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00072" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01434253792667, - 38.93896985697751, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00073" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01072271592771, - 38.91912094646436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/03/07

Report Problem", - "NAME": "H00074" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05140781738709, - 38.89400154628643, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H00075" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99480532988413, - 38.90716527790467, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00076" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96168329394388, - 38.867990570706105, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H00077" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08196384915904, - 38.95393408182062, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00078" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01399817662542, - 38.900671766939126, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00079" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99350470928859, - 38.90571236448279, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00080" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03627823127259, - 38.93326317810749, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H00081" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96990073641807, - 38.853823634337516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00082" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96922712112944, - 38.85373850021674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00083" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96801989576917, - 38.85369475513178, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00084" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96792129365996, - 38.852814919623896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00085" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01122783997911, - 38.83318230245883, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H00086" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01116943985605, - 38.82960423673855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H00087" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01267011779255, - 38.82629812897775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00088" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00137512739475, - 38.88765957778442, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 01/31/08

Report Problem", - "NAME": "H00089" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01275345631849, - 38.81711423940579, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00090" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03217511870507, - 38.89835366598179, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H00094" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95786118894493, - 38.85655241831205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/27/07

Report Problem", - "NAME": "H00100" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01409014267682, - 38.892233206687834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00101" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00410454472694, - 38.85944279942364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/24/08

Report Problem", - "NAME": "H00102" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96852551838799, - 38.85144440594919, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00103" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03181484685275, - 38.90512353532609, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H00104" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03086053488764, - 38.91922655336539, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H00106" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97588963989415, - 38.851132755659265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00107" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0767485924733, - 38.937601295254325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00109" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9770972901543, - 38.849803858246176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00110" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01448334419943, - 38.892263462756794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00111" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07438465119466, - 38.93626089311794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00112" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96856560928313, - 38.85196747343772, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00113" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07814558270415, - 38.93855273593855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00114" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01024814055796, - 38.936255772818505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00115" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04671075337184, - 38.90471109966362, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/03/07

Report Problem", - "NAME": "H00116" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98018379838011, - 38.84270567203858, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H00117" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94751942978968, - 38.88420063031798, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H00118" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99357708817912, - 38.84477729096918, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00119" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96186241344085, - 38.87386676687686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H00120" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94004624971504, - 38.888246679549276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H00121" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95425937955709, - 38.87464137127418, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00122" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95537249147377, - 38.87455030363314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00123" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00298434436891, - 38.82506546490317, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H00124" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97938931186481, - 38.86238359863203, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00125" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98201825306879, - 38.85228714716915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00126" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93777143950871, - 38.87524685211913, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00127" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98837569652838, - 38.880297887520015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00128" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97771001006961, - 38.86754646236409, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00129" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96692471794726, - 38.84980654513702, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00130" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98090277857703, - 38.865174987341696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00131" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97084763145918, - 38.87268148076737, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00132" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98375701162509, - 38.86891795431268, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H00133" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98037972997913, - 38.84557619192893, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00134" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93800802719893, - 38.883210911238, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H00135" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98524563899609, - 38.860024901296775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00136" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9506005301701, - 38.87180333326891, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00137" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9532239833161, - 38.88368123450846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H00138" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96197631902415, - 38.869233484548666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H00139" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07716348694093, - 38.934740517019485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00142" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07839208956898, - 38.93675254156028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00143" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07824937420085, - 38.93973405954898, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00144" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01418898467888, - 38.892283668625964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00145" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.011409409811, - 38.934438330832734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00146" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07791650819983, - 38.925749713392534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00147" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98876879161352, - 38.876270399626904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/18/06

Report Problem", - "NAME": "H00149" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05244606758697, - 38.96160427976706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H00150" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98002742095711, - 38.88283768216455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/26/06

Report Problem", - "NAME": "H00151" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00011864938733, - 38.876478916455284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00152" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01229212334901, - 38.83161182222366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H00153" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10036145753229, - 38.94706963388548, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00154" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97871037060538, - 38.8647029186449, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00155" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98684375657275, - 38.90124365223176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H00156" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03907844803614, - 38.989393503894014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H00157" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05459386424639, - 38.97493890217225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/21/07

Report Problem", - "NAME": "H00158" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97431139178099, - 38.88747110735175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/06/06

Report Problem", - "NAME": "H00159" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92888796611612, - 38.8830643548754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H00160" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95230945556914, - 38.86365794542221, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/07/08

Report Problem", - "NAME": "H00161" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01145551537157, - 38.93482911542911, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00163" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97587730476666, - 38.88494169875132, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H00164" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97601809412953, - 38.88575813039, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H00165" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97508266360155, - 38.8858589996089, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H00166" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00499639843575, - 38.90895532585457, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H00167" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95350539572817, - 38.863316423222805, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/26/07

Report Problem", - "NAME": "H00168" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04782306063719, - 38.89741051957247, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H00169" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01518868806883, - 38.863994702229185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H00170" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01087636205634, - 38.94190102433504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00172" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9297421383169, - 38.88445997368586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/18/08

Report Problem", - "NAME": "H00173" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00399840817738, - 38.91066981399904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H00174" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9879116750212, - 38.91663473050051, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H00176" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98578460926737, - 38.92229680993157, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/25/07

Report Problem", - "NAME": "H00177" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01079902681498, - 38.94072699013935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00178" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03328945585672, - 38.91562460835372, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/01/07

Report Problem", - "NAME": "H00180" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96105167707513, - 38.89247180719127, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H00181" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97401398306715, - 38.88256312153113, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00182" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97355180925192, - 38.88239338085669, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H00183" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97388070108195, - 38.88181441375457, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H00184" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93790051446518, - 38.89028596502925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 11/26/07

Report Problem", - "NAME": "H00185" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97532470681075, - 38.88226215634162, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00186" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93498955252282, - 38.896603375266864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/15/07

Report Problem", - "NAME": "H00187" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9406267442465, - 38.89182535536861, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00188" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94150203726983, - 38.891825571780615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00189" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94256043501382, - 38.89138156080858, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H00190" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93768796897564, - 38.891124315390975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00191" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92984053568262, - 38.90131258081229, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00192" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96014255603326, - 38.88999564820024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, USP

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H00193" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93762449042534, - 38.90069668953318, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H00194" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92740120700508, - 38.89922650165815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00195" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93616273371121, - 38.90442165709111, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00196" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92808163404881, - 38.89469275059905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, USP

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00197" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92998761313903, - 38.889932793951, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H00198" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06869847175086, - 38.92534016709285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00199" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02980271376337, - 38.89842786659362, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H00200" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02933363140882, - 38.89843036352863, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00201" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97055289101735, - 38.86390449620404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H00202" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98373254958011, - 38.85612086378365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00203" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03690126059846, - 38.897222574965035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H00204" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03611144749854, - 38.89717469009673, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H00205" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03589500139472, - 38.897676108255936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H00206" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02606614777152, - 38.90630553957762, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00207" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98507420812717, - 38.85412452308332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00209" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0173067810556, - 38.94217394797017, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00211" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03839435134978, - 38.917538114824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H00212" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05821410178804, - 38.95227231287798, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00214" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93528487102279, - 38.89934459522741, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H00216" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00597057035456, - 38.96636700239988, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00217" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06890241705057, - 38.94419414644325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Centurion

In Service


Last Inspection Date: 11/10/05

Report Problem", - "NAME": "H00218" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0055542916195, - 38.8495445208484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00219" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0129859458632, - 38.92879006643523, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00221" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0373985480442, - 38.91622795073391, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H00222" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06776439944746, - 38.94213282339662, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H00223" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07600587709034, - 38.93826107090418, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H00225" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07464539247651, - 38.93693514232407, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/02/07

Report Problem", - "NAME": "H00226" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02823805697693, - 38.89824261997391, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00227" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05934433393793, - 38.912457984493045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00228" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0758885368004, - 38.95772215084292, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00229" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01143304842086, - 38.94080497767452, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00230" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00793189101918, - 38.829123548710456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H00231" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08084565509309, - 38.938359914690835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00232" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94083540044919, - 38.89508179812879, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H00233" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94102513008227, - 38.893729026171556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00234" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94123945077173, - 38.89248856432943, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00235" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94309501188107, - 38.893190064075576, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H00236" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95303850482532, - 38.8915753650969, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/28/06

Report Problem", - "NAME": "H00237" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00882879162891, - 38.91061905710018, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00238" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00181283627983, - 38.83464268527077, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00239" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96964749770346, - 38.86249699656329, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H00240" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09295776572175, - 38.9161181284181, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00241" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01446994649278, - 38.900657881629506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00244" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01063328287496, - 38.90243995748425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00246" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00079662454145, - 38.83268450077431, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00247" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9464390539857, - 38.89090581570778, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00248" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94478835184364, - 38.903767559143944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00249" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02012199961224, - 38.89621957115775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00250" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00720972052048, - 38.83390272006717, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/22/07

Report Problem", - "NAME": "H00251" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00010156022566, - 38.84515275035851, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00252" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99944051392958, - 38.92569877302764, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00253" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01208031394737, - 38.90787046469469, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H00255" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00866705467641, - 38.883805019399325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00527" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08187605088469, - 38.95338970142369, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00528" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05275825743661, - 38.917043008718245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/15/06

Report Problem", - "NAME": "H00529" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0351353106222, - 38.91816395795987, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H00530" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03887333368164, - 38.922267472073464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H00531" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00959026346318, - 38.9213528484761, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00532" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06903003675079, - 38.9107348449838, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H00533" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06291833562312, - 38.90264884291127, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H00534" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0238248431285, - 38.918309314133154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/02/07

Report Problem", - "NAME": "H00535" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00928441127117, - 38.89727314814548, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00536" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04172793539733, - 38.925516563401246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00537" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01211642021528, - 38.86474831802853, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H00538" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01210907436096, - 38.87449229747678, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00539" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98525877404899, - 38.866717984758424, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H00540" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95217414060144, - 38.85961233496263, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/27/07

Report Problem", - "NAME": "H00429" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92687672045909, - 38.8885028797306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/16/08

Report Problem", - "NAME": "H00430" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95130901968231, - 38.8602779340048, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00433" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99170733798083, - 38.83177770542, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H00434" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92716397720932, - 38.88491508350542, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H00435" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92955533814974, - 38.88730015048535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H00436" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99006439803618, - 38.830060708127355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00437" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9672844518499, - 38.854389912092174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H00438" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98626578239839, - 38.86482887235028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00440" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97210596775659, - 38.871568556724625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00441" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98714488667319, - 38.85104297586446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/04/07

Report Problem", - "NAME": "H00442" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09222814167765, - 38.9140042243332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00443" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04014351051762, - 38.920703287681384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/18/07

Report Problem", - "NAME": "H00444" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04691221619966, - 38.92842015730996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/09/06

Report Problem", - "NAME": "H00445" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98862110852838, - 38.865636657788876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00446" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00991295946864, - 38.88456260644426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00447" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98097328380578, - 38.92901800516747, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H00448" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03949788537298, - 38.89820151146847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00449" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08309822228358, - 38.95583880029729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00451" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00016916398467, - 38.93615738291501, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00452" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99731516469797, - 38.90443831907664, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H00453" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0473504826842, - 38.91886420614517, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/31/06

Report Problem", - "NAME": "H00454" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03295566411798, - 38.89653415540334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00455" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03389096640534, - 38.89747251427745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00456" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03387295099684, - 38.89793909864431, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H00457" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.031864567533, - 38.89757868061877, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00458" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02386963411597, - 38.89785670310835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00459" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02607378039431, - 38.89719134270353, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H00460" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0260855407902, - 38.896692682102554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00461" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02176073511433, - 38.896211268952726, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00462" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02086210386048, - 38.89621576591644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00463" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07727501880086, - 38.96584663625259, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00464" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02545588300819, - 38.89409276329198, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00465" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01201875853117, - 38.942084168068654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00466" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01121533486227, - 38.941207345033476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00467" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99015250140971, - 38.90288808388267, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H00468" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00578517133305, - 38.90264670657341, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H00469" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01124529457459, - 38.94305895974434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00470" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04058153724093, - 38.89742157434607, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H00471" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0407174157212, - 38.89825063876422, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/22/07

Report Problem", - "NAME": "H00472" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06092418606342, - 38.934669197263865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H00474" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06857756478493, - 38.93261656788015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/25/08

Report Problem", - "NAME": "H00475" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02817853997549, - 38.895736840863236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00476" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0258225598813, - 38.89621380182162, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00477" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03659642809735, - 38.922561392155025, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H00478" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07670766441386, - 38.96716455620272, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00479" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0241586426541, - 38.89743017880579, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H00480" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03919622241256, - 38.92887361359118, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - JUMBO

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H00481" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03901413927103, - 38.92461154334142, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H00482" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02207583073152, - 38.89621359704856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00483" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06081355906596, - 38.933539424399484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/22/07

Report Problem", - "NAME": "H00484" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05861137787707, - 38.93352747841943, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/01/06

Report Problem", - "NAME": "H00485" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02530127041605, - 38.944088112135255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H00486" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99609624521014, - 38.88489097510951, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H00487" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03357254807193, - 38.9254748068058, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H00489" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04146675127683, - 38.93061303739658, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H00490" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03479306358672, - 38.93382801788214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H00491" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02280657678641, - 38.89387341630787, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00492" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97224782585256, - 38.92463332653775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H00493" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00849093256782, - 38.88913373237844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H00494" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00849101342658, - 38.889135191729466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H00495" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03531538315417, - 38.94830092313481, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H00496" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98723919459903, - 38.90715805736616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 02/08/08

Report Problem", - "NAME": "H00497" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0284065576634, - 38.93578323967515, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H00498" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03322413239843, - 38.88710630441911, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00499" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99958513570448, - 38.9167148535573, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H00500" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01058191558528, - 38.873091729747365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - JUMBO

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00501" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99017389550977, - 38.879476928858466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/08/07

Report Problem", - "NAME": "H00502" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06493506387731, - 38.934591539194955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H00503" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01061684626094, - 38.914776931836116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00504" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02335471479023, - 38.940975658402245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00505" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02317612065625, - 38.93973212634408, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H00506" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98093954908359, - 38.88971702131883, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H00507" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01751320993249, - 38.94000700008668, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H00508" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05489077157895, - 38.91551923072498, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H00509" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98690928232688, - 38.879830899565206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/05/07

Report Problem", - "NAME": "H00510" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98803484510809, - 38.86125526613529, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H00511" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01930052394003, - 38.931424493893914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/08/07

Report Problem", - "NAME": "H00512" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01071714309293, - 38.8852602076266, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/10/08

Report Problem", - "NAME": "H00513" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98237317635046, - 38.881212298090894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/17/06

Report Problem", - "NAME": "H00514" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98094933322828, - 38.881349650627, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/17/06

Report Problem", - "NAME": "H00515" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99143154390538, - 38.886706959824046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H00516" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98372533177708, - 38.89550844659728, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - JUMBO

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H00517" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98624058132604, - 38.89483897087784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H00518" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07101762896404, - 38.93621500016529, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/20/07

Report Problem", - "NAME": "H00519" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07829633267208, - 38.96583511092745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00520" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0578063566818, - 38.92876439380731, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/09/07

Report Problem", - "NAME": "H00521" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0207455996933, - 38.89314136605035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00522" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02003091776506, - 38.89346029698376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, UNKNOWN

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00523" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0268386306364, - 38.89972459094567, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H00524" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02825325281327, - 38.89990688385605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00525" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03253507965007, - 38.93766094301866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/31/07

Report Problem", - "NAME": "H00526" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98359301309151, - 38.88295557169683, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/26/06

Report Problem", - "NAME": "H00570" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03689006232764, - 38.906954908845705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00571" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01112939055602, - 38.91181116849666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00572" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07277946390602, - 38.96666344297844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00573" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07490356453572, - 38.964033467224915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00574" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07437660945044, - 38.96743807511667, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00575" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99514272375718, - 38.88754138504495, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 10/23/06

Report Problem", - "NAME": "H00576" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98371942418198, - 38.879166859296646, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/19/08

Report Problem", - "NAME": "H00577" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02582003684756, - 38.95418408733482, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H00578" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98534863294992, - 38.88987979030678, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/21/06

Report Problem", - "NAME": "H00579" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99368737806073, - 38.880292782272456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/25/08

Report Problem", - "NAME": "H00581" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02193222762705, - 38.9208724995467, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H00582" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0084327047177, - 38.913252620228725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00584" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00810064099802, - 38.91435520999397, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00585" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03516499770826, - 38.92187097438736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00586" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00722343538322, - 38.91687207863701, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00587" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07248948360254, - 38.93733245905578, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H00588" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02332961738753, - 38.938762172867094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H00589" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04062544590344, - 38.89908033187001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H00590" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03263089798043, - 38.939633318451996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/29/07

Report Problem", - "NAME": "H00591" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97412329737345, - 38.931228832661596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H00592" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03254573050256, - 38.932440854950336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/07/07

Report Problem", - "NAME": "H00593" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06374874040749, - 38.9084903267896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00594" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05907340453584, - 38.908541267108774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00595" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00471936337394, - 38.91190453325423, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00596" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02300846873308, - 38.900999982666754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00597" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03959710316732, - 38.8944165321469, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H00598" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03960246125648, - 38.89339524251815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H00599" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01829160326582, - 38.900982277219185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H00600" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99074778614116, - 38.90420289262141, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H00601" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0702573109951, - 38.90438443464286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/11/07

Report Problem", - "NAME": "H00602" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07531740639138, - 38.93333074137175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/14/08

Report Problem", - "NAME": "H00603" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04175557754553, - 38.89845483419036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00604" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01549171011582, - 38.9206655106053, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H00605" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0489028204688, - 38.89813239916177, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H00606" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01546681279963, - 38.94006880640176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00607" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01629597759893, - 38.94004647929922, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00608" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07689390504922, - 38.92622565158503, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00609" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07477146559653, - 38.926238289187225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00610" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07454940357962, - 38.92739184697904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00611" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03255194075274, - 38.92060408911481, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H00612" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02460004799546, - 38.93876801101417, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H00613" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9914631784084, - 38.89368032658183, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/16/06

Report Problem", - "NAME": "H00614" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01625880008766, - 38.8996281351377, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H00615" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02203469935738, - 38.88553661951162, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00616" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99965038348607, - 38.9013821122493, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H00617" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97641196847428, - 38.93020882882853, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00618" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97913171479412, - 38.88861893360989, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H00619" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99581682191103, - 38.857838585699376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H00620" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99537035242629, - 38.85879395718681, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00621" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97893632675547, - 38.88418446924292, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/26/06

Report Problem", - "NAME": "H00622" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9917479239196, - 38.86407133943828, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H00623" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98804834503095, - 38.92671355351125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H00624" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0742129963924, - 38.963027784738486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00625" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99270276919138, - 38.884955393486855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H00626" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9901511706112, - 38.88672565035966, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/09/06

Report Problem", - "NAME": "H00628" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98217278014079, - 38.867129824301315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00629" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99257693968177, - 38.877116249773486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 11/06/06

Report Problem", - "NAME": "H00630" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99369801143564, - 38.88203683386349, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/13/08

Report Problem", - "NAME": "H00631" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99966281188446, - 38.886586858611366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/28/07

Report Problem", - "NAME": "H00632" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99956742604682, - 38.88600130456793, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/10/06

Report Problem", - "NAME": "H00633" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99479350035581, - 38.87921400998166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H00634" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99736034874054, - 38.88132362686992, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/05/07

Report Problem", - "NAME": "H00635" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01072881291074, - 38.92231983796973, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 10/25/07

Report Problem", - "NAME": "H00636" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00188848819498, - 38.877471257018776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00637" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0075131256187, - 38.885119557566796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00638" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00594694070963, - 38.87913586286285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00639" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00744812762868, - 38.90473386568645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00640" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04704042398917, - 38.91373197778027, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00641" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0269677359348, - 38.94723847639023, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 02/15/08

Report Problem", - "NAME": "H00642" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99032265856465, - 38.88423614437471, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 10/27/06

Report Problem", - "NAME": "H00643" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03175208334801, - 38.93322537228224, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H00644" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98358992951349, - 38.885237998472206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/24/07

Report Problem", - "NAME": "H00645" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03259401271161, - 38.933911284974236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00646" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02975734138879, - 38.90511948323334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00647" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00210297107746, - 38.88879206410491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H00648" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02695601930422, - 38.94724846026628, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H00649" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98235601331686, - 38.88415702883303, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/26/06

Report Problem", - "NAME": "H00650" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99287735931316, - 38.906567148130286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00347" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99220802648185, - 38.90700737938312, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00348" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00932069359708, - 38.927217222583195, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00349" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99243417218278, - 38.90670031770109, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00350" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01130272309352, - 38.92825757988901, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00351" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01845705247615, - 38.8765884684711, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00352" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99151815785021, - 38.90632797580559, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00353" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04767391193084, - 38.92883585294763, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/11/06

Report Problem", - "NAME": "H00354" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99130658219315, - 38.906636550222906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00355" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99110082719848, - 38.90694361128114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00356" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98973248345513, - 38.908454991405186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00357" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9896338844959, - 38.909235690844014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00358" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0130787064562, - 38.92810877550604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00359" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99270329545742, - 38.90956295273197, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00360" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99317734354747, - 38.90880953252853, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00361" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99201826830638, - 38.90728973320711, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00362" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01305669927427, - 38.92752707518816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00363" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01166529362663, - 38.92884343582412, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/25/07

Report Problem", - "NAME": "H00364" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99719344538849, - 38.92077274793784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00365" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09652327436493, - 38.91717414947395, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00366" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96727508938005, - 38.85272271013205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H00367" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.965226811923, - 38.92542641437083, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00368" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01450243368396, - 38.92821858998992, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00369" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0835746938527, - 38.956779626398635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00370" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01398314030503, - 38.92888344863874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00371" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0208161333214, - 38.88128750672352, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00372" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01080895255856, - 38.90728983015717, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00373" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96536542177824, - 38.918748045339555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/01/07

Report Problem", - "NAME": "H00374" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0103814941828, - 38.93021411718099, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00378" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99615314705265, - 38.95630614162345, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00379" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96244490115862, - 38.87277754265664, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00380" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01676474746395, - 38.92876837089944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00381" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01130702201235, - 38.94191306358582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00382" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05607500744702, - 38.973957646256444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00383" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01243921658218, - 38.876346839562224, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00384" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01220696659455, - 38.94183242095408, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00385" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01228434161513, - 38.94189081358332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00386" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01921141820215, - 38.97739866543538, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/12/07

Report Problem", - "NAME": "H00387" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01111740753674, - 38.894925110940825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00388" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01048697759512, - 38.9418325879154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00390" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98212112473459, - 38.89669873957552, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 10/30/07

Report Problem", - "NAME": "H00391" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96934599296084, - 38.851965518930356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H00392" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03447981496605, - 38.8759785719446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00393" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01114720644023, - 38.942438694526075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00394" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08953570644644, - 38.93584287756872, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H00396" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01084556711778, - 38.94283343902372, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00397" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10159511332704, - 38.9468704670706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/24/08

Report Problem", - "NAME": "H00398" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03147854420091, - 38.877481353284985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00399" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06629844889184, - 38.942441981768084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 04/26/07

Report Problem", - "NAME": "H00400" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06781608380881, - 38.94377777007308, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 01/26/07

Report Problem", - "NAME": "H00401" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.016392499733, - 38.92961197089285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00402" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92790652307717, - 38.883604445635456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H00403" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02053614988436, - 38.915516914349716, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00404" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97002822541879, - 38.9300446670204, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H00405" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01137549088142, - 38.929678741932676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00406" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01002664703468, - 38.94204296283392, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00410" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03625981526396, - 38.977766274729134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H00411" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00924672621241, - 38.942801353788425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00413" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95871870489547, - 38.92377463928698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H00414" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00994039988291, - 38.942704637938846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00415" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10776974802998, - 38.933626704075415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H00417" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00939868261503, - 38.92988479352073, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H00418" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1141503737422, - 38.935383194175174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H00419" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93136381320559, - 38.88685685273269, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H00420" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11283075780725, - 38.93548727828825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H00421" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98273611208353, - 38.8546444285413, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/04/07

Report Problem", - "NAME": "H00422" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02287368070186, - 38.90783555532735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00424" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10133848008398, - 38.94624790197279, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00425" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94180239725716, - 38.868618078148785, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00427" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01307372771403, - 38.942405911958566, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00428" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97111302680491, - 38.870795934741, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00816" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02761138063899, - 38.951921980805395, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H00817" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02988723304331, - 38.950863480632385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H00818" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03486283339551, - 38.954119385323146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H00819" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03333417147122, - 38.95067959959026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H00820" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02833000238368, - 38.94514844910206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H00821" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99736081420201, - 38.89896419458266, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00822" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03080718503574, - 38.93642993191747, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - JUMBO

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H00823" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04137017307245, - 38.92981850270133, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H00824" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03794247041503, - 38.92546511903166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H00825" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06651433472665, - 38.96979780068285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H00826" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07451311114325, - 38.969463086641134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H00827" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07570320304505, - 38.968546382062804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00828" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03081572054886, - 38.935496588797925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - JUMBO

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H00829" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0281024642312, - 38.94608351869913, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H00830" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0268001813721, - 38.94620425622486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H00831" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02988084988567, - 38.94617651155082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H00832" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99162629589053, - 38.888996390132725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00833" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05127620162818, - 38.89952148885242, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H00834" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01483064544254, - 38.918686422040935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/28/07

Report Problem", - "NAME": "H00835" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99204494183824, - 38.90475405601698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H00836" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0760366156829, - 38.94852421256546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00837" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07747882052871, - 38.951499060052555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, Metropolitan

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H00838" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07806369706799, - 38.94746234961837, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H00839" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01527261442573, - 38.91405865894837, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00840" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99627591930884, - 38.89550662022172, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00841" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99829557757407, - 38.8955072526926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H00842" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02269116104476, - 38.92422673833953, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00843" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00331141114258, - 38.90846845772506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00844" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07204917019278, - 38.961056122840226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H00845" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0250784294348, - 38.93096700005812, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H00846" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08024236257697, - 38.956020266925755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H00847" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08196504045424, - 38.9560536366489, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H00848" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08196270809631, - 38.95692493584346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H00849" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0722209293094, - 38.90774716292588, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00850" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07345875370999, - 38.90771332157698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00851" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07466530957848, - 38.96104214920701, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00852" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97606451668062, - 38.92837233305071, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 12/04/07

Report Problem", - "NAME": "H00853" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02088739795322, - 38.97587174488227, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/12/07

Report Problem", - "NAME": "H00854" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07724169280054, - 38.96404571970071, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H00855" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07981623966808, - 38.96406173692394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H00856" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0215177285729, - 38.942055402241564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H00857" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01615607764515, - 38.940929617522166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00858" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97790173749411, - 38.86435560214066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00859" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07285048879902, - 38.96313265987557, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00860" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03244726875441, - 38.90597957804404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00861" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9871504502469, - 38.93718986540383, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H00862" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97398010673248, - 38.928588924825554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/05/07

Report Problem", - "NAME": "H00863" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06848872802077, - 38.933546898735806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/14/08

Report Problem", - "NAME": "H00864" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09044072646705, - 38.95474165690618, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00865" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03960509660374, - 38.892286887716025, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H00866" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01249142909948, - 38.89837604929189, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00867" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09791294282094, - 38.918241832211585, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00868" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10337071813137, - 38.92697821766792, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H00869" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10118135519639, - 38.92494747805228, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H00870" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09098982220766, - 38.91268943687518, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00871" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09835740942346, - 38.92016374695341, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00872" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01293407256973, - 38.972032667715844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00873" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97221559434684, - 38.930224923257626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H00874" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0415155843193, - 38.91552200075751, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H00875" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00537927481935, - 38.84230248961242, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00876" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9857026302258, - 38.86500605429688, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00877" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01878313883964, - 38.89989243113835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00878" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98591056676086, - 38.86430174772459, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00879" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05348645524667, - 38.926676855060656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H00880" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04895527572103, - 38.89410570064894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H00881" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0367537249266, - 38.92699648023964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/11/06

Report Problem", - "NAME": "H00882" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00334433402065, - 38.90367806922617, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00883" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02983369456861, - 38.92104346605919, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H00884" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00066942168479, - 38.925458682803686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00885" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99073939629218, - 38.86537192560533, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H00886" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02535362079801, - 38.91266687498987, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H00887" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02094017220237, - 38.92839147424518, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/13/06

Report Problem", - "NAME": "H00888" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04543976020092, - 38.934127799329964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H00889" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98931922178006, - 38.89210645105821, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 04/13/06

Report Problem", - "NAME": "H00890" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9894000134754, - 38.890713142485076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/02/06

Report Problem", - "NAME": "H00891" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9925404993397, - 38.932346975736394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H00892" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03471249738996, - 38.91034342550599, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00893" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97961865888138, - 38.931180626705576, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H00894" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06327596685209, - 38.9727529398324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H00895" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06503298529833, - 38.97269086407926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H00896" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03085709850097, - 38.92247777577873, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H00897" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0309378499679, - 38.92371343482643, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H00898" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0467341294854, - 38.93338634696887, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/01/06

Report Problem", - "NAME": "H00899" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03302555312348, - 38.92454083613538, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/05/06

Report Problem", - "NAME": "H00900" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03096021289848, - 38.92480783156651, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H00901" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03140634873986, - 38.92761182105497, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H00902" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03108952924309, - 38.9257996940437, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H00903" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03368886955771, - 38.92868649864836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H00904" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03472141704026, - 38.92861862510296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H00905" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03579146033631, - 38.92787064840089, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H00907" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02718058233971, - 38.90233640398072, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H00908" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03371620425382, - 38.93064172643669, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H00909" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03832187973492, - 38.9086342163582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H00910" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03712905045026, - 38.93075869189606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H00911" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9993832558833, - 38.90569120262682, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H00912" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03585400896552, - 38.93137047483482, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H00913" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02685787749867, - 38.907304413054646, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00914" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9936127848748, - 38.88277623759321, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 12/18/07

Report Problem", - "NAME": "H00915" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02950121154154, - 38.930650604515805, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H00917" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02872577477143, - 38.92960634730041, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/25/06

Report Problem", - "NAME": "H00918" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03181953803592, - 38.912745115962515, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H00920" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05044718973109, - 38.91679821894255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H00651" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04860836375371, - 38.90862195785906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00652" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0135072439775, - 38.90968280533327, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H00653" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01222147706642, - 38.914174225516575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00654" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97412852985852, - 38.92484975046252, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H00655" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01207167253078, - 38.9190761966528, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H00656" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98102851307308, - 38.930194823690044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H00657" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99602272247685, - 38.932446066303335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H00658" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02983651692159, - 38.94903956113759, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H00659" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03226669234711, - 38.94903643837466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H00660" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00796022039897, - 38.886857118497275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H00661" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01631439358715, - 38.90569814568789, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00662" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00819987815059, - 38.88742572881885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/05/07

Report Problem", - "NAME": "H00663" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00074031013949, - 38.88873903936953, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H00664" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99838219156732, - 38.88955703607746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/08/06

Report Problem", - "NAME": "H00665" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00209774900779, - 38.891907186920946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H00666" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0551446200081, - 38.91013571869892, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H00668" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03985262477734, - 38.91562239209743, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H00669" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02815352060524, - 38.904604756184035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H00670" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01760905858622, - 38.90851294008092, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00671" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03258517237938, - 38.9291798364562, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H00672" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03170847976189, - 38.89931333714904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H00673" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05975309290822, - 38.93563597824736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/22/07

Report Problem", - "NAME": "H00674" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06704842761827, - 38.90382319902977, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H00675" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06920830486993, - 38.90428668953538, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 11/09/07

Report Problem", - "NAME": "H00676" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06793574061754, - 38.904014609429645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/13/07

Report Problem", - "NAME": "H00677" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99631602832157, - 38.89362483664449, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H00678" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03073451170366, - 38.93461727391309, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H00679" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99136033344102, - 38.89472356908853, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H00680" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9870171388433, - 38.89088179993263, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 04/13/06

Report Problem", - "NAME": "H00681" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01143675331436, - 38.89897030373331, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00682" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0181366136296, - 38.96499577415655, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00683" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01974129301549, - 38.96500663943978, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00684" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04837279682933, - 38.916314429773294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/31/06

Report Problem", - "NAME": "H00685" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04748490780639, - 38.91658632312581, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/31/06

Report Problem", - "NAME": "H00686" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04760345898923, - 38.91553591222147, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H00687" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05073286386714, - 38.91171878072168, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H00688" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01080088623986, - 38.92125108392233, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00689" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04981244796014, - 38.911928368420995, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H00690" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04684229124072, - 38.91488207059559, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H00691" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0473066258105, - 38.91331349608546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00692" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04894287727178, - 38.911637721456394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H00693" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05015678467589, - 38.91338920257348, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00694" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00572262543777, - 38.88608182622064, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/14/06

Report Problem", - "NAME": "H00695" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04951825089607, - 38.91117242341423, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/01/07

Report Problem", - "NAME": "H00696" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97479702297635, - 38.8707998778302, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00697" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05193596666396, - 38.91331208864754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00698" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97488724676622, - 38.869602536020736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H00699" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04909121826807, - 38.910374149198795, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H00700" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00577134864527, - 38.90264829272741, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H00701" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05139202933057, - 38.912585392246704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H00702" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04867783837187, - 38.907942276232404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00703" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99041966812867, - 38.93738334397939, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H00704" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01367986739568, - 38.92086346947468, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H00705" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00479222837689, - 38.87853414635814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00706" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01883617478768, - 38.918209331479886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/22/06

Report Problem", - "NAME": "H00707" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00196492911333, - 38.913411490758584, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00708" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04193796753975, - 38.9246632023148, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00709" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08115360049952, - 38.951087320965186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00710" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08196250964956, - 38.9510835677228, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00711" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05255107323511, - 38.927720721550344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 01/02/07

Report Problem", - "NAME": "H00712" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05118960854304, - 38.927033198667196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 01/02/07

Report Problem", - "NAME": "H00713" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0552689971173, - 38.92824985932468, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/01/08

Report Problem", - "NAME": "H00714" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97299023244767, - 38.92719157399502, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H00715" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9761603492975, - 38.92759325971914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H00716" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02717051131606, - 38.92683502368891, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/06/06

Report Problem", - "NAME": "H00717" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01595140325975, - 38.913654562403, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00718" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01126835334301, - 38.89846856342125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00719" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02615824515915, - 38.918163150410834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/02/07

Report Problem", - "NAME": "H00720" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02434593750515, - 38.94415403044285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, JCF&M - O'BRIEN

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H00721" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03675991251376, - 38.91817183593261, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H00722" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9882139934856, - 38.94418448274824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H00723" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98556931625309, - 38.894687315099404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H00724" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99488466513287, - 38.90119214066332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H00725" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08024468030992, - 38.95457417699644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H00726" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08259050574149, - 38.95484507058237, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H00727" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08009923423131, - 38.95068416204505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H00728" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01470350055722, - 38.92018815319445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H00729" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9948801555543, - 38.896240442858776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00730" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01811746861144, - 38.941111585701336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H00731" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98692805158687, - 38.8887277884754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H00732" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99511043669797, - 38.89547870536883, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00733" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02719732379923, - 38.92247923433971, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/21/06

Report Problem", - "NAME": "H00734" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98564170147857, - 38.88062981281078, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/01/07

Report Problem", - "NAME": "H00735" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00577557360182, - 38.88748069884412, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H00736" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98410952649787, - 38.87844934053881, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/13/06

Report Problem", - "NAME": "H00737" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04411354958891, - 38.932551034407645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H00738" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99010264068095, - 38.9008056451461, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H00739" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04810963114737, - 38.91852316502843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H00740" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03498069774, - 38.95085758142868, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H00741" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04921929493923, - 38.9181809448933, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H00742" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98918848999021, - 38.87844813749413, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/08/07

Report Problem", - "NAME": "H00743" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98461034794515, - 38.89895210340257, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H00744" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9936504823689, - 38.903781585645035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00745" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99382318129341, - 38.891429454604264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/17/06

Report Problem", - "NAME": "H00746" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08318931485202, - 38.950960729134344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00747" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00697621720708, - 38.92682257867399, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H00748" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0087335607862, - 38.926582884437835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H00749" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03095049295443, - 38.90259915863328, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H00750" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03184143618208, - 38.89294095457767, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00751" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0770773417392, - 38.963174675990146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00752" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08047884350839, - 38.94633493774677, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00753" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07755865841051, - 38.95079337087014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 02/22/07

Report Problem", - "NAME": "H00754" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03259168889524, - 38.93463087780487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H00755" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0328165523565, - 38.93693769626933, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H00756" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08406173938262, - 38.957753647254634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00757" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0805124581247, - 38.95216677544486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00758" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00995468624028, - 38.875584877343336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00759" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08130287042992, - 38.952240114305575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H00760" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07215872338939, - 38.96404119280406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00761" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07425508711292, - 38.964953497211376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00762" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07463274323176, - 38.96586265763995, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00763" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07530113369386, - 38.96677149470722, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Centurion

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00764" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97402556881548, - 38.92241594081955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H00765" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97518271241512, - 38.92339139709763, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H00766" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97517039898017, - 38.923383602285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H00767" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0271003305908, - 38.94830526914321, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H00768" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03175978484622, - 38.920997322289296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 04/05/07

Report Problem", - "NAME": "H00769" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03071910738328, - 38.921136310668786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H00770" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02231848450276, - 38.979296218615936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00771" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02239895193948, - 38.98139980282216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H00772" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02618293472, - 38.94514650847371, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00773" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0336193813073, - 38.933572408455916, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H00774" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03291057567897, - 38.94622611721635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H00775" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03280701251039, - 38.945182167466186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H00776" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03286919244309, - 38.944064095799305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H00777" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03684059066543, - 38.90959015385614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H00778" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01633314884639, - 38.96499761641715, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00779" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02698246571457, - 38.95521961333535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H00780" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0160530607214, - 38.963830240186354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00781" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08790215799044, - 38.93544022120361, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/25/08

Report Problem", - "NAME": "H01030" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0885802377269, - 38.933611392635385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H01031" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98242552832846, - 38.92733087662477, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H01032" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99628131815844, - 38.8861419660861, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01033" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08879400215685, - 38.93138872750128, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H01034" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09418149019496, - 38.95214948243766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/13/07

Report Problem", - "NAME": "H01035" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02607688010123, - 38.92065062892319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H01036" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00429660863546, - 38.917596681837956, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01037" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07366503454432, - 38.920848889010955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00782" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02311197200497, - 38.9312850383782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H00783" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03456967680417, - 38.946192163588314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H00784" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01752308654319, - 38.91782115967092, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H00785" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05072003616347, - 38.917741480339046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H00786" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02499203325878, - 38.94175694207643, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H00787" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9700043205496, - 38.92921471628457, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00788" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97023087536384, - 38.92780060437805, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00789" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07724499887098, - 38.962103078433984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00790" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0034438296227, - 38.89106698015863, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H00791" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0276437318776, - 38.975757046540714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H00792" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01119545368773, - 38.94439719035928, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H00793" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0352027278312, - 38.89958149725826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00794" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01725604780864, - 38.90046549918429, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00795" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03380368015252, - 38.89935024246808, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H00796" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06159044574477, - 38.94112939177615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/20/06

Report Problem", - "NAME": "H00797" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03332190066826, - 38.95826442886073, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H00798" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04594972261398, - 38.91853859177208, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H00799" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97662668099572, - 38.91183928644571, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H00801" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05815709016022, - 38.91247061659439, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00802" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03831620453482, - 38.90970241868409, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/25/07

Report Problem", - "NAME": "H00803" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00715477418528, - 38.92612127057033, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/26/07

Report Problem", - "NAME": "H00804" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97338310345022, - 38.87345832211571, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00805" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00797054412702, - 38.925308793784666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00806" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00782794323808, - 38.89722115045011, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H00807" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00708180128606, - 38.89585581834181, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H00808" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97312365293529, - 38.870860951015686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00809" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9925802833101, - 38.88186748259304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/27/06

Report Problem", - "NAME": "H00810" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97493868638968, - 38.87245824729695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00811" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97489907988236, - 38.87275139921586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00813" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0073439925139, - 38.8774693027581, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H00814" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00368889906899, - 38.87834510025877, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00815" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99274255731177, - 38.90137404107174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H00991" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98923774692922, - 38.88165528208443, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/07/06

Report Problem", - "NAME": "H00992" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02175250644969, - 38.907294863283546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00993" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99623855782751, - 38.88284436498623, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H00994" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02478261045431, - 38.93978227925184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H00995" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9882218181247, - 38.90199075414977, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H00996" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98738160293496, - 38.90169605715971, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H00997" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00304288131125, - 38.84210657711564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H00998" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99674922073514, - 38.84577667489998, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H00999" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99591095222571, - 38.848576624800614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/21/07

Report Problem", - "NAME": "H01001" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98461363601996, - 38.894183292076356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01002" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03669948111862, - 38.93274326742947, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H01003" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03414805098019, - 38.93177263008724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H01004" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03548963652308, - 38.93227019155713, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H01005" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0328762150876, - 38.93127699738826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H01006" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98462473029034, - 38.89234132522096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/13/06

Report Problem", - "NAME": "H01007" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03829684485254, - 38.933363643320035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H01008" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04365062934166, - 38.90794355991402, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01009" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05521926492962, - 38.92599731754884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/09/07

Report Problem", - "NAME": "H01010" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00185804315322, - 38.89484108166827, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H01011" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01160212742568, - 38.97129560044692, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H01012" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04823235215979, - 38.91452545961899, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/05/07

Report Problem", - "NAME": "H01013" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04248321942809, - 38.93062324809139, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 01/29/08

Report Problem", - "NAME": "H01014" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01980161884329, - 38.97373306460092, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/12/07

Report Problem", - "NAME": "H01015" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0772484593844, - 38.95837626009613, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01016" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00071482574262, - 38.902585617839584, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/23/07

Report Problem", - "NAME": "H01017" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99485375203326, - 38.8451790317024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01018" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99610046779165, - 38.84516798160559, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/07/07

Report Problem", - "NAME": "H01019" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06089373324902, - 38.911261230915514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01020" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02802666834747, - 38.905750729941865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/28/08

Report Problem", - "NAME": "H01021" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10590181734473, - 38.9288197380787, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01022" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03895275313891, - 38.91867848363708, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/30/08

Report Problem", - "NAME": "H01023" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06348330088213, - 38.93468953631698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H01024" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02324743229828, - 38.936668805394945, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H01025" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97889371339274, - 38.896156474037824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01026" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02153046379266, - 38.937053815598304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01027" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02065347666459, - 38.91918660817023, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H01028" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02034003683659, - 38.937231960694426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01029" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95057939527733, - 38.8930201942944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01038" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9434106876319, - 38.901189339008056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H01039" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0019669411962, - 38.88728210024327, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/10/06

Report Problem", - "NAME": "H01041" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04701775736768, - 38.90595205703593, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01042" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00187411174693, - 38.88516672685189, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/06/07

Report Problem", - "NAME": "H01043" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97967713995875, - 38.93297493820744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H01044" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00499894837685, - 38.91704310102508, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01045" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00445025736542, - 38.837914692815225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01046" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0213581074638, - 38.97370528856168, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H01047" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04646473758444, - 38.91265866645512, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01048" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02327438509997, - 38.935989997727084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01049" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02979822981926, - 38.90571464549881, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01050" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05029444906312, - 38.89962662882252, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H01051" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98109765783735, - 38.93118043385557, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H01052" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00210404395237, - 38.88335143456431, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 01/10/07

Report Problem", - "NAME": "H01053" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01423371113836, - 38.93926456758919, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H01054" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01352986367627, - 38.94000352934251, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H01055" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04648883654312, - 38.911173920252565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01056" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01446585388359, - 38.9096964463205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H01057" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04889803446264, - 38.91266018681594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01058" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01745977582902, - 38.90649621892462, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/08/08

Report Problem", - "NAME": "H01059" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00064459995251, - 38.88289331228595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/07/07

Report Problem", - "NAME": "H01060" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03681213963031, - 38.905711583088326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/29/07

Report Problem", - "NAME": "H01061" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03997397268957, - 38.93294179939662, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H01062" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01524617188079, - 38.90951290120818, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01063" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07039277179258, - 38.90676376517887, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H01064" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07289165639922, - 38.92832674869288, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01065" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98623506690751, - 38.88643767998779, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01066" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07074745583294, - 38.92676534878509, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H01067" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98245049266036, - 38.88029939056729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01068" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06851893637447, - 38.92514746743295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01069" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03434577597278, - 38.94515193510014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H01070" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0642517009663, - 38.90523347886796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01071" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06945885833555, - 38.92602000784756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H01072" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99712003778735, - 38.90558313162535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01073" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08044711284144, - 38.9539029757847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01074" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06739588664657, - 38.92455806652047, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01075" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07059506763527, - 38.97046281998418, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H01076" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02722480428261, - 38.91562280061169, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01077" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00705099832936, - 38.91800122026909, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/01/08

Report Problem", - "NAME": "H01078" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05632355420633, - 38.91622064944444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01079" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00601439986795, - 38.91815632957647, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01080" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01003853951129, - 38.95646008550201, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01081" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06318282606173, - 38.918515626831244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01082" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98559855134397, - 38.90438597958521, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01083" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05072469617849, - 38.914857775736934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H01084" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99930690189358, - 38.90653568082517, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01085" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04403760881928, - 38.93149802805645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H01086" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99998261203325, - 38.843219295039894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01087" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10376195473017, - 38.92579351099977, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01088" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10245132485421, - 38.92445367938406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01089" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04675304939533, - 38.92064142032478, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/07/07

Report Problem", - "NAME": "H01090" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03126739178111, - 38.95846256549808, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H01091" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99271121092832, - 38.88423067860804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H01092" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99968826612712, - 38.88549325027117, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H01093" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01714746631139, - 38.911077792000114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01094" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02099283069813, - 38.908490824132535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H01095" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0162303436936, - 38.91272933173848, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/30/07

Report Problem", - "NAME": "H01096" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98099700989233, - 38.882096615884365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01097" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99270877032149, - 38.88352625884904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H01098" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01206770019631, - 38.9180210696043, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01099" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96487669838466, - 38.87104558704628, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H01100" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04163387392822, - 38.89364972525527, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H01101" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04165868958425, - 38.89267844292344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H01102" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04083570445405, - 38.892230756222006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H01103" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05336016120515, - 38.903449730904676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01104" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03466550910261, - 38.95192067850163, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H01105" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02095068622666, - 38.97744299354791, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01106" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02605284269748, - 38.91422736149244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H01107" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99159379851616, - 38.892751284903305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/22/06

Report Problem", - "NAME": "H01108" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07774476196049, - 38.952706226427104, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01109" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00945227234384, - 38.96021602015782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01110" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9996852059546, - 38.9181614204952, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H01111" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07105760964761, - 38.91457700196526, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01112" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04015338137422, - 38.92574120589587, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H01113" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03660477102156, - 38.91668587040987, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01114" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98428969052102, - 38.92897056480209, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01115" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98621858165949, - 38.92888001340834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 03/07/08

Report Problem", - "NAME": "H01116" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98849020783051, - 38.92874746768866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H01117" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03610388193282, - 38.95830277983555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01118" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99623378515828, - 38.90273608891848, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H01260" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03784493973886, - 38.91548759226401, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01261" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0339911604111, - 38.8964932309644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H01262" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03461169584533, - 38.896333663756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H01263" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0346881138083, - 38.94967780984984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H01264" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03505196427452, - 38.897636817538846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H01265" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03506423683316, - 38.89720538532162, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H01266" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06126172689633, - 38.902658587561895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01267" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0385204501002, - 38.92796907942228, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/24/06

Report Problem", - "NAME": "H01268" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01744683670653, - 38.884753350369856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01269" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10245099692925, - 38.92574250041143, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01270" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05057597228914, - 38.915732621584645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/31/06

Report Problem", - "NAME": "H01271" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99257393611859, - 38.89346414757438, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/16/06

Report Problem", - "NAME": "H01272" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00134054455694, - 38.88988766496422, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H01273" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0287532997781, - 38.93977761350051, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/01/07

Report Problem", - "NAME": "H01274" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02821991187203, - 38.93892302761489, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H01275" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03893123182971, - 38.92722597362507, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01276" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02211030576565, - 38.9346959742425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H01277" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03505864228194, - 38.896705476847394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H01278" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99479131113755, - 38.8774704444705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/07/06

Report Problem", - "NAME": "H01279" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02814783313852, - 38.907370870262305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 01/28/08

Report Problem", - "NAME": "H01280" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02301353427221, - 38.899942202257186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H01281" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01878796832919, - 38.90728654943058, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/04/08

Report Problem", - "NAME": "H01282" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06648399581624, - 38.96486080367615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H01283" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02980330962586, - 38.918065384007974, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01284" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02718157551762, - 38.918163889752904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H01285" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99728667693809, - 38.88685488993583, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/07/06

Report Problem", - "NAME": "H01286" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03133349487597, - 38.97944122809842, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01287" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05487479411555, - 38.90368554364328, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01288" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07073322685143, - 38.93352231152344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H01289" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01235997090174, - 38.965012778328564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H01290" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01376165638007, - 38.96500091104376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01291" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0697614609087, - 38.92475083468198, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H01292" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02949243392233, - 38.90845306252808, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01293" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0734675858721, - 38.96393850343997, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01294" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02981463399068, - 38.90728262542809, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01295" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9944952806497, - 38.903156701048964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01296" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02980137740762, - 38.91562145122284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01297" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05653768641652, - 38.92847400087578, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/20/08

Report Problem", - "NAME": "H01298" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03276206492265, - 38.90558663606525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01299" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05638572645356, - 38.927229503618705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/09/07

Report Problem", - "NAME": "H01300" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01511849538126, - 38.880429568481176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01301" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06853997896148, - 38.93736966779079, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 03/08/07

Report Problem", - "NAME": "H01302" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0318214772029, - 38.91125090216896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H01303" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03097123782356, - 38.91036370991568, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H01304" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99382600202773, - 38.89213396346672, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H01305" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0464904946613, - 38.91078139010919, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01306" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00334796081455, - 38.91487531381453, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H01307" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04253965894844, - 38.929747142439545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/22/07

Report Problem", - "NAME": "H01119" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00367817964616, - 38.91632508697752, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01120" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00367735162028, - 38.917038519807605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01121" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00501181248865, - 38.916323785229494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01122" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02856741514455, - 38.92678457732254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00921" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02874768998996, - 38.92761027121273, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/11/07

Report Problem", - "NAME": "H00922" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02733406566726, - 38.928670195114464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00923" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04798171390973, - 38.91913754961618, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H00924" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03108027692984, - 38.92669160083335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H00925" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02688437259697, - 38.92572037387635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00927" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02696301926464, - 38.922903931903974, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H00928" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03276934981878, - 38.904454095137545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H00929" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08228957627604, - 38.908698381034554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H00930" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02689912670301, - 38.92374441392029, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00931" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9963462050196, - 38.90378059302521, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H00932" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02817758611357, - 38.9238200437837, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H00933" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09869712061487, - 38.919018204308266, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00934" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02814555163172, - 38.92247991064203, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H00935" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02841847883096, - 38.925816336823786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H00936" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04179985906374, - 38.91878235683632, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H00937" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07449084634996, - 38.95974323350111, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00938" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10977213906301, - 38.92839117253699, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H00939" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01066175761832, - 38.91338684248242, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H00940" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07703382475488, - 38.96034055394016, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00941" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07625719896264, - 38.95905172873574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H00942" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0309389859885, - 38.932578100448914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H00943" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03079384352402, - 38.933820753227806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H00944" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02980907676186, - 38.93340777064042, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H00945" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99578145804072, - 38.85265546831029, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H00946" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03904529624903, - 38.91413853245932, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H00947" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05868767581333, - 38.94106986303479, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H00948" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02751582997492, - 38.932902165429724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H00949" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02814993274278, - 38.91800776234343, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H00950" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02715471529463, - 38.90976409105831, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H00951" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02529089784515, - 38.93292866601758, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/09/08

Report Problem", - "NAME": "H00952" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99382703525835, - 38.88592108476634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/12/07

Report Problem", - "NAME": "H00953" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97022530785893, - 38.925694873340795, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H00954" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9963353109303, - 38.88873345308379, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H00955" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02438891265945, - 38.92653697560749, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H00957" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99487386791456, - 38.88203364837203, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/04/06

Report Problem", - "NAME": "H00958" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00752284897247, - 38.875457968847684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00959" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02447817621386, - 38.92603925652625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H00960" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00209251840256, - 38.89003085103512, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H00961" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01070964913265, - 38.87557049620656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H00962" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02688802490417, - 38.92482427969066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/21/06

Report Problem", - "NAME": "H00963" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04340755980301, - 38.93065027568632, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H00964" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0019632067488, - 38.89105285326527, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H00965" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02835293489912, - 38.92481638449598, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H00966" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98565968938456, - 38.88540307026997, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/06/07

Report Problem", - "NAME": "H00967" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02591134002633, - 38.935109232923914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/13/07

Report Problem", - "NAME": "H00968" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02249891059371, - 38.92328069475677, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H00969" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99851457689392, - 38.8910540314067, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H00970" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06630055242039, - 38.933441556188804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H00971" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03460134517405, - 38.92528373759628, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H00972" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07974772374365, - 38.952739306941815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H00973" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01899127513543, - 38.909746803630455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H00974" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04729237131455, - 38.92012539555548, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H00975" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02816048892544, - 38.92059080755352, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H00976" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02300566269213, - 38.918751273729306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H00977" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02146631685001, - 38.97247180737497, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/10/07

Report Problem", - "NAME": "H00978" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0691127857704, - 38.91262541283799, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H00979" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02824315678856, - 38.91913087121627, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/28/07

Report Problem", - "NAME": "H00980" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98677527969163, - 38.86429693927759, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H00981" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00065269304154, - 38.88439791063407, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H00982" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03171952703623, - 38.91562833310763, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/22/07

Report Problem", - "NAME": "H00983" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08048426947165, - 38.94483666694808, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H00984" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02772843472025, - 38.95519414358661, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H00985" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09252511484338, - 38.95222693399096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, Metropolitan

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00986" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9916173110249, - 38.884238640698534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H00987" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09251860499913, - 38.9498157025937, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/12/07

Report Problem", - "NAME": "H00988" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09251818262467, - 38.95116131447385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H00989" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99229101073968, - 38.929444545981134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H00990" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99958535821078, - 38.884393921007955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/24/06

Report Problem", - "NAME": "H01346" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03324060932577, - 38.98043663254894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01347" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99861133887138, - 38.88657672542416, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/20/07

Report Problem", - "NAME": "H01348" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99943350723875, - 38.89603904557128, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H01349" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03972411624017, - 38.90970408347191, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H01350" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99958718845025, - 38.888782956821174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H01351" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00049205147249, - 38.894896496864035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H01352" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05803198103061, - 38.90855168918467, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01353" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01902032785169, - 38.91916356284706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H01354" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02098415370156, - 38.912465161891056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/26/07

Report Problem", - "NAME": "H01355" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06832022220472, - 38.91165236552843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01356" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99369075732835, - 38.93148955188863, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01357" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99375773210112, - 38.9322686568161, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01358" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03372254853788, - 38.9014539428181, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01359" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00334336053685, - 38.902586121696324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H01360" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00338152084385, - 38.901382928635776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H01361" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98868669290609, - 38.93172728218154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01362" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01206340962221, - 38.92224165071239, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/25/07

Report Problem", - "NAME": "H01363" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0710942990464, - 38.91548998357376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H01364" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9846922033922, - 38.933894576575184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01365" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01656208341545, - 38.91011013735514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H01366" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99016655986281, - 38.92660222800276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H01367" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01209847417567, - 38.872872525187184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01368" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97639915775338, - 38.92563658509472, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H01369" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9743351566571, - 38.925639185851914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H01370" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01237230989125, - 38.8886653915865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01371" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01236788365296, - 38.88866472543537, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01372" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97451975942855, - 38.86365931031904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01373" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02180942036213, - 38.94309440910964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/15/07

Report Problem", - "NAME": "H01374" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98753200501619, - 38.89423311397515, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01375" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05218711874285, - 38.90379169542129, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01376" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0422025297031, - 38.92063365753914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H01377" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01075657899649, - 38.81725804479435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01378" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04580450193221, - 38.931523932470704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/01/06

Report Problem", - "NAME": "H01379" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05032113866157, - 38.89493919609121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01380" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05175787121735, - 38.89464615671381, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01381" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0297996572156, - 38.97585854426577, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01382" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10872595112201, - 38.92708115180884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H01383" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9881627126412, - 38.87759875373104, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/03/07

Report Problem", - "NAME": "H01384" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10021213247848, - 38.923678229601464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01385" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0326625962599, - 38.92797885373859, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H01386" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98667823527371, - 38.862458652900116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H01387" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98841498850794, - 38.92776683344535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H01388" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06751739223722, - 38.96393841520778, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01389" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98543660046072, - 38.8987607726603, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01390" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01766936490385, - 38.93786092176164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01391" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98837354402993, - 38.899661982894166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01392" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98913303378683, - 38.88835697740303, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/09/06

Report Problem", - "NAME": "H01393" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02745507755345, - 38.92776620063168, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01394" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99443397184977, - 38.898861261364594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/10/07

Report Problem", - "NAME": "H01395" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9901654964023, - 38.900029102983225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H01396" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01854680747583, - 38.97476716305724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H01397" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01962004333944, - 38.976781011630656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01398" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03177395654339, - 38.916337256100114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01399" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0678677568178, - 38.91561253275963, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H01400" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06800519709321, - 38.91474776968932, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/15/07

Report Problem", - "NAME": "H01401" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03361769494192, - 38.95932557120131, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01402" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02977407831762, - 38.91635310596354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H01403" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01700160878998, - 38.976991349302246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01404" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04160161471164, - 38.8944693271625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H01405" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01391879717032, - 38.974665435911255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01406" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01368355595714, - 38.97284008956856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H01407" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02020450656448, - 38.93127801018239, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H01408" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01175073838544, - 38.97005024179373, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H01409" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99257141262353, - 38.88614869848065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H01410" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98537502061258, - 38.88665823573472, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/26/06

Report Problem", - "NAME": "H01411" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04149447307101, - 38.896122202421914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H01412" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9865526989882, - 38.88546701889877, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H01413" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99708234145746, - 38.92747465510347, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01414" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99141696145851, - 38.88030415020904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/26/08

Report Problem", - "NAME": "H01415" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0457781695096, - 38.90126963768948, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/20/07

Report Problem", - "NAME": "H01416" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98967469590805, - 38.8630668262699, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01417" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99504747482258, - 38.890813160068454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/23/06

Report Problem", - "NAME": "H01418" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0477808291248, - 38.899622882481616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01419" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0281554579527, - 38.90869507724731, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H01420" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04543979651389, - 38.92229459652637, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/16/06

Report Problem", - "NAME": "H01421" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04657078787338, - 38.92243387037017, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/29/06

Report Problem", - "NAME": "H01422" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99036555788003, - 38.892765405265465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01423" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.982151279978, - 38.890805730653256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/11/06

Report Problem", - "NAME": "H01424" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0403422861527, - 38.93051964544143, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H01425" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04009472547922, - 38.911072152937386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01426" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99030917706406, - 38.889132206660484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H01427" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.027212265686, - 38.95616568010513, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H01428" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04014765030604, - 38.93149791561874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H01429" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02594020312957, - 38.92789592407714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01430" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0685070340173, - 38.91656352092913, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01431" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01603118828567, - 38.911065924355206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01432" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01714105631734, - 38.93895454434028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H01433" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01222852584014, - 38.911976280582394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01434" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07193166667204, - 38.95905565895274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01435" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02287358707981, - 38.90193504952017, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H01436" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03623161021987, - 38.91117416399947, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/23/07

Report Problem", - "NAME": "H01437" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04285327470741, - 38.932412550168074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H01438" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06508381575985, - 38.912530904838825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01439" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98785773286018, - 38.86001891428376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H01440" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06952060676896, - 38.90592663689438, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H01441" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07032642117252, - 38.9063900216502, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01442" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03810283796157, - 38.93113988933674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H01443" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02250461193911, - 38.89972571342753, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01444" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98766571357488, - 38.906478567488165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01445" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98565706299972, - 38.925759736308656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H01446" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06975740648444, - 38.90676611908557, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01447" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9874357466905, - 38.885298471310634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/19/08

Report Problem", - "NAME": "H01123" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03473479504007, - 38.920474182194575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01124" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04567648666824, - 38.90711725152424, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/08/07

Report Problem", - "NAME": "H01125" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07868683580811, - 38.95837812952171, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01126" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03675846776675, - 38.91266183485176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01127" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07587085633425, - 38.95149599785176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H01128" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03259602579837, - 38.947119484482364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H01129" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07476646354421, - 38.95145080318647, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H01130" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99965037822234, - 38.902456070358866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/25/07

Report Problem", - "NAME": "H01131" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07879088009778, - 38.95706111429798, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01132" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0772445172896, - 38.957059632852044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01133" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04039977163417, - 38.9176016410672, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01135" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0465816679434, - 38.909501934854696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H01137" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08018948214726, - 38.962096934343755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01138" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0403901572071, - 38.9266663234115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01139" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0198398537631, - 38.972249861467375, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01140" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02165721981245, - 38.94102544074561, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H01141" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06222469940626, - 38.93001324432045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/17/07

Report Problem", - "NAME": "H01142" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97495691352685, - 38.9301968243122, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H01143" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0122352301828, - 38.894868237489746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01144" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00638766883195, - 38.916939887977165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/09/08

Report Problem", - "NAME": "H01145" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04183924980079, - 38.917033141238356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01146" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99369724074582, - 38.87471310962728, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/18/06

Report Problem", - "NAME": "H01147" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0335235866018, - 38.95720290975613, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H01148" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06649099215244, - 38.96317058138602, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01149" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03255845293785, - 38.941763277017365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H01150" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01676337231363, - 38.97516410969956, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01151" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06789833588407, - 38.964845523718665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H01152" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98272481650363, - 38.931021761135625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01153" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02983768153747, - 38.93969515006549, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/20/07

Report Problem", - "NAME": "H01154" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07105401617015, - 38.93257813652327, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H01155" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07265460464963, - 38.960340303320436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01156" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07152155648814, - 38.96034250626626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01157" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98226869040252, - 38.92814320456875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H01158" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97086276404467, - 38.93183369374606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H01159" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00637904618965, - 38.916323196105964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01160" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98584076213282, - 38.88132798724272, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/17/06

Report Problem", - "NAME": "H01161" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98535587196963, - 38.89543760439186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H01162" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02312111282507, - 38.907297077756155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/01/07

Report Problem", - "NAME": "H01163" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98558064267291, - 38.87908510053281, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/10/07

Report Problem", - "NAME": "H01164" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07230236585579, - 38.959718168041576, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/15/07

Report Problem", - "NAME": "H01165" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05461672845477, - 38.905334994871545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01166" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0634239168755, - 38.930336952928, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H01167" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98621570565703, - 38.93170632479768, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01168" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01410263400096, - 38.90131034779346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01169" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93391721844836, - 38.910376899938775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H01170" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01909284938064, - 38.90258566337233, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01171" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00055198441164, - 38.84303053977152, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H01172" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00897242916314, - 38.86935816038689, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/04/08

Report Problem", - "NAME": "H01173" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02480931418043, - 38.9408791952257, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01175" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03557587351888, - 38.92637909951481, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/18/07

Report Problem", - "NAME": "H01176" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98240755930101, - 38.94248111496923, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01177" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02124245809424, - 38.9357085600342, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/09/07

Report Problem", - "NAME": "H01178" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02315500183269, - 38.908624027409545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01179" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03319232066133, - 38.91327003726308, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01180" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03493483747779, - 38.900358800888, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01181" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02614239499393, - 38.96618006798379, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01182" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03793220575525, - 38.90038004469125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H01183" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07445316348512, - 38.930970190502315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H01184" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00909971517954, - 38.95774390271903, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01185" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05489072470027, - 38.90432689490299, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01186" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02784014951384, - 38.93073856373892, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H01187" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02788007461147, - 38.92975825203883, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H01188" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06117406151326, - 38.907724570368615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01189" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99837130275425, - 38.891918040481904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H01190" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05927040113191, - 38.907753135151125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/03/07

Report Problem", - "NAME": "H01191" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00444872914262, - 38.84185591699355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H01192" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9737266148885, - 38.89829202979229, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01193" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02685264669319, - 38.908630658975376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H01194" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01777337435135, - 38.91941778497078, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/04/06

Report Problem", - "NAME": "H01195" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99381590740627, - 38.90034454669514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H01196" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02508851743735, - 38.919222331969785, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H01197" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02078822973674, - 38.92016996021241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H01198" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02686166102042, - 38.90140080684872, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01199" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99172116576136, - 38.88972662482251, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01200" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07077388651813, - 38.92366107484999, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01201" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01209387625892, - 38.901432248879416, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01202" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00714956660148, - 38.90259231066718, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01203" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00188687256431, - 38.91486989650086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01204" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0643494441716, - 38.908747852407146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/05/08

Report Problem", - "NAME": "H01205" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05714097454265, - 38.907572110254456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01206" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00064527452604, - 38.914154089657, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/25/07

Report Problem", - "NAME": "H01207" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98845944682753, - 38.9383852947033, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 03/04/08

Report Problem", - "NAME": "H01208" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02156351393934, - 38.91414938120975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "null

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01209" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00065274414288, - 38.881164746906826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/01/06

Report Problem", - "NAME": "H01210" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03661030143252, - 38.914251321398666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H01211" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0034386848095, - 38.890029819232915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H01213" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98530275963574, - 38.9017303251402, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H01214" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02612713971628, - 38.90571409180324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01215" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98095121523569, - 38.93210621172763, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01216" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0340216318606, - 38.920503903273044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H01217" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09434450959813, - 38.949827305338744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/13/07

Report Problem", - "NAME": "H01218" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02328979617391, - 38.94305691931498, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H01219" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08192767614064, - 38.958065388702295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01220" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00425559178476, - 38.877579610775015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H01221" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99859496410137, - 38.88872951141116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H01222" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04412538918903, - 38.93336255208931, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H01223" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04509550026437, - 38.89962279685093, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H01224" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00494192480275, - 38.911008716725306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H01225" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04757451242816, - 38.92828599002464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/09/06

Report Problem", - "NAME": "H01226" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04873063157197, - 38.92961008685809, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/11/06

Report Problem", - "NAME": "H01227" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04528224830476, - 38.93318976273631, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H01228" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04548743333663, - 38.91777328080344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H01229" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03945081564946, - 38.92602743220156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H01230" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98765131463672, - 38.90647231417365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/22/06

Report Problem", - "NAME": "H01231" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03450378388636, - 38.92154557464372, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H01233" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03332386123981, - 38.92161640720116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H01234" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03252860777019, - 38.957326964329766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/27/07

Report Problem", - "NAME": "H01235" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01052210812912, - 38.897954057398934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/06/07

Report Problem", - "NAME": "H01236" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0241095690236, - 38.88030765237457, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01237" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00596570977216, - 38.90457944856012, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01238" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0228721051199, - 38.88041442548278, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 11/18/07

Report Problem", - "NAME": "H01239" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02295620712553, - 38.88329230054347, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01240" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01884216381268, - 38.900768025034445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01241" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02205276216445, - 38.88035901030967, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01242" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02342470883548, - 38.879366189702964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01243" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02285954294592, - 38.878508108208116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01244" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01436844599127, - 38.91694288159885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01245" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06421035163879, - 38.91369220270595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01246" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00049953651703, - 38.89214420592811, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H01247" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03075271432112, - 38.980322539438426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01248" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0297649329638, - 38.97950786625973, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01249" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97912292411009, - 38.86938286232804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/04/07

Report Problem", - "NAME": "H01250" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97524297336714, - 38.92141320039317, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H01251" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04149196848284, - 38.91117984628575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H01252" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98158591364003, - 38.8996206356333, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01253" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99161932714492, - 38.885914172920906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H01254" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03681986525778, - 38.91042635981995, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01255" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03622395785315, - 38.91190762544506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01256" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01372016991348, - 38.90713612142087, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01257" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0415012735067, - 38.909575349081145, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/08/08

Report Problem", - "NAME": "H01258" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01878975284264, - 38.9057013231001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01259" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99278668745065, - 38.89727609599099, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/13/07

Report Problem", - "NAME": "H01308" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01168605099308, - 38.89716571504747, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01309" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99382396376973, - 38.901431513499695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01310" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99610176250134, - 38.89719134983101, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01311" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98689393974941, - 38.8986078751824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01312" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01101709229322, - 38.90967841836587, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01313" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04670628539925, - 38.90711369146798, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01314" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02591361058987, - 38.90232301719525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/22/07

Report Problem", - "NAME": "H01315" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9850216760369, - 38.868276877879424, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01316" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02576997642896, - 38.9036002443928, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01317" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02612844088057, - 38.904230389114375, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H01318" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99609186327798, - 38.92953965544233, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01319" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99606522675055, - 38.930500732997814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01320" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02511049571578, - 38.90245347140325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01321" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01606063786096, - 38.908514649565234, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H01322" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0268485835777, - 38.9057083700895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H01323" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00335618698145, - 38.921349104023456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H01324" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0210386702432, - 38.90969574494479, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01325" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06330793988118, - 38.90765662770343, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01326" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99516617438064, - 38.88132275492173, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/04/06

Report Problem", - "NAME": "H01327" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98376480920346, - 38.86478025729087, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01328" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00569804183291, - 38.87758217975662, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H01329" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01013313215834, - 38.83154843890562, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01330" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01210408995168, - 38.87085599362729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01331" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01210158760601, - 38.87193295754201, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01332" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00379167621217, - 38.87422273786634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01333" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99478659119877, - 38.89727545466726, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01334" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07144880328613, - 38.9631444878158, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01335" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07032797254784, - 38.91550556330122, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H01336" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03105081083292, - 38.90735687453357, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01337" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99170695159191, - 38.879331346061655, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/10/08

Report Problem", - "NAME": "H01338" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0241186677307, - 38.90729411953351, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H01340" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01462896278859, - 38.919240144312646, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H01341" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03861932187694, - 38.914919246299405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01342" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00582141317908, - 38.88267767938914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/05/06

Report Problem", - "NAME": "H01343" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98090178865581, - 38.86607543205955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H01344" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04492837694538, - 38.91422924939429, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 01/31/08

Report Problem", - "NAME": "H01345" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0274274232013, - 38.952954480004486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H01518" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02789213881012, - 38.95608858931455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H01519" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99368965796253, - 38.902339962934875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H01521" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06780453741156, - 38.912753953630855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H01522" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04567623773461, - 38.92140182451452, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H01523" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0020985503904, - 38.89367958370827, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H01524" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04352071452138, - 38.90648749904412, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01525" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07100721219906, - 38.91268027278722, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01526" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06654512384404, - 38.913794014809426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H01527" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0955303256683, - 38.95047605547877, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H01528" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06510588263896, - 38.96499800906057, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01530" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02241726103647, - 38.95536863764007, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H01531" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02409937696957, - 38.95529958796547, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H01532" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00058364348007, - 38.87462519412972, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01533" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09681477779233, - 38.950921485142054, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01534" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0021005442548, - 38.903847121925295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01535" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99623492443291, - 38.88399116829376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/24/06

Report Problem", - "NAME": "H01536" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00049911119648, - 38.903845788489654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/03/08

Report Problem", - "NAME": "H01537" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01236060524063, - 38.89728325880814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H01538" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01071561323114, - 38.87215737514364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01539" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09873186521835, - 38.94875397605435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton, DC

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H01540" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04141639967317, - 38.9332376163356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/30/07

Report Problem", - "NAME": "H01541" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09671370542131, - 38.94801224556935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H01542" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03536159660199, - 38.92555740791575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01543" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02598165209017, - 38.95739610139378, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H01544" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99009071713085, - 38.93825695907212, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01545" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00290255506258, - 38.87743150920006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01546" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00067179956181, - 38.91712571332078, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H01547" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99031025293468, - 38.9401095599963, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01548" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0333796739256, - 38.97645537229134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01549" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01233725589168, - 38.907182434403545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H01550" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01884370145609, - 38.903141212983364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/05/08

Report Problem", - "NAME": "H01551" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98896120106119, - 38.88916657111018, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/09/06

Report Problem", - "NAME": "H01552" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99957221375871, - 38.8833366519562, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01553" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0690804055293, - 38.90682454411589, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01554" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9814253514975, - 38.934058657717664, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01555" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9953382742684, - 38.94367918676709, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H01556" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99359393078423, - 38.88404347308606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H01557" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99143299235081, - 38.8849150668084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H01558" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06915341289559, - 38.91371385746126, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01559" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02720670463127, - 38.9126397755058, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H01560" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02056219793224, - 38.9325948449953, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H01561" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08312317562422, - 38.90975480338903, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/26/07

Report Problem", - "NAME": "H01562" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08371159178213, - 38.91055534233563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H01563" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9938219439826, - 38.897464925569054, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01564" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97110493763128, - 38.92763022431628, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H01565" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99851730893323, - 38.8843887054874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/24/06

Report Problem", - "NAME": "H01566" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04148024770123, - 38.92885314210014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H01567" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99852600382933, - 38.88026352217019, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 11/05/06

Report Problem", - "NAME": "H01568" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99363750230991, - 38.88463700181735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H01569" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99043377188606, - 38.88530823215247, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H01570" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00931126655631, - 38.909692547707586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01571" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06898121262883, - 38.90876119043231, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 03/05/08

Report Problem", - "NAME": "H01572" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00188501310767, - 38.884216891798005, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/24/06

Report Problem", - "NAME": "H01573" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9868844925189, - 38.89738552951181, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H01574" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99016175015956, - 38.88247254138519, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/19/06

Report Problem", - "NAME": "H01575" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07123390078415, - 38.91365396335679, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H01576" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0602461882709, - 38.94210084378007, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H01577" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99625064538374, - 38.87828802115672, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/04/07

Report Problem", - "NAME": "H01578" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99624980266789, - 38.87743778192459, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H01579" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99623547593237, - 38.88140254554251, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01580" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99968797875567, - 38.88268049053276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01581" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00926405122772, - 38.917052930055696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM FOUNDRY - O'BRIEN

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01582" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97984169617975, - 38.88289318695628, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H01583" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98235973956673, - 38.88540169063197, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H01584" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98837626389289, - 38.89372389492191, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01585" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9839675264306, - 38.897446170234154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01586" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99842278956955, - 38.88009714486881, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/05/06

Report Problem", - "NAME": "H01587" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03948068361906, - 38.91969359906079, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/26/07

Report Problem", - "NAME": "H01588" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99943936139965, - 38.84199978425332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H01589" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9935939271112, - 38.8793346087374, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 04/27/07

Report Problem", - "NAME": "H01591" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99962958298268, - 38.87758511978389, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY

In Service


Last Inspection Date: 01/31/08

Report Problem", - "NAME": "H01593" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00286170999833, - 38.96042850262832, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01594" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0678138123935, - 38.913644098299166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/15/07

Report Problem", - "NAME": "H01595" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0518080392284, - 38.909584313657874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01596" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05718846155007, - 38.90945253428917, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H01597" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05299033329835, - 38.9095371472348, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01598" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0122494174769, - 38.91492462588635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01599" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98961525573564, - 38.865421908806205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H01600" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05571815897147, - 38.90929308533062, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H01601" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99011971597042, - 38.86383704827926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01602" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05470388491976, - 38.90929950111312, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H01603" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98884673718555, - 38.8637690191821, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01604" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99044467093604, - 38.924499493826936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H01605" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97947198591969, - 38.93023592681651, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01606" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02092132873568, - 38.93401612939577, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H01607" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03731907659451, - 38.93469192756191, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H01608" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04378624701876, - 38.916896366047325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H01609" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06280619517617, - 38.90674540672929, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01610" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0821058647827, - 38.96092171128651, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01611" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04161027006936, - 38.92602856602167, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/23/06

Report Problem", - "NAME": "H01613" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99963606126447, - 38.91570978512348, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01614" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01860301895802, - 38.915703998866434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01615" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99942711977184, - 38.89188235926396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H01616" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01839824472057, - 38.94194151157028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01617" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0652346086041, - 38.96406529508177, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H01618" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97602629784772, - 38.92456238445846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H01619" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02815428136125, - 38.908693627187326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/28/08

Report Problem", - "NAME": "H01620" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0020932818363, - 38.91565783390171, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01621" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01609708374991, - 38.91597748558224, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01622" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06628873779425, - 38.965914897735864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H01623" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99754224124091, - 38.87757968947337, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/07/06

Report Problem", - "NAME": "H01624" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05815809586969, - 38.90536133769514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01625" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98559181125505, - 38.8834748174605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01626" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01343665674496, - 38.91921949627376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H01628" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0228856126337, - 38.97592565451223, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H01629" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02406031726679, - 38.933576812023766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H01630" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02349781538757, - 38.93212029267016, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/14/08

Report Problem", - "NAME": "H01631" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00344978674075, - 38.90007968759085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01632" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02277224553906, - 38.9734544217227, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H01633" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03227323060923, - 38.97858822714868, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01634" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00350796264058, - 38.90040712165783, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01635" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98818090200267, - 38.88161270536892, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/19/06

Report Problem", - "NAME": "H01636" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04464049479556, - 38.91516828052712, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01637" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99257925214359, - 38.90231029622669, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/23/07

Report Problem", - "NAME": "H01638" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03866248906964, - 38.91561490064216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01639" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0147127635705, - 38.97347072110241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01640" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99030703075263, - 38.90145175964172, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/23/07

Report Problem", - "NAME": "H01641" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98372060626748, - 38.87984535346194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 01/03/07

Report Problem", - "NAME": "H01642" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9890179385195, - 38.866823635069444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01643" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00209494120463, - 38.90266791057591, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H01644" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00050923388295, - 38.90551495478924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/15/07

Report Problem", - "NAME": "H01645" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99358700004944, - 38.86190175083163, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H01646" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03669851533915, - 38.91329864410307, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01647" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03141139200164, - 38.93764673802807, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H01648" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04181785151341, - 38.91255484420992, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H01649" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.040616215472, - 38.90720560938269, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01650" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0092781651967, - 38.91412868891223, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01651" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9964824502806, - 38.90662949691347, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01652" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03238185715058, - 38.92960817506793, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H01653" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9838104851095, - 38.89606749956819, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01654" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98582869823747, - 38.908877299695675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H01655" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98850646594799, - 38.86730598621084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H01656" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99165354597353, - 38.87558253505564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/10/06

Report Problem", - "NAME": "H01657" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00047229707197, - 38.930250187145035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/21/07

Report Problem", - "NAME": "H01658" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04086712878322, - 38.92034553244864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H01659" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0590875411829, - 38.93639204093927, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/04/08

Report Problem", - "NAME": "H01660" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01080171742977, - 38.874587995820605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 12/05/07

Report Problem", - "NAME": "H01661" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98930821390543, - 38.893488712372125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01662" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01272994122674, - 38.97376000089939, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01663" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99515073499892, - 38.88380247473194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 02/12/07

Report Problem", - "NAME": "H01664" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98839456341526, - 38.90119883785697, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H01665" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0504940339849, - 38.91115494400008, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01666" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99224758580772, - 38.86285853465458, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01667" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05590409721444, - 38.908614911314615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01668" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98085018080076, - 38.86714016373777, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H01669" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98544401354457, - 38.89107440268359, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 04/27/06

Report Problem", - "NAME": "H01670" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06392701985482, - 38.96852383870974, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H01671" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02314908783872, - 38.91562444483965, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H01672" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9904199285925, - 38.89896275958963, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01673" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93532007028486, - 38.90367575230827, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01674" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99851865020891, - 38.8814059749635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/05/06

Report Problem", - "NAME": "H01675" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01463410352588, - 38.91922930665154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/01/07

Report Problem", - "NAME": "H01676" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03104693028325, - 38.959230479260086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01677" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02880711752908, - 38.90260248137471, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01678" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02768141129852, - 38.93978066482626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H01679" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99032460467033, - 38.88356892955696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/21/06

Report Problem", - "NAME": "H01680" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03311777717754, - 38.91913055527483, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01681" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98879754423108, - 38.9362495686159, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01682" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04463791145075, - 38.918538893049295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H01683" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02338545407048, - 38.94424293111497, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H01684" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04027301163535, - 38.91821549441331, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01685" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05158199029682, - 38.916938370608754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01686" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0242392252846, - 38.95742266262686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/10/07

Report Problem", - "NAME": "H01687" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02758828649648, - 38.954133228144876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/08/07

Report Problem", - "NAME": "H01688" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00217981715464, - 38.89896795153512, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01689" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98356323265779, - 38.89080491992413, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 04/27/06

Report Problem", - "NAME": "H01690" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98591239779688, - 38.891626430115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/01/06

Report Problem", - "NAME": "H01691" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97641848751596, - 38.932187955212115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01692" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98555804638181, - 38.88880316235764, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/28/06

Report Problem", - "NAME": "H01741" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06145874622113, - 38.90919606953275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01448" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0252835385952, - 38.90186447681956, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01449" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9409504710135, - 38.902987216402806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01450" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05588370239457, - 38.907792143714126, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01451" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00196807735378, - 38.844064648949136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H01452" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06300048113162, - 38.95801187242621, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01453" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93541109231491, - 38.90916086104742, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H01454" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9330719310103, - 38.91097668076586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01455" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0465688244757, - 38.908461052730786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/21/07

Report Problem", - "NAME": "H01456" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03215344820053, - 38.91922815957348, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H01457" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93760682389885, - 38.90378677173962, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01458" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.990191068769, - 38.87770765500455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/13/06

Report Problem", - "NAME": "H01459" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93861266755245, - 38.91045656364813, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01460" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98559254732817, - 38.882683439895004, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H01461" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99030880157443, - 38.90233385795482, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H01462" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0098343368453, - 38.87247878238873, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01463" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01744729481824, - 38.91594407805688, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01464" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01775579797457, - 38.90259492762752, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H01465" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06156712025975, - 38.94980910219059, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01466" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0618047284287, - 38.947928408616704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01467" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99487732893802, - 38.89001247044877, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H01468" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99730583940168, - 38.88363997902216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01469" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06630842048075, - 38.93260052726264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H01470" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02025374635168, - 38.93653103105635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01471" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03209738207916, - 38.910310085602454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01472" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99142988978875, - 38.8877155828476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H01473" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03305131392158, - 38.90853778835916, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H01474" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9973608676341, - 38.889729861158415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/04/07

Report Problem", - "NAME": "H01475" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05323701371535, - 38.90711424031508, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01477" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9819868861212, - 38.88637716933428, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H01478" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03436773063687, - 38.90730305792679, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01479" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03216384956264, - 38.90728829916347, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01480" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0173588432685, - 38.91680087367197, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/06/08

Report Problem", - "NAME": "H01481" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00367207498614, - 38.885997707352466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/05/07

Report Problem", - "NAME": "H01483" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00211182581772, - 38.886149960591936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H01484" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01733688731552, - 38.911910639121416, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01485" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99391849974833, - 38.89896348055616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/08/07

Report Problem", - "NAME": "H01486" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0188553812113, - 38.91356942449031, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01487" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99831198273517, - 38.88277408488938, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/24/06

Report Problem", - "NAME": "H01488" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0007499462206, - 38.88545250336951, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/10/07

Report Problem", - "NAME": "H01489" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99601579046934, - 38.88972773308024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H01490" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99944503019721, - 38.887738750187445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01491" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07104221290884, - 38.97120115281191, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/30/06

Report Problem", - "NAME": "H01492" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99851547849545, - 38.88539358152677, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/18/07

Report Problem", - "NAME": "H01493" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06603503188138, - 38.90672324051473, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01494" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05245682870127, - 38.90346932779068, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01495" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03545194335523, - 38.92472739919133, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/15/06

Report Problem", - "NAME": "H01496" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99632769954046, - 38.884332129561514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H01497" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06257831798364, - 38.91180381409284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/05/07

Report Problem", - "NAME": "H01498" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99514376059052, - 38.88873445459372, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H01499" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9950419148437, - 38.88805257022504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/23/06

Report Problem", - "NAME": "H01500" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04565143323003, - 38.920735443366056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H01501" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00343926714955, - 38.89469758757336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H01502" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99391865698045, - 38.888735045837784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H01503" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05335318705667, - 38.90451426023783, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/25/07

Report Problem", - "NAME": "H01504" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99393597916979, - 38.88753745502592, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H01505" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99270997605161, - 38.888646109020634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H01506" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06870236760626, - 38.93803800620132, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/07/07

Report Problem", - "NAME": "H01507" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99270820337266, - 38.88772058821946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H01508" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00073257337448, - 38.89297914550857, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H01509" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0355609222617, - 38.90245711772961, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H01510" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98289219661815, - 38.93299818097305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01511" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9685425609785, - 38.897471573424184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/07/06

Report Problem", - "NAME": "H01512" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9996748344389, - 38.88132912433841, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H01513" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02719927989881, - 38.904206272588084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01514" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0189908436443, - 38.908689170103735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01515" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06407254292458, - 38.912052391189455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 09/28/07

Report Problem", - "NAME": "H01516" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02505430258562, - 38.94504972759686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H01517" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06039152533941, - 38.9093334808122, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01850" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97785622069829, - 38.93021024643721, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H01851" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0332139179715, - 38.91817451912744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01852" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05717167514447, - 38.90613091251988, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01853" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98089132422619, - 38.924568046609465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/26/07

Report Problem", - "NAME": "H01854" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0622164792347, - 38.907678698923924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01855" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0602993754585, - 38.90769162211388, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01856" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01232262481422, - 38.91265285997377, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01857" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02535176137408, - 38.9530433016341, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H01858" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0058108588899, - 38.88993176824665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H01859" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99145585127567, - 38.9003830708077, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01860" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98088103413968, - 38.92350539658201, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/04/07

Report Problem", - "NAME": "H01861" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0269717159178, - 38.97150832641371, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H01862" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02580375634906, - 38.97151591365617, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01863" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98940855269164, - 38.9397200983521, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01864" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06477350896394, - 38.90984603268693, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/05/08

Report Problem", - "NAME": "H01865" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06124231051363, - 38.91292842955008, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01866" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04159549952469, - 38.91341931866978, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H01867" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98379593497012, - 38.88871910825257, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H01868" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00513059425955, - 38.88189960337566, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 01/11/07

Report Problem", - "NAME": "H01869" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00358762274463, - 38.88206614496601, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 11/05/06

Report Problem", - "NAME": "H01870" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0318245077414, - 38.89664690243558, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01871" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05824451324324, - 38.90945039111792, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H01872" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99145166591357, - 38.9023121469502, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/23/07

Report Problem", - "NAME": "H01873" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0028388564693, - 38.87360474365964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01874" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98605448122952, - 38.92681269430606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H01875" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99270873681986, - 38.88994461223659, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01876" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04145694480034, - 38.92332740407147, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H01877" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03113418085866, - 38.97487143513596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01878" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99487569648804, - 38.88032330683026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H01879" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.029472874992, - 38.89725265625571, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01881" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97004062530067, - 38.9331694445616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H01882" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0297324801001, - 38.89667228068078, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01883" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05002459084795, - 38.90171992692369, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H01884" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03504160592487, - 38.89825747880135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H01885" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06879026425989, - 38.94794144234897, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01886" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.072346848523, - 38.94799181370046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01887" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03892445470994, - 38.92981087502163, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H01888" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06613676820224, - 38.90769519284809, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01889" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00617798867312, - 38.95672016053897, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H01890" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04484937503277, - 38.89844994893373, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/22/07

Report Problem", - "NAME": "H01891" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06396843394204, - 38.965952295138834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01892" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99148225497008, - 38.924293157451906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H01893" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99982505781792, - 38.92191004630571, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01894" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99868239497337, - 38.92225162557698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01895" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99777707152788, - 38.92179213337697, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01896" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9992888319281, - 38.92193248400389, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01897" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99879730365795, - 38.92190006803476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01898" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99911010773754, - 38.921433827069045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01899" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99873029528702, - 38.92175795202872, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01900" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99960481882547, - 38.92089776246244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01901" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03435818337549, - 38.947272183671885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H01902" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98837569630015, - 38.89720733984544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H01903" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04861245289136, - 38.90969894882585, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01904" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02679224709911, - 38.97368104572896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H01905" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04064247054069, - 38.8944022641965, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H01906" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01020448988793, - 38.90462482756334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H01907" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04338169655762, - 38.89327761107908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H01908" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0742103828715, - 38.96211350255284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01909" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0260827944744, - 38.943631436496986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H01910" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99132732892684, - 38.90137541294538, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01911" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02458611557088, - 38.97238652469149, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01912" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01797587275935, - 38.86720615679607, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H01913" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03134659772964, - 38.93873443502276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H01914" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94761786452838, - 38.89678359993288, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01916" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02974706121714, - 38.9063171279233, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01917" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9868983556459, - 38.9025585089257, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/17/07

Report Problem", - "NAME": "H01918" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04354314655554, - 38.89843568741387, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01919" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99264416900115, - 38.934512551328595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01920" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06627516633826, - 38.96853111631547, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H01921" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04659164435708, - 38.898457707894785, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01922" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93400654713926, - 38.89749714758739, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H01923" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97689820662369, - 38.87277938652282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H01924" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93400044348896, - 38.896306868765635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H01925" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97776244312972, - 38.873377775189276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H01926" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02712039889688, - 38.935437194072975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01927" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02806366613426, - 38.976607809693945, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H01928" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01798537138136, - 38.86621513105002, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H01929" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01797769847835, - 38.86800404935802, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H01930" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01798120182136, - 38.8689658405201, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H01931" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01705934825965, - 38.8714278229092, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H01933" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01610090793427, - 38.87152401559676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H01934" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06250962803557, - 38.970866729736045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01936" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01550779831753, - 38.941036318439814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 05/09/07

Report Problem", - "NAME": "H01937" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03872020073588, - 38.920203184302636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H01938" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09692567097349, - 38.92029652794114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01939" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04167670249105, - 38.89200103397282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H01940" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04481085480157, - 38.89280739314633, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H01941" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02379837562194, - 38.91415217239058, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H01942" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03804254767822, - 38.89840065586897, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01943" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00196548993681, - 38.8981980287612, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01944" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02988570926301, - 38.937625680312635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H01945" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04484579513982, - 38.89200357173687, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/18/08

Report Problem", - "NAME": "H01946" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06171684803618, - 38.96983451822597, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H01947" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03446375381101, - 38.94816742238717, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H01948" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02415678949772, - 38.90223849892884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01949" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07724705645342, - 38.959051241103374, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01950" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03558397993368, - 38.9593324391487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01951" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99633103943574, - 38.890881716115125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 11/15/06

Report Problem", - "NAME": "H01952" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06820555267512, - 38.95237791076059, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, Metropolitan

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H01953" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02989213617779, - 38.93765873010822, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/19/07

Report Problem", - "NAME": "H01955" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01146173191339, - 38.95663922808497, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H01956" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92976861602617, - 38.90857786446685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H01742" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97960349688758, - 38.865849677893586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H01743" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98214038896349, - 38.86634844781735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01744" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0382865914365, - 38.91413987353095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H01745" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00919102208019, - 38.881592853048325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01746" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98990188132304, - 38.86484672875232, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01747" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0593790325117, - 38.91132735701251, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01748" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97629651682679, - 38.93126630874895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H01693" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99126011897111, - 38.923481410417075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H01694" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97945729296129, - 38.92899429989975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01695" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99931490267937, - 38.89098449420409, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01696" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05905675494256, - 38.90688313596674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01697" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9853380767704, - 38.89738515648231, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01698" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0591719773263, - 38.90921613151359, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01699" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02815495071376, - 38.91033090245102, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H01700" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.068710738805, - 38.93898066549607, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/28/08

Report Problem", - "NAME": "H01701" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93143174836734, - 38.90995544470618, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H01702" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01933902264206, - 38.93674221436258, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01703" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04504845363036, - 38.91117769143819, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01704" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93234362551028, - 38.909254271228384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H01705" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01482342007958, - 38.906504150169596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01706" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97567735794388, - 38.91360690695947, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01707" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98128214317224, - 38.90486482825957, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01708" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02614179807715, - 38.96499315949469, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01709" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01329290025585, - 38.916334541161135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01710" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00882098852348, - 38.91632729822233, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/26/07

Report Problem", - "NAME": "H01711" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03193287205347, - 38.92279570573727, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H01712" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02081041072563, - 38.91414449111245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01713" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0220454239246, - 38.92240978462876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H01714" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01898916065501, - 38.9112455127532, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01715" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02984784911241, - 38.92381123336725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/22/06

Report Problem", - "NAME": "H01716" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01623699284768, - 38.89817688230593, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01717" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99360088025216, - 38.890988428750404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H01718" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98749322896427, - 38.86299081617016, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01719" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99381692741477, - 38.89003968748024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H01720" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02315645056777, - 38.9207572090482, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H01721" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04157670360637, - 38.897237390722054, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H01722" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98752701892724, - 38.88622558765701, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/09/06

Report Problem", - "NAME": "H01723" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98867660373392, - 38.86199177735186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H01724" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02197854895691, - 38.918923683630304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/04/06

Report Problem", - "NAME": "H01725" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03178121451911, - 38.90969863167442, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/08/08

Report Problem", - "NAME": "H01726" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99033929943232, - 38.86254535888564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/29/07

Report Problem", - "NAME": "H01727" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02187457445666, - 38.94423363878941, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H01728" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03523981175577, - 38.93458136547237, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H01729" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02956965114083, - 38.9286806049776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/14/07

Report Problem", - "NAME": "H01730" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02849317835151, - 38.92868458380273, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01731" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00064273768592, - 38.90006509817616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01732" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98737467269434, - 38.866336492279935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H01733" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0310766098877, - 38.92867694396942, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H01734" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98759348209485, - 38.86551920954452, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01735" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98546542020551, - 38.866002292385495, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H01736" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02987316343312, - 38.924805799357166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/21/08

Report Problem", - "NAME": "H01737" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0298257070451, - 38.97873317065002, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H01738" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02985042211048, - 38.925798008254326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/26/07

Report Problem", - "NAME": "H01739" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98327833153981, - 38.866343508550926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H01740" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99102237985707, - 38.86445555784137, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01750" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97235675444279, - 38.92744092013259, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H01751" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99030866818313, - 38.88031989124227, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 04/02/07

Report Problem", - "NAME": "H01752" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01435948004561, - 38.94119315533904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01753" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00334741892169, - 38.914139269820616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H01754" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05581931667132, - 38.9335525280332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/27/06

Report Problem", - "NAME": "H01755" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05460063702039, - 38.900760433534494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H01756" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99271094748451, - 38.88139402798187, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/21/06

Report Problem", - "NAME": "H01757" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01243189517508, - 38.94340228048384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01758" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02208569774297, - 38.93225498997437, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H01759" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99042888376694, - 38.8860902583415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H01760" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02415949102253, - 38.90286254313056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H01761" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98579318734639, - 38.884158623541, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/26/06

Report Problem", - "NAME": "H01762" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02415720017746, - 38.9342250384963, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H01763" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98449555039457, - 38.88066005157696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/19/06

Report Problem", - "NAME": "H01764" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03590754984333, - 38.95301969099706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H01765" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08079387968955, - 38.95954337955969, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01766" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.988235093205, - 38.8842013695676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H01767" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02327670558091, - 38.93066181097579, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/05/06

Report Problem", - "NAME": "H01768" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01478458201592, - 38.971768299917585, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H01769" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02372150034742, - 38.92402762104677, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H01770" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01810874646442, - 38.963901213169635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01771" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02940662632399, - 38.92046683432597, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/28/06

Report Problem", - "NAME": "H01772" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0251099712243, - 38.931977959509766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01773" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.001971040758, - 38.88213993509908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 11/01/06

Report Problem", - "NAME": "H01774" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98837083938878, - 38.89624021944037, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01775" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02309552131985, - 38.91264953366015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01776" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04146652309007, - 38.91786544568448, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H01777" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05748839146487, - 38.905041332156635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H01778" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05696950857094, - 38.905045405866815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/21/07

Report Problem", - "NAME": "H01779" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03419582418493, - 38.92352850494571, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01780" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03329955797464, - 38.91691137369946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01781" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04484088422257, - 38.9231799585808, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H01782" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06625495525927, - 38.966824452628245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H01783" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02839211462425, - 38.933633619282936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H01784" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03639679107833, - 38.92098413310898, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/30/07

Report Problem", - "NAME": "H01785" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04012784887098, - 38.91633496516215, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H01786" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04187520368419, - 38.90650767554856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01787" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07505225108544, - 38.923931285599444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01788" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07045504315604, - 38.90873804235577, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01789" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02818228393636, - 38.903200653366774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H01790" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00641922111252, - 38.95771883045707, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01791" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04511345157735, - 38.910307982999875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01792" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03019786070082, - 38.97512259590143, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01793" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99776044340963, - 38.84429362970075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01794" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06399174013431, - 38.966823578102954, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H01795" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02410257265424, - 38.95622049318288, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H01796" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06115852518168, - 38.93590083404151, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/22/07

Report Problem", - "NAME": "H01797" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94444218399751, - 38.89911008306193, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H01972" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01086682128313, - 38.89489738875106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H01973" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03929272849666, - 38.897855191099325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H01974" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03806984520564, - 38.89710340669015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01975" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03953962276367, - 38.89555083118579, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H01976" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04032859305796, - 38.89537942953278, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H01977" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01624339659615, - 38.89744278998546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01978" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01737935850149, - 38.89726565722163, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/05/07

Report Problem", - "NAME": "H01979" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01033217717854, - 38.95527463542399, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H01980" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0241099502249, - 38.968685535140374, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/13/07

Report Problem", - "NAME": "H01981" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07406856195156, - 38.93330919886083, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H01982" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0171408395714, - 38.941123497818865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H01983" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01395599170118, - 38.943318772806364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H01984" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03800659703973, - 38.921929710850165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H01985" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98208976511503, - 38.881793602285335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/26/06

Report Problem", - "NAME": "H01986" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01894711050141, - 38.93997732834983, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H01987" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04002101013288, - 38.916920957774074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H01798" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06720276007067, - 38.95064992078573, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H01799" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04103208040618, - 38.912558464883155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01800" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03181558436431, - 38.91396265687283, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/21/08

Report Problem", - "NAME": "H01801" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.065320343352, - 38.90601839653121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01803" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07149826210423, - 38.91879901133891, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01804" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07217549581509, - 38.91982867047362, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01805" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00478879383267, - 38.886087480461576, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/20/06

Report Problem", - "NAME": "H01806" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0708132847522, - 38.931864743574515, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/19/07

Report Problem", - "NAME": "H01807" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03131578962383, - 38.90572644589639, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H01808" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03097885825605, - 38.931996612778406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H01809" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03309565150168, - 38.91414229688326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01810" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03127004213245, - 38.92971084826277, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H01811" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00670710879972, - 38.91189781493135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H01812" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07905049903106, - 38.96492906715615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H01813" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01196553285081, - 38.92027865697532, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H01814" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02279259670462, - 38.92736326116371, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/05/06

Report Problem", - "NAME": "H01815" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99967679539412, - 38.919125176433404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/01/07

Report Problem", - "NAME": "H01816" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99958477011847, - 38.878501066031305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 11/01/06

Report Problem", - "NAME": "H01817" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06124336428864, - 38.905065052907304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01818" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02316957659161, - 38.93464453885302, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/15/07

Report Problem", - "NAME": "H01819" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99270839765217, - 38.89213538543092, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H01820" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0339084088944, - 38.92269694049385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/21/06

Report Problem", - "NAME": "H01821" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0261409505151, - 38.91923833428273, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H01822" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06923906129792, - 38.954298181932046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H01823" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99858876829653, - 38.90244276602723, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H01824" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98350380920732, - 38.88972234819578, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/27/06

Report Problem", - "NAME": "H01825" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05820771527544, - 38.907775172336834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/07/07

Report Problem", - "NAME": "H01826" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02793926322623, - 38.957340681573775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H01827" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0258570564964, - 38.95525867525521, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H01828" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99018014684331, - 38.89049600077135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 11/16/06

Report Problem", - "NAME": "H01829" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.065264301912, - 38.95336004996607, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H01830" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0670459301452, - 38.953343781818, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H01831" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06861667535924, - 38.95335077074285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H01832" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02378484169348, - 38.90970057814971, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H01833" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99915785875653, - 38.8434462057367, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H01834" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01743864110124, - 38.89988754984979, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H01835" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06033812666197, - 38.93823540071663, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/22/07

Report Problem", - "NAME": "H01836" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98844561612165, - 38.89896154504042, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H01837" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03151968812, - 38.935978678414585, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/20/07

Report Problem", - "NAME": "H01838" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03258178715464, - 38.936183163829355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H01839" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02574074476824, - 38.97370788321005, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H01840" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01222780408037, - 38.90648857794735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01841" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01498364604944, - 38.90729186466856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01842" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04160393396809, - 38.91028632308658, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H01843" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99851452205687, - 38.90033090913208, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H01844" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03829260606062, - 38.91340171943609, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01845" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99852832272505, - 38.90361785996193, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H01846" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99827666184842, - 38.9050159706863, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/03/08

Report Problem", - "NAME": "H01847" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99125600076194, - 38.92198715484397, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H01848" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99031378513881, - 38.92166728509103, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H01849" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03631031632304, - 38.91636513053023, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/17/07

Report Problem", - "NAME": "H02201" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03631506896545, - 38.91478377912791, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02202" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05024781612903, - 38.896187435987926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H02203" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05029103184319, - 38.89837693634458, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02204" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05274064035815, - 38.916344339398904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02205" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04896351569671, - 38.89741147045287, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H02206" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01710996095403, - 38.94304666379311, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02207" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05090695816087, - 38.902900694397125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/30/07

Report Problem", - "NAME": "H02208" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.031307803453, - 38.9551947712948, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H02209" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02961568808855, - 38.95502686569453, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H02210" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02711253603198, - 38.91930960298251, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H02211" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03640918755977, - 38.92035176283157, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H02021" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00762120200532, - 38.92136660505803, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H02022" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93278514187459, - 38.90071614801195, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/12/07

Report Problem", - "NAME": "H02023" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0639088091822, - 38.967724168792934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Centurion

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02024" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9865231920158, - 38.892793761859885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H02025" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97029850248663, - 38.924562528435814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/21/07

Report Problem", - "NAME": "H02026" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0363957525363, - 38.924100850732934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/28/06

Report Problem", - "NAME": "H02028" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03890313068506, - 38.923216596967656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H02029" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02371843552692, - 38.94615620532793, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H02030" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0251190942851, - 38.94625229235325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H02031" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95976169469112, - 38.88267940593603, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H02032" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0403209075553, - 38.92316371498957, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/16/06

Report Problem", - "NAME": "H02033" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02791881707249, - 38.961194797764165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02034" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97799390592007, - 38.932179992831124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H02035" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97814440691053, - 38.931196133866045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H02036" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07477676683689, - 38.94714093883515, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H02037" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03472560380943, - 38.91561818182411, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H02038" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06648448520178, - 38.9381858087151, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H02039" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01375746415471, - 38.9661773705575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02040" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01860847798358, - 38.94409470203794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H02041" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01604122221272, - 38.96618846599088, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02042" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02740139650898, - 38.95070423788856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H02043" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0073339718771, - 38.91632205907361, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02044" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0717352739266, - 38.94623056694789, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H02045" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03249570494033, - 38.94088218462271, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H02046" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02799132687733, - 38.90385847120674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H02047" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02440035145413, - 38.97371624193505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H02048" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0272025847413, - 38.949028186655774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H02049" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02805792591415, - 38.958395385388215, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02050" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04283632585633, - 38.91971254175975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H02051" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02165365747527, - 38.97824966013551, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H02052" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03652476029528, - 38.943888141926635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/11/07

Report Problem", - "NAME": "H02053" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07449684718694, - 38.94964388803114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H02054" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99959130326096, - 38.84050973345047, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H02055" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99168475000235, - 38.89727239238158, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02056" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98358277442742, - 38.89213999947586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/01/06

Report Problem", - "NAME": "H02057" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06581360425771, - 38.903391094750354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H02058" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03767408103673, - 38.92684424392952, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H02059" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00071474302833, - 38.89087894292024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H02060" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0893077075887, - 38.91397769329134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02061" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04303475872973, - 38.933338780457895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H02062" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02841464778555, - 38.95072893090878, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H02063" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00702920739757, - 38.88971816676756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02068" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11068097615896, - 38.92982224140037, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy, K81A

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02070" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93546440677869, - 38.89761458434923, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H02071" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01279298893496, - 38.970053987944816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02072" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01886411973993, - 38.97594601026155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02073" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01510427761703, - 38.91121076684343, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02074" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0258433151407, - 38.89743849331662, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H02075" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96363594637835, - 38.92982781557876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H02076" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03124248541948, - 38.9758425654708, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02077" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03313102750121, - 38.97584890997978, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02078" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0306355303094, - 38.89744309121334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H02079" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01443393948755, - 38.915792554597964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02080" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98624009700451, - 38.90332648549664, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02081" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04355951281299, - 38.9004501398706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02082" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02380855600049, - 38.912663830912344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02083" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02871534096461, - 38.90066186080205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H02084" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03075254648903, - 38.918162103708404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02085" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03181528597833, - 38.907917402405666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02086" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03361447407345, - 38.900705208311415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02087" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0561510368247, - 38.92123790355169, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 01/08/07

Report Problem", - "NAME": "H02088" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03393058018769, - 38.898790354085925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H02089" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03211219285566, - 38.89880036289175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02090" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0122386304132, - 38.89661328362694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H02091" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01325012836391, - 38.90147950741581, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H02092" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04117485780813, - 38.9252185482281, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/16/06

Report Problem", - "NAME": "H02093" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04646969315603, - 38.91191167494785, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02094" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02413662584776, - 38.95106142388892, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H02095" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05700782847092, - 38.90857645285621, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02096" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05590996045036, - 38.90691662780565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02097" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0272324580154, - 38.91117676112862, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02098" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05818038207765, - 38.90616766409246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02099" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0610946029378, - 38.90402570196853, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/31/07

Report Problem", - "NAME": "H02100" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04763197885745, - 38.9072899624411, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darily

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02101" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04865085994038, - 38.90638797807777, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H02102" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99031178879729, - 38.87855697638659, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/10/08

Report Problem", - "NAME": "H02103" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06533689590646, - 38.933402777603625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H02104" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01396964136951, - 38.91302011575282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02105" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98837618739869, - 38.894900856166906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H02106" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99271483725506, - 38.89488319058328, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H02107" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02436776089716, - 38.93746773926977, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H02108" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99151756995002, - 38.93958044371077, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H02109" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00668310530443, - 38.9126596604995, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H02110" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01509588956083, - 38.913199232576574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02111" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07302537132628, - 38.92356707506844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02112" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0575723541407, - 38.92769173627025, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/09/07

Report Problem", - "NAME": "H02113" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02582720764399, - 38.95639859664712, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H02114" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03058637385794, - 38.91257550297117, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H02115" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0378605303757, - 38.93377852776354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H02116" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03076176729697, - 38.91181686469185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/10/07

Report Problem", - "NAME": "H02117" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0274564324348, - 38.96617803724361, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02118" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03073133751631, - 38.91553218098514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/01/07

Report Problem", - "NAME": "H02119" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02687525325523, - 38.97239092150284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02120" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0320867969527, - 38.91492174522641, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02121" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03323907281033, - 38.914796720750026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02122" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02670878225192, - 38.97480224732966, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H02123" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08903221648488, - 38.91006626473149, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02124" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03640515244933, - 38.91764286075749, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02125" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00218748943851, - 38.921348672319816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H02126" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98544126487761, - 38.89624057570366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/03/08

Report Problem", - "NAME": "H02127" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03400089118982, - 38.93422699451916, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H02128" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02960748865249, - 38.953951911276405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H02129" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03657486154742, - 38.94969582787546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H02130" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04364077262919, - 38.92669473808517, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H02131" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02955678141574, - 38.98043313542413, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02132" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04288033549176, - 38.92887020300115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H02133" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04400623305133, - 38.92975164408644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H02134" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03865173289707, - 38.943000808381264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H02135" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01703578605907, - 38.870428821330094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H02136" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00604478727104, - 38.906490529810775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02137" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0182049262469, - 38.87078014386674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H02138" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01878861433661, - 38.906500084559404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02139" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01878598317823, - 38.91191873882881, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02140" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0387175452137, - 38.944941549684245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H02141" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04162614917688, - 38.8967882521077, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/06/07

Report Problem", - "NAME": "H02142" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03635510774349, - 38.94836095988495, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H02143" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99213385238693, - 38.93622897754184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02144" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04245885027528, - 38.897426555352695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02145" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07012749042492, - 38.93806974288582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/27/08

Report Problem", - "NAME": "H02146" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03771620511618, - 38.958473355730874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02147" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05628748429913, - 38.92606582966359, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/09/07

Report Problem", - "NAME": "H02148" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0389526346283, - 38.94406995606748, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H02149" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03420260089324, - 38.93669585850738, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H02150" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08847030359233, - 38.954752361988504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/14/07

Report Problem", - "NAME": "H02151" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08508726950372, - 38.95475162102491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H02152" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04324745320626, - 38.9118196576921, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02153" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06890400781782, - 38.905977755219396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/02/07

Report Problem", - "NAME": "H02154" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06998948725547, - 38.90595148124361, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02155" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07139584191576, - 38.905910290901204, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H02156" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07149471587194, - 38.90770461271906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/24/07

Report Problem", - "NAME": "H02157" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07197006315903, - 38.90577348908487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02158" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07039851059882, - 38.9077772370552, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/18/07

Report Problem", - "NAME": "H02159" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98815055134135, - 38.8784488745766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/20/06

Report Problem", - "NAME": "H02160" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02989682974575, - 38.9451108456685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H02161" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06540582748619, - 38.90776099591915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H02162" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06530586633363, - 38.90671493028031, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/26/07

Report Problem", - "NAME": "H02163" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06330966725282, - 38.90918708185487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H02164" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06799228625695, - 38.90878857894755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/22/07

Report Problem", - "NAME": "H02165" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09994051170968, - 38.91960020280701, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H02166" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98716697453132, - 38.89895685334767, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H02167" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06798400027944, - 38.91066751737259, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H02168" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02797789889527, - 38.97943563807483, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02169" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02613887142148, - 38.96380903479555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H02170" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01900918370542, - 38.896259979889884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H02171" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01536407089658, - 38.90569403159171, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02172" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08498011136442, - 38.94973727008438, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/07/07

Report Problem", - "NAME": "H02173" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0383050233257, - 38.91969029693658, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H02174" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07211013543095, - 38.92366007779364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H02175" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07228108336108, - 38.949722452911836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H02176" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07206835855597, - 38.92477052330977, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02177" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0686010738783, - 38.96592174351495, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/20/08

Report Problem", - "NAME": "H02179" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04887104317531, - 38.90190913123874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 10/23/07

Report Problem", - "NAME": "H02212" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03476597403088, - 38.93530075715645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H02213" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01025778048266, - 38.911065015407424, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02214" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07129942389474, - 38.971976200252676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02215" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99837980466911, - 38.897210708559165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02216" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04726285980533, - 38.90794181221872, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02217" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0472969765816, - 38.91265530573976, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02218" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98942147352926, - 38.9036356051964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/13/07

Report Problem", - "NAME": "H01957" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0631571534827, - 38.94318530156407, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/08/07

Report Problem", - "NAME": "H01958" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98902356187968, - 38.904507297697904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/02/07

Report Problem", - "NAME": "H01959" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02757047573542, - 38.9649962454915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/08/08

Report Problem", - "NAME": "H01960" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9945771025899, - 38.92283463384243, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H01961" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0385309248215, - 38.918007593046426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H01962" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0411883523277, - 38.91192440297233, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/03/07

Report Problem", - "NAME": "H01963" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00043045788391, - 38.919257958827444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H01964" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98862964483567, - 38.93074143457421, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01965" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.040636396296, - 38.90029235783908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H01966" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02157512765002, - 38.974838015796365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/23/07

Report Problem", - "NAME": "H01967" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02803919716007, - 38.91128538206297, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H01968" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02253152430067, - 38.957483449624014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H01969" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06653554269433, - 38.93633869104572, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/22/07

Report Problem", - "NAME": "H01970" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06869395979669, - 38.93639869889583, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/06/08

Report Problem", - "NAME": "H01971" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01152851233472, - 38.910429664761125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H01988" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94089019499285, - 38.911214375772396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H01989" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04138129021726, - 38.942992865530066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H01990" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08025761988256, - 38.908573497441154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H01991" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9942430741517, - 38.86293060932371, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H01992" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05135984983349, - 38.898448961626094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H01993" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02982220409694, - 38.97802934999025, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H01994" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03181370793966, - 38.94966703374758, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H01995" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07475851651334, - 38.946326304443325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H01996" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07711304159017, - 38.94716766205143, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H01997" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.967520986969, - 38.930954620042776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H01998" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02248486873098, - 38.92684122591908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H01999" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.036271452233, - 38.919143671935224, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02000" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96646320438947, - 38.92463621475183, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H02001" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01616873388167, - 38.93900814710454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H02002" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03660342018057, - 38.91569397232699, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02003" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02515982000193, - 38.96996254732763, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H02004" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0375566625569, - 38.920811806185306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H02005" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02256408737978, - 38.96996118526378, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H02006" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03875551766804, - 38.921490318110834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H02007" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11180658507733, - 38.93407922806082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H02008" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98280708620482, - 38.93201242573101, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02009" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03543304230105, - 38.947240234753686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H02010" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07891400537676, - 38.959601874909225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02012" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02950880433558, - 38.95295467583174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H02013" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0690084666058, - 38.966841137811286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H02014" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03283045891598, - 38.93855793352463, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H02015" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99032363698532, - 38.89750333405455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H02016" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0295067617474, - 38.957328846992304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02017" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02961941889164, - 38.95634217050676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02018" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02016868063262, - 38.94427192448788, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H02019" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0318281675755, - 38.90306707799152, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 02/04/08

Report Problem", - "NAME": "H02020" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07208174668037, - 38.92742798694648, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H02180" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0145632670662, - 38.910421903042455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02181" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00344645438211, - 38.92034688929146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/07/08

Report Problem", - "NAME": "H02182" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0021272623016, - 38.9202774215236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/25/07

Report Problem", - "NAME": "H02183" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07094136439243, - 38.924772230811264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02184" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07094319360175, - 38.92610084869127, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H02185" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06627664070031, - 38.91269273578324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H02186" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06570383789055, - 38.91172554545512, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02187" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10873919584331, - 38.92874085915821, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02188" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9962337831072, - 38.89622438738672, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/01/07

Report Problem", - "NAME": "H02189" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96893566778297, - 38.92662307882042, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H02190" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06629309703835, - 38.9276310651576, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 01/12/07

Report Problem", - "NAME": "H02191" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04997279803068, - 38.90534685658149, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02192" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00196887277293, - 38.900473423214414, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/28/07

Report Problem", - "NAME": "H02193" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0235377836542, - 38.94715885445253, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H02194" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01430750265538, - 38.9444052015688, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02195" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0692826441224, - 38.91447182354517, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02196" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07494620895606, - 38.95707490232092, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02197" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06945067919192, - 38.915561777553435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H02198" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02797705271975, - 38.98042565079019, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02199" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02601972222021, - 38.9584925694157, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02200" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06624618189082, - 38.93471894654501, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H02357" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06787968304695, - 38.96857024659039, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02358" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96798934459109, - 38.93222581232258, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H02359" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07286764970894, - 38.96868836065294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/26/07

Report Problem", - "NAME": "H02360" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02896394982665, - 38.915627319032964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02361" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08116003122717, - 38.96212589286107, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 02/15/08

Report Problem", - "NAME": "H02362" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06580430208457, - 38.92961147680641, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/18/06

Report Problem", - "NAME": "H02364" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06511632318453, - 38.92910428879062, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 01/17/07

Report Problem", - "NAME": "H02365" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93264391094284, - 38.89984674186864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 01/11/08

Report Problem", - "NAME": "H02366" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96237761379567, - 38.93415531387043, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H02367" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96512484852082, - 38.93416388599946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H02368" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03878279699964, - 38.950510275064076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 02/06/08

Report Problem", - "NAME": "H02369" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03762467602706, - 38.95152121964144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 02/26/08

Report Problem", - "NAME": "H02370" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05525993258135, - 38.91691035781633, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/15/06

Report Problem", - "NAME": "H02371" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02235032865342, - 38.9585893024244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02372" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08372579015492, - 38.954532748106296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H02373" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02324613211594, - 38.96869367333492, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02374" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99044739086317, - 38.89472569604125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Dariling

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02375" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95968505551676, - 38.875735602629504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02376" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02716475075219, - 38.90656711695723, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02377" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06020846411761, - 38.9238749078651, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/10/07

Report Problem", - "NAME": "H02378" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99228035134483, - 38.92659551340002, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H02379" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05526351497318, - 38.94376505555505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/22/06

Report Problem", - "NAME": "H02380" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05845632205478, - 38.942097365523594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H02381" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0618067352162, - 38.92480334481349, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/16/07

Report Problem", - "NAME": "H02382" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05639066405435, - 38.94201891814282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H02383" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06274865251294, - 38.92546017090525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/16/07

Report Problem", - "NAME": "H02384" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05524760081336, - 38.94377088243079, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H02385" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02557271942077, - 38.94907192939675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H02386" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07593972509883, - 38.944680522088724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02387" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05613018236808, - 38.931691920728454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/02/07

Report Problem", - "NAME": "H02388" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0514492669259, - 38.92548648280563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/02/07

Report Problem", - "NAME": "H02389" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05214180884387, - 38.92667391344616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/11/06

Report Problem", - "NAME": "H02390" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05833191858744, - 38.92270059788185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/08/07

Report Problem", - "NAME": "H02391" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05798642473613, - 38.92315542887408, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 11/08/07

Report Problem", - "NAME": "H02392" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98069784544856, - 38.92547621536049, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/26/07

Report Problem", - "NAME": "H02393" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99081645338033, - 38.92863924959949, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H02394" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03345040785578, - 38.93419903844846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H02395" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00071776984767, - 38.92134527643473, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/28/07

Report Problem", - "NAME": "H02396" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9899552805556, - 38.93252538980631, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02397" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05517070320607, - 38.930112833667756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/02/07

Report Problem", - "NAME": "H02398" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05406379803276, - 38.92818587849188, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/04/08

Report Problem", - "NAME": "H02399" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03683464682743, - 38.927662259256216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02400" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03788948094103, - 38.92462147121205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H02401" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06090752725551, - 38.937175828684694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 03/04/08

Report Problem", - "NAME": "H02402" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06480849052048, - 38.93541460796952, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/02/07

Report Problem", - "NAME": "H02403" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06114502837157, - 38.91965176037061, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H02404" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01737612934939, - 38.9459119164944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H02405" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02086631242742, - 38.94528553123113, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H02406" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02106790249516, - 38.9159947567893, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H02407" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07408843066628, - 38.91450287268788, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/26/07

Report Problem", - "NAME": "H02408" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02105765418624, - 38.94740164121435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/14/07

Report Problem", - "NAME": "H02409" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97024663019756, - 38.93415475330891, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02410" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01903270144265, - 38.900197341701514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02411" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06776526294668, - 38.954727559802464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/20/08

Report Problem", - "NAME": "H02412" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07440743585417, - 38.95838066997117, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02421" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07403691578973, - 38.91347333331429, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02422" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04887270704579, - 38.91603208976537, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H02423" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04660436917379, - 38.91685887340063, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/31/06

Report Problem", - "NAME": "H02424" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07440050690725, - 38.959059861300844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/02/08

Report Problem", - "NAME": "H02425" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0418288310343, - 38.91189108781008, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02426" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07440789403914, - 38.960344731782484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02427" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07697852448487, - 38.95971133638402, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02428" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01452770270629, - 38.91265562440944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02429" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00046835359005, - 38.92335358393619, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02430" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08016263512539, - 38.96314549567846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H02431" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96387072005342, - 38.92241534145313, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H02432" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03870952103543, - 38.94622449397238, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H02433" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02529445304734, - 38.93602534998112, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H02434" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01610001900536, - 38.967339171096654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02435" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01605837851449, - 38.968688692625655, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02436" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00335620439954, - 38.92294433372741, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/30/08

Report Problem", - "NAME": "H02437" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0196032378562, - 38.947449638029866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H02438" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03128825325167, - 38.95628426309762, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02439" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01500843801678, - 38.9196932330382, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, USP

In Service


Last Inspection Date: 09/05/06

Report Problem", - "NAME": "H02440" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05070923922946, - 38.91413585438477, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02441" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04028689659664, - 38.90470499652097, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H02442" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07018142390883, - 38.91648482138983, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H02443" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99171211351711, - 38.937189422078106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02444" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06217911326354, - 38.965845809911194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02445" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08384763625851, - 38.96083239246911, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H02446" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03568650686427, - 38.934172865590604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H02447" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99443233256763, - 38.92193237155208, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02448" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0210696245563, - 38.94828630604302, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/21/07

Report Problem", - "NAME": "H02449" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06397683775366, - 38.96501788287509, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02450" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0707783822129, - 38.93721832759821, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 03/20/07

Report Problem", - "NAME": "H02451" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97222328355343, - 38.9350000923356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H02452" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07284995431041, - 38.91824666844355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02453" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0741262932378, - 38.915408997293135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02454" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04119815131878, - 38.940865037156996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - MEDALLION

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H02455" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02437582316252, - 38.964388844260206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H02456" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06629700670452, - 38.92908244645568, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/16/07

Report Problem", - "NAME": "H02457" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99228131837913, - 38.927463500539794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H02458" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03791652876262, - 38.96870165558358, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02459" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03664144386782, - 38.968808071060444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02460" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02423965294152, - 38.9250595707303, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/06/06

Report Problem", - "NAME": "H02461" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02261173782628, - 38.935495995555456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H02462" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9843739735885, - 38.92996681409685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02463" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02638157920737, - 38.97738657505648, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H02464" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03694884375898, - 38.92612746760467, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H02465" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02388281636263, - 38.949868140968334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H02466" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98494300643884, - 38.90498684403374, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/26/07

Report Problem", - "NAME": "H02467" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04895649402714, - 38.91340109817856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02219" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05032851993882, - 38.91244446928459, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02220" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06330655798459, - 38.92780607709113, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H02221" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0635092693931, - 38.92659036696649, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/12/07

Report Problem", - "NAME": "H02222" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04014221930245, - 38.928857302742976, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H02223" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04414980494309, - 38.92607822493934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H02224" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06317246562452, - 38.92910585111905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/17/07

Report Problem", - "NAME": "H02225" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01065584985925, - 38.914130364055296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H02226" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0694028255111, - 38.96767236555518, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/29/07

Report Problem", - "NAME": "H02227" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06418130826363, - 38.914129762646525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H02228" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0657510637312, - 38.91476324797256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02229" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03785235162083, - 38.94500788177779, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H02230" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9760509669522, - 38.9331757762038, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02231" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0362845838172, - 38.93747386292969, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H02232" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03423322680514, - 38.93737431847327, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H02233" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99598866810791, - 38.8989607863988, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02234" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06007690283022, - 38.97110904727206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02235" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02410937544778, - 38.954229728164975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H02236" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99956787931444, - 38.8948964971011, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H02237" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99828669360583, - 38.92655172315786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H02238" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05834402244399, - 38.97414129513569, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02239" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06099566046568, - 38.97187921742923, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02240" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02934472035942, - 38.936933106376976, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/20/07

Report Problem", - "NAME": "H02241" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99729640967367, - 38.896767702243615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02242" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99381980947587, - 38.89469213275735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 05/20/07

Report Problem", - "NAME": "H02243" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06502655078577, - 38.97133029950638, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02244" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05061488150095, - 38.92608851267201, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 01/02/07

Report Problem", - "NAME": "H02245" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03122529735126, - 38.94607300633347, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H02246" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0314603455025, - 38.94515329675618, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H02247" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01538670093865, - 38.94309870097209, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02248" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03436989678288, - 38.94297480560888, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H02249" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02013907402738, - 38.943145020096026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/07/08

Report Problem", - "NAME": "H02250" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03758425684003, - 38.94619154854148, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H02251" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9994416480855, - 38.89720594402789, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H02252" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03776603140655, - 38.92014033018421, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02253" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04182126609734, - 38.91415039073886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02254" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02332500499988, - 38.97240085388782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H02255" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08493324637763, - 38.948474559508874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02256" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06022581086036, - 38.922321287608035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 01/10/07

Report Problem", - "NAME": "H02257" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10692036614934, - 38.92817447276545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02258" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06633129672237, - 38.931366538258196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/17/07

Report Problem", - "NAME": "H02259" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06633059309861, - 38.93039940652756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 01/17/07

Report Problem", - "NAME": "H02260" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01884826427401, - 38.90147361260865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02261" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0258357780549, - 38.90167766683046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H02262" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98094018829131, - 38.88024831951317, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/17/06

Report Problem", - "NAME": "H02263" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9720699562511, - 38.93207567230303, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H02264" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96621951204449, - 38.93265792905006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H02265" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02986846324326, - 38.940869084765204, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H02266" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99015621764943, - 38.94170542879607, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02267" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01510655783609, - 38.9120689099893, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02268" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99828332149815, - 38.89895939230843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02269" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07314550691709, - 38.9570768534689, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02270" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03547263104721, - 38.935945746295154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H02271" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02765378008552, - 38.98297411648219, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02272" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.025554511874, - 38.94822538053987, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H02273" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03057836393977, - 38.90502680952106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02274" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02565999860138, - 38.95088985218283, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H02275" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0294930842031, - 38.90782293758968, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02276" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03156043923946, - 38.95414331253165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H02277" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02794418175219, - 38.963824003386094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02278" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06742687452288, - 38.927632524480764, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02279" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97424452074037, - 38.936089127149835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02280" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02816223051872, - 38.90975818631079, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H02281" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06470375789152, - 38.92745334801983, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/12/07

Report Problem", - "NAME": "H02282" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05167636864402, - 38.91633042860268, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/30/07

Report Problem", - "NAME": "H02283" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09958301496812, - 38.947841588884124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H02284" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07454623149088, - 38.94561523595463, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H02285" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02429440018354, - 38.965994374180255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02286" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00800824107726, - 38.8832903723711, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02287" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02020227033456, - 38.93885363989355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H02288" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02135296883517, - 38.971345114051275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/10/07

Report Problem", - "NAME": "H02289" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02235773506352, - 38.971202866376885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/06/07

Report Problem", - "NAME": "H02290" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06472127670968, - 38.93021139551453, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/17/07

Report Problem", - "NAME": "H02291" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0237139993211, - 38.94821730059552, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H02292" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00047803721469, - 38.92459222775901, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/31/07

Report Problem", - "NAME": "H02293" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01556874615575, - 38.942082677175044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H02294" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97228141047655, - 38.93317017762421, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H02295" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02307885555554, - 38.91117447543661, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02296" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03672352022497, - 38.93180919767034, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H02297" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96639061943615, - 38.92231479476334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H02298" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06984662657405, - 38.96867886274308, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H02299" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03639217625027, - 38.92332992881701, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02300" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05623907199511, - 38.94104019533707, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/20/06

Report Problem", - "NAME": "H02301" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10756082886142, - 38.929552418819014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H02302" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05661376747125, - 38.916823337844626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H02303" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10929937797565, - 38.929453750262994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02304" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10813979189241, - 38.93155736050178, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02305" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08495580620318, - 38.95096802566599, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/16/07

Report Problem", - "NAME": "H02306" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08158371393276, - 38.90771320054227, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/26/07

Report Problem", - "NAME": "H02307" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03652520878843, - 38.94071087339788, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - JUMBO

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H02413" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04116500907743, - 38.94191904581673, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - MEDALLION

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H02414" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03865462892603, - 38.948320702843226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H02415" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05882737349081, - 38.93563111491473, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 01/22/07

Report Problem", - "NAME": "H02416" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02467758786067, - 38.908524876182675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H02417" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07007617893264, - 38.95905705599412, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02418" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05254115011057, - 38.914738675618416, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02419" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07265025843519, - 38.95837427113736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02420" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05732157760308, - 38.950518491681315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02638" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01843436347409, - 38.94320120678365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02639" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01379072420467, - 38.94235063579019, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H02640" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0202476609033, - 38.92480939485326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/22/06

Report Problem", - "NAME": "H02641" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0126518743266, - 38.94432730867445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02642" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07467168795272, - 38.955555653699165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Centurion

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H02643" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0004700148885, - 38.91821011899874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H02644" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02623425495086, - 38.93432873572846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H02645" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02590411626575, - 38.96440099210452, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02646" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01481201080135, - 38.96265679101783, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/26/07

Report Problem", - "NAME": "H02647" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98823858597284, - 38.89084077004873, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 04/13/06

Report Problem", - "NAME": "H02648" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08219097651164, - 38.946350006466254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02649" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08417049107285, - 38.91174525813888, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02650" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04360486231961, - 38.92158702518876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/30/07

Report Problem", - "NAME": "H02651" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06422458346891, - 38.95857512363125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02652" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99390912333604, - 38.88132483111803, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 10/27/06

Report Problem", - "NAME": "H02653" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08748491167783, - 38.90934062209095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02654" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08346140696953, - 38.90780850688067, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02655" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02494432152615, - 38.8974392292383, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H02656" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0547514876217, - 38.94528244492111, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/19/06

Report Problem", - "NAME": "H02657" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.007302717981, - 38.87922114947467, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/31/08

Report Problem", - "NAME": "H02658" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00397984441919, - 38.90570008176016, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H02659" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04447500880534, - 38.92136548885368, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H02660" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02253206450379, - 38.96006821634684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02661" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01062932859072, - 38.971683110127216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02308" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94401534744019, - 38.898300829267846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02309" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99750516074612, - 38.924556529167454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02310" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98371769316162, - 38.89488442698911, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H02311" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0200052271911, - 38.97120577875481, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/05/07

Report Problem", - "NAME": "H02312" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03357376185724, - 38.90088891845056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H02313" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0019698162964, - 38.923369801265956, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/04/07

Report Problem", - "NAME": "H02314" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00196983806445, - 38.92248794071405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/28/07

Report Problem", - "NAME": "H02315" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08217914356655, - 38.94306008018525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02316" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98063486816388, - 38.92712991542751, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H02317" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02459980455362, - 38.97827773271868, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02318" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02555529091498, - 38.972409098743746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H02319" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09251870746847, - 38.9534322731507, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/12/07

Report Problem", - "NAME": "H02320" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97740173531604, - 38.8886205214979, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H02321" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04438494321283, - 38.91795087159957, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H02322" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03243162777484, - 38.9847965751539, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02323" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93512672537646, - 38.90710618769946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H02324" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10781993691059, - 38.927391706227155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02325" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99391201805774, - 38.92263674232255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H02326" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99254426826764, - 38.94119475442937, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02327" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01289192339381, - 38.9086596441178, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H02328" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0171289132211, - 38.9441509236998, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02329" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07132006855714, - 38.96858615234745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H02330" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99731398980849, - 38.8450141155974, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02331" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04220339865742, - 38.943867294271804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H02332" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04845967087124, - 38.915246437773575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02333" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07390424568763, - 38.907095806549556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02334" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0736850536795, - 38.90658617145866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02335" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02738498096726, - 38.937523301100654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H02336" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02210405876517, - 38.97444338354282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02337" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01540317949495, - 38.94419583591626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02338" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98102919648814, - 38.93313137847946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02339" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03325253716923, - 38.97874261500374, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02340" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02270380188011, - 38.948318853281684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H02341" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05852972304771, - 38.94960475114349, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02342" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02265472074242, - 38.94720796189297, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H02343" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06004257485797, - 38.94974622462952, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02344" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02229117767558, - 38.95435528586214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H02345" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02437869634737, - 38.963815603690286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H02346" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0863398599611, - 38.93140770002392, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H02347" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07446003484272, - 38.941327354464335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, UNKNOWN

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02348" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96154788233297, - 38.88008251981319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02349" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96154002356586, - 38.87888276159043, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02350" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93908433394238, - 38.8934714628045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H02351" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07696174519677, - 38.94465288288187, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H02352" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98452707218469, - 38.901437705643566, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H02353" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98307120359952, - 38.90081204453013, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/28/08

Report Problem", - "NAME": "H02354" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93102057926296, - 38.89633370372234, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H02355" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07686396891907, - 38.94557105371419, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/30/07

Report Problem", - "NAME": "H02356" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01993727557146, - 38.95435635055435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H02537" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02209995807004, - 38.953183598728174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H02538" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06995344197567, - 38.96318493822173, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER

In Service


Last Inspection Date: 01/30/08

Report Problem", - "NAME": "H02539" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05797381075922, - 38.947811245690204, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02540" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04449249888805, - 38.925093566962765, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H02541" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0437313994238, - 38.92561112986625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H02542" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00197057048362, - 38.90475721992508, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/22/07

Report Problem", - "NAME": "H02543" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02375637682073, - 38.95183478987163, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H02544" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99837148869801, - 38.925685088396534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02545" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08481166732525, - 38.931418250656556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/21/07

Report Problem", - "NAME": "H02546" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08629146874243, - 38.92899860671544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02547" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02112517659566, - 38.94632188757306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H02548" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02736025955492, - 38.936883015159765, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H02549" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98936423250684, - 38.90719653759504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H02550" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02207064350374, - 38.94975706476989, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H02551" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01812887101255, - 38.97134578442292, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02552" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00739160628679, - 38.87830452196592, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02553" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07163552106215, - 38.93798426750831, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/27/08

Report Problem", - "NAME": "H02554" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06756916848134, - 38.93547454431843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/06/08

Report Problem", - "NAME": "H02555" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01651326188556, - 38.972391069128726, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/10/07

Report Problem", - "NAME": "H02556" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0585651147206, - 38.94678061981897, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02557" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0684987768037, - 38.97208718020293, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02558" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97931488199157, - 38.88543187362759, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/24/07

Report Problem", - "NAME": "H02559" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99225677604774, - 38.842720862144745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H02560" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01994621168303, - 38.96600593455622, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H02561" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02298645342249, - 38.95102629822155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H02562" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00066602198648, - 38.91583061255836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H02563" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02178695993496, - 38.94844942256115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/21/07

Report Problem", - "NAME": "H02564" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99012191567768, - 38.940768527745675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02565" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06699514622558, - 38.905166258010226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02566" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06787837762634, - 38.90495225024058, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02567" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06206805278661, - 38.90527136838642, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H02568" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06339878951073, - 38.90505979534415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02569" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04119047446572, - 38.944128490494286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H02570" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06536083795007, - 38.931337510721534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H02571" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08735842976952, - 38.92953195304519, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H02572" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97886664211478, - 38.88691051908534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H02573" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02234745800985, - 38.96205548185861, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02574" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05264608758037, - 38.931277610454146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/11/07

Report Problem", - "NAME": "H02575" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0499058828883, - 38.93111799632543, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/11/06

Report Problem", - "NAME": "H02576" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98576094399658, - 38.90093807891935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/20/07

Report Problem", - "NAME": "H02577" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07034337570465, - 38.96586660483941, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H02578" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03356365134552, - 38.98233090562, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02579" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03356402105845, - 38.9814006899206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02580" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03462407441155, - 38.982331452288975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02581" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07589391357558, - 38.94120904523332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02582" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07909860910051, - 38.94706214563604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02583" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07723277946742, - 38.94306461496949, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02584" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07656531354291, - 38.94229559292867, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02585" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07567379257732, - 38.94045803139844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02586" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07413278665766, - 38.93770752485326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02587" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07331951862218, - 38.93623038838182, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02588" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0245030808214, - 38.97139829362167, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/09/07

Report Problem", - "NAME": "H02589" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01990199905, - 38.94986527411361, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H02590" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01789066704265, - 38.97350309510924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H02591" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0007294738845, - 38.922415780367054, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02592" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0272675620226, - 38.938548247373376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H02593" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00916266815548, - 38.95876382199242, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02594" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9357146481344, - 38.89978131465113, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02595" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03664550685504, - 38.967845349898745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02596" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07328740185461, - 38.92905439999068, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H02597" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97604628676176, - 38.934164130205055, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H02598" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95972973043133, - 38.88297298724842, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02599" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95997294891637, - 38.88359457741618, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H02600" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02201973572386, - 38.951891125277406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H02601" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97984624043404, - 38.934947902801184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02602" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0625062994089, - 38.93843053414935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 01/26/07

Report Problem", - "NAME": "H02603" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96592309936018, - 38.9351485936903, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H02604" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98429827931386, - 38.90578355671845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/26/07

Report Problem", - "NAME": "H02605" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96284765886905, - 38.93293790192038, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H02606" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09418305797594, - 38.95109207168437, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/12/07

Report Problem", - "NAME": "H02607" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99234638111264, - 38.92385113399154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H02608" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96024224750482, - 38.86058591036806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H02609" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97424814716976, - 38.9382155544687, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02610" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9752600565698, - 38.93821872774666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02611" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97208111033463, - 38.93607823484159, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 02/20/08

Report Problem", - "NAME": "H02612" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04881156595594, - 38.89358395097665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H02613" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07703142445881, - 38.95630483572565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02614" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01982393727567, - 38.96999904805907, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/03/07

Report Problem", - "NAME": "H02615" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97429970712867, - 38.93728397289016, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02616" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08615064137359, - 38.95454302150347, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H02617" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98822548703528, - 38.941713664002535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02618" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99114896058126, - 38.93529353037824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02619" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99104248181496, - 38.936285939543026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/03/08

Report Problem", - "NAME": "H02620" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08826919835818, - 38.907729970032534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02621" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.080677145523, - 38.949630408745456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H02622" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98465105467753, - 38.90264300390329, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H02623" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02712628166776, - 38.94395715481392, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H02624" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02333724266687, - 38.96558114465148, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02625" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08870407217199, - 38.93039269272922, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H02626" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07343974357367, - 38.95162130597298, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H02627" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9761044289552, - 38.89954085591208, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H02628" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0781152624224, - 38.95890564928163, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02629" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03573578521663, - 38.906870048628264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H02630" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07553694946108, - 38.91524895262129, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02631" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06302838633292, - 38.91333295411593, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02632" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05397875475903, - 38.91777949496411, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/15/06

Report Problem", - "NAME": "H02633" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.981249544108, - 38.93488892478633, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02634" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0243342749057, - 38.95915744459947, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H02635" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02398777772999, - 38.958520578233106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02636" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0287741749278, - 38.96183474398523, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02637" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02237690928489, - 38.96674090982503, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02662" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02304635422067, - 38.978263032441106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H02663" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03630327820098, - 38.93441061193483, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H02664" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0273384955068, - 38.967236452604865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02665" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02581937400355, - 38.96732372744953, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02666" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97793423332969, - 38.93403952970115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02667" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97977231362411, - 38.93602750772483, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H02668" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98468499851424, - 38.937099260193314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02669" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00797525587318, - 38.95867309675644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02670" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02960082318928, - 38.98312918478488, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02671" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02960259495912, - 38.98147660893936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02672" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99131299040658, - 38.94120618200432, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H02673" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99287880185298, - 38.92456820278567, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H02674" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08248717048006, - 38.91174893592211, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02675" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05379829564731, - 38.95061637448283, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 03/10/08

Report Problem", - "NAME": "H02676" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05708032507926, - 38.94972104399757, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02677" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97411396213127, - 38.93956547173503, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02678" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05337147216997, - 38.90160242723158, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H02679" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07455248321001, - 38.94389393758971, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02680" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07574402514736, - 38.92745986634318, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02681" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98664967428418, - 38.90137634132128, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H02682" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96547678509202, - 38.92666725791586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H02683" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06913209618116, - 38.96104876759208, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02684" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0415338475478, - 38.9197369200528, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 10/23/07

Report Problem", - "NAME": "H02685" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98835980872528, - 38.942789699430485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02686" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01354477416085, - 38.96275094578935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H02687" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02587272128599, - 38.960082658725554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02688" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06967068092413, - 38.96198036107136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/03/08

Report Problem", - "NAME": "H02689" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02288262501449, - 38.90024466559525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H02690" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06598766397853, - 38.9586972127499, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02691" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06571669484644, - 38.959878960853544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02692" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03608807839835, - 38.970773372655756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02693" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00703976734135, - 38.835064416182405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H02694" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00624204787314, - 38.83476679510385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02695" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9850618348579, - 38.900697522529086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H02696" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08652146281827, - 38.93701534412659, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H02697" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0210259953851, - 38.953136052981, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H02698" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07304574402293, - 38.9194310966336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02699" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96245836531008, - 38.93097153451782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H02700" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96520489309603, - 38.92012397459474, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H02701" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02797906534607, - 38.98123057075456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02702" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9660450441877, - 38.92122865140622, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H02703" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01754489592821, - 38.94741380583731, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H02704" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07454823026318, - 38.944702632269674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H02705" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03606783135201, - 38.96998530213775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02706" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01796820270324, - 38.96278505851114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02707" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02717417225318, - 38.89846227093731, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H02708" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02690274488064, - 38.89906856041094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02709" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02126259584207, - 38.9672276079961, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02710" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02681234424902, - 38.8974490669438, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H02711" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0121051916335, - 38.87449751374221, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02712" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01979880651939, - 38.95937432761223, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H02713" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96149342565168, - 38.93176697841911, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H02714" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01998635169623, - 38.960232305185635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02715" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07549380151357, - 38.91446445342166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02716" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96026513547736, - 38.85954099530886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/18/07

Report Problem", - "NAME": "H02717" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04246905200324, - 38.922676225441805, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/01/07

Report Problem", - "NAME": "H02718" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05754488275126, - 38.959587734298275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02719" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96158842123879, - 38.85954069045356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H02720" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02125660353127, - 38.9686858544096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02721" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09095103126786, - 38.930336438438886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02722" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97603374596963, - 38.90013634801519, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, ALorton

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H02723" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10634529491905, - 38.926696218793246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02724" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06292700337468, - 38.96457792209319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H02725" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01733118435389, - 38.94841755808591, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02726" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06149210630153, - 38.964874687582615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02727" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0757762150883, - 38.92630087141769, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02728" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99381977499158, - 38.88684027247317, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02729" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96073549382282, - 38.879231947439266, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02730" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02962030494675, - 38.94412082455208, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H02468" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01787494925566, - 38.97239819261687, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H02469" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05243315647581, - 38.917893523510216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 04/10/07

Report Problem", - "NAME": "H02470" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05231553649288, - 38.918769852511254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/15/06

Report Problem", - "NAME": "H02471" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99959125427705, - 38.9174707876315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02472" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99024512411675, - 38.906418140100186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H02473" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98902682534181, - 38.90450224431941, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H02474" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02870471880496, - 38.982184671468154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02475" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02713414932595, - 38.96999227447476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02476" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03356480911077, - 38.97944754535645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02477" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07295081865969, - 38.91707568445428, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02478" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0125781038407, - 38.97131856063084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H02479" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08210481711443, - 38.95895057851505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02480" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07023686575405, - 38.96482982831641, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02481" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96878861215555, - 38.872989279174504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02482" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07155048194703, - 38.90859926968672, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02483" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98536050657182, - 38.85852835561634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H02484" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98235192635182, - 38.86829500818065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H02485" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0617300239778, - 38.95084857131873, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02486" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01958554387404, - 38.94833879409187, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H02487" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98389137909558, - 38.928002639573705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H02488" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06032114428511, - 38.947910311200225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02489" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98255158013245, - 38.92987446429014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "null

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02490" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02074332933599, - 38.94904158230055, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H02491" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00335184310933, - 38.92338755222246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/28/07

Report Problem", - "NAME": "H02492" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07453920271344, - 38.92072243430179, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02493" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02395728255865, - 38.95312804822754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H02494" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92454893113323, - 38.8877063556372, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H02495" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98504739161407, - 38.867635572547385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02496" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96141689939331, - 38.86160613865794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H02497" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96470789694999, - 38.860826203846194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02498" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9615870524531, - 38.86054263367201, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H02499" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01377791304122, - 38.967142484485365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02500" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99159569783862, - 38.89189301251123, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 11/16/06

Report Problem", - "NAME": "H02501" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0081087729727, - 38.91265720106606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H02502" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02386091420239, - 38.94912544014645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H02503" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01981977463699, - 38.91524145511604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02504" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04653791578609, - 38.93440476891451, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/01/06

Report Problem", - "NAME": "H02505" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0386704240855, - 38.94715544969017, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H02506" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9853012082339, - 38.903105026892945, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H02507" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98476570891793, - 38.903874668000846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02508" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9841988909006, - 38.904671678696246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H02509" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08614169405193, - 38.93254277613375, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H02510" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08635531173482, - 38.93033880742206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy, K81A

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H02511" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99136181329705, - 38.9056356457202, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H02512" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99361190640226, - 38.92850485165855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02513" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96407524474564, - 38.93292952060768, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H02515" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07286678357575, - 38.92995519697157, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02516" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07291624480223, - 38.93068437990354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02517" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09691804556762, - 38.94973736942091, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H02518" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01659968397014, - 38.94648048790097, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02519" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05583635193537, - 38.91732244921431, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H02520" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01926967817015, - 38.94514473561404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H02521" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03400513235559, - 38.927473059401436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H02522" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00461969193535, - 38.91253773335434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H02523" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97907626040227, - 38.88315960146201, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/26/06

Report Problem", - "NAME": "H02524" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0223726676866, - 38.96506522365824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02525" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02237380545215, - 38.96604305965153, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H02526" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02105290772236, - 38.96558644269551, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02527" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96175158600312, - 38.92230999037113, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H02528" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02429424818841, - 38.96483765219254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02529" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08384401659636, - 38.92899800094187, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02530" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97407244182004, - 38.934161925371164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H02531" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04776528729575, - 38.90158273835266, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02532" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0477741582394, - 38.90074758788903, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H02533" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08878949369527, - 38.93234353971116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H02534" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0194803771406, - 38.94642281374821, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H02535" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07049248536562, - 38.95798521892536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02536" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02459890932167, - 38.95198242334732, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H02902" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0143887434619, - 38.96856663211834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02903" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02180522638218, - 38.91772886939987, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H02904" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01940475425917, - 38.949154055270625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H02905" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.040897844142, - 38.98695363977869, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02906" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02313489206699, - 38.94977973101786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/14/08

Report Problem", - "NAME": "H02908" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00003065967012, - 38.84738203330689, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H02909" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01970155064404, - 38.950887314757594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H02910" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08736464203297, - 38.92760844786164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02911" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96011631015338, - 38.8573554648712, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H02912" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08850282097029, - 38.92756926109673, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02913" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96386257262297, - 38.88012288687299, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02914" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0699376582201, - 38.94974596661718, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H02915" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99163012405444, - 38.888394991187646, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H02916" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06702757555705, - 38.949749536027184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02917" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07733838562105, - 38.967086534709644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H02918" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0885831439012, - 38.92877448591992, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H02919" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06973636272916, - 38.94885014153114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02920" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06651544284968, - 38.94884236163414, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02921" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06802568692844, - 38.95146170298381, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H02922" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06524231015274, - 38.95176906625256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H02923" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06665594828573, - 38.951909851851, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H02924" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03176816151006, - 38.89721848945617, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H02925" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06509575606306, - 38.950803415889446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H02926" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99382306172488, - 38.89281046491458, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H02927" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02882609154034, - 38.90570689899109, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H03087" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04776698264268, - 38.90850458380797, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03088" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02815455389718, - 38.90652160667121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H03089" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0447434790466, - 38.90784136120179, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03090" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07078317429435, - 38.93560885666946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/20/07

Report Problem", - "NAME": "H03091" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03341630351177, - 38.919804401258716, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H03092" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03208475040314, - 38.90186314024949, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 10/05/07

Report Problem", - "NAME": "H03093" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03037686585058, - 38.905609116809615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H03094" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0425887405051, - 38.9163995937398, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H03095" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05466293887393, - 38.918395878206084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/15/06

Report Problem", - "NAME": "H03096" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05296743828444, - 38.91890325145118, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/15/06

Report Problem", - "NAME": "H03097" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04041173538481, - 38.91415293161991, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H03098" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03164030582494, - 38.899632314630544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03099" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0433075056648, - 38.91604122130108, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H03100" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01772139508522, - 38.892333362761406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03101" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03208871737974, - 38.89953363185921, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03102" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0813364855882, - 38.9107543116095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03103" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02305874662248, - 38.894909950671675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03104" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03469703694248, - 38.932553578595794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H03105" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02306608203807, - 38.89599191704609, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03106" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02341688809271, - 38.93110941478698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H03107" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08140393638062, - 38.91174491219483, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03108" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02307672864536, - 38.928904419535314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H03109" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02321323735772, - 38.929736751362, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H03111" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02363740761078, - 38.932757521025074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H03112" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02108444452564, - 38.96020832152155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H03113" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9751703353952, - 38.939563106514754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/11/08

Report Problem", - "NAME": "H03114" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01742002027113, - 38.89345571587333, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03115" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08744946688167, - 38.9470383515712, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03116" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08848230121285, - 38.94713986344964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 07/28/05

Report Problem", - "NAME": "H03117" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0479340301891, - 38.90643934270487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H03118" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04285137720532, - 38.98895768083349, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03119" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94193495963901, - 38.90569577398126, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H03120" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98230029298894, - 38.89551555416437, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/07/08

Report Problem", - "NAME": "H03121" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02365560071762, - 38.89401038185349, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/28/06

Report Problem", - "NAME": "H03122" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98807822613291, - 38.86387088247043, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03123" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01971398518002, - 38.89252267868498, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03124" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97983242169656, - 38.864979964405556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H03125" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07296261495479, - 38.96986861548283, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03126" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09585423574843, - 38.93338040076271, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03127" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09741394888795, - 38.933635001211, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H03128" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0200994217569, - 38.89296300519965, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03129" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02608030639787, - 38.89599669701374, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03130" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02608327485271, - 38.89626499248735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03131" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0260869710429, - 38.894929600508185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03132" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07032810487607, - 38.96981385598583, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03133" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99106326491763, - 38.93160310137425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03134" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99244617314679, - 38.93153137570906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03135" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99361543002202, - 38.93049740888045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03136" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06999632434669, - 38.94401711428125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03137" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09425666496513, - 38.93503335500786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03138" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09611635346562, - 38.93598523441239, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03139" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09610696448924, - 38.935959352268156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03140" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07011629969837, - 38.944717310565544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H03141" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99236947888178, - 38.930541628026205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/08/07

Report Problem", - "NAME": "H03142" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09794780001978, - 38.935872065100014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03143" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02854188135831, - 38.98408985876794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02928" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94027872795944, - 38.901433086539136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H02929" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05837722138072, - 38.97263133631645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02930" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06137547955139, - 38.923426389022524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/16/07

Report Problem", - "NAME": "H02931" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9451951819191, - 38.89968399208242, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02932" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06402924165414, - 38.97130562674562, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02933" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0200050247894, - 38.96723731558112, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02934" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06623855970695, - 38.96765773369292, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H02935" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02000738459866, - 38.962654657219545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02936" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08852181372436, - 38.95709113065836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H02937" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02187068391794, - 38.9491867343747, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H02938" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01762649204353, - 38.94994516439553, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H02939" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08852757171282, - 38.95600494548803, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H02940" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02215820738881, - 38.95088274915812, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H02941" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97110287178758, - 38.86829860368583, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H02942" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.101181272711, - 38.92303626298996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02943" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03668272521205, - 38.9472520915482, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H02944" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9827990160731, - 38.935010991342544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02945" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98292247631936, - 38.93399192734275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02946" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9862392881322, - 38.92987011919891, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 12/21/07

Report Problem", - "NAME": "H02947" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96580306856188, - 38.931464603772504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H03227" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02092291998343, - 38.950915451586106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H02731" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99504803004115, - 38.886799640154344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/23/06

Report Problem", - "NAME": "H02732" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03356052041585, - 38.98325528461156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02733" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97735925089813, - 38.90376141255918, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/05/07

Report Problem", - "NAME": "H02734" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05700505788282, - 38.929619667189975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H02735" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98823540752882, - 38.88690853239119, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/09/06

Report Problem", - "NAME": "H02736" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99369186423148, - 38.888211782237654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H02737" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98847055158396, - 38.885407291194156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H02738" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0644464776546, - 38.975088712227425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy, K81D

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02739" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04781167214053, - 38.92154345500451, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H02740" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04792649812599, - 38.92060728084153, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H02741" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04697267821008, - 38.91787419006351, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H02742" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08377053342369, - 38.949734683898505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02743" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92615456755493, - 38.89730507398183, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H02744" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04023335344576, - 38.94750085820114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02745" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04991627848544, - 38.914764554297705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02746" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98939281339175, - 38.88541362139925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 04/28/06

Report Problem", - "NAME": "H02747" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03317375143408, - 38.91266352015362, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02748" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9893943475846, - 38.88416452819514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/28/06

Report Problem", - "NAME": "H02749" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0498702157463, - 38.91585565446687, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/31/06

Report Problem", - "NAME": "H02750" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98935164636526, - 38.94277262419313, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H02751" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98558657960098, - 38.87850638413591, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 11/01/07

Report Problem", - "NAME": "H02752" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98920779018394, - 38.94171793866747, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02753" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05958974015776, - 38.93686741519019, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 03/04/08

Report Problem", - "NAME": "H02754" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96386806478893, - 38.923377069036455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H02755" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96500196998929, - 38.92349271161427, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H02756" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99623721789736, - 38.9051931170514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H02757" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1041711439131, - 38.93034687873001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Super Centurion

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02758" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10567693920379, - 38.93034570706572, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02759" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06978821523562, - 38.95321953843046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02760" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0182030047528, - 38.95784771400652, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H02762" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06113582979371, - 38.908504650197806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02763" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02846546381095, - 38.96597802008824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02764" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02851827276753, - 38.96498652348279, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02765" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98822260263263, - 38.939553142292176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02766" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05418627623949, - 38.94846208211238, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/13/06

Report Problem", - "NAME": "H02767" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98958252679594, - 38.88913655821772, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/09/06

Report Problem", - "NAME": "H02768" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9874939143268, - 38.889722239991485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 04/13/06

Report Problem", - "NAME": "H02769" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98821542043567, - 38.88963535716788, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/13/06

Report Problem", - "NAME": "H02770" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02429468621548, - 38.96023289465471, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02771" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02097121178902, - 38.95197530217497, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H02772" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01810356806486, - 38.966000198826286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/25/08

Report Problem", - "NAME": "H02773" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98838392888722, - 38.8881346416142, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H02774" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02408738607409, - 38.96662288628026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02775" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97849885896642, - 38.935017233813696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02776" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99015482688863, - 38.882948561934825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H02777" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01355757632085, - 38.963875020878895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H02778" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0620770271892, - 38.93738847588149, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 01/22/07

Report Problem", - "NAME": "H02779" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0645353958969, - 38.93715377542695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/26/05

Report Problem", - "NAME": "H02780" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99142816172018, - 38.88300746006085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H02781" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99389191034899, - 38.88354791080574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/31/06

Report Problem", - "NAME": "H02782" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9936908099422, - 38.88527491529525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H02783" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99487984117705, - 38.88536244485919, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/20/06

Report Problem", - "NAME": "H02784" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9577998695163, - 38.92928478786997, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H02785" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99736249516249, - 38.888732606981996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/23/06

Report Problem", - "NAME": "H02786" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03606541976758, - 38.98042876017387, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02787" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03664211062159, - 38.98092221336629, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02788" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03840386489804, - 38.98111491950425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02789" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06459310015308, - 38.96299674096101, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02790" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06400379625342, - 38.964058777672626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02791" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0862127218135, - 38.949601792913846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H02792" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00210435365605, - 38.88681820235681, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H02793" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01761415501166, - 38.9493189740229, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H02794" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08633562595578, - 38.94872322377017, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02795" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02811227340482, - 38.97806615772773, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/26/07

Report Problem", - "NAME": "H02796" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03267863074426, - 38.97804039652529, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02797" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02287541079497, - 38.89859864151087, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H02798" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00337703261773, - 38.88742496789653, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H02799" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01564936281108, - 38.97381538961255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02800" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07231816644787, - 38.944053706900114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02801" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02504822445354, - 38.970792022856486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02802" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00480546922454, - 38.883310042204364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/24/06

Report Problem", - "NAME": "H02803" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00708853196168, - 38.88435647499218, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02804" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03507066553969, - 38.9583983566694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02805" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06049350439324, - 38.908516443147796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02806" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96497734743998, - 38.93622278809826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H02807" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03606738466014, - 38.983261699971635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02808" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03517450948188, - 38.957169778796455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02809" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96355366677835, - 38.92123712547026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02810" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00914653023953, - 38.88443489407119, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02811" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02886988744604, - 38.9498790328301, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H02812" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0376500024943, - 38.96976644371336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02813" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99159666743031, - 38.89129452337258, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02814" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03755681828297, - 38.925968484214685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02815" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0386499319476, - 38.92640204939267, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H02816" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9883723361935, - 38.89681694406874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H02817" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05920013940896, - 38.96484396320037, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02818" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03981729799737, - 38.98593162585151, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02819" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03666006178169, - 38.98577612233834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02820" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95936042291098, - 38.89707316470831, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02821" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09662060489372, - 38.91815114002967, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02822" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.038639075481, - 38.92535102565968, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H02823" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0160874479547, - 38.95755364327408, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02824" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98358950539925, - 38.883975023099254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/26/06

Report Problem", - "NAME": "H02825" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0115096236005, - 38.95771178306311, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02826" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02872088746602, - 38.98327030166299, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02827" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98838783107377, - 38.90544650991937, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02828" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03497602345617, - 38.979443789792036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02829" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98450900238207, - 38.89365593737253, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/05/07

Report Problem", - "NAME": "H02830" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9845065187825, - 38.89468862931972, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H02831" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06116240964118, - 38.930197061130215, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/17/07

Report Problem", - "NAME": "H02832" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04515146176038, - 38.919536178937236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H02833" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05939895076244, - 38.91197129015594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02834" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98681380517935, - 38.907733012885835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H02835" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00553069177245, - 38.91190689388572, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02836" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99250686626317, - 38.903827856858626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H02837" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04962914635318, - 38.90316895449359, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H02838" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05247266824095, - 38.9001298416467, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H02839" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97604911519802, - 38.936216266633835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02840" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03042100750358, - 38.89976240391909, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H02841" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04001351905193, - 38.924347387804595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H02842" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.034326080924, - 38.91816797296458, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/09/06

Report Problem", - "NAME": "H02843" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05135344376176, - 38.901848683339836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H02844" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9848926326764, - 38.906201235112746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H02845" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03861924822975, - 38.91190855187142, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02846" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01981758338732, - 38.95213004931649, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H02847" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9873312335747, - 38.94188502526387, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02848" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06897721180758, - 38.90789082427492, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02849" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96011635569127, - 38.85842863853633, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H02850" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01714663297176, - 38.94540403641226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02851" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03627110790353, - 38.960841399367695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02852" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03836330202999, - 38.940738804845225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - MEDALLION

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H02853" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03606371287357, - 38.98232375662743, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02854" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01373058280289, - 38.97003265820491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02855" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04075901523107, - 38.94781493894056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02856" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03961425219778, - 38.94896500493843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H02857" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08188400494964, - 38.94799114368281, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02858" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07126631225275, - 38.96218720187305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02859" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0733276710173, - 38.927413438138814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H02860" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07332082549893, - 38.92609469685907, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02861" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97739677370338, - 38.88354364027425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H02862" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05943070770421, - 38.928994642311245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H02863" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01816270221923, - 38.961417233318755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02864" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08637538061116, - 38.94795314850212, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H02865" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08271188351608, - 38.9107572646946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02866" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03633603086506, - 38.924808373675376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H02867" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03638060500347, - 38.928564926314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 11/15/06

Report Problem", - "NAME": "H02868" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03638443136809, - 38.92763329442551, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/11/06

Report Problem", - "NAME": "H02869" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03632638903728, - 38.92634597927871, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/28/06

Report Problem", - "NAME": "H02870" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03636657586856, - 38.93375563460904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H02871" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08613134814472, - 38.927644486717035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02872" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07055680850449, - 38.93900010465631, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/27/08

Report Problem", - "NAME": "H02873" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98357520181932, - 38.92538268942487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H02874" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07522495460594, - 38.921755168866255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02875" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08636657697011, - 38.95098914331841, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02876" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01999650957241, - 38.96674601639446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02877" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.063921121912, - 38.91985356575158, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/28/07

Report Problem", - "NAME": "H02878" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98236021192426, - 38.88871250430753, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H02879" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10673440451829, - 38.93022662910844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02880" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07237723894121, - 38.93190779112898, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02881" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02483786340854, - 38.94303296288861, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/15/07

Report Problem", - "NAME": "H02882" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00135270385104, - 38.9013738532868, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H02883" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01979605834092, - 38.96136044139613, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02884" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06269314730781, - 38.94076765411844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/23/07

Report Problem", - "NAME": "H02885" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01477651850657, - 38.95675570231492, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H02886" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99367237037428, - 38.89955134402845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H02887" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98708760656741, - 38.93836563023403, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02888" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99368665608712, - 38.89822197206655, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02889" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03614336191062, - 38.97518158899454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02890" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06458191801624, - 38.91046945310282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/09/07

Report Problem", - "NAME": "H02891" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04547516810061, - 38.912661596130256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02892" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9906903057795, - 38.9276797012508, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H02893" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99689708810793, - 38.892597584106376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/22/06

Report Problem", - "NAME": "H02894" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98086376687272, - 38.89670413456619, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H02895" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02254618472847, - 38.96724671726225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02896" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06269067060322, - 38.95323311748991, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02897" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06168986025702, - 38.95274852743326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02898" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02410692005859, - 38.9673348398549, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02899" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06073249159013, - 38.92543132842902, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 01/16/07

Report Problem", - "NAME": "H02900" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02364450237229, - 38.95095242526244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H02901" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03523052530355, - 38.95175756798051, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H03297" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03423424607234, - 38.91708507249467, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/03/07

Report Problem", - "NAME": "H03298" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98973078274481, - 38.9068140489427, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H03299" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98885272304648, - 38.90644633779362, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03300" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03428090131767, - 38.93596628949295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H03301" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06431463065022, - 38.95987453370289, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H03302" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04372931068744, - 38.92239311552636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/31/06

Report Problem", - "NAME": "H03303" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11076819424653, - 38.93302548786255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03304" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97476030792609, - 38.8994430757703, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H03305" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05016570493255, - 38.90641621823128, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03306" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10074616355688, - 38.92244171100309, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03307" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0359774153151, - 38.917496742990586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03308" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06401258157139, - 38.94512770751248, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/19/06

Report Problem", - "NAME": "H03309" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.972553090231, - 38.89710844848632, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03310" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04823409827345, - 38.904661304085934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03311" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0579089958781, - 38.919203379751934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/16/07

Report Problem", - "NAME": "H03312" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03471726719849, - 38.918058171978856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H03313" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05929658158536, - 38.92003715234638, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 01/16/07

Report Problem", - "NAME": "H03314" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0491928417682, - 38.91921631032356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H03315" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99755014156088, - 38.90963021299381, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H03316" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02324493312351, - 38.971208837008994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/31/07

Report Problem", - "NAME": "H03317" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97334939813467, - 38.86956466614988, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H03318" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9295753801931, - 38.90712992640007, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H03319" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0013728864496, - 38.93113383195846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03320" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96556233456266, - 38.87207556892842, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03321" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00068902400164, - 38.931156331733064, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03322" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96461037011889, - 38.87828911533239, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03323" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02609296347707, - 38.94182111077709, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H03324" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00070550430765, - 38.91476881807865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03325" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98784616603112, - 38.867320684134896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03326" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.033996320508, - 38.934752188852485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H03327" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9858320785056, - 38.866959102776605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03328" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00803190570673, - 38.910447640819484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03329" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04408417959783, - 38.90728380595576, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03330" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02936940340913, - 38.899748340725566, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03433" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02793236450039, - 38.89990313246803, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03434" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99764032626777, - 38.93266149871578, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03435" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06139588781582, - 38.96683331148713, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03436" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05998637153127, - 38.967377411437006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03437" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01780065176634, - 38.95746199717616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H03438" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0850621258863, - 38.92664400433839, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03439" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01811267022678, - 38.91473332884798, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03440" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98001187991588, - 38.903631671757026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H03441" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03166179652261, - 38.94831104108468, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H03442" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09926604370759, - 38.94976474827561, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H03443" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94082029569975, - 38.898296416762875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/08/07

Report Problem", - "NAME": "H03444" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96694238720148, - 38.871877728830235, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03445" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98865543317764, - 38.907761222173676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03446" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10668063271588, - 38.93213531451373, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03447" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06378603850308, - 38.962212835309344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03448" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93794536763046, - 38.89830002372759, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03449" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04117553848172, - 38.92703646224849, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H03450" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02667355546363, - 38.98298752315273, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03451" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07005082813194, - 38.97295400624552, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03452" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97412353447909, - 38.94080864514366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03453" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04214917276605, - 38.98661722539487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03454" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93476525744737, - 38.893516667819924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03455" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97748181777493, - 38.927778093133114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H03456" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97085947471197, - 38.87144759376663, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H03457" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94331158360622, - 38.90472201663022, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 09/26/07

Report Problem", - "NAME": "H03458" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05783447726918, - 38.971482776529804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03459" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06009025073817, - 38.96966792018786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03460" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03254673160264, - 38.94820231137163, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H03461" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07712061955102, - 38.94639891718966, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H03462" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9860802044197, - 38.93712239682275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03463" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05382961284064, - 38.91634468059244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03464" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98755501515522, - 38.90393692183332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/14/07

Report Problem", - "NAME": "H03465" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04347281206081, - 38.92345821105997, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H03466" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01610489144294, - 38.906536915075314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03331" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03469643328886, - 38.95624689896507, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03332" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01716911321745, - 38.960098025323695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H03333" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06523098739477, - 38.96856797063749, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03334" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04234996255478, - 38.911180808629, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H03335" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02567608034323, - 38.97667218153771, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03336" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0463103182848, - 38.91918370699859, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/24/06

Report Problem", - "NAME": "H03337" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02583510740307, - 38.959222423474095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03338" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04085210627483, - 38.91980728118933, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H03339" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01451198699614, - 38.96507280523883, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/22/08

Report Problem", - "NAME": "H03340" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01270880921302, - 38.96384837071562, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H03341" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01371332989149, - 38.95755259459596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03342" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10136443028597, - 38.940135366154614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H03343" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97010657452317, - 38.870666572975466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H03344" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02413036517737, - 38.95952384371296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/12/08

Report Problem", - "NAME": "H03345" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0363991665629, - 38.9186570383677, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H03346" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03026347006455, - 38.94830869093847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H03347" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97441343227625, - 38.90013628363326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H03348" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99606881935534, - 38.93123222569328, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03349" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00813613177841, - 38.898990605817986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03350" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98074488060112, - 38.928314031291514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H03351" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03216073892442, - 38.89629815961426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H03352" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98089050300352, - 38.88593258465733, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/17/07

Report Problem", - "NAME": "H03353" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9827160037569, - 38.899863115137556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H03354" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97785202396865, - 38.93317642864588, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H03355" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98064753189516, - 38.88658736383662, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 04/02/07

Report Problem", - "NAME": "H03356" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98452687382702, - 38.89087227202959, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/01/06

Report Problem", - "NAME": "H03357" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0408396518367, - 38.99040349653492, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03358" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00136040600324, - 38.903853240550944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03359" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04178691624276, - 38.98969959429973, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03360" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98950462436757, - 38.89043620750151, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, USP

In Service


Last Inspection Date: 11/02/06

Report Problem", - "NAME": "H03361" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98930192604975, - 38.900290368575824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H03362" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08196364767504, - 38.96213651154911, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03363" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00217201741032, - 38.894579887660605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H03364" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00073257896204, - 38.89352328704712, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03365" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00129488980372, - 38.88681949332545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H03366" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99818834996307, - 38.893656671220334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/17/06

Report Problem", - "NAME": "H03367" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9827738929664, - 38.87940478842192, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/19/06

Report Problem", - "NAME": "H03368" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02978944986528, - 38.89747306465408, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03369" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00263207647633, - 38.89093485744887, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03370" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9970116738263, - 38.89352236830028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/17/06

Report Problem", - "NAME": "H03371" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99382340425214, - 38.87740396939212, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/07/06

Report Problem", - "NAME": "H03372" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99609680847905, - 38.89187101697557, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H03373" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00143943869173, - 38.8908449026043, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03374" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9938183830671, - 38.89532289850454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/10/08

Report Problem", - "NAME": "H03375" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98059207362998, - 38.89483170998907, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03376" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99726706755538, - 38.89206273034278, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 10/22/06

Report Problem", - "NAME": "H03377" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99270926672081, - 38.896038702323644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/04/07

Report Problem", - "NAME": "H03378" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99382389041337, - 38.89681954852394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H03379" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99957258814449, - 38.880482794892494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 11/01/06

Report Problem", - "NAME": "H03380" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00463628183971, - 38.89193024724656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03381" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00266135903874, - 38.89198713374388, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03382" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00357609404077, - 38.88337790143777, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03383" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00649776234197, - 38.91980883631186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03384" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93158734956272, - 38.89876956558682, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H03385" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02408775649945, - 38.92709242768263, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/06/06

Report Problem", - "NAME": "H03386" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98826504237935, - 38.90687277145959, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03387" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01524786921011, - 38.95773998356088, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03388" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01510927572625, - 38.95864329582148, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03389" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01601229071359, - 38.958674803639504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03390" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04425217960876, - 38.90034251792656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H03391" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97995818439382, - 38.89318979179849, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/01/06

Report Problem", - "NAME": "H03392" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06516252786108, - 38.94676396739446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/14/07

Report Problem", - "NAME": "H03393" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03218546279713, - 38.985667403902205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03394" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03041646992394, - 38.985505531321294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03395" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98578779691665, - 38.94292929569741, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/01/08

Report Problem", - "NAME": "H03396" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09914738347675, - 38.93457083996036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03397" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08851498953393, - 38.95539577085225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/14/06

Report Problem", - "NAME": "H03398" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98716895522595, - 38.944152924790885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03399" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02342075674645, - 38.963814087919516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H03400" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0337478416161, - 38.90033240399695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03401" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02427068161309, - 38.96282511490076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03402" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06308281390493, - 38.951898655356715, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 09/28/07

Report Problem", - "NAME": "H03403" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94205693021019, - 38.904697303774235, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H03404" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98044613797795, - 38.941511295281714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H03405" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9659531069675, - 38.93609799616704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H03406" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92633030369664, - 38.89446299077991, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H03407" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06267732645263, - 38.90390466511905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03408" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97735007187362, - 38.89607085770454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H03409" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9973775533355, - 38.88609521532298, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03410" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02982017295054, - 38.98373785017111, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03411" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06847002137327, - 38.927590641890546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H03412" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06287644500546, - 38.903333941911434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03413" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03360247456936, - 38.89901966666405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H03414" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08615235336855, - 38.92662663943616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03415" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93156893220028, - 38.90066374296222, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H03416" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02580865941684, - 38.96797541316662, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03417" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10759934927498, - 38.92589935689342, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03418" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03519530289861, - 38.89850501841142, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03419" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03502880919689, - 38.8984907271415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03420" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99360730840769, - 38.929493891838334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03421" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96082276272078, - 38.931304809550554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03422" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00546675425886, - 38.927512173372406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03423" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00465765290892, - 38.928481619922515, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H03424" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92341534107159, - 38.90081623862845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03425" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92454528284608, - 38.90107387430716, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03426" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03565234909287, - 38.91042511841834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H03427" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04618683047882, - 38.92317331773082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H03428" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01718318174782, - 38.95772095094627, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H03429" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02503023342399, - 38.89989009760997, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03430" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02380387978829, - 38.899896524653215, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H03431" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02589135426061, - 38.89966971861209, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H03432" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96888924928506, - 38.93032416746363, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03228" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94244393855773, - 38.89603332682141, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03229" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06686883146358, - 38.96027083349703, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03230" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9982990173124, - 38.896766676174806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H03231" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0318548600467, - 38.96025676191078, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03232" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94092887782952, - 38.89573406927598, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03233" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05310225265829, - 38.90379200372231, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03234" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97530695718312, - 38.937280892983, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03235" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02984975618305, - 38.9297171290891, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H03236" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98613881982891, - 38.93072204107117, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H03237" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97137625642253, - 38.89786249033922, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03238" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97024276680973, - 38.93622643622479, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03239" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93767823438161, - 38.89527454800895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03240" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04891458948948, - 38.9140520942187, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03241" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94050592034135, - 38.89435393475314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03242" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01422850545389, - 38.950169969405366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H03243" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98910193086898, - 38.905895789060146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03244" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01562374262963, - 38.950124867004895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H03245" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01575827746454, - 38.95100529057552, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H03246" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01464972767037, - 38.95122219179631, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H03247" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05803106258423, - 38.90464530893065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H03248" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00061885650385, - 38.907315047410485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H03249" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02131049663008, - 38.96997450039332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H03250" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04055047279483, - 38.927947880767114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H03251" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07081194986277, - 38.934782660775284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/20/07

Report Problem", - "NAME": "H03252" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93729333939501, - 38.899674198487396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 03/04/08

Report Problem", - "NAME": "H03253" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01603393578681, - 38.957137847287456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/04/08

Report Problem", - "NAME": "H03254" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02358998154966, - 38.93010707057808, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/05/06

Report Problem", - "NAME": "H03255" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02191745636011, - 38.933068867912276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H03256" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.022497638117, - 38.93397815488185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H03257" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.031922700864, - 38.96607360569486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03258" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92616527381887, - 38.88987904756654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03259" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04001458312968, - 38.94073239584887, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - MEDALLION

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H03260" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09691833606425, - 38.91922675867083, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03261" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09545286852136, - 38.91921827195258, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03262" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92737624913352, - 38.903540382115466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H03263" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02976871844585, - 38.959369574895995, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03264" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99271603523866, - 38.880327507124356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/04/06

Report Problem", - "NAME": "H03265" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02413506064522, - 38.96115808459131, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03266" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07221836024834, - 38.921208692754206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H03267" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92604935599762, - 38.89183160280566, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H03268" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07230046925673, - 38.93466808271233, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H03269" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04456011873708, - 38.9224091607994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/16/06

Report Problem", - "NAME": "H03270" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0121012816985, - 38.905738204688184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03271" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04018867609298, - 38.913248814745145, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H03272" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09863817425865, - 38.94207134705794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy, K81A

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03273" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0401485840224, - 38.91488549911225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H03274" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99067203042787, - 38.86161732073139, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03275" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00335825259928, - 38.88513816406251, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/07/07

Report Problem", - "NAME": "H03276" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06763283633927, - 38.92623420665324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/21/07

Report Problem", - "NAME": "H03277" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0332973706502, - 38.91190541524462, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H03278" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09099443256319, - 38.93144978695123, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03279" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0036762592087, - 38.88264829117101, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 11/05/06

Report Problem", - "NAME": "H03280" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00064494982652, - 38.88334813664974, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/29/07

Report Problem", - "NAME": "H03281" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03646717927317, - 38.976908113652264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03282" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06378028903576, - 38.96964855288482, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03284" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.998286048646, - 38.88573273493939, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H03285" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96527873609115, - 38.86153717534136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H03286" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93060495846773, - 38.90712227279393, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H03287" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08522915921506, - 38.95961080136902, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03288" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0346558187928, - 38.981274373552864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03289" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07692993278623, - 38.920731532738714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03290" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01791361191718, - 38.9746634328977, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03291" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01322022632348, - 38.97327780788181, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H03292" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00933043029164, - 38.911905724386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H03293" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01055762599105, - 38.97094233330344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03294" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02256016501191, - 38.968688754063066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03295" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02303479238186, - 38.97716281514932, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03296" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02498461340262, - 38.89198192469661, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03863" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97990996049893, - 38.92444369334872, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H03864" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92994573477426, - 38.89711938638032, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/28/07

Report Problem", - "NAME": "H03865" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97640335154595, - 38.89902273779327, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H03866" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01041302258128, - 38.890311457901525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03867" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02612604776414, - 38.89237705239765, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H03868" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99102877721856, - 38.93446957700486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03869" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03402348109263, - 38.92447660881721, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 08/29/06

Report Problem", - "NAME": "H03870" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06124243085797, - 38.92911490482321, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 01/17/07

Report Problem", - "NAME": "H03871" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04295605152053, - 38.985655944987855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H03872" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10076522575906, - 38.931459797065465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03874" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0004716434192, - 38.92035297474018, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H03875" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97347967764179, - 38.86340106868082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03876" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96643237263883, - 38.9300391403663, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03877" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07921944603848, - 38.943220705359096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03878" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02168194233691, - 38.89195749610055, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03879" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07588599138984, - 38.952145385513234, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03880" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04727774979757, - 38.92308294239803, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H03881" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0853625024635, - 38.90862976680895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03882" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03964665004801, - 38.9846076838793, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03830" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03908392320625, - 38.98395121053371, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03831" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96321353390363, - 38.86359825445163, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03832" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02797877832664, - 38.978736122347094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03833" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03223348196782, - 38.93156513595735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - MEDALLION

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H03834" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96158654258512, - 38.869860621375096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H03835" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08636091099869, - 38.957082089979814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03836" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96822075371378, - 38.92445615217211, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03837" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09544953554047, - 38.95204335448902, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/16/07

Report Problem", - "NAME": "H03838" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08615751312666, - 38.944918346126705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/13/07

Report Problem", - "NAME": "H03839" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02886218470458, - 38.8860928408347, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03840" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01334858680185, - 38.913399619508205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03841" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09600278938973, - 38.91565811486848, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03842" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0967897385974, - 38.91513128862411, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03843" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01591880173525, - 38.976191084700844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03844" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98418601929126, - 38.86652599227564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03845" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02460898749625, - 38.97656312313311, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03847" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09213751094268, - 38.91488682483357, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03848" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01901399351266, - 38.90357978409401, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H03849" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04161429804053, - 38.895542102096144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H03850" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01021326302616, - 38.8923027582499, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H03851" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09011456122073, - 38.92748236935688, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03852" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03252375811546, - 38.92659747651678, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H03853" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99000709490832, - 38.939065455355845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H03854" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03167043335802, - 38.891956503212036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03856" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09099426570121, - 38.93231315252996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H03857" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04337483415686, - 38.892323437960094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H03858" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04650464095003, - 38.9879141621054, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03859" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99711523397714, - 38.89465596591057, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03910" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99428317455563, - 38.89799081219083, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H03911" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97836606831018, - 38.86545894951317, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03912" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03707457511283, - 38.961072110034124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03913" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99729511234159, - 38.89541195232633, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H03914" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99731536566578, - 38.898179682432804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/22/07

Report Problem", - "NAME": "H03915" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09634210368928, - 38.929647910327986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03916" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03616492698073, - 38.979448887186656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03917" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03625476942405, - 38.98649405887124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03918" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08686362531986, - 38.95341327109391, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 11/28/07

Report Problem", - "NAME": "H03919" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93377621621066, - 38.874790865740515, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H03920" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09549553322232, - 38.92783750122455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03921" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10923121922406, - 38.93252609933625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03922" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05419366790687, - 38.95196349631073, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03923" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9588419117385, - 38.861817506729984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H03925" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93620427886142, - 38.87641616150902, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H03926" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04694119757379, - 38.987019544734004, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03927" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95152028721222, - 38.86542853072662, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/19/08

Report Problem", - "NAME": "H03928" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95574889530575, - 38.863987737400656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/28/07

Report Problem", - "NAME": "H03929" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0854956302458, - 38.93843440169358, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03930" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01532876019056, - 38.88827218569448, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03931" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06501039288709, - 38.96986047000123, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03932" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01745467700397, - 38.88891084251656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03933" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98225786810792, - 38.86540278965049, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03934" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02300351982935, - 38.90288464874361, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 08/25/07

Report Problem", - "NAME": "H03935" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98270217181815, - 38.90855545191018, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03936" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93786398290078, - 38.89682821189746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H03937" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04666180513155, - 38.9885525741736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/06/07

Report Problem", - "NAME": "H03938" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1116466981253, - 38.93561441448011, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03939" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11219363916346, - 38.93730801054442, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03940" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04757570923891, - 38.987569969160624, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03941" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02823779857899, - 38.88684356270815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03942" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0282309115219, - 38.886187556095436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03943" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00495713826047, - 38.89117948535643, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03944" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00500178262007, - 38.88988113358681, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03945" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00984618617153, - 38.87216582049221, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03946" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98823781582459, - 38.89530238124047, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/29/08

Report Problem", - "NAME": "H03947" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04572655821386, - 38.98716398606276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03948" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98106120425996, - 38.897430457030836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03949" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08464504993837, - 38.91460424377495, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03950" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03861614220645, - 38.90391449224204, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03951" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99737101257563, - 38.905014089088816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H03952" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98449943972014, - 38.90832927041487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H03953" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01073416861786, - 38.87048679200491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03954" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02285070196406, - 38.91787464961466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/26/06

Report Problem", - "NAME": "H03955" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10747703024757, - 38.937333945470286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03956" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96147869503832, - 38.93350089214056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03957" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99277574731735, - 38.903198343075225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03958" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97908142675853, - 38.89344943044639, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 08/11/07

Report Problem", - "NAME": "H03959" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08995721371068, - 38.925913061278344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03960" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01579209668822, - 38.91692364525055, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03962" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96281527751978, - 38.8750967026841, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H03963" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09670906799096, - 38.942093921271976, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H03964" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08013863133662, - 38.95336272738712, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H03965" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0660259256967, - 38.90870570386126, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H03967" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01079539551675, - 38.86829708593764, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H03467" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01201818903515, - 38.86829535398415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H03468" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98800133220846, - 38.90303708811884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/28/08

Report Problem", - "NAME": "H03469" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0445791473415, - 38.92423719413861, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H03470" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06739893007835, - 38.95538959098755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03471" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04329340794283, - 38.925014140566084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H03472" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09547235984488, - 38.92096937637083, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03473" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99091673282062, - 38.93261067803325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03474" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03561761563257, - 38.92710714782879, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H03475" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09810802359775, - 38.947861978639196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/27/07

Report Problem", - "NAME": "H03476" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09670806383083, - 38.9486836465249, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03477" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09682813870131, - 38.94704998506508, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/07/08

Report Problem", - "NAME": "H03478" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9888624176088, - 38.93370164910796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 12/27/07

Report Problem", - "NAME": "H03479" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01224225159582, - 38.91690852269912, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03480" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03213043256787, - 38.89808908467546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03481" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03626563882898, - 38.93041037748961, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H03482" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01409257250101, - 38.9141623940784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/17/07

Report Problem", - "NAME": "H03483" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97751802616081, - 38.87080205490014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03484" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03778147839239, - 38.93005594281548, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H03485" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03360436617929, - 38.98594498021841, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 02/25/08

Report Problem", - "NAME": "H03486" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03901929060466, - 38.93149678437457, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H03487" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92116154998111, - 38.89293295892934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H03488" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06993720598565, - 38.95146033188334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03489" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0648778039224, - 38.95892147295136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H03607" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04176746414652, - 38.928147977220306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H03608" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02961774516223, - 38.94279062562233, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H03609" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03289675476479, - 38.93557440283326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H03610" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0687630936708, - 38.95557981693206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03611" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98615011023337, - 38.938265701996706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03612" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01248667909704, - 38.95863384036325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03613" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98094488213499, - 38.897887657549866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/17/07

Report Problem", - "NAME": "H03614" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97848309145489, - 38.94293098092975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03615" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02326747336885, - 38.970016925534274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H03616" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02123102130753, - 38.923717610292435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H03617" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01791989150955, - 38.955487980242914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H03618" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04275495061151, - 38.945085221162486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H03619" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06857757212204, - 38.93172482649028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 11/02/06

Report Problem", - "NAME": "H03620" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06976366098428, - 38.90863433874821, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H03621" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02410955535525, - 38.892410132338334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03622" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0386894040868, - 38.93255967598979, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H03490" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04115347643652, - 38.931492160799195, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H03491" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10086253282172, - 38.936857743065055, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy, K81A

In Service


Last Inspection Date: 07/20/05

Report Problem", - "NAME": "H03492" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92435148839108, - 38.88694422693056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H03493" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01372085823124, - 38.95668417023782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03494" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0997752917991, - 38.93582170338214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03495" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0931650833886, - 38.93267259442051, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03496" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92073814069416, - 38.89404085533239, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03497" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01668371123995, - 38.916861634116884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03498" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06847798975795, - 38.93468727528434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/06/08

Report Problem", - "NAME": "H03499" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06994033852389, - 38.95961481171528, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03500" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0700326822772, - 38.91837021050567, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03501" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07119585400345, - 38.91973315256621, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03502" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01624996062424, - 38.91856654864214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03503" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91533726488154, - 38.89709851513759, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H03504" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0719586462016, - 38.95066023327597, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H03505" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06976552667464, - 38.953954780000906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03506" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06395599340895, - 38.92439308451422, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/15/06

Report Problem", - "NAME": "H03507" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06403904663674, - 38.925894158326486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/18/06

Report Problem", - "NAME": "H03508" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9991027660933, - 38.84778999505156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H03509" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97312787861743, - 38.86998259643053, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H03510" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99498873935342, - 38.85973167311152, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H03511" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02095755775508, - 38.90730002623178, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H03512" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96502790165346, - 38.92881473337035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03513" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98822607764494, - 38.908173716881976, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/23/06

Report Problem", - "NAME": "H03514" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.986788771045, - 38.909433731469726, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. PIPE

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03515" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0217678007848, - 38.89972227672309, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03516" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02097771900802, - 38.8997218177079, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03517" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02233393008127, - 38.9643956569575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03518" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10996084388502, - 38.93205912695095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03519" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9835867974813, - 38.89679894753847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/15/07

Report Problem", - "NAME": "H03520" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99256406835455, - 38.942793447610214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H03521" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0277269091157, - 38.96275021750744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03522" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93896208746283, - 38.87157923201205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03523" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02073157901705, - 38.90423525494305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H03524" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04437360904353, - 38.89827069305227, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H03525" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99263604315881, - 38.93356622869363, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03526" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99124428129417, - 38.93356573635454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03527" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01645539326304, - 38.95436758528171, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/09/07

Report Problem", - "NAME": "H03528" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98657249782944, - 38.93380238253051, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03529" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9872753008676, - 38.9453083118496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03530" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0327429624509, - 38.8919515591772, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03531" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99258526421836, - 38.940629838151104, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03532" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03327068465558, - 38.984067746213725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H03533" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00782919903669, - 38.893223111341605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03534" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00722571707709, - 38.89375455391396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03535" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00818319153815, - 38.89227793789439, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03536" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00611604125696, - 38.893755031669244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03537" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97018782938873, - 38.937110901958384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03538" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10113057907711, - 38.92702125554618, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03539" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05450915260506, - 38.92823876662402, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H03540" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00064685369448, - 38.889943027327455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/03/07

Report Problem", - "NAME": "H03541" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99504653391331, - 38.93225566550957, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03542" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04775599202239, - 38.89837482021134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/24/07

Report Problem", - "NAME": "H03543" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01374021929531, - 38.95866633669406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03544" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04572830838023, - 38.89826512594186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03545" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97732647684614, - 38.884241019733444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03546" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07263374916317, - 38.935573021349896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03547" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07688469443129, - 38.91922331602368, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03548" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06855101713087, - 38.95830295071001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H03549" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0761135742582, - 38.91922445141739, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03550" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0966488045416, - 38.92537947996271, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03551" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09772203483506, - 38.923645674339994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03552" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0961516317116, - 38.92618920663205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03553" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97510464986044, - 38.94021241925771, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03554" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92998715624509, - 38.896341782002246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H03555" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01776505953998, - 38.95658617430043, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/08/07

Report Problem", - "NAME": "H03556" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08350418811625, - 38.914294412090925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03557" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97628105960614, - 38.939733999281444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H03558" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09072308463259, - 38.94402779179968, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H03559" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00640052318134, - 38.839306354002446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03560" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03161045862089, - 38.89617030995506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03561" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03801328331464, - 38.94924861256427, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H03562" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03350551320615, - 38.8948737301164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03563" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0335328033324, - 38.89414833247011, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03564" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03211037259001, - 38.893450358329694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03565" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96498579366997, - 38.930532371271475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03566" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06883084150009, - 38.96961954726777, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03567" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03483103176875, - 38.98616942125019, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03568" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03353093077355, - 38.89281301338369, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03570" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03352935056255, - 38.8934976139276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03572" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03210758664463, - 38.89294615162206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03573" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98210916758026, - 38.86880949547161, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03574" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98083421247642, - 38.89617984291388, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03576" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.073723600765, - 38.91877161250799, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03577" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03627502423484, - 38.934939371976625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H03578" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00196989818596, - 38.90713099191895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H03579" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97030744562417, - 38.89904102170986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 12/11/07

Report Problem", - "NAME": "H03580" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01772316190412, - 38.951135133712526, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H03581" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97030685493905, - 38.900460099398536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/24/07

Report Problem", - "NAME": "H03582" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98412242592256, - 38.92691358413429, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H03583" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06869098110673, - 38.950785765423596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03584" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07482935147564, - 38.919209200965525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03585" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06175018721785, - 38.96296459500961, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03586" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.078610480102, - 38.9226014616886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03587" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07721011013284, - 38.922601764718415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03588" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.996237336026, - 38.89464853605419, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/17/06

Report Problem", - "NAME": "H03589" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98094061209993, - 38.88871499281592, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H03590" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10462878785783, - 38.93153283774806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03591" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10579525899973, - 38.93147391829147, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, Metropolitan

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03592" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03515977974857, - 38.984191209676595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03593" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98699175805315, - 38.884048464528746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 04/28/06

Report Problem", - "NAME": "H03594" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93051093669813, - 38.900045262021244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03595" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09924264907829, - 38.92766583372402, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03598" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05915347544803, - 38.970458519593265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Am. Darling

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03599" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98767458054587, - 38.909808890628184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H03600" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06918313232683, - 38.94319846573763, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/23/07

Report Problem", - "NAME": "H03601" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09820310633214, - 38.93672710819925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/30/08

Report Problem", - "NAME": "H03602" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09640769656482, - 38.93689336470722, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/10/08

Report Problem", - "NAME": "H03603" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99513930911083, - 38.92835761224649, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03604" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0161162222745, - 38.95561371890085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H03605" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01801310619798, - 38.97783561092687, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03606" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0241161346038, - 38.892947894666534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03623" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06080593579244, - 38.91195520720525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H03624" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00349951129549, - 38.90179401247429, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H03625" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03603311313024, - 38.92861706597699, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H03626" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98706064919195, - 38.90011391132168, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H03627" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99251046407925, - 38.87933429204732, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03628" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02340590137683, - 38.94204977857756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H03629" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99503666664481, - 38.90036731500801, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H03630" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9947877391105, - 38.88266900606166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H03631" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99270242324893, - 38.89814173130459, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H03632" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9913498446408, - 38.90317578837661, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03633" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98250128690327, - 38.86280263754207, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03634" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98453132964869, - 38.88972583089636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/01/06

Report Problem", - "NAME": "H03635" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98709658955805, - 38.86323840536412, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H03636" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9817391517061, - 38.898515838365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03637" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01780522474259, - 38.91831272856207, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03638" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05057805248413, - 38.901935141495144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H03860" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08284878024966, - 38.93576238291455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/28/07

Report Problem", - "NAME": "H03861" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08409890038097, - 38.93668000362474, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H03862" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05770442299941, - 38.91611569521685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H04040" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08662125231317, - 38.92436624935645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04041" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98371465716961, - 38.89899349249849, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H04042" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04177175090446, - 38.89932046886113, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04043" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01103386883443, - 38.831798486191275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04045" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00995084093915, - 38.83288575170231, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04046" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02854884668233, - 38.894980786862554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H04047" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02514928775247, - 38.94260309290333, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/15/07

Report Problem", - "NAME": "H04048" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05702232323367, - 38.97194758603748, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04049" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05629909667, - 38.97266068612665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04050" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97425492349903, - 38.94171353886082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H04051" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07573085679125, - 38.95248056685318, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H04052" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01643052574566, - 38.947537705491264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04053" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01586649186335, - 38.94863270354359, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04054" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0684167028383, - 38.97057009668146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04055" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95978665670779, - 38.866650130056975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04056" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95997011447649, - 38.867589509105336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H04057" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01487219659207, - 38.961449290097285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H04058" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01355819790655, - 38.95543634649551, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04059" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04419602781695, - 38.919716197268066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H04060" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02005767147647, - 38.96869166031924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04061" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01375133712867, - 38.96145372422804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H04062" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03975031325787, - 38.98718292495032, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04063" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0388952422845, - 38.98778543811387, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04064" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06067002568248, - 38.96367401986806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04066" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9791710704358, - 38.86830932097184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04067" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05669197844536, - 38.948006462190435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/26/07

Report Problem", - "NAME": "H04068" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95635154378483, - 38.8574793712542, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/19/07

Report Problem", - "NAME": "H04069" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05886548933277, - 38.974784329722446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04070" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9572988108649, - 38.857506773850666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H04071" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95650687754384, - 38.86473471172185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/03/08

Report Problem", - "NAME": "H04072" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98332298599779, - 38.903261353463854, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H04073" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05973347103077, - 38.97541950141029, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H04074" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04447098000675, - 38.98757801898338, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04075" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0789281388047, - 38.944837782033424, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04076" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06968110563282, - 38.95456296060451, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04077" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97888279186657, - 38.8862037515252, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H04078" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98212771509833, - 38.896160382711955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H04079" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04238191531039, - 38.940834544272654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H04080" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97006383997629, - 38.93762528004567, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04082" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07155691243143, - 38.9583234992033, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04083" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99816703591898, - 38.84521429970991, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/17/07

Report Problem", - "NAME": "H04084" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07713768504172, - 38.931925348225796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04085" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07852847850171, - 38.932540716448024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H04086" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05216429665562, - 38.93550136105225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 12/27/06

Report Problem", - "NAME": "H04087" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03352291853086, - 38.960320686584865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04088" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05388161748036, - 38.93504170813739, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/28/06

Report Problem", - "NAME": "H04089" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07870202301126, - 38.91929192074877, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04090" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09251282938644, - 38.94208533657608, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04091" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98397296793766, - 38.90909195392388, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H04092" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99787141723502, - 38.84706921384978, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H04093" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01323041960103, - 38.951106514649524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04094" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95853381973963, - 38.86747746576027, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H04095" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09065436896263, - 38.94973380945873, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, 13843

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H04096" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0664335955175, - 38.97044425092554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04097" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07563919776541, - 38.930486340266896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H04098" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09972541822468, - 38.93809722509768, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER

In Service


Last Inspection Date: 01/30/08

Report Problem", - "NAME": "H04099" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04078943476497, - 38.988175695037896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04100" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04185893638387, - 38.98760633181776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04101" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05663744327478, - 38.97557317276737, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04102" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03331745963929, - 38.967670405478614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04103" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06104480063263, - 38.97674652924848, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04104" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97840451796174, - 38.940633483429274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04105" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06770001660747, - 38.96105156933964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H02948" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00221244259393, - 38.905694795654476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H02949" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04156597768267, - 38.91473781631745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H02950" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03434655343527, - 38.911904796252664, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/24/07

Report Problem", - "NAME": "H02951" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94185353379996, - 38.87095546114053, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H02952" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94422238688007, - 38.87068867061388, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H02953" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03064494329088, - 38.98139730236563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02954" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96472342470437, - 38.86279193559433, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H02955" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99256887443242, - 38.89657497042028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02956" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03646264841899, - 38.90037117994516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02957" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03989327314353, - 38.949413134877766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H02958" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93649035427315, - 38.894421401238304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H02959" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93787631808944, - 38.894603665178266, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H02960" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97396896606872, - 38.91569954439072, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H02961" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9702417662267, - 38.93514179165418, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/10/08

Report Problem", - "NAME": "H02962" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93669390087652, - 38.90154269543422, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H02963" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9763044924441, - 38.934995973348904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/26/08

Report Problem", - "NAME": "H02964" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93649024941064, - 38.90070270858288, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H02965" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9752576216346, - 38.936128225814585, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H02966" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08969568447627, - 38.928812030810974, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02967" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09060295034901, - 38.9288113309887, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H02968" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10062932746031, - 38.92577087392711, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02969" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0999641554701, - 38.92639025337231, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H02970" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01571697210065, - 38.94543686536992, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H02971" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06409720135247, - 38.906055783001875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H02972" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02973342919985, - 38.90271086302745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H02974" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02948487020159, - 38.90345979949418, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H02975" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97229268802785, - 38.86817630563903, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H02977" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02947389315197, - 38.901976973057096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H02978" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08395005293166, - 38.92758994312347, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02979" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08490699611133, - 38.92878907840041, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H02980" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0263575848704, - 38.98028491319458, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H02981" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97312498181334, - 38.87210576858482, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H02982" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02255583510971, - 38.9678782563258, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02983" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02409493213075, - 38.967884408231924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H02984" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02978067986126, - 38.958505706828696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H02985" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0759482629434, - 38.921640439414546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02986" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0753347203405, - 38.920626417876086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H02987" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9873322250439, - 38.94279688930142, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H02988" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99137291222536, - 38.94226925460015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H02989" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99016741744016, - 38.94279727927315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H02990" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02460274115977, - 38.97735697440674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H02991" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06532711131152, - 38.9385468922548, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H02992" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97827601281539, - 38.88501275921611, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/26/06

Report Problem", - "NAME": "H02993" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06103787674311, - 38.93941398009788, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/23/07

Report Problem", - "NAME": "H02994" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9874904167884, - 38.9483891668096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H02995" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05022434699933, - 38.899021540353786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02996" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06290389927247, - 38.94000924979791, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/23/07

Report Problem", - "NAME": "H02997" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95116096184061, - 38.89185398085343, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H02998" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06206069015427, - 38.95443700347486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H02999" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98229656724462, - 38.894828332352944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03000" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03198973846924, - 38.9840865974315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03001" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03146467084993, - 38.982369413712924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03002" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0580820494067, - 38.92976971084407, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H03003" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0212889498334, - 38.96123611742944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H03004" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06174761456867, - 38.95273689429035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03005" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07116792920074, - 38.94407248345832, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H03006" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07252430746055, - 38.946246889557514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/27/07

Report Problem", - "NAME": "H03007" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06390743607209, - 38.947817674296836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03008" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0317115825553, - 38.98331185864448, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 12/05/07

Report Problem", - "NAME": "H03011" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0746864483502, - 38.94225883853485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03012" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04660697225161, - 38.915883972564075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/13/07

Report Problem", - "NAME": "H03013" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05504206511793, - 38.922077052115164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 01/09/07

Report Problem", - "NAME": "H03014" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05420279506004, - 38.92118215207154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/08/07

Report Problem", - "NAME": "H03015" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96158803992253, - 38.8584722823408, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H03016" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06420009266469, - 38.91459228540269, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H03017" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97985765635987, - 38.93414049072257, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03018" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04185247563534, - 38.90029193751483, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03019" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03781470311527, - 38.98413658441228, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03022" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03655960121773, - 38.98422727278148, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H03023" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0258980132094, - 38.89819715647122, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03024" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02589090923084, - 38.8991105788257, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03026" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97265336894158, - 38.89623892163102, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03027" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99593299847837, - 38.847614992775895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H03028" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98722162081393, - 38.94063985150541, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03029" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98720564624243, - 38.93973400298994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03030" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07254358027352, - 38.94557482355423, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H03031" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96030138624464, - 38.855432859360555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H03032" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02543039027128, - 38.93744058711033, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03033" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02340156988542, - 38.96455719127427, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03034" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98831228616139, - 38.868264650840004, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/29/07

Report Problem", - "NAME": "H03035" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03489267189798, - 38.97863815525506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03036" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01121501130028, - 38.86457728425669, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H03037" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0627498346912, - 38.96271200287118, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H03038" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03161623059155, - 38.95086298079314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H03039" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07698095184269, - 38.92737933453517, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03040" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05625682098265, - 38.922018396979134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/02/06

Report Problem", - "NAME": "H03041" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0562799401089, - 38.9219865864635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/08/07

Report Problem", - "NAME": "H03042" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0324021280902, - 38.88703742305465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03043" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98384903271742, - 38.902332702098725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H03044" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07689570971831, - 38.92167502435756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03045" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97742065292081, - 38.870291727982654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03046" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91988640097766, - 38.89138571378376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03047" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98783083546893, - 38.905937255126915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H03048" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91935850525131, - 38.8928769031489, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03049" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98234413229171, - 38.88987833884194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 12/13/07

Report Problem", - "NAME": "H03050" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02210590270623, - 38.891961443379316, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03051" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98371962752331, - 38.89368192726817, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 11/02/06

Report Problem", - "NAME": "H03052" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02229788417795, - 38.9626276865333, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03053" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99145719128774, - 38.896028383967334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H03054" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07118207234939, - 38.94557519209683, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H03055" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02589261985113, - 38.898455922851475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03056" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07252535397834, - 38.944860378728514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H03057" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01121321152814, - 38.89587848417434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03058" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09862948149636, - 38.93542112168419, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03059" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09429926442536, - 38.933423734469294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03060" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09690891832666, - 38.93459711185135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03061" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92801999809289, - 38.89199576822766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03062" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0616879339619, - 38.90975680831896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H03968" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03606786536979, - 38.9787393214202, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03969" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0525084929729, - 38.9072960431751, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03970" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03016400705357, - 38.96458551370847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03971" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09668170160201, - 38.94302560853069, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H03973" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09671075726781, - 38.94411299327274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/24/08

Report Problem", - "NAME": "H03974" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09803281476682, - 38.94317677742152, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H03975" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97540058984123, - 38.9125489999525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03976" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03460529069865, - 38.96865568635638, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03977" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08783395031158, - 38.92581868369559, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03978" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08632753819212, - 38.92547903942986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03979" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97822738811706, - 38.93822279533832, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03980" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97991455023197, - 38.9383644646014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03981" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00674117092807, - 38.88337491499376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H03982" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98597813021148, - 38.90590420302283, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H03983" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02301107047627, - 38.88472800998696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03984" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06305918575342, - 38.97514923810629, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03985" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02675503132782, - 38.88116717029896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H03986" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0665521850546, - 38.964065273251784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03987" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09241363308224, - 38.943228008750694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/10/07

Report Problem", - "NAME": "H03988" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06376949697231, - 38.95820712399084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03989" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06031583923898, - 38.95782405161072, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, OTHER, SEE FLD NOTES

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03990" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09427905928855, - 38.937236803935924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/28/08

Report Problem", - "NAME": "H03991" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08883645267849, - 38.94875196927613, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03992" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07869497771303, - 38.96202180294453, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03993" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0429748838458, - 38.893376574264394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H03994" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00637765657599, - 38.958679293406085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H03995" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08982996756723, - 38.92506344929522, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03996" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01602771740421, - 38.95642084448925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03997" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06292550685887, - 38.905942662484556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H03998" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01980276107504, - 38.89034543915308, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03999" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01357395614416, - 38.956034187140546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04000" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06269138832498, - 38.905029026189716, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H04001" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02204024219837, - 38.8890403824405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04002" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00191570334259, - 38.92447347439483, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 07/04/07

Report Problem", - "NAME": "H04003" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97424444409062, - 38.91267366044658, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04004" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00521851748582, - 38.96191074751201, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04005" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96614379977014, - 38.86332439318026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H04006" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01604768424016, - 38.96998161076748, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H04007" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01798979967707, - 38.96999639890795, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/08/07

Report Problem", - "NAME": "H04008" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03328315926508, - 38.96422308535336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04010" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0238265466472, - 38.89338067113388, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H04011" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99370727002821, - 38.94263119441689, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04012" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93060463282256, - 38.8991854425678, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/10/07

Report Problem", - "NAME": "H04013" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01590225628522, - 38.94936853072098, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04014" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00597295640206, - 38.96275739706677, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04015" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00493167869334, - 38.96275936437879, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04016" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07785319025015, - 38.92053735034512, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04017" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07863753641577, - 38.92073190951478, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04018" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9639708265334, - 38.927918526610114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04019" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04357751409007, - 38.89440173764898, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 05/22/07

Report Problem", - "NAME": "H04021" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06345914346076, - 38.9544323792256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04022" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07782609452616, - 38.92260089669057, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04023" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97809766570585, - 38.87216301954785, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04024" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99170790665153, - 38.881327767439224, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H04025" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00914027167185, - 38.95937947515001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04026" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96765966457971, - 38.872845621288775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04027" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01250568837185, - 38.95078117056552, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04028" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01127409964606, - 38.893323732400454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/27/07

Report Problem", - "NAME": "H04029" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0298103442541, - 38.903666872988985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04030" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01580450973327, - 38.952071863715666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04032" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99164721389013, - 38.874741483565835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04033" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98601578552778, - 38.93959433725474, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04034" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02127026646194, - 38.96327450830563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04035" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03208252955329, - 38.90648623624658, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04036" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04629683964683, - 38.986346257729046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H04037" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01349904007813, - 38.95460841265484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04038" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08855635198329, - 38.94975116399902, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/13/07

Report Problem", - "NAME": "H04039" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.983107967382, - 38.881095468785446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/17/06

Report Problem", - "NAME": "H03677" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93649173908001, - 38.8719792391055, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H03678" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08495111066085, - 38.95338792184123, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton, Jumbo

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03679" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99014864329517, - 38.88850120150739, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03680" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06649007812808, - 38.926274012544695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/21/07

Report Problem", - "NAME": "H03681" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97228728616999, - 38.89802257240617, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03682" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97305461341588, - 38.89815158049901, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03683" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07194684810413, - 38.95402424498342, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03684" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0704029814852, - 38.96767312792083, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/05/07

Report Problem", - "NAME": "H03685" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06819964179292, - 38.95970487763922, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03686" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06857977859936, - 38.92611669080908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/18/06

Report Problem", - "NAME": "H03687" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97335088000865, - 38.89716489944282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03688" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06939470842758, - 38.96580666327167, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03689" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96647728455709, - 38.923312842592246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03690" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99159495079708, - 38.89412463786989, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H03691" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93521318221076, - 38.87287414331036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H03692" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01092779574589, - 38.89388438312533, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03693" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05694661152383, - 38.91986118140679, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 01/16/07

Report Problem", - "NAME": "H03694" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94029933366774, - 38.9027639647087, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H03695" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97314431741103, - 38.937179315985574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H03696" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0205514687882, - 38.92702235174442, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H03697" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0853824635693, - 38.95215701440594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03698" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9783843125799, - 38.89911538475254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H03699" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02234943910024, - 38.963810532145374, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03700" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.980472508922, - 38.89947491577438, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H03701" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02006437787375, - 38.96382170242456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03702" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0200717411199, - 38.96440122888235, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03703" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97362628962821, - 38.89622811909845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03704" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07334808038217, - 38.922589118554164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03705" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08853939694403, - 38.93443787261761, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H03706" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0135852712972, - 38.892217321679375, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03707" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9692144008831, - 38.9351346612466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H03708" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96144233639275, - 38.8563659923698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H03709" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0207600042742, - 38.90560467234774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03711" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02171332822185, - 38.90569951012563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03712" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01965967869721, - 38.905688685374685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H03713" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02500514892911, - 38.905713526572235, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H03714" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06996003837614, - 38.95214374893433, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03715" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0691474798505, - 38.91160221589817, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H03716" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0275442165845, - 38.94192542711134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H03717" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0659115101399, - 38.948024220431506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03718" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03089662049607, - 38.909121929570325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H03719" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92005501407913, - 38.893834818771566, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/05/07

Report Problem", - "NAME": "H03720" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9208296184903, - 38.89132150558269, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03721" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01179322841816, - 38.89621411476836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03722" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.920399197111, - 38.89252964150244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03723" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02449089988893, - 38.89384785188733, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03724" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01135124439529, - 38.89625492140214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03725" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01229578405268, - 38.896209513728095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H03726" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0175407045451, - 38.954430467340345, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H03727" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95582762484945, - 38.89472922965072, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03728" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09072110165582, - 38.943221902714605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/04/07

Report Problem", - "NAME": "H03729" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02114474067075, - 38.92236311680298, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H03730" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02977627681746, - 38.9603388614735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03731" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97227316669225, - 38.937285833876736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03732" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07139661612302, - 38.95144319880221, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03733" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07149511555085, - 38.9519844548071, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03734" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99014412893996, - 38.87637385009661, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/18/06

Report Problem", - "NAME": "H03735" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06989891802888, - 38.95079151738554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03736" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1089673506558, - 38.930876923651695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03737" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07449581337784, - 38.950685804032574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03738" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00897728353526, - 38.86883306897482, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H03739" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99140377054967, - 38.8594056386091, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03740" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99736764122783, - 38.88421520178614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03741" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09669654450336, - 38.93833754409531, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/28/08

Report Problem", - "NAME": "H03742" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09363207613583, - 38.95454338590985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H03743" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03756818679783, - 38.94831320181106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, JCF&M - O'BRIEN

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H03745" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06782067092134, - 38.96980681528786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03746" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02462632034302, - 38.97575849555607, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H03747" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02975356797397, - 38.89383454975894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03748" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08629777521445, - 38.95600283812685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03749" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0332257376092, - 38.96678495718561, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03750" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02094461563445, - 38.92117828812778, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H03751" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03479925964035, - 38.983269696087696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03752" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98611537580487, - 38.86828080558696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03753" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98368081284474, - 38.868295940148016, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03754" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02640885529095, - 38.9816359993884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03755" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93595291359323, - 38.892961706694685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03756" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0152190176066, - 38.96996937125363, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03757" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0120368884428, - 38.89813621335621, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03758" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98857173461492, - 38.92974780349216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03759" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01173910187487, - 38.962806523745826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H03760" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03163797839147, - 38.9519323919739, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "LORTON

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H03761" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08369855437151, - 38.9598213311138, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03762" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02307129536355, - 38.95192642408664, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H03763" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0006666692874, - 38.92710127701415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/26/07

Report Problem", - "NAME": "H03764" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00067257706168, - 38.92865223812971, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/21/07

Report Problem", - "NAME": "H03765" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0981991942097, - 38.938032018000676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H03766" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03657419052587, - 38.97321080522942, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03767" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99147214260988, - 38.942797066448314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03768" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93552592358458, - 38.90153821012132, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H03769" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01715890067166, - 38.92151159171768, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/11/07

Report Problem", - "NAME": "H03770" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02661216471658, - 38.97572342389356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/29/07

Report Problem", - "NAME": "H03771" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08197121143826, - 38.953935581040234, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03772" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06727793389449, - 38.96301045094308, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03773" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06691636964722, - 38.96218992536008, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03774" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03624027089462, - 38.96484329801526, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03775" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03606891843275, - 38.96618248104796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03776" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01151398465859, - 38.95863948027614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H03777" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02108847292881, - 38.96274863950616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03778" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01628669731507, - 38.960114330397104, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H03779" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07172472634355, - 38.95326636250473, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03780" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92659979375982, - 38.89538823889925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03063" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05481944695319, - 38.90863927935803, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03064" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99045305923349, - 38.89362891870926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H03065" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02960908896921, - 38.98432816699746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03066" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96138370683586, - 38.86300740514237, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03067" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02982710973664, - 38.98233223347925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03068" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9838035827238, - 38.90661697762803, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H03069" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02408068276591, - 38.90034027371829, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H03070" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96161646154707, - 38.86464616677731, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03071" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96305345025989, - 38.86467463746823, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H03072" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02300677333967, - 38.901462408978254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H03073" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92482080753835, - 38.900409802471714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H03074" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92373018419002, - 38.90336745850674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H03075" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03364369264172, - 38.92648065493712, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03076" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97428972209386, - 38.91341281352198, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H03077" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00334994320968, - 38.91338393879082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H03078" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02511580881117, - 38.901630403843804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03079" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05419268649665, - 38.96710665957529, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03080" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05339476720333, - 38.972366533079885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03081" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1125383286442, - 38.933493859497865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03082" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11179712299568, - 38.932421347729324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03083" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11339121339472, - 38.93430413432582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03084" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03471359883676, - 38.92632287668111, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H03085" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01884359062524, - 38.89914307904043, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/23/07

Report Problem", - "NAME": "H03086" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08079917976667, - 38.90968626762176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03144" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05011078397638, - 38.92509781496898, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 01/02/07

Report Problem", - "NAME": "H03145" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01716558161729, - 38.96617805495967, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03146" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97614306030557, - 38.937146131347774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03147" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98686088996996, - 38.878449367192985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/19/06

Report Problem", - "NAME": "H03148" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01850567279425, - 38.95217319775716, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H03149" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02136505073196, - 38.893516344880595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03150" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02125294674073, - 38.96787721220207, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03151" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97193514646283, - 38.9266449440927, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03152" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0622395873915, - 38.96190733397728, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/06/06

Report Problem", - "NAME": "H03153" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02208557190023, - 38.893868951574575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03154" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01892885021266, - 38.9509652738986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H03155" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01269773684562, - 38.91076793287809, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03156" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02560353653519, - 38.97535640157549, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/05/07

Report Problem", - "NAME": "H03157" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07597581965106, - 38.920554251490216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03158" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01445662012209, - 38.970911630605706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03159" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97992285017801, - 38.892137896330816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 11/01/06

Report Problem", - "NAME": "H03160" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02757932395554, - 38.89503858324773, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/09/07

Report Problem", - "NAME": "H03161" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03378412864905, - 38.89674597564679, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03162" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03204687358763, - 38.959331074935484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03163" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00834632839808, - 38.91116145773266, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03164" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00668606710775, - 38.91116805053838, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, A.M Darling

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03165" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03489033834887, - 38.98542149689027, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03166" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0193985907573, - 38.95545874664475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H03167" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01796350962823, - 38.9554724613172, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H03168" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05868106619577, - 38.96082930030023, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03169" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06103442452928, - 38.96111596339867, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03170" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06206808690501, - 38.96111634711395, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03171" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06383390729334, - 38.96111396410806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03172" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06831085455843, - 38.960101518445335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03173" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00504620826737, - 38.915662148765044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/26/07

Report Problem", - "NAME": "H03174" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99259931929079, - 38.942241403978024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03175" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04338426468321, - 38.905765143216705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H03176" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02343349885864, - 38.964877797455635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03177" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04122348711469, - 38.90554513094255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H03178" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98876281410804, - 38.93259738370972, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03179" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06125704515705, - 38.90604031689242, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/17/07

Report Problem", - "NAME": "H03180" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01795801880182, - 38.96010097863465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H03181" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97798088532983, - 38.905736044810936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03182" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07218142447562, - 38.93341050686152, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03183" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99610510582475, - 38.882195423491474, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H03184" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03342680659567, - 38.902431263270714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03185" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9983770585032, - 38.88364220587385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/24/06

Report Problem", - "NAME": "H03186" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03188537061007, - 38.96547600877725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03187" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06384730087355, - 38.93345825419992, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 01/22/07

Report Problem", - "NAME": "H03188" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0623914666454, - 38.93342628620925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 01/22/07

Report Problem", - "NAME": "H03189" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03354560389819, - 38.905583486006044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03190" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0295379713994, - 38.9649033944595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03191" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02992553456137, - 38.96548422881598, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03192" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0350029582957, - 38.95298587803494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H03193" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03420182627764, - 38.95525409969401, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H03194" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0836747219192, - 38.95909814692505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H03195" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0210331732302, - 38.96205700483449, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03196" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02233705863725, - 38.96123460669477, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03197" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08613009266448, - 38.94615900551879, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/13/07

Report Problem", - "NAME": "H03198" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02001259489441, - 38.96559534535164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03199" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04084405420814, - 38.94498942572128, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H03200" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02233651766645, - 38.96558315074984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03201" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01818410341815, - 38.96208764225485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03202" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01978833708134, - 38.962058780560724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03203" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05982166459445, - 38.92964514024582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/01/06

Report Problem", - "NAME": "H03204" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05484272262582, - 38.91710801701536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/15/06

Report Problem", - "NAME": "H03205" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02410285262988, - 38.965475682936756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03206" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9731781709192, - 38.91341622103919, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/22/08

Report Problem", - "NAME": "H03207" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05532668603573, - 38.917922259143026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H03208" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07708626176108, - 38.955398522853244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03209" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01814837482497, - 38.95952572697822, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H03210" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09117591710422, - 38.94170236347056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/01/07

Report Problem", - "NAME": "H03211" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01788018551073, - 38.95311603756104, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H03212" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03534395233046, - 38.900405854604756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03213" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02975547661387, - 38.905568694103394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H03214" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03744482475409, - 38.898599312202094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03215" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99826787017928, - 38.89484157005496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H03217" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96614811675154, - 38.93740151748665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H03218" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96702467886138, - 38.93773785859908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H03219" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01376017119289, - 38.90650970325695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03220" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02127716386049, - 38.9666283589006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03221" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03320654797018, - 38.96547181254771, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03222" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97727047753588, - 38.87189155540718, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03223" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03359826259181, - 38.96607518113642, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03224" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04580996506851, - 38.9181264705252, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H03225" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00793015891381, - 38.91494642066939, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03226" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98739632735732, - 38.94109091557004, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H03883" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02993102017118, - 38.96689660329951, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/24/08

Report Problem", - "NAME": "H03884" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09067994690605, - 38.9510866978661, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H03885" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11038764936174, - 38.93389987912438, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03886" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94467417940768, - 38.89338113353268, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H03887" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0294107470302, - 38.88605622905826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03888" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03138760520034, - 38.886051705821195, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03889" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02978226203604, - 38.88605471159471, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03890" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01238495004036, - 38.89282399770782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H03891" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0504189584601, - 38.92385555226625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 04/30/07

Report Problem", - "NAME": "H03892" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05587634447056, - 38.94552488410289, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/01/07

Report Problem", - "NAME": "H03893" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0612463631752, - 38.96825400819106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03894" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02899749615027, - 38.93613977816719, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/20/07

Report Problem", - "NAME": "H03895" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97208970699663, - 38.934006003443756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H03896" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07452274816076, - 38.95486545414465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H03897" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96756117691892, - 38.92938999601311, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03898" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07233903474206, - 38.94207655466052, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03899" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98080096162482, - 38.86424581581121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03900" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02003147510977, - 38.89232519721652, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H03901" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06426700595999, - 38.94045449089907, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/23/07

Report Problem", - "NAME": "H03902" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94701816806304, - 38.89410343029709, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H03903" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01225239256465, - 38.86606355011329, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H03904" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.012117532979, - 38.86539800467446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H03905" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02313279945245, - 38.89196242462637, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03907" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02376546437307, - 38.89196180216161, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Muelller

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03908" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98740892170207, - 38.879379976435274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/19/06

Report Problem", - "NAME": "H03909" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02021440176755, - 38.91642804618404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H03639" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98063121662285, - 38.89824276963699, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03640" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03739949869475, - 38.91190599392193, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H03641" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98282288389858, - 38.89870385409001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H03642" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0389614784742, - 38.91464011754894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H03643" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9718437434898, - 38.89620212830783, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/08/08

Report Problem", - "NAME": "H03644" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02828119021994, - 38.91265469942714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H03645" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97696852582, - 38.896913560633564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H03646" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98301921993799, - 38.891959841567974, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/15/06

Report Problem", - "NAME": "H03647" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98316287471619, - 38.90790310782094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H03648" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07008910339574, - 38.91257320447507, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03649" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0220419598844, - 38.89236167938233, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03650" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02605409876183, - 38.914919678784116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H03651" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0220410988322, - 38.89304449600635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03652" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98846723544642, - 38.90071774474027, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H03653" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0450155056833, - 38.986431984549405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H03654" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07737144758829, - 38.9125746087927, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, UNKNOWN

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H03655" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99016210125716, - 38.8994864211401, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H03656" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0685664874811, - 38.97414463957226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03657" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97732163172466, - 38.88545134908238, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/06/06

Report Problem", - "NAME": "H03658" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00189385896061, - 38.91265565640735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H03659" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01531647738463, - 38.91266766691569, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03660" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99146062492818, - 38.89835274907097, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/22/07

Report Problem", - "NAME": "H03661" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99632227998107, - 38.89667894325444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03662" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06969589736448, - 38.92354424519247, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H03663" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01317587490239, - 38.91403104240183, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H03664" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01321823864798, - 38.914782098541885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/05/08

Report Problem", - "NAME": "H03665" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98930899156106, - 38.89606840244226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H03666" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02991852688407, - 38.96608027027174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H03667" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99623514257868, - 38.89929725684337, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H03668" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98086774955685, - 38.89543659520728, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H03669" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05939719823994, - 38.93736314077285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/18/08

Report Problem", - "NAME": "H03670" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.992572321266, - 38.89269925581821, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H03671" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99368999608703, - 38.89421681732873, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H03672" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06204860798529, - 38.94210801739967, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 12/19/06

Report Problem", - "NAME": "H03673" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97732142921282, - 38.887466415623784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/06/06

Report Problem", - "NAME": "H03674" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99851999834095, - 38.89253414296477, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H03675" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98702073677197, - 38.87756751740622, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 03/20/07

Report Problem", - "NAME": "H03676" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97619226841928, - 38.86553156673918, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H06739" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97571177773297, - 38.86599735584727, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06740" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95395505577085, - 38.88967237753783, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H06741" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95601211207112, - 38.88958216769603, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H06742" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0257342955336, - 38.901365180338246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06743" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0793399357029, - 38.95482322452686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H06744" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01151128241311, - 38.96383945946481, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06745" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0209775280849, - 38.90079746076288, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H06746" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02494205099968, - 38.900803527962424, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H06747" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02685710766697, - 38.90094249872682, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06748" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08763583940052, - 38.95923725131862, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06750" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96779725523542, - 38.858067618875474, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H06751" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93391594052164, - 38.899137807634276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06752" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01997826848236, - 38.91423012545715, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/25/08

Report Problem", - "NAME": "H06753" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00547560881265, - 38.84637883308082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H06754" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02439297733744, - 38.97948113049743, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06755" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02440662013707, - 38.980360888537334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H06756" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95477451931532, - 38.88367693562122, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/13/07

Report Problem", - "NAME": "H06757" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9536481212613, - 38.88764160564635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06758" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96462964466762, - 38.860166655668365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06759" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0408517845078, - 38.99374710161613, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H06760" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9755956911888, - 38.89856910900174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H06761" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95615373364924, - 38.88687019460337, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06762" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99463782613996, - 38.953091536231284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06763" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06645934937967, - 38.937416027920605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 03/08/07

Report Problem", - "NAME": "H06764" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01878735609293, - 38.91415425662246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H06765" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01998347678683, - 38.9131889140317, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H06766" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0180741642603, - 38.91402962168495, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H06767" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94252687115358, - 38.896887658020376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06768" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10211954219713, - 38.93777130054011, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06769" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94340512482906, - 38.90238856487108, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H06770" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0395358351307, - 38.89682850695422, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H06771" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97155970955157, - 38.90035182436649, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06772" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00000984760143, - 38.96004295725367, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06773" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93302287169982, - 38.88576873842303, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/16/08

Report Problem", - "NAME": "H06774" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00892011912906, - 38.90083947816433, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07197" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00894688005167, - 38.897743618199506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07198" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00939348519698, - 38.89769822603817, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07199" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0091771433557, - 38.90388729993978, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07200" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00899347692015, - 38.90013204620811, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07201" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00894785037569, - 38.89904613705559, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H07202" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01782766257763, - 38.88744576275732, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07203" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95825889949046, - 38.91861289514262, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07204" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01892694196995, - 38.883384241899456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H07205" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01871752829672, - 38.88704923685434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H07206" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98702194377705, - 38.882780402581254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/26/06

Report Problem", - "NAME": "H07207" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0760866996656, - 38.93226364151522, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H07208" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07733033357897, - 38.93114472297318, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H07209" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07433804000576, - 38.932022037940236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H07210" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01503886054155, - 38.877600907692184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07211" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01073346648421, - 38.87723435373883, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07212" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96680159991848, - 38.870595738904306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/10/08

Report Problem", - "NAME": "H07213" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04370720675433, - 38.99274652904947, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H07214" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03630310624884, - 38.90267650414809, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H07215" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.008040458826, - 38.95246531699045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07216" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01598044680377, - 38.87834588488748, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07217" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01540541759621, - 38.878484862563035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07218" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97432436464165, - 38.84799496356251, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/16/08

Report Problem", - "NAME": "H07219" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97311002954135, - 38.848328560921125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/11/07

Report Problem", - "NAME": "H07220" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0093318201568, - 38.90137860516174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07221" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91239327832523, - 38.894254690289245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07222" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91620274195222, - 38.89441105985491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07223" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91359566850382, - 38.89431823006889, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07224" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93384210812016, - 38.90368210438252, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07225" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9151337259828, - 38.89435100400987, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H07226" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01154222075427, - 38.877366835132634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07227" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99699340192487, - 38.954002266365585, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07228" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91900045070366, - 38.895873199959226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07229" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93786808494754, - 38.893322823693715, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07230" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00999535557048, - 38.834449310180084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H07231" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99755314306138, - 38.92094740941287, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07667" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97135230860745, - 38.91753719035839, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07668" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97492738611184, - 38.90367021987711, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, eddy

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H07669" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04326853668506, - 38.91878644352333, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H07670" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99014307800064, - 38.87547219959561, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/18/06

Report Problem", - "NAME": "H07671" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93765621558026, - 38.89183337460716, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07672" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01677983744221, - 38.8730177022914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07673" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01887697985103, - 38.873455208423735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07674" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01640764249932, - 38.87633372868106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07675" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01159629528371, - 38.87936112579086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H07677" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01261033798694, - 38.87658511129462, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07678" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01233546547482, - 38.87936309496276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07679" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00944277407116, - 38.87633054483603, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07680" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05466802507115, - 38.902797777126835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07681" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0546644060393, - 38.90230258949338, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H07682" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05344022400106, - 38.902351296537745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H07683" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0563526613564, - 38.89719554228751, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H07684" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00539260233548, - 38.836967351080574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H07685" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03491034254026, - 38.96391870854372, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H07686" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97721122571765, - 38.882744758604666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 04/06/06

Report Problem", - "NAME": "H07687" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96274420677837, - 38.85721945898499, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/03/07

Report Problem", - "NAME": "H07688" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97803667181053, - 38.896984049594245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07689" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0415979436605, - 38.90487850636528, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07690" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99326421206962, - 38.917553371752454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H07691" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05396737998048, - 38.898283212361086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H07692" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0534704855882, - 38.898228309672355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H07693" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03755410254352, - 38.91743951244679, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H07694" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06017002561991, - 38.90270180948715, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H07695" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98055268599259, - 38.85524640680752, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07696" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04766864729972, - 38.89608397483113, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07697" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04484972777144, - 38.89448203416388, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H07698" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04444684838937, - 38.894130240194535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07699" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99164281106908, - 38.876616328836434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 11/10/06

Report Problem", - "NAME": "H07700" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04880336671062, - 38.896089649990614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/28/07

Report Problem", - "NAME": "H07701" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0379773301635, - 38.899475870010406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/04/08

Report Problem", - "NAME": "H08105" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97894392208693, - 38.88988682881371, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H08106" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98165412357774, - 38.862557829894975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08107" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9147522190026, - 38.88963372475377, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08108" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91654995106566, - 38.88963548236685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/05/06

Report Problem", - "NAME": "H08109" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02421339881987, - 38.88333321499806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08110" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02421108343869, - 38.88462760318923, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08111" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91631701038018, - 38.88755314567799, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant,

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08112" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01386833571942, - 38.82122451049569, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H08113" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01373901775405, - 38.822126697690344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H08114" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93686756980581, - 38.891976634589106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08116" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00495907837568, - 38.880452620386954, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08117" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03451993866423, - 38.96030260517449, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08118" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91736596444753, - 38.88840732851712, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08119" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05577166845528, - 38.8939583760691, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08120" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01186173359831, - 38.88752855127196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08121" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06602071262793, - 38.904456359945804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08122" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91502224180435, - 38.888557456157436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/07

Report Problem", - "NAME": "H08123" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91408993993186, - 38.88929839807364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/07

Report Problem", - "NAME": "H08124" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03037041539007, - 38.893085867578534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08125" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00055785842466, - 38.95940107255572, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H08126" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02499525397063, - 38.9148842911261, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H08127" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02408329066122, - 38.914723359574246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H08128" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00924159351723, - 38.90863474849086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/28/07

Report Problem", - "NAME": "H08129" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05453300132713, - 38.897308343842006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H08130" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98156112121428, - 38.93715530917865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08131" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03655346529241, - 38.93627169387359, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H08132" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06182094754568, - 38.92834710097888, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 01/17/07

Report Problem", - "NAME": "H08133" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04092863613873, - 38.92393933632943, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08134" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0221265819427, - 38.898539817011454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08135" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02271292907197, - 38.89836079842859, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08136" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02406975777616, - 38.898062404027264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08137" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02084117174662, - 38.87633543588754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08138" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97300181603889, - 38.859527393050946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H08139" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01374574817113, - 38.88377595751544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08140" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99840104160103, - 38.95365818727558, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06702" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99721094891771, - 38.952651535941946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H06703" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99880649925983, - 38.95261883607398, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H06704" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00232570456356, - 38.954843158538196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06705" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00114517405473, - 38.95480814291553, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06706" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0005142660758, - 38.954252031074866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06707" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99167780726519, - 38.890480109195764, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/22/06

Report Problem", - "NAME": "H06708" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95310858880491, - 38.858883995619365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/27/07

Report Problem", - "NAME": "H06709" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02173224424004, - 38.919954660636435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H06710" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98307754778058, - 38.86721708826973, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06711" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0585309713972, - 38.92188727193555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/02/06

Report Problem", - "NAME": "H06712" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99959727710178, - 38.90865930069435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06713" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9974288222908, - 38.88765148607277, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H06714" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98814650876594, - 38.88606472645686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/09/06

Report Problem", - "NAME": "H06715" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95402279913114, - 38.88995550144341, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06716" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95558173450337, - 38.88995358231732, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06717" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02013062656702, - 38.90424171993253, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H06720" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02491135204471, - 38.904239492161786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06721" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04274884712204, - 38.9466990842324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H06722" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01884121146134, - 38.90432045178427, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/13/07

Report Problem", - "NAME": "H06723" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97638676191636, - 38.87314917819528, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06724" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94714033787068, - 38.899418538210234, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/30/07

Report Problem", - "NAME": "H06725" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93553230448904, - 38.9109076910083, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06726" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07078422439486, - 38.96085470511081, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06727" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03661697939123, - 38.98735629283935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06729" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03906193377343, - 38.986262689053405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06730" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03795766048816, - 38.98708403377112, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06731" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01084131188746, - 38.96635609459757, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06732" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93787036223503, - 38.90860321777128, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06733" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9904958233762, - 38.95619927788162, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06734" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95099574866201, - 38.865689411630726, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06735" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9389755508876, - 38.907339838995775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06736" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93984986018565, - 38.90535541954279, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06737" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93925528624392, - 38.900397255202975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H06738" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09254635127105, - 38.9486973026342, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H07232" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93382327899475, - 38.90474118788292, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07233" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92157933552461, - 38.89424472400106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07234" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9851538135623, - 38.91911475703648, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07235" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98330231947256, - 38.91924845195794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07236" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97892835332335, - 38.855296644203406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07237" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96679766606418, - 38.86961438004594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H07238" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96679581303398, - 38.86777686242704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07239" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0636452801437, - 38.948887919837276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07240" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9666680627454, - 38.86867883801794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07241" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93226220888265, - 38.89755675743699, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H07242" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93130172420881, - 38.89710167047263, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07243" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01967362915791, - 38.95321598453066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H07244" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97550798565447, - 38.84743397409999, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H07245" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00887822824681, - 38.87539174302792, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H07246" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99623315117327, - 38.9012061819032, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H07247" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00606339758599, - 38.9071935853177, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07248" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92804164672515, - 38.88152634767735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07249" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05344021828674, - 38.900758663977086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H07250" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99724158304521, - 38.901266187703385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H07251" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99826064706298, - 38.90127459410005, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H07252" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00751400965916, - 38.946484469770624, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07253" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9737727225967, - 38.890777566180994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 02/23/07

Report Problem", - "NAME": "H07255" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0108679583866, - 38.887530602783514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07256" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99075291491035, - 38.93062772081035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/07

Report Problem", - "NAME": "H07257" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97399120404835, - 38.89240987804229, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/23/07

Report Problem", - "NAME": "H07258" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00881961020227, - 38.87758203077894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07259" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00930522065583, - 38.878462725693296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H07260" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00937235300053, - 38.87469652635012, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07261" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00944827614639, - 38.877586476799294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07262" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98342357713578, - 38.876706706480256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 10/18/06

Report Problem", - "NAME": "H07264" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98676341517982, - 38.876578961326985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 01/04/08

Report Problem", - "NAME": "H07265" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03642312919904, - 38.904976362366526, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07266" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9853565847851, - 38.87652116669425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/06/07

Report Problem", - "NAME": "H07267" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0465514278772, - 38.896150438687805, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07702" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04368932293251, - 38.89529565927772, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/22/07

Report Problem", - "NAME": "H07703" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04442034926468, - 38.894170499666586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H07704" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04572986746048, - 38.89496064083354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H07705" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0448323779181, - 38.89614923733559, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/22/07

Report Problem", - "NAME": "H07706" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9840155149534, - 38.86390963763843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H07707" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98277500179164, - 38.863687421809345, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H07708" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09010290543684, - 38.90907642652341, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H07710" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93017148673826, - 38.88066259171604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07711" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03931769336532, - 38.90619250627998, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/04/07

Report Problem", - "NAME": "H07712" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98856490722186, - 38.85682458078639, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H07713" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99582352528398, - 38.91202241001932, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H07714" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99046222038285, - 38.874682216628244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/18/06

Report Problem", - "NAME": "H07715" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94784720320794, - 38.90443724934308, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07716" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95246022829865, - 38.90508292730649, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07718" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98912704057659, - 38.83079641789728, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/11/07

Report Problem", - "NAME": "H07719" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98999498305183, - 38.82999721053814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H07720" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01290430053886, - 38.873833184843015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07721" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93653748617665, - 38.89820879639172, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07722" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05433234478356, - 38.94348155986243, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/26/07

Report Problem", - "NAME": "H07723" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03436247298768, - 38.94903956155696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H07724" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09724558516685, - 38.92929154082307, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H07725" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05600337284044, - 38.900825143175915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H07727" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05597990398972, - 38.90219493827348, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07728" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.977988540688, - 38.9068194262826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07729" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9916561781167, - 38.85849224792853, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H07730" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9312637752667, - 38.89181323054132, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07731" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0554934718497, - 38.89327835858064, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H07732" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9873343554735, - 38.85198215279726, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H07734" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0662298132155, - 38.91180775590383, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07736" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93084474132424, - 38.88057317864063, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H07737" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06628176841052, - 38.910815781826415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H07738" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0662008800927, - 38.909828224911614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H07739" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99270593709383, - 38.89106001988396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H07740" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03664588377005, - 38.901615708286606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08141" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92780039612224, - 38.88707814832078, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08142" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04151322791029, - 38.908898493871376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 10/12/07

Report Problem", - "NAME": "H08143" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04028346416186, - 38.908630196396956, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08144" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03736201545385, - 38.907616178766666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H08145" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03834930200641, - 38.90795714009193, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H08146" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05735174646733, - 38.93023071146079, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H08147" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99267277976033, - 38.8607069825124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H08148" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00131375632988, - 38.88610450699817, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H08149" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0007573019991, - 38.886754268371845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H08150" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95602339297108, - 38.900677003252326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08152" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95722838637901, - 38.90062352660191, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08153" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9934376085016, - 38.91525068088991, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08154" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06049710038423, - 38.90977916810914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08155" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02284487258444, - 38.89622084505351, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08156" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02246245935183, - 38.980433010542164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 09/12/06

Report Problem", - "NAME": "H08157" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01339550515529, - 38.89345469727164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08158" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00209402051352, - 38.830854568763904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08159" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01462246845327, - 38.891447097778624, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08160" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00926931424503, - 38.868295433385356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H08161" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92456958859614, - 38.89604421417688, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H08162" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02424766072127, - 38.935145217729044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 01/02/08

Report Problem", - "NAME": "H08163" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94202236269832, - 38.90861666634091, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08164" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0172963812285, - 38.890654725306696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08165" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00074023920943, - 38.886346387055426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H08166" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05812501222938, - 38.93557330871181, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/10/07

Report Problem", - "NAME": "H08167" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04456499397594, - 38.911074677276005, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08168" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95381372360585, - 38.85834333883947, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/26/07

Report Problem", - "NAME": "H08169" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00755524231829, - 38.90570537332664, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08170" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00880649602487, - 38.90569611521218, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H08172" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00572081136154, - 38.905719260326336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/04/07

Report Problem", - "NAME": "H08173" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01340079016845, - 38.902443942775804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08174" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04240553327146, - 38.90126458670531, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08175" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95565860108124, - 38.85691093069084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 08/21/07

Report Problem", - "NAME": "H08176" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93171236515379, - 38.88551644748906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/07

Report Problem", - "NAME": "H06775" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07997674543732, - 38.961032367081344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06776" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93561081739895, - 38.88600962758285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06777" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05931200835049, - 38.90982979904883, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H06778" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10244670460115, - 38.93988473964499, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H06779" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03091852572004, - 38.88608572947236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H06780" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03035854074379, - 38.88609295695204, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H06781" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01822966368945, - 38.92886967524745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/20/07

Report Problem", - "NAME": "H06782" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95941927170149, - 38.91845287454123, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06783" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04338693484873, - 38.90467721268086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H06784" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02966817634758, - 38.899743058400354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06785" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07469621511788, - 38.93910692946605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06786" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05744155687229, - 38.96314680294454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06787" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00579436256669, - 38.888774120746874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H06788" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95380719997834, - 38.87396028435545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06789" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01650694641194, - 38.97397167263155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06790" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94350489538657, - 38.903783169603216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06791" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97268359089284, - 38.922408914627795, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H06792" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95114901816872, - 38.89247950822375, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US pipe

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06793" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99157703651174, - 38.955543577165905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06794" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04437285473905, - 38.94515082911551, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H06795" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97891349259542, - 38.843241253842216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H06796" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93930316910527, - 38.8794846133168, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06797" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0886893672408, - 38.94138019415723, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/10/07

Report Problem", - "NAME": "H06798" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0980655268222, - 38.95115875666244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H06799" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05549341051372, - 38.984084077342835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H06800" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0526978139392, - 38.97704680578762, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 10/24/07

Report Problem", - "NAME": "H06801" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0035409833462, - 38.82825590688537, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06802" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98235268411509, - 38.89207209518024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/01/06

Report Problem", - "NAME": "H06803" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98093008033639, - 38.89206613326344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H06804" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97833887260107, - 38.91527651301537, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H06805" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05682587062851, - 38.97885234639924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H06806" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04295758729371, - 38.926561641107796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/23/06

Report Problem", - "NAME": "H06807" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98199379578354, - 38.919101025555314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06808" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03549478026815, - 38.901479082619964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H08177" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0092827879668, - 38.902604736306714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08178" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04150093609918, - 38.90126745191087, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08179" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99350386421665, - 38.92752398463641, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H08180" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99355669919886, - 38.92658690672346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H08181" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03959123380503, - 38.89742481485953, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08182" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04419249618404, - 38.90140050011229, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08183" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92182074154292, - 38.899207829429145, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/01/07

Report Problem", - "NAME": "H08184" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92120249374817, - 38.900071739400516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08185" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02363245136844, - 38.88123143409648, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08186" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02225212129427, - 38.88135470577844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08187" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0416078282054, - 38.902217507242085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08188" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9207012937859, - 38.89904467214268, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08189" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00758525140215, - 38.90569406590387, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H08190" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00025186288822, - 38.92305260761414, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08191" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9972408231606, - 38.92448807802464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08192" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03995315557866, - 38.93535159953509, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H08193" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01358784632926, - 38.89290682205701, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08194" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04051846792657, - 38.8964255864395, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H08195" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01494671207605, - 38.90258946535637, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H08196" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93050311745522, - 38.90002479938208, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08197" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09320065072461, - 38.92114763836906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H08198" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03831158173872, - 38.9014610409353, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H08199" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03748416543611, - 38.90146517393015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H08200" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02119456986291, - 38.89365163659758, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08201" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02906451894086, - 38.888715003678044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08202" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92756634578595, - 38.9047109646528, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08203" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92740591776794, - 38.90597091741606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H08204" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03182204114798, - 38.91197219079815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H08205" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03209063664018, - 38.91712557874504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08206" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03210336684512, - 38.90895414811679, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08207" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99123696917337, - 38.86205485832162, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H08208" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04566521114579, - 38.90863023480223, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08209" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99958465694297, - 38.89002489648742, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/22/06

Report Problem", - "NAME": "H08210" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0438685423126, - 38.991540667148115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08211" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92215662292064, - 38.901056983892204, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08212" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05264919204835, - 38.89643309950491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H08213" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05557594075515, - 38.94970435584497, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/20/08

Report Problem", - "NAME": "H08214" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04313662915926, - 38.90875583518156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08215" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01744375663698, - 38.88549660543028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08216" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03081125628373, - 38.90141181307621, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H08217" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03336025786113, - 38.977209204283, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08218" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01929184680138, - 38.94215128765235, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08219" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02857666736612, - 38.934475904627455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/11/07

Report Problem", - "NAME": "H08220" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03931652931746, - 38.90154979970365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H08221" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04534624867802, - 38.92793162400314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/09/06

Report Problem", - "NAME": "H08222" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0463193741046, - 38.929753137432066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/09/06

Report Problem", - "NAME": "H08223" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01351392151345, - 38.86472204025098, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, A.P. Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H08224" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05338534483874, - 38.89968216306236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H08226" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08392436344513, - 38.93520806434547, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08227" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0137510566863, - 38.868501266149224, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H08230" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02236734369201, - 38.87872401757323, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08231" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02686660091739, - 38.9057012853849, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/24/07

Report Problem", - "NAME": "H08232" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01223179441675, - 38.90273073486977, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08233" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01223631934823, - 38.903637686407194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08234" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01631002904152, - 38.907182154548025, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08235" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99957175775653, - 38.90362408420953, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H08236" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0196865787712, - 38.887694302678234, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08237" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01712937463928, - 38.88769284095378, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08238" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05325998845386, - 38.974429858512536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H08239" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05451519215418, - 38.97400137106152, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08240" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02141160033958, - 38.9025904232028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H08241" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01773654470381, - 38.90138746860893, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08242" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02423988131991, - 38.91253429240804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H08243" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01626198843816, - 38.901224676959394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08244" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97312474257745, - 38.88525611195604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08245" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99793329869803, - 38.87658623326196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/16/06

Report Problem", - "NAME": "H08246" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00578083068814, - 38.885218820420974, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H08247" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0672432194845, - 38.97200398815426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H08248" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01999553121911, - 38.92114513258771, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H08249" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00472236749316, - 38.885007594424685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/07/07

Report Problem", - "NAME": "H08250" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03071004240493, - 38.91339480588025, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08251" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02971018132025, - 38.91326958726182, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H08252" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02427706527385, - 38.912565219321955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08253" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03834107114176, - 38.95707617833018, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H08254" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00293472570456, - 38.925205297973406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/28/08

Report Problem", - "NAME": "H08255" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9758817182945, - 38.882693774413184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H08256" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01979363064866, - 38.897860590742205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08257" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03326918376025, - 38.91043142449036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08258" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93674142079028, - 38.890259092651476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08259" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02413260889021, - 38.913400187017174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H08260" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02584994353063, - 38.91337647010082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/08/07

Report Problem", - "NAME": "H08261" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01210857023432, - 38.869347977064805, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H08262" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00927794074641, - 38.89511931173586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08263" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00896262042976, - 38.8960392256087, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08264" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01511786062102, - 38.96854741563351, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H08265" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98952692870112, - 38.91281293838704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/28/07

Report Problem", - "NAME": "H08266" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98551208205598, - 38.92471905963108, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H08267" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07949187356242, - 38.93323857834559, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08268" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01583620541501, - 38.87752262745055, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08269" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99513327070656, - 38.93132925498553, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08270" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04649363470668, - 38.89357737456082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H08271" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01230137266033, - 38.92634611310559, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H08272" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01013885360227, - 38.926591229778545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H08273" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01398335499461, - 38.92621440255582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/10/06

Report Problem", - "NAME": "H08274" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01532220622806, - 38.92688260660708, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08275" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02405292872156, - 38.8944090110871, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08276" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02406840229555, - 38.89565075720782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08277" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02490264297842, - 38.89603614939658, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08278" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00510950552537, - 38.873082494450905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08279" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99606942549883, - 38.93299883544605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08280" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.984790676523, - 38.90043212834989, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H08281" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06743986700921, - 38.936163150493876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/06/08

Report Problem", - "NAME": "H08282" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05517856338699, - 38.93414474992192, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/27/06

Report Problem", - "NAME": "H08283" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01373964756537, - 38.89489005965317, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08284" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95138380039576, - 38.88833419518425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08285" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95157623961008, - 38.88941006457362, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08286" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0428356429657, - 38.92247281884923, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H08287" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01532574724511, - 38.90230944559513, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08288" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94464310550777, - 38.90652417217478, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08289" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02606368145655, - 38.91274468592601, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H08290" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9403631158589, - 38.90950012644815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08291" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98558416828085, - 38.89660300893139, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08292" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98692181841473, - 38.896762317109065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08293" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07853351345675, - 38.96102858898315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H08294" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04474272033883, - 38.919258717509656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H08295" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04536119029878, - 38.91837010471332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/25/06

Report Problem", - "NAME": "H08296" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98821772840788, - 38.94636344257222, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08297" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98822205775481, - 38.94711051769654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08298" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00207792724254, - 38.82319824431888, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H08299" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00374368104323, - 38.83209246142694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08300" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0745179419083, - 38.92233686601356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08301" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00137767016994, - 38.88861960954308, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/31/06

Report Problem", - "NAME": "H08302" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03954898450759, - 38.90482729379108, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08303" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03870626477836, - 38.90481002775378, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08304" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00415039685, - 38.887707932173186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08305" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03084566274906, - 38.91414191257845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08306" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02971224774062, - 38.913967498614944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H08307" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9892134418145, - 38.87402078337386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/12/06

Report Problem", - "NAME": "H08308" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92179076001224, - 38.89728089314876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08309" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03350578907524, - 38.90972104906031, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 10/25/07

Report Problem", - "NAME": "H08310" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03074528355717, - 38.89724948166159, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H08311" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96362156871533, - 38.850699911071544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H08312" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96257937013323, - 38.85150873728961, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08313" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0113459515883, - 38.9013182150612, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H08314" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0160661789324, - 38.91755385770648, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08315" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01510686781566, - 38.8923022999448, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08316" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99055525683777, - 38.87335822368137, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/10/06

Report Problem", - "NAME": "H08317" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98222824471678, - 38.83619910675699, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/17/07

Report Problem", - "NAME": "H08318" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96254275137659, - 38.926826639313255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08428" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96280426767339, - 38.925778650334095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08429" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9613028254853, - 38.92613610827265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08430" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9392726023663, - 38.89175677212225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/08/07

Report Problem", - "NAME": "H08431" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02083652520874, - 38.884773856446024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/03/07

Report Problem", - "NAME": "H08432" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02679516929125, - 38.97648061376269, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08433" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98696072061638, - 38.908576156445044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08434" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96481506894972, - 38.84973311316996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H08437" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99698155188067, - 38.94559483426475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08438" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99840611729657, - 38.945426704764486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08439" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02605733788842, - 38.90977280878796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H08440" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02587864211371, - 38.9110871926042, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H08441" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97718498973083, - 38.88679479636077, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/06/06

Report Problem", - "NAME": "H08442" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00381412784823, - 38.87470687551057, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08443" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02605383574824, - 38.90848666127305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08444" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02591163873204, - 38.90711401011605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08445" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97489749027639, - 38.927786358732135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H08446" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97370627688652, - 38.92776132393991, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H08447" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03900908895159, - 38.903847997163304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08448" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98381084491167, - 38.881325570503094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/17/06

Report Problem", - "NAME": "H08449" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02423415194802, - 38.920817517456605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H08450" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10248470261361, - 38.923019930141635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H08452" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0150670437515, - 38.895202360187156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08453" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0197770001507, - 38.894299667958826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08454" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01968850613716, - 38.893676231752664, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08455" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00790620159373, - 38.89677353762276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08456" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09146094765984, - 38.916366471316195, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H08457" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9949765650847, - 38.8387182415587, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H08458" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99184322048237, - 38.882666954785755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/07/06

Report Problem", - "NAME": "H08459" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99279589759597, - 38.88266990912566, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/07/06

Report Problem", - "NAME": "H08460" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03808518129945, - 38.8964851216087, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08461" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95899268806791, - 38.927475865897996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08462" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95952451906204, - 38.92641322328298, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08463" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95816678847049, - 38.92822525403737, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08464" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95856004768567, - 38.92774257557982, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08465" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97874310067432, - 38.83891656384935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08320" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98090804420679, - 38.83722066429693, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H08321" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04477094130978, - 38.93428994564243, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H08322" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98439807816389, - 38.85959801716119, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H08323" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08455634619834, - 38.95874907307745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H08324" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05050700205177, - 38.89719671153101, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H08325" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03434068464448, - 38.91109067822516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08326" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03318859323646, - 38.91118194134541, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/30/07

Report Problem", - "NAME": "H08327" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02799335021693, - 38.89720467227648, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08328" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02817944809317, - 38.897510533529406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08329" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02798523689899, - 38.89750416626152, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08330" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02971165071288, - 38.898224859335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08331" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0278904743096, - 38.89840758351679, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08332" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98845940621565, - 38.88277003166853, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/28/06

Report Problem", - "NAME": "H08333" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00522213820375, - 38.90991302897518, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08334" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04055172817277, - 38.90139941536408, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08335" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06645356958478, - 38.922527824070826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08336" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06502920837417, - 38.92272326820528, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08337" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06543401109026, - 38.92333855392444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08338" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98689992846845, - 38.85620339196964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H08339" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98555681399935, - 38.857141091752496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H08340" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01898043308506, - 38.91272105309525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08341" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04501646204457, - 38.89529116468103, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H08342" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98816471194674, - 38.837750818319385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08343" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02619707222384, - 38.898391445191194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08344" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02381303904498, - 38.898532792202516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08345" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9883786746581, - 38.879420011156185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/27/06

Report Problem", - "NAME": "H08346" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02283404670345, - 38.897080569409574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08347" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02206304492873, - 38.89710260789232, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08348" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0169171448239, - 38.97330557233673, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H08349" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04337971467226, - 38.906529998821355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08350" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03295321706722, - 38.92350394493053, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/21/06

Report Problem", - "NAME": "H08351" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03285151529943, - 38.92267544224298, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H08352" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02172945583831, - 38.911068246585344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08353" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02097298162155, - 38.91125199281655, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08354" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00716575264279, - 38.90718151478236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08355" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0145768195112, - 38.896003203035555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08356" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98768896734745, - 38.83681138550871, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08357" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98928491590188, - 38.879224579692156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/16/06

Report Problem", - "NAME": "H08358" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98837899611085, - 38.88112601104574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/05/07

Report Problem", - "NAME": "H08359" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01403141657126, - 38.90379759906298, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08360" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96326847348543, - 38.880678366073994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H08362" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9825575519487, - 38.92894088897529, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H08363" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94577625936975, - 38.86921353709764, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H08364" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94703477273785, - 38.8683998085889, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H08365" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9563895304164, - 38.92728647858071, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08366" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95998785756807, - 38.92908739259746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08367" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04025982788481, - 38.903890200379095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H08369" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92332854926619, - 38.89953523775674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08370" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03443405457999, - 38.9014902821746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H08371" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03354155308863, - 38.90123515490904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H08372" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02204435392741, - 38.884068467473675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08373" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98899509108924, - 38.8612038684665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08374" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91974324070002, - 38.89917079258774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08375" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0326395003206, - 38.90123053689111, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08376" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01829311716507, - 38.89196076946774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08377" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03347096524197, - 38.90140821668236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H08378" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01384898174817, - 38.8851367246785, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/04/07

Report Problem", - "NAME": "H08379" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01063685948301, - 38.9057054847332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08380" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99460350852914, - 38.909909138456875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08381" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99551978574854, - 38.909654691506766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08382" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.032102210849, - 38.90121111060677, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H08383" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03217864309157, - 38.90141339025018, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H08384" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96375080281416, - 38.924997377139746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08385" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9898512889259, - 38.83379076058705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/30/07

Report Problem", - "NAME": "H08386" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0228134302436, - 38.88491735091642, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08387" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02822365104687, - 38.89621301216608, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08388" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02825521358331, - 38.89481603216257, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08389" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01470054031982, - 38.91768706349387, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08390" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02011984858905, - 38.897421323292384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08391" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01456811375331, - 38.90863579123086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H08392" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0526693576068, - 38.913784905295614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08393" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98853372608112, - 38.86072686429535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08394" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99485835521703, - 38.93352980089793, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08395" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02089442069115, - 38.89725620816021, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08396" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99504121148979, - 38.89286552808492, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08397" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9963869020058, - 38.89239424150939, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H08398" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00009277077737, - 38.960240183984304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H08399" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03472186902212, - 38.901528500520605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H08400" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04035226386559, - 38.91884498711813, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08401" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09758322381626, - 38.91781397793509, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H08402" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00076633215748, - 38.87758588357054, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08403" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09665497285758, - 38.91737221497994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H08404" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96086351700934, - 38.92771938951734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08405" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96185308264808, - 38.926848792888386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08406" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96094253819084, - 38.92706797972132, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08407" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9619430855142, - 38.924185378131774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08408" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00471748575956, - 38.894848162840894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08409" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00336797377814, - 38.89525374818417, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08410" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99801097628497, - 38.946349092688955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08411" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99845883958635, - 38.947335470064644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08412" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99770476850875, - 38.94720454937909, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08413" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01016547589707, - 38.903815457590504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08414" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01624662809736, - 38.89599123582937, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08415" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01129772563324, - 38.90384923399925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H08416" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01222011013053, - 38.92120324505646, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H08418" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96200971460257, - 38.92475458143464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08419" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96402536763, - 38.92594683051196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08420" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9621355275832, - 38.927497267175745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08421" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96258566163135, - 38.92368791198445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08423" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96036446401986, - 38.92427438707619, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H08424" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96369466263668, - 38.92576998507413, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/22/07

Report Problem", - "NAME": "H08425" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9625030277677, - 38.9255432928641, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08426" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96309268978209, - 38.9267188225985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08427" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95689856788752, - 38.92864146368962, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/15/07

Report Problem", - "NAME": "H08466" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95970909884488, - 38.924449050474934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/07/07

Report Problem", - "NAME": "H08467" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95726784464247, - 38.92814826806567, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/07/07

Report Problem", - "NAME": "H08468" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95984502892284, - 38.92534896520106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08469" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08638710577023, - 38.93462981066992, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H08470" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02798760970032, - 38.89365008944466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/15/08

Report Problem", - "NAME": "H08471" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02836423520479, - 38.89196439736748, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/15/07

Report Problem", - "NAME": "H08472" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02826522843692, - 38.89236599654917, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08473" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02826125937592, - 38.892938407398994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08474" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06318425130685, - 38.944293495447674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H08475" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0573447641172, - 38.93383851487389, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/27/06

Report Problem", - "NAME": "H08476" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94637204663934, - 38.89843839358465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08477" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94616299994543, - 38.898971673545276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H08478" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02847482355152, - 38.911745638926384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H08479" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02875439842148, - 38.91095659298035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H08480" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03812996010343, - 38.89634445038992, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08481" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08658881613316, - 38.95998389743036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H08482" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92255226785032, - 38.898665229480834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08483" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02182938574424, - 38.8974671481761, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08484" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02204448311844, - 38.899259240202056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08485" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97922669310609, - 38.919809755946844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H08486" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98449915185869, - 38.84439894866785, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08487" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97208616208393, - 38.928242145248376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08488" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05459880699436, - 38.94173242238124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/20/06

Report Problem", - "NAME": "H08489" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97510623589379, - 38.87412643178905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08490" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97512818899816, - 38.89879257990533, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H08491" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02859860157034, - 38.88768369546333, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08492" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02822972218756, - 38.88667732401562, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08493" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00432219533818, - 38.84966108808251, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08494" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05497110319803, - 38.95221189678646, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08495" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00622271852494, - 38.90147398542171, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08496" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01626838110322, - 38.89159573448617, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/17/07

Report Problem", - "NAME": "H08497" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99732923533367, - 38.88520448349828, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/01/07

Report Problem", - "NAME": "H08498" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99744155044182, - 38.884990005440564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H08499" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98711293458845, - 38.881325477069744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/19/06

Report Problem", - "NAME": "H08500" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03100176511474, - 38.91107117192213, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H08501" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.029718354384, - 38.91127255354978, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/07/08

Report Problem", - "NAME": "H08502" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00579074823631, - 38.89494169348083, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08503" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99708905931759, - 38.944563721900295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08504" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99780241534405, - 38.94433857542791, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08505" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0432831916959, - 38.9148896048663, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H08506" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04329924046024, - 38.91562729143581, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08507" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04336543084449, - 38.91328248714605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H08508" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04336294928191, - 38.91420757221476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H08509" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00467641774055, - 38.955577477958514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H08510" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01676421713123, - 38.97492892271481, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08511" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00094005175632, - 38.952682427762525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H08512" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00111515709453, - 38.95275324023068, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H08513" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0046655435606, - 38.95495466495944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H08514" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97800595108619, - 38.841120966288855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08516" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92790991157297, - 38.88776816789205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 02/28/08

Report Problem", - "NAME": "H08518" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92981760872138, - 38.888724920649125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08519" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93041850895601, - 38.88594005981671, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08520" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97168509423048, - 38.85692322325186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08521" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9269147821931, - 38.8814460948615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08522" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92996967614468, - 38.88805560823569, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08523" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03181107669249, - 38.90145226288173, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/21/08

Report Problem", - "NAME": "H08525" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02006637347118, - 38.88882305079976, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08526" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02685913709283, - 38.89041123219989, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08527" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03036355406417, - 38.888691909048134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08528" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92575333584115, - 38.88681264016373, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/03/07

Report Problem", - "NAME": "H08529" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92903683068647, - 38.881683576463125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08530" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0376211413675, - 38.96128358441223, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08531" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98387172945833, - 38.8553852639279, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H08532" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9482544365408, - 38.88915211769327, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08533" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99043433811318, - 38.86019398022922, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08534" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93534554685658, - 38.904581087974115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08535" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93597316733936, - 38.90601041048936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08536" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95496542205478, - 38.864111889116856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/03/08

Report Problem", - "NAME": "H08537" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97360608449723, - 38.858177709127055, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08538" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99010971881326, - 38.83154461312445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06304" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99158447120384, - 38.84400563613905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 02/21/08

Report Problem", - "NAME": "H06305" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99650063765533, - 38.82731645106532, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06306" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9942613489853, - 38.85891046792447, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H06307" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9424613941558, - 38.87942205420123, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06308" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94318930617003, - 38.880100904643065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06309" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00094198954898, - 38.95876499697013, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06310" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99793491978788, - 38.824950095276236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06311" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99772070099907, - 38.82556903633247, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06312" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0000479654624, - 38.95502742771825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06313" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99654653064003, - 38.948286640332384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06314" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00131907759724, - 38.95697461055816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06315" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96467675990772, - 38.873105370179346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/09/06

Report Problem", - "NAME": "H06316" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9513462421715, - 38.86993561831918, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06317" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06008266147673, - 38.90404294626886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H06318" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96223514638304, - 38.87188215688112, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06319" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03984973394303, - 38.905599108174734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H06320" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99797795290505, - 38.96087385228594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06321" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00292127032174, - 38.959335141986934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06322" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0029134179376, - 38.95860702266086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06323" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.959429989507, - 38.871193757676636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/09/06

Report Problem", - "NAME": "H06324" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08621657401493, - 38.941646176336384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/14/07

Report Problem", - "NAME": "H06325" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0060432725119, - 38.82914523706379, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06326" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97975742844228, - 38.907449627792346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06327" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05602825092163, - 38.959417683301226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06328" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09058080915013, - 38.94488207705248, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H06329" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92994923586132, - 38.87848045455763, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06330" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92997035249158, - 38.879522179931946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06331" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95678689031837, - 38.89197872047685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06332" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96668122823594, - 38.92563092149949, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/07

Report Problem", - "NAME": "H06333" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98107604350997, - 38.84970423505059, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H06334" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95761052706486, - 38.885276744294536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/10/08

Report Problem", - "NAME": "H06335" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9689828986322, - 38.85529060601268, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06336" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10319215143784, - 38.937125373112885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06337" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96025208313756, - 38.87751710826846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06338" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10199165846161, - 38.94207491012106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/09/08

Report Problem", - "NAME": "H06809" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93188206066793, - 38.889632854120734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06810" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04354367039312, - 38.99020962857461, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06811" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04431139193487, - 38.98497449063176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06812" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05259754131637, - 38.89962876752536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H06813" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08112630706023, - 38.9067914243098, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06814" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97907583196913, - 38.90427153327567, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H06815" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93903046883437, - 38.89978244361404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06816" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97909581360963, - 38.90103858259027, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H06817" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97935427625308, - 38.89961572234665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H06818" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0498815307086, - 38.91266203218983, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H06819" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05524152681508, - 38.966256015539265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06820" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9791653098176, - 38.90501399955406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/29/08

Report Problem", - "NAME": "H06821" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97916724142279, - 38.9037688565339, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H06822" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97915266357276, - 38.90256463524427, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, USP

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06823" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97890899180648, - 38.90175636187868, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H06824" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.950614591531, - 38.90207286702679, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H06825" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93277440125377, - 38.89183110849277, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06826" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93397222830615, - 38.891781056551544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06827" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08344901069415, - 38.96247001853708, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06828" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99794042749807, - 38.84321258359658, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06829" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00211459104457, - 38.8791159604665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H06830" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9777128015119, - 38.90233239529218, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H06832" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98036613862679, - 38.90127756047794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H06833" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04581257261422, - 38.942667049608396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H06834" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93061566693929, - 38.8981998981573, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06835" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00197923389352, - 38.88001350485407, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/01/06

Report Problem", - "NAME": "H06836" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00218617108085, - 38.878343606629706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H06837" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00074163014447, - 38.87933638556729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 11/10/06

Report Problem", - "NAME": "H06838" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98829182615815, - 38.912835648282005, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H06839" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99682697263924, - 38.91014814825445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H06840" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9932680535277, - 38.91057318212014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06841" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06492180613985, - 38.903931743686734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H06842" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99607692273177, - 38.84348248291928, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06843" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06799562489095, - 38.90967835835896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/08/07

Report Problem", - "NAME": "H07268" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97288442106708, - 38.874268999431315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07269" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1057971046107, - 38.92774309571597, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H07270" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9718932464032, - 38.87758487310338, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07271" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97102071397458, - 38.87902117427944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07272" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93505601398128, - 38.883847091875765, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07273" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0172380791555, - 38.82272044132549, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H07274" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05588598026421, - 38.93690658413924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/18/05

Report Problem", - "NAME": "H07275" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99827184749294, - 38.91957081503366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07276" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99166522071086, - 38.898960666041795, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07277" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.992527170893, - 38.89896296744019, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H07278" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04337789329506, - 38.90362982387168, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07279" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0279766083476, - 38.88343885332378, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H07280" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00049927276746, - 38.83139627437486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07281" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99473614256651, - 38.89153822135641, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/04/06

Report Problem", - "NAME": "H07282" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01433752866193, - 38.87935951522073, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07283" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01998269109451, - 38.87742059309258, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/21/08

Report Problem", - "NAME": "H07284" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01913810912403, - 38.87834478854834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07285" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01998414816177, - 38.878508275290706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07286" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03124438213845, - 38.97214077611694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H07287" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09438902912585, - 38.93248178929561, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/26/07

Report Problem", - "NAME": "H07288" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98649905520308, - 38.932808217717465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H07291" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97412070698806, - 38.88402778257524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H07292" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93814038792657, - 38.876428562683174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H07293" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95743452962736, - 38.885872710903186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/07/08

Report Problem", - "NAME": "H07294" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02796855055394, - 38.881700353750524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07295" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03114521856557, - 38.882812887396334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07296" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03087176449948, - 38.88312784813139, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07297" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03925445444915, - 38.982948349912874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H07298" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98375852939992, - 38.91475560227307, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H07299" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93392357053568, - 38.90612145930246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07300" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01884523396411, - 38.89598159392819, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07301" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95132071266752, - 38.873913376547904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07302" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95287539677435, - 38.87454847589481, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07303" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91649170986268, - 38.893011248621335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H07304" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01342033836507, - 38.878461757788635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07741" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92526210004631, - 38.88185626399039, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/22/08

Report Problem", - "NAME": "H07742" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93281190286608, - 38.90613430179411, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H07743" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05263459899241, - 38.89868417910864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07744" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05160308022576, - 38.8981174818172, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H07745" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99181324622516, - 38.913476458853495, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07746" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05002308526707, - 38.90711874141516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07747" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00713398029409, - 38.902596068103726, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H07748" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9730906640221, - 38.916419030126704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07749" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05654547254223, - 38.89470632929781, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H07750" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97854699647581, - 38.9290532669026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07751" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97725497061309, - 38.9291135404281, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H07752" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06110013765166, - 38.906758932084074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/17/07

Report Problem", - "NAME": "H07753" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05717522525298, - 38.90690650266282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07754" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99488126588837, - 38.902294033570534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H07755" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0582657616718, - 38.90689473049063, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07756" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99487383548785, - 38.90382141760269, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07757" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06946745852954, - 38.916522866822895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/16/08

Report Problem", - "NAME": "H07758" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99487947157466, - 38.89468810322306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07759" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93052527485881, - 38.90470013195742, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H07760" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0093999101176, - 38.88311783915731, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07761" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01063283576278, - 38.88312134578459, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07762" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99487230027009, - 38.89903637692326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H07763" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00196897298102, - 38.842707697793834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H07764" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99139999991228, - 38.87320087615333, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H07765" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01742140936466, - 38.87384271477187, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07766" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01765882040428, - 38.87451807484806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07767" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02081924170639, - 38.88135481684726, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07768" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0174426769584, - 38.87551687743489, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07769" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01867656891648, - 38.881341846725824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07770" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03621679669857, - 38.89796392521521, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H07771" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0368967817473, - 38.89796860396744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H07772" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04346389556616, - 38.92826027783582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07773" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02406298086142, - 38.81754920450373, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/11/07

Report Problem", - "NAME": "H07774" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99745840910933, - 38.82620057874815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06339" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9956068334873, - 38.82844436207334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06340" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99682326982476, - 38.828125006322736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06341" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99339191721745, - 38.95552054258865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06342" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93476059633116, - 38.895033836867896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H06343" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94791305166814, - 38.86882538255405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06344" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95998804184612, - 38.88935925271337, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06345" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06107098506828, - 38.90850181945575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H06346" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93320064366125, - 38.88965038022436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06347" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99032197115449, - 38.88140162869176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/27/06

Report Problem", - "NAME": "H06348" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9760216362617, - 38.84839872241051, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06349" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10189551860627, - 38.93639631563402, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06350" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00192226267096, - 38.82213544512, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06352" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03855193202259, - 38.912755556166076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H06353" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98762947524733, - 38.83216761803273, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06354" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99506468853413, - 38.92624212382352, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H06355" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99598770630901, - 38.925284016651744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H06356" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98563966534705, - 38.86056768974044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06357" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08950270210565, - 38.90941356583103, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H06358" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93547349084179, - 38.90275046283293, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H06359" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95493978817174, - 38.85947083173937, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06360" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91612755633857, - 38.89788590295347, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06361" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0347101888558, - 38.90360959613769, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06362" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95963016559689, - 38.88526874870483, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/10/08

Report Problem", - "NAME": "H06363" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93369194522047, - 38.90070602734576, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H06364" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00857842370351, - 38.82447080877871, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06365" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94415948378074, - 38.90044744658407, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/08/07

Report Problem", - "NAME": "H06366" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10301117280481, - 38.93838187549443, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy, K81A

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06367" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99841487177481, - 38.90708070417186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H06368" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94010232235925, - 38.87872176274441, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06369" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01083734992935, - 38.82609913629217, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06370" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99191366111425, - 38.83417960066931, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06372" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98957882319804, - 38.83502705741386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H06373" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94078738017618, - 38.869412767156305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06374" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94462028341387, - 38.892721515049516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06375" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99864897478108, - 38.84317751506021, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06844" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99484419430694, - 38.843697448548774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06845" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9922569181805, - 38.84395933423378, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/07/07

Report Problem", - "NAME": "H06846" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99955191583206, - 38.84320232226955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06848" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91897316867937, - 38.891790001345214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06849" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9402533802271, - 38.87757590921841, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06850" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93928743314085, - 38.87652350957581, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06851" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08364710794544, - 38.95335321635176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06852" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09069924201972, - 38.953367298846686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/12/07

Report Problem", - "NAME": "H06853" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94248132894039, - 38.8672304526927, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06854" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94265647631872, - 38.86794841010728, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06855" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94618815273662, - 38.906538136283935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06856" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93474601630156, - 38.892914303294454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06857" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.963360431868, - 38.93503937652759, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06858" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96128073431242, - 38.882799424655836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/05/07

Report Problem", - "NAME": "H06859" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00222589421041, - 38.91816450759264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H06860" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00369154111137, - 38.91805374010515, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H06861" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99063765723189, - 38.92962671738468, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06862" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05725835591967, - 38.91261370752583, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H06863" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05520375582552, - 38.970257873523714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06864" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06425030350772, - 38.906894673585185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06865" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97134524838968, - 38.8522550803544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06866" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05606306758123, - 38.96852105408021, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/12/08

Report Problem", - "NAME": "H06867" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05625816843887, - 38.962009617823256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06868" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05983560459721, - 38.966514994145456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06869" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98376542601555, - 38.857205735079866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06870" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08314101453924, - 38.94104236238156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06871" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97073573734988, - 38.91963415842319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06872" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9704394700389, - 38.92000406482806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06873" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96784416447316, - 38.92242569083767, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06874" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96646694615163, - 38.92384010561988, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06875" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96922992836353, - 38.92147108261294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06876" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96698599320483, - 38.92353877195621, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H06877" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96046686602362, - 38.8763736734287, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06878" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95811052128136, - 38.93061837270984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/11/07

Report Problem", - "NAME": "H06879" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96727098728275, - 38.857171800876756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07305" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99635417416557, - 38.884554151004195, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07306" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01494724758, - 38.881212401512734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07307" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01378666928579, - 38.8813579576819, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07308" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01279834871673, - 38.881219872480905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07309" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06878110099485, - 38.91722232852371, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07310" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01602895733629, - 38.96265282003601, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H07311" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05135348582326, - 38.90381273899625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07312" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97474021922181, - 38.87126849176154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07313" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93934619799694, - 38.897468791997184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H07314" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98460593523568, - 38.932915786081175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H07315" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0269938774607, - 38.882992178578796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07316" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0532342281229, - 38.90276396427433, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07317" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0493638217325, - 38.902781509455075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07318" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04772895307246, - 38.9023632372102, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07319" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05152540812392, - 38.90271795003059, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H07320" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04669577766252, - 38.902774507813405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H07321" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0148720424155, - 38.87301176305626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H07322" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01684278490809, - 38.874695931097925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07323" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01591764608332, - 38.87461418352595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07324" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01450467759673, - 38.873992616869565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07325" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01450659961178, - 38.874774005160646, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07326" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99382187311828, - 38.86127895747909, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H07327" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02979387119423, - 38.92252251676341, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 04/05/07

Report Problem", - "NAME": "H07328" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02708016953936, - 38.88442227572075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07329" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0270826006272, - 38.883752060381994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07330" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96347613201775, - 38.85251151579887, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07331" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02180399151449, - 38.895473034350346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07332" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02201541580818, - 38.89580636728702, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07333" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02180749732133, - 38.89415795624079, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07334" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02174944125531, - 38.894860484606916, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07335" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02200250619778, - 38.89468900798926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H07336" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01142075801127, - 38.815766086697586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H07338" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01144093096623, - 38.81439651564001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H07339" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0227656159168, - 38.94630885992599, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07340" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07876359814216, - 38.94389898622888, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H07775" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99651848135503, - 38.848006392343244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H07776" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01372098245272, - 38.89595689559788, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07777" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99087963650723, - 38.91957312034873, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H07778" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04360849355336, - 38.91255213573038, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H07779" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99029430469642, - 38.91372777423202, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H07780" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98881807747505, - 38.91424336049654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H07781" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01552177152728, - 38.95446121876773, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H07782" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99293796545437, - 38.831023814076744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H07783" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05909760345287, - 38.90614583593231, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07784" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99232283930444, - 38.82834727015251, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H07785" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07594643658683, - 38.92489561624111, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/09/06

Report Problem", - "NAME": "H07786" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97773433433112, - 38.917372665271934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/00

Report Problem", - "NAME": "H07788" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97600817203194, - 38.917150493472356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07789" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98932201571286, - 38.9143341035538, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H07790" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98282006843007, - 38.91633001660792, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - MEDALLION

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07791" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98427216517216, - 38.91582564636996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07792" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0368585383062, - 38.90752945317807, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H07793" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97512242465194, - 38.917437277631876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H07794" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98761884680764, - 38.914650587478306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07795" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97394390447603, - 38.91716589706266, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07796" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98505442179395, - 38.91550058425484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07798" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03167743781633, - 38.976578159461894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H07800" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99003768502162, - 38.935594255091814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H07801" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02689659986729, - 38.89561209793297, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07802" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92280358021574, - 38.88282226502623, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/22/08

Report Problem", - "NAME": "H07803" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01348751390485, - 38.92015589692185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H07804" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99066590132217, - 38.830688431535556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H07805" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0217240860084, - 38.9453369203669, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07806" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0219117482382, - 38.94613258689647, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07807" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06614962748161, - 38.906008732419245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H07808" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06771622604425, - 38.90597631470976, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H07809" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10280732391429, - 38.93483740473735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H07810" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07902293422096, - 38.965877087039736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H07811" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03632478450702, - 38.90368134326886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H06376" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95621682912618, - 38.861642256984226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06377" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98573229222727, - 38.95115954146684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06378" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96890085144213, - 38.87151492186587, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06379" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92413955013444, - 38.89377047541237, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06380" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92518488992707, - 38.894323353731, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06381" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98225091412405, - 38.90448472794493, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06382" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92548692103111, - 38.89338060451896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06383" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04018306995864, - 38.92724280083231, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06384" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94820585250427, - 38.889628558221574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06385" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95250851558777, - 38.88471370305015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06386" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05867796190613, - 38.95498451607828, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06387" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05993017911504, - 38.95455106065457, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06388" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98736806711368, - 38.919086073617436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/04/08

Report Problem", - "NAME": "H06389" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07262882789776, - 38.932564845168564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06390" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92729133065178, - 38.88964889623357, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06391" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98565165251033, - 38.900092189763704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H06392" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94730003285807, - 38.889951697895846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06393" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94277294832536, - 38.88989497692029, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/18/07

Report Problem", - "NAME": "H06394" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07666750097329, - 38.95081085820682, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06395" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94488773117428, - 38.86805889165294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/03/08

Report Problem", - "NAME": "H06396" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94408807622351, - 38.86866497566869, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H06397" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01915796192878, - 38.93743690998917, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06398" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9920012876199, - 38.95744291813311, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06399" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99282387370222, - 38.958034625072735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06400" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95485103689134, - 38.858286928442375, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06401" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9885581649474, - 38.9323779485778, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06402" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9403906052068, - 38.889658801942446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06403" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95621010546085, - 38.859474134721815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H06404" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98872848378188, - 38.934536940069194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06405" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95993184202754, - 38.89702941929888, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06406" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07357713243127, - 38.93722579682287, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06407" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07230564822046, - 38.93806898330772, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06408" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93446043709126, - 38.88957287413981, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06409" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92921366782463, - 38.8896477258259, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06410" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95845546909602, - 38.93003918047837, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/28/07

Report Problem", - "NAME": "H06880" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96354541629603, - 38.92663907895507, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06881" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96297487993984, - 38.92719529815789, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06882" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97170466665071, - 38.901337761238985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H06883" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96158661395637, - 38.92134311795151, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06884" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9808575383346, - 38.88546202645402, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H06885" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98067951818366, - 38.891050821518625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/01/06

Report Problem", - "NAME": "H06886" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98084054752002, - 38.88422369533478, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/26/06

Report Problem", - "NAME": "H06887" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1022441627605, - 38.941546208943365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06888" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04577710186203, - 38.90557013625271, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H06889" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94929066275576, - 38.87726620429468, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H06890" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91262698875987, - 38.89536936296406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06891" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91187691952949, - 38.89471703491633, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/11/08

Report Problem", - "NAME": "H06892" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91416352642354, - 38.89660709893166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06893" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00195263729442, - 38.965196363764406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06894" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97797636106448, - 38.92027692397566, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06895" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92058618802173, - 38.898204320775314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H06896" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92479314900567, - 38.898443682540936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/05/07

Report Problem", - "NAME": "H06897" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05851610742279, - 38.95360645820845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06898" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92568413701112, - 38.898516679986486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/05/07

Report Problem", - "NAME": "H06899" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92183103294697, - 38.898221807835306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06900" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93675589040556, - 38.899096923205846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06901" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97006697274162, - 38.9199159406427, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06902" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9619108089718, - 38.928025045285246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H06903" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9600933858736, - 38.92928934997076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H06904" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97828247739685, - 38.86892409103628, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/17/07

Report Problem", - "NAME": "H06905" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95996523487764, - 38.88031413424983, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06906" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97873576249505, - 38.869549475017244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H06907" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03481222745445, - 38.97513333035078, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06908" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02742612846652, - 38.974926070584175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06910" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02857030781799, - 38.97461768814917, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06911" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93860683013166, - 38.87469578200884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H06912" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97890893510812, - 38.921170595704275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H06913" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9219028564582, - 38.88646612596618, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06914" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01969474537717, - 38.92930442183414, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06915" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05945717749043, - 38.97996399532121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H07341" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05416500998363, - 38.98012532686826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07342" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97073411433927, - 38.923308094717704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07343" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97004308855342, - 38.9222555675058, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07344" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01057828303236, - 38.87851643345949, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07345" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93371434777302, - 38.90841946070984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/06/06

Report Problem", - "NAME": "H07346" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01425467205539, - 38.87633756963333, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07347" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96739819608914, - 38.91745290808618, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H07348" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96415166667015, - 38.91686995596387, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07349" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96305428232182, - 38.917178014373874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07350" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96523652644659, - 38.91730362050751, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07351" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96621225655664, - 38.91737508153287, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H07352" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0159281040351, - 38.872935493791175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H07353" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98713634192262, - 38.867198778360724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H07354" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00916426489884, - 38.88745975384796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07355" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97818278157972, - 38.89352903517165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H07356" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03823057312687, - 38.990129754296284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H07357" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96319829252309, - 38.86558191155318, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07358" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9730110862898, - 38.8879686711808, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07359" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.938462196277, - 38.889603427344525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07360" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99121177677247, - 38.94622085267838, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07361" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02648922113475, - 38.89198671894936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07362" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02785508964458, - 38.892193891046944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07363" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02762717275141, - 38.89196901514472, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07364" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00931098896494, - 38.87921491696026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H07365" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00792679835567, - 38.96168838868454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H07366" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00882340847184, - 38.96105161203931, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07367" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02380879400752, - 38.886539102342, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H07369" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95050953117146, - 38.873211155001464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07370" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97784390927255, - 38.89838238129811, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H07371" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97778232687293, - 38.8978277788175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07372" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97763497622866, - 38.898936508822565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H07373" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02345871272976, - 38.887445911617895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07375" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00926191581291, - 38.870865559320144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H07376" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9705466305446, - 38.915511376550384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07377" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00829882753979, - 38.88512332393778, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07812" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.010037273082, - 38.88511783650101, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07813" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98299423988234, - 38.8513928821244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07814" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98139905696112, - 38.85146427392455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/02/07

Report Problem", - "NAME": "H07815" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98436377749722, - 38.851974964332385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H07816" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06036244463759, - 38.92284485292878, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/10/07

Report Problem", - "NAME": "H07817" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00925396806588, - 38.88511078456666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07818" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01082520137022, - 38.8859689320723, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07819" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06743021004122, - 38.96580750633269, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07820" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02333500914509, - 38.945262327599174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/28/08

Report Problem", - "NAME": "H07821" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05595884182088, - 38.90012345835988, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H07822" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01766589212484, - 38.87222067037575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07823" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98445260119188, - 38.93094021732408, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H07824" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00665768488938, - 38.900347943841645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H07825" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06788693269378, - 38.906685082759836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/15/07

Report Problem", - "NAME": "H07826" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98940049754484, - 38.949367330114825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07827" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00428361044698, - 38.95959448378412, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07828" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99502639156024, - 38.93050889096717, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H07829" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03936084651036, - 38.99134976553878, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H07830" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05771518043335, - 38.95316078481239, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy, K81D

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07831" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98611011722467, - 38.90222659512454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07832" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09328228032055, - 38.938591965554785, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/26/07

Report Problem", - "NAME": "H07833" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93273344655442, - 38.88163480354615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07834" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07270935805565, - 38.970468523916345, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H07835" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03776997920576, - 38.92315260424226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 10/16/06

Report Problem", - "NAME": "H07836" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03867857225319, - 38.941932344447345, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H07837" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01830071987415, - 38.88452667688121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07838" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04454491329965, - 38.9456414538869, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, UNKNOWN

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H07839" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02177149392207, - 38.881114029161814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07840" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02004418334263, - 38.88134952938589, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07841" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93248096639293, - 38.88276431887421, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/18/08

Report Problem", - "NAME": "H07842" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00918852714993, - 38.88235576454363, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07844" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97206170668471, - 38.91342222021708, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07845" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99625799472017, - 38.87945192364907, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/05/06

Report Problem", - "NAME": "H07846" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99841081003788, - 38.832717571741746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H07847" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9963243043215, - 38.82517306037714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06447" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9995304864059, - 38.95591449763924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06448" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0160062209351, - 38.97295330748421, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06451" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00255576232554, - 38.95669546905703, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06452" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08395272345864, - 38.94402240957244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H06453" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0034081284013, - 38.95615570822822, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H06454" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99619304064757, - 38.95462273246034, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06455" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91846497136584, - 38.88986413421935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06456" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91770324035967, - 38.89207103964668, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/07

Report Problem", - "NAME": "H06457" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92050698962676, - 38.8896401070975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06458" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91850117890932, - 38.88695578580477, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06461" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92034881451684, - 38.88853236505423, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06462" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99308457652555, - 38.95458937644197, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06466" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04574062857647, - 38.91397363799839, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H06467" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99470559737202, - 38.95458836207815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06468" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09691311326478, - 38.93097133599927, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06469" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97530820249524, - 38.84672567041775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06470" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97490026413797, - 38.868958455730656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H06471" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01562281186364, - 38.91508468000044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H06472" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92223478019082, - 38.88749401469716, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06473" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98212791287683, - 38.87834584494729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/07/06

Report Problem", - "NAME": "H06474" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08433487266956, - 38.93983558472638, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06475" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08538363866316, - 38.93998172162816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06476" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0850377212599, - 38.94069364712121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/14/07

Report Problem", - "NAME": "H06477" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0583610949476, - 38.92471649247591, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H06478" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95872191496316, - 38.87003664107611, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06479" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9737771242671, - 38.84687694858346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06480" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97695557469099, - 38.84654202785491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/25/07

Report Problem", - "NAME": "H06481" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00204359595887, - 38.95911800755165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H06482" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00122056940498, - 38.9588904434059, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06483" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97008413065218, - 38.926762674020075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06484" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00343822568875, - 38.89222276344097, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H06485" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98372679465297, - 38.867062262925614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06486" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00648724533183, - 38.85325258725298, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06487" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00717190165935, - 38.96833554239617, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06488" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01964243886209, - 38.93029224580981, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H06916" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02158505873793, - 38.929979585111354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06917" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0215817437073, - 38.92904840573736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06918" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92986964040844, - 38.883153320736085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06919" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93100726507458, - 38.88331737440409, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06920" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02064868456085, - 38.927567058325636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H06921" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03493547813184, - 38.930996926259304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H06922" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06992232888156, - 38.91855824442158, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H06923" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92181478852825, - 38.89570943557277, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06924" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03411727054059, - 38.9733074764901, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06925" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93384257741761, - 38.890621452199134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06926" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05942323667135, - 38.93421465431748, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H06927" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04191154650579, - 38.994395190684806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06928" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95498377859809, - 38.86151564320145, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H06929" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08950568737377, - 38.91491630083296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H06930" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08879060316153, - 38.91508145576154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H06931" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05232545414204, - 38.934534247823116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/10/06

Report Problem", - "NAME": "H06932" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0938246535971, - 38.928670880702796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06933" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00898722427414, - 38.886555002027116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H06934" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92552813657788, - 38.882575150284744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06935" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09929866359468, - 38.94303676509001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06937" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93998868767575, - 38.91246026526381, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06938" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93867579625896, - 38.911861609933425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 12/28/07

Report Problem", - "NAME": "H06939" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02822647912558, - 38.96011392235304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06940" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98421121856971, - 38.93194959273384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06941" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93744237833668, - 38.880254515601784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06942" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92759163468226, - 38.89842460526843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/05/07

Report Problem", - "NAME": "H06943" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97739999711641, - 38.92445505382356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H06944" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99838069273713, - 38.89820737574346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06945" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98377964562911, - 38.92214121834334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H06946" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03502432212396, - 38.962185216538025, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06947" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96062208914762, - 38.8692708169922, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06948" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93769124525946, - 38.89596496525098, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06949" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0010194459706, - 38.8267402093052, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06950" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94896904881244, - 38.871205725811464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06951" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9720106215178, - 38.91549331435399, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07378" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02256505126924, - 38.88637850461337, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07379" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02324738863086, - 38.88637426297682, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07380" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99016298111175, - 38.89536313147431, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H07381" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99031247405496, - 38.89625968350196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H07382" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9907489650503, - 38.83235346327543, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H07383" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95923561316053, - 38.86279675180596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07384" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00869900764677, - 38.89140123292308, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07385" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01047483178928, - 38.889314225282924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07386" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0086958727219, - 38.89140423294449, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H07387" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00862872610426, - 38.88823448811311, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07388" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00862540697659, - 38.8882381637762, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07389" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99965400989588, - 38.86201525233027, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 12/19/07

Report Problem", - "NAME": "H07390" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96488309635455, - 38.87387423637057, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07391" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01998219940283, - 38.88735268178771, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H07392" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98404873624094, - 38.86307440890552, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H07393" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9780067069492, - 38.90256948782962, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H07394" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97800693630485, - 38.90362040241758, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07395" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95149439379644, - 38.90127230260149, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H07396" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97635823330886, - 38.90569377584452, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/10/07

Report Problem", - "NAME": "H07397" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97671468912473, - 38.90294310217873, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/27/07

Report Problem", - "NAME": "H07398" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00920357020638, - 38.90480246529546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/29/07

Report Problem", - "NAME": "H07399" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00885304021857, - 38.906541491158926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07400" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00887512558583, - 38.90844974550422, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/07/08

Report Problem", - "NAME": "H07401" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00923958829911, - 38.90552679686227, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H07402" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00887017082094, - 38.9077317447217, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07403" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0092808096706, - 38.90786818926415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07404" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04447671283583, - 38.91550002985804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H07405" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96768635817297, - 38.86960370214958, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/10/08

Report Problem", - "NAME": "H07406" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96767823483512, - 38.86843204837949, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H07407" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00070857753023, - 38.86199491869393, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H07408" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03747415366104, - 38.918067589882845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H07409" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92602909937159, - 38.884742490282626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07411" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9238507841437, - 38.8843195069313, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07412" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98594800848531, - 38.85034603550454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H07848" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05290796512216, - 38.925624667718154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/14/06

Report Problem", - "NAME": "H07849" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07540860735465, - 38.949573363198404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H07850" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0077153522999, - 38.90639261879274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07852" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04414961176225, - 38.909039525950995, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07853" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99436444025051, - 38.826706962554184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H07854" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00065591240252, - 38.91990562041026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H07855" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02205062500774, - 38.887764298801066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07856" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0526197535387, - 38.898156322778675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H07857" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0662884505694, - 38.971337491236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H07858" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05252470264118, - 38.897556768885565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H07859" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10290292137577, - 38.930229777114825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H07860" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99337856787909, - 38.82748258498991, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/19/07

Report Problem", - "NAME": "H07861" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98569205940727, - 38.833474785503725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07862" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99522632422931, - 38.82602436617305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/21/07

Report Problem", - "NAME": "H07863" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03017195431408, - 38.95975453853187, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H07864" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06225952363265, - 38.94320213313865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/19/06

Report Problem", - "NAME": "H07865" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02566035874844, - 38.88295559883774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H07866" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02631492721297, - 38.88477947989644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H07867" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02561315135392, - 38.88475583575133, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07868" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02577593649214, - 38.883499733922086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07869" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02619484318929, - 38.883405223837116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07870" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02431815449141, - 38.88296239907488, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H07871" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05203321111429, - 38.92467207946045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/02/07

Report Problem", - "NAME": "H07872" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02580182988397, - 38.886005283847766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/28/07

Report Problem", - "NAME": "H07873" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.015200697957, - 38.872180632616704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07874" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97210640348297, - 38.92929989698902, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H07875" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96626492175632, - 38.926387951043914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07876" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.968149734719, - 38.9277700670659, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07877" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96860244533637, - 38.92859304485643, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07878" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97151990766324, - 38.93109057132295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07879" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04857480353088, - 38.911080303773396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/01/07

Report Problem", - "NAME": "H07880" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06790376094129, - 38.90767343303258, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/15/07

Report Problem", - "NAME": "H07881" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07132303600713, - 38.957023479419924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07882" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08683836022527, - 38.94122595662857, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/26/07

Report Problem", - "NAME": "H06411" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99756873306923, - 38.95479164712626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06412" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92788669890638, - 38.88993374987981, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/26/07

Report Problem", - "NAME": "H06413" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96791051099046, - 38.923390707481786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06414" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00773456528148, - 38.81968157461506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06415" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00713999550366, - 38.821944776314936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06416" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00705047874656, - 38.82048374190161, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06417" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91360021451412, - 38.889917353913354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06418" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97174732588093, - 38.92062548537049, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/11/08

Report Problem", - "NAME": "H06419" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10639501715012, - 38.92932789067318, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06420" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96153600806343, - 38.86557201607332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06422" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92483908063348, - 38.88964277679233, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H06423" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92300169281533, - 38.88993334339456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06424" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0416231474056, - 38.993135776693364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06425" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08694628283081, - 38.94021591145779, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/21/07

Report Problem", - "NAME": "H06426" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99462262055135, - 38.829372967625396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06427" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92458257666763, - 38.88986487516813, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06428" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91765868460706, - 38.88950798089341, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06429" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99657988162654, - 38.83550807372832, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06430" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91082475018672, - 38.89285377339497, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06431" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91110909801176, - 38.892012932211614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06432" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99856289867849, - 38.955633891328, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06433" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94160384950266, - 38.87008790806052, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/27/07

Report Problem", - "NAME": "H06434" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9986870199681, - 38.954153690590985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/21/07

Report Problem", - "NAME": "H06435" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97644168961469, - 38.84520790112694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06436" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9925421124516, - 38.94184486450241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06437" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97415640532023, - 38.84545124908119, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06438" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99175041462823, - 38.8411274132506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H06439" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98531691857632, - 38.86128333249696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06440" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98575726491512, - 38.86243383410268, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06441" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00897148354399, - 38.954324564868124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06442" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00560326134706, - 38.82178048255727, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06443" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00541823829477, - 38.820382132395096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06444" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97400629735824, - 38.84396117409836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06445" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03286062760037, - 38.897178946827985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06446" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1017552271079, - 38.92965448406576, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06952" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10259679255353, - 38.9291434722956, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06953" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00338175553144, - 38.87934082513986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H06954" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00345463349966, - 38.88042332524441, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/01/08

Report Problem", - "NAME": "H06955" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97720895839207, - 38.94064721928847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06956" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98556796112138, - 38.89944858625816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06957" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99627292134048, - 38.89817018603768, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06958" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03115732724314, - 38.96182514299751, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06959" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02999061288051, - 38.9616717852718, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06960" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0661075125801, - 38.90526358540482, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06961" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06010384333933, - 38.905100479983815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H06962" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05908587798966, - 38.90510164783787, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H06963" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06523188111883, - 38.90525056505461, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/26/07

Report Problem", - "NAME": "H06964" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00368841244952, - 38.95298571782302, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06965" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96909341708202, - 38.87272407181803, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06966" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99363869562072, - 38.843716631117545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06967" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93225284760618, - 38.896173688569974, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06968" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02592147669041, - 38.91572090948699, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H06969" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02792098507723, - 38.91227058041637, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H06970" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92972891587851, - 38.898447206222606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06971" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08734832988705, - 38.936294128063686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H06972" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99368676911035, - 38.895772526019954, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H06973" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09625834931724, - 38.945468591612475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H06974" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00915681333376, - 38.830027611670445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06975" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93711222287227, - 38.91120534991192, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 01/03/08

Report Problem", - "NAME": "H06976" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93793312400777, - 38.9130081506638, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06977" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9368172494712, - 38.91197466531144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H06978" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03222205275104, - 38.92350095987291, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06979" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05752098331406, - 38.96079725785688, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06980" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06605316759736, - 38.960942664582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/12/07

Report Problem", - "NAME": "H06981" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05632422330982, - 38.96083973787946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06982" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98417076668625, - 38.89991512838244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06983" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98806538713458, - 38.898135485163984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06984" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9911611748645, - 38.95669336123746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06985" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94449869531007, - 38.890930088276136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06986" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92632938766549, - 38.88338365683179, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07413" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96862657910718, - 38.86385943888858, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07414" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99026975297478, - 38.925416381971466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07415" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06014937442826, - 38.94654352816389, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07416" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06225246121589, - 38.94679193854353, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07417" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98772872958861, - 38.91078386915941, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H07418" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00051212805226, - 38.876662479468, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07419" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97352733206057, - 38.85535999977145, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07420" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01008000518348, - 38.82968332214097, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07421" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9445063059086, - 38.889977870578285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07423" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09514643003492, - 38.94309483579863, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H07424" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92624113029149, - 38.88405893290013, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H07425" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98282968371099, - 38.88597101830189, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 04/06/06

Report Problem", - "NAME": "H07426" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02203506364303, - 38.88656688995685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07427" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03968085439364, - 38.90029132604644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H07428" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01511110315764, - 38.88519652800059, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07429" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01534670805299, - 38.885760250818294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H07430" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92326426360978, - 38.895863890300376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07431" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04995342455808, - 38.903792734900286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H07432" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02202100457184, - 38.901363930420096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07433" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0220115950943, - 38.9081187090952, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07434" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02200605938337, - 38.90489990122216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07435" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02180465098186, - 38.900195253729066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07436" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02181684851732, - 38.90626615202735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H07437" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01224432053385, - 38.88624380878003, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H07438" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03359572823398, - 38.90816929985527, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07439" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02201799698209, - 38.90316099873112, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07440" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0218189139256, - 38.90397254454837, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/07/08

Report Problem", - "NAME": "H07441" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02181922453205, - 38.90189741610248, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07442" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02201064222825, - 38.901967230984845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07443" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03776977029426, - 38.90719054739083, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/26/07

Report Problem", - "NAME": "H07444" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00927240504991, - 38.91549818139271, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07445" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00928308223466, - 38.914876218161965, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07446" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00877638181386, - 38.91806332394905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H07447" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00876146325494, - 38.916771260298475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07448" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04750411240195, - 38.90516940396755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07884" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02581383360821, - 38.8866568843909, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07885" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02615175350172, - 38.88665560209699, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07886" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02616242912586, - 38.88600236599295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07887" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02124955130948, - 38.87761921174285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/28/08

Report Problem", - "NAME": "H07888" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99857922853874, - 38.841949167495265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07889" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02277696705843, - 38.894859703232484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07890" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10521583674903, - 38.92865147874046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H07891" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02095840918759, - 38.89485575568156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07892" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00024455167912, - 38.82217857526091, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/06/07

Report Problem", - "NAME": "H07893" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02415874532174, - 38.89044881030504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H07894" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02412524303273, - 38.89196544886698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07895" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0240496166839, - 38.88985017228636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H07896" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98065146999187, - 38.86845278231885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07898" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02245902647606, - 38.88744929708282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07901" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02080869508427, - 38.886765362295634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/22/07

Report Problem", - "NAME": "H07902" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0217171559744, - 38.887447978017185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H07903" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96881586516558, - 38.92333364164194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07905" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98661696338365, - 38.89605588268407, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07906" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0138799955668, - 38.813435513840034, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H07907" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01258659060446, - 38.91117307700959, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07908" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00614832911347, - 38.892018729736456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07909" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02167890682476, - 38.87935053691836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07910" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96931869991654, - 38.92444437443467, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07911" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99341733846948, - 38.86014789223935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H07912" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93770853696317, - 38.90284266030697, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07913" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04260900694922, - 38.910659464776614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H07915" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03331918426504, - 38.95277441444272, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H07916" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03352030941684, - 38.95415965754698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H07917" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99489749411727, - 38.835303637441534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H07918" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01980959849544, - 38.88342038130411, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07920" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01981900895566, - 38.88406309191132, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07921" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9436431243427, - 38.88494669135117, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07922" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04163967723093, - 38.90736462479426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07923" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07725788174332, - 38.95474298596072, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06489" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00028739141594, - 38.848327792919605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06490" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92616184945268, - 38.890715293032855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06491" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9753159690198, - 38.9224451732559, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H06492" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99031734024099, - 38.94448902978518, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06493" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99030994721933, - 38.94363182781952, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06494" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05825585510728, - 38.92635757229419, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H06495" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04652667599123, - 38.94164240797303, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H06496" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94218898396095, - 38.90217811973996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darily

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06497" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05968278999548, - 38.952731264454215, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06498" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95063597597994, - 38.897159842421225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06499" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93591157539885, - 38.89030796115112, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06500" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93590711364858, - 38.89197701238156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06501" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91785789979404, - 38.89088725875616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06502" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91465669938479, - 38.89079910490493, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H06503" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03522198549426, - 38.988337678909495, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H06504" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96383970105636, - 38.924163333461784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H06505" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9576964210263, - 38.92000902871361, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06506" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95628174702554, - 38.91906579556323, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06507" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9881385232493, - 38.954412336166556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06508" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99034002312658, - 38.95484302582045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06509" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98932040426332, - 38.955357525285436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06510" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06756779303588, - 38.91558434835727, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H06511" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03791854932126, - 38.991171807524985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06512" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02410448849469, - 38.969971183317014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H06513" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02667759581159, - 38.978057548616206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H06514" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10797354109583, - 38.935709389750265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06515" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04088594881263, - 38.99259359003843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H06516" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96223775778958, - 38.865705803858894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06519" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95301544902972, - 38.86612948299471, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H06520" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92285090576733, - 38.890782814936465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06521" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97981826940892, - 38.870653169794814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06522" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02798289407815, - 38.901494095447674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06523" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00572903369728, - 38.83210742498885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06524" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00448355760875, - 38.94156474153692, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06525" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05606924329489, - 38.96114651049311, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06987" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0162519783485, - 38.88122228961411, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/02/07

Report Problem", - "NAME": "H06988" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97505727489293, - 38.91436977328595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H06989" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01765801769707, - 38.880402177956135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H06990" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97247311061375, - 38.91754342327378, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06991" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02950943823365, - 38.94724034870919, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H06992" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9354711764542, - 38.88140094999921, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H06993" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99382187716199, - 38.8962398601898, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06994" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01193346336534, - 38.967273522995576, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H06995" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02067193214236, - 38.92791736047882, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/23/06

Report Problem", - "NAME": "H06996" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97735515863302, - 38.944106349182775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06997" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02134675927545, - 38.937825752192786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H06998" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02011530125887, - 38.93186589863517, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/05/06

Report Problem", - "NAME": "H06999" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0192850435997, - 38.93593462033714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07000" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99837624703336, - 38.83776010022164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07001" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01873346617424, - 38.931990235718, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H07002" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01952199171801, - 38.934141848137195, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07003" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01912682623846, - 38.93892398642003, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H07004" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01929445556377, - 38.935253483242214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07005" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02158265043997, - 38.93871203501573, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H07006" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02051081021706, - 38.93333529157292, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H07007" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01917352272751, - 38.942459138336176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H07008" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01912559332496, - 38.93359704650033, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07009" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04374823318042, - 38.920642971229206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H07010" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02134621464103, - 38.93639191968371, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, DRY WELL

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07011" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02094613188794, - 38.93482078248051, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H07012" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0985620903297, - 38.94388257335056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Centurion

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H07013" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0976519107093, - 38.944001453929395, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/24/08

Report Problem", - "NAME": "H07014" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00699942023506, - 38.892041409959404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07015" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93430973525066, - 38.885859399955486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07016" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02328546307889, - 38.93748958881003, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07017" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95969116783435, - 38.91702032883963, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07018" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96125260077652, - 38.9170967702412, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07019" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02036885504953, - 38.94181423999462, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H07020" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00921986286824, - 38.9181988291148, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07449" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00877571293505, - 38.918062720441256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07450" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00875880106659, - 38.91678307042007, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07451" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0088252011388, - 38.91477439640563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07452" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03078416236093, - 38.920240010252606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H07453" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9193042667873, - 38.88993501844188, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/21/08

Report Problem", - "NAME": "H07454" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95763540449762, - 38.91720066907016, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07455" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09361239005848, - 38.94320820055547, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H07456" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05398219670032, - 38.89889699028136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H07457" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98315240981138, - 38.84267407718769, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07458" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98268059050783, - 38.84164461285684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07459" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03177211577905, - 38.886710519867904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07460" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0136034782694, - 38.829498723497665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07461" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93904850503645, - 38.889953025563734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07462" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01439181712323, - 38.95755944940955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07463" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05036330371277, - 38.89224201785637, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H07464" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9611819660535, - 38.87465600281075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07465" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94450700114177, - 38.89172185623164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07466" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95707015355423, - 38.872226862563544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07467" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92936742682755, - 38.89209758363686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07468" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96127880578582, - 38.87747564523609, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07470" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04297437622263, - 38.993552232490885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H07471" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93909054247733, - 38.892693764316526, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07472" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9716480037056, - 38.922078585022724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/28/07

Report Problem", - "NAME": "H07473" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03822905659493, - 38.983151932924564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H07474" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02343360014387, - 38.97950365803748, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H07475" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97716561778017, - 38.89279867636867, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/07/06

Report Problem", - "NAME": "H07476" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00398878817452, - 38.95451083472198, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07477" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92651167787781, - 38.89276973835049, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07478" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01528035227209, - 38.88419382791563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07479" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01876919457493, - 38.87633862491311, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07480" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0210759447468, - 38.894201159527846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07481" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01864675272685, - 38.8747244027887, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07482" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0590056325616, - 38.94084564872903, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennnedy

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H07483" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99965052015793, - 38.861720046462345, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/18/07

Report Problem", - "NAME": "H07484" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02205400529027, - 38.8829641097241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07924" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02385896355244, - 38.89600808095506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H07925" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0238678108412, - 38.89671409170843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H07926" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98045364055163, - 38.94326049884007, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H07927" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04139487580589, - 38.90637474836192, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H07928" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01735675707307, - 38.881222337849344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/16/07

Report Problem", - "NAME": "H07929" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02588685858001, - 38.96857369630835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H07930" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01373275033698, - 38.89780426636046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07931" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97232428373464, - 38.86880160477246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H07932" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01355965696004, - 38.89669742001146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07933" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97367537173753, - 38.868900108816895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H07934" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0447964213905, - 38.893594279841516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H07935" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99624728954058, - 38.88030133344313, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 11/04/06

Report Problem", - "NAME": "H07936" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01612975315861, - 38.876578849809384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07937" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92748441403334, - 38.89287839268856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07938" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03251785223235, - 38.9254314327115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07939" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0321158674721, - 38.924656134904616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07940" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01531411831252, - 38.88331561411112, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07941" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92336388826358, - 38.90017414297687, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H07942" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09110452368616, - 38.95651193299512, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07943" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03260578450856, - 38.92742051632777, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07944" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03223979431193, - 38.9258594948786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H07945" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9948281618923, - 38.95099733804596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07946" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02029059331193, - 38.875762202455405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07947" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00367588903994, - 38.96383095104751, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H07948" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9869965980431, - 38.85964119754781, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H07949" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01624787745084, - 38.902742037298076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07950" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08869792606939, - 38.91903604098807, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07951" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02396605231161, - 38.893874202124465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07952" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01103244471595, - 38.90457599010864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/01/07

Report Problem", - "NAME": "H07953" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02040001452612, - 38.93779555429568, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/05/07

Report Problem", - "NAME": "H07954" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02134002210782, - 38.939902903854346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07955" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01222965737209, - 38.90479049488283, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07956" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01224855341788, - 38.91593600056736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H07957" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07721748335199, - 38.93345800499922, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06526" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09894925603915, - 38.92575299465459, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06527" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95876618764156, - 38.86802238568965, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06528" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03840838976555, - 38.99182145423093, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06529" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03898405280461, - 38.99262210168253, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06530" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10160852995067, - 38.9250025716698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06531" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00193451766445, - 38.84517849851957, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H06532" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09962189800203, - 38.92214123818247, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H06533" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00073182254216, - 38.831021052649234, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 03/07/08

Report Problem", - "NAME": "H06534" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04174287581495, - 38.99148379252362, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06535" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96859949384928, - 38.865238845073264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06536" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97080932290235, - 38.91723002505121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H06537" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91657282320223, - 38.88986904992909, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06538" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96886999819282, - 38.91717397913174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06539" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06515470111678, - 38.93634517117816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/22/07

Report Problem", - "NAME": "H06540" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99483977402123, - 38.905329801430874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06541" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9944489519022, - 38.905757644083046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06542" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93912598595999, - 38.89669493996138, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06543" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02381686441643, - 38.919347696708975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H06544" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08593476549828, - 38.91380001075514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H06545" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01030701031365, - 38.8948463079967, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H06546" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99257229569044, - 38.947195138488254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06547" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.076819591807, - 38.947947756260206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H06548" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96890161469761, - 38.86957832211967, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06549" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00572608536115, - 38.8311030356256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06550" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9329825764222, - 38.89055516477139, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H06551" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97268893821048, - 38.84572533916201, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06552" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97188645664649, - 38.844301120938916, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H06553" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97286296573763, - 38.84744343360558, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06554" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0225048778306, - 38.89059271611999, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H06555" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0770147489041, - 38.92991599052319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06556" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01159263294112, - 38.96904227158588, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H06557" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00334481761338, - 38.830889717669116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H06558" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07998341493588, - 38.9479649932339, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06559" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99004990742897, - 38.91909028740231, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H06560" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02060330149321, - 38.94113048775644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07021" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98582953879914, - 38.911204172613175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H07022" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98625584121956, - 38.91190356797587, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H07023" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0654449147393, - 38.96199673839912, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07024" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09070276352669, - 38.95215457524894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H07026" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02536723633878, - 38.920701853319024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H07027" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97296629082248, - 38.88466468406594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H07029" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10354674620037, - 38.92847582089967, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H07030" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02532714536176, - 38.92386317053315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H07031" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01131150078882, - 38.95341996785075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07032" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02638132517758, - 38.930846839677955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/25/06

Report Problem", - "NAME": "H07033" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94568083769293, - 38.86474459980602, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07034" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02585749499349, - 38.92701759580693, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07035" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02634256011007, - 38.92871849115306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07036" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02593440991157, - 38.92490482237563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/06/06

Report Problem", - "NAME": "H07037" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02629431183908, - 38.92995209102587, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/25/06

Report Problem", - "NAME": "H07038" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02583105131406, - 38.92571365701877, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07039" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9394556869378, - 38.88026171136533, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07040" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94038029439855, - 38.89301790233104, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07041" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93796464544897, - 38.87070997176365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H07042" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94699250718553, - 38.86365095033626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07043" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9438371694588, - 38.86622229662141, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07044" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9446985421607, - 38.865520952328055, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07045" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96932535513365, - 38.874281829597855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07046" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00646140437084, - 38.91166912505933, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H07047" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00921710000658, - 38.92028658117106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07048" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00888345785944, - 38.92462091589967, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H07049" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01620281476676, - 38.88331531403804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07050" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01707740404841, - 38.88331518943418, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07051" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01389189398566, - 38.88331042293399, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07052" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0145890366043, - 38.88331000462411, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07053" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9400952582351, - 38.90848298321637, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07054" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93896547417108, - 38.908471669554196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07055" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94329154399351, - 38.90566748747477, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H07056" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01454543998229, - 38.905324271557234, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H07057" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99581738136735, - 38.85674578270633, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H07485" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94069594656754, - 38.88989004925468, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07487" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02992657477775, - 38.92767723135113, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H07488" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98138909122179, - 38.84218735323076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/13/07

Report Problem", - "NAME": "H07490" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98544159228483, - 38.840577948111616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07491" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00211112049904, - 38.86075438844818, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H07492" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94154922390052, - 38.889889371324585, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07493" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94244360912218, - 38.89179807752878, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07494" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03328538857521, - 38.90317920426543, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07495" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98426127593997, - 38.834594487921336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/01/07

Report Problem", - "NAME": "H07496" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02201151698797, - 38.910406116741186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07497" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96906246954298, - 38.86808655447621, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H07498" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98677236819651, - 38.83598957895159, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07499" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98655811013855, - 38.832823477688024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07500" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9974929190682, - 38.939489281422944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H07501" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06024466971265, - 38.94097268222592, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 12/20/06

Report Problem", - "NAME": "H07502" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00764142412145, - 38.90862664849224, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07503" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05578154231246, - 38.93060180305019, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant,Mueller

In Service


Last Inspection Date: 04/26/07

Report Problem", - "NAME": "H07504" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0512340218352, - 38.92360021725625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/02/07

Report Problem", - "NAME": "H07505" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96141025255085, - 38.9301589680097, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07506" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06939661267404, - 38.96033231024709, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H07507" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98506395686054, - 38.83407229197827, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07508" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01775120651455, - 38.883171558367586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07509" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02100290703396, - 38.88331271178691, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07510" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0018864033965, - 38.914133618281895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07511" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03435582600682, - 38.9001568610635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07512" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0348872092274, - 38.91913530127127, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H07513" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98720333301587, - 38.92209673691571, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07514" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99228694092861, - 38.92260873858445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07515" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98664190965306, - 38.92449436463466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07516" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98696476401386, - 38.923988511934226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07517" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99333623171619, - 38.92227675639505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H07518" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98995621718983, - 38.92333794722294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07519" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98781983232017, - 38.92398945096424, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/05/07

Report Problem", - "NAME": "H07520" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00282861899113, - 38.85750789108447, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07521" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98129632993214, - 38.863423707163925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07958" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03205331587833, - 38.92175468003542, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Muller

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H07959" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9286733672165, - 38.900756977111904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07960" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99330891008296, - 38.912966087654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/05/07

Report Problem", - "NAME": "H07961" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98244921588199, - 38.87888355057267, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/19/06

Report Problem", - "NAME": "H07962" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97718372278936, - 38.89122516062354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/28/06

Report Problem", - "NAME": "H07963" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9771489637263, - 38.89019973066068, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/01/06

Report Problem", - "NAME": "H07964" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99618090254062, - 38.85580872063352, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H07965" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06281180289439, - 38.94974584155491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07966" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93554165325334, - 38.888098633072644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07967" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03889178521771, - 38.9341308732306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H07968" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04141890811663, - 38.93422023217442, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H07969" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04275001885617, - 38.934225752419614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H07970" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04122222301686, - 38.93246390762373, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H07971" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03984996827357, - 38.9342283896436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H07972" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04408508851533, - 38.93423553495599, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H07973" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9757629410183, - 38.89747700604972, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07974" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96016551203775, - 38.89669328903745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07975" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9834941857576, - 38.86565281928153, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H07976" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02157026279619, - 38.87698943913902, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07977" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02353961419217, - 38.8947452809032, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07978" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05802459227196, - 38.950872944786894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07979" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01373422884703, - 38.89728068214012, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H07980" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02642291209831, - 38.8972605746037, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07981" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02756100451121, - 38.89727015778023, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07982" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02738555592565, - 38.88457779731689, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07983" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02055137040394, - 38.874741748613815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07984" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02083446333175, - 38.875383907150834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07985" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05717764283798, - 38.95292591505484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H07986" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05948560223611, - 38.9517057641324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H07987" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0479143837426, - 38.9096993903211, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07988" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05804298470514, - 38.95089125848744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H07989" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91837844798148, - 38.89986321168602, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/29/06

Report Problem", - "NAME": "H07990" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92242589383024, - 38.90313217528559, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/13/06

Report Problem", - "NAME": "H07991" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9612665794444, - 38.883694195910586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 04/03/07

Report Problem", - "NAME": "H06596" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97586111681542, - 38.88775236418858, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/06/06

Report Problem", - "NAME": "H06597" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9893342766315, - 38.95347553749706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06598" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98815288504281, - 38.95324291133274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06599" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97338060761466, - 38.88747089893495, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H06600" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99357837235254, - 38.89363530305947, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06601" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94218058558862, - 38.903465076305174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/30/07

Report Problem", - "NAME": "H06602" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94811367961901, - 38.89917922604904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06603" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9409561189485, - 38.90440921501846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06604" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9359593191026, - 38.90951795636217, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06605" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06358202075745, - 38.95040631739217, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06606" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0056835614632, - 38.89357375108473, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H06607" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98849233603455, - 38.8874758336278, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/09/06

Report Problem", - "NAME": "H06608" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99043359955685, - 38.88753912145234, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/03/06

Report Problem", - "NAME": "H06609" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00598179594421, - 38.909018184825754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/27/08

Report Problem", - "NAME": "H06610" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10249631814436, - 38.940432418633776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06611" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99632546556836, - 38.88765017738371, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/23/06

Report Problem", - "NAME": "H06612" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99609997925823, - 38.88721584911839, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/06/06

Report Problem", - "NAME": "H06613" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05636385401819, - 38.97971610729608, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06614" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97522797171716, - 38.89305993864624, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/06/07

Report Problem", - "NAME": "H06615" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98689771275237, - 38.95288069903672, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06616" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93650321414749, - 38.89753484403575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H06617" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9828546656321, - 38.92456023465083, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06619" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98813257996659, - 38.92455656580424, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H06620" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04242749508843, - 38.99052153337876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06621" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03810444606532, - 38.9929801250602, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06622" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03943474533014, - 38.99385340717039, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06623" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9603153245525, - 38.89342086144566, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06624" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94151022866663, - 38.904695508944975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H06625" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97597306191932, - 38.89674650721517, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H06626" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94047460283964, - 38.905666095238765, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06627" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97606572154815, - 38.89616169420622, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06628" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93741785376862, - 38.90798022923433, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H06629" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93883813344227, - 38.90641062797429, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06630" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9806156663805, - 38.89344552424362, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06631" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01373256841333, - 38.905901688022574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07058" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00948251712136, - 38.90708367221532, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07059" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01962950723264, - 38.90355290046491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/02/07

Report Problem", - "NAME": "H07060" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02086622622208, - 38.903136680373294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07061" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01087744909373, - 38.90683976678106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 11/28/07

Report Problem", - "NAME": "H07062" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01908953226771, - 38.903975878045486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H07063" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94196476012863, - 38.90629370904827, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07064" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94328491439262, - 38.906421933602644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07065" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99310321539645, - 38.858177092598496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H07066" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99322601508506, - 38.8558261980563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H07067" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9453762914611, - 38.884851665558834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H07068" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04998793006257, - 38.895254271688295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H07069" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10234467986926, - 38.94303398477356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 01/14/08

Report Problem", - "NAME": "H07070" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10089793139336, - 38.94311738009003, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H07071" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93153132072348, - 38.892466810048845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07072" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03092325085856, - 38.894594534238394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07073" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00870329748531, - 38.91173151546771, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H07074" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97101290282923, - 38.85958114690573, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H07075" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93729477420432, - 38.87131411407198, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H07076" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95157349962516, - 38.886059793121355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07077" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04891940633051, - 38.89266493493581, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H07078" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99838288135655, - 38.83929133904618, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07079" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98545468967123, - 38.87783297237987, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07081" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10933279625895, - 38.93692742724404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H07082" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01408142276355, - 38.87561936020418, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07083" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98399450997972, - 38.86128793317125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H07084" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06906958177271, - 38.909803430877055, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H07085" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01531163990133, - 38.88019853217063, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H07086" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09499629650102, - 38.944312932788314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/04/08

Report Problem", - "NAME": "H07087" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93706903318301, - 38.87947513411545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07088" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9909764186452, - 38.835915605869246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07089" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93808035237032, - 38.87947572872575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07090" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92799687155481, - 38.88221134508788, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07091" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00351691919143, - 38.91886124302476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07092" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01558136032891, - 38.91466741949089, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07093" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00064424622538, - 38.8807347765613, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/01/06

Report Problem", - "NAME": "H07522" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0122761433547, - 38.880346583236744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07523" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04359161413787, - 38.89340544277975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H07524" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01427581143115, - 38.81454512252718, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H07525" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00689339114835, - 38.96285577058463, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H07526" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01148735152242, - 38.88022469889475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07527" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00217398221044, - 38.87659192462013, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07528" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99484397325296, - 38.8769029359662, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/07/06

Report Problem", - "NAME": "H07529" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0073842868926, - 38.876622258870654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/04/08

Report Problem", - "NAME": "H07530" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9993562867439, - 38.8765900873512, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 11/01/06

Report Problem", - "NAME": "H07531" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00359297410337, - 38.876644931016926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07532" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00438971164047, - 38.876592556001036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07533" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00283423842367, - 38.876583064218515, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07534" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99274567324093, - 38.87662921248858, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/06/06

Report Problem", - "NAME": "H07535" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99361662298084, - 38.8765908425349, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/06/06

Report Problem", - "NAME": "H07536" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00923626379951, - 38.886085105481726, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07537" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95485780336782, - 38.87535109662965, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07538" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02469773523207, - 38.91782975466534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/02/07

Report Problem", - "NAME": "H07539" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95553235800632, - 38.872360917699716, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07540" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04611918328935, - 38.91605742338394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H07541" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0448835911217, - 38.915784420524105, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H07542" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99487654096747, - 38.88332906340564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/13/06

Report Problem", - "NAME": "H07543" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06056332229282, - 38.943284729415765, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 12/19/06

Report Problem", - "NAME": "H07544" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04585122443714, - 38.897412688431686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07545" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01870812053822, - 38.87921542023988, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07546" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01767210440804, - 38.87943758439848, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07547" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01999063127565, - 38.879476640284096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07548" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01080807557877, - 38.8792085722202, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07549" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01961861923418, - 38.876582423659926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07550" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01534029043992, - 38.876335981725674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07551" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0153042530359, - 38.87912690397354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07552" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00995451579122, - 38.8762630835017, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07554" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01622942681595, - 38.87936154676377, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07555" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01384686488369, - 38.876248255409244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07556" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01126102000066, - 38.87633136558022, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07557" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08878642722624, - 38.94401500064822, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/18/05

Report Problem", - "NAME": "H07992" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91748805934091, - 38.89912437788262, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/14/06

Report Problem", - "NAME": "H07993" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92641360645341, - 38.90600093403838, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H07994" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91917924042815, - 38.900474355191186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07995" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92868048849542, - 38.90788612992194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/23/07

Report Problem", - "NAME": "H07996" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01318569746388, - 38.87292325991333, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07997" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05805070129023, - 38.94882143198823, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H07998" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92091372831496, - 38.901814436785116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07999" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01209855826444, - 38.87547564628886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/17/07

Report Problem", - "NAME": "H08000" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92529264376194, - 38.90520203757137, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H08002" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92732558473102, - 38.90682878678369, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/14/07

Report Problem", - "NAME": "H08003" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00123309581588, - 38.904666101559286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08004" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00374803505183, - 38.95365565184983, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H08006" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9678374738352, - 38.91902988378352, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/05/07

Report Problem", - "NAME": "H08007" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01768407170381, - 38.95204638036826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H08008" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0122856540688, - 38.9678472395543, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H08009" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99137576391018, - 38.87845629192337, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 03/10/08

Report Problem", - "NAME": "H08010" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09013119401561, - 38.919209066330524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H08011" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07302869177259, - 38.92117904722717, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08012" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92363582624476, - 38.898915411420504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08013" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91864752837658, - 38.88581113845447, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08014" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01999929640256, - 38.88473430286074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08015" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02168144139392, - 38.88477146858051, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08016" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05519164557496, - 38.93557896454594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/28/06

Report Problem", - "NAME": "H08017" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05277851006446, - 38.93975067751088, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 12/20/06

Report Problem", - "NAME": "H08018" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02689915226902, - 38.89498288997653, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08019" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02717595467065, - 38.89627192306822, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08020" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0268979164257, - 38.89671917164068, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08021" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02717398004032, - 38.89792741751862, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/31/07

Report Problem", - "NAME": "H08022" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00064727977103, - 38.83907849676125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08023" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93706715383539, - 38.90589805818562, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08024" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93492345314412, - 38.90600499302884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08025" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99671624772927, - 38.91148551447028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H08026" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03900244302665, - 38.93061589459772, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H08027" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01491852520418, - 38.97491360650356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06561" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00344260351017, - 38.92227122043882, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/28/07

Report Problem", - "NAME": "H06562" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95584083351743, - 38.873967638179536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06563" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02500979369948, - 38.907287662368866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H06564" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99166774099328, - 38.953675197168735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06565" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99369467023858, - 38.95336507029002, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "null

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06566" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01043193031353, - 38.9700369446018, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06567" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04612016548695, - 38.91511561067109, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H06568" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95179666950737, - 38.8913246156313, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06569" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98459677096885, - 38.85788192097813, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06570" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9864348592707, - 38.85909315133343, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H06571" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00718033428346, - 38.967393856222486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06572" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98532798835325, - 38.89352560192876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06573" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08749680169771, - 38.91920223137802, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06574" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08592632972002, - 38.91928763363257, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06575" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09216532999889, - 38.919094983644875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06576" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08703413110254, - 38.919778470457295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06577" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93285831224202, - 38.901426355074165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H06578" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03567482798069, - 38.90571386368658, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H06579" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93383976683819, - 38.901557617279686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06580" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00121670836077, - 38.95575070399314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06581" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0026173590169, - 38.95603202712855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06582" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06687123167069, - 38.95739354845349, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H06583" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06125153783827, - 38.92744542529373, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H06584" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05952402780379, - 38.92582610915013, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/11/07

Report Problem", - "NAME": "H06585" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98460092005485, - 38.84292248698842, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H06586" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05991700085701, - 38.92727618424961, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H06587" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92995856087197, - 38.89193418536432, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06588" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99324700956572, - 38.834238555708986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06589" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9502192445542, - 38.88997921987883, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06590" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09119421828863, - 38.94041813575338, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/24/08

Report Problem", - "NAME": "H06591" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9243012568637, - 38.883110162498085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06592" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09791486051004, - 38.91590115870607, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06593" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00065244676593, - 38.88771589542851, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 01/31/08

Report Problem", - "NAME": "H06594" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0046406079933, - 38.89358002195662, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H06595" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02301795273003, - 38.912134857543776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07094" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01032131941619, - 38.916224624481316, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07095" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00504139007937, - 38.91796925459802, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07096" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00337813100796, - 38.918656704030155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07097" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00224194976178, - 38.91903234257876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H07098" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0018242978553, - 38.91944954348136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H07099" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00616187620341, - 38.91767737605771, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07100" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01333431209173, - 38.91518744237037, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07101" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00698698429436, - 38.91771597536882, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07102" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02738555977575, - 38.91029261969574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H07103" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0231449567532, - 38.91174207787035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H07104" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05902787350435, - 38.90085007566496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H07105" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02620148126415, - 38.91070936487943, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H07106" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04671266854976, - 38.90385056699683, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H07107" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04498156447787, - 38.90391395347246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H07108" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04181806676706, - 38.897425822597334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H07109" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04361461555273, - 38.89729744508892, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H07110" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04508950778649, - 38.897291687300175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 05/22/07

Report Problem", - "NAME": "H07111" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95946352246295, - 38.86498689414682, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07112" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96730648682933, - 38.92734499314091, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07113" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02527102941058, - 38.979343253396436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H07114" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00086278833724, - 38.83527636908451, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07115" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00049058237661, - 38.840510273641996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07116" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94470346601513, - 38.88113165978272, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07117" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93894171745632, - 38.88907043708943, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07118" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02254306169178, - 38.93895171758112, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07119" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00919378704138, - 38.912443722210924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07120" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00916967518945, - 38.913233791343764, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07121" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0028783514896, - 38.94652178093002, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07122" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01759336468929, - 38.87639200254709, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07123" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00470654071628, - 38.945783691167875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07124" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05528808199452, - 38.97288418536045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07125" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05434479963125, - 38.97287902438951, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07126" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99330682114955, - 38.8569601473773, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H07127" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9613489145072, - 38.88446667414974, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/05/07

Report Problem", - "NAME": "H07558" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96642625185427, - 38.85571694332729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07559" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02506112475884, - 38.917204057777056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H07560" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02546920080194, - 38.92012791073526, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H07561" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02408996017506, - 38.91808311468866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/02/07

Report Problem", - "NAME": "H07562" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98343414891414, - 38.835238748441846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/12/07

Report Problem", - "NAME": "H07563" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97180833578197, - 38.86010562279842, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/29/07

Report Problem", - "NAME": "H07564" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97512507622825, - 38.85654261710817, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H07565" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95857104014284, - 38.87293396071503, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07566" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0073771987624, - 38.88598009187593, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H07567" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01418540078254, - 38.87292582725981, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H07568" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05780509312685, - 38.94109063453305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/20/06

Report Problem", - "NAME": "H07569" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91769226838073, - 38.89702529358061, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H07570" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91769668604739, - 38.89590399812653, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H07571" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91769615567357, - 38.89801235200351, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H07572" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94266104686866, - 38.86937337156766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07573" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01015689619669, - 38.870198727819705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/31/07

Report Problem", - "NAME": "H07574" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96871102885841, - 38.880701264817496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H07575" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01161961828427, - 38.878349949483336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07576" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01343896715305, - 38.877692015466565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07577" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00867559132615, - 38.87922381212902, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07578" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03508706809166, - 38.90010108918067, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07579" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03504792919787, - 38.898973560557216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07580" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0614335473731, - 38.94306875201849, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/22/06

Report Problem", - "NAME": "H07581" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.046572469912, - 38.90613345635938, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H07582" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01774156611317, - 38.88398536830302, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07583" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99826988931275, - 38.8790798071112, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 11/06/06

Report Problem", - "NAME": "H07584" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00077573692529, - 38.87977207617051, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 11/01/06

Report Problem", - "NAME": "H07585" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0019719352658, - 38.88114426502534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/01/06

Report Problem", - "NAME": "H07586" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99944621624009, - 38.87897787965274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 04/11/07

Report Problem", - "NAME": "H07587" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10280517669854, - 38.9279407959665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H07588" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98880241043584, - 38.86788367020796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H07589" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02071616384112, - 38.89410896918894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07590" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99010701528914, - 38.8747485519491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/18/06

Report Problem", - "NAME": "H07591" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96362948185926, - 38.92029800417654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/15/07

Report Problem", - "NAME": "H07592" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02497076695869, - 38.91107545410497, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H08028" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02486678288673, - 38.90970039793379, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H08029" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04827491715417, - 38.92109239790387, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H08030" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01358275659491, - 38.89953358286828, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08031" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95222153156632, - 38.888628295060684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08032" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98084305571352, - 38.8829522433112, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H08033" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07724526905416, - 38.96104291448911, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08034" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00927733798935, - 38.95492659946666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H08035" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06858634131976, - 38.941464775594355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/12/06

Report Problem", - "NAME": "H08036" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04866314323063, - 38.90394445765287, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H08037" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03288520547382, - 38.8983308662706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08038" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03352449764643, - 38.89830554222256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08039" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03386925079425, - 38.898230970651376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08040" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98164580705942, - 38.942614707856166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08041" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96119611565318, - 38.92795932874704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08042" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02619983353765, - 38.884283549218985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08043" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00798478678746, - 38.83540010956732, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H08044" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07000926265907, - 38.96406369591698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08045" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0392754850297, - 38.898968900674156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H08046" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98083713495747, - 38.905770275462906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08047" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95536103646518, - 38.902681570863045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H08049" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9551937740285, - 38.90175366418639, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08050" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95474629179459, - 38.90633995051261, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H08052" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.954824609946, - 38.90426446576569, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H08053" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97250305723863, - 38.85494587078137, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08055" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9734551472341, - 38.85419851762248, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08056" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92649802766421, - 38.896430452092666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08057" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02525545528835, - 38.92986772309871, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08058" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03824380764105, - 38.911075782210325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08059" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03744850554799, - 38.911078859425935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H08061" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94123545574868, - 38.90059929859189, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/08/07

Report Problem", - "NAME": "H08062" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9424387281317, - 38.900576457907114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/08/07

Report Problem", - "NAME": "H08063" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07359707689794, - 38.961049888945915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08064" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97058466083409, - 38.89800548161571, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H08065" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99344666688556, - 38.9499362382747, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H08066" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09820919198437, - 38.931641220192134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06632" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92585924081189, - 38.88541171461339, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06633" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97427168948785, - 38.85082620459908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06634" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9725631524919, - 38.85610922429121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06635" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94411832876546, - 38.90047573117055, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/01/06

Report Problem", - "NAME": "H06636" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0332593761117, - 38.90378941050947, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H06637" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96690054191585, - 38.85980920974811, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06638" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99044017445156, - 38.89206120904355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 04/13/06

Report Problem", - "NAME": "H06639" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98811365200389, - 38.892061662091, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 04/13/06

Report Problem", - "NAME": "H06640" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0998159947323, - 38.94224751335224, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H06641" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1009400873196, - 38.9420709494172, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/09/08

Report Problem", - "NAME": "H06642" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10073907055914, - 38.94075931692487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06643" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94682562434733, - 38.900341590154255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06644" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98207306702139, - 38.887657399416554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H06645" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9788557932541, - 38.88765900531611, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H06646" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98708911737081, - 38.88753820509799, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06647" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98059526918205, - 38.88766049635629, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H06648" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98347934558751, - 38.88770010831467, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H06649" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98534867500489, - 38.8879911391867, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06650" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03214896432846, - 38.9036541816669, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06651" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02893315387732, - 38.90380989392949, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06652" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02976146839815, - 38.90340540898938, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/09/07

Report Problem", - "NAME": "H06653" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93764917306679, - 38.88948522066144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06654" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0305117647332, - 38.90379603384022, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06655" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97290886150944, - 38.8631946268882, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06656" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97170238850582, - 38.86395378622063, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06657" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93492963482089, - 38.88714683758573, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06658" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95720583480187, - 38.918537114523915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06659" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95934829814477, - 38.918491864945544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H06660" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98537348571622, - 38.89206517066875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER

In Service


Last Inspection Date: 12/27/07

Report Problem", - "NAME": "H06661" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00753802672362, - 38.95575475525598, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06662" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9956397540779, - 38.89209414717504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H06663" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98691214500934, - 38.88872879563235, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H06664" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00266920873362, - 38.965617241930524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06665" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04271065725995, - 38.99143433946698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06666" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94706931146355, - 38.89755654960666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H07128" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02338641580138, - 38.92913561933068, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/05/06

Report Problem", - "NAME": "H07129" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03634185868984, - 38.92952303531884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H07130" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95744290126926, - 38.89548949588824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H07131" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98378858812869, - 38.86058538316426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H07133" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02799274007583, - 38.89926321820379, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07134" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06230158840661, - 38.922606177634776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 01/10/07

Report Problem", - "NAME": "H07135" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1086710335078, - 38.93741853746335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H07136" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9821590809367, - 38.89763813749226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07137" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0105660754126, - 38.877640449398264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07138" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05395292919954, - 38.968327450628394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07139" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9908981704769, - 38.91774198095922, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07140" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96327169912612, - 38.87828526981169, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07141" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99597249402497, - 38.90978730178437, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07142" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02882732476392, - 38.89746160417395, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07143" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9823782253395, - 38.92624222371151, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H07144" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05638708627936, - 38.96971155368072, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H07145" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05831805738657, - 38.96971400275113, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H07146" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95073291147202, - 38.89527545031412, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H07147" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9498398849183, - 38.89515566435593, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07148" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0333905257536, - 38.93784614656226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H07149" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02344620965623, - 38.98061124328168, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H07150" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03240518879792, - 38.92874628945823, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H07151" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05467317078839, - 38.90138902988212, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H07152" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97267792893813, - 38.91942871632992, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07153" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9614169665006, - 38.86892063725262, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07154" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9402415941209, - 38.90352574477204, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07155" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9757437988873, - 38.9187857659611, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H07156" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07826058967379, - 38.92695993121221, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H07157" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97389587223684, - 38.88999451381324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/14/06

Report Problem", - "NAME": "H07158" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97518032980332, - 38.88931737298493, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 04/26/06

Report Problem", - "NAME": "H07159" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03510638698909, - 38.90782642144883, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/04/08

Report Problem", - "NAME": "H07160" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9974140417839, - 38.88267151699444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H07161" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99187516363632, - 38.83514128692742, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H07162" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01530654822344, - 38.87671737460202, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07593" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04478054194414, - 38.94333234222084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H07594" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08091640501084, - 38.93419123810554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07595" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93891851512589, - 38.87580859089552, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07597" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02800513525747, - 38.885174563874195, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07598" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02285517021659, - 38.89518831317675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07599" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93839238188482, - 38.870393111297375, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07600" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02304737963892, - 38.894335966770136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H07601" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92621410380156, - 38.88095949844807, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/22/08

Report Problem", - "NAME": "H07602" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92927041832074, - 38.88058494667498, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/18/08

Report Problem", - "NAME": "H07603" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92771985214326, - 38.88847710905287, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07604" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9388785602111, - 38.87872847954836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07605" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93892747115012, - 38.87751675888302, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H07606" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06499242149373, - 38.923937727632065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07607" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97964319006199, - 38.84582105940526, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/29/07

Report Problem", - "NAME": "H07608" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96081324553018, - 38.87200348200796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 09/05/07

Report Problem", - "NAME": "H07609" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.987837512811, - 38.86468084022014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H07610" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02042258229375, - 38.894370686948115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07611" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03165828973412, - 38.91339968756192, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H07612" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04897052266529, - 38.89962534458021, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H07613" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01072739818773, - 38.87665515053187, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07614" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0139860492789, - 38.87668408302811, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07615" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01954994639182, - 38.87633410973487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07616" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01782363110506, - 38.87633704344056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07617" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03183929255972, - 38.892347817003085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07618" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93785580982951, - 38.892712653120334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07619" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05491383122406, - 38.94055577394254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/20/06

Report Problem", - "NAME": "H07620" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93681738612061, - 38.89318208084086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H07621" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06421128315144, - 38.94957473474059, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/24/07

Report Problem", - "NAME": "H07623" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98518276662838, - 38.86934057516383, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07624" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07443286907956, - 38.94785579430204, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H07625" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00717926943237, - 38.90367416704998, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07626" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94059498805436, - 38.89745915516139, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07627" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00688885907205, - 38.91560935591307, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H07628" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98077160350076, - 38.91911350555358, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07629" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05430585808163, - 38.91472255461596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08067" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0973401834681, - 38.932657733251496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08068" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02567644903262, - 38.94073572209535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H08069" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0226263006244, - 38.87871035600972, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08070" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05422237529272, - 38.985183225136325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08071" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.976030747485, - 38.944535347896895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08072" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99807352173826, - 38.95065653649802, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/03/08

Report Problem", - "NAME": "H08073" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99830472107227, - 38.88765253803316, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H08074" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0454619136274, - 38.93206122256313, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 01/01/06

Report Problem", - "NAME": "H08075" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06204489273402, - 38.90347086306426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08076" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92525895122802, - 38.89922099786704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/28/07

Report Problem", - "NAME": "H08077" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09358690214279, - 38.91536564625184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H08078" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05826488919057, - 38.91062544736217, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08079" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00030260667727, - 38.91025256159615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08080" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00607083603087, - 38.82783680987573, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H08081" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05710567996493, - 38.90537943213029, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08083" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01770545989216, - 38.91265707784783, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08084" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00151273583373, - 38.82120253332884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H08085" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05584047114564, - 38.9061775529845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08086" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93719410570526, - 38.9047931800685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08087" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95640859409542, - 38.862540675271426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H08088" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05309169771132, - 38.95128963360767, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08089" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98492219736976, - 38.92456337532836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H08090" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01932205595843, - 38.94104091193039, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08091" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02407486879943, - 38.89892872806242, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H08092" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0241303785301, - 38.92187126057276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H08093" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08275308013201, - 38.950387968192736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H08094" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02451009759346, - 38.887453749216625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08095" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97587556476205, - 38.87208924423228, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08096" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02392745914513, - 38.88768752934951, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08097" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00075636549767, - 38.94736743915042, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H08098" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00369973493692, - 38.91551630019421, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08100" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0058747438556, - 38.91560602416622, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/22/07

Report Problem", - "NAME": "H08101" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00785282832473, - 38.91551729300077, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08102" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07097240657087, - 38.96680710923335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08104" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04256273614506, - 38.99248150648874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06667" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03069775897414, - 38.98654627542858, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H06668" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04126605188107, - 38.995319877069214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/26/07

Report Problem", - "NAME": "H06669" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99950174070769, - 38.95683618697209, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06670" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0002093400514, - 38.9568235762791, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06671" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93671217061106, - 38.909771077680766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06672" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93454780422805, - 38.91204196054723, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06673" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93470767518134, - 38.91083939127652, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H06674" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.933813118248, - 38.91190189037436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/11/07

Report Problem", - "NAME": "H06675" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9336261110621, - 38.89977247158318, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H06676" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9732578324894, - 38.85413185525328, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06677" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97431179441004, - 38.853123039577405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06678" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10161957426138, - 38.928536480910076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, Metropolitan

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06679" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9820851584149, - 38.856303304506994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06680" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9895455724907, - 38.94837209078545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06682" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95306309704921, - 38.860205134593336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06683" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95251682530085, - 38.86095246853403, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06684" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98822712544568, - 38.892814656261, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H06685" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94680672070382, - 38.8976325149737, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06686" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02647244234389, - 38.984322252894245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06687" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04492804856763, - 38.99188325222858, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06688" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05361088106761, - 38.897319400531686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H06689" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95879074026675, - 38.8755308719135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06690" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97247587999698, - 38.84385955934146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06691" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94984160555939, - 38.897807349541374, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06692" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99488331466053, - 38.89189332890175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/13/06

Report Problem", - "NAME": "H06693" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99964764645884, - 38.893016739201016, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H06694" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9982079259249, - 38.894002863118665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H06695" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99834932366409, - 38.89329666314996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H06696" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0006388926788, - 38.894233633470144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H06697" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99937165549699, - 38.894150531334496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H06698" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99176743824871, - 38.88988321166382, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/22/06

Report Problem", - "NAME": "H06699" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9980643425351, - 38.8243380799068, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06700" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99947874869262, - 38.9534082356228, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/09/07

Report Problem", - "NAME": "H06701" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98824195576937, - 38.84185812111377, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H07163" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03117368358609, - 38.89196042936237, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07164" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05220405256068, - 38.90235545879882, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H07165" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0294925574771, - 38.89196592861865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07166" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02887995670005, - 38.89195621751582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07167" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01326188841345, - 38.879223795774905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07168" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03055504938841, - 38.89196672752274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07169" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03009180552627, - 38.89196437948461, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07170" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97941198861014, - 38.90643729943215, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H07171" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98251418665494, - 38.90176447908287, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H07172" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9817361142532, - 38.90240999786607, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 02/28/08

Report Problem", - "NAME": "H07173" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98240197969302, - 38.90139178654355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 02/28/08

Report Problem", - "NAME": "H07174" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97983925922148, - 38.90534581426163, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07175" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98259188025827, - 38.90109005306457, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H07176" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98164912901785, - 38.90300065301632, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H07177" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98106407892175, - 38.904015602851935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07178" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98050995546866, - 38.90473724283739, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H07179" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93080110020489, - 38.906012443251086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/16/07

Report Problem", - "NAME": "H07180" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98856826208481, - 38.83630882114836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07181" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91769787001495, - 38.89467790579543, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 04/18/07

Report Problem", - "NAME": "H07182" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98859846682389, - 38.84089506326246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07183" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00879516794764, - 38.87656455244934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07184" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96960369738015, - 38.93236298038443, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - JUMBO

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H07185" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97615042813459, - 38.92884378257927, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07186" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96643436049604, - 38.933876760413824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H07187" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98060953858959, - 38.926593403050674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H07188" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97894303555384, - 38.92757048971088, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07189" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96423259071118, - 38.9349643913268, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07190" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9818455978275, - 38.926204685610536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H07191" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97368697090285, - 38.93013727963233, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H07192" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96826674125221, - 38.9327289027193, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H07193" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9776634250936, - 38.928470768105825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H07194" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06207591869202, - 38.96091468411529, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H07195" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02147380143175, - 38.931977377941415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H07196" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99545236633146, - 38.938484542889505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H07630" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95210402276778, - 38.871180226678014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07631" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95199232173123, - 38.87207599455846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07632" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01999003423212, - 38.88038972183923, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H07633" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04354145595775, - 38.901841883806725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H07634" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04337663811954, - 38.90145199136814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07635" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98884456597, - 38.91356105365554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/26/07

Report Problem", - "NAME": "H07636" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98132186798092, - 38.91284935351559, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07637" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03292540093577, - 38.931968830501816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H07638" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03255540866178, - 38.93524824479915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H07639" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95483598818235, - 38.88520158341418, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07640" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99725802551747, - 38.89099160767032, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07641" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9213090572142, - 38.88810889235209, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/07/06

Report Problem", - "NAME": "H07642" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08977166508976, - 38.9164012202743, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H07643" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02758904737483, - 38.97353620626832, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H07644" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05131506689666, - 38.89614560562933, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H07645" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9561597373276, - 38.87588020542816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H07646" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0656941045554, - 38.954835210649364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H07647" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05589223170068, - 38.934258104621634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/27/06

Report Problem", - "NAME": "H07648" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98358187957423, - 38.89793182054272, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H07649" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99505211363423, - 38.8860862576991, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H07650" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0676130006429, - 38.91744067858635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H07651" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03384151094251, - 38.902670117519804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H07652" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03329161592923, - 38.90355369776755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H07653" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0366204468569, - 38.992171131374356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H07654" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09547664180998, - 38.934339797263775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H07655" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94248106853148, - 38.90388283391777, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H07656" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99161384287906, - 38.948361564624236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H07658" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05538455131251, - 38.899825267045095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H07659" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9602227189676, - 38.89066513289886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H07660" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96156016250936, - 38.92044061922615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H07661" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98383091381878, - 38.887006124984175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H07662" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97378534478037, - 38.904140079088634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H07665" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99959286638867, - 38.91988141617034, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H07666" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08501170602099, - 38.94560412106222, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/27/07

Report Problem", - "NAME": "H04505" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95654305223472, - 38.89365977221223, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04506" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97518279915471, - 38.94067135426789, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04507" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9367036997258, - 38.87498690843462, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H04508" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97506636774665, - 38.868307444657106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04509" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01529486536687, - 38.89915188524489, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H04510" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01529637967154, - 38.89847224027998, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H04511" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01533375102812, - 38.89620930760246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04512" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93521919567424, - 38.899001646517085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04513" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96913510535339, - 38.93414917719809, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04514" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00958756264887, - 38.90795428427942, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H04515" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03780815859407, - 38.93221727942994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H04516" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91927519665964, - 38.89085197009494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04517" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01610729068243, - 38.89490146805752, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04518" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05741847698862, - 38.977393409005366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/24/07

Report Problem", - "NAME": "H04519" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08284602282293, - 38.9599718717732, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04520" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03661770740952, - 38.988907523757774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04521" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02007001701885, - 38.894850614774384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04522" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01971429770033, - 38.894571334891296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04523" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03228839827646, - 38.94395695096938, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H04524" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00268269482102, - 38.96278459765307, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H04525" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01688847768335, - 38.89470774990744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04526" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01602508217665, - 38.8934854720268, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04527" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01714532668765, - 38.89493451614574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H04528" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0153305961584, - 38.89316888502167, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04529" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06203172561044, - 38.97597182469591, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04530" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97509509310142, - 38.90027565512053, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 12/19/07

Report Problem", - "NAME": "H04531" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99860603254884, - 38.92455568268532, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04532" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10201453566845, - 38.93539452440193, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04533" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10368454157613, - 38.93367181967864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04534" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02951211090763, - 38.91928297852966, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/28/06

Report Problem", - "NAME": "H04535" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01528268522242, - 38.89686144779281, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04536" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01868698817158, - 38.89467790157425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04537" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94924765535072, - 38.86582359293103, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04538" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.037769935006, - 38.91690745588892, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04954" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97142885019181, - 38.86907023603545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H04955" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95763838837377, - 38.860577733899596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04956" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95882258005365, - 38.89204997336262, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H04957" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95746593202843, - 38.862081852095365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/19/07

Report Problem", - "NAME": "H04958" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02851565609653, - 38.969030451248095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04959" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97742027557022, - 38.901312638286754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H04960" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9775592473854, - 38.899270362145124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H04961" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95159432322585, - 38.893370603485906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04962" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08072525467323, - 38.921537190691474, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04963" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0798723336545, - 38.92196653705908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04964" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99158874868232, - 38.899603587189674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04965" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97687584368056, - 38.89772988919319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04966" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04321089564364, - 38.9869617983455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04967" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9765791968336, - 38.89875208095324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H04968" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95249863594898, - 38.886915518824274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04969" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95294440748845, - 38.885778967641656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H04970" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94687304428274, - 38.86573991150237, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04971" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94895799947581, - 38.86653095138741, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04972" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98523261120602, - 38.90962671104989, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H04973" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0065189663599, - 38.94476188473148, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H04974" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9605324786096, - 38.86280134124152, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04975" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99870068629718, - 38.83100646300914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H04976" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99670644890912, - 38.83104835816591, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H04977" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99455718617257, - 38.83294639666921, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H04978" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99478811531402, - 38.83207610879017, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04979" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99482915720249, - 38.831038867237936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/17/07

Report Problem", - "NAME": "H04980" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99065977055142, - 38.8441879237521, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H04981" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00041010664916, - 38.829286411332376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/03/07

Report Problem", - "NAME": "H04982" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00047078157007, - 38.82997545058975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04983" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95945206901574, - 38.89346184133429, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H04984" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9600857698224, - 38.89206721243867, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04985" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95962051959977, - 38.892863239427655, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04986" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99811232082406, - 38.91092906415695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04987" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94442245963786, - 38.88039215372748, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05415" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94419433211398, - 38.879583118379465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05416" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97239877531072, - 38.87283836966293, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. PIPE

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05417" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97141137090834, - 38.8740431408423, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05418" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97030914383717, - 38.87357841971728, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05419" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98384123932715, - 38.90986512187603, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H05420" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98513876257802, - 38.91010779869182, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05421" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96988474780036, - 38.85963495694311, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H05423" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95747243560545, - 38.87568663192944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05424" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0888109638939, - 38.94014533488393, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/03/07

Report Problem", - "NAME": "H05425" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07896421783846, - 38.925390875417, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H05426" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08549318436802, - 38.93247978876778, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H05427" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95128025010533, - 38.890441085234784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H05428" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96591582953405, - 38.8694331020444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H05429" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98787525218218, - 38.94951067469486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05430" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98715846608076, - 38.91112853005006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H05431" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97514720745615, - 38.850887039050214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05432" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03295369554044, - 38.89736340288634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05433" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96964959960575, - 38.85706639625015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05434" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97884871222637, - 38.9056736962068, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05435" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94709887099509, - 38.89194168300198, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/09/07

Report Problem", - "NAME": "H05436" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96590448522879, - 38.8564440694794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05437" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0562741295463, - 38.963957924133425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05438" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.033395806089, - 38.98770536102443, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05439" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0362772955056, - 38.98811779035975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05440" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0343469233192, - 38.98794814504181, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H05441" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99161243571504, - 38.95228137975813, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05442" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99161369383835, - 38.95139350662461, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05443" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97901411267132, - 38.90722812553003, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H05444" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93057299692924, - 38.90933952346587, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05445" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97016135366849, - 38.90190040853298, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H05446" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94569905425418, - 38.866017416139044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05447" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9664628907411, - 38.86022461631165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H05448" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98149892483617, - 38.91436822324133, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H05449" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05738066633528, - 38.96204035802617, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05877" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02672198812148, - 38.87525681603104, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H05878" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00893086017508, - 38.88027864840328, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H05879" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05886760957021, - 38.980647648259456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05880" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04400764865369, - 38.91025665179926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H05881" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06622108215157, - 38.95582770549212, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05882" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05771878541042, - 38.937210291055656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/18/05

Report Problem", - "NAME": "H05883" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05663030077615, - 38.936047221472194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 12/28/06

Report Problem", - "NAME": "H05884" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05454077473271, - 38.93686234924214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/18/05

Report Problem", - "NAME": "H05885" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99864019741487, - 38.82926123447792, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05886" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99745641046236, - 38.82928810495151, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05887" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98368090457289, - 38.8470321579273, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/04/07

Report Problem", - "NAME": "H05888" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94269384953485, - 38.88113131260068, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05889" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94045486329308, - 38.88107126866343, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05890" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98840546659665, - 38.84447382078344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H05891" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98336470998109, - 38.90033808492792, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 09/15/07

Report Problem", - "NAME": "H05893" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05574712210667, - 38.981325253199344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05894" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98582011756288, - 38.9143420367465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H05895" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92949724953007, - 38.89490204921306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05896" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05236333188468, - 38.98061296067537, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05897" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98191136399151, - 38.9480850649206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H05898" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98309125741666, - 38.948789166333206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05899" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98499112236297, - 38.845402463460985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05900" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95878047871143, - 38.876417330625166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05901" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98716607804504, - 38.841079993145634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H05902" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96120563588212, - 38.89072530611001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H05903" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00890315790349, - 38.9691662714932, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H05904" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00448081866452, - 38.94221659941282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05905" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00898844723822, - 38.969820695570306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05906" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00592802149238, - 38.942171142216594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H05907" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92343376407493, - 38.887454359169745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05908" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10866537092956, - 38.937139015092185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05909" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0318620165613, - 38.96689655251302, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05910" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04499151384205, - 38.91190145248213, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05911" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95231636309134, - 38.86204558560375, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04468" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95625781226883, - 38.86059043119061, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04469" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95443400600354, - 38.86075983068309, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H04470" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06302317020764, - 38.93634546611562, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/30/05

Report Problem", - "NAME": "H04471" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03364771156913, - 38.96997144820077, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04472" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91519527312151, - 38.8898684452779, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H04473" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03369950263738, - 38.9064308841637, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04474" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03346881822355, - 38.906046293973915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04475" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98455836066543, - 38.91144827267494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H04476" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05762266448413, - 38.97592050825982, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 08/10/05

Report Problem", - "NAME": "H04477" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06484990255025, - 38.97386868439315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04478" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09459919171896, - 38.94439128461937, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/19/08

Report Problem", - "NAME": "H04479" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03442754185579, - 38.906317130673486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04480" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08176831929555, - 38.94975852306526, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04481" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03461015845141, - 38.96679860848505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04482" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0162968995522, - 38.96138773597636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H04483" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02799037079716, - 38.90271471681653, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04484" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02851545987697, - 38.96903032518056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04485" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06992437653813, - 38.94616720989705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/23/07

Report Problem", - "NAME": "H04486" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03469240711132, - 38.966179582504225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04487" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97632962235454, - 38.90502070216662, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H04491" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0061758185045, - 38.837663683795775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04492" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03972495423868, - 38.938451513701864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H04493" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05844219050198, - 38.97607782669315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04494" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02015825537079, - 38.978263448788546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H04495" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01261704659235, - 38.93355893336584, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04496" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00595518369728, - 38.92639592030899, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/26/07

Report Problem", - "NAME": "H04497" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03139045830304, - 38.96832632434839, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04498" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06795762031446, - 38.962133518683494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04499" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97682805764099, - 38.92009805781247, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H04500" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97774151389005, - 38.91927053232404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04501" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97089137062612, - 38.925524117337886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04502" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09248884383969, - 38.944055928231755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H04503" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96808343928033, - 38.87488510456729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04504" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9501976712504, - 38.89185527670701, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H04988" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05740504133091, - 38.96879537961942, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04989" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05690530712651, - 38.967334919084706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04990" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06706735726398, - 38.914759905473645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/28/07

Report Problem", - "NAME": "H04991" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03573820275865, - 38.898602017775055, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H04992" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05717434172206, - 38.98284093566841, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04993" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00746630807164, - 38.827846881484916, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04994" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00675272397862, - 38.82691515204219, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04995" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96789522660588, - 38.86451209794541, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H04996" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04408173399972, - 38.93802545390631, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H04997" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00101105172736, - 38.8479719285518, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04998" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0080961753302, - 38.91391932397774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H04999" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03234902990685, - 38.943631068478105, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H05000" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02606052471145, - 38.94301346401148, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H05001" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05611670776105, - 38.96759030558905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05002" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01774736621778, - 38.88612783101672, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H05003" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94628259926158, - 38.867838367166144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05004" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95872952250073, - 38.894223326987415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, USP

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H05005" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08199239046205, - 38.92010320964475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H05006" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98665072304348, - 38.875997474552044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H05007" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0007649709477, - 38.8989641137893, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H05008" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08035598957918, - 38.94329651808345, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05009" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00778057749709, - 38.95663694563501, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05010" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95737387281919, - 38.89634168917012, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H05011" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94935583323286, - 38.86279905532669, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05012" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9493118132755, - 38.861995188010155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/30/07

Report Problem", - "NAME": "H05013" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94810462469599, - 38.862929749567634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05014" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92573217709304, - 38.888725268143325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H05015" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00378935518785, - 38.94444814746786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05016" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95873679521195, - 38.85544184778508, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05017" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95632262760772, - 38.88539765774176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05018" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.013751640455, - 38.86740455536052, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05019" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01374002562615, - 38.86962053501322, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05020" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01373952713539, - 38.8708619383729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05021" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94572859198435, - 38.867374547179196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05450" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0080843981899, - 38.96575684595789, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05451" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92908147085333, - 38.87853815209767, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05452" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08676262875414, - 38.90773519732001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05453" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00304861681786, - 38.942972044474814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05454" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9710168513011, - 38.86208656965696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05455" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0525950951507, - 38.9783977166296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05456" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92039992813483, - 38.88443601769575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/30/07

Report Problem", - "NAME": "H05457" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00774987251386, - 38.88624695002779, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H05458" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96296106266753, - 38.880172655067256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05459" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96010702524387, - 38.85652863230421, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/03/07

Report Problem", - "NAME": "H05460" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9662578523234, - 38.87374476757092, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05461" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94943102200209, - 38.886418860120045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H05462" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0581065194399, - 38.9649632765295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05463" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97100178978974, - 38.873151964906526, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05464" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04250687819595, - 38.898263820177455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05465" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97872822433058, - 38.90025184338745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H05466" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96231879528543, - 38.87465626705615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05467" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96337657050077, - 38.874653991134956, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05468" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01972369086437, - 38.90970046948859, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05469" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98213572489016, - 38.91204948628484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H05470" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99489040500387, - 38.8402116498363, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05471" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97087082647637, - 38.86955353433788, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/02/07

Report Problem", - "NAME": "H05472" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96469986458378, - 38.86956562380608, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05473" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9775595192457, - 38.869528823835125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H05474" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96092748084953, - 38.87334836665557, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05475" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.922639640045, - 38.8915201999504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05476" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02007291248464, - 38.912556504387986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05477" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.020000900572, - 38.90871248631782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05478" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02009328912031, - 38.911174684688625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05479" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01972444321378, - 38.90729285407107, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H05480" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02000025945296, - 38.90650833325808, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/15/08

Report Problem", - "NAME": "H05481" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95877757076808, - 38.87466835813162, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05482" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01039973341926, - 38.96915598667947, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05483" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0322345569651, - 38.97218473781162, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05912" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03217924586829, - 38.97128920824938, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05913" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99951068047747, - 38.824315312506684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05914" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00172940827434, - 38.84724488502374, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05915" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99843658986222, - 38.82674694162075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H05916" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99978832639101, - 38.82574446233457, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05917" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99884286278379, - 38.8254161250497, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05918" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.035035526915, - 38.97221003807122, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05919" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03360726182474, - 38.972214673101284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05920" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03608325922893, - 38.97221785392148, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05921" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03786074088279, - 38.8977929927947, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H05922" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05418359015695, - 38.94222665722753, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/01/07

Report Problem", - "NAME": "H05923" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00508365485885, - 38.83955913286491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05924" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04228618323036, - 38.9510751853388, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H05925" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04183480223777, - 38.949728808862076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H05926" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05402398637719, - 38.98167506726326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/20/06

Report Problem", - "NAME": "H05927" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0582721154005, - 38.98195930008615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05928" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04672468460491, - 38.8997015652967, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05929" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06758056741153, - 38.95661478150731, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05930" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04660115537602, - 38.89724079135494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H05931" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99602759486328, - 38.85989501773551, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H05933" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98407197411996, - 38.90376975429171, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H05934" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99734390812782, - 38.83410601724103, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05935" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9248936665511, - 38.89502238752707, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05936" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05571137420573, - 38.95077943808594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05937" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02420977546612, - 38.90560348594483, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/25/07

Report Problem", - "NAME": "H05938" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01910040045848, - 38.905598874818324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05939" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02727092529912, - 38.90560644188606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H05940" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9336161211522, - 38.87855889753185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05941" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00344143825373, - 38.920826177353554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05942" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05581898379164, - 38.92016268468825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/10/07

Report Problem", - "NAME": "H05943" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01811280752959, - 38.92948476283356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H05944" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98916273353832, - 38.86258019025154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05945" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00210325452981, - 38.90192618952126, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H05946" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06133971936323, - 38.918426300346006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05947" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09667756841523, - 38.92180859230028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04539" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9781831422131, - 38.89472447271752, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04540" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0272135623196, - 38.914143364447746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04541" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95899006206633, - 38.85654342450508, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H04542" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02663345176936, - 38.97944592406447, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04543" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97109502279811, - 38.937750493672844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04544" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9710962653787, - 38.936250270157906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04545" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98363959153033, - 38.92420523925874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H04546" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98236143859955, - 38.92319361722307, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H04547" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95344548516675, - 38.86904937116085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04548" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01294550710134, - 38.966053410712604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04549" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00421993728946, - 38.84020610015136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04550" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00558960508017, - 38.83842083779641, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04551" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06152500263343, - 38.95189563901555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04552" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00356182364052, - 38.84108978791524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04553" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07191214253295, - 38.916307376897855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H04554" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0289008638822, - 38.904668956389905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04555" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95759948747545, - 38.89210020789515, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04556" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06172900303278, - 38.974461736861244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04557" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10182195815486, - 38.938127424066955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04558" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10050397805239, - 38.93916239323292, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04559" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09413634421344, - 38.94486148554946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/27/07

Report Problem", - "NAME": "H04560" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09415609997177, - 38.945600482518, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/04/07

Report Problem", - "NAME": "H04561" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09926084706531, - 38.94025000932464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/25/08

Report Problem", - "NAME": "H04562" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09842231626308, - 38.94692327645336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H04563" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08143300808412, - 38.92465467877779, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04564" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08040314915684, - 38.92458274875631, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H04565" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08172610155317, - 38.923711464988465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04566" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00852332895758, - 38.94824079874554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04567" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97017022565078, - 38.86124873563855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04568" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97117841507207, - 38.860742274255394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04569" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97242170260776, - 38.86062560921024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04570" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9717152970167, - 38.86132835820676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04571" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9789100728303, - 38.86659355041834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04572" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95326669240247, - 38.871229676459286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H06054" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03608648730275, - 38.96546641908029, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06055" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99791451439145, - 38.910481742611296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H06056" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9255236979852, - 38.89258039620722, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H06057" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00453927684698, - 38.94292090109212, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06058" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09427323290882, - 38.9215427300685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06059" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91723851288903, - 38.88728880266766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06060" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96257705068113, - 38.87105177316388, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06061" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05446446347828, - 38.980964393689995, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H06063" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04814285097343, - 38.98891368947569, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06064" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99161978324591, - 38.94885800217803, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06065" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01627270761252, - 38.89848595421249, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H06066" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0645614985153, - 38.95750909848299, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06067" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02332911250363, - 38.96319848238286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06068" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.921110169987, - 38.88732829004167, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06069" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97416249509429, - 38.8539286035758, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06070" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05419077303019, - 38.97900655669684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H06071" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97126260637947, - 38.85412903898753, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06072" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0752315624423, - 38.90566486565189, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H06073" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95950074013167, - 38.921375690427816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H06074" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03079930585041, - 38.9331692262455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H06075" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98853013540462, - 38.83259545879112, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06076" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95490457174867, - 38.89471281504109, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H06077" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99849754775217, - 38.95693152182779, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06078" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99733925205196, - 38.95719635311464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06079" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99586160890748, - 38.95733626250208, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06080" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99793840925834, - 38.95777908260535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06081" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96809799755391, - 38.85987505231541, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06082" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05976869507656, - 38.981008871324924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H06083" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02608698963667, - 38.90273529100587, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H06084" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08769689462318, - 38.942346703998936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06085" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03472261644147, - 38.96547009301509, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06086" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94485381033545, - 38.886486783862864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06087" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94220207343118, - 38.88646454828485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06088" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94356073568663, - 38.88646521270205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06089" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98747781304758, - 38.842167959259015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H05948" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94099601528771, - 38.883244645922076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05949" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10215977787801, - 38.92727730470362, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05950" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03837335547803, - 38.98224010102738, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05951" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01802050851096, - 38.8637222724142, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05952" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01609600496734, - 38.8631720312659, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05953" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01802035566848, - 38.86311692491142, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05954" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01599134806169, - 38.86389038571573, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05955" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01820848591795, - 38.871453359366775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05956" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02456242290125, - 38.888849802552556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H05957" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06539118410345, - 38.95645391376966, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05958" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94038040174146, - 38.907151875444924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05959" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95681652686993, - 38.85847977659861, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/19/07

Report Problem", - "NAME": "H05960" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95611290911444, - 38.89284632671675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H05961" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02202192001616, - 38.90074432644311, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05962" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9717285935308, - 38.91807873666925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05963" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98282966520019, - 38.94984280819875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05964" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04659681880526, - 38.89900236038672, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H05965" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04659545148175, - 38.8978973862243, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H05966" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04156943785787, - 38.9163617204276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H05967" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06351862614333, - 38.93552794684563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/02/07

Report Problem", - "NAME": "H05968" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07204188430285, - 38.96586789486272, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05969" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99865951636669, - 38.9584219405531, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05970" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97242537636323, - 38.93107214126279, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05971" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97524397992515, - 38.88313590768739, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H05972" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97487754891152, - 38.886512612792615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05973" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97451783087179, - 38.881905178881524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H05974" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97360028344937, - 38.88361208229724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H05975" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97413080218112, - 38.88266427561052, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05976" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96241389265245, - 38.8827944708599, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05977" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09588426819892, - 38.923062051888984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05979" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9411022380476, - 38.88397998205178, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05980" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01552695181967, - 38.97072159974498, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05981" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06683192526043, - 38.9561772750103, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05982" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98823338104727, - 38.95168280418546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05983" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05509903031954, - 38.968148291757686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05984" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01790540310722, - 38.920408302321555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/02/06

Report Problem", - "NAME": "H05985" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98764593793524, - 38.950961649418005, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05986" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01613912936068, - 38.97072151686046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/09/07

Report Problem", - "NAME": "H05987" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08483002694584, - 38.91203847116491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H05988" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04474705822429, - 38.90862127541762, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H05989" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04481270414615, - 38.90951482401254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05990" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08686283829391, - 38.914500695811604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H05991" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00049191615116, - 38.91539354712342, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H05992" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02999478653459, - 38.91020337294831, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H05994" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.944219965088, - 38.88578784680498, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05995" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03025368005234, - 38.90923054927279, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/15/07

Report Problem", - "NAME": "H05996" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93141264742363, - 38.87852562644527, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05997" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93119704708621, - 38.877684547874196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05998" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93174383663276, - 38.875606685377754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05999" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08859089824388, - 38.91637633057543, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06000" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00113383280268, - 38.960589987119796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06001" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98149197052334, - 38.94880871526207, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06002" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98273343178656, - 38.92135356986621, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06003" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08905254249221, - 38.908255436197464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H06004" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08642463903071, - 38.911785465336784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06005" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98066441841266, - 38.94719041532141, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06006" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92411977843128, - 38.902247901349874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06007" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98153274088584, - 38.920302186893004, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06008" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99781064518963, - 38.95919601642933, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06009" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09300732693742, - 38.92526199349452, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Centurion

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06010" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99850861227173, - 38.960232643607384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06011" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06405404571017, - 38.93764910925721, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/10/06

Report Problem", - "NAME": "H06012" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98842342578274, - 38.94519929584205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06013" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97411088595291, - 38.935172178844155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/14/08

Report Problem", - "NAME": "H06015" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92867480510196, - 38.9071245336008, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H06016" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96472925627012, - 38.91872350554345, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H06017" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96592860396558, - 38.918778055495416, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06018" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00914256544131, - 38.95702328350516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06019" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92728840762776, - 38.89352356757334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06020" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92721286145478, - 38.8944360054471, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06021" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92787943208923, - 38.89086238290757, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06022" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93911714344618, - 38.901571990398054, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/11/07

Report Problem", - "NAME": "H06023" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09339662574216, - 38.924525072520275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06024" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04023501742162, - 38.92222307759083, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H06025" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94808340216768, - 38.884660454119654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06026" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94078687736402, - 38.885615204732666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H06027" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93287718357305, - 38.87726696848328, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06028" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98823019091473, - 38.95227836768254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darily

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06029" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9178475664839, - 38.88642737359512, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/25/07

Report Problem", - "NAME": "H06030" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9572727160884, - 38.86470335691979, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H06031" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02547835911794, - 38.98158889462725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06032" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97488577636561, - 38.894901311216735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H06033" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09692314508263, - 38.94121920977975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H06034" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99784274890723, - 38.82406187624248, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H06035" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99940687597602, - 38.82286928083087, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/11/07

Report Problem", - "NAME": "H06036" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99898173788768, - 38.823672941894145, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06037" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97939728263239, - 38.947171984129106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06038" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9901443534295, - 38.91246358569445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06039" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98895811107158, - 38.911962165571076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06040" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0062725280622, - 38.94743688028898, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06041" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98839846497783, - 38.922078935114584, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06042" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05625078616974, - 38.96293341782501, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06043" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98102245181586, - 38.94066209768925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06044" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05473525151494, - 38.97802773066404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H06045" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93272102105684, - 38.87855594404109, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06046" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99892992714582, - 38.9620604321043, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06047" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97468490040116, - 38.929627710810465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06048" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97387654143601, - 38.91952447869471, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06049" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9816834075737, - 38.916724318803766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06050" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93191486500743, - 38.90291925058489, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H06051" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.940176118171, - 38.90634862262025, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H06052" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02553748370023, - 38.94158888264981, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H06053" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00097602102483, - 38.96431731509948, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06090" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0577599003193, - 38.93637889482694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/28/06

Report Problem", - "NAME": "H06091" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00260174349097, - 38.96441213808114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06092" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94900843706566, - 38.89549251459384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/22/07

Report Problem", - "NAME": "H06093" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96222774679589, - 38.86504851074198, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06094" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05471040593682, - 38.982734754230385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06095" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92486980613421, - 38.88597992579633, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06096" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93861073776398, - 38.874721458004274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06097" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09245548379204, - 38.95474728762475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/12/07

Report Problem", - "NAME": "H06098" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9501536570703, - 38.86125808516608, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06099" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96343393682282, - 38.9186451132847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06100" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9619882486635, - 38.918575666177475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06101" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05489042359085, - 38.96963052499907, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H06102" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05673447072746, - 38.970610453077406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06103" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00406035059625, - 38.83296137096221, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06104" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04650463091485, - 38.905760159341455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H06105" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98518230763166, - 38.91356362838349, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H06106" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00242326872942, - 38.938074260395545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/28/08

Report Problem", - "NAME": "H06107" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00288284917531, - 38.94050063367342, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06108" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00165039664131, - 38.93402393565909, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06109" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0022579435767, - 38.93724085221533, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06110" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00496828811649, - 38.940720185764945, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06111" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00136856635177, - 38.93258892560665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06112" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00554621031077, - 38.94095562747284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06113" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00258860043944, - 38.93898181547361, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/28/08

Report Problem", - "NAME": "H06114" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00200521433875, - 38.93590150313327, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06115" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00291715284176, - 38.939920805139906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/28/08

Report Problem", - "NAME": "H06116" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00702127244165, - 38.94214178670973, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06117" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0017748967706, - 38.93470564605151, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06118" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00348971845982, - 38.94080676388743, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06119" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95670952665942, - 38.85625743941417, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 01/30/08

Report Problem", - "NAME": "H06120" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91358531172793, - 38.892999802024995, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H06121" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98608126307448, - 38.91326577017279, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H06122" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96469978438265, - 38.86558102386654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06123" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9852286268318, - 38.91166283889424, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H06124" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99867448733681, - 38.94999921111817, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06125" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98027490100323, - 38.90666245882123, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06126" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09420823086555, - 38.92029601175147, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06127" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98034693181015, - 38.90784886123743, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H06128" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04176581824595, - 38.905786064837585, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H06129" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98640305577776, - 38.891955140684495, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 04/13/06

Report Problem", - "NAME": "H06130" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99274741699661, - 38.95131693106683, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06131" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99295755905642, - 38.952318708713214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06132" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99802855821795, - 38.96214426019148, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06133" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98808983547468, - 38.93826546532368, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06134" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96605687639418, - 38.8652612942667, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H06135" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03870982584631, - 38.906570744624176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H06136" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03867829737317, - 38.90719478135571, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H06137" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99363677130809, - 38.838683349531685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H06139" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99684001492463, - 38.85701257235884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H06140" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99661807443468, - 38.858125620041555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H06141" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05235896186663, - 38.98151379365338, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H06142" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06644973067202, - 38.97271197567534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06143" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06646379467917, - 38.97410667667713, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, Metropolitan

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06144" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93723731837102, - 38.888360033807224, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06145" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99919591303542, - 38.94715852783032, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06146" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00581997092837, - 38.83292053319816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H06147" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9407515068607, - 38.88645899298755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06148" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97916501147942, - 38.8671966822501, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06149" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09505145979456, - 38.924103499999696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06150" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96973994628644, - 38.91966094780212, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/05/08

Report Problem", - "NAME": "H06151" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94241885041961, - 38.8857699108868, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06152" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10045663680148, - 38.948500283782636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H06153" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95529213580222, - 38.8713837024314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06154" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09212590931568, - 38.92023234351756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06155" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99666803228124, - 38.83934810097682, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H06156" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0089091285063, - 38.955727796172376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06157" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9529222497127, - 38.86814368115873, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06158" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03709180498784, - 38.92866528056472, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H06159" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99621184832708, - 38.9582694220759, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06160" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98836708642243, - 38.94081620030147, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06161" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99518611881898, - 38.95896328154054, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06162" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09416615912777, - 38.94119042068433, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H06163" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09225954766166, - 38.921239684561534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06164" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92345936281907, - 38.893063604169335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H06165" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92307132049972, - 38.89379641455867, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06166" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92288369832943, - 38.89470798302518, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06167" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99381391780702, - 38.84060029433971, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H06168" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99390928457731, - 38.84244053613268, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H06170" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99522614225198, - 38.8428721920872, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H06171" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00864943260682, - 38.96462427964531, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06172" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98970179647013, - 38.833358665734416, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06173" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06744837922692, - 38.94625850431112, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 01/23/07

Report Problem", - "NAME": "H06174" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91631320690418, - 38.89705537463737, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06175" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0359271720447, - 38.96679543672169, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06176" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94113667628936, - 38.86822133839423, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06177" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07329495737362, - 38.95274079191687, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H06178" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00931592319759, - 38.8730479486731, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H06179" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08186968487222, - 38.921479804219885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H06180" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99728308502863, - 38.85889714578509, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H06181" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94276031089639, - 38.87804759224004, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06182" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94343806433534, - 38.87852689879248, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06183" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00161160664943, - 38.82523898608754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06184" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02138445218266, - 38.920593523172116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/29/06

Report Problem", - "NAME": "H06185" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94141218446286, - 38.8788288703742, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06186" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9408989893484, - 38.878240705966995, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06187" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98724337294172, - 38.91286907656138, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H06188" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11141066065733, - 38.931218377369206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H06189" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96551518143657, - 38.85742972918487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06190" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97782969378237, - 38.844973421971964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06191" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97892558862489, - 38.8447595573216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/04/07

Report Problem", - "NAME": "H06192" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03022941080225, - 38.987334138199124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H06193" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99661944495496, - 38.959820017084816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06194" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02038668311893, - 38.95543100422687, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H06195" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07629460210578, - 38.93100359485396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/05/08

Report Problem", - "NAME": "H06196" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98264504478333, - 38.84936345547199, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06197" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97339395910024, - 38.9204393004522, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H06199" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9774492876573, - 38.84374630891142, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/04/07

Report Problem", - "NAME": "H06200" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97619209644365, - 38.84390586007711, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06201" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98239542370581, - 38.850693234384096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H06202" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98436858810177, - 38.850261389634944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06203" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03776977908477, - 38.93577314821084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H06205" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05953436352812, - 38.95364893159056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H06206" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02977432924227, - 38.90052041671877, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06207" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02940476343012, - 38.90126625818928, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06208" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.094258520684, - 38.91929347910597, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06209" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09428319469734, - 38.91812243001221, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06210" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02602616166911, - 38.9626041252422, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06211" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01565576904014, - 38.81413806822103, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06212" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00581539077301, - 38.83013838688788, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06213" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97233486109403, - 38.92153696207284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06214" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98696677769223, - 38.9257163885513, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H06215" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98064085409298, - 38.856315199295395, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/30/08

Report Problem", - "NAME": "H06216" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9839633760717, - 38.92590815338525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06217" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97476262795232, - 38.883891878424166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H06218" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97325298149521, - 38.88669385200874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H06219" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03259305120088, - 38.9422787396782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H06220" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99507144966911, - 38.947387471208174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06221" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99572572291981, - 38.94883266792357, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/07/07

Report Problem", - "NAME": "H06222" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99649820472746, - 38.949493432630554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06223" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99687157170628, - 38.9555856730984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06224" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99700678466596, - 38.9487844684223, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06225" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99976600062061, - 38.95802367481772, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06226" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06368184951641, - 38.95697165243259, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H06227" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0306197951636, - 38.94226810293982, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H06228" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99505617968411, - 38.949166902620284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06229" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9423743879173, - 38.880398647126576, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06230" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93935168822561, - 38.89562116997079, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06231" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96427747305485, - 38.93221666532227, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06232" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94240438029138, - 38.894600184110566, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06233" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94239217796873, - 38.89529333600655, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H06234" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9743369601892, - 38.88605178866275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H06235" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04901240427685, - 38.892242610504674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H06236" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96796990930274, - 38.92563082237489, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06237" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98433653142877, - 38.91245824011285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H06238" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92428916671932, - 38.882295453971835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06239" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97628602285232, - 38.921413876135965, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H06240" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97438081236051, - 38.8493411338829, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06241" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97048134432265, - 38.87494720860754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H06242" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97840582822322, - 38.84620436247066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06243" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02973124928668, - 38.918889394187204, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H06244" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99402330572703, - 38.958210245509385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06245" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02891101827966, - 38.89621451062037, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H06246" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9944033682652, - 38.959210784624524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H06247" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99512996259504, - 38.95814962621087, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06248" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04770241675219, - 38.89224740476481, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H06249" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93783640181822, - 38.897391706500734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06250" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03622686328043, - 38.93930640229491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H06251" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01819944491953, - 38.920364269245525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/22/06

Report Problem", - "NAME": "H06252" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02564083274441, - 38.95203371777778, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H06253" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99303127674953, - 38.836687176739176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H06254" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00344501590587, - 38.88889845719042, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H06255" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01059001621702, - 38.83092087782062, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06256" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95319244257158, - 38.871902817757814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06257" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95508242451481, - 38.869305031318554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06258" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98113301212183, - 38.85069970343017, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06259" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9294998001535, - 38.90469723853815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H06260" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94765038391822, - 38.864187581226396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/07/08

Report Problem", - "NAME": "H06261" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97428118517571, - 38.884679610619116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/10/06

Report Problem", - "NAME": "H06262" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92864490045704, - 38.90454047864754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H06263" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92957791443911, - 38.905929376041406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H06264" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93277449939283, - 38.90458369062743, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/31/07

Report Problem", - "NAME": "H06265" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00638355957874, - 38.9483255138871, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06266" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09315298852276, - 38.91863010022487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H06267" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94243997268384, - 38.88480422256583, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06268" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97007377156672, - 38.85570729630734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H06269" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9722663752238, - 38.86739029765275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H06270" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00356677372471, - 38.88460711372881, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/24/06

Report Problem", - "NAME": "H06271" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97198984969701, - 38.903615619519506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H06272" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03827222194552, - 38.935256926276104, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H06273" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07035115169673, - 38.927454508024304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06274" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03752924335878, - 38.91880127357638, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H06275" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99488631992267, - 38.884702013610074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H06276" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06994602229719, - 38.93161702385608, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 03/19/07

Report Problem", - "NAME": "H06277" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93912840534068, - 38.89472418970253, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/23/07

Report Problem", - "NAME": "H06278" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98254085343383, - 38.84801518308433, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H06279" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98692561990302, - 38.86815780822454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H06280" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93937412872188, - 38.89841960325725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/07/07

Report Problem", - "NAME": "H06282" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93499296813131, - 38.87638436050374, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H06283" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08612362235728, - 38.92073224430046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06285" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.995857574278, - 38.960452624411296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H06286" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93477383823897, - 38.874801588678174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H06287" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99712425449216, - 38.94883649416743, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06288" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00092780262983, - 38.96265213137823, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "null

In Service


Last Inspection Date: 01/10/08

Report Problem", - "NAME": "H06289" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96619350160297, - 38.87301705032258, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H06290" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09550369065241, - 38.942237450514476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H06291" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98251585590089, - 38.9132035929625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H06292" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00456077768119, - 38.960220385006615, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/12/08

Report Problem", - "NAME": "H06293" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96573375267165, - 38.87062868046402, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06294" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09423838564805, - 38.942076895686746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Super Centurion

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H06295" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99539474346301, - 38.95540096383598, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H06296" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9940175433231, - 38.830156908855116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H06297" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99062657159399, - 38.94920961886874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06298" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99904156565336, - 38.947876927884714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06299" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99862706836099, - 38.944262314878884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H06300" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08258487213782, - 38.94429687555969, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H06301" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93925477538414, - 38.899156019925314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H06302" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0885594590181, - 38.94328195208756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/28/07

Report Problem", - "NAME": "H06303" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01053249848282, - 38.91562512813556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H03781" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03149860060336, - 38.952862722731545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H03782" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02978952208173, - 38.98523809475416, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H03783" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00214318600925, - 38.892608703969614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03784" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9761558275395, - 38.93821864366102, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H03785" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02220534254324, - 38.8932120025607, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03786" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02111058852749, - 38.89195656479307, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03787" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00675234093197, - 38.90957841675109, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03788" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08362394544916, - 38.95807643903714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H03789" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94246674009094, - 38.893803478602955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H03790" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01611616484657, - 38.90387376595241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03791" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06974704261751, - 38.94702002188165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H03792" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04287549192607, - 38.94308301345826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H03793" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02988559150447, - 38.949782298964884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H03794" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02730913986697, - 38.949800585428775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H03795" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03304522449442, - 38.949794447490724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H03796" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96539942674859, - 38.929515807648194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03797" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96223814712577, - 38.863772192872155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03798" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02965254445662, - 38.888705919570135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03800" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97243633867602, - 38.926373192424016, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H03801" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97207397152667, - 38.923561069928915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H03802" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01428659595271, - 38.91623474670085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03803" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00579832133425, - 38.88415803742989, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H03804" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0150172330628, - 38.910422521203124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03805" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00571479737653, - 38.89109405137284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H03806" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08614522626061, - 38.95215297766018, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 11/28/07

Report Problem", - "NAME": "H03807" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01103439773551, - 38.90863036801653, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H03808" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0779268603956, - 38.947865048048385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/11/07

Report Problem", - "NAME": "H03809" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03740162191232, - 38.933698483600004, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H03810" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10274984945097, - 38.931402965317936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H03811" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0299062475637, - 38.95191435380435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H03812" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01661686463513, - 38.9096776570696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H03813" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01782972779178, - 38.909592907958555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H03814" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99926917484655, - 38.90911252690702, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H03815" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04401075380775, - 38.941242810660405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H04573" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98247566907497, - 38.86455527497024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04574" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97915190076975, - 38.92825000615917, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04575" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00848617036823, - 38.947455883147875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04576" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08865688967799, - 38.926663430018685, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04577" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03840922395163, - 38.90295310786932, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H04578" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97231945655625, - 38.925513357060346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H04579" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97319377949559, - 38.92563539836224, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H04580" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97514742034268, - 38.942727686927896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/31/08

Report Problem", - "NAME": "H04581" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95870943408765, - 38.88206807182069, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04582" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08618690709217, - 38.912793332138605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04583" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96519669330054, - 38.8764126446771, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04584" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02675807121229, - 38.98448400242735, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04585" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99626579690941, - 38.92570171447717, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H04586" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9751156022107, - 38.90090247904665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H04587" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99626030430434, - 38.927302167533, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/04/08

Report Problem", - "NAME": "H04588" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9962482645452, - 38.92642002798468, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/04/08

Report Problem", - "NAME": "H04589" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9962433206097, - 38.92854280077351, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04590" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0220432668738, - 38.89021227240611, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04591" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93185908319334, - 38.87966959348911, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04592" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.074497746621, - 38.948771462686175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04593" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95448218729926, - 38.872255231877396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04594" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00334698427989, - 38.8473831294017, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04595" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00214347673958, - 38.846654690195734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04596" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95750475810465, - 38.85932006460698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/21/07

Report Problem", - "NAME": "H04597" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98458713840753, - 38.9236190345875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H04598" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98323534717085, - 38.922626663047446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H04599" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01623885023443, - 38.97141012872568, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04600" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01978796767985, - 38.892988155693764, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04601" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02647210699517, - 38.93182104052187, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04602" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1036934056998, - 38.93561914648893, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 07/19/05

Report Problem", - "NAME": "H04603" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07574784782663, - 38.95474720801586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H04604" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00462868518309, - 38.961212875890844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04605" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93778117916608, - 38.87734643562837, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H04606" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01375841765004, - 38.86520188988051, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05022" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0137522976389, - 38.866090948835264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05023" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98356280950657, - 38.92075862660752, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05024" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0034120908475, - 38.904445930173985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H05025" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0928556023799, - 38.93770057371047, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/09/08

Report Problem", - "NAME": "H05026" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01533724253665, - 38.88896453238649, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H05027" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05861441732024, - 38.9682167026899, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05028" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06556747156624, - 38.97497536009743, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy, K81D

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05029" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98606535106647, - 38.9279612915883, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/10/08

Report Problem", - "NAME": "H05030" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03162297791978, - 38.885040892859934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H05031" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0323420800206, - 38.88373832686895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H05032" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0321542074068, - 38.887229117817036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H05033" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03354985746132, - 38.886070833104874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H05034" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03140953148022, - 38.8858773877474, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H05035" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03551169828295, - 38.92332814579259, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/28/06

Report Problem", - "NAME": "H05036" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99046609877054, - 38.94795288820776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05037" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00594353330762, - 38.943659814858094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05038" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00161618402952, - 38.943020627720564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05039" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01238923987928, - 38.82705428501907, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05040" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01182993991338, - 38.83022063892504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H05041" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00884112192549, - 38.82694375854108, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/13/07

Report Problem", - "NAME": "H05042" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01298400896576, - 38.83068515480144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H05043" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09808788545327, - 38.92801164701411, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05044" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98863224263212, - 38.92218740927983, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/13/07

Report Problem", - "NAME": "H05045" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96052632262699, - 38.86557783185515, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H05046" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98921066185777, - 38.92091357011748, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H05048" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98215085199892, - 38.86957207251508, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/23/07

Report Problem", - "NAME": "H05049" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98522718555996, - 38.86891050142056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/25/06

Report Problem", - "NAME": "H05050" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0499546101124, - 38.89358347676023, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H05051" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0497332798997, - 38.89744016121968, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H05052" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9864209424278, - 38.86889759315796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/13/07

Report Problem", - "NAME": "H05053" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08101779113183, - 38.91924394523919, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H05054" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97601310001137, - 38.87061481305235, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05055" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98626301435364, - 38.93482434738986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05057" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99391835311438, - 38.92353555683909, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05484" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97895384996356, - 38.8562319667927, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/04/08

Report Problem", - "NAME": "H05486" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06662986094076, - 38.93897199708627, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/26/07

Report Problem", - "NAME": "H05487" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08500477656486, - 38.94636157876048, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/11/07

Report Problem", - "NAME": "H05488" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09570676145275, - 38.916981727412946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05489" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93569810511126, - 38.90205788907862, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H05490" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03172492017777, - 38.92002771165384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05491" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03175860433724, - 38.91912332954183, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H05492" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03174318824335, - 38.918167559090534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H05493" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93593440790247, - 38.87345590750142, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05494" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99273157234356, - 38.950348189420104, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05495" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99161632767127, - 38.95018658740326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05496" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05781221320706, - 38.96775119564866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05497" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97100982029177, - 38.8450158706856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05498" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95646963919498, - 38.87472456184263, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05499" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99414263553922, - 38.950813852234106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05500" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9384791468379, - 38.873314528676836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/21/07

Report Problem", - "NAME": "H05501" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99404448807678, - 38.95228106051506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05502" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0457231216707, - 38.9408742818191, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H05503" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04657929348775, - 38.94069928202046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H05504" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00709849638515, - 38.94292329601782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05505" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94576109396932, - 38.89259422153347, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H05506" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94558188396927, - 38.891913870936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/23/07

Report Problem", - "NAME": "H05507" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92254397289948, - 38.88875466375766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05508" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02826356909192, - 38.94075401556329, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H05509" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97538502013988, - 38.90551103866676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H05510" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08693398269055, - 38.9388125000543, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05511" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05325094029833, - 38.94873202157929, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05512" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00633307475219, - 38.955560482437505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05513" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00719671740485, - 38.95525781782415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05514" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06103596832862, - 38.97783349362207, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05516" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92157449404803, - 38.88469210093975, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05517" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91953182301285, - 38.88511250215564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05518" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98966503465766, - 38.84440642080874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H05519" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97972079459664, - 38.932163036297226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H03816" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07583127121498, - 38.95837914262287, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03817" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99837109929354, - 38.88214955232073, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 11/13/06

Report Problem", - "NAME": "H03818" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02003675885621, - 38.97483586626943, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/14/07

Report Problem", - "NAME": "H03819" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0091949277422, - 38.91029113423856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H03820" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.019984888335, - 38.976081470009355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H03821" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03283127617412, - 38.93309383213818, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 01/10/08

Report Problem", - "NAME": "H03822" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01836975361316, - 38.93061661674601, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/02/08

Report Problem", - "NAME": "H03823" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02592774909643, - 38.880608926839926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H03824" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02482457111897, - 38.87955117612572, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03825" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02458352960875, - 38.88045888551386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H03826" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06137111328788, - 38.97298340375881, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/05/07

Report Problem", - "NAME": "H03827" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05998389447528, - 38.97390770177412, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H03828" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99104257244016, - 38.841369859504724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H03829" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02968995198691, - 38.96228283779921, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04106" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02662046021695, - 38.98075318200874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04107" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08394924988205, - 38.946342793546954, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/10/07

Report Problem", - "NAME": "H04108" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01583246259305, - 38.95321295549329, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04109" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0361461916634, - 38.981397163890676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04110" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01152132910175, - 38.955324880489755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04111" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97843316131892, - 38.93970995865392, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H04112" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05994899536816, - 38.96250647173729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04113" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0280115590136, - 38.915452420212716, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04114" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01041469430427, - 38.959483864368494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04115" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98606520204657, - 38.90653434741664, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/29/07

Report Problem", - "NAME": "H04116" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04370504333374, - 38.987865345200035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04117" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07970651270003, - 38.91924776570916, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04118" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92068931982136, - 38.89586850335346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04119" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07970415217241, - 38.92059208929606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04120" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07927422833039, - 38.94633428348339, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04121" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97721557555866, - 38.938385229237035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04122" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97861261895501, - 38.87306796392008, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04123" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93571146523806, - 38.87753775199594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H04124" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06768601573768, - 38.94033119237723, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/07/07

Report Problem", - "NAME": "H04125" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03841979231008, - 38.98871415213123, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04607" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00897091413475, - 38.95080860113652, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04608" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95566920917643, - 38.8936459042767, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04609" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03065180386986, - 38.90534913608487, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04610" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00429123856172, - 38.836207020085304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04611" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98069374773931, - 38.935798078047505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H04612" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00369633955648, - 38.966582870900986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04613" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08691668956509, - 38.922583751131285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04614" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00268272882413, - 38.96368794505766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04615" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96319606119214, - 38.87902539358634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04616" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04282914906338, - 38.93500849084072, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H04617" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09660518402474, - 38.939429722714515, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04618" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92651601450959, - 38.88274017910485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/26/07

Report Problem", - "NAME": "H04619" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98902701740278, - 38.946346369571366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04620" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96752281405584, - 38.8767567778405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04621" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95022879417982, - 38.89097905448548, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H04622" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94830174370891, - 38.891979894580444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04623" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98812795640582, - 38.939028588822886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04624" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10462350669324, - 38.93353791221197, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04625" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10449779057846, - 38.93469499767204, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04626" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03139073260229, - 38.968320324785346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04627" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03330130136223, - 38.96889766601351, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04628" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09758800028382, - 38.91667825707182, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/20/08

Report Problem", - "NAME": "H04629" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97609021828806, - 38.942729442004406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04630" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94707593891499, - 38.86494256079356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04631" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97719521721187, - 38.94191957448436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04632" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97736728403088, - 38.94275638779594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04633" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02127003650206, - 38.9250013426471, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/22/06

Report Problem", - "NAME": "H04634" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0213887826405, - 38.92584291396384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H04635" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0291020981162, - 38.91028352972541, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H04636" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00210563764855, - 38.9076732829993, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H04637" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08760381600996, - 38.91255918756391, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04638" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99567095227769, - 38.94061964263085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04639" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10586745140442, - 38.93273603444349, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04640" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01143281127955, - 38.87430176593557, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H05058" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01133249622085, - 38.87329667250693, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H05059" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0107995114957, - 38.81858688196527, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/05/05

Report Problem", - "NAME": "H05060" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01077875586667, - 38.81794002988944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05061" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09842693223656, - 38.92688925880241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05062" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.963026527041, - 38.86144021089745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05063" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98480458702745, - 38.92004243464827, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05064" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97979974702947, - 38.89468716253029, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H05065" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00469927325149, - 38.90378396981618, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H05066" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01893886607361, - 38.9626540244274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05067" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02104207062123, - 38.95432370915695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H05068" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09251123400333, - 38.941344793063415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/10/08

Report Problem", - "NAME": "H05069" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9856761222235, - 38.94225555225456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/04/08

Report Problem", - "NAME": "H05070" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92562213261203, - 38.887688045282744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H05071" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00750636305683, - 38.8302613460032, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05072" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00037855145172, - 38.844638493800275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/26/07

Report Problem", - "NAME": "H05074" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99917196697692, - 38.84466602128081, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05075" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00154609699699, - 38.84464487116169, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05076" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00787209540599, - 38.95353583511847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05077" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97995455193995, - 38.86956450942505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05078" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9576014048161, - 38.88683738905643, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05079" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95913925166877, - 38.88682973953758, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H05080" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00537921060618, - 38.84680100912937, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05081" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00799973529547, - 38.825209139206294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/14/07

Report Problem", - "NAME": "H05082" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96196872270433, - 38.93118879172168, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05083" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95767189735734, - 38.884352064981464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05084" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00826167700262, - 38.820695830109045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H05085" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94894867187764, - 38.86454140307832, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H05086" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01064260327846, - 38.819177330202, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05087" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00323280558295, - 38.84621122460502, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05088" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98667557492709, - 38.94175972814463, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05089" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98023005942686, - 38.94290812913477, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05090" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0001940108123, - 38.860781675858895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H05092" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99958320474774, - 38.860402600966225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H05093" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96306732961972, - 38.86279209913632, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05520" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93401829364757, - 38.873929042896556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05521" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00800020844989, - 38.95771740875306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05522" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0424771027105, - 38.90827484198636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05523" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04322636584824, - 38.91028066242064, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05524" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04240195724333, - 38.907292491047265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05525" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04469769490164, - 38.91266065297972, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H05526" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04451561389328, - 38.911836639587335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/25/07

Report Problem", - "NAME": "H05527" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96160296571458, - 38.855463680111455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H05528" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01024481073367, - 38.96814746468498, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05529" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00896588098301, - 38.968301061173875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05530" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96627164321573, - 38.874653836202945, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05531" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0091197293331, - 38.96655373830583, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05532" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01145911397474, - 38.96827144053048, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/23/07

Report Problem", - "NAME": "H05533" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01024054727272, - 38.96738652977421, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H05534" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9614409126438, - 38.85718874049464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/17/08

Report Problem", - "NAME": "H05535" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97955204381321, - 38.85713757304962, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/15/08

Report Problem", - "NAME": "H05536" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97911540950061, - 38.85718106951473, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H05537" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97808529519855, - 38.85593256506634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H05538" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97808407054877, - 38.85718197049466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/30/08

Report Problem", - "NAME": "H05539" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00621642346994, - 38.96827299882037, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05541" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95840951134817, - 38.87186517340588, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05542" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95790517974162, - 38.87092592959299, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05543" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03464866168709, - 38.91714202713414, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05544" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0346678328603, - 38.914926052631984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05545" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03469011507521, - 38.91865831492271, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05546" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03466536158568, - 38.91423042971323, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H05547" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92607490962675, - 38.90363582020827, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05548" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93264106063309, - 38.90304841896356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H05549" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93362120518705, - 38.902963301490914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05550" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93064480504816, - 38.9032437772404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H05551" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92955130241519, - 38.903609186507865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H05552" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93925617891294, - 38.90265226387361, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H05553" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93459673696846, - 38.90278903552854, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H05554" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03444388068098, - 38.90472147679435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04126" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03444419634658, - 38.90554230861681, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H04127" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05965348159785, - 38.964043007414226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04128" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97826183480795, - 38.94191356198563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04129" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06124494758235, - 38.975321061401495, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04130" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06039680541126, - 38.975982373304525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 11/05/07

Report Problem", - "NAME": "H04131" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01462480695498, - 38.953237083802165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04132" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07784865034364, - 38.921501847940014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H04133" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9738844456461, - 38.89520050273513, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/15/06

Report Problem", - "NAME": "H04134" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09912209734335, - 38.91800002002581, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04135" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07410363446063, - 38.91816021090756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04136" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0133816496918, - 38.95214409718589, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04137" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97911517308313, - 38.86409238340526, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04138" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0965817045513, - 38.9463557131952, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H04139" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01162206136723, - 38.95441416186452, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Am. Darling

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H04140" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07278076615214, - 38.951453353418316, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H04141" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01216566909041, - 38.952363608455315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04142" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01715222858077, - 38.96122928455193, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H04143" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96827071763546, - 38.93403079284673, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H04144" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9761338999655, - 38.94080510023721, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04145" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0114410067199, - 38.95222911607406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04146" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01342776104484, - 38.9531823490413, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04147" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09077952107053, - 38.9479546939858, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/13/07

Report Problem", - "NAME": "H04148" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0924601142271, - 38.947857483699394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H04149" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93584317933272, - 38.87483335010564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H04150" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9312273930607, - 38.89011876072355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04151" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08395563715916, - 38.94485097178136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/05/07

Report Problem", - "NAME": "H04152" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.023881629564, - 38.897531732988455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H04153" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0863855825512, - 38.945605248842256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04154" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05069929959917, - 38.89363286410995, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04155" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07870592821183, - 38.92161838194337, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04156" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93664978072373, - 38.87759329704105, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04157" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99793004310953, - 38.84460272154863, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H04158" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96825037280703, - 38.93498776623604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/09/08

Report Problem", - "NAME": "H04159" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07420000848023, - 38.95152788755235, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H04641" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99468330923014, - 38.9047647096094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H04642" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99487608617089, - 38.90458818157047, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H04643" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99630852290727, - 38.905455577598765, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H04644" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96905745347226, - 38.93772639733008, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04645" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03586691548374, - 38.93666840682188, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/26/07

Report Problem", - "NAME": "H04646" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06282027044647, - 38.97360980561795, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H04647" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97980878550244, - 38.89818613894851, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04648" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97949250667071, - 38.89930675095255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H04649" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05904905542043, - 38.90273546012486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H04650" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03325891291323, - 38.90729610909179, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H04651" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09242135373977, - 38.945588732806186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H04652" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98666491183164, - 38.904845937446964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 12/21/07

Report Problem", - "NAME": "H04653" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09813772020284, - 38.91702730210631, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04654" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9800504526319, - 38.89725149981552, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04655" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01939644026498, - 38.94433388803896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H04656" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06917715330414, - 38.94225542747022, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04657" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0309787170839, - 38.90977135535689, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H04658" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0057168927409, - 38.909475245400714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04659" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01088024513119, - 38.96008872644179, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H04660" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01139043684941, - 38.9594910700732, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04661" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02949613735709, - 38.96982295120882, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04662" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9938803508378, - 38.90423548372707, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H04663" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07070448196514, - 38.927447853852385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H04664" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98596086268006, - 38.9235782648783, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H04665" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08626376844042, - 38.950439750351464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/05/07

Report Problem", - "NAME": "H04666" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02601997387785, - 38.96148905798413, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04667" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99354740559181, - 38.94058844807709, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04668" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01573418003876, - 38.948036139246746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04669" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97223546063009, - 38.93956825659346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H04670" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08636939461488, - 38.94714479467891, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04671" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98198782552936, - 38.90562092893928, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H04672" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.962745100922, - 38.877293368879705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04673" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96596344337678, - 38.92816919467666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04674" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00793752908118, - 38.96407328653882, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05094" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05706186163043, - 38.931310580293584, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H05095" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01115767264281, - 38.82048398900144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H05096" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00080082980088, - 38.931393726925926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05097" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00140140107794, - 38.86035805567028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05099" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00579112172366, - 38.8766800024697, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/31/07

Report Problem", - "NAME": "H05100" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00568714004498, - 38.878455507983176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H05101" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99118158164589, - 38.86075710134952, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05103" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97124438330663, - 38.895875654275656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/07/06

Report Problem", - "NAME": "H05104" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96734037632208, - 38.85526601549889, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05105" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03660727158277, - 38.941910031317505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H05106" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95796514889975, - 38.89134906879623, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/11/07

Report Problem", - "NAME": "H05107" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96014188545806, - 38.891340382047275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/11/07

Report Problem", - "NAME": "H05108" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00550992983898, - 38.847927517413034, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05109" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0027490084969, - 38.847984305182536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05110" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00459417437982, - 38.84897402224414, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05111" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01890025915684, - 38.93272030496153, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H05112" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00122265650533, - 38.84582209829062, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/30/07

Report Problem", - "NAME": "H05113" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93426325574934, - 38.87934935379497, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05114" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93578712039782, - 38.879616480677775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05115" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93547493419248, - 38.88055920802927, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05116" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99112066636087, - 38.86343684875891, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H05117" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07072592528898, - 38.94117230757642, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/07/07

Report Problem", - "NAME": "H05118" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10008038390623, - 38.934232242301135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05119" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00543642575657, - 38.944333587181326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05120" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97205519821854, - 38.90557859098065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H05121" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97400418415732, - 38.90556770838965, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/10/07

Report Problem", - "NAME": "H05122" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97029875684811, - 38.89684560955335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 04/07/06

Report Problem", - "NAME": "H05123" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99494100183634, - 38.855549825340795, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05124" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96458497288435, - 38.857082157904834, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05125" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96537773988202, - 38.8551334674857, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05126" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96275655477618, - 38.85631954815287, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05127" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96404030432578, - 38.85573465505948, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05129" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96238711494429, - 38.855013378809616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H05130" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9319147355934, - 38.90305483527768, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H05555" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03253594381103, - 38.986995981806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05556" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03185964113344, - 38.98760103308529, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05557" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04689553390442, - 38.93270750655063, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 01/01/06

Report Problem", - "NAME": "H05558" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05241885645074, - 38.93411307681662, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/27/06

Report Problem", - "NAME": "H05559" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00616467837328, - 38.824165925353434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05560" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94679255764767, - 38.869914120035084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05561" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01020743214772, - 38.823673355724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05562" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01161555115145, - 38.823558384037995, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H05563" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94043824416006, - 38.87132346189441, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05564" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94936568570252, - 38.86739391851876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05565" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93756086953839, - 38.872467674792226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05566" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00770574768796, - 38.82378353218324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05567" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00873811461366, - 38.82361186604235, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05568" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93807556038735, - 38.872089262565886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05569" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01054065974114, - 38.86739317842726, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05570" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98650805910393, - 38.84524003724452, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H05571" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98289487281518, - 38.84636191650105, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05574" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99653065523252, - 38.94998428548498, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05575" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99798412214963, - 38.94998705809843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05576" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98489755271059, - 38.8775732527253, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/19/06

Report Problem", - "NAME": "H05577" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96657403496258, - 38.872071872173485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05578" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00285028184724, - 38.96115491960757, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H05579" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96759612651366, - 38.87466361599137, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05580" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96623290382512, - 38.87469275930876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05581" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00261994094924, - 38.8316679052314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05582" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95932028643148, - 38.89482390591427, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H05583" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02542357594496, - 38.98347566844439, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05584" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0254029306618, - 38.982771383640156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05585" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02640616073933, - 38.98268025052983, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05586" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08500227559601, - 38.94714712095462, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/10/07

Report Problem", - "NAME": "H05587" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08362220401071, - 38.94715135026438, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/13/07

Report Problem", - "NAME": "H05588" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02440190090958, - 38.98258836965726, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H05589" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02456104844556, - 38.98151992575786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05590" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06777648822873, - 38.905320327622675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/31/07

Report Problem", - "NAME": "H04160" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04300366269197, - 38.98494873782209, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04161" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0512314150634, - 38.939490719849296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H04162" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01468092237296, - 38.95228681242221, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04163" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05798077538691, - 38.93095781308936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H04164" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97928430455137, - 38.9397357051547, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H04165" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09876483038914, - 38.94134825244927, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04166" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09692235319008, - 38.94119670771613, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H04167" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05863785500263, - 38.9588363347859, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04168" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0575501814373, - 38.958462374780034, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04169" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0751152219859, - 38.919940818204296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04170" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09012352660744, - 38.95590037430198, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04171" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9372235000234, - 38.87853321850827, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04172" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09449979552335, - 38.947953601576536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/13/07

Report Problem", - "NAME": "H04173" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0289106558102, - 38.88744086085086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04174" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03163435944765, - 38.88744510954168, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04175" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.030350692949, - 38.88745095426933, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04176" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01898416963326, - 38.914889764368034, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04177" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00537196189624, - 38.84079241280309, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04178" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01501065894607, - 38.9673886361425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H04179" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98316393234396, - 38.905425073642945, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H04180" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0649515439531, - 38.976978665773245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, USP

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04181" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97588851739661, - 38.86959941394611, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H04182" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9828103479725, - 38.915086027457555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04183" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93618149557425, - 38.87850321432359, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04184" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02990746133075, - 38.962781254029906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04185" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03216845575406, - 38.96244307860228, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04186" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03110172300877, - 38.96295824288548, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04187" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98208432681712, - 38.89344620013549, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 04/02/07

Report Problem", - "NAME": "H04188" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08503009544293, - 38.95708539854154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04189" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03113282203469, - 38.88768421857263, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04190" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0297787030391, - 38.88769007576988, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04191" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00798063343545, - 38.88315079834074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/17/07

Report Problem", - "NAME": "H04192" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98069360191194, - 38.87069748600254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/09/08

Report Problem", - "NAME": "H04193" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02989833110495, - 38.92679666687976, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H04675" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99812129879997, - 38.92420748637869, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04676" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05527318635855, - 38.976562226456686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04677" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98630702966962, - 38.92009875123552, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04678" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98569287661115, - 38.92090340033059, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H04679" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06309926998024, - 38.97162257362873, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04680" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97730234557034, - 38.865136399541704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H04681" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08118012218975, - 38.94324616884795, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H04682" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02719994531716, - 38.968686136398794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04683" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03523902646883, - 38.949794716634905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - JUMBO

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H04684" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99032450482852, - 38.94720062224963, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04685" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98772160763963, - 38.92114451368463, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04686" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96687002701309, - 38.875558297545695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04687" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9808680110604, - 38.87941724764165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/17/06

Report Problem", - "NAME": "H04688" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96818994498747, - 38.87623023152657, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04689" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08065713955396, - 38.907550882824715, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04690" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09930180858414, - 38.931646945111886, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04691" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07589448492523, - 38.928894856373844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04692" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07575830384523, - 38.916280434923756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H04693" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0331880811468, - 38.96315717507701, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04694" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02987274199552, - 38.936270241141855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/20/07

Report Problem", - "NAME": "H04695" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02988145523875, - 38.93452092612295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/13/07

Report Problem", - "NAME": "H04696" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02989826064129, - 38.9323771798217, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H04697" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03333335447687, - 38.962205195674784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04698" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93299608995788, - 38.892710714341405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04699" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93301445960975, - 38.893280144078766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04700" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0199662573189, - 38.876432897439585, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04701" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98064403346592, - 38.936998047201634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04702" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93299950532439, - 38.89390997378927, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04703" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93283044578831, - 38.89465833712803, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04704" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98075349844044, - 38.93821621211042, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04705" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10406574419125, - 38.93425941711597, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04706" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03452426481338, - 38.90103818916806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04707" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9333621478716, - 38.89609807080331, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04708" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96512410125285, - 38.85611041006233, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05131" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96364460045582, - 38.85413268968141, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05132" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96251722355318, - 38.85360396168428, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05133" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9815354452883, - 38.90602699974392, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H05134" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00407436409346, - 38.943917171576096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05135" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0088687767568, - 38.827717439751744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05137" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01068152153015, - 38.82785752273561, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/03/07

Report Problem", - "NAME": "H05138" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01239308754744, - 38.82785739857395, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05139" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05714803537302, - 38.935408262936825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/05/07

Report Problem", - "NAME": "H05140" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03371761321357, - 38.901939287456976, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H05141" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97633159818267, - 38.904312637153666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H05142" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95224654475162, - 38.90080203386351, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 12/18/07

Report Problem", - "NAME": "H05143" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94819158266684, - 38.9000889428839, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H05144" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95210412245261, - 38.89944768581777, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H05145" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95150198813921, - 38.89897043567499, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05146" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95071680042268, - 38.898356214229885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/14/08

Report Problem", - "NAME": "H05147" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95291451015491, - 38.90008174437581, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/14/08

Report Problem", - "NAME": "H05148" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94990694953434, - 38.89890131708448, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H05149" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01371069294511, - 38.907136924276266, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H05150" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95963606137366, - 38.88434117550581, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05151" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99825647893331, - 38.85814210538549, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H05152" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02512393129236, - 38.89058524570999, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05153" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98104509333896, - 38.906783136022824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H05154" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01775104137337, - 38.82811897913732, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05155" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9680406117287, - 38.85616116054887, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05156" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92752935991726, - 38.90188639872883, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H05157" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00199254427396, - 38.82632557292641, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/01/07

Report Problem", - "NAME": "H05158" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9986751048196, - 38.86153416877256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H05159" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03418298666743, - 38.91924125815276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05160" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99833992814591, - 38.85965066603583, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H05161" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99921147541397, - 38.96275150242715, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05162" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99994562487444, - 38.96364876290705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05163" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96883425006706, - 38.87079106080068, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05164" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01589818458916, - 38.86614307831664, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05166" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05708556800568, - 38.98054136982565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05591" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93971156487623, - 38.87087736207481, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05592" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05618503406097, - 38.977034759957895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05593" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97628607751274, - 38.91497274077745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H05594" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96048624294018, - 38.874721503771006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05595" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00219860309011, - 38.900310079572584, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/08/07

Report Problem", - "NAME": "H05596" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94911346950808, - 38.879081426798805, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H05597" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95107549047403, - 38.87600265517927, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05598" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98845195982535, - 38.90029425132657, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H05599" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9996735259519, - 38.900303938088115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H05600" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99635052167638, - 38.90030508866122, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H05601" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99720495639907, - 38.90011297295777, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H05602" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9927105245132, - 38.90031304378298, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/23/07

Report Problem", - "NAME": "H05603" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03474882473755, - 38.9890721963417, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H05604" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99255911239196, - 38.948058689247034, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05605" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96298741200495, - 38.86919054202265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05606" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03471160689664, - 38.91265962322301, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H05607" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0346970408595, - 38.91625531367251, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/02/07

Report Problem", - "NAME": "H05608" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03471321035195, - 38.90875230859182, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H05609" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03444403905178, - 38.913334138646334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05610" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99324805600712, - 38.91756487445713, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H05611" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00664287998222, - 38.96729266235581, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05612" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0074549398061, - 38.966604005192, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05613" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00488726270738, - 38.967399307423335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05614" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10012517921214, - 38.93033792938389, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05615" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04590469946832, - 38.91466072053511, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/04/08

Report Problem", - "NAME": "H05616" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98685992576867, - 38.951714087742744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05617" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98686241843231, - 38.95039542104574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05618" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98686494046967, - 38.94954291426279, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05619" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00936030198125, - 38.9710107447314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05620" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00729484274315, - 38.96936912233537, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05621" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04611798105695, - 38.91394860864541, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H05622" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00841420127617, - 38.97025479127584, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05623" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9447146996884, - 38.90459361734108, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H05624" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98193228117958, - 38.91352929969213, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H05625" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02321859114396, - 38.95928284122714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H04228" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97225039976014, - 38.91265508812598, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H04229" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9630260630159, - 38.86818553118676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04230" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08849188887804, - 38.953357982336556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/14/07

Report Problem", - "NAME": "H04231" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08062217065265, - 38.92248373061374, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04232" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09051348448547, - 38.95042123226649, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H04233" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93181748004211, - 38.89557642372513, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04234" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0332685364397, - 38.95519343707847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/28/07

Report Problem", - "NAME": "H04235" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99380791140494, - 38.93933695820181, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04236" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99438984117685, - 38.938164143748, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04237" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0843160409656, - 38.908053406809444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04238" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08879115252536, - 38.94483593138371, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/10/07

Report Problem", - "NAME": "H04239" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02822301624234, - 38.91404340270892, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04240" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03361960626368, - 38.97076466773854, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04241" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9848039514883, - 38.91474516712138, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/08/07

Report Problem", - "NAME": "H04242" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99257605546647, - 38.895473842403405, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04243" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9821151010816, - 38.870698397005036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04244" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98710591197033, - 38.92784057352039, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04245" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97733590183157, - 38.89484559105761, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04246" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97908384523127, - 38.894833116220404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04247" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02639767901154, - 38.981095067400275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04248" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0288833903384, - 38.937763678146176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/25/07

Report Problem", - "NAME": "H04249" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98083288837465, - 38.921401936560116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H04250" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98067174174777, - 38.92239272642099, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H04251" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98542161778325, - 38.906978389429945, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Am. Darling

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04252" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03113644506006, - 38.93969699133028, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H04253" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98611566896587, - 38.939033663996085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04254" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03331433997035, - 38.96766163233815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04255" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99519716346217, - 38.93922768088011, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04256" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1008668349851, - 38.93514558504254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04257" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07812042015287, - 38.929999574504286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04258" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99253501156616, - 38.93970739491439, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04259" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09474792286065, - 38.925101147987306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04260" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08847356192025, - 38.94557294195461, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/05/07

Report Problem", - "NAME": "H04261" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02960783569715, - 38.96906362741682, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04709" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98133325793626, - 38.935765202546136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04710" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02951095390996, - 38.941928766648175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04711" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03168001493522, - 38.96986307919653, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04712" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08620570575218, - 38.94402908447132, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04713" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96334800127977, - 38.87703422596476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04714" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94666960303068, - 38.886399110692196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04715" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9479229391661, - 38.88625808248532, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04716" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94908377507225, - 38.88723079678369, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04717" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08894004824909, - 38.958221251441046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04718" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94781466845942, - 38.89458843909273, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04719" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96462987363175, - 38.87549153693379, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04720" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04345474868755, - 38.93968831360353, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H04721" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03660890013306, - 38.9896931680321, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04722" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04905193541292, - 38.90517613320066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H04723" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0145878530758, - 38.91117582605001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/10/07

Report Problem", - "NAME": "H04724" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96222175423597, - 38.877784473568504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H04725" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0417586777392, - 38.93890300322702, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H04726" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0754331077656, - 38.923581184166196, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04728" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06248503815512, - 38.97893554241053, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04729" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10591932400739, - 38.93483667092647, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04730" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98575793368119, - 38.908047388316206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H04731" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9788424771193, - 38.9245564782839, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H04732" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96485052057069, - 38.87925030228958, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04733" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95965525867965, - 38.88194380735753, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04734" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0513405725282, - 38.90514078304257, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H04735" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9332467064806, - 38.88151653860521, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H04736" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0522189469308, - 38.90534688318145, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H04737" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02538520316195, - 38.94710572440684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H04738" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08849601566848, - 38.947844778236124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04739" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08753390764316, - 38.94797673524905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H04740" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02799126448157, - 38.88436796558133, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04741" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06343872983717, - 38.95972896131136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H04742" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09418338977535, - 38.948854748169815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/14/07

Report Problem", - "NAME": "H04743" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9822535555375, - 38.908835436045294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H05167" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00712929976308, - 38.82611988897079, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05168" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00573025749678, - 38.82611690317241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05169" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03306643291387, - 38.95634551635734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/08/07

Report Problem", - "NAME": "H05170" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04223666641778, - 38.92745394324563, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H05171" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00916853256301, - 38.82891256091074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05172" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98861263263892, - 38.93731801588514, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05173" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00364475189643, - 38.826978376800824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05174" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00557020066834, - 38.825182696460594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05175" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00693997461075, - 38.82507662936434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05176" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00264292287537, - 38.83523089468394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05177" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00265926655396, - 38.836158963522614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05178" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9654493029774, - 38.85909494392035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05179" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99541947917167, - 38.93942175545744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05180" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00518394457792, - 38.856198399578375, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05181" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00849092153655, - 38.846232382640956, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/07/07

Report Problem", - "NAME": "H05182" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0138335624993, - 38.83331050135897, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/25/07

Report Problem", - "NAME": "H05183" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95878071299619, - 38.8905559469081, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H05184" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00446434855682, - 38.83485467306831, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05185" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98070064473738, - 38.87090317606907, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H05186" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96434739419013, - 38.859063335397366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05187" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97911665830593, - 38.870830169684666, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05188" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99268594143285, - 38.86359398299059, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05189" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99297689691656, - 38.863420255542984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05190" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96458762409094, - 38.857683290936436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05191" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00303715935394, - 38.833781108862624, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05192" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96578769586216, - 38.85377464869698, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H05193" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9681256048483, - 38.858788599077045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05194" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0645403305936, - 38.919376919038314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/13/07

Report Problem", - "NAME": "H05195" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0020455299901, - 38.823886321128626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H05196" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93195920995375, - 38.89071822830916, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05197" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02916650532477, - 38.941922060850416, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H05198" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98254432863565, - 38.853448476908326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05199" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02011186226316, - 38.94416618602358, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H05200" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96456620820008, - 38.925934456168676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05626" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9345339221914, - 38.90458009550121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05627" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99327537698036, - 38.92547176950791, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H05628" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9403490305565, - 38.907592818087466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05629" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96988385465852, - 38.87231929660813, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05630" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05849582904557, - 38.963620132377606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05631" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05683875629394, - 38.94889635481614, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05632" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07470631454774, - 38.95631854170552, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05633" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96571956533501, - 38.86770608765082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05634" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02823882639538, - 38.98571573443198, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05635" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06990348187958, - 38.94781054026824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/31/07

Report Problem", - "NAME": "H05636" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05965423415002, - 38.96302593930838, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05637" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9500171134719, - 38.87048406531074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H05638" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07297220918346, - 38.95523451003682, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H05639" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02317546488578, - 38.98171452478699, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H05640" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05647123721442, - 38.98334825067811, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/14/08

Report Problem", - "NAME": "H05641" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05475400391595, - 38.984664239522836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05642" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02761001035984, - 38.985227639521696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05643" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05221476577873, - 38.979799782857256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05644" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99389121916485, - 38.947353193040755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05645" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9288845265452, - 38.879415206737704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05646" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99650758195034, - 38.95070557727821, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05647" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03503116124297, - 38.977390636854935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05648" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95799787260297, - 38.882794506682636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05649" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00388711500801, - 38.96196109243133, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H05650" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05901852522831, - 38.978825181671596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Centurion

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05651" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98977080822395, - 38.860456420343795, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05652" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95594061282378, - 38.88605500004995, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H05653" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98900499961782, - 38.8343547305701, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05656" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94108255821662, - 38.89910314008226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/08/07

Report Problem", - "NAME": "H05657" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95674945753103, - 38.884552451859854, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05658" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93686261509959, - 38.89106278639865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05659" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97477228059029, - 38.91914614560129, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05660" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00315371290615, - 38.96512307346234, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05661" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98070467320836, - 38.86959953434901, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04194" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06164374887241, - 38.920185593100506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H04195" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09668519029186, - 38.95204514070214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/27/07

Report Problem", - "NAME": "H04196" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06910828643798, - 38.97119206931057, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04197" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95830060500094, - 38.86539034084077, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H04198" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95781712760093, - 38.86357808847158, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/07/08

Report Problem", - "NAME": "H04199" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95721164437941, - 38.86541863867322, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/27/07

Report Problem", - "NAME": "H04200" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96770634890431, - 38.87085628146997, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04201" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07826486773908, - 38.946334963606006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04202" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09681384237601, - 38.94044746961238, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/07/08

Report Problem", - "NAME": "H04203" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06887535899614, - 38.94018639195672, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 04/19/07

Report Problem", - "NAME": "H04204" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0997265062579, - 38.92452685981922, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04205" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08802840957976, - 38.92419351726891, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04206" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04538189131213, - 38.98851935102793, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04207" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04576058800095, - 38.98928933297763, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04208" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04667269670925, - 38.98981420494747, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04209" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9347988590341, - 38.891965363777366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04210" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0901687791002, - 38.95708871003681, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04211" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0945298178113, - 38.95336894868246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H04212" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07044800531021, - 38.93990072956905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/19/08

Report Problem", - "NAME": "H04213" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97778103266928, - 38.90501793337816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H04214" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07264211889718, - 38.948825617158754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04215" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05602234223862, - 38.975944491008065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04216" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96767995175357, - 38.87397897382935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04217" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00866162303225, - 38.95726502079673, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04218" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09268059118425, - 38.94715814020929, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/10/07

Report Problem", - "NAME": "H04219" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09048643430907, - 38.94632451192847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/11/07

Report Problem", - "NAME": "H04220" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05338198606725, - 38.972773837283206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 01/24/08

Report Problem", - "NAME": "H04221" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99366632364934, - 38.93792124314612, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H04222" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93367273725826, - 38.89841423521351, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H04223" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0675251092381, - 38.97119434542624, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04224" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.035255624967, - 38.94904393487972, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - JUMBO

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H04225" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0512314150634, - 38.939490719849296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H04226" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01992436891082, - 38.97566503894667, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04227" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97914701395872, - 38.92350717194224, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H04744" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9499122658942, - 38.88806240322035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04745" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02728413167864, - 38.960777901397876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04746" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09399904656539, - 38.92685496105866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04747" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07658090367256, - 38.966355320287825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04748" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95357024028502, - 38.864578239839595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/11/08

Report Problem", - "NAME": "H04749" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95230956964433, - 38.86478051116998, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/07/08

Report Problem", - "NAME": "H04750" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9559998876629, - 38.89538628390953, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04751" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9658262175837, - 38.87584902205443, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04752" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97037939894082, - 38.86731902813283, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H04753" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07824447684018, - 38.956008018560574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Centurion

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04754" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94992039160039, - 38.89399085378731, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H04755" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06081324158107, - 38.97879231907476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04756" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97369548375778, - 38.868201223022595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04757" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10843436087899, - 38.9336863909948, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04758" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10699318206748, - 38.934437336503365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04759" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01967668924941, - 38.88685829074186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H04760" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96762577053877, - 38.86741520062983, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04761" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99750901976692, - 38.88077037995249, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/05/06

Report Problem", - "NAME": "H04764" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95502384391406, - 38.88685246889917, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04766" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95486526557892, - 38.88743972708472, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04767" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00872859395193, - 38.94969523285129, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 02/06/08

Report Problem", - "NAME": "H04768" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96469104600503, - 38.87758416985688, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/28/07

Report Problem", - "NAME": "H04769" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02855205962594, - 38.97003064527849, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04770" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99505654372098, - 38.92728226849169, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04771" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9772417886766, - 38.86941859853848, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 01/11/08

Report Problem", - "NAME": "H04772" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02962440022894, - 38.97088130575179, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04773" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05903720133935, - 38.96599972284117, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/05/07

Report Problem", - "NAME": "H04774" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97998940789428, - 38.93713361993313, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/16/08

Report Problem", - "NAME": "H04775" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09919507306482, - 38.939543112010114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/30/08

Report Problem", - "NAME": "H04776" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09449979472652, - 38.93943357875536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/07/08

Report Problem", - "NAME": "H04777" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02732498134701, - 38.93460823862935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H04778" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9535358853864, - 38.89080012318996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04779" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03780987553274, - 38.989459356416575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04780" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00579923830666, - 38.835739803389906, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H05201" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00371946252882, - 38.834567131188045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05202" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01283407284744, - 38.92336057324921, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/15/06

Report Problem", - "NAME": "H05203" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03653525833982, - 38.959240711942556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05204" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93828125126588, - 38.88836631040014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05205" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94560764270386, - 38.88071570756369, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05206" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0348088871785, - 38.92990507593924, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H05207" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96577227535872, - 38.852200943189345, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H05208" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01241513610991, - 38.82444685246901, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05209" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96849001615604, - 38.9318196197282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H05210" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00199450898634, - 38.837294330382896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05211" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93505722563116, - 38.89569791888897, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05212" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9362105201997, - 38.895836679653705, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05213" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96550478615704, - 38.85052243999966, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05214" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96503674379574, - 38.85402611276057, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05215" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96423542673692, - 38.85324732539318, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05216" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01770081346389, - 38.90378448904728, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/01/07

Report Problem", - "NAME": "H05217" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98642395410391, - 38.93623448035742, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05218" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96052825924822, - 38.864347129993874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H05219" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92564951238235, - 38.90195138388131, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05220" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92456229178582, - 38.90175630453846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05221" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9254613149737, - 38.90274042311545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/07/07

Report Problem", - "NAME": "H05222" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92509054856161, - 38.903601817241025, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05223" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04085137133464, - 38.90584208678454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05224" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93750850862496, - 38.882491865774114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05225" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93068863045525, - 38.89556242700819, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05226" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00141409943355, - 38.83600082378851, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05228" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94640778739509, - 38.90305166260014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/15/08

Report Problem", - "NAME": "H05229" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94869554404856, - 38.905146149868784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H05230" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94537330103947, - 38.90171921693423, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H05231" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94712564157969, - 38.90384841830326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H05232" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.946607499322, - 38.90155703351813, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H05233" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00600288044966, - 38.84130445832689, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H05234" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98114646464356, - 38.91605190556484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H05235" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94287490400488, - 38.90712267350573, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05662" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01034760222493, - 38.95877074056332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05663" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01230036121824, - 38.960061326685185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05664" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98814953415919, - 38.95022091519498, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05665" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95244149542405, - 38.87016857649753, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05666" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96218175081448, - 38.88028802801066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05667" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94305607932144, - 38.88356448428447, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05669" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94272313419559, - 38.88259671260365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05670" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97617057208338, - 38.86880775897308, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H05671" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96980100108885, - 38.874002945408684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05672" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05361170579698, - 38.970433797478094, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05673" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01063281968676, - 38.82694035699557, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05674" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02836162436662, - 38.97217998495807, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05675" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99566510427299, - 38.93473681092047, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05676" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99500715481591, - 38.95026638750952, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05677" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96376926850891, - 38.87507972443926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05678" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08275870237559, - 38.9280337317338, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05679" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07132502981375, - 38.94719806432574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05680" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92356977747968, - 38.888590585229444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/19/08

Report Problem", - "NAME": "H05681" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9239844800327, - 38.88958973194141, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05682" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93152743481679, - 38.9072525643163, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05683" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93156072379776, - 38.90477344051688, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H05684" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9316114662494, - 38.90617672826469, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05685" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95504665549971, - 38.888734346080106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H05686" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01583536907275, - 38.922206302223074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H05687" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9484549342919, - 38.86537084314752, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05688" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08386979272295, - 38.94883387487236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05689" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01979012898339, - 38.90165210156631, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H05690" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96492961009135, - 38.870679114009285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05692" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94558037241048, - 38.868583722155954, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05693" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93695746773983, - 38.87642792110413, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H05694" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99488631513977, - 38.94812984447875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05695" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98212065187695, - 38.856913847015655, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/15/08

Report Problem", - "NAME": "H05696" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9806719167034, - 38.85716015875724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/17/08

Report Problem", - "NAME": "H05697" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97629867199124, - 38.89483945770751, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04262" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0904854345653, - 38.94557323067019, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/05/07

Report Problem", - "NAME": "H04263" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9788463345116, - 38.925509315744556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H04264" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02233949754955, - 38.96327319189262, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04265" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0110243299574, - 38.9544901684508, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04266" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93653834821622, - 38.89527011476603, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04267" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98374999306267, - 38.94417422749809, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/30/08

Report Problem", - "NAME": "H04268" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98428258754907, - 38.91389620669501, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H04269" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98375946413988, - 38.91297998731711, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H04270" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02003355633056, - 38.963280365897624, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04271" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03356650983973, - 38.93516200159843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H04272" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08886788354216, - 38.95042290013256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/27/07

Report Problem", - "NAME": "H04273" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97316242368191, - 38.92456130244601, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H04274" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01428853437034, - 38.87209712278843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H04275" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9800113302975, - 38.90258971143001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/13/08

Report Problem", - "NAME": "H04276" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09569559804243, - 38.95295278191371, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/30/07

Report Problem", - "NAME": "H04277" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97891824649129, - 38.872158206939616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H04278" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03618701845232, - 38.96159082217777, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04279" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08458923913511, - 38.95599695218664, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04280" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03955123466933, - 38.899050675625894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H04281" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09806031173513, - 38.94030658579882, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/25/08

Report Problem", - "NAME": "H04282" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95884187487074, - 38.858464752401, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H04283" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08790548220217, - 38.92493654414663, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04284" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0793235956426, - 38.94784298423143, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04285" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95742892119048, - 38.89469289888812, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04286" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02277592797219, - 38.90969439226076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H04287" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99513038726887, - 38.92947343528527, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04288" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03461038972091, - 38.96865291030881, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04289" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98358587383679, - 38.8776666459264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 11/16/06

Report Problem", - "NAME": "H04290" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9771435514052, - 38.8920544725174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 04/07/06

Report Problem", - "NAME": "H04291" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06649009396924, - 38.9753302589748, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04292" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0637492159216, - 38.97594659690241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04293" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05934972355695, - 38.95076222548684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04294" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00659859114509, - 38.84027830074792, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H04295" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05686011552427, - 38.96608544323306, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04781" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96585600154377, - 38.86863671429712, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04782" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0125357042885, - 38.887465764552516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04783" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01538318188119, - 38.88632222485084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04784" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0161663973331, - 38.88744951777013, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/29/07

Report Problem", - "NAME": "H04785" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01494850837497, - 38.8874505988401, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H04786" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09845736050742, - 38.93294031600649, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04787" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97502968442616, - 38.8674006683606, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04788" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01608979094676, - 38.896276183107496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04789" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98177643958206, - 38.944293377338155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H04790" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93498335865014, - 38.89421668576057, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04791" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98288708280418, - 38.93498700615731, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04792" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08607993527309, - 38.943273615885936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04793" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07873995641353, - 38.950003321020475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04794" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02149414163907, - 38.958590498905714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H04795" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99236681735826, - 38.925453552930406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04796" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95490660185635, - 38.89080808329124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04797" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95397626395426, - 38.8919068681121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04798" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96483366750157, - 38.868664526134815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04799" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01356702678221, - 38.88513919904141, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04800" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09432638422177, - 38.92619960331468, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04801" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04477042354836, - 38.990204598322485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04802" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04402642731336, - 38.98881321227033, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04803" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98188930205934, - 38.921950883086794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H04804" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1075264479778, - 38.93253440034168, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04805" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10600435734776, - 38.93401833324635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04806" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10682858019072, - 38.933180269511496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04807" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01882920423077, - 38.88613034612367, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04808" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04371450679095, - 38.93889600935824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H04809" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97723976230432, - 38.86890736202704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/22/08

Report Problem", - "NAME": "H04810" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09638027028329, - 38.93233851756908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04811" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97925664619731, - 38.91614165067249, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04812" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09118233938017, - 38.91522106278821, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/06/06

Report Problem", - "NAME": "H04813" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10116194205156, - 38.93060223234202, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04814" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9303940267273, - 38.90172544067324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05236" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92951698417788, - 38.90189109201884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05237" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06288884747777, - 38.904678035720075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H05238" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9364149049863, - 38.88347047825336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05239" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93947277033521, - 38.88324683923172, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05240" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93647852547285, - 38.88211158853302, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05241" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93935861335437, - 38.8819007826926, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05242" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93443518869493, - 38.883031377885494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05243" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92865174745543, - 38.9025822465212, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05244" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92747818794447, - 38.902586451492354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H05245" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9309017060856, - 38.9021063812049, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05246" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93003672678589, - 38.902546104828836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/06/07

Report Problem", - "NAME": "H05247" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92170897094678, - 38.89140887595691, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05248" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96802578021132, - 38.85061429603089, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05249" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92387292178395, - 38.891581735669874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H05250" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92635607441318, - 38.902663545716806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05251" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9578530667068, - 38.869293335316804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05252" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93359707132907, - 38.88880021537058, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H05253" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9324124946202, - 38.88867692289541, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05254" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95725594448804, - 38.87023566789262, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05255" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03838650996451, - 38.962697226149494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05256" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98644082862975, - 38.85799525046285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H05258" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98582125384355, - 38.857586788961164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05259" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98430953085037, - 38.8448852982181, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05260" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98337802145222, - 38.843656030133, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05261" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99198662394896, - 38.8400376054999, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05264" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98337984701934, - 38.84452283193394, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05265" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9914789427159, - 38.839289597868145, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05266" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93306402106003, - 38.88822386130041, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H05267" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93242678527895, - 38.88774198746146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H05268" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92035748611644, - 38.89724381926335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05269" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0088456648001, - 38.83144995497134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05270" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9410254124569, - 38.870184043356524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05271" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98345012991754, - 38.91272970130136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05273" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9611430508945, - 38.89188019478629, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H05698" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03233738400814, - 38.98895822241572, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05699" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03097565893982, - 38.98792329589722, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05700" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03376492782296, - 38.99005990971443, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05701" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98943312180798, - 38.95014586421363, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05702" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08219976296907, - 38.948887858583475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05704" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0319358274213, - 38.98635414115788, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05705" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0335241596069, - 38.97159383131471, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05707" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03476667517141, - 38.971438229577046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05708" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99503072862606, - 38.94638695587887, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05709" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99370432607566, - 38.94631697870379, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H05710" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08629893217942, - 38.93336432591368, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05712" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00012675472678, - 38.83314198908348, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05713" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9901220467203, - 38.946316343537376, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05716" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00049214456863, - 38.828184351260866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05717" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0658859245943, - 38.946340541976284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 11/10/05

Report Problem", - "NAME": "H05718" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99851523626316, - 38.88595656932109, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05719" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94043409618848, - 38.88181536008358, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05720" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94192741713624, - 38.88169605734088, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05721" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96077971341751, - 38.870469609705395, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05722" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00884101931524, - 38.82611497934236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05723" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93932168730257, - 38.894205651412484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H05724" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98572787577514, - 38.95051566560656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05725" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94550149027835, - 38.882776336084426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05726" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02000699786812, - 38.95852309279095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H05727" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02948826363551, - 38.972212099908646, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05728" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95110307371986, - 38.87083133069295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05729" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93396656142461, - 38.87653301777632, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05730" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92220923662668, - 38.89278116759077, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05731" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9328585698703, - 38.87560290845916, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05732" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09061089296013, - 38.93438101911093, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05733" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09212141324365, - 38.93386459924006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP. Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05734" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07126218221987, - 38.948917098772036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05735" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03289550087862, - 38.98840417027071, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05736" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01027710768506, - 38.95229484042292, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04296" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98122810421337, - 38.901151152765806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H04297" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98171557244987, - 38.900737575326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H04298" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9761287016126, - 38.92070956431243, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H04300" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05954573933394, - 38.918957593692156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/16/07

Report Problem", - "NAME": "H04301" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02176840872563, - 38.89261007344565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04302" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03131990863113, - 38.96751528610002, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04303" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08611182143484, - 38.957963615336816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04304" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08608986765046, - 38.95888246537479, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04305" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0465833849777, - 38.89193533793445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H04306" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02815146221539, - 38.916273712339546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04307" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08747813340375, - 38.94473522676658, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/10/07

Report Problem", - "NAME": "H04308" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9672181997991, - 38.856638451212675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04309" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96587863380492, - 38.854824986176325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04310" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97228764298929, - 38.89912194388076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H04311" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97319135223879, - 38.898962607690265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H04312" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95705040163853, - 38.86812983209164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04313" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97633078373637, - 38.892139917208574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H04314" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97229124573204, - 38.899581380099804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H04315" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97391305318305, - 38.90025392122386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H04316" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97305286307991, - 38.9002522486052, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H04317" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97387747425165, - 38.898970852636126, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H04318" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97249705180883, - 38.90025359644827, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H04319" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97425567826107, - 38.899598558041674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H04320" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95579798736269, - 38.86762338936386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/03/07

Report Problem", - "NAME": "H04321" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95468059783182, - 38.86816171800891, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04322" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95332267355158, - 38.86753025207011, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04323" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9568332769575, - 38.863627086006616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H04324" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97523601674682, - 38.89209940481035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 10/30/06

Report Problem", - "NAME": "H04325" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96382012456583, - 38.86814730499983, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04326" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97766991656334, - 38.9043168192467, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H04327" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98289673383327, - 38.90413014745225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04328" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03352424401162, - 38.960930995563075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/04/08

Report Problem", - "NAME": "H04329" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93504453813388, - 38.87850040747153, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04330" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01048054324256, - 38.962561889119925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04815" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04230630246788, - 38.93797335741091, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/15/07

Report Problem", - "NAME": "H04816" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98235356028253, - 38.90507356534147, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04817" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95399246174316, - 38.88882855960629, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H04818" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97982852386657, - 38.944285868830015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/04/08

Report Problem", - "NAME": "H04819" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95591473597428, - 38.88883622838039, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04820" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0629606529764, - 38.968891466935894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04821" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06162612771428, - 38.9688507128994, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04822" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06290777956663, - 38.96832918281929, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04823" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96486785207344, - 38.87494706010085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04824" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95206526528843, - 38.86434070138106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H04825" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95050417296946, - 38.86435488694021, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H04826" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06127772997033, - 38.97392092168366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04827" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96557648871925, - 38.87859105014223, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04828" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09244340732056, - 38.94037395071902, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04829" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09253964154384, - 38.939485296207536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H04830" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00639208759462, - 38.945527586772194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04831" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9772997499416, - 38.850872496423754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04832" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00510200670918, - 38.94485390271116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04833" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97778767040835, - 38.85019668738738, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/20/07

Report Problem", - "NAME": "H04835" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98226160034953, - 38.943478012981686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H04836" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9775940856554, - 38.851591876752565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04837" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97685288199948, - 38.85150299907287, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04838" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04679212788085, - 38.89519037494254, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H04839" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9609489954562, - 38.87581313498984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04840" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0550539948318, - 38.920829924994095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 01/08/07

Report Problem", - "NAME": "H04841" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9484752575433, - 38.890959214420675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04842" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11029411056718, - 38.934413936461496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04843" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06095431839367, - 38.97993945193936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04844" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05909324581968, - 38.90391971215852, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H04845" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10833393295695, - 38.93513332643349, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04846" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9481476171759, - 38.896103911862824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04847" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98908278252829, - 38.94739041641569, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H04848" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05725204536952, - 38.91690411086289, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/15/06

Report Problem", - "NAME": "H04849" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0086347806207, - 38.94873698448273, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER

In Service


Last Inspection Date: 02/06/08

Report Problem", - "NAME": "H05274" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9151970773889, - 38.89576895849258, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H05275" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92836901623804, - 38.899910770701474, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05276" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9266768909645, - 38.89965980193343, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H05277" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92655942098412, - 38.9018863965856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05278" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92706772927086, - 38.90074253628703, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05279" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92758054670871, - 38.89967183325459, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05280" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92534275675774, - 38.89979717225478, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05281" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9285483519885, - 38.90188702639059, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05282" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92595020926296, - 38.90049781482274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05283" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93480902357527, - 38.890390921721355, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05284" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91351965296808, - 38.89191623514586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05285" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93598596323984, - 38.889517075465626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05287" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93392335669337, - 38.907273266806925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05288" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9367220178332, - 38.88830081395822, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05289" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92867621961119, - 38.903623032888554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H05290" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09552477576537, - 38.94024813160729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05291" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09426367753699, - 38.940075799739446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER

In Service


Last Inspection Date: 01/25/08

Report Problem", - "NAME": "H05292" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97287133756159, - 38.89558910897122, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H05294" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96902163373117, - 38.854331272649816, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05295" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.967088970468, - 38.934040960738464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/15/07

Report Problem", - "NAME": "H05296" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92846888637392, - 38.88496376952767, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05297" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97519429396318, - 38.90242945718334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H05298" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05440870726223, - 38.96566845570264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05299" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97487775240677, - 38.88760413114976, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/19/06

Report Problem", - "NAME": "H05300" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93415839450266, - 38.887576528550326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05301" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9336593931824, - 38.88658273883309, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05302" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93436797381392, - 38.88854282226661, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H05303" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93613901588651, - 38.88890764338561, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05304" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99592603498617, - 38.93572255352629, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05305" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93462983507179, - 38.90155689094681, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H05306" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93299997139876, - 38.890308372267484, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05307" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0088390651903, - 38.8728493324782, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H05309" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0295248923983, - 38.93628486892012, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/20/07

Report Problem", - "NAME": "H05310" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07035971154083, - 38.90509822197174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H05737" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97436366308231, - 38.94280496191465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05738" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97864195455291, - 38.94531412479575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05739" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98166022114894, - 38.9462204200308, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05740" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97989561748804, - 38.94611237281481, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H05741" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99381000078833, - 38.924438752237336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/16/07

Report Problem", - "NAME": "H05742" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06449466562998, - 38.95418540939227, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05743" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08564797152272, - 38.91071987267789, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05744" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98796625713597, - 38.911334501654174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05745" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01724901856186, - 38.91439918725036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H05746" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97702753567869, - 38.94531302595674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H05747" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97313451138933, - 38.849455386990826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05748" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97260941626118, - 38.8501174841393, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H05749" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0179778651603, - 38.92131584384434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/11/07

Report Problem", - "NAME": "H05750" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00198003624556, - 38.848705500282136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H05751" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0780977113417, - 38.90609660195239, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05752" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07951067926409, - 38.90606327289221, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H05753" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03508935807288, - 38.9898523943052, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05754" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99791166927842, - 38.95173467076874, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05755" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9965218224642, - 38.95132050040647, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05756" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97826170270852, - 38.946091928872214, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/16/07

Report Problem", - "NAME": "H05757" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94164428733507, - 38.88262713136998, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05758" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97608265535031, - 38.88931999349269, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 04/14/06

Report Problem", - "NAME": "H05759" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97914778326177, - 38.94063437507967, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H05760" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00924258351668, - 38.91912185663241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05761" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05901463357367, - 38.967103298526446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05762" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98275298093917, - 38.86173944750236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05763" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06130203909844, - 38.967488332270186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05764" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06262930649754, - 38.97774780274344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, Metropolitan M94

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H05765" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94176091398215, - 38.88391056942392, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05767" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0025980426277, - 38.96196307396218, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05768" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00614357416043, - 38.964232903626396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05769" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98190085126755, - 38.94700821364279, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/27/07

Report Problem", - "NAME": "H05770" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.040165588548, - 38.991800892890765, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05771" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02386224128482, - 38.90101687322729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04365" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0238571062221, - 38.90158808516398, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04366" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02123570865538, - 38.96439680742797, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04367" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07221776230718, - 38.918431902807164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04368" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95351893723814, - 38.86244512545276, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04369" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95463284581349, - 38.86292382948282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04370" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95372497712366, - 38.86162581952653, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04371" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00735747981291, - 38.959767784758185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04372" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02441928182391, - 38.97511031579954, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04373" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97613620327186, - 38.94167751755087, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04374" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97322822777984, - 38.93825700669867, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04375" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96285676230137, - 38.86735187524944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04376" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00217722399313, - 38.88765774589491, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/31/08

Report Problem", - "NAME": "H04377" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00339064057852, - 38.88781671484649, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H04378" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97149250447177, - 38.918687011754336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04379" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0825464276259, - 38.94542507355292, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04380" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09236264564747, - 38.9267015749324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04381" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09030910561266, - 38.92658108107922, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04382" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98365764013333, - 38.90714281958733, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H04383" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02004747216087, - 38.95651376614207, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H04384" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98020881351526, - 38.904424836640914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H04385" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08459157191788, - 38.9133799320576, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04386" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09076131242598, - 38.94711726209218, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/10/07

Report Problem", - "NAME": "H04387" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05986733497306, - 38.97765295124391, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04388" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97231363763498, - 38.93836192945532, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04389" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02691046330943, - 38.90476890201847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H04390" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02714731890651, - 38.90787070991565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04391" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02691275462516, - 38.909161218613555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04392" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99464600354275, - 38.937453680503125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04393" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96296153660478, - 38.870422838808324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04394" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01524085879905, - 38.972382918269226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04395" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01440727061679, - 38.97225233246718, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04396" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9624059419235, - 38.92319363081205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H04397" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97229847213681, - 38.91413216952943, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04398" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05931863197713, - 38.91826539202323, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H04850" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95448704807538, - 38.887707516551636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H04851" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04861636578171, - 38.90728637703005, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H04852" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08363180478528, - 38.94785202562629, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04853" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9525854579913, - 38.88936693210724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04854" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98084271778794, - 38.87184791076097, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04855" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0642135618758, - 38.9729661401513, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04856" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98683426395263, - 38.919508298035446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04857" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94251619274606, - 38.89763623886089, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04858" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10153543582629, - 38.922603258865564, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04860" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97620680310852, - 38.84941120959343, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04861" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97969958896098, - 38.84910341132716, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/15/07

Report Problem", - "NAME": "H04862" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97975239460152, - 38.84963817932627, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04863" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97826355906706, - 38.85117125540655, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04864" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97879500907135, - 38.84955865403297, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04865" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97866550086144, - 38.84805480688819, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04866" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0436009035287, - 38.9422341734002, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H04867" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97911079445437, - 38.85074704975445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H04868" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94471477686481, - 38.8666374447389, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04869" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02827668839237, - 38.932767075462706, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H04870" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98043312064672, - 38.94518942137881, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/31/08

Report Problem", - "NAME": "H04871" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9816084484277, - 38.94514979558932, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04872" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97710609557588, - 38.90575544280286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/24/07

Report Problem", - "NAME": "H04873" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0118262027984, - 38.83095155904082, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04874" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97746325873652, - 38.92552507400033, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H04875" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99016027324167, - 38.94533323694629, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04876" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98514814923617, - 38.87997940840418, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 03/05/07

Report Problem", - "NAME": "H04877" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93139114543416, - 38.876532632192315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H04878" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0153283638076, - 38.90037609882181, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H04879" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01509757805228, - 38.901239850171095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H04880" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95217036320625, - 38.89255269150732, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04881" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01106464885362, - 38.97238290152446, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04882" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95298829788665, - 38.89291631315321, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04883" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10579397560643, - 38.93571591403128, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H04884" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97423145903142, - 38.90135000271714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H05311" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96991943770166, - 38.85821775178569, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H05312" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0063048064685, - 38.908188490305065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H05313" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97432974842071, - 38.93316629444106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/12/07

Report Problem", - "NAME": "H05314" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94177214756726, - 38.90970416449285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H05315" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9490782045424, - 38.89497117674824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05316" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93009665441133, - 38.893556261630565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05317" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92839610634294, - 38.89589219188854, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05318" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92755893154089, - 38.89602770208981, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05319" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9288997421302, - 38.893731427693766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05320" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93010694342054, - 38.89291397086683, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05321" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92900280425049, - 38.89294622159397, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05322" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9279548618616, - 38.89685607711352, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05323" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00476611472676, - 38.83369324561206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05324" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99191676134575, - 38.832941027768875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H05325" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97747003444422, - 38.88969819771228, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/01/06

Report Problem", - "NAME": "H05326" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0205995511198, - 38.87397770175878, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05327" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0161056881362, - 38.89883203353696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H05328" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94696630937725, - 38.883633419712204, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05329" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94679439594358, - 38.88483676268073, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/29/07

Report Problem", - "NAME": "H05330" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9452629422241, - 38.88370139485717, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05331" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9803102195726, - 38.847088184039535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05332" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99851284750505, - 38.889966153157346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05333" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05816191390761, - 38.90294589892776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H05334" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0874610737096, - 38.948873311928736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05335" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05614455808113, - 38.90168653569009, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H05336" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97601597100676, - 38.903046214579554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05337" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97305968877532, - 38.90318007400636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H05338" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97407695757303, - 38.90296151826522, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/05/07

Report Problem", - "NAME": "H05339" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06405084205406, - 38.9028839671798, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H05340" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9800871536211, - 38.940791427270284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/15/08

Report Problem", - "NAME": "H05341" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00670052175994, - 38.94352657740833, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05342" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9962431356938, - 38.87667208617181, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 11/16/06

Report Problem", - "NAME": "H05343" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09535810201993, - 38.91645696159477, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05344" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98322197200405, - 38.9470769637264, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05772" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9444277021068, - 38.86966536842158, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05773" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98308202550764, - 38.94627435983034, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05774" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05273431036878, - 38.94075003242173, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/18/05

Report Problem", - "NAME": "H05775" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08209134976842, - 38.949611813063065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05776" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03501679279307, - 38.99094057082654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05777" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00452760675826, - 38.94333874189808, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05778" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97408502324092, - 38.85023320107571, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05779" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99698976744763, - 38.94636125004855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05780" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99713676371535, - 38.947298340058076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05781" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94630245638086, - 38.90553917184205, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 09/07/07

Report Problem", - "NAME": "H05782" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09898332968342, - 38.93083426915807, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05783" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97106736384829, - 38.92112225421891, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05784" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99619621948037, - 38.95191316246679, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/17/08

Report Problem", - "NAME": "H05785" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0699158929287, - 38.95838294662499, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05786" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97123180688277, - 38.852939441074504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05787" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97021993443934, - 38.852956762797184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, ASECOND

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05788" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97221823730892, - 38.85308055383485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05789" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93751544091515, - 38.90156901873582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05790" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02643630313452, - 38.940985794020946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H05791" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9486886236881, - 38.893194213513155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H05792" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01196468484497, - 38.81611175080019, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05793" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01229113167126, - 38.81695207326778, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05794" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01609466839653, - 38.81595966846284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05796" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01258370061352, - 38.81774323007814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05797" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97737109913541, - 38.90024694909009, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H05798" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0182686576767, - 38.922573045286946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H05799" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9630785749578, - 38.873773470346734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05800" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94177209820324, - 38.9071659817418, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05801" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9396499317961, - 38.86937125964632, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05802" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91998507261452, - 38.901034419180235, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05803" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93676555665591, - 38.87566850844981, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05804" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99699130726087, - 38.9383029133492, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05805" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98947972607715, - 38.86706854419742, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05806" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0309611201911, - 38.885037349718445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04331" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03047903121914, - 38.88503654865234, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04332" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9574374066653, - 38.893647282596596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, USP

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04333" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98357835851769, - 38.878723887905146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04334" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98434653911396, - 38.942615794350445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04335" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98831041513479, - 38.92302299842862, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H04336" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98498477435501, - 38.921753751284506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H04337" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98661194285748, - 38.922992106824246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H04338" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9846218213071, - 38.92359055484959, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04339" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98576120888207, - 38.922308671042686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04340" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9860849098168, - 38.922291621248704, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04341" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0051566762043, - 38.96530814879601, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04342" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94080412483069, - 38.89683436005604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H04343" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98592404782501, - 38.940661475493464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04344" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05624142405397, - 38.95292641422097, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04345" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09416858043568, - 38.947031880036064, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/31/07

Report Problem", - "NAME": "H04346" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07376141114568, - 38.94223943650632, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04347" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07891053737639, - 38.92465313021852, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04348" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08037814241008, - 38.92355520464714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04349" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07890915879342, - 38.92356363764547, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04350" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08749212856794, - 38.95041450615786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/05/07

Report Problem", - "NAME": "H04351" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97990377268994, - 38.86414929282362, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04352" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97408323423807, - 38.91414852377485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04353" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97426356969697, - 38.89817544599551, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04354" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03405383232327, - 38.941957330896415, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H04355" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97616749101634, - 38.926721625727005, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H04356" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04497583457153, - 38.93137702251578, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 12/21/07

Report Problem", - "NAME": "H04357" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05915305751323, - 38.976822630001095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04358" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9740456833249, - 38.92456220459464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H04359" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9587956842141, - 38.86054217742242, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04360" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95884183504249, - 38.85933304729061, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H04361" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00058788315079, - 38.846502889142755, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04362" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91214730248898, - 38.89293112152528, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04363" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92862122237243, - 38.89961864877854, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H04364" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03840727415464, - 38.91671801912763, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H04885" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9473117957653, - 38.89095836211015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04886" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97885248960094, - 38.87072844428013, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04887" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93613071799646, - 38.893786277214275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H04888" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98448314505494, - 38.921488444689565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H04889" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98801214318598, - 38.92013571958857, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04890" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07056514361017, - 38.94227044340879, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04891" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00299066434559, - 38.837933116584274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04892" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03559190455715, - 38.939989849360686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H04893" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00075038632602, - 38.91634001521385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H04894" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03145707447457, - 38.96903239044914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/13/07

Report Problem", - "NAME": "H04895" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97639695820709, - 38.90179577036829, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/20/07

Report Problem", - "NAME": "H04896" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.976398620421, - 38.900918293715435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H04897" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99254332655114, - 38.946338512270465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/16/08

Report Problem", - "NAME": "H04898" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03811370522907, - 38.93988385545386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H04899" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03297633060127, - 38.943087450299835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H04900" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92434839294593, - 38.890841907425056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04901" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93156657096162, - 38.89988049165386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H04902" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96949114713723, - 38.86121884139694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H04903" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01234482122938, - 38.82518999581628, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H04904" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97698528805732, - 38.89691055514364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H04905" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06114871389445, - 38.926249688224246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/20/06

Report Problem", - "NAME": "H04906" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98150025790616, - 38.938211873579334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H04907" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01237917558967, - 38.8304484060221, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04908" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06231079797175, - 38.95512007551095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04909" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98696883526245, - 38.90145697512101, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/12/07

Report Problem", - "NAME": "H04910" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97441014735803, - 38.897081610737494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H04911" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97453502596304, - 38.89621305154919, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/26/07

Report Problem", - "NAME": "H04912" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09454369663428, - 38.93818203834453, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/09/08

Report Problem", - "NAME": "H04913" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94796489846615, - 38.866243694209345, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04914" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94738967034276, - 38.8668550986476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04915" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95598577737442, - 38.88770828910662, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H04916" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01016811902291, - 38.83153291428178, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H04917" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98278215240266, - 38.92551126808792, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 08/06/07

Report Problem", - "NAME": "H04918" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0577719928952, - 38.924541798572356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/09/07

Report Problem", - "NAME": "H05345" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96954064114924, - 38.86103968586152, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05346" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05740648369145, - 38.92609225625718, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/14/06

Report Problem", - "NAME": "H05347" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97914189542227, - 38.92669498932551, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H05348" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08634685875595, - 38.955396662533744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05349" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08757434872217, - 38.955391848961035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05350" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96712309472149, - 38.93502505523588, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/09/08

Report Problem", - "NAME": "H05351" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92186662069173, - 38.88554860682302, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/22/08

Report Problem", - "NAME": "H05352" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92386005341119, - 38.88513788880113, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05353" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9225453130617, - 38.884281912300864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H05354" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92066654003027, - 38.88545204773908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H05355" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91974921498726, - 38.885938972864516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05356" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92357400635332, - 38.886407469780586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H05357" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9210566474298, - 38.88621966425954, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05358" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00098222088296, - 38.96206913484772, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05359" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9919239798893, - 38.91870514578134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H05360" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99993764162818, - 38.96206290524546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05361" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98739055205115, - 38.85863509008467, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05362" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98323137150355, - 38.84517784164617, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05363" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02552618625118, - 38.949887314626295, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H05364" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93675533019515, - 38.896725146781314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05365" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0850027940398, - 38.94784311851121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05366" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94564186751613, - 38.88541170555154, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H05367" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92092086297211, - 38.88406431617301, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05368" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98960940359626, - 38.84317286248802, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H05369" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98864008467258, - 38.84392943653786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H05370" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98861860163672, - 38.84313363739907, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H05371" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97068665118475, - 38.846013015585534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05372" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97167229974202, - 38.84561624787174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05373" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96913184562084, - 38.84758237166778, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05374" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97075567496486, - 38.84798369233439, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/06/07

Report Problem", - "NAME": "H05375" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9767221824855, - 38.940356182585624, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05376" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9691593493674, - 38.848208087115324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05377" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96973286725274, - 38.8466519121057, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05378" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99659571186065, - 38.93734830243366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05807" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05351941905525, - 38.96411241174244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H05808" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9959949192952, - 38.92395748803602, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H05809" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0871016481261, - 38.91057372766045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05810" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08675180379811, - 38.90985009527403, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H05811" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00847076962663, - 38.95133610883429, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05812" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97228215091027, - 38.85225696410726, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05813" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03425324628465, - 38.940871260223894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H05814" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98318373089532, - 38.88140054879152, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/17/06

Report Problem", - "NAME": "H05815" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03334164924286, - 38.961437951302145, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05816" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0004982191329, - 38.89001893261946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/31/08

Report Problem", - "NAME": "H05817" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99273663493335, - 38.88277421355622, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/07/06

Report Problem", - "NAME": "H05818" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00894081891772, - 38.96573501067958, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05819" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05596680396104, - 38.98036025073512, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05820" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07892673383769, - 38.94968483351879, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05821" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06711790133738, - 38.90598078578831, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H05822" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98517476886573, - 38.91033622779275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H05823" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98129246261607, - 38.908597474827275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H05824" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9875644529908, - 38.909119560540795, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/23/07

Report Problem", - "NAME": "H05825" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93712208021883, - 38.873932007474636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05826" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97906720321647, - 38.91658547541989, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05827" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98026894614443, - 38.91547739838723, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H05828" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0186679307301, - 38.892596908355785, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05829" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10064765578079, - 38.92938469821102, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05830" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0236986182379, - 38.96205190077656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05831" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.1007062161376, - 38.92835298836681, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05832" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95786983807483, - 38.89670973468568, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H05833" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0335914887838, - 38.98666253285324, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05834" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03471781215059, - 38.9869926971265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05835" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0217395748448, - 38.90969228354792, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H05836" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97135059646807, - 38.923492755895694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05837" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03067991802416, - 38.94712500264623, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H05838" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0120939886857, - 38.900055447565144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H05839" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0055739769854, - 38.82266215248173, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05840" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02407027214022, - 38.91185201786605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H04399" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08374470896311, - 38.94331697552041, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H04400" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09453904984362, - 38.946333763235046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/11/07

Report Problem", - "NAME": "H04401" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03533219868035, - 38.967611017276596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04402" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06620260835496, - 38.92438530238908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H04403" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91859154435178, - 38.89277355859029, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04404" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06095871131957, - 38.95453232319597, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04405" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07389642351586, - 38.91948788178545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 11/08/07

Report Problem", - "NAME": "H04406" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08859736665035, - 38.91367495927595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04407" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0871231148422, - 38.91333775057115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04408" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01905079226289, - 38.89196386434339, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/28/07

Report Problem", - "NAME": "H04409" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03168970613166, - 38.90267357666231, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H04410" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03479404406004, - 38.902677332668766, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/21/07

Report Problem", - "NAME": "H04411" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99564140493116, - 38.90563778451744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H04412" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9949250983879, - 38.9055222595509, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H04413" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08884018472197, - 38.95108008402275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04414" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95502807202708, - 38.87048948077753, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/26/07

Report Problem", - "NAME": "H04415" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02377866844559, - 38.91117320907044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H04416" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9903194852121, - 38.86574497494948, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H04417" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99363369104861, - 38.936910222274584, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H04418" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06290405827463, - 38.97689870189981, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04419" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03484495968459, - 38.98042754470442, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04420" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98079828008791, - 38.8608934140115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04421" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07185859100335, - 38.91741512859899, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04422" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02224439440603, - 38.956275109245084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/11/07

Report Problem", - "NAME": "H04423" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98350147003177, - 38.904373540988374, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04424" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0647939005297, - 38.94649504084284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H04425" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09009388374997, - 38.933534511848876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H04426" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09275545468826, - 38.94632167961499, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 12/10/07

Report Problem", - "NAME": "H04427" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06467210033686, - 38.957932434728, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H04428" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06340072761463, - 38.955270954553875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04429" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0924177019822, - 38.94483625543618, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/27/07

Report Problem", - "NAME": "H04430" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95852894111589, - 38.876824916550774, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04431" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95747343705025, - 38.89287971951555, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H04432" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95701109105642, - 38.8888371955463, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04919" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04675340907951, - 38.89287132091371, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H04920" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01997645054664, - 38.88616846818783, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H04921" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96487808535504, - 38.92734886480327, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H04922" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95054040186743, - 38.86322085076671, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04923" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9691513800051, - 38.87542052644, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H04924" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95208064969906, - 38.86311931957265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/26/07

Report Problem", - "NAME": "H04925" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08016157894583, - 38.94403834902647, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04926" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05771436921889, - 38.96656424545901, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04927" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06487812403492, - 38.90327332026708, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/01/07

Report Problem", - "NAME": "H04928" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06342198075382, - 38.90275895898322, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H04929" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0198025472746, - 38.895596724314856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/06/08

Report Problem", - "NAME": "H04930" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0061156075087, - 38.94692006560282, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04931" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0200057987405, - 38.90130658536127, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04932" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0199969625686, - 38.90272661898074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/07/08

Report Problem", - "NAME": "H04933" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02001930809196, - 38.89850635272143, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04934" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0200059632849, - 38.90098895967974, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04935" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02001053326973, - 38.89997850940823, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04936" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02002984357406, - 38.896737117527046, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04938" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0197983043954, - 38.900329168894444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H04939" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01979705027189, - 38.904907358966696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/29/08

Report Problem", - "NAME": "H04940" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97699565626603, - 38.91587780576576, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H04941" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95001122417332, - 38.8651386792982, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04942" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08868236238992, - 38.912835209308696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04943" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06699749599495, - 38.94776848859413, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04944" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.072321281086, - 38.94723763818863, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H04945" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03674744010685, - 38.90875873103022, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H04946" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03619945891404, - 38.90696027763341, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04947" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03633731965108, - 38.908757318872496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04948" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03620206502912, - 38.90752913594826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/05/07

Report Problem", - "NAME": "H04949" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08773012893722, - 38.908452908738305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/29/07

Report Problem", - "NAME": "H04950" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97632078092181, - 38.89345193026794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04951" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05300149389484, - 38.97462508524917, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04952" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98262115476261, - 38.90310847850502, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/09/07

Report Problem", - "NAME": "H04953" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97156925417775, - 38.84643727924792, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H05379" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97292328554563, - 38.938976212740535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H05380" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96978849698085, - 38.84594020557552, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05381" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94888721729193, - 38.892720910674086, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H05382" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99047698797429, - 38.95227606798671, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05383" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99048863527987, - 38.950149855436, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05384" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98947129501609, - 38.95225754181235, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05385" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9894406355584, - 38.95128962731958, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05386" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9906397665663, - 38.95133632026012, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05387" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94708987675162, - 38.892723218281056, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H05388" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97080226062072, - 38.852096793767714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05389" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97006697045208, - 38.85513917804312, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05390" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99559621592604, - 38.83926269236657, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05392" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97312552141948, - 38.90549578509796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "KENNEDY

In Service


Last Inspection Date: 08/27/07

Report Problem", - "NAME": "H05393" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97407912173732, - 38.904747037286725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H05394" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94944326633335, - 38.884900862851964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H05395" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95032242214741, - 38.88406482960428, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05396" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95167151454748, - 38.88345882499014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H05397" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95098258789362, - 38.88454948036674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H05398" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94806133795164, - 38.88292427614895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05399" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95116367549177, - 38.88541437006546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05400" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94952149876084, - 38.88303357551387, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H05401" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01903284951779, - 38.89859195289846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H05402" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.044987779945, - 38.901448472355526, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/22/07

Report Problem", - "NAME": "H05403" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04478620615964, - 38.90712354169392, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05404" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04479326656674, - 38.904835751434106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H05405" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04480854421615, - 38.90581124188021, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05406" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04499584077479, - 38.90094063209819, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H05407" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9721139091053, - 38.87395319068186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H05408" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97187262494673, - 38.87335563264001, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05409" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97011235209557, - 38.87310510416403, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05410" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94640947391078, - 38.88277614366396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/24/07

Report Problem", - "NAME": "H05411" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05896514412423, - 38.93661831916949, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H05413" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05896200911285, - 38.9369278999598, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/17/07

Report Problem", - "NAME": "H05414" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9593402986791, - 38.87233184822074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05841" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0715093733097, - 38.906558120097145, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "null

In Service


Last Inspection Date: 10/30/07

Report Problem", - "NAME": "H05842" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94046086131658, - 38.88036091505042, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H05843" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96636314112835, - 38.8583540967899, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H05844" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03993575949565, - 38.98880269949869, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H05845" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02789790037157, - 38.90065316761824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05846" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02878617012215, - 38.90034583016884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H05847" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05735394944952, - 38.964456195335785, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H05848" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96701714797383, - 38.84825124649828, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/04/07

Report Problem", - "NAME": "H05849" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00502834788763, - 38.87920177538388, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H05850" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93070057931699, - 38.885421614853634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H05851" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94101338676967, - 38.884928457104344, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05852" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00235142256035, - 38.82724917757216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05853" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00196949291082, - 38.8298207235464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05854" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00212175253381, - 38.828108247496445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05855" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00196756870618, - 38.828952550728346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05856" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00309651012144, - 38.82238616177905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H05857" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00415673828145, - 38.823049143578494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H05858" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95460465958541, - 38.86702253898066, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H05859" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95343992910297, - 38.86654419313684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/08/07

Report Problem", - "NAME": "H05860" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95748144390447, - 38.87447430291672, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05861" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0539154226598, - 38.98323917815843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H05862" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02841592057085, - 38.971140952802195, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H05863" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07868874133604, - 38.92623339312654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/09/07

Report Problem", - "NAME": "H05864" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08208331363964, - 38.92706412044146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05865" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05791124199031, - 38.934153201906014, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H05866" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06393519471922, - 38.944682848661124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/26/07

Report Problem", - "NAME": "H05867" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0662173522871, - 38.94896883593362, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H05868" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09226496121309, - 38.93857944972431, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H05869" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08217763775764, - 38.93527920992108, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H05870" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00951568229651, - 38.83929344870545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H05871" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04524595509936, - 38.93966471688504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H05872" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00101695228176, - 38.961352942351006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H05873" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99735478276324, - 38.961513344850474, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05874" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99895309516779, - 38.961325710133806, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H05875" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9622451010904, - 38.86297672492007, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04433" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10522851420588, - 38.927012286670944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Super Centurion

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H04434" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93472844454767, - 38.87373084274489, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H04435" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0774261063245, - 38.92367876508404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H04436" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05477358203676, - 38.94103864816232, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H04437" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97733272743392, - 38.89351700929176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H04438" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08875912058254, - 38.95199010758078, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H04439" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0620741852276, - 38.935210603716584, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/02/07

Report Problem", - "NAME": "H04440" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95899519231484, - 38.85735990502317, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/22/07

Report Problem", - "NAME": "H04441" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05836513551615, - 38.97760067913016, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04442" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97744795798937, - 38.86830315444358, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - JUMBO

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H04443" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98089608157682, - 38.86892898901475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H04444" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05627995660726, - 38.96563840133289, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H04445" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09050464417739, - 38.94874662697343, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04446" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00188149899884, - 38.9170436161969, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H04447" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95357294660701, - 38.87019551653525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04448" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93458187159659, - 38.8774767504435, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H04449" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95821390067368, - 38.868494257030754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04450" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95612736666627, - 38.86954284516876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H04452" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97513531630638, - 38.94191150643074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H04453" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03945203741759, - 38.939658474334315, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/14/07

Report Problem", - "NAME": "H04454" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04079710909922, - 38.939655211034236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 10/04/07

Report Problem", - "NAME": "H04455" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98531342176409, - 38.85123187388481, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H04456" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02961562668881, - 38.98608963101715, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H04457" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06703735187567, - 38.94700715787207, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H04458" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06832477460605, - 38.94713234829342, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04459" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00130771202248, - 38.96382498400293, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H04460" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08114619500478, - 38.96301606225877, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H04461" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0416333193583, - 38.93959158788519, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H04462" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00188651893774, - 38.91632212085611, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H04463" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97611415105615, - 38.86754483160119, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04464" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97645379624538, - 38.866548065917556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H04465" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05970039225984, - 38.96107537631399, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H04466" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96693509495171, - 38.87722023900156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H04467" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00357748301012, - 38.884185358911424, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/07/07

Report Problem", - "NAME": "H09004" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98996182489935, - 38.84163770984148, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H09005" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9190838851327, - 38.89825298901213, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H09006" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00562726118709, - 38.883615344703756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H09007" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00480563902512, - 38.883948781701825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/24/06

Report Problem", - "NAME": "H09008" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08849333449118, - 38.94622392877475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Centurion

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09009" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03360299392004, - 38.88732290161533, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H09010" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00924643451117, - 38.92232010879566, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/25/07

Report Problem", - "NAME": "H09011" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92989443682231, - 38.87703660095473, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H09012" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07867231526322, - 38.95771398704769, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H09013" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08011657973411, - 38.95772090656625, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Centurion

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H09014" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07440646518339, - 38.95772714812114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H09015" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07724774939429, - 38.9577211616338, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H09016" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07325571214197, - 38.9577276675949, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H09017" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04620715619693, - 38.99074082937913, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H09019" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08022957173232, - 38.959047539045855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H09020" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08041293006447, - 38.95694125399052, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H09021" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08018625770872, - 38.9583797592369, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling, B84B

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H09022" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02716711359766, - 38.90314485287352, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H09023" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11008689052852, - 38.936017141943914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H09024" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07161428737155, - 38.95773617937794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Centurion

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H09025" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11185197135288, - 38.9366973137694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H09026" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11090362040375, - 38.9373850915702, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H09027" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02425178916825, - 38.898385721520825, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H09028" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02474664235955, - 38.898234457436175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H09029" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08383015424543, - 38.93018513542305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09030" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0827398142461, - 38.930212522959145, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09031" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07472136855726, - 38.928978569847466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H09032" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07823662247331, - 38.92925954495621, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H09033" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07698472173966, - 38.92890569196667, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H09034" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98649847197449, - 38.834048756474225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H09035" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95743914350457, - 38.887702413760245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H09036" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07902849186996, - 38.929609300438386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09037" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9368312059512, - 38.887520350988865, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H09038" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05605405669904, - 38.923102195678936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 01/08/07

Report Problem", - "NAME": "H08970" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05158834990114, - 38.923354926939524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 01/08/07

Report Problem", - "NAME": "H08971" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05248187934549, - 38.92357129631647, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 01/08/07

Report Problem", - "NAME": "H08972" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06838706302851, - 38.97276431368139, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H08973" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05172957515671, - 38.895318715983656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08974" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05112613962501, - 38.8946953143176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08975" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01659394493691, - 38.88886964654522, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08976" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01039286728023, - 38.89604137722768, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08977" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00916793081885, - 38.89625498703594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08978" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00976508856019, - 38.896211995770386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08979" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00890521939598, - 38.92333068874144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08980" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00887923597604, - 38.92526032659052, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H08981" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00883074380967, - 38.92126451866896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H08982" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00889758063224, - 38.92144530164201, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H08983" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93054727831746, - 38.8764421124646, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08984" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93249502606915, - 38.874956895698226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, UNKNOWN

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08985" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04685069061479, - 38.90151463618884, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 05/24/07

Report Problem", - "NAME": "H08986" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98360661757303, - 38.94077524544294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08987" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03094247456977, - 38.930996105813065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - JUMBO

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H08988" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02578610924981, - 38.934131616701535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H08989" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02733403213745, - 38.932283229446604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/13/07

Report Problem", - "NAME": "H08990" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02863194469406, - 38.9316224567308, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/13/07

Report Problem", - "NAME": "H08991" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02962749395054, - 38.931442132553876, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H08992" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02525756382916, - 38.93484355909263, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H08993" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02617054106372, - 38.93347626731597, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H08994" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03122477460342, - 38.930736798657925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/17/07

Report Problem", - "NAME": "H08995" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02010410346386, - 38.957557904088844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H08996" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97721721870975, - 38.84011618368776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08997" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97614963212195, - 38.840954891331414, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08998" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99388153161837, - 38.949339346515366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08999" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97295582131991, - 38.92937535205477, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H09000" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0335954158444, - 38.886626042554695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H09001" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99033427481527, - 38.84255851269548, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H09002" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9190791514341, - 38.89723296849213, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H09003" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93958261646672, - 38.88752469827424, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H09039" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.938523327564, - 38.88750947990186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H09040" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03127870290466, - 38.90659966212444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H09041" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10971776704318, - 38.93652675550647, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H09042" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92861676514879, - 38.87799075308454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H09043" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02301952543257, - 38.89907398439239, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H09044" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03251424432464, - 38.930417724084485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/13/07

Report Problem", - "NAME": "H09045" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98868584439664, - 38.84454760042522, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H09046" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98725939623742, - 38.845051791157864, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H09047" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98732571223994, - 38.84362839214157, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H09048" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98580910873986, - 38.84293345025701, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H09049" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02940215543835, - 38.89916231165648, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H09050" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99160683377616, - 38.940776481011675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H09051" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08871662276252, - 38.91792731727288, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, SUP CENT 250

In Service


Last Inspection Date: 02/19/08

Report Problem", - "NAME": "H09052" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06746405218475, - 38.959528589351265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H09053" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06796380033117, - 38.95895866257383, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/07/07

Report Problem", - "NAME": "H09054" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06931031679339, - 38.95733877204453, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H09055" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02513373945062, - 38.88770298662333, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H09056" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06881553284747, - 38.953933470949494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H09057" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02817215483672, - 38.898833818600494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H09058" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00891120123002, - 38.95228154820823, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H09059" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0092064164634, - 38.95338395734715, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H09060" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.009980735443, - 38.96353114862895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H09061" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05276349967937, - 38.915618842913894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H09062" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0143577754417, - 38.88387244475433, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H09063" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00457511249418, - 38.88264351200035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/05/07

Report Problem", - "NAME": "H09064" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00050737183291, - 38.90469006917829, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/06/07

Report Problem", - "NAME": "H09065" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05458488194304, - 38.89968110427733, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 05/11/07

Report Problem", - "NAME": "H09066" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04265684650899, - 38.917043862824684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H09067" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0773012092924, - 38.94401442173012, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H09068" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00336697371237, - 38.91265474042744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H09069" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99957394083697, - 38.899070441190595, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H09070" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0718922072102, - 38.96773723434008, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H09071" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08747186075786, - 38.95216442402454, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 07/29/05

Report Problem", - "NAME": "H09073" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98847895501503, - 38.85906155318294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08539" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92810667045268, - 38.88571439599207, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08540" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02720715557734, - 38.92071337546067, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H08541" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93789165580496, - 38.90010448716796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08542" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93789396160324, - 38.90010430822659, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08543" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98208247464486, - 38.88278337063967, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H08544" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06387838038624, - 38.903921815110316, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08545" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02549690318271, - 38.97877464139044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H08546" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93395193642357, - 38.875662023478846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08547" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9565272301833, - 38.91951101565036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H08548" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95524269388355, - 38.91835629358651, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H08549" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95734343310873, - 38.92004651015837, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H08550" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99247925413083, - 38.91105061211053, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08551" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99133037406304, - 38.912175448917964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H08552" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92845323810772, - 38.884431328320815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08553" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98233697261593, - 38.8553387565206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/16/07

Report Problem", - "NAME": "H08554" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04863070654336, - 38.905355998875166, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/29/07

Report Problem", - "NAME": "H08555" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98106392750358, - 38.89985231024399, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H08556" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98862596823128, - 38.864714629169406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 12/03/07

Report Problem", - "NAME": "H08557" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06905955237025, - 38.90512515798623, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08558" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04874893378806, - 38.900796514971326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/29/07

Report Problem", - "NAME": "H08559" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05023201934696, - 38.90081481325534, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/11/08

Report Problem", - "NAME": "H08560" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.051486002836, - 38.90057705923955, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08561" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05003038640514, - 38.900531794088835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/23/07

Report Problem", - "NAME": "H08562" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00066339192198, - 38.87852852246565, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/16/07

Report Problem", - "NAME": "H08563" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99520649659708, - 38.94263358063965, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/28/07

Report Problem", - "NAME": "H08564" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0124059474504, - 38.89345901346585, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08565" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98558821633338, - 38.881415436809974, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/17/06

Report Problem", - "NAME": "H08566" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06514298878535, - 38.943168915701406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H08567" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00973556235982, - 38.898969701189074, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08568" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99960440153339, - 38.931680148096184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/18/08

Report Problem", - "NAME": "H08569" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02882084751378, - 38.89538203379702, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08570" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95577398551826, - 38.921453657739285, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-62-B

In Service


Last Inspection Date: 09/27/07

Report Problem", - "NAME": "H08571" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99433799153933, - 38.93442153569604, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08572" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07024814783125, - 38.96035520520068, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/06/06

Report Problem", - "NAME": "H09075" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02157434211952, - 38.93081015312525, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H09076" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06044338306467, - 38.95086729619458, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller, Centurion

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H09077" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04138955855865, - 38.92204724629831, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H09078" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96813349799348, - 38.84830912049457, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H09079" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05149556832315, - 38.90622612199416, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H09080" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01886129175715, - 38.90487578637114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/24/07

Report Problem", - "NAME": "H09081" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0575355775474, - 38.93343887577325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 01/19/07

Report Problem", - "NAME": "H09082" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02412985795266, - 38.915629660431776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H09083" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04786743972032, - 38.903814381451866, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H09084" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9726642394464, - 38.94079268360396, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H09085" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99687070831642, - 38.84043856150093, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H09086" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99670148941775, - 38.8414251711826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/04/07

Report Problem", - "NAME": "H09087" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99616376450973, - 38.841347438865114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H09088" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99626546942768, - 38.84012938271303, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H09089" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99558086774195, - 38.84047124749271, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H09090" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96462619801888, - 38.867748767698956, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H09091" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05147823614823, - 38.90459143820292, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/13/06

Report Problem", - "NAME": "H09092" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02645801336642, - 38.91481973063547, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 12/04/07

Report Problem", - "NAME": "H09093" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10470015106651, - 38.92956594364366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H09094" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07824829363948, - 38.94508677770197, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/26/07

Report Problem", - "NAME": "H09095" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97340828201314, - 38.933240226765925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/02/07

Report Problem", - "NAME": "H09096" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94317102933596, - 38.86839174932191, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H09097" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08272133244417, - 38.90687530869195, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/15/07

Report Problem", - "NAME": "H09098" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99685468394523, - 38.87996472586356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/22/07

Report Problem", - "NAME": "H09099" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99811487378193, - 38.88064576924839, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/22/07

Report Problem", - "NAME": "H09100" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02726999628489, - 38.90368911361274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H09101" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0019692494539, - 38.92414068820509, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/19/07

Report Problem", - "NAME": "H09102" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01801354766188, - 38.91786057760934, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 04/25/07

Report Problem", - "NAME": "H09103" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99122699292546, - 38.86560177687061, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09104" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00582934571723, - 38.836443164116645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09105" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00705729089124, - 38.94511711313671, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09106" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.017932382195, - 38.95840675440536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H09107" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99387661280471, - 38.82838777400342, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09108" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00277619794527, - 38.840649169966404, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08573" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97893477015928, - 38.922249347046964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H08574" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98281480852543, - 38.900163450372936, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H08575" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92387367558487, - 38.88513912282087, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08576" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92372227500937, - 38.885729956071486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08577" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94976052046304, - 38.897346563918575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 11/01/07

Report Problem", - "NAME": "H08578" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9780028653113, - 38.92134510906843, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H08579" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97710272923885, - 38.92134207151667, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H08580" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95547082433256, - 38.916845215248195, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H08581" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0163829945223, - 38.885129586393255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/04/08

Report Problem", - "NAME": "H08582" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.066732816111, - 38.943233905541746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 05/19/07

Report Problem", - "NAME": "H08583" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0188403268678, - 38.89752307892184, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/23/07

Report Problem", - "NAME": "H08584" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01078834197283, - 38.82034062677432, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08585" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95616480637626, - 38.9173618352077, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H08586" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08778468943332, - 38.912005453128366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H08588" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0190235699886, - 38.89491934354903, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H08589" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04871429874123, - 38.9027658192885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H08590" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01785694742098, - 38.8949398055434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H08591" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08531548338183, - 38.96025498219793, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H08592" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93091026436544, - 38.88471216661913, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/18/08

Report Problem", - "NAME": "H08593" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0292329918798, - 38.895165640505745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08594" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02817718438348, - 38.89528165745904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08595" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02636842694048, - 38.894377792826916, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08596" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02763771690492, - 38.89472860054361, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08597" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03624882205068, - 38.91255320036532, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08598" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95315223039381, - 38.89604881395341, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08599" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9542234507704, - 38.89574466577712, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08600" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05146632364985, - 38.90712772648776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08601" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01505682147155, - 38.89810909931428, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H08602" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0328013762658, - 38.89542667433872, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08603" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03339296921185, - 38.89543517277314, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08604" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03228069099289, - 38.895422963803064, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08606" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03021130752691, - 38.89540046491191, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08607" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03350770572573, - 38.89625304547842, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08608" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02960799630996, - 38.961090066635336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09109" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05019193509814, - 38.90756477139692, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09110" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96648470400932, - 38.92013823949831, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09111" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9297498272209, - 38.87967084813571, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09112" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94619741559671, - 38.87003159623627, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09113" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10102767277525, - 38.947858528055356, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09114" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05554828483594, - 38.94853023909844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09115" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94185638025759, - 38.910048226097835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09116" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94165583304925, - 38.91062310166634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/23/07

Report Problem", - "NAME": "H09117" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92841214462342, - 38.88896179884377, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09119" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0080803275818, - 38.922323032865336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09120" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08707243694516, - 38.9197300581798, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09121" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09876766725233, - 38.924753710956594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09122" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06290905606541, - 38.95142208519586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09123" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04212265248194, - 38.927215723489915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09124" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07375563903265, - 38.917683295757456, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09125" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05579576042543, - 38.966428494542434, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09127" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08904881612418, - 38.91084858186611, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09128" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09570717923661, - 38.94523554935284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09129" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06305312075824, - 38.921629911800125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09130" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06395864164293, - 38.92326983546393, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09131" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06339716970705, - 38.92246111292508, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09132" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05880662632796, - 38.91826584899397, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09133" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10355354396799, - 38.93630939668897, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09134" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98861879462714, - 38.86280517775928, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09135" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03408750048177, - 38.937826883828016, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09136" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06367368575731, - 38.91837362332335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09137" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0741708440765, - 38.93495234787948, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09138" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92506018847027, - 38.88393071247643, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09139" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92493181329877, - 38.884481339738386, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09140" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92204363869698, - 38.89948032821506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09141" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91640749423819, - 38.89241017670246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09142" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91496586742983, - 38.89214454216605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09143" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00089124142046, - 38.947265932911634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09144" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02974063992806, - 38.895949150130065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H08609" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03350426658844, - 38.895802898442945, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08610" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04157587307783, - 38.903605552933925, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08611" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01158647754188, - 38.89739787047814, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08612" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03210752067322, - 38.88534626194587, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08613" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97312984969142, - 38.866308436257476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H08614" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03906963220658, - 38.93623050470729, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H08615" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03918911488095, - 38.935645546810676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H08616" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04289804909273, - 38.917865163142665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/13/07

Report Problem", - "NAME": "H08617" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03763703123715, - 38.903822692349024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08618" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03642533723821, - 38.9520148834351, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H08620" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03830565562527, - 38.90558203132135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08621" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99725103922168, - 38.8332830923234, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H08622" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99630317677882, - 38.83843283127437, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08623" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.066625503076, - 38.941529310018225, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/09/07

Report Problem", - "NAME": "H08624" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99993013762492, - 38.83681705245397, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08625" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07331721140595, - 38.924396693909536, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08626" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07331252436354, - 38.92413384303951, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08627" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96411210838446, - 38.87183401332887, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H08628" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99312976410624, - 38.93558784763175, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08629" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97231364336412, - 38.90457533844903, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 05/10/07

Report Problem", - "NAME": "H08630" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04356876428044, - 38.89942150787223, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08631" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04480016525211, - 38.90660488068256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08632" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99136845088773, - 38.856691028575334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08633" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98984033585377, - 38.856454659628795, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08634" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00610322556301, - 38.96182890973894, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/01/07

Report Problem", - "NAME": "H08635" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04327724804261, - 38.907184871679476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08636" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04277072775197, - 38.908086676633566, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08637" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93632382533126, - 38.886498083628815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H08638" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.937772868302, - 38.88658598467158, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08639" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92000330174575, - 38.887215707149984, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08640" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01129797638228, - 38.86416133074623, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/05/07

Report Problem", - "NAME": "H08641" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03631511351088, - 38.95069560213885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H08642" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03640989294186, - 38.96209450356922, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08643" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09378367864437, - 38.91851770325485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09145" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0844194101977, - 38.927045394571586, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09146" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06441627664769, - 38.9243047933927, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09147" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97771945972165, - 38.85521600151856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09148" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03831307100914, - 38.95946090830021, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09149" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94115878588856, - 38.899671056590996, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09150" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9407366966845, - 38.899668419982824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H09151" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0991376094575, - 38.93646688920711, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09152" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07280482125975, - 38.95335239949877, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09153" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10110220180124, - 38.9212167303206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09154" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07190949779098, - 38.92613818312947, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H09155" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02128453702582, - 38.931120965843505, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H09156" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10296233056515, - 38.94532665579319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H09157" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10192090967148, - 38.9448149877885, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H09158" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10206518499017, - 38.94401836694838, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H09159" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10292406615106, - 38.94463878952908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H09160" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.11001111691373, - 38.935728803382325, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H09161" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08012954794336, - 38.96494590779582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H09162" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06212037615211, - 38.97220825480305, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H09163" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00911958466912, - 38.82529102514977, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/13/07

Report Problem", - "NAME": "H09164" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00603900133896, - 38.87314829248499, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H09165" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0184886036488, - 38.947477979507475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H09166" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0225139425842, - 38.907191005939524, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H09167" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02408928454868, - 38.90676327269332, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H09168" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02440045866837, - 38.90311953742286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, U.S. Pipe

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H09169" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02407891719905, - 38.90433096633858, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/31/07

Report Problem", - "NAME": "H09170" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02408624206616, - 38.90499157424918, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H09171" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03463471331794, - 38.91679430967951, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H09172" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02488832410485, - 38.92748731052724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 09/04/07

Report Problem", - "NAME": "H09173" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09506403013819, - 38.931655693652665, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/20/07

Report Problem", - "NAME": "H09200" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01419335897909, - 38.90569583721601, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/23/35

Report Problem", - "NAME": "H09209" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97435898380105, - 38.921337844320796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H09210" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00600777493914, - 38.875924529424545, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H09211" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96048194541679, - 38.922145111982026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 09/19/07

Report Problem", - "NAME": "H09212" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0365171720218, - 38.95722354284319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08644" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03629389177893, - 38.95627977159117, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08645" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03630917532455, - 38.95471040089543, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H08646" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0364698500718, - 38.960254197407686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08647" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09957558862641, - 38.94633227510696, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08648" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05324307807622, - 38.90539970535039, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08649" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00894028788855, - 38.90318464877102, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 12/04/07

Report Problem", - "NAME": "H08650" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99534466044936, - 38.92166486427478, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08651" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05645273887436, - 38.90530147588465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08653" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03620649184059, - 38.96337918858392, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08654" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93865236050358, - 38.90497913058511, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08655" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00815716269088, - 38.876340424827504, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 11/13/07

Report Problem", - "NAME": "H08656" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98657553738025, - 38.89817850053494, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08657" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.931773242978, - 38.8841441907157, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08658" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9930423485349, - 38.9573333541786, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H08659" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92994989815949, - 38.890836788946245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant,

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08661" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92997594811217, - 38.883802573958064, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 08/08/07

Report Problem", - "NAME": "H08662" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02697048070101, - 38.917172418815746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H08663" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08223133785353, - 38.95203849934632, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H08664" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02606367036198, - 38.91716313882413, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H08665" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0703015182813, - 38.92283706239084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08666" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07106839101364, - 38.92249210221713, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08667" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98817930239974, - 38.88904215198616, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-MET 250 M94

In Service


Last Inspection Date: 04/12/06

Report Problem", - "NAME": "H08668" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05670833521232, - 38.95181880180764, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08669" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02801847312037, - 38.91717313612248, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08670" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0985296394079, - 38.944991079714455, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/07/08

Report Problem", - "NAME": "H08671" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0258221077461, - 38.91690732883077, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H08672" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05787320457475, - 38.946203884831085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08673" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03250940463836, - 38.897188053460745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08674" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92615708432245, - 38.88056312919905, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08675" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92634950900363, - 38.87977925928223, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08676" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9228931109311, - 38.882415838617035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/09/07

Report Problem", - "NAME": "H08677" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92802269818132, - 38.878476877868756, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08678" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92470871810644, - 38.881252049100986, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08679" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9878245599078, - 38.9237225709901, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/08/08

Report Problem", - "NAME": "H09213" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03731597080925, - 38.90863732553582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant,

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H09214" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08577616013496, - 38.91399775225103, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H09215" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08117232595204, - 38.906624008174255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H09216" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03475152340339, - 38.96119169648588, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H09217" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0059644714094, - 38.90576332599382, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H09219" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00568250168304, - 38.907186244644734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H09220" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00432703588632, - 38.90728189928287, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H09221" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00343405921083, - 38.9081582067841, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 09/28/07

Report Problem", - "NAME": "H09222" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00034088857399, - 38.83846501346144, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant,

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H09223" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99960080784255, - 38.83813712361215, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant,

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H09224" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99985962331871, - 38.83740941232444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant,

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H09225" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95688877125403, - 38.92222182671161, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/01/07

Report Problem", - "NAME": "H09226" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01760034198207, - 38.90729710297956, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H09227" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06624073525964, - 38.953201423673065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H09228" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92913156939407, - 38.882355344568744, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H09229" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93027475983557, - 38.882423091085336, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H09230" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93130519026096, - 38.882261289449474, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H09231" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93109090951636, - 38.88194094199932, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H09232" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92995346739029, - 38.88168354426477, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H09233" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92926175286132, - 38.88168796486839, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/06/07

Report Problem", - "NAME": "H09234" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00313297767796, - 38.84516448239475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/09/07

Report Problem", - "NAME": "H09235" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99692024402691, - 38.841638380100676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/10/07

Report Problem", - "NAME": "H09236" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95021359767463, - 38.92198895680593, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/21/07

Report Problem", - "NAME": "H09237" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9579299449329, - 38.9229395208611, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/22/07

Report Problem", - "NAME": "H09238" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95938626070784, - 38.92353032431596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/24/07

Report Problem", - "NAME": "H09239" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95847938418572, - 38.92279785431506, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/24/07

Report Problem", - "NAME": "H09240" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95760369554229, - 38.92229999224416, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/24/07

Report Problem", - "NAME": "H09241" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95615038327321, - 38.92200928886095, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 10/24/07

Report Problem", - "NAME": "H09242" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9543213685154, - 38.92251046894431, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 10/24/07

Report Problem", - "NAME": "H09243" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95254171269899, - 38.922466952213284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 10/24/07

Report Problem", - "NAME": "H09244" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02475624239386, - 38.81511391306391, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Blue Plains # C6FH1

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H09246" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06198194751812, - 38.93573992641686, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H09252" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05678210789156, - 38.95360997067364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H09253" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0123858362094, - 38.828744102767445, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 12/04/07

Report Problem", - "NAME": "H08716" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98754090090777, - 38.833196410884035, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08717" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9742776640474, - 38.92162172376561, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 08/02/07

Report Problem", - "NAME": "H08718" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93916313099159, - 38.88659397782849, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 02/06/08

Report Problem", - "NAME": "H08719" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02411427793977, - 38.89621935576537, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08720" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00894501157781, - 38.89966655200319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08721" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95543539481729, - 38.91702175603697, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H08722" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93673635039156, - 38.902866577574734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08723" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09740785062755, - 38.94627545753691, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08724" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05951181249839, - 38.92439979219147, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 01/16/07

Report Problem", - "NAME": "H08725" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00719253295067, - 38.89904011461296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08726" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00703195557956, - 38.89959103062003, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08727" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05022256405657, - 38.90669025481118, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H08728" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99921924360699, - 38.920356747571944, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08729" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99480636483248, - 38.9406118332587, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08730" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04527402585663, - 38.98588461797464, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08731" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01814302217667, - 38.95880404920544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H08732" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01701177841085, - 38.95882519049787, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H08733" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95850855229487, - 38.88765021662725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08734" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94987427777586, - 38.90156101218892, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08735" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95099383531999, - 38.90076210352137, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H08736" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95160739815256, - 38.90006137382878, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H08737" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9506869221206, - 38.89935376957078, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08738" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94943419635878, - 38.89937397130198, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08739" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94990358588407, - 38.89991547689804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08740" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94888915521787, - 38.90071557434845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08741" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94976507820202, - 38.90063092438199, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08742" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94880481857784, - 38.899890110458124, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H08743" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08502300070731, - 38.96120636834058, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H08744" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08245619336594, - 38.96305487221091, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08745" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98921235707812, - 38.920913047791174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08747" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99271458108961, - 38.91827389700935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/31/07

Report Problem", - "NAME": "H08748" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.000642778057, - 38.89686912089262, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08750" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99426785972668, - 38.957170380157024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H08751" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9977977081463, - 38.956312525984444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H08752" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9910333859845, - 38.85783473998021, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H09254" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03484254061438, - 38.924854356532954, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H09255" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92492428778557, - 38.90493126258286, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H09256" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05359944418875, - 38.93963261059847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H09257" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05497419264395, - 38.93358499815553, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H09258" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01963994825064, - 38.91685340945908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/13/07

Report Problem", - "NAME": "H09259" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9393199621042, - 38.9095423789871, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H09260" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0569848218339, - 38.915468141927384, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H09261" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05026678134584, - 38.8969760471546, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/18/07

Report Problem", - "NAME": "H09262" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99579511363885, - 38.910090264103694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H09263" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02964645346998, - 38.923367300566554, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H09264" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99652434753408, - 38.923666977676156, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H09265" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04244517980435, - 38.921569777825226, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/19/07

Report Problem", - "NAME": "H09266" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02863271827209, - 38.90959566054185, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09267" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97879161578743, - 38.906967690069855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09268" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08660677716558, - 38.953353367458945, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09269" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97998503074454, - 38.86167664955933, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09270" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01582900249406, - 38.81408747120256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09271" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04353400002903, - 38.90876056131167, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09272" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9834197310972, - 38.881702759897244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Am. Darling

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09273" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00472157906025, - 38.873093230776824, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H09274" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98465617367789, - 38.95082372991569, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H09275" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98358834951473, - 38.95033262497695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09276" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98419270966416, - 38.95004420025911, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09277" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91906978186881, - 38.89471075395269, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/07/07

Report Problem", - "NAME": "H09278" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99739549998577, - 38.87881243983216, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Am Darling

In Service


Last Inspection Date: 01/18/08

Report Problem", - "NAME": "H09279" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97697794278825, - 38.918670907205694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09280" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00765329097595, - 38.87469895781118, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09281" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00814307381587, - 38.874570203679475, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09282" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02698543669445, - 38.88109182517637, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09283" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95334734690051, - 38.922382256060715, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H09284" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01735475465979, - 38.904358562165754, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 10/29/07

Report Problem", - "NAME": "H09285" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94875785077852, - 38.919135021316265, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/02/08

Report Problem", - "NAME": "H09287" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01647577934592, - 38.887834483621496, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Am Darling

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H09289" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92176550434398, - 38.88329910897763, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08680" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92708947381672, - 38.87919746603908, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08681" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92408481032187, - 38.88149445740319, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08682" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92724450655383, - 38.88085838608868, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/22/08

Report Problem", - "NAME": "H08683" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07249169154235, - 38.94104680332024, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 09/26/07

Report Problem", - "NAME": "H08684" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06213333298192, - 38.910528947731486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 08/14/07

Report Problem", - "NAME": "H08685" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99943835888241, - 38.83179842987002, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08686" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91907201002455, - 38.893640804205596, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08687" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02385434134246, - 38.901869704953135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/13/07

Report Problem", - "NAME": "H08688" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01076323869623, - 38.82859341691804, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H08689" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0447586788924, - 38.923942625522734, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/19/06

Report Problem", - "NAME": "H08690" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92417114762259, - 38.883791733801765, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08691" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98462632190741, - 38.89806074620181, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08692" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98464381741263, - 38.89738229270767, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08693" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07718089395061, - 38.93598943465808, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H08694" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07757129766513, - 38.9367000302747, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H08695" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07584002977998, - 38.937236214401075, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H08696" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07706932574608, - 38.93905212281427, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H08697" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07544023444585, - 38.93934356801358, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H08698" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07768494898157, - 38.93774250334308, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H08699" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07474534176015, - 38.93553232380206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H08700" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02982851136642, - 38.908624000642575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08701" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02096405326786, - 38.90174500717568, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08703" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99859094633403, - 38.89606670313516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08704" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92814733406689, - 38.886446604404135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08705" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93251427921629, - 38.8869028262654, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/10/07

Report Problem", - "NAME": "H08706" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0034341312402, - 38.89624412593952, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08707" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00041705038856, - 38.89617952263983, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08708" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93046233533161, - 38.886739300636116, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08709" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.002188089492, - 38.89618109737246, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08710" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01868116301925, - 38.89351866065366, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08711" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02970206975802, - 38.91248058503723, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/18/07

Report Problem", - "NAME": "H08712" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02981000497276, - 38.911903447315964, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08713" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93246260635284, - 38.88485872213008, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08714" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99889835956795, - 38.94631824204952, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08715" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00704136408936, - 38.885008072195916, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H09290" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95490844331678, - 38.92177986069538, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H09291" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9513086707524, - 38.922063673823594, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H09292" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00297870587309, - 38.8204773226711, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H09293" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05157131009331, - 38.93632515399027, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 11/16/07

Report Problem", - "NAME": "H09294" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9495104797852, - 38.92002390334836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 11/16/07

Report Problem", - "NAME": "H09295" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00887852285749, - 38.87368417400741, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/16/07

Report Problem", - "NAME": "H09296" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94949797892636, - 38.921783647311045, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 11/16/07

Report Problem", - "NAME": "H09297" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02415624676367, - 38.93621100856753, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 08/29/40

Report Problem", - "NAME": "H09298" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02442615867146, - 38.93595231520718, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/29/40

Report Problem", - "NAME": "H09299" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02609666353408, - 38.937559737122406, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 12/17/07

Report Problem", - "NAME": "H09300" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94939449191173, - 38.9211680997582, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H09301" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05972008660773, - 38.937843839182165, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/07/08

Report Problem", - "NAME": "H09303" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9884488395658, - 38.87414238669879, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 11/19/07

Report Problem", - "NAME": "H09304" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01075912714681, - 38.88484834953486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H09307" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98616535584016, - 38.93174177554106, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H09308" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0229307459235, - 38.97470163447889, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/07/08

Report Problem", - "NAME": "H09309" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00602604304966, - 38.87431165593684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H09310" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00270167910509, - 38.836865495703044, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H09311" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09789717388706, - 38.92599935744832, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H09312" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96160666683869, - 38.92290792427751, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H09313" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95758538479275, - 38.93051777670375, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/23/08

Report Problem", - "NAME": "H09314" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01623186735475, - 38.913344618983736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 01/24/08

Report Problem", - "NAME": "H09315" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06442779964327, - 38.938998788117466, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 04/02/30

Report Problem", - "NAME": "H09316" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04492253938406, - 38.91340050265108, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/17/08

Report Problem", - "NAME": "H09317" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9631310490341, - 38.924952655145624, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 01/24/08

Report Problem", - "NAME": "H09318" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96655507916714, - 38.91706741053211, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 01/25/08

Report Problem", - "NAME": "H09319" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99833925795618, - 38.87756015531194, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Am Darling

In Service


Last Inspection Date: 01/22/08

Report Problem", - "NAME": "H09320" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91878616593085, - 38.88958460278862, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 01/24/08

Report Problem", - "NAME": "H09321" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00933868020185, - 38.87197153292126, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H09322" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00890359683652, - 38.871819937468985, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H09323" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00756097818527, - 38.87117409356284, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H09324" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0066963196627, - 38.87152652806933, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H09325" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00849222136488, - 38.87081333305187, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H09326" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99431464556976, - 38.95642802955262, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H08753" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9914366175631, - 38.954583078672904, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H08754" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96700810746621, - 38.86464720208796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H08755" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9659872441215, - 38.864224378497006, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H08756" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96460894537778, - 38.863711128787294, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H08757" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96763373361483, - 38.86553339070093, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/17/07

Report Problem", - "NAME": "H08758" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96613072149334, - 38.862597031785256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H08759" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96730990863365, - 38.86332970713221, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 08/20/07

Report Problem", - "NAME": "H08760" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01778644994052, - 38.91354216170856, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08761" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07548153425437, - 38.91275512895882, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08762" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07523671171474, - 38.91252506068831, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08763" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07398417995368, - 38.91262140294875, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08764" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07620466046885, - 38.91256654740798, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08765" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08259014522528, - 38.912883571964244, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H08766" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.08164952241454, - 38.91259664174641, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H08767" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00500905428665, - 38.90988776990425, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08768" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00476109283106, - 38.897079614148794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08769" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02387038061198, - 38.894678795089796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08770" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03086190785439, - 38.91709656058297, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08771" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0297118888888, - 38.916759568717914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/13/07

Report Problem", - "NAME": "H08772" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02816493910211, - 38.896791975907256, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08773" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01653222067856, - 38.9004082026011, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08774" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01316311014868, - 38.900283765943584, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08775" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0092874073791, - 38.90027519304724, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08776" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00928195840858, - 38.90030505618723, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08777" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00668024480795, - 38.96545990568684, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/24/07

Report Problem", - "NAME": "H08778" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94550679698732, - 38.87166270732186, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 08/07/07

Report Problem", - "NAME": "H08779" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94864753687541, - 38.87267007211219, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H08780" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0098480825433, - 38.90027040873241, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08781" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01057145694017, - 38.90027449836676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08782" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01372806366703, - 38.90034702967891, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08783" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92622347641245, - 38.90457663859126, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/28/07

Report Problem", - "NAME": "H08784" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01270689411403, - 38.89880922911742, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/27/07

Report Problem", - "NAME": "H08785" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02816231811993, - 38.89695654133128, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08786" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03184846819468, - 38.900326910649255, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08787" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00603296870757, - 38.87526238391792, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H09327" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00579855860819, - 38.87530645586449, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H09328" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03228881386602, - 38.90980407028345, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H09329" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0424313981925, - 38.90970658186085, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/05/08

Report Problem", - "NAME": "H09331" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01980048400594, - 38.89896138429871, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/04/08

Report Problem", - "NAME": "H09332" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0197897148647, - 38.89966073211877, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H09333" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07260007877383, - 38.922600638857574, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H09334" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91955468659461, - 38.888397145538676, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H09335" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91882591439352, - 38.88866839715733, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H09336" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91817019879976, - 38.888008309955815, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H09337" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9192318088207, - 38.887564386148846, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/11/08

Report Problem", - "NAME": "H09338" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00441930506632, - 38.878433014833476, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/20/08

Report Problem", - "NAME": "H09339" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00222548091834, - 38.823995059116136, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/14/08

Report Problem", - "NAME": "H09340" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00339713525518, - 38.8259588777402, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/15/08

Report Problem", - "NAME": "H09341" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00366669730415, - 38.83047224678334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 02/15/08

Report Problem", - "NAME": "H09342" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95001355327334, - 38.91932828938052, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 03/03/08

Report Problem", - "NAME": "H09344" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95436733392737, - 38.91894300981501, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 03/03/08

Report Problem", - "NAME": "H09345" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01120709117866, - 38.82221083722736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 03/03/08

Report Problem", - "NAME": "H09346" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98648607661214, - 38.85718614604409, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Kennedy

In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H09347" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.041676246334, - 38.94714072415591, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 03/03/08

Report Problem", - "NAME": "H09348" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04102689629917, - 38.94680192721034, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 03/03/08

Report Problem", - "NAME": "H09349" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99351976995797, - 38.82914942057292, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H08788" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02306623927376, - 38.90200428589626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08789" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02273902097328, - 38.90094169730195, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08790" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01354351443048, - 38.905663898680736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08791" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01611015837176, - 38.90520113832982, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/13/07

Report Problem", - "NAME": "H08792" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99126877216338, - 38.82926070859868, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 10/09/07

Report Problem", - "NAME": "H08793" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9962210632459, - 38.82929124246931, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/15/07

Report Problem", - "NAME": "H08794" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98596243998557, - 38.95270681195157, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/26/07

Report Problem", - "NAME": "H08795" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05914725121823, - 38.901338907915296, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/30/07

Report Problem", - "NAME": "H08796" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02816488572094, - 38.90205840720238, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08797" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00438123513435, - 38.8768691951298, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 01/08/08

Report Problem", - "NAME": "H08798" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00729788668431, - 38.87638065012211, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/30/07

Report Problem", - "NAME": "H08799" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02953115953406, - 38.88513969491125, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08800" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02174856904672, - 38.90848554213636, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08801" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94764937578191, - 38.90081239671709, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 01/15/08

Report Problem", - "NAME": "H08804" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03456215344579, - 38.895293410353915, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08805" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0187164660632, - 38.91731535508084, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/22/06

Report Problem", - "NAME": "H08806" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00064074063144, - 38.89720034941164, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08807" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01764854205611, - 38.91739140742575, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08808" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00186229085949, - 38.897264989345544, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08809" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99579591702195, - 38.86301105765919, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/05/07

Report Problem", - "NAME": "H08810" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04134678878712, - 38.94826382225088, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H08812" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9947575163789, - 38.860123304058206, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08813" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93580729222725, - 38.88550585180411, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08814" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.93350421003265, - 38.88206520635128, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/17/07

Report Problem", - "NAME": "H08815" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07033226944189, - 38.95585197812847, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, OTHER, SEE FLD NOTES

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08816" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00053821190153, - 38.86497991214398, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H08817" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99867121250075, - 38.86451523383149, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H08818" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0532404472594, - 38.90606095552444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08819" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02167392330027, - 38.91226876229872, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08820" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0220094395951, - 38.91607889222257, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H08821" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02174173458414, - 38.91265460385914, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/11/07

Report Problem", - "NAME": "H08822" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02200785880494, - 38.91166616810135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08823" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02174802471912, - 38.915624200529365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 10/31/07

Report Problem", - "NAME": "H08825" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05409560402761, - 38.910519496075764, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08861" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05216748407929, - 38.91064744453669, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08862" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05607816992051, - 38.9106080051977, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08863" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05721275393297, - 38.91064462356736, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 02/07/08

Report Problem", - "NAME": "H08864" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02699217347983, - 38.88744503140304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08865" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02567433151633, - 38.88745080560488, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08866" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0639111800448, - 38.910509981111844, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/25/07

Report Problem", - "NAME": "H08867" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0019330980894, - 38.84337726915251, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08868" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00914338527055, - 38.83390007124215, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/02/07

Report Problem", - "NAME": "H08869" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10089936078661, - 38.93233392892799, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08870" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09919728642942, - 38.932396137964176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US Pipe, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08871" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10328700024372, - 38.93218317915868, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08872" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10229653912195, - 38.93413978118592, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08873" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10061113416536, - 38.933735347816096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08874" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.10308342998931, - 38.932346778645694, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy, Eddy

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08875" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05507834449074, - 38.91062579482191, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08876" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07589667021534, - 38.96494866877805, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08877" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97197844433609, - 38.891855965227826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 03/09/07

Report Problem", - "NAME": "H08878" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07909584259765, - 38.95073413849933, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08879" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03735816088506, - 38.90245803421959, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 08/03/07

Report Problem", - "NAME": "H08880" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03980873715406, - 38.90268759556199, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 10/01/07

Report Problem", - "NAME": "H08881" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09359919803424, - 38.92759885559243, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08882" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04175348077844, - 38.902731030627535, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/15/07

Report Problem", - "NAME": "H08883" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.09197855260298, - 38.92766514632522, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/25/07

Report Problem", - "NAME": "H08884" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03811752505584, - 38.902671782404745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/28/07

Report Problem", - "NAME": "H08885" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04366221031981, - 38.902358485978134, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 06/18/07

Report Problem", - "NAME": "H08886" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03869502663345, - 38.90243456471562, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08888" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04272069933567, - 38.90236633801674, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/14/07

Report Problem", - "NAME": "H08889" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04479492523886, - 38.90272215686607, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/06/08

Report Problem", - "NAME": "H08890" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03926909323233, - 38.90274976468699, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08891" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01589502215094, - 38.97502547718258, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08892" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00731297615674, - 38.83143909777326, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08893" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00830265070712, - 38.83358891883111, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08894" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00782139634741, - 38.83130444234121, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08895" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0230045609527, - 38.91690870121258, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/04/06

Report Problem", - "NAME": "H08826" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02181590769047, - 38.91340550702836, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 11/20/07

Report Problem", - "NAME": "H08827" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02492865820847, - 38.91691082890837, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H08828" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02406675489375, - 38.91718084514725, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 05/21/06

Report Problem", - "NAME": "H08829" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98709616556368, - 38.8936885107829, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08830" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03810995635037, - 38.939883631468845, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, LORTON - O'BRIEN

In Service


Last Inspection Date: 09/10/07

Report Problem", - "NAME": "H08831" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07159875383506, - 38.954780396611895, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08832" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03668217965783, - 38.942963644253346, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 09/12/07

Report Problem", - "NAME": "H08833" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03656952824868, - 38.94620334692981, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, US PIPE-A P SMITH

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H08834" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03663183523125, - 38.94510889314444, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/19/07

Report Problem", - "NAME": "H08835" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03096571153398, - 38.90026399937653, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08836" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03222516801468, - 38.900282161921794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08837" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03210463724255, - 38.90068526508826, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 01/22/08

Report Problem", - "NAME": "H08838" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94937575343454, - 38.90599532150236, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H08839" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95131294599805, - 38.90749146767299, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/16/08

Report Problem", - "NAME": "H08840" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94842237740023, - 38.90146015322745, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H08841" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95238859240804, - 38.907112947779304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 01/17/08

Report Problem", - "NAME": "H08842" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95154392848963, - 38.9043143366131, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08843" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.94898009499613, - 38.90193432779135, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H08844" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95062673621489, - 38.90351450627775, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 10/17/07

Report Problem", - "NAME": "H08845" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95286968234223, - 38.905953777320335, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08846" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9497264341279, - 38.90257922625323, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/21/07

Report Problem", - "NAME": "H08847" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.95007755170082, - 38.907171996772334, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 11/30/07

Report Problem", - "NAME": "H08848" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00336463139561, - 38.842961199618784, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/24/07

Report Problem", - "NAME": "H08849" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02286540829637, - 38.89670426590485, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08850" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07275352764715, - 38.91269357580465, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 11/02/07

Report Problem", - "NAME": "H08852" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96716302397698, - 38.85190698308656, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08853" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03214122554058, - 38.88655624045092, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08854" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96692717290887, - 38.85139537259351, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08855" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07264693992603, - 38.91544224830243, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H08856" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03212633583716, - 38.884691860814364, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08857" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.96803996442917, - 38.85199745492108, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08858" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07280393808152, - 38.91366517493101, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08859" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07260695412066, - 38.91453874598076, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H08860" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00826482290368, - 38.83245611662837, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08896" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01525667252106, - 38.908744515140945, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/12/07

Report Problem", - "NAME": "H08897" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99827272276606, - 38.908666333146115, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H08898" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00019506106203, - 38.90780101313025, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP SMITH - O'BRIEN

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H08899" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99805374292248, - 38.906912918249304, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08900" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99899097407206, - 38.90758652922681, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08901" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.06054096499086, - 38.910546133805695, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/02/07

Report Problem", - "NAME": "H08902" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00196182580596, - 38.901195632331486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08903" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02256671912761, - 38.925323381009946, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 09/22/06

Report Problem", - "NAME": "H08904" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0224827886553, - 38.924742946249395, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 09/22/06

Report Problem", - "NAME": "H08905" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02325215783448, - 38.92817018034462, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 08/05/06

Report Problem", - "NAME": "H08906" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0230417930079, - 38.92704055251279, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/11/07

Report Problem", - "NAME": "H08907" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02292954828596, - 38.92783495469365, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H08908" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02275504535227, - 38.9250467260951, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H08909" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02294983457368, - 38.92618751922533, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/29/07

Report Problem", - "NAME": "H08910" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0227418074932, - 38.92653292969026, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H08911" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99387490699182, - 38.90009920716982, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/02/07

Report Problem", - "NAME": "H08912" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00771007729371, - 38.95123949370792, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H08913" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00676463176144, - 38.949939937648274, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 07/26/07

Report Problem", - "NAME": "H08914" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03357163121086, - 38.900060519441354, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08915" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.031794129773, - 38.90013284937174, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 05/31/07

Report Problem", - "NAME": "H08916" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03275012726523, - 38.90010165057746, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08917" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03347979444293, - 38.900274980769176, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Clow Eddy

In Service


Last Inspection Date: 06/01/07

Report Problem", - "NAME": "H08918" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04018872076269, - 38.98957042717275, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: Unavailable

Report Problem", - "NAME": "H08919" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04189650696442, - 38.98827397062993, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 02/05/08

Report Problem", - "NAME": "H08920" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00527344245755, - 38.89614490231935, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08921" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07473909704427, - 38.943185775947015, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08922" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01699162514261, - 38.920507341162114, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 09/22/06

Report Problem", - "NAME": "H08923" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07070706888001, - 38.94318747360675, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08924" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0591929189357, - 38.91040148390385, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/06/07

Report Problem", - "NAME": "H08925" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.01695629125419, - 38.92273260929036, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 03/12/08

Report Problem", - "NAME": "H08926" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0312164383039, - 38.98469328431794, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08927" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0333204642323, - 38.98500518072252, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08928" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.03514235142791, - 38.97593048694613, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/22/07

Report Problem", - "NAME": "H08929" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07252171845182, - 38.94319165876171, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Eddy

In Service


Last Inspection Date: 06/06/07

Report Problem", - "NAME": "H08930" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92587240636306, - 38.88540878623634, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08931" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.92915987721392, - 38.88576672061623, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/08/07

Report Problem", - "NAME": "H08932" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0035278298557, - 38.82962376179835, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08933" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.04500846616315, - 38.94183439252916, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/21/07

Report Problem", - "NAME": "H08934" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98596193046112, - 38.95271650478861, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08935" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98720381084333, - 38.95368736935155, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08936" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.91083700707229, - 38.89289697790556, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 09/18/07

Report Problem", - "NAME": "H08937" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.90997247965049, - 38.893215598609096, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/07/07

Report Problem", - "NAME": "H08938" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97121428165056, - 38.928365897136516, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 07/27/07

Report Problem", - "NAME": "H08941" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97825039142175, - 38.91839795539441, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 08/30/07

Report Problem", - "NAME": "H08943" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02951468714578, - 38.88424317575938, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08944" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02877188262288, - 38.88421561528062, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08945" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97900183502773, - 38.93824158419969, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08946" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97965106878492, - 38.93913660999967, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08947" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98032172098291, - 38.939761567047796, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08948" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97540266795704, - 38.93514176655271, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/20/07

Report Problem", - "NAME": "H08949" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.97786740676564, - 38.9371988177896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Lorton

In Service


Last Inspection Date: 04/02/07

Report Problem", - "NAME": "H08950" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02992539231113, - 38.882869724926245, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08951" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.02862535635137, - 38.882834728904605, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 06/26/07

Report Problem", - "NAME": "H08952" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98373163938666, - 38.943167431929645, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 07/09/07

Report Problem", - "NAME": "H08953" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98470344318412, - 38.94375860578053, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08954" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98584257252891, - 38.944289166113776, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant

In Service


Last Inspection Date: 06/21/07

Report Problem", - "NAME": "H08955" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98955808483929, - 38.85972219720714, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, Mueller

In Service


Last Inspection Date: 10/18/06

Report Problem", - "NAME": "H08956" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98234257804742, - 38.941520236084486, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H08957" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98324549005675, - 38.94237975070426, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/18/07

Report Problem", - "NAME": "H08958" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99647808241964, - 38.862930274733635, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 01/31/08

Report Problem", - "NAME": "H08960" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.9950528034839, - 38.86234025281626, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 06/04/07

Report Problem", - "NAME": "H08961" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.99695304153806, - 38.90794910679896, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, KENNEDY-K81-A/D GUAR

In Service


Last Inspection Date: 07/10/07

Report Problem", - "NAME": "H08963" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.07707916040054, - 38.96499498141065, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AM DARLING - B-84-B

In Service


Last Inspection Date: 09/14/07

Report Problem", - "NAME": "H08964" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0093148713099, - 38.87540698725855, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, CLOW - EDDY

In Service


Last Inspection Date: 07/03/07

Report Problem", - "NAME": "H08965" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.00690648325929, - 38.8324328369647, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, AP Smith

In Service


Last Inspection Date: 06/19/07

Report Problem", - "NAME": "H08966" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -76.98819752280579, - 38.9257094658146, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, MUELLER-SUP CENT 250

In Service


Last Inspection Date: 07/17/07

Report Problem", - "NAME": "H08967" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.05389484528261, - 38.9234737236897, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 09/11/07

Report Problem", - "NAME": "H08968" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - -77.0533673443786, - 38.92334425495122, - 0.0 - ], - "type": "Point" - }, - "properties": { - "DESCRIPTIO": "Hydrant, American Darling

In Service


Last Inspection Date: 01/08/07

Report Problem", - "NAME": "H08969" - }, - "type": "Feature" - } - ], - "type": "FeatureCollection" -} diff --git a/platform/ios/app/polyline.geojson b/platform/ios/app/polyline.geojson deleted file mode 100644 index c1049695447..00000000000 --- a/platform/ios/app/polyline.geojson +++ /dev/null @@ -1,14187 +0,0 @@ -{ - "features": [ - { - "geometry": { - "coordinates": [ - [ - -122.854957, - 48.65588, - 109.7 - ], - [ - -122.854644, - 48.656217, - 112 - ], - [ - -122.855082, - 48.656155, - 111.1 - ], - [ - -122.855053, - 48.656188, - 111.4 - ], - [ - -122.854857, - 48.656198, - 111.6 - ], - [ - -122.854893, - 48.65629, - 111.8 - ], - [ - -122.855026, - 48.656349, - 111.9 - ], - [ - -122.855035, - 48.656411, - 112.1 - ], - [ - -122.855044, - 48.656437, - 112.1 - ], - [ - -122.855006, - 48.656472, - 112.6 - ], - [ - -122.85496, - 48.656508, - 112.8 - ], - [ - -122.854941, - 48.656534, - 112.9 - ], - [ - -122.854921, - 48.656575, - 113.5 - ], - [ - -122.854914, - 48.656603, - 114 - ], - [ - -122.854894, - 48.656628, - 114.5 - ], - [ - -122.854864, - 48.656659, - 114.8 - ], - [ - -122.854851, - 48.656687, - 115.2 - ], - [ - -122.854818, - 48.656718, - 115.5 - ], - [ - -122.8548, - 48.656757, - 115.3 - ], - [ - -122.85479, - 48.656783, - 115.3 - ], - [ - -122.854761, - 48.65682, - 115.5 - ], - [ - -122.854771, - 48.656851, - 115.8 - ], - [ - -122.854781, - 48.656886, - 116 - ], - [ - -122.854793, - 48.656921, - 115.9 - ], - [ - -122.854785, - 48.656954, - 115.8 - ], - [ - -122.854756, - 48.656977, - 116 - ], - [ - -122.854729, - 48.657002, - 116.1 - ], - [ - -122.85476, - 48.657038, - 118.3 - ], - [ - -122.854757, - 48.657067, - 118.5 - ], - [ - -122.854744, - 48.657097, - 118.3 - ], - [ - -122.854728, - 48.657127, - 118.6 - ], - [ - -122.854678, - 48.657135, - 117.1 - ], - [ - -122.85466, - 48.657169, - 117.5 - ], - [ - -122.854659, - 48.657203, - 117.8 - ], - [ - -122.854645, - 48.65724, - 118.2 - ], - [ - -122.854624, - 48.657282, - 118.6 - ], - [ - -122.854608, - 48.657312, - 118.8 - ], - [ - -122.854615, - 48.65735, - 119.8 - ], - [ - -122.854626, - 48.657377, - 120.8 - ], - [ - -122.854614, - 48.65741, - 120.9 - ], - [ - -122.854655, - 48.657389, - 122 - ], - [ - -122.854702, - 48.657391, - 123 - ], - [ - -122.854656, - 48.65738, - 121.9 - ], - [ - -122.854625, - 48.657402, - 121.2 - ], - [ - -122.854599, - 48.657438, - 121 - ], - [ - -122.854575, - 48.657468, - 120.9 - ], - [ - -122.854586, - 48.6575, - 121.7 - ], - [ - -122.854573, - 48.657532, - 121.9 - ], - [ - -122.854553, - 48.657569, - 122.1 - ], - [ - -122.854549, - 48.657605, - 122.4 - ], - [ - -122.854553, - 48.657636, - 123.5 - ], - [ - -122.854566, - 48.657665, - 124.7 - ], - [ - -122.854564, - 48.657693, - 125.2 - ], - [ - -122.854574, - 48.65772, - 125.9 - ], - [ - -122.854596, - 48.657747, - 126.8 - ], - [ - -122.854619, - 48.657778, - 127.4 - ], - [ - -122.854629, - 48.657807, - 127.1 - ], - [ - -122.854644, - 48.657844, - 126.7 - ], - [ - -122.854705, - 48.657861, - 128.4 - ], - [ - -122.854746, - 48.657866, - 130.3 - ], - [ - -122.854782, - 48.657897, - 131.8 - ], - [ - -122.854748, - 48.657939, - 130.5 - ], - [ - -122.854719, - 48.657958, - 129.3 - ], - [ - -122.854663, - 48.657967, - 127.8 - ], - [ - -122.854614, - 48.657967, - 128.7 - ], - [ - -122.854561, - 48.657965, - 129.5 - ], - [ - -122.8545, - 48.657953, - 131 - ], - [ - -122.854442, - 48.657947, - 133.6 - ], - [ - -122.854399, - 48.657927, - 133.8 - ], - [ - -122.854351, - 48.657929, - 135.8 - ], - [ - -122.854319, - 48.657894, - 134.8 - ], - [ - -122.854311, - 48.657866, - 133.6 - ], - [ - -122.85436, - 48.657873, - 131.5 - ], - [ - -122.854398, - 48.657886, - 130.6 - ], - [ - -122.85445, - 48.657883, - 128.6 - ], - [ - -122.854501, - 48.657883, - 127.2 - ], - [ - -122.854549, - 48.657885, - 126.7 - ], - [ - -122.854596, - 48.657899, - 127 - ], - [ - -122.854612, - 48.657924, - 127.7 - ], - [ - -122.854566, - 48.657937, - 128.4 - ], - [ - -122.854518, - 48.657934, - 129.2 - ], - [ - -122.854459, - 48.657926, - 131.1 - ], - [ - -122.854414, - 48.657951, - 135.1 - ], - [ - -122.854391, - 48.657973, - 137.1 - ], - [ - -122.854357, - 48.657953, - 137.2 - ], - [ - -122.854336, - 48.657927, - 136.3 - ], - [ - -122.854322, - 48.657902, - 135.1 - ], - [ - -122.854295, - 48.657878, - 135.1 - ], - [ - -122.854265, - 48.657854, - 135.4 - ], - [ - -122.854233, - 48.657833, - 136 - ], - [ - -122.854211, - 48.657799, - 135.6 - ], - [ - -122.854204, - 48.657753, - 133.7 - ], - [ - -122.854204, - 48.657721, - 132.3 - ], - [ - -122.854213, - 48.657685, - 130.6 - ], - [ - -122.854213, - 48.657653, - 128.7 - ], - [ - -122.854215, - 48.657618, - 126.6 - ], - [ - -122.854211, - 48.657579, - 125.5 - ], - [ - -122.85424, - 48.657534, - 124.2 - ], - [ - -122.854264, - 48.657511, - 123.6 - ], - [ - -122.854329, - 48.657491, - 122.6 - ], - [ - -122.854387, - 48.657489, - 121.6 - ], - [ - -122.854441, - 48.657494, - 121.3 - ], - [ - -122.854483, - 48.65749, - 120.8 - ], - [ - -122.854521, - 48.657469, - 120.1 - ], - [ - -122.854565, - 48.657463, - 120.5 - ], - [ - -122.854604, - 48.657453, - 121.5 - ], - [ - -122.85465, - 48.657446, - 122.7 - ], - [ - -122.854692, - 48.657445, - 123.5 - ], - [ - -122.854738, - 48.657442, - 124.3 - ], - [ - -122.854789, - 48.657438, - 125.2 - ], - [ - -122.854844, - 48.657429, - 126.4 - ], - [ - -122.854892, - 48.657419, - 127.5 - ], - [ - -122.854897, - 48.657457, - 128.4 - ], - [ - -122.854882, - 48.657491, - 128.6 - ], - [ - -122.854876, - 48.657518, - 129 - ], - [ - -122.854868, - 48.657545, - 129.7 - ], - [ - -122.854823, - 48.657551, - 129.1 - ], - [ - -122.854782, - 48.657556, - 128.5 - ], - [ - -122.854742, - 48.657548, - 127.5 - ], - [ - -122.854698, - 48.657553, - 126 - ], - [ - -122.854671, - 48.657574, - 125.6 - ], - [ - -122.854626, - 48.657578, - 124.2 - ], - [ - -122.854576, - 48.657564, - 122.5 - ], - [ - -122.854541, - 48.657584, - 122.1 - ], - [ - -122.854527, - 48.657612, - 121.9 - ], - [ - -122.85453, - 48.65764, - 122.8 - ], - [ - -122.854536, - 48.657667, - 123.9 - ], - [ - -122.85453, - 48.657695, - 124.4 - ], - [ - -122.854524, - 48.657731, - 124.8 - ], - [ - -122.854507, - 48.657758, - 124.6 - ], - [ - -122.854521, - 48.657784, - 124.9 - ], - [ - -122.854567, - 48.657808, - 125.6 - ], - [ - -122.854579, - 48.657834, - 125.7 - ], - [ - -122.854606, - 48.657856, - 126.2 - ], - [ - -122.854639, - 48.657877, - 126.7 - ], - [ - -122.854635, - 48.657909, - 127.3 - ], - [ - -122.854656, - 48.657935, - 127.6 - ], - [ - -122.854642, - 48.657961, - 127.8 - ], - [ - -122.854606, - 48.657986, - 129.2 - ], - [ - -122.854564, - 48.657977, - 129.8 - ], - [ - -122.854521, - 48.657963, - 130.7 - ], - [ - -122.854471, - 48.657959, - 132.8 - ], - [ - -122.854437, - 48.657939, - 133.2 - ], - [ - -122.854391, - 48.657924, - 133.9 - ], - [ - -122.854343, - 48.657935, - 136.6 - ], - [ - -122.854301, - 48.657928, - 137.7 - ], - [ - -122.854273, - 48.657903, - 137.6 - ], - [ - -122.854247, - 48.657882, - 137.7 - ], - [ - -122.854212, - 48.657865, - 138.2 - ], - [ - -122.854175, - 48.657851, - 138.7 - ], - [ - -122.854124, - 48.657832, - 139 - ], - [ - -122.854073, - 48.657828, - 139.9 - ], - [ - -122.854029, - 48.657824, - 140.6 - ], - [ - -122.853978, - 48.65783, - 141.8 - ], - [ - -122.853925, - 48.65783, - 142.6 - ], - [ - -122.853915, - 48.657795, - 141.2 - ], - [ - -122.853873, - 48.657801, - 141.7 - ], - [ - -122.853813, - 48.657794, - 142.4 - ], - [ - -122.853778, - 48.657774, - 142.3 - ], - [ - -122.853747, - 48.657755, - 142.3 - ], - [ - -122.853733, - 48.65773, - 142 - ], - [ - -122.853731, - 48.657693, - 141.9 - ], - [ - -122.853729, - 48.657662, - 142.4 - ], - [ - -122.85373, - 48.657632, - 143.2 - ], - [ - -122.853716, - 48.6576, - 144.6 - ], - [ - -122.853683, - 48.657583, - 146.2 - ], - [ - -122.8537, - 48.657547, - 146.3 - ], - [ - -122.853714, - 48.657518, - 146.1 - ], - [ - -122.853708, - 48.657476, - 147 - ], - [ - -122.853695, - 48.657446, - 147.9 - ], - [ - -122.853696, - 48.657405, - 148.1 - ], - [ - -122.853685, - 48.657376, - 148.5 - ], - [ - -122.853683, - 48.657345, - 148.7 - ], - [ - -122.853689, - 48.657317, - 148.8 - ], - [ - -122.853712, - 48.657348, - 147.8 - ], - [ - -122.853722, - 48.657383, - 147.3 - ], - [ - -122.853741, - 48.657413, - 146.5 - ], - [ - -122.853718, - 48.657437, - 147.2 - ], - [ - -122.853711, - 48.657465, - 147.1 - ], - [ - -122.853694, - 48.65749, - 147.2 - ], - [ - -122.853679, - 48.657525, - 147.3 - ], - [ - -122.853662, - 48.65755, - 147.6 - ], - [ - -122.853641, - 48.657575, - 147.7 - ], - [ - -122.853627, - 48.657609, - 147.2 - ], - [ - -122.853616, - 48.657638, - 147.1 - ], - [ - -122.853609, - 48.657665, - 147.1 - ], - [ - -122.853596, - 48.657699, - 147.3 - ], - [ - -122.853583, - 48.657727, - 147.6 - ], - [ - -122.853581, - 48.657755, - 147.6 - ], - [ - -122.853564, - 48.657788, - 148.3 - ], - [ - -122.853534, - 48.657817, - 149.5 - ], - [ - -122.853507, - 48.657852, - 150.8 - ], - [ - -122.853487, - 48.657878, - 151.7 - ], - [ - -122.853509, - 48.657905, - 152.2 - ], - [ - -122.853491, - 48.657943, - 153.5 - ], - [ - -122.853466, - 48.657965, - 154.5 - ], - [ - -122.853431, - 48.657998, - 156.1 - ], - [ - -122.853394, - 48.658018, - 157.2 - ], - [ - -122.853352, - 48.658037, - 158.2 - ], - [ - -122.853329, - 48.658071, - 159.3 - ], - [ - -122.853281, - 48.65809, - 160.5 - ], - [ - -122.853233, - 48.658104, - 161.6 - ], - [ - -122.853197, - 48.65812, - 162.3 - ], - [ - -122.853156, - 48.658147, - 163.4 - ], - [ - -122.853105, - 48.658157, - 164.1 - ], - [ - -122.853048, - 48.658166, - 164.6 - ], - [ - -122.852982, - 48.658164, - 164.7 - ], - [ - -122.852922, - 48.658163, - 164.7 - ], - [ - -122.852872, - 48.658166, - 164.8 - ], - [ - -122.852826, - 48.658174, - 164.9 - ], - [ - -122.85278, - 48.658167, - 165 - ], - [ - -122.852731, - 48.658151, - 165.3 - ], - [ - -122.852676, - 48.65815, - 166 - ], - [ - -122.852634, - 48.658148, - 166.5 - ], - [ - -122.852583, - 48.658141, - 166.8 - ], - [ - -122.852546, - 48.658157, - 167.2 - ], - [ - -122.852544, - 48.658188, - 167.4 - ], - [ - -122.852546, - 48.658219, - 167.4 - ], - [ - -122.852527, - 48.658247, - 168.2 - ], - [ - -122.852499, - 48.658271, - 169.5 - ], - [ - -122.852473, - 48.658293, - 170.6 - ], - [ - -122.852454, - 48.658323, - 172.1 - ], - [ - -122.852458, - 48.658351, - 173.8 - ], - [ - -122.852474, - 48.658384, - 175.8 - ], - [ - -122.852505, - 48.658402, - 177 - ], - [ - -122.852551, - 48.658421, - 178.8 - ], - [ - -122.852595, - 48.658431, - 179.5 - ], - [ - -122.852638, - 48.658444, - 180.1 - ], - [ - -122.852686, - 48.658455, - 180.4 - ], - [ - -122.852733, - 48.658475, - 181.1 - ], - [ - -122.852794, - 48.65848, - 180.7 - ], - [ - -122.852855, - 48.658502, - 180.7 - ], - [ - -122.852898, - 48.658525, - 181 - ], - [ - -122.852946, - 48.658553, - 181.3 - ], - [ - -122.852983, - 48.658565, - 181 - ], - [ - -122.853026, - 48.65858, - 180.6 - ], - [ - -122.853067, - 48.658596, - 180.6 - ], - [ - -122.853112, - 48.658611, - 180.5 - ], - [ - -122.853161, - 48.658614, - 180.1 - ], - [ - -122.853204, - 48.658636, - 180.3 - ], - [ - -122.853247, - 48.658666, - 180.9 - ], - [ - -122.853277, - 48.658694, - 180.9 - ], - [ - -122.853288, - 48.658727, - 181 - ], - [ - -122.853302, - 48.658756, - 180.9 - ], - [ - -122.85331, - 48.658791, - 181 - ], - [ - -122.853301, - 48.658823, - 181.7 - ], - [ - -122.853306, - 48.658858, - 182.1 - ], - [ - -122.853309, - 48.658889, - 182.6 - ], - [ - -122.85331, - 48.658926, - 183.3 - ], - [ - -122.853312, - 48.658957, - 184.1 - ], - [ - -122.853307, - 48.658995, - 185.4 - ], - [ - -122.853309, - 48.659026, - 186.5 - ], - [ - -122.853319, - 48.659052, - 187.7 - ], - [ - -122.853341, - 48.659087, - 189.3 - ], - [ - -122.853365, - 48.65911, - 190.2 - ], - [ - -122.853411, - 48.659135, - 190.5 - ], - [ - -122.853458, - 48.659146, - 189.8 - ], - [ - -122.853496, - 48.659162, - 189.1 - ], - [ - -122.853524, - 48.65919, - 188.9 - ], - [ - -122.853574, - 48.659196, - 189 - ], - [ - -122.853617, - 48.659209, - 190 - ], - [ - -122.853655, - 48.659231, - 191.1 - ], - [ - -122.853677, - 48.659263, - 191.7 - ], - [ - -122.853713, - 48.659287, - 191.6 - ], - [ - -122.85375, - 48.65931, - 191 - ], - [ - -122.853774, - 48.65934, - 190.9 - ], - [ - -122.853735, - 48.659356, - 191.8 - ], - [ - -122.853689, - 48.659374, - 193.1 - ], - [ - -122.85365, - 48.659358, - 193.5 - ], - [ - -122.853619, - 48.659325, - 193 - ], - [ - -122.853567, - 48.659346, - 193.3 - ], - [ - -122.853609, - 48.65936, - 193.7 - ], - [ - -122.853656, - 48.659385, - 193.8 - ], - [ - -122.853705, - 48.659405, - 193.1 - ], - [ - -122.853759, - 48.659417, - 192.5 - ], - [ - -122.853805, - 48.659433, - 192.7 - ], - [ - -122.853844, - 48.65944, - 193 - ], - [ - -122.853892, - 48.659454, - 193.3 - ], - [ - -122.853945, - 48.659462, - 193.4 - ], - [ - -122.853995, - 48.659472, - 193.3 - ], - [ - -122.854035, - 48.659455, - 192.7 - ], - [ - -122.85408, - 48.659455, - 192.3 - ], - [ - -122.854126, - 48.659472, - 192.8 - ], - [ - -122.854181, - 48.659484, - 193.6 - ], - [ - -122.854221, - 48.659498, - 194.7 - ], - [ - -122.854268, - 48.659519, - 195.8 - ], - [ - -122.854317, - 48.65954, - 196.7 - ], - [ - -122.85435, - 48.659564, - 197.9 - ], - [ - -122.854375, - 48.659596, - 199.8 - ], - [ - -122.854391, - 48.659622, - 201.5 - ], - [ - -122.854425, - 48.659658, - 203.7 - ], - [ - -122.854461, - 48.659675, - 204.2 - ], - [ - -122.854503, - 48.659685, - 203 - ], - [ - -122.854567, - 48.659691, - 200.2 - ], - [ - -122.854606, - 48.659682, - 198.2 - ], - [ - -122.854617, - 48.659646, - 196.2 - ], - [ - -122.854593, - 48.659614, - 195.8 - ], - [ - -122.854579, - 48.659586, - 195.7 - ], - [ - -122.854603, - 48.659551, - 193.1 - ], - [ - -122.854656, - 48.659531, - 190.4 - ], - [ - -122.854692, - 48.659515, - 189.4 - ], - [ - -122.854741, - 48.659517, - 190.7 - ], - [ - -122.854785, - 48.659525, - 193 - ], - [ - -122.854833, - 48.659515, - 194.6 - ], - [ - -122.854864, - 48.659497, - 194.4 - ], - [ - -122.854911, - 48.6595, - 195.4 - ], - [ - -122.854954, - 48.659506, - 196.4 - ], - [ - -122.855003, - 48.659516, - 197.6 - ], - [ - -122.85505, - 48.659526, - 198.8 - ], - [ - -122.855105, - 48.659533, - 200 - ], - [ - -122.855155, - 48.659542, - 201.2 - ], - [ - -122.855208, - 48.659551, - 202.2 - ], - [ - -122.855263, - 48.659551, - 202.7 - ], - [ - -122.855321, - 48.659549, - 202.6 - ], - [ - -122.855367, - 48.659548, - 202.4 - ], - [ - -122.855431, - 48.659537, - 201.9 - ], - [ - -122.855454, - 48.659537, - 202 - ], - [ - -122.855496, - 48.659541, - 202.3 - ], - [ - -122.855548, - 48.659542, - 202.8 - ], - [ - -122.855594, - 48.659538, - 203.1 - ], - [ - -122.855644, - 48.659553, - 204.8 - ], - [ - -122.855688, - 48.659565, - 205.6 - ], - [ - -122.855732, - 48.659577, - 205.8 - ], - [ - -122.85577, - 48.659596, - 206.2 - ], - [ - -122.855804, - 48.659617, - 206.8 - ], - [ - -122.855836, - 48.659637, - 207.4 - ], - [ - -122.855884, - 48.65966, - 208.1 - ], - [ - -122.855923, - 48.659675, - 208.2 - ], - [ - -122.855963, - 48.659688, - 208.3 - ], - [ - -122.856003, - 48.659698, - 208.4 - ], - [ - -122.856054, - 48.659707, - 208.3 - ], - [ - -122.856095, - 48.659715, - 208.3 - ], - [ - -122.856136, - 48.659733, - 208.6 - ], - [ - -122.856174, - 48.659743, - 208.7 - ], - [ - -122.856224, - 48.659746, - 208.7 - ], - [ - -122.85626, - 48.659765, - 209.5 - ], - [ - -122.856293, - 48.659789, - 210.1 - ], - [ - -122.856317, - 48.659812, - 210.6 - ], - [ - -122.856342, - 48.659848, - 211.2 - ], - [ - -122.856358, - 48.659874, - 211.3 - ], - [ - -122.856375, - 48.659909, - 211.5 - ], - [ - -122.856395, - 48.659945, - 211.5 - ], - [ - -122.856411, - 48.659975, - 211.4 - ], - [ - -122.85642, - 48.660008, - 211.3 - ], - [ - -122.856421, - 48.660039, - 211 - ], - [ - -122.856416, - 48.660071, - 210.5 - ], - [ - -122.856408, - 48.660101, - 210.1 - ], - [ - -122.856396, - 48.660129, - 210.1 - ], - [ - -122.856409, - 48.660162, - 211 - ], - [ - -122.85643, - 48.660188, - 212.1 - ], - [ - -122.856468, - 48.660212, - 213.2 - ], - [ - -122.856514, - 48.660233, - 214.1 - ], - [ - -122.856553, - 48.660245, - 214.4 - ], - [ - -122.856602, - 48.660248, - 214.2 - ], - [ - -122.856637, - 48.660264, - 214.7 - ], - [ - -122.856678, - 48.660272, - 214.6 - ], - [ - -122.856677, - 48.660301, - 215.9 - ], - [ - -122.856637, - 48.660286, - 215.6 - ], - [ - -122.856633, - 48.660336, - 218.2 - ], - [ - -122.856674, - 48.660316, - 216.6 - ], - [ - -122.856632, - 48.660275, - 215.2 - ], - [ - -122.85667, - 48.660263, - 214.2 - ], - [ - -122.856691, - 48.660236, - 212.8 - ], - [ - -122.856732, - 48.660236, - 212.7 - ], - [ - -122.85679, - 48.660225, - 212.3 - ], - [ - -122.856816, - 48.660263, - 213.7 - ], - [ - -122.856844, - 48.660286, - 214.8 - ], - [ - -122.856916, - 48.66029, - 214.6 - ], - [ - -122.856916, - 48.660329, - 216.3 - ], - [ - -122.856903, - 48.660355, - 217.4 - ], - [ - -122.856861, - 48.660355, - 217.6 - ], - [ - -122.856821, - 48.660361, - 217.7 - ], - [ - -122.856762, - 48.660366, - 217.9 - ], - [ - -122.85672, - 48.660371, - 218.4 - ], - [ - -122.856749, - 48.660395, - 219.2 - ], - [ - -122.856782, - 48.660414, - 220 - ], - [ - -122.856819, - 48.660398, - 219.5 - ], - [ - -122.856868, - 48.660383, - 218.8 - ], - [ - -122.856921, - 48.660378, - 218.4 - ], - [ - -122.85688, - 48.660381, - 218.6 - ], - [ - -122.856872, - 48.660413, - 220 - ], - [ - -122.856874, - 48.660442, - 221.3 - ], - [ - -122.856897, - 48.660464, - 222.3 - ], - [ - -122.856933, - 48.660479, - 223.1 - ], - [ - -122.856935, - 48.660506, - 224.7 - ], - [ - -122.856899, - 48.660487, - 223.5 - ], - [ - -122.856849, - 48.660494, - 223.8 - ], - [ - -122.856889, - 48.660511, - 224.7 - ], - [ - -122.856929, - 48.660525, - 225.7 - ], - [ - -122.856929, - 48.660553, - 227.2 - ], - [ - -122.856971, - 48.660558, - 227.4 - ], - [ - -122.857001, - 48.660581, - 228.8 - ], - [ - -122.856981, - 48.660605, - 230.2 - ], - [ - -122.856905, - 48.660625, - 230.7 - ], - [ - -122.856843, - 48.660619, - 229.6 - ], - [ - -122.856775, - 48.660621, - 229.4 - ], - [ - -122.856732, - 48.660647, - 230.8 - ], - [ - -122.8567, - 48.660671, - 232.1 - ], - [ - -122.856668, - 48.6607, - 233.6 - ], - [ - -122.856654, - 48.660732, - 235.1 - ], - [ - -122.856617, - 48.660746, - 235.8 - ], - [ - -122.85661, - 48.660779, - 237.2 - ], - [ - -122.856628, - 48.660806, - 238.2 - ], - [ - -122.856595, - 48.660825, - 238.7 - ], - [ - -122.856547, - 48.660834, - 238.6 - ], - [ - -122.856595, - 48.660847, - 239.5 - ], - [ - -122.856605, - 48.660873, - 240.4 - ], - [ - -122.856607, - 48.660903, - 241.1 - ], - [ - -122.856638, - 48.660928, - 242.2 - ], - [ - -122.856679, - 48.660948, - 243.3 - ], - [ - -122.85671, - 48.660971, - 244.5 - ], - [ - -122.856747, - 48.660985, - 245.2 - ], - [ - -122.856794, - 48.660996, - 245.7 - ], - [ - -122.856836, - 48.660994, - 245.7 - ], - [ - -122.856871, - 48.661023, - 247.2 - ], - [ - -122.856881, - 48.66105, - 248.7 - ], - [ - -122.856876, - 48.661085, - 250.5 - ], - [ - -122.856885, - 48.661113, - 252 - ], - [ - -122.856903, - 48.661148, - 253.7 - ], - [ - -122.856855, - 48.661172, - 254.7 - ], - [ - -122.856803, - 48.661178, - 254.8 - ], - [ - -122.856765, - 48.661189, - 255 - ], - [ - -122.856746, - 48.661221, - 256.3 - ], - [ - -122.856704, - 48.661243, - 257.3 - ], - [ - -122.856662, - 48.661223, - 256 - ], - [ - -122.856659, - 48.66126, - 257.7 - ], - [ - -122.856658, - 48.661291, - 259 - ], - [ - -122.85663, - 48.661312, - 259.8 - ], - [ - -122.856593, - 48.661325, - 260.2 - ], - [ - -122.856561, - 48.661346, - 260.7 - ], - [ - -122.856541, - 48.661378, - 261.5 - ], - [ - -122.856526, - 48.661416, - 263 - ], - [ - -122.85651, - 48.661444, - 263.9 - ], - [ - -122.856474, - 48.661468, - 264.6 - ], - [ - -122.856428, - 48.661488, - 265 - ], - [ - -122.856396, - 48.661509, - 265.6 - ], - [ - -122.856388, - 48.661537, - 266.5 - ], - [ - -122.856404, - 48.661571, - 267.6 - ], - [ - -122.856384, - 48.661611, - 268.8 - ], - [ - -122.856386, - 48.661648, - 270.1 - ], - [ - -122.856346, - 48.66167, - 270.7 - ], - [ - -122.85633, - 48.6617, - 271.6 - ], - [ - -122.856343, - 48.66173, - 272.7 - ], - [ - -122.856375, - 48.661768, - 274.3 - ], - [ - -122.856332, - 48.661741, - 273.2 - ], - [ - -122.856279, - 48.661651, - 269.6 - ], - [ - -122.856255, - 48.66162, - 268.5 - ], - [ - -122.856108, - 48.661491, - 262.8 - ], - [ - -122.856162, - 48.661517, - 264.1 - ], - [ - -122.856192, - 48.661546, - 265.6 - ], - [ - -122.856245, - 48.661593, - 267.5 - ], - [ - -122.85628, - 48.661636, - 269.1 - ], - [ - -122.856306, - 48.661666, - 270.2 - ], - [ - -122.856353, - 48.661726, - 272.6 - ], - [ - -122.856302, - 48.661688, - 271 - ], - [ - -122.856354, - 48.661699, - 271.7 - ], - [ - -122.856405, - 48.661709, - 272.2 - ], - [ - -122.856437, - 48.661746, - 273.8 - ], - [ - -122.856412, - 48.661782, - 274.9 - ], - [ - -122.856369, - 48.661742, - 273.3 - ], - [ - -122.856346, - 48.661714, - 272.1 - ], - [ - -122.856325, - 48.661747, - 273.4 - ], - [ - -122.856339, - 48.661779, - 274.6 - ], - [ - -122.856356, - 48.661809, - 275.5 - ], - [ - -122.856347, - 48.661838, - 276.4 - ], - [ - -122.856334, - 48.661872, - 277.3 - ], - [ - -122.856328, - 48.661899, - 278.2 - ], - [ - -122.856348, - 48.661925, - 279.3 - ], - [ - -122.856359, - 48.661953, - 280.5 - ], - [ - -122.856333, - 48.661976, - 280.9 - ], - [ - -122.85635, - 48.662004, - 282 - ], - [ - -122.856314, - 48.662027, - 282.4 - ], - [ - -122.856306, - 48.662058, - 283.3 - ], - [ - -122.856331, - 48.66208, - 283.9 - ], - [ - -122.856333, - 48.662108, - 284.6 - ], - [ - -122.856337, - 48.662143, - 285.3 - ], - [ - -122.856354, - 48.662171, - 286 - ], - [ - -122.856387, - 48.662193, - 286.4 - ], - [ - -122.85642, - 48.662213, - 287 - ], - [ - -122.856438, - 48.662242, - 287.7 - ], - [ - -122.856463, - 48.662278, - 288.7 - ], - [ - -122.856498, - 48.662307, - 289.4 - ], - [ - -122.856512, - 48.662333, - 289.8 - ], - [ - -122.856479, - 48.66236, - 290.1 - ], - [ - -122.856444, - 48.662383, - 290.7 - ], - [ - -122.856442, - 48.662411, - 291.2 - ], - [ - -122.856463, - 48.662435, - 291.5 - ], - [ - -122.856428, - 48.66242, - 291.4 - ], - [ - -122.856397, - 48.662396, - 291.4 - ], - [ - -122.856433, - 48.66241, - 291.3 - ], - [ - -122.856462, - 48.662439, - 291.6 - ], - [ - -122.856487, - 48.662465, - 292.1 - ], - [ - -122.856506, - 48.662495, - 292.7 - ], - [ - -122.856529, - 48.662522, - 293.3 - ], - [ - -122.856533, - 48.662552, - 293.9 - ], - [ - -122.856557, - 48.662581, - 294.6 - ], - [ - -122.856585, - 48.662609, - 295.4 - ], - [ - -122.856583, - 48.662641, - 295.9 - ], - [ - -122.856583, - 48.662675, - 296.5 - ], - [ - -122.85661, - 48.6627, - 297.3 - ], - [ - -122.856643, - 48.662719, - 297.9 - ], - [ - -122.856653, - 48.662749, - 298.3 - ], - [ - -122.856631, - 48.662783, - 298.3 - ], - [ - -122.856615, - 48.662813, - 298.4 - ], - [ - -122.85659, - 48.662836, - 298.8 - ], - [ - -122.856594, - 48.662864, - 299.4 - ], - [ - -122.856611, - 48.662895, - 300 - ], - [ - -122.856652, - 48.662915, - 300.6 - ], - [ - -122.856675, - 48.662939, - 300.9 - ], - [ - -122.856688, - 48.662984, - 301.4 - ], - [ - -122.856701, - 48.663023, - 302.1 - ], - [ - -122.856713, - 48.663049, - 302.7 - ], - [ - -122.856718, - 48.663079, - 303.3 - ], - [ - -122.856741, - 48.663106, - 303.9 - ], - [ - -122.856792, - 48.663122, - 304.4 - ], - [ - -122.856815, - 48.663148, - 304.9 - ], - [ - -122.856832, - 48.663173, - 305.6 - ], - [ - -122.856848, - 48.663209, - 306.1 - ], - [ - -122.856862, - 48.663241, - 306.2 - ], - [ - -122.856893, - 48.663265, - 306.6 - ], - [ - -122.856925, - 48.663288, - 307 - ], - [ - -122.856945, - 48.66332, - 307.5 - ], - [ - -122.856973, - 48.66334, - 307.9 - ], - [ - -122.856999, - 48.663374, - 308.2 - ], - [ - -122.857012, - 48.663404, - 307.8 - ], - [ - -122.857014, - 48.663433, - 307.2 - ], - [ - -122.857009, - 48.663462, - 306.6 - ], - [ - -122.857002, - 48.663497, - 306.2 - ], - [ - -122.856983, - 48.663529, - 306 - ], - [ - -122.856951, - 48.663557, - 305.6 - ], - [ - -122.856953, - 48.663586, - 305.5 - ], - [ - -122.85698, - 48.663607, - 305.7 - ], - [ - -122.857024, - 48.663635, - 306.2 - ], - [ - -122.857044, - 48.663668, - 306.2 - ], - [ - -122.857065, - 48.663699, - 306.1 - ], - [ - -122.857076, - 48.663729, - 305.8 - ], - [ - -122.857081, - 48.663758, - 305.7 - ], - [ - -122.857079, - 48.66379, - 305.6 - ], - [ - -122.857077, - 48.663827, - 305.6 - ], - [ - -122.857071, - 48.663854, - 305.6 - ], - [ - -122.85706, - 48.663885, - 305.3 - ], - [ - -122.857081, - 48.663916, - 305.3 - ], - [ - -122.857126, - 48.663938, - 306.1 - ], - [ - -122.857135, - 48.663972, - 306.7 - ], - [ - -122.857155, - 48.664011, - 307.4 - ], - [ - -122.857151, - 48.664046, - 307.6 - ], - [ - -122.8571, - 48.664056, - 306.6 - ], - [ - -122.85706, - 48.664046, - 305.7 - ], - [ - -122.857084, - 48.664077, - 306.8 - ], - [ - -122.857107, - 48.664107, - 307.4 - ], - [ - -122.857121, - 48.664134, - 308 - ], - [ - -122.857103, - 48.664159, - 308.1 - ], - [ - -122.857067, - 48.664185, - 306.9 - ], - [ - -122.857073, - 48.664214, - 307.2 - ], - [ - -122.857011, - 48.664236, - 304.5 - ], - [ - -122.856953, - 48.66426, - 303.4 - ], - [ - -122.856929, - 48.664217, - 302.4 - ], - [ - -122.856933, - 48.664169, - 302.9 - ], - [ - -122.856948, - 48.664131, - 303.8 - ], - [ - -122.857051, - 48.66409, - 306.1 - ], - [ - -122.857144, - 48.664092, - 307.5 - ], - [ - -122.857197, - 48.664069, - 309.8 - ], - [ - -122.85729, - 48.664053, - 313.4 - ], - [ - -122.857366, - 48.664048, - 316.8 - ], - [ - -122.857342, - 48.664077, - 315.8 - ], - [ - -122.857294, - 48.664094, - 313.7 - ], - [ - -122.857182, - 48.664129, - 309.3 - ], - [ - -122.857108, - 48.66414, - 307.9 - ], - [ - -122.857061, - 48.664181, - 306.6 - ], - [ - -122.857044, - 48.664227, - 305.7 - ], - [ - -122.857089, - 48.664243, - 307.7 - ], - [ - -122.857139, - 48.664252, - 309.7 - ], - [ - -122.857114, - 48.664273, - 308.3 - ], - [ - -122.857131, - 48.664302, - 308.5 - ], - [ - -122.85711, - 48.664328, - 306.9 - ], - [ - -122.857091, - 48.664354, - 306.6 - ], - [ - -122.85709, - 48.664394, - 307.9 - ], - [ - -122.857102, - 48.664421, - 308.9 - ], - [ - -122.857116, - 48.664453, - 309.9 - ], - [ - -122.857156, - 48.664469, - 310.4 - ], - [ - -122.857194, - 48.664498, - 311.4 - ], - [ - -122.857195, - 48.664531, - 312.3 - ], - [ - -122.857179, - 48.664557, - 313.2 - ], - [ - -122.857158, - 48.664593, - 314.3 - ], - [ - -122.857148, - 48.664653, - 314.2 - ], - [ - -122.857142, - 48.664668, - 313.9 - ], - [ - -122.857108, - 48.664698, - 313.4 - ], - [ - -122.857099, - 48.664726, - 313.1 - ], - [ - -122.857091, - 48.66476, - 313.3 - ], - [ - -122.857088, - 48.664791, - 314.1 - ], - [ - -122.857109, - 48.664816, - 315.2 - ], - [ - -122.857128, - 48.664848, - 316.9 - ], - [ - -122.85714, - 48.664874, - 318.6 - ], - [ - -122.857102, - 48.66489, - 319.7 - ], - [ - -122.857112, - 48.66492, - 321.4 - ], - [ - -122.857103, - 48.664948, - 322.7 - ], - [ - -122.857134, - 48.664972, - 324.3 - ], - [ - -122.857153, - 48.664998, - 325.5 - ], - [ - -122.857153, - 48.665025, - 326.7 - ], - [ - -122.857131, - 48.665062, - 327.6 - ], - [ - -122.857129, - 48.665091, - 328.4 - ], - [ - -122.857127, - 48.665124, - 329.1 - ], - [ - -122.857107, - 48.665161, - 329.5 - ], - [ - -122.857133, - 48.665181, - 330.5 - ], - [ - -122.857144, - 48.665208, - 331.4 - ], - [ - -122.857155, - 48.66524, - 332.5 - ], - [ - -122.85719, - 48.665217, - 333 - ], - [ - -122.85718, - 48.665245, - 333.3 - ], - [ - -122.857158, - 48.665279, - 333.4 - ], - [ - -122.85716, - 48.665311, - 333.9 - ], - [ - -122.857167, - 48.665342, - 334.4 - ], - [ - -122.857161, - 48.665371, - 334.7 - ], - [ - -122.857152, - 48.665409, - 335.3 - ], - [ - -122.857151, - 48.665439, - 335.5 - ], - [ - -122.857149, - 48.665472, - 335.8 - ], - [ - -122.85716, - 48.665506, - 336 - ], - [ - -122.85716, - 48.665536, - 336.1 - ], - [ - -122.857154, - 48.665568, - 335.8 - ], - [ - -122.857144, - 48.665597, - 335.4 - ], - [ - -122.857162, - 48.665624, - 336.1 - ], - [ - -122.857165, - 48.665654, - 336.1 - ], - [ - -122.857167, - 48.665691, - 336 - ], - [ - -122.857189, - 48.66572, - 336.5 - ], - [ - -122.857225, - 48.665737, - 337.6 - ], - [ - -122.857258, - 48.665767, - 338.3 - ], - [ - -122.857289, - 48.665789, - 339 - ], - [ - -122.857322, - 48.665818, - 339.6 - ], - [ - -122.85735, - 48.665845, - 339.8 - ], - [ - -122.857388, - 48.665869, - 340.2 - ], - [ - -122.857434, - 48.665891, - 340.8 - ], - [ - -122.857473, - 48.66591, - 341.6 - ], - [ - -122.857511, - 48.665929, - 342.1 - ], - [ - -122.857546, - 48.66596, - 342.7 - ], - [ - -122.857581, - 48.665984, - 343.7 - ], - [ - -122.857623, - 48.665975, - 344.9 - ], - [ - -122.857665, - 48.665982, - 345.6 - ], - [ - -122.857623, - 48.665986, - 344.8 - ], - [ - -122.857577, - 48.665994, - 343.5 - ], - [ - -122.857531, - 48.666008, - 342.6 - ], - [ - -122.857602, - 48.665994, - 344.2 - ], - [ - -122.85761, - 48.665967, - 344.6 - ], - [ - -122.857623, - 48.665936, - 344.3 - ], - [ - -122.857617, - 48.665907, - 343.6 - ], - [ - -122.857604, - 48.665871, - 343.2 - ], - [ - -122.857607, - 48.66582, - 343.9 - ], - [ - -122.857598, - 48.665892, - 343.1 - ], - [ - -122.857648, - 48.665912, - 344.3 - ], - [ - -122.857698, - 48.66593, - 345.5 - ], - [ - -122.857729, - 48.665949, - 346.4 - ], - [ - -122.857758, - 48.665975, - 346.8 - ], - [ - -122.857789, - 48.665994, - 346.5 - ], - [ - -122.85784, - 48.666005, - 346.2 - ], - [ - -122.857885, - 48.666013, - 345.9 - ], - [ - -122.857931, - 48.666031, - 345.5 - ], - [ - -122.857975, - 48.666024, - 345.4 - ], - [ - -122.858023, - 48.666032, - 345 - ], - [ - -122.858054, - 48.666051, - 344.3 - ], - [ - -122.858077, - 48.666079, - 344.3 - ], - [ - -122.858102, - 48.666108, - 344.8 - ], - [ - -122.858129, - 48.666142, - 345.5 - ], - [ - -122.858158, - 48.666171, - 346.4 - ], - [ - -122.858179, - 48.666195, - 347.4 - ], - [ - -122.858194, - 48.666225, - 348.7 - ], - [ - -122.858209, - 48.66626, - 350.1 - ], - [ - -122.858211, - 48.666287, - 351.2 - ], - [ - -122.858205, - 48.666319, - 352.4 - ], - [ - -122.858217, - 48.666359, - 353.5 - ], - [ - -122.858228, - 48.666393, - 354.3 - ], - [ - -122.858224, - 48.666424, - 355.3 - ], - [ - -122.858209, - 48.666449, - 356.1 - ], - [ - -122.858217, - 48.666484, - 357.1 - ], - [ - -122.85823, - 48.666509, - 357.8 - ], - [ - -122.858239, - 48.666545, - 358.8 - ], - [ - -122.858232, - 48.666574, - 359.1 - ], - [ - -122.858236, - 48.666605, - 359.5 - ], - [ - -122.858251, - 48.666634, - 360 - ], - [ - -122.858273, - 48.666661, - 360.8 - ], - [ - -122.858285, - 48.666692, - 361.5 - ], - [ - -122.858288, - 48.666723, - 361.9 - ], - [ - -122.858291, - 48.666752, - 362.2 - ], - [ - -122.858295, - 48.666788, - 362.7 - ], - [ - -122.858304, - 48.666817, - 363.1 - ], - [ - -122.858289, - 48.66685, - 362.7 - ], - [ - -122.858271, - 48.666884, - 362.3 - ], - [ - -122.858263, - 48.66692, - 362.3 - ], - [ - -122.858258, - 48.666949, - 362.2 - ], - [ - -122.85825, - 48.666975, - 362.1 - ], - [ - -122.858245, - 48.667006, - 362.2 - ], - [ - -122.858243, - 48.667038, - 362.3 - ], - [ - -122.85822, - 48.667075, - 362.3 - ], - [ - -122.858192, - 48.667099, - 362.4 - ], - [ - -122.858133, - 48.667122, - 362.6 - ], - [ - -122.858091, - 48.667147, - 363.2 - ], - [ - -122.858051, - 48.667162, - 363.6 - ], - [ - -122.857996, - 48.667186, - 364.5 - ], - [ - -122.857961, - 48.667211, - 365.2 - ], - [ - -122.857927, - 48.667238, - 366.2 - ], - [ - -122.857876, - 48.667244, - 366.9 - ], - [ - -122.857843, - 48.667261, - 368 - ], - [ - -122.857803, - 48.667282, - 369.5 - ], - [ - -122.857762, - 48.667301, - 370.6 - ], - [ - -122.857705, - 48.667304, - 370.3 - ], - [ - -122.857648, - 48.667306, - 369.3 - ], - [ - -122.857603, - 48.667306, - 368.2 - ], - [ - -122.857555, - 48.667304, - 367 - ], - [ - -122.857512, - 48.667295, - 365.9 - ], - [ - -122.857471, - 48.667266, - 364.9 - ], - [ - -122.857433, - 48.667255, - 364.4 - ], - [ - -122.857376, - 48.667259, - 363.9 - ], - [ - -122.857316, - 48.667269, - 363.6 - ], - [ - -122.857267, - 48.667277, - 363.5 - ], - [ - -122.857213, - 48.667279, - 363.3 - ], - [ - -122.857171, - 48.667288, - 363.4 - ], - [ - -122.857138, - 48.667305, - 363.5 - ], - [ - -122.857126, - 48.667336, - 364.1 - ], - [ - -122.857145, - 48.667367, - 365.1 - ], - [ - -122.857153, - 48.667396, - 366.1 - ], - [ - -122.857154, - 48.667425, - 366.9 - ], - [ - -122.857137, - 48.667452, - 367 - ], - [ - -122.857094, - 48.667469, - 366.1 - ], - [ - -122.857138, - 48.667509, - 367.7 - ], - [ - -122.857192, - 48.66754, - 369.3 - ], - [ - -122.857165, - 48.667564, - 368.7 - ], - [ - -122.857133, - 48.667589, - 368 - ], - [ - -122.857101, - 48.667609, - 367.9 - ], - [ - -122.857092, - 48.667637, - 368.8 - ], - [ - -122.857071, - 48.667664, - 370.2 - ], - [ - -122.85707, - 48.667692, - 371.1 - ], - [ - -122.85707, - 48.667722, - 372.4 - ], - [ - -122.857062, - 48.667754, - 373.9 - ], - [ - -122.856994, - 48.667758, - 375.8 - ], - [ - -122.85698, - 48.667793, - 377.7 - ], - [ - -122.856984, - 48.667817, - 378.7 - ], - [ - -122.85702, - 48.667839, - 378.6 - ], - [ - -122.857036, - 48.667867, - 379.6 - ], - [ - -122.857028, - 48.6679, - 381.5 - ], - [ - -122.857046, - 48.667924, - 382.1 - ], - [ - -122.857078, - 48.667945, - 382.3 - ], - [ - -122.857124, - 48.667952, - 381.6 - ], - [ - -122.857134, - 48.667981, - 382.7 - ], - [ - -122.857143, - 48.668011, - 383.7 - ], - [ - -122.857109, - 48.668033, - 385.5 - ], - [ - -122.8571, - 48.668066, - 387 - ], - [ - -122.857083, - 48.668105, - 389.5 - ], - [ - -122.857101, - 48.668136, - 390.3 - ], - [ - -122.857117, - 48.668162, - 391.1 - ], - [ - -122.857123, - 48.668194, - 392.6 - ], - [ - -122.857085, - 48.668223, - 394.7 - ], - [ - -122.857071, - 48.668249, - 395.5 - ], - [ - -122.857069, - 48.66828, - 396.3 - ], - [ - -122.857075, - 48.668311, - 397.1 - ], - [ - -122.857061, - 48.668337, - 396.9 - ], - [ - -122.857048, - 48.668368, - 396.8 - ], - [ - -122.857063, - 48.668402, - 397.4 - ], - [ - -122.857085, - 48.668437, - 398 - ], - [ - -122.857088, - 48.668474, - 398 - ], - [ - -122.857072, - 48.6685, - 398.3 - ], - [ - -122.857073, - 48.668528, - 398.7 - ], - [ - -122.85709, - 48.668561, - 399.4 - ], - [ - -122.857104, - 48.668588, - 400 - ], - [ - -122.857113, - 48.668619, - 400.5 - ], - [ - -122.857122, - 48.668646, - 400.8 - ], - [ - -122.857133, - 48.668676, - 401.1 - ], - [ - -122.857136, - 48.668706, - 401.5 - ], - [ - -122.857151, - 48.668731, - 401.7 - ], - [ - -122.857133, - 48.668764, - 402.3 - ], - [ - -122.857142, - 48.668798, - 402.4 - ], - [ - -122.857138, - 48.668829, - 402.2 - ], - [ - -122.857153, - 48.668869, - 401.4 - ], - [ - -122.85715, - 48.668902, - 400.5 - ], - [ - -122.857148, - 48.668942, - 399.8 - ], - [ - -122.857128, - 48.668976, - 399.7 - ], - [ - -122.857109, - 48.669008, - 399.7 - ], - [ - -122.857096, - 48.669036, - 399.6 - ], - [ - -122.85712, - 48.669062, - 399.1 - ], - [ - -122.857137, - 48.669089, - 399.2 - ], - [ - -122.857144, - 48.669122, - 399.7 - ], - [ - -122.857132, - 48.669152, - 400.3 - ], - [ - -122.857127, - 48.669193, - 401.2 - ], - [ - -122.857128, - 48.669223, - 402.1 - ], - [ - -122.857126, - 48.669252, - 403 - ], - [ - -122.857147, - 48.669276, - 403.7 - ], - [ - -122.857141, - 48.669305, - 403.9 - ], - [ - -122.857136, - 48.669337, - 404 - ], - [ - -122.857147, - 48.669363, - 404.7 - ], - [ - -122.857166, - 48.66939, - 405.7 - ], - [ - -122.857153, - 48.669417, - 406.3 - ], - [ - -122.857153, - 48.669445, - 407 - ], - [ - -122.857178, - 48.669474, - 408.2 - ], - [ - -122.857187, - 48.669505, - 408.7 - ], - [ - -122.857198, - 48.669531, - 409 - ], - [ - -122.857224, - 48.669559, - 409.6 - ], - [ - -122.8572, - 48.669589, - 409.4 - ], - [ - -122.857197, - 48.66963, - 410.1 - ], - [ - -122.857188, - 48.669662, - 410.8 - ], - [ - -122.85717, - 48.669692, - 411.5 - ], - [ - -122.857187, - 48.669726, - 412.8 - ], - [ - -122.857168, - 48.669754, - 413.9 - ], - [ - -122.85716, - 48.669798, - 415.2 - ], - [ - -122.857136, - 48.669831, - 416.7 - ], - [ - -122.85708, - 48.669879, - 418.2 - ], - [ - -122.857069, - 48.669911, - 419.4 - ], - [ - -122.857044, - 48.669942, - 420.6 - ], - [ - -122.857082, - 48.66992, - 419.9 - ], - [ - -122.857112, - 48.669901, - 419 - ], - [ - -122.857159, - 48.669905, - 419.4 - ], - [ - -122.857209, - 48.669909, - 419.8 - ], - [ - -122.857249, - 48.669926, - 420.3 - ], - [ - -122.85728, - 48.669949, - 420.9 - ], - [ - -122.857327, - 48.669975, - 421.4 - ], - [ - -122.857381, - 48.670008, - 422.1 - ], - [ - -122.857398, - 48.670024, - 422.7 - ], - [ - -122.857414, - 48.670041, - 423.6 - ], - [ - -122.85743, - 48.670057, - 424.3 - ], - [ - -122.857447, - 48.670074, - 425 - ], - [ - -122.857463, - 48.67009, - 425.7 - ], - [ - -122.857479, - 48.670107, - 426.5 - ], - [ - -122.857496, - 48.670123, - 427.5 - ], - [ - -122.857512, - 48.67014, - 428.4 - ], - [ - -122.857528, - 48.670156, - 429.3 - ], - [ - -122.857545, - 48.670173, - 430.2 - ], - [ - -122.857561, - 48.670189, - 430.9 - ], - [ - -122.857577, - 48.670206, - 431.7 - ], - [ - -122.857594, - 48.670223, - 432.4 - ], - [ - -122.85757, - 48.670254, - 434 - ], - [ - -122.857611, - 48.670229, - 432.7 - ], - [ - -122.857654, - 48.670226, - 432.4 - ], - [ - -122.857697, - 48.670246, - 433.5 - ], - [ - -122.857693, - 48.670277, - 435 - ], - [ - -122.857717, - 48.670245, - 433.4 - ], - [ - -122.857769, - 48.670237, - 432.9 - ], - [ - -122.857817, - 48.670232, - 433.1 - ], - [ - -122.857857, - 48.670241, - 433.6 - ], - [ - -122.857886, - 48.67027, - 435.2 - ], - [ - -122.85791, - 48.670296, - 436.5 - ], - [ - -122.857904, - 48.670324, - 437.7 - ], - [ - -122.857863, - 48.670351, - 438.3 - ], - [ - -122.857853, - 48.67038, - 439.4 - ], - [ - -122.857862, - 48.670414, - 440.9 - ], - [ - -122.857847, - 48.670443, - 442.2 - ], - [ - -122.857829, - 48.670469, - 443.2 - ], - [ - -122.857814, - 48.670504, - 444.6 - ], - [ - -122.857846, - 48.670528, - 445.5 - ], - [ - -122.857884, - 48.670561, - 446.7 - ], - [ - -122.857884, - 48.670533, - 445.7 - ], - [ - -122.857845, - 48.670545, - 446.2 - ], - [ - -122.857812, - 48.670564, - 446.8 - ], - [ - -122.857814, - 48.670591, - 447.8 - ], - [ - -122.857796, - 48.670622, - 448.9 - ], - [ - -122.857774, - 48.670645, - 449.9 - ], - [ - -122.857747, - 48.670676, - 451 - ], - [ - -122.857719, - 48.670703, - 451.8 - ], - [ - -122.857687, - 48.670728, - 452.5 - ], - [ - -122.857737, - 48.670734, - 452.7 - ], - [ - -122.857735, - 48.670765, - 453.8 - ], - [ - -122.857701, - 48.670788, - 454.6 - ], - [ - -122.857624, - 48.670777, - 453.7 - ], - [ - -122.857588, - 48.670762, - 452.7 - ], - [ - -122.857524, - 48.67079, - 452.5 - ], - [ - -122.857505, - 48.670761, - 451.5 - ], - [ - -122.857452, - 48.670767, - 450.7 - ], - [ - -122.8574, - 48.670755, - 450.2 - ], - [ - -122.857445, - 48.670748, - 450.5 - ], - [ - -122.857483, - 48.670759, - 451.1 - ], - [ - -122.857484, - 48.670793, - 451.7 - ], - [ - -122.857452, - 48.670811, - 451.2 - ], - [ - -122.857431, - 48.670838, - 451 - ], - [ - -122.85741, - 48.670867, - 451.2 - ], - [ - -122.857366, - 48.670887, - 452.6 - ], - [ - -122.857326, - 48.670904, - 454.2 - ], - [ - -122.857271, - 48.670907, - 454.8 - ], - [ - -122.857217, - 48.670924, - 455.6 - ], - [ - -122.857186, - 48.670949, - 456.5 - ], - [ - -122.857162, - 48.670972, - 457.1 - ], - [ - -122.85716, - 48.671001, - 458.1 - ], - [ - -122.857168, - 48.67103, - 459.3 - ], - [ - -122.857172, - 48.671063, - 460.5 - ], - [ - -122.857174, - 48.671093, - 461.5 - ], - [ - -122.857144, - 48.671119, - 461.9 - ], - [ - -122.85711, - 48.671061, - 459.6 - ], - [ - -122.857104, - 48.67103, - 458.4 - ], - [ - -122.857112, - 48.671064, - 459.7 - ], - [ - -122.857135, - 48.671095, - 461 - ], - [ - -122.857147, - 48.671126, - 462.2 - ], - [ - -122.857125, - 48.6711, - 461 - ], - [ - -122.857155, - 48.671125, - 462.3 - ], - [ - -122.857146, - 48.671166, - 463.3 - ], - [ - -122.857119, - 48.671186, - 463.4 - ], - [ - -122.857101, - 48.671219, - 464 - ], - [ - -122.857107, - 48.671251, - 464.9 - ], - [ - -122.857114, - 48.671283, - 465.9 - ], - [ - -122.857116, - 48.671316, - 466.7 - ], - [ - -122.857131, - 48.671344, - 467.7 - ], - [ - -122.857156, - 48.671368, - 468.6 - ], - [ - -122.857165, - 48.671395, - 469.4 - ], - [ - -122.85718, - 48.671426, - 470.3 - ], - [ - -122.857195, - 48.671454, - 471 - ], - [ - -122.857204, - 48.671483, - 471.6 - ], - [ - -122.857215, - 48.671514, - 472.1 - ], - [ - -122.857259, - 48.671523, - 471.9 - ], - [ - -122.85729, - 48.671542, - 472 - ], - [ - -122.857304, - 48.671571, - 472.6 - ], - [ - -122.857336, - 48.671602, - 473.4 - ], - [ - -122.857355, - 48.671628, - 474.4 - ], - [ - -122.85736, - 48.671662, - 475.5 - ], - [ - -122.85738, - 48.671691, - 476.3 - ], - [ - -122.857409, - 48.671711, - 476.6 - ], - [ - -122.85739, - 48.671739, - 477.5 - ], - [ - -122.857355, - 48.671768, - 477.8 - ], - [ - -122.85735, - 48.671807, - 477.5 - ], - [ - -122.857349, - 48.671834, - 477 - ], - [ - -122.857357, - 48.671867, - 476.7 - ], - [ - -122.857363, - 48.671899, - 477.7 - ], - [ - -122.857331, - 48.671935, - 479.9 - ], - [ - -122.857314, - 48.67196, - 481.9 - ], - [ - -122.857308, - 48.671988, - 482.8 - ], - [ - -122.857299, - 48.672021, - 483.6 - ], - [ - -122.857305, - 48.672049, - 483.9 - ], - [ - -122.857247, - 48.672077, - 484.8 - ], - [ - -122.857214, - 48.672094, - 485.3 - ], - [ - -122.857198, - 48.672133, - 486.4 - ], - [ - -122.857199, - 48.672172, - 487.7 - ], - [ - -122.857211, - 48.672201, - 488.7 - ], - [ - -122.857226, - 48.672226, - 489.7 - ], - [ - -122.857255, - 48.672245, - 490.4 - ], - [ - -122.85722, - 48.672267, - 491.4 - ], - [ - -122.857196, - 48.672296, - 492.3 - ], - [ - -122.857175, - 48.672323, - 492.5 - ], - [ - -122.857151, - 48.672346, - 492.6 - ], - [ - -122.85717, - 48.67237, - 493.4 - ], - [ - -122.857214, - 48.672393, - 494.7 - ], - [ - -122.857173, - 48.672417, - 494.5 - ], - [ - -122.857126, - 48.672399, - 493.5 - ], - [ - -122.857044, - 48.672385, - 494.9 - ], - [ - -122.856999, - 48.67238, - 495.8 - ], - [ - -122.857056, - 48.672377, - 494.4 - ], - [ - -122.857099, - 48.672379, - 493.2 - ], - [ - -122.857156, - 48.672384, - 493.4 - ], - [ - -122.857173, - 48.672417, - 494.5 - ], - [ - -122.85716, - 48.672474, - 495.6 - ], - [ - -122.857204, - 48.672415, - 495.1 - ], - [ - -122.857196, - 48.672384, - 494.2 - ], - [ - -122.857257, - 48.672389, - 495 - ], - [ - -122.857185, - 48.672366, - 493.6 - ], - [ - -122.857194, - 48.672409, - 494.8 - ], - [ - -122.857186, - 48.672438, - 495.3 - ], - [ - -122.857193, - 48.672467, - 496.2 - ], - [ - -122.857191, - 48.672499, - 497 - ], - [ - -122.857155, - 48.672515, - 496.6 - ], - [ - -122.857136, - 48.672548, - 497.2 - ], - [ - -122.857122, - 48.672573, - 497.7 - ], - [ - -122.857117, - 48.672615, - 498.8 - ], - [ - -122.857138, - 48.672654, - 500.3 - ], - [ - -122.857153, - 48.672687, - 501.4 - ], - [ - -122.857166, - 48.672721, - 502.4 - ], - [ - -122.857169, - 48.672753, - 503.1 - ], - [ - -122.857165, - 48.672788, - 503.8 - ], - [ - -122.857165, - 48.672825, - 504.6 - ], - [ - -122.857171, - 48.672859, - 505.2 - ], - [ - -122.857187, - 48.672886, - 505.6 - ], - [ - -122.85719, - 48.672921, - 506.1 - ], - [ - -122.857191, - 48.672954, - 506.6 - ], - [ - -122.857198, - 48.672985, - 507 - ], - [ - -122.857205, - 48.673013, - 507.1 - ], - [ - -122.857218, - 48.673044, - 506.9 - ], - [ - -122.857219, - 48.673075, - 506.6 - ], - [ - -122.857207, - 48.673108, - 506.1 - ], - [ - -122.857205, - 48.673151, - 506.3 - ], - [ - -122.857205, - 48.673184, - 506.7 - ], - [ - -122.857217, - 48.673217, - 507.5 - ], - [ - -122.857222, - 48.673251, - 508.1 - ], - [ - -122.857215, - 48.67329, - 508.5 - ], - [ - -122.857212, - 48.673321, - 508.8 - ], - [ - -122.857213, - 48.673358, - 509.1 - ], - [ - -122.857212, - 48.67339, - 509.3 - ], - [ - -122.857211, - 48.673423, - 509.7 - ], - [ - -122.857205, - 48.673457, - 510.4 - ], - [ - -122.857214, - 48.673486, - 510.7 - ], - [ - -122.857247, - 48.673509, - 510.3 - ], - [ - -122.857279, - 48.673535, - 509.9 - ], - [ - -122.857306, - 48.673559, - 509.5 - ], - [ - -122.857334, - 48.673586, - 509.2 - ], - [ - -122.857354, - 48.673623, - 509.3 - ], - [ - -122.857371, - 48.67365, - 509.4 - ], - [ - -122.857405, - 48.673665, - 509.3 - ], - [ - -122.857449, - 48.673676, - 509.3 - ], - [ - -122.857472, - 48.673704, - 509.6 - ], - [ - -122.857507, - 48.673719, - 509.7 - ], - [ - -122.857547, - 48.673708, - 509.4 - ], - [ - -122.857494, - 48.673718, - 509.7 - ], - [ - -122.857441, - 48.673737, - 509.9 - ], - [ - -122.857487, - 48.673757, - 509.6 - ], - [ - -122.857514, - 48.673783, - 509.2 - ], - [ - -122.857557, - 48.673784, - 509.1 - ], - [ - -122.857606, - 48.673782, - 508.8 - ], - [ - -122.857655, - 48.673792, - 507.4 - ], - [ - -122.857711, - 48.673803, - 508.9 - ], - [ - -122.857748, - 48.673817, - 510.4 - ], - [ - -122.857789, - 48.673827, - 511.1 - ], - [ - -122.857805, - 48.673854, - 512 - ], - [ - -122.857823, - 48.673889, - 513.2 - ], - [ - -122.857857, - 48.673911, - 514.3 - ], - [ - -122.857886, - 48.673942, - 515.6 - ], - [ - -122.857897, - 48.673973, - 516.9 - ], - [ - -122.857884, - 48.674005, - 518 - ], - [ - -122.857938, - 48.674018, - 518.8 - ], - [ - -122.85796, - 48.673985, - 517.7 - ], - [ - -122.857913, - 48.673978, - 517.2 - ], - [ - -122.857926, - 48.674014, - 518.6 - ], - [ - -122.857922, - 48.674041, - 519.4 - ], - [ - -122.85792, - 48.674076, - 520.4 - ], - [ - -122.85793, - 48.67411, - 521.5 - ], - [ - -122.857929, - 48.674146, - 522.3 - ], - [ - -122.857949, - 48.674175, - 523.4 - ], - [ - -122.857983, - 48.674197, - 524.4 - ], - [ - -122.858002, - 48.674231, - 525.7 - ], - [ - -122.857985, - 48.674261, - 526.5 - ], - [ - -122.858014, - 48.674296, - 528 - ], - [ - -122.858011, - 48.67433, - 529.2 - ], - [ - -122.858002, - 48.674365, - 530.3 - ], - [ - -122.858007, - 48.674401, - 531.4 - ], - [ - -122.857967, - 48.674441, - 532.3 - ], - [ - -122.857963, - 48.674479, - 533.2 - ], - [ - -122.857943, - 48.674504, - 533.7 - ], - [ - -122.857895, - 48.674523, - 533.9 - ], - [ - -122.857881, - 48.674549, - 534.6 - ], - [ - -122.857842, - 48.674569, - 535 - ], - [ - -122.857821, - 48.674594, - 535.6 - ], - [ - -122.85778, - 48.674618, - 536.3 - ], - [ - -122.857749, - 48.674644, - 536.9 - ], - [ - -122.85775, - 48.674673, - 537.9 - ], - [ - -122.857758, - 48.674705, - 539 - ], - [ - -122.857738, - 48.674733, - 539.6 - ], - [ - -122.857758, - 48.674762, - 540.5 - ], - [ - -122.857728, - 48.674781, - 540.8 - ], - [ - -122.857707, - 48.67481, - 541.5 - ], - [ - -122.857695, - 48.674841, - 542.2 - ], - [ - -122.857673, - 48.674871, - 542.7 - ], - [ - -122.857651, - 48.674898, - 543.2 - ], - [ - -122.857619, - 48.674931, - 544 - ], - [ - -122.857594, - 48.674961, - 544.7 - ], - [ - -122.857572, - 48.674991, - 545.3 - ], - [ - -122.857549, - 48.675019, - 545.5 - ], - [ - -122.857523, - 48.675045, - 546 - ], - [ - -122.857474, - 48.67506, - 546.1 - ], - [ - -122.857434, - 48.675088, - 546.6 - ], - [ - -122.857407, - 48.675116, - 547 - ], - [ - -122.857394, - 48.675151, - 547.6 - ], - [ - -122.857369, - 48.675175, - 547.9 - ], - [ - -122.857306, - 48.675182, - 547.9 - ], - [ - -122.857266, - 48.675194, - 548.3 - ], - [ - -122.857229, - 48.675211, - 548.9 - ], - [ - -122.857207, - 48.67524, - 549.4 - ], - [ - -122.857187, - 48.675267, - 549.7 - ], - [ - -122.857171, - 48.675302, - 549.9 - ], - [ - -122.857152, - 48.675327, - 550.2 - ], - [ - -122.857131, - 48.675354, - 550.2 - ], - [ - -122.857113, - 48.675381, - 549.9 - ], - [ - -122.857099, - 48.67541, - 549.7 - ], - [ - -122.857105, - 48.675443, - 549.5 - ], - [ - -122.857108, - 48.67548, - 549.5 - ], - [ - -122.857108, - 48.675511, - 549.5 - ], - [ - -122.85715, - 48.675536, - 549.4 - ], - [ - -122.857162, - 48.675564, - 549.2 - ], - [ - -122.857175, - 48.675591, - 549 - ], - [ - -122.857175, - 48.675621, - 548.9 - ], - [ - -122.85717, - 48.675654, - 548.8 - ], - [ - -122.85718, - 48.675684, - 548.8 - ], - [ - -122.857186, - 48.675719, - 549 - ], - [ - -122.857184, - 48.675749, - 549.6 - ], - [ - -122.857184, - 48.675777, - 549.9 - ], - [ - -122.857175, - 48.675818, - 550.1 - ], - [ - -122.857168, - 48.675847, - 550.3 - ], - [ - -122.857166, - 48.675884, - 550.9 - ], - [ - -122.857171, - 48.675911, - 551.3 - ], - [ - -122.857184, - 48.675944, - 552.3 - ], - [ - -122.857204, - 48.675969, - 553 - ], - [ - -122.857217, - 48.675995, - 553.7 - ], - [ - -122.857235, - 48.676034, - 555 - ], - [ - -122.85724, - 48.676061, - 555.9 - ], - [ - -122.857261, - 48.676096, - 557.4 - ], - [ - -122.857253, - 48.676126, - 558.2 - ], - [ - -122.85726, - 48.676162, - 559.4 - ], - [ - -122.857246, - 48.676194, - 560 - ], - [ - -122.857256, - 48.676227, - 561.3 - ], - [ - -122.857253, - 48.67626, - 562.2 - ], - [ - -122.857241, - 48.676292, - 562.8 - ], - [ - -122.857218, - 48.676333, - 563.2 - ], - [ - -122.857185, - 48.676359, - 562.8 - ], - [ - -122.857149, - 48.676392, - 562.7 - ], - [ - -122.857126, - 48.676419, - 562.8 - ], - [ - -122.857092, - 48.676462, - 562.9 - ], - [ - -122.857121, - 48.676483, - 563.7 - ], - [ - -122.857153, - 48.676505, - 565.1 - ], - [ - -122.857154, - 48.67654, - 566.1 - ], - [ - -122.857141, - 48.676571, - 566.4 - ], - [ - -122.857146, - 48.676606, - 567.5 - ], - [ - -122.857151, - 48.676636, - 568.5 - ], - [ - -122.857147, - 48.676666, - 569.1 - ], - [ - -122.857149, - 48.676707, - 569.8 - ], - [ - -122.857167, - 48.676739, - 571 - ], - [ - -122.857161, - 48.676767, - 571.1 - ], - [ - -122.857155, - 48.676796, - 571.1 - ], - [ - -122.857144, - 48.676826, - 571.1 - ], - [ - -122.857131, - 48.676852, - 570.9 - ], - [ - -122.857132, - 48.676882, - 571.1 - ], - [ - -122.857136, - 48.67691, - 571.3 - ], - [ - -122.857138, - 48.676948, - 571.5 - ], - [ - -122.85714, - 48.676984, - 571.7 - ], - [ - -122.857159, - 48.677011, - 572.3 - ], - [ - -122.857194, - 48.677045, - 573.2 - ], - [ - -122.857225, - 48.677065, - 573.9 - ], - [ - -122.857249, - 48.677095, - 574.3 - ], - [ - -122.857255, - 48.677127, - 574.4 - ], - [ - -122.857255, - 48.677161, - 574.6 - ], - [ - -122.857251, - 48.677197, - 574.6 - ], - [ - -122.857244, - 48.677234, - 574.2 - ], - [ - -122.857246, - 48.677267, - 574 - ], - [ - -122.85729, - 48.677301, - 574 - ], - [ - -122.857272, - 48.677328, - 573.6 - ], - [ - -122.857235, - 48.677348, - 573.3 - ], - [ - -122.857193, - 48.677347, - 573.5 - ], - [ - -122.857147, - 48.677353, - 573.7 - ], - [ - -122.857108, - 48.677365, - 573.6 - ], - [ - -122.857058, - 48.677379, - 572.7 - ], - [ - -122.85702, - 48.677393, - 571.9 - ], - [ - -122.856984, - 48.677407, - 571.5 - ], - [ - -122.856943, - 48.677432, - 571 - ], - [ - -122.856895, - 48.677444, - 570.4 - ], - [ - -122.856845, - 48.677453, - 569.4 - ], - [ - -122.856789, - 48.677462, - 567.7 - ], - [ - -122.856745, - 48.67747, - 566.7 - ], - [ - -122.85669, - 48.677484, - 566.5 - ], - [ - -122.856647, - 48.677496, - 566.8 - ], - [ - -122.856605, - 48.677519, - 567.2 - ], - [ - -122.856584, - 48.677545, - 567.7 - ], - [ - -122.85657, - 48.677582, - 568 - ], - [ - -122.856537, - 48.677605, - 569.1 - ], - [ - -122.856494, - 48.677612, - 570.8 - ], - [ - -122.856464, - 48.677631, - 571.4 - ], - [ - -122.856423, - 48.677633, - 571.6 - ], - [ - -122.856377, - 48.677628, - 571.9 - ], - [ - -122.856327, - 48.677633, - 572.5 - ], - [ - -122.856277, - 48.677628, - 572.7 - ], - [ - -122.856227, - 48.67763, - 572.3 - ], - [ - -122.856178, - 48.677626, - 571.7 - ], - [ - -122.856134, - 48.677625, - 571.6 - ], - [ - -122.856091, - 48.677635, - 571.8 - ], - [ - -122.85605, - 48.677642, - 572.2 - ], - [ - -122.85601, - 48.677658, - 572.9 - ], - [ - -122.855959, - 48.677663, - 573.2 - ], - [ - -122.855926, - 48.677627, - 572.9 - ], - [ - -122.855888, - 48.677608, - 573.2 - ], - [ - -122.855835, - 48.677602, - 574 - ], - [ - -122.855784, - 48.67761, - 575 - ], - [ - -122.85573, - 48.677613, - 575.8 - ], - [ - -122.855673, - 48.677617, - 576.5 - ], - [ - -122.855613, - 48.677622, - 577.3 - ], - [ - -122.855555, - 48.677627, - 577.9 - ], - [ - -122.855514, - 48.677627, - 578 - ], - [ - -122.855468, - 48.677615, - 577.9 - ], - [ - -122.855426, - 48.677621, - 578.3 - ], - [ - -122.855387, - 48.677643, - 579.5 - ], - [ - -122.855359, - 48.677664, - 580.1 - ], - [ - -122.855318, - 48.677683, - 580.6 - ], - [ - -122.855264, - 48.677694, - 580.9 - ], - [ - -122.855224, - 48.677701, - 581.4 - ], - [ - -122.855172, - 48.677714, - 582.4 - ], - [ - -122.855125, - 48.677712, - 582.9 - ], - [ - -122.855086, - 48.677724, - 583.9 - ], - [ - -122.855051, - 48.677744, - 585.4 - ], - [ - -122.855005, - 48.677745, - 586.3 - ], - [ - -122.854964, - 48.677755, - 587.5 - ], - [ - -122.854929, - 48.67774, - 587.7 - ], - [ - -122.854885, - 48.67773, - 588.2 - ], - [ - -122.854832, - 48.677737, - 589.3 - ], - [ - -122.85479, - 48.677732, - 589.9 - ], - [ - -122.854753, - 48.677745, - 590.8 - ], - [ - -122.85472, - 48.677769, - 591.7 - ], - [ - -122.8547, - 48.677802, - 592.3 - ], - [ - -122.854664, - 48.677819, - 592.4 - ], - [ - -122.854624, - 48.677827, - 592.5 - ], - [ - -122.854601, - 48.677858, - 592.9 - ], - [ - -122.854592, - 48.677887, - 593.5 - ], - [ - -122.85458, - 48.677919, - 594.4 - ], - [ - -122.854573, - 48.677953, - 595.4 - ], - [ - -122.854582, - 48.677985, - 595.9 - ], - [ - -122.854568, - 48.678011, - 596.5 - ], - [ - -122.854536, - 48.678036, - 597 - ], - [ - -122.854487, - 48.678049, - 597.3 - ], - [ - -122.854443, - 48.678058, - 597.4 - ], - [ - -122.854403, - 48.678055, - 597.3 - ], - [ - -122.854363, - 48.67804, - 597.4 - ], - [ - -122.854324, - 48.678022, - 598.1 - ], - [ - -122.854284, - 48.678001, - 599.2 - ], - [ - -122.854253, - 48.677982, - 599.9 - ], - [ - -122.854219, - 48.677962, - 600.4 - ], - [ - -122.854183, - 48.677947, - 601 - ], - [ - -122.85415, - 48.677968, - 601.8 - ], - [ - -122.854089, - 48.677977, - 602.5 - ], - [ - -122.854042, - 48.677988, - 602.7 - ], - [ - -122.854005, - 48.678001, - 602.9 - ], - [ - -122.853952, - 48.678015, - 602.9 - ], - [ - -122.853909, - 48.67803, - 602.9 - ], - [ - -122.853871, - 48.678044, - 602.8 - ], - [ - -122.853828, - 48.678067, - 602.8 - ], - [ - -122.853789, - 48.678083, - 602.7 - ], - [ - -122.853766, - 48.678109, - 602.7 - ], - [ - -122.853748, - 48.678144, - 602.8 - ], - [ - -122.853729, - 48.67818, - 602.8 - ], - [ - -122.853699, - 48.67821, - 602.9 - ], - [ - -122.853691, - 48.678246, - 603.1 - ], - [ - -122.853689, - 48.678274, - 603.5 - ], - [ - -122.853673, - 48.678302, - 604.4 - ], - [ - -122.853646, - 48.678331, - 605.7 - ], - [ - -122.853621, - 48.678362, - 606.9 - ], - [ - -122.853595, - 48.678389, - 607.6 - ], - [ - -122.853568, - 48.678415, - 608 - ], - [ - -122.853527, - 48.678438, - 608.3 - ], - [ - -122.853479, - 48.678452, - 608.7 - ], - [ - -122.85344, - 48.678468, - 609.3 - ], - [ - -122.853403, - 48.678489, - 609.8 - ], - [ - -122.853369, - 48.678516, - 610.2 - ], - [ - -122.853318, - 48.678548, - 610.7 - ], - [ - -122.85329, - 48.678572, - 610.8 - ], - [ - -122.853255, - 48.678603, - 610.8 - ], - [ - -122.853233, - 48.678626, - 610.9 - ], - [ - -122.853207, - 48.678658, - 610.9 - ], - [ - -122.853192, - 48.678686, - 610.7 - ], - [ - -122.853163, - 48.678705, - 610.7 - ], - [ - -122.853133, - 48.678732, - 610.7 - ], - [ - -122.853137, - 48.678766, - 610.3 - ], - [ - -122.85313, - 48.678798, - 609.8 - ], - [ - -122.853101, - 48.678822, - 609.4 - ], - [ - -122.853063, - 48.67884, - 609.4 - ], - [ - -122.853023, - 48.678863, - 609.2 - ], - [ - -122.852996, - 48.678885, - 608.9 - ], - [ - -122.852968, - 48.678911, - 608.7 - ], - [ - -122.852952, - 48.678962, - 608.5 - ], - [ - -122.852945, - 48.678976, - 608.5 - ], - [ - -122.85292, - 48.679008, - 608.5 - ], - [ - -122.852897, - 48.679031, - 608.6 - ], - [ - -122.852865, - 48.679049, - 608.6 - ], - [ - -122.852861, - 48.679077, - 608.4 - ], - [ - -122.852839, - 48.679111, - 608.5 - ], - [ - -122.852819, - 48.67914, - 608.7 - ], - [ - -122.852795, - 48.679172, - 608.9 - ], - [ - -122.85278, - 48.679202, - 609 - ], - [ - -122.852765, - 48.679236, - 609.1 - ], - [ - -122.852755, - 48.679268, - 608.8 - ], - [ - -122.852742, - 48.679299, - 608.6 - ], - [ - -122.852724, - 48.679325, - 608.3 - ], - [ - -122.852694, - 48.679354, - 608.2 - ], - [ - -122.852684, - 48.679381, - 607.9 - ], - [ - -122.852669, - 48.679415, - 607.4 - ], - [ - -122.852647, - 48.679443, - 607.1 - ], - [ - -122.852622, - 48.679473, - 606.9 - ], - [ - -122.852602, - 48.679512, - 606.8 - ], - [ - -122.852568, - 48.67953, - 606.6 - ], - [ - -122.852532, - 48.679553, - 606.3 - ], - [ - -122.852506, - 48.679581, - 606.2 - ], - [ - -122.852472, - 48.679606, - 605.8 - ], - [ - -122.852425, - 48.679628, - 605.1 - ], - [ - -122.852403, - 48.67964, - 604.8 - ], - [ - -122.852373, - 48.679662, - 604.4 - ], - [ - -122.852351, - 48.679686, - 604 - ], - [ - -122.852318, - 48.679709, - 603.5 - ], - [ - -122.852284, - 48.679727, - 602.8 - ], - [ - -122.85224, - 48.679748, - 602 - ], - [ - -122.852198, - 48.679776, - 601.5 - ], - [ - -122.852182, - 48.679802, - 601.1 - ], - [ - -122.852156, - 48.679834, - 600.7 - ], - [ - -122.852133, - 48.679856, - 600.4 - ], - [ - -122.852098, - 48.679879, - 599.9 - ], - [ - -122.852069, - 48.679899, - 599.5 - ], - [ - -122.852023, - 48.67992, - 599.4 - ], - [ - -122.851992, - 48.679945, - 599.5 - ], - [ - -122.851964, - 48.679974, - 599.4 - ], - [ - -122.851937, - 48.680001, - 599.1 - ], - [ - -122.851913, - 48.680023, - 598.8 - ], - [ - -122.851876, - 48.680043, - 598.8 - ], - [ - -122.851831, - 48.680062, - 599 - ], - [ - -122.851789, - 48.680084, - 599.4 - ], - [ - -122.851763, - 48.680106, - 599.7 - ], - [ - -122.851719, - 48.68013, - 600.2 - ], - [ - -122.851672, - 48.680152, - 600.6 - ], - [ - -122.85163, - 48.680158, - 601 - ], - [ - -122.851631, - 48.680124, - 600.9 - ], - [ - -122.851674, - 48.680113, - 600.5 - ], - [ - -122.851678, - 48.68007, - 600.3 - ], - [ - -122.851653, - 48.680045, - 600.2 - ], - [ - -122.851588, - 48.68011, - 601.1 - ], - [ - -122.851591, - 48.680142, - 601.1 - ], - [ - -122.851546, - 48.680141, - 601.7 - ], - [ - -122.851516, - 48.680117, - 601.7 - ], - [ - -122.851523, - 48.680151, - 602.1 - ], - [ - -122.851543, - 48.680179, - 602.1 - ], - [ - -122.851516, - 48.680153, - 602.2 - ], - [ - -122.851477, - 48.68014, - 602.6 - ], - [ - -122.851464, - 48.680109, - 602.4 - ], - [ - -122.851459, - 48.680077, - 602.3 - ], - [ - -122.851448, - 48.680041, - 602 - ], - [ - -122.851425, - 48.680007, - 601.8 - ], - [ - -122.851413, - 48.679975, - 601.3 - ], - [ - -122.851399, - 48.679946, - 601.1 - ], - [ - -122.851403, - 48.679913, - 600.7 - ], - [ - -122.851394, - 48.679883, - 600.4 - ], - [ - -122.851387, - 48.679849, - 600 - ], - [ - -122.851375, - 48.679817, - 599.7 - ], - [ - -122.851392, - 48.679791, - 599.4 - ], - [ - -122.851407, - 48.679759, - 599.2 - ], - [ - -122.851407, - 48.67973, - 598.9 - ], - [ - -122.851412, - 48.679701, - 598.8 - ], - [ - -122.851422, - 48.679674, - 598.5 - ], - [ - -122.851427, - 48.679644, - 598.3 - ], - [ - -122.851421, - 48.679606, - 597.9 - ], - [ - -122.851411, - 48.67957, - 597.7 - ], - [ - -122.851396, - 48.679544, - 597.8 - ], - [ - -122.85139, - 48.679513, - 597.8 - ], - [ - -122.851397, - 48.679484, - 597.6 - ], - [ - -122.851401, - 48.679454, - 597.5 - ], - [ - -122.85138, - 48.679428, - 597.5 - ], - [ - -122.851366, - 48.679398, - 597.2 - ], - [ - -122.851362, - 48.679369, - 597.5 - ], - [ - -122.851357, - 48.679341, - 597.4 - ], - [ - -122.851354, - 48.679309, - 597.2 - ], - [ - -122.851362, - 48.679279, - 597 - ], - [ - -122.85137, - 48.67925, - 596.6 - ], - [ - -122.851376, - 48.679222, - 596.4 - ], - [ - -122.851386, - 48.679191, - 596.4 - ], - [ - -122.851401, - 48.679156, - 596.2 - ], - [ - -122.851404, - 48.679126, - 596.1 - ], - [ - -122.851387, - 48.679093, - 596.3 - ], - [ - -122.851378, - 48.679062, - 595.9 - ], - [ - -122.851383, - 48.679029, - 595.4 - ], - [ - -122.851408, - 48.679004, - 594.9 - ], - [ - -122.851401, - 48.678975, - 594.4 - ], - [ - -122.851325, - 48.678928, - 593.1 - ], - [ - -122.851284, - 48.678943, - 593 - ], - [ - -122.851329, - 48.678954, - 593.7 - ], - [ - -122.851327, - 48.678987, - 594.5 - ], - [ - -122.851334, - 48.678925, - 593.1 - ], - [ - -122.851337, - 48.678894, - 592.6 - ], - [ - -122.85134, - 48.678867, - 592.3 - ], - [ - -122.85135, - 48.678831, - 592 - ], - [ - -122.851352, - 48.678791, - 591.8 - ], - [ - -122.851351, - 48.678762, - 591.6 - ], - [ - -122.851372, - 48.678725, - 591.8 - ], - [ - -122.851385, - 48.678686, - 591.9 - ], - [ - -122.851402, - 48.678653, - 592.2 - ], - [ - -122.851413, - 48.67862, - 592.3 - ], - [ - -122.851436, - 48.678596, - 592.6 - ], - [ - -122.85144, - 48.678563, - 592.8 - ], - [ - -122.851459, - 48.678538, - 593 - ], - [ - -122.851469, - 48.678508, - 593.2 - ], - [ - -122.851478, - 48.678479, - 593.4 - ], - [ - -122.851504, - 48.678453, - 593.4 - ], - [ - -122.851536, - 48.678419, - 593.2 - ], - [ - -122.85155, - 48.67839, - 593.3 - ], - [ - -122.851557, - 48.678363, - 593.5 - ], - [ - -122.851581, - 48.678333, - 593.9 - ], - [ - -122.851593, - 48.678299, - 594.2 - ], - [ - -122.851596, - 48.678269, - 594.5 - ], - [ - -122.851591, - 48.678232, - 595 - ], - [ - -122.851585, - 48.678203, - 596.1 - ], - [ - -122.851588, - 48.678155, - 596.9 - ], - [ - -122.851625, - 48.678142, - 596.8 - ], - [ - -122.851647, - 48.678117, - 596.5 - ], - [ - -122.851639, - 48.678082, - 596.1 - ], - [ - -122.85163, - 48.678044, - 595.6 - ], - [ - -122.851645, - 48.678011, - 595.4 - ], - [ - -122.851652, - 48.67798, - 595.8 - ], - [ - -122.851644, - 48.677949, - 596.3 - ], - [ - -122.851615, - 48.677929, - 596.5 - ], - [ - -122.851629, - 48.677893, - 597.2 - ], - [ - -122.851642, - 48.67786, - 597.9 - ], - [ - -122.851634, - 48.677826, - 599 - ], - [ - -122.851602, - 48.677793, - 600 - ], - [ - -122.851564, - 48.677778, - 600.4 - ], - [ - -122.851539, - 48.677754, - 600.9 - ], - [ - -122.851522, - 48.677713, - 601.2 - ], - [ - -122.851518, - 48.677682, - 601.4 - ], - [ - -122.851514, - 48.677653, - 601.5 - ], - [ - -122.851509, - 48.67762, - 601.7 - ], - [ - -122.851478, - 48.677583, - 601.6 - ], - [ - -122.851461, - 48.677555, - 601.8 - ], - [ - -122.851452, - 48.677521, - 602 - ], - [ - -122.851466, - 48.677489, - 602.1 - ], - [ - -122.851477, - 48.677454, - 602.1 - ], - [ - -122.851478, - 48.677418, - 602.3 - ], - [ - -122.851461, - 48.677392, - 602.5 - ], - [ - -122.851456, - 48.677364, - 602.6 - ], - [ - -122.851448, - 48.677326, - 602.6 - ], - [ - -122.851463, - 48.677284, - 601.9 - ], - [ - -122.851473, - 48.677249, - 601.1 - ], - [ - -122.851494, - 48.677218, - 600 - ], - [ - -122.851504, - 48.67719, - 599.3 - ], - [ - -122.851489, - 48.677161, - 599.1 - ], - [ - -122.851465, - 48.677135, - 599.1 - ], - [ - -122.851449, - 48.677095, - 598.8 - ], - [ - -122.851448, - 48.677058, - 598.4 - ], - [ - -122.851446, - 48.677029, - 598.1 - ], - [ - -122.851431, - 48.677, - 597.7 - ], - [ - -122.851417, - 48.676965, - 596.6 - ], - [ - -122.851415, - 48.676935, - 595.7 - ], - [ - -122.851412, - 48.676904, - 595.2 - ], - [ - -122.851401, - 48.676862, - 595.6 - ], - [ - -122.851404, - 48.676829, - 596.4 - ], - [ - -122.851414, - 48.676797, - 596.9 - ], - [ - -122.851418, - 48.676771, - 597 - ], - [ - -122.851405, - 48.676738, - 597 - ], - [ - -122.851413, - 48.676707, - 596.8 - ], - [ - -122.851405, - 48.676678, - 596.5 - ], - [ - -122.851403, - 48.676646, - 596 - ], - [ - -122.851396, - 48.676612, - 595.5 - ], - [ - -122.851412, - 48.676584, - 594.9 - ], - [ - -122.851399, - 48.676555, - 594.5 - ], - [ - -122.85139, - 48.676524, - 593.9 - ], - [ - -122.851403, - 48.676493, - 593.3 - ], - [ - -122.851398, - 48.676463, - 592.7 - ], - [ - -122.851389, - 48.676431, - 592.1 - ], - [ - -122.851379, - 48.676387, - 591.5 - ], - [ - -122.851387, - 48.676349, - 591.2 - ], - [ - -122.851402, - 48.676315, - 591.2 - ], - [ - -122.851438, - 48.676294, - 592 - ], - [ - -122.851478, - 48.676277, - 592.9 - ], - [ - -122.851455, - 48.676235, - 592.4 - ], - [ - -122.851433, - 48.676207, - 591.6 - ], - [ - -122.851437, - 48.67617, - 591.5 - ], - [ - -122.851448, - 48.67614, - 591.5 - ], - [ - -122.851485, - 48.676118, - 591.8 - ], - [ - -122.851499, - 48.676089, - 591.4 - ], - [ - -122.851507, - 48.676058, - 590.9 - ], - [ - -122.851555, - 48.676028, - 591 - ], - [ - -122.851568, - 48.675998, - 590.9 - ], - [ - -122.851566, - 48.675965, - 590.3 - ], - [ - -122.851584, - 48.675936, - 590.1 - ], - [ - -122.851605, - 48.675911, - 590.2 - ], - [ - -122.851591, - 48.675875, - 589.8 - ], - [ - -122.851561, - 48.67584, - 589.9 - ], - [ - -122.851544, - 48.675802, - 589.9 - ], - [ - -122.851533, - 48.675774, - 589.9 - ], - [ - -122.851513, - 48.675739, - 590.1 - ], - [ - -122.85152, - 48.675709, - 589.7 - ], - [ - -122.851497, - 48.67567, - 590.3 - ], - [ - -122.851478, - 48.675641, - 590.3 - ], - [ - -122.851456, - 48.675611, - 590.4 - ], - [ - -122.851438, - 48.675586, - 590.8 - ], - [ - -122.851427, - 48.675556, - 590.8 - ], - [ - -122.851409, - 48.675523, - 590.6 - ], - [ - -122.851398, - 48.675489, - 590.3 - ], - [ - -122.851381, - 48.675457, - 589.9 - ], - [ - -122.85137, - 48.675422, - 589.5 - ], - [ - -122.851357, - 48.675389, - 589.9 - ], - [ - -122.851332, - 48.675342, - 590.9 - ], - [ - -122.851324, - 48.675297, - 591.9 - ], - [ - -122.851312, - 48.675264, - 592.2 - ], - [ - -122.85131, - 48.675225, - 593 - ], - [ - -122.851307, - 48.675196, - 593.2 - ], - [ - -122.851331, - 48.675166, - 593.5 - ], - [ - -122.851366, - 48.675148, - 594 - ], - [ - -122.851364, - 48.675118, - 594.5 - ], - [ - -122.851365, - 48.675077, - 595.2 - ], - [ - -122.851365, - 48.675047, - 595.6 - ], - [ - -122.851362, - 48.675017, - 596.4 - ], - [ - -122.851371, - 48.674988, - 597.1 - ], - [ - -122.851386, - 48.674963, - 597.8 - ], - [ - -122.851395, - 48.674933, - 598.6 - ], - [ - -122.851395, - 48.674898, - 599.7 - ], - [ - -122.851382, - 48.674862, - 600.8 - ], - [ - -122.851374, - 48.674835, - 601.5 - ], - [ - -122.851376, - 48.674803, - 602.7 - ], - [ - -122.85138, - 48.674775, - 603.3 - ], - [ - -122.851387, - 48.674739, - 603.8 - ], - [ - -122.85142, - 48.67471, - 603.9 - ], - [ - -122.851446, - 48.674682, - 604.1 - ], - [ - -122.851493, - 48.674673, - 604.2 - ], - [ - -122.85154, - 48.674656, - 604.8 - ], - [ - -122.851582, - 48.674656, - 605 - ], - [ - -122.851636, - 48.674646, - 605.5 - ], - [ - -122.851688, - 48.674654, - 605.8 - ], - [ - -122.851747, - 48.674644, - 606.6 - ], - [ - -122.851798, - 48.674633, - 607.2 - ], - [ - -122.85185, - 48.67463, - 607.9 - ], - [ - -122.851898, - 48.674634, - 608.4 - ], - [ - -122.85194, - 48.674628, - 609.7 - ], - [ - -122.851986, - 48.674623, - 611.4 - ], - [ - -122.852039, - 48.674612, - 613.1 - ], - [ - -122.852082, - 48.674619, - 613.7 - ], - [ - -122.852037, - 48.674643, - 612.2 - ], - [ - -122.852, - 48.674626, - 611.7 - ], - [ - -122.851961, - 48.674614, - 610.9 - ], - [ - -122.851921, - 48.674605, - 610.1 - ], - [ - -122.851889, - 48.674582, - 610.9 - ], - [ - -122.851846, - 48.674559, - 612.2 - ], - [ - -122.851824, - 48.674524, - 614.1 - ], - [ - -122.851814, - 48.674497, - 615.8 - ], - [ - -122.851795, - 48.674463, - 618 - ], - [ - -122.851773, - 48.674433, - 618.4 - ], - [ - -122.851745, - 48.674409, - 618.5 - ], - [ - -122.851729, - 48.674376, - 619.3 - ], - [ - -122.851726, - 48.674348, - 620 - ], - [ - -122.851703, - 48.674315, - 620.8 - ], - [ - -122.851665, - 48.674292, - 621.2 - ], - [ - -122.85163, - 48.674262, - 622 - ], - [ - -122.85162, - 48.674226, - 623.7 - ], - [ - -122.851587, - 48.674199, - 625.3 - ], - [ - -122.851552, - 48.674163, - 625.7 - ], - [ - -122.851529, - 48.674135, - 625.6 - ], - [ - -122.851494, - 48.674115, - 625.3 - ], - [ - -122.851468, - 48.674091, - 625.1 - ], - [ - -122.851446, - 48.674061, - 624.9 - ], - [ - -122.85144, - 48.674033, - 625.2 - ], - [ - -122.851441, - 48.674005, - 625.9 - ], - [ - -122.851457, - 48.673979, - 626.9 - ], - [ - -122.851478, - 48.673946, - 627.9 - ], - [ - -122.8515, - 48.673921, - 628.8 - ], - [ - -122.851483, - 48.673896, - 629.5 - ], - [ - -122.851459, - 48.673861, - 630.8 - ], - [ - -122.851437, - 48.673835, - 631.2 - ], - [ - -122.851454, - 48.673807, - 631.7 - ], - [ - -122.851493, - 48.673794, - 631.8 - ], - [ - -122.851479, - 48.673828, - 631.5 - ], - [ - -122.851447, - 48.673852, - 630.9 - ], - [ - -122.851507, - 48.673836, - 631.2 - ], - [ - -122.851532, - 48.673818, - 631.4 - ], - [ - -122.85153, - 48.673788, - 631.8 - ], - [ - -122.851533, - 48.673756, - 632 - ], - [ - -122.851516, - 48.673721, - 632.3 - ], - [ - -122.851497, - 48.673685, - 632.5 - ], - [ - -122.851479, - 48.67365, - 632.7 - ], - [ - -122.851454, - 48.673626, - 632.9 - ], - [ - -122.851436, - 48.673595, - 632.8 - ], - [ - -122.851423, - 48.673556, - 632.6 - ], - [ - -122.851424, - 48.673527, - 632.3 - ], - [ - -122.851426, - 48.673493, - 632 - ], - [ - -122.851404, - 48.673466, - 631.9 - ], - [ - -122.851376, - 48.673434, - 631.6 - ], - [ - -122.851347, - 48.673409, - 631.8 - ], - [ - -122.851319, - 48.673385, - 632.2 - ], - [ - -122.851305, - 48.673355, - 632.5 - ], - [ - -122.851284, - 48.673322, - 633.2 - ], - [ - -122.851263, - 48.673298, - 633.4 - ], - [ - -122.851224, - 48.673271, - 634 - ], - [ - -122.851185, - 48.673247, - 634.4 - ], - [ - -122.851156, - 48.673224, - 634.2 - ], - [ - -122.851133, - 48.673201, - 634.6 - ], - [ - -122.851098, - 48.673179, - 635.1 - ], - [ - -122.851071, - 48.673158, - 635.3 - ], - [ - -122.851041, - 48.673135, - 635.3 - ], - [ - -122.851, - 48.673106, - 635.8 - ], - [ - -122.850967, - 48.673078, - 636.2 - ], - [ - -122.850918, - 48.673058, - 636.7 - ], - [ - -122.85087, - 48.673055, - 637.3 - ], - [ - -122.850846, - 48.673021, - 637.2 - ], - [ - -122.850829, - 48.672993, - 637.1 - ], - [ - -122.850801, - 48.672957, - 637.3 - ], - [ - -122.85078, - 48.672932, - 637.3 - ], - [ - -122.850732, - 48.67293, - 637 - ], - [ - -122.850683, - 48.672915, - 636.7 - ], - [ - -122.850659, - 48.67289, - 636.6 - ], - [ - -122.850629, - 48.672864, - 636.6 - ], - [ - -122.850602, - 48.672838, - 636.7 - ], - [ - -122.850572, - 48.672806, - 636.9 - ], - [ - -122.850538, - 48.67278, - 637.1 - ], - [ - -122.850487, - 48.672777, - 637 - ], - [ - -122.850431, - 48.672761, - 637.4 - ], - [ - -122.850408, - 48.672736, - 637.7 - ], - [ - -122.850384, - 48.672767, - 637.7 - ], - [ - -122.850347, - 48.67273, - 638.1 - ], - [ - -122.850292, - 48.672747, - 638.1 - ], - [ - -122.850264, - 48.672722, - 638.3 - ], - [ - -122.850313, - 48.67274, - 638.1 - ], - [ - -122.850304, - 48.672692, - 638.2 - ], - [ - -122.850225, - 48.672679, - 638.4 - ], - [ - -122.850187, - 48.672669, - 638.6 - ], - [ - -122.850139, - 48.672661, - 639.3 - ], - [ - -122.850127, - 48.672628, - 639.2 - ], - [ - -122.850073, - 48.67259, - 638.8 - ], - [ - -122.850039, - 48.672571, - 638.4 - ], - [ - -122.849995, - 48.672563, - 638.5 - ], - [ - -122.849954, - 48.672558, - 638.9 - ], - [ - -122.849915, - 48.672536, - 639.2 - ], - [ - -122.849874, - 48.672524, - 639.6 - ], - [ - -122.84983, - 48.672504, - 640 - ], - [ - -122.849823, - 48.67247, - 639.8 - ], - [ - -122.849807, - 48.672436, - 640.2 - ], - [ - -122.849789, - 48.672402, - 640.5 - ], - [ - -122.849772, - 48.672371, - 640.5 - ], - [ - -122.849745, - 48.672342, - 640.3 - ], - [ - -122.8497, - 48.672326, - 640.4 - ], - [ - -122.84966, - 48.672304, - 640.3 - ], - [ - -122.849636, - 48.672278, - 640 - ], - [ - -122.849609, - 48.672252, - 639.7 - ], - [ - -122.849578, - 48.672223, - 639.4 - ], - [ - -122.849534, - 48.672219, - 639.2 - ], - [ - -122.849495, - 48.672232, - 639.1 - ], - [ - -122.849452, - 48.672253, - 639.1 - ], - [ - -122.84941, - 48.672253, - 638.8 - ], - [ - -122.84937, - 48.672268, - 638.8 - ], - [ - -122.849328, - 48.67228, - 638.6 - ], - [ - -122.849268, - 48.672287, - 638.5 - ], - [ - -122.849226, - 48.672282, - 637.9 - ], - [ - -122.849165, - 48.672273, - 637 - ], - [ - -122.849128, - 48.67226, - 636.7 - ], - [ - -122.849091, - 48.672234, - 636.6 - ], - [ - -122.849072, - 48.67221, - 636.8 - ], - [ - -122.849025, - 48.672189, - 637.1 - ], - [ - -122.848988, - 48.672173, - 637.6 - ], - [ - -122.848951, - 48.672159, - 638 - ], - [ - -122.84893, - 48.672135, - 638.1 - ], - [ - -122.848911, - 48.672103, - 638.3 - ], - [ - -122.848886, - 48.672081, - 638.5 - ], - [ - -122.848866, - 48.672039, - 639.1 - ], - [ - -122.848823, - 48.67199, - 640.1 - ], - [ - -122.848786, - 48.671962, - 640.3 - ], - [ - -122.848749, - 48.671929, - 640.8 - ], - [ - -122.848728, - 48.671892, - 640.8 - ], - [ - -122.848718, - 48.671862, - 640.8 - ], - [ - -122.848714, - 48.671828, - 640.6 - ], - [ - -122.848711, - 48.671792, - 640.5 - ], - [ - -122.848722, - 48.671765, - 640.4 - ], - [ - -122.848711, - 48.671725, - 640.4 - ], - [ - -122.848706, - 48.67169, - 640.4 - ], - [ - -122.848695, - 48.671663, - 640.5 - ], - [ - -122.848672, - 48.671637, - 640.6 - ], - [ - -122.848653, - 48.671612, - 640.2 - ], - [ - -122.848635, - 48.671585, - 639.8 - ], - [ - -122.848619, - 48.671559, - 639.7 - ], - [ - -122.848589, - 48.671527, - 639.1 - ], - [ - -122.848558, - 48.671507, - 638.1 - ], - [ - -122.848527, - 48.671482, - 637.3 - ], - [ - -122.848521, - 48.671453, - 636.8 - ], - [ - -122.848513, - 48.671416, - 636.3 - ], - [ - -122.848485, - 48.671392, - 636 - ], - [ - -122.848445, - 48.671384, - 635.9 - ], - [ - -122.848397, - 48.671365, - 636 - ], - [ - -122.848333, - 48.671349, - 636.3 - ], - [ - -122.848295, - 48.671333, - 636.6 - ], - [ - -122.848263, - 48.671315, - 636.9 - ], - [ - -122.84823, - 48.671283, - 636.7 - ], - [ - -122.848219, - 48.671246, - 635.9 - ], - [ - -122.848178, - 48.67122, - 635.3 - ], - [ - -122.848131, - 48.671211, - 634.6 - ], - [ - -122.848084, - 48.671206, - 634.3 - ], - [ - -122.848042, - 48.671204, - 634.2 - ], - [ - -122.847993, - 48.671203, - 634 - ], - [ - -122.847934, - 48.671208, - 633.4 - ], - [ - -122.84789, - 48.671201, - 632.9 - ], - [ - -122.847851, - 48.671166, - 633.4 - ], - [ - -122.847828, - 48.671141, - 633.6 - ], - [ - -122.847803, - 48.671117, - 633.7 - ], - [ - -122.847762, - 48.671089, - 633.7 - ], - [ - -122.847731, - 48.67107, - 633.8 - ], - [ - -122.847688, - 48.671053, - 633.2 - ], - [ - -122.847653, - 48.671034, - 632.8 - ], - [ - -122.847622, - 48.671014, - 632.6 - ], - [ - -122.847599, - 48.67099, - 632.7 - ], - [ - -122.847573, - 48.670966, - 632.8 - ], - [ - -122.847543, - 48.670945, - 633 - ], - [ - -122.847498, - 48.67092, - 633.2 - ], - [ - -122.84746, - 48.670894, - 633.5 - ], - [ - -122.847416, - 48.670888, - 633.7 - ], - [ - -122.847367, - 48.67087, - 634.3 - ], - [ - -122.847336, - 48.670847, - 635.2 - ], - [ - -122.847297, - 48.670828, - 635.6 - ], - [ - -122.847257, - 48.670819, - 635.7 - ], - [ - -122.847215, - 48.670787, - 636.3 - ], - [ - -122.847188, - 48.670766, - 636.7 - ], - [ - -122.847148, - 48.670754, - 636.8 - ], - [ - -122.847126, - 48.67073, - 637.3 - ], - [ - -122.847092, - 48.670712, - 637.6 - ], - [ - -122.847068, - 48.670668, - 638.1 - ], - [ - -122.847047, - 48.670642, - 638.4 - ], - [ - -122.847013, - 48.670614, - 638.7 - ], - [ - -122.846977, - 48.670595, - 638.9 - ], - [ - -122.846938, - 48.670578, - 639.2 - ], - [ - -122.84689, - 48.670561, - 639.3 - ], - [ - -122.846848, - 48.670537, - 639.4 - ], - [ - -122.846806, - 48.670525, - 639.7 - ], - [ - -122.846763, - 48.670515, - 640.1 - ], - [ - -122.846718, - 48.670514, - 640.4 - ], - [ - -122.846676, - 48.670508, - 640 - ], - [ - -122.846625, - 48.670498, - 639.5 - ], - [ - -122.846576, - 48.670488, - 639 - ], - [ - -122.846537, - 48.670476, - 638.4 - ], - [ - -122.846503, - 48.67046, - 637 - ], - [ - -122.846463, - 48.670455, - 636 - ], - [ - -122.846412, - 48.670468, - 635.6 - ], - [ - -122.846364, - 48.67047, - 634.8 - ], - [ - -122.8463, - 48.670426, - 633 - ], - [ - -122.846273, - 48.670403, - 633 - ], - [ - -122.846266, - 48.670374, - 633.2 - ], - [ - -122.846327, - 48.670342, - 633.4 - ], - [ - -122.846354, - 48.670321, - 633.5 - ], - [ - -122.846305, - 48.670308, - 633.5 - ], - [ - -122.846274, - 48.670354, - 633.3 - ], - [ - -122.846243, - 48.670322, - 633.4 - ], - [ - -122.84628, - 48.670291, - 633.7 - ], - [ - -122.846321, - 48.670276, - 633.8 - ], - [ - -122.846372, - 48.670279, - 633.8 - ], - [ - -122.846424, - 48.670269, - 634.2 - ], - [ - -122.84646, - 48.670253, - 634.7 - ], - [ - -122.846501, - 48.670238, - 635.1 - ], - [ - -122.846552, - 48.670225, - 634.9 - ], - [ - -122.84659, - 48.670205, - 634.8 - ], - [ - -122.846626, - 48.670189, - 634.5 - ], - [ - -122.846666, - 48.670173, - 633.6 - ], - [ - -122.846714, - 48.670168, - 632.2 - ], - [ - -122.846745, - 48.670149, - 631.6 - ], - [ - -122.846755, - 48.670119, - 631.7 - ], - [ - -122.846779, - 48.670092, - 631.7 - ], - [ - -122.846831, - 48.670086, - 630.2 - ], - [ - -122.846879, - 48.670081, - 629.1 - ], - [ - -122.846932, - 48.670069, - 628.2 - ], - [ - -122.846987, - 48.670063, - 627.4 - ], - [ - -122.847042, - 48.67006, - 627.2 - ], - [ - -122.847088, - 48.670045, - 626.5 - ], - [ - -122.847131, - 48.670047, - 626.4 - ], - [ - -122.847173, - 48.670045, - 626.2 - ], - [ - -122.847175, - 48.670017, - 625 - ], - [ - -122.84718, - 48.669983, - 625.1 - ], - [ - -122.847188, - 48.669955, - 625.5 - ], - [ - -122.847211, - 48.669926, - 625.2 - ], - [ - -122.847245, - 48.669904, - 624.5 - ], - [ - -122.847281, - 48.669877, - 623.6 - ], - [ - -122.847303, - 48.669851, - 623.5 - ], - [ - -122.847339, - 48.669827, - 622.4 - ], - [ - -122.847354, - 48.669801, - 622 - ], - [ - -122.84735, - 48.669773, - 622.5 - ], - [ - -122.847379, - 48.669745, - 621 - ], - [ - -122.847391, - 48.669712, - 620.1 - ], - [ - -122.847397, - 48.669677, - 619.6 - ], - [ - -122.847385, - 48.669645, - 620.2 - ], - [ - -122.847378, - 48.669609, - 620.3 - ], - [ - -122.84739, - 48.669581, - 619.3 - ], - [ - -122.847411, - 48.669557, - 617.6 - ], - [ - -122.847439, - 48.669529, - 615 - ], - [ - -122.847479, - 48.669494, - 611.9 - ], - [ - -122.847482, - 48.669461, - 611.4 - ], - [ - -122.847483, - 48.669433, - 611 - ], - [ - -122.847505, - 48.669403, - 609.7 - ], - [ - -122.847543, - 48.669369, - 607.6 - ], - [ - -122.84757, - 48.669345, - 606.4 - ], - [ - -122.847598, - 48.66932, - 605 - ], - [ - -122.847627, - 48.669283, - 603.4 - ], - [ - -122.847654, - 48.669242, - 602.4 - ], - [ - -122.84767, - 48.669206, - 602.1 - ], - [ - -122.847672, - 48.669175, - 602 - ], - [ - -122.847692, - 48.669137, - 601.3 - ], - [ - -122.847731, - 48.669123, - 599.5 - ], - [ - -122.847781, - 48.669105, - 596.8 - ], - [ - -122.847827, - 48.669119, - 594.8 - ], - [ - -122.847863, - 48.669146, - 592.7 - ], - [ - -122.847893, - 48.669167, - 590.8 - ], - [ - -122.847918, - 48.669197, - 588.8 - ], - [ - -122.847935, - 48.669222, - 586.8 - ], - [ - -122.847941, - 48.669256, - 586.6 - ], - [ - -122.847957, - 48.669292, - 585.7 - ], - [ - -122.84796, - 48.669329, - 586.3 - ], - [ - -122.847989, - 48.669358, - 586 - ], - [ - -122.848, - 48.669392, - 587.2 - ], - [ - -122.847996, - 48.669421, - 588.6 - ], - [ - -122.848028, - 48.669442, - 590.1 - ], - [ - -122.847983, - 48.669484, - 592.2 - ], - [ - -122.847952, - 48.669514, - 593.9 - ], - [ - -122.847981, - 48.669493, - 592.8 - ], - [ - -122.847991, - 48.669461, - 590.9 - ], - [ - -122.84802, - 48.669435, - 589.6 - ], - [ - -122.848053, - 48.669413, - 588.7 - ], - [ - -122.848072, - 48.669381, - 587 - ], - [ - -122.848084, - 48.669353, - 585.5 - ], - [ - -122.848098, - 48.669328, - 583.9 - ], - [ - -122.84812, - 48.6693, - 582.3 - ], - [ - -122.848146, - 48.669274, - 580.9 - ], - [ - -122.848196, - 48.669257, - 580.6 - ], - [ - -122.848245, - 48.669233, - 579.9 - ], - [ - -122.848283, - 48.669218, - 579.4 - ], - [ - -122.848348, - 48.669196, - 578.9 - ], - [ - -122.848405, - 48.669184, - 579.2 - ], - [ - -122.848448, - 48.669166, - 579 - ], - [ - -122.848505, - 48.669168, - 579.7 - ], - [ - -122.848566, - 48.669157, - 579.6 - ], - [ - -122.848617, - 48.669162, - 578.9 - ], - [ - -122.848664, - 48.66918, - 578.1 - ], - [ - -122.848704, - 48.669204, - 577.9 - ], - [ - -122.848731, - 48.669226, - 578 - ], - [ - -122.84876, - 48.669247, - 578.1 - ], - [ - -122.848712, - 48.669244, - 579.7 - ], - [ - -122.848683, - 48.669225, - 579.7 - ], - [ - -122.848614, - 48.669238, - 582.4 - ], - [ - -122.848558, - 48.669256, - 584.3 - ], - [ - -122.848517, - 48.669269, - 585.1 - ], - [ - -122.848473, - 48.66926, - 584.5 - ], - [ - -122.84849, - 48.669228, - 582.9 - ], - [ - -122.848471, - 48.669198, - 581 - ], - [ - -122.848445, - 48.669171, - 579.2 - ], - [ - -122.848413, - 48.669153, - 577.5 - ], - [ - -122.848367, - 48.669158, - 577.1 - ], - [ - -122.84832, - 48.669178, - 577.4 - ], - [ - -122.848281, - 48.669188, - 577.4 - ], - [ - -122.848237, - 48.669189, - 577 - ], - [ - -122.84823, - 48.669157, - 575.3 - ], - [ - -122.848197, - 48.669128, - 573.7 - ], - [ - -122.848147, - 48.669113, - 572.8 - ], - [ - -122.848122, - 48.669089, - 572.7 - ], - [ - -122.848081, - 48.669075, - 574 - ], - [ - -122.848043, - 48.669062, - 576 - ], - [ - -122.848062, - 48.669028, - 575.5 - ], - [ - -122.848077, - 48.668998, - 574.6 - ], - [ - -122.848101, - 48.668969, - 573.7 - ], - [ - -122.848115, - 48.668941, - 573 - ], - [ - -122.848161, - 48.668917, - 570.9 - ], - [ - -122.848214, - 48.668903, - 569.1 - ], - [ - -122.848277, - 48.668935, - 569.3 - ], - [ - -122.848307, - 48.668903, - 568.2 - ], - [ - -122.848328, - 48.668871, - 567.2 - ], - [ - -122.848341, - 48.668842, - 566.5 - ], - [ - -122.848365, - 48.668799, - 565.4 - ], - [ - -122.848396, - 48.668762, - 564.4 - ], - [ - -122.848432, - 48.66873, - 563.7 - ], - [ - -122.848475, - 48.668708, - 563.3 - ], - [ - -122.848516, - 48.668687, - 562.3 - ], - [ - -122.848569, - 48.668679, - 561.2 - ], - [ - -122.848611, - 48.668681, - 560.3 - ], - [ - -122.848651, - 48.668693, - 559.5 - ], - [ - -122.848693, - 48.668706, - 558.3 - ], - [ - -122.848737, - 48.668712, - 556.8 - ], - [ - -122.848783, - 48.668718, - 555.3 - ], - [ - -122.848828, - 48.668705, - 553.4 - ], - [ - -122.848872, - 48.668721, - 552.5 - ], - [ - -122.848912, - 48.668731, - 551.2 - ], - [ - -122.848936, - 48.668756, - 551.3 - ], - [ - -122.848965, - 48.668779, - 551.1 - ], - [ - -122.849003, - 48.668795, - 550.3 - ], - [ - -122.849043, - 48.668812, - 549.7 - ], - [ - -122.84909, - 48.668804, - 548.6 - ], - [ - -122.849138, - 48.668804, - 548 - ], - [ - -122.849181, - 48.668818, - 548.1 - ], - [ - -122.849204, - 48.668842, - 548.6 - ], - [ - -122.849192, - 48.668868, - 549.4 - ], - [ - -122.849161, - 48.668888, - 550.4 - ], - [ - -122.849113, - 48.668893, - 551.5 - ], - [ - -122.849074, - 48.668871, - 551.4 - ], - [ - -122.849023, - 48.668868, - 552.5 - ], - [ - -122.848975, - 48.668858, - 553.4 - ], - [ - -122.848955, - 48.668828, - 553.1 - ], - [ - -122.848924, - 48.668807, - 553.5 - ], - [ - -122.84888, - 48.668807, - 554.9 - ], - [ - -122.848817, - 48.668808, - 557.1 - ], - [ - -122.84876, - 48.668797, - 558.8 - ], - [ - -122.848727, - 48.668778, - 559.2 - ], - [ - -122.848725, - 48.668747, - 558.4 - ], - [ - -122.848727, - 48.668711, - 557.1 - ], - [ - -122.848726, - 48.668679, - 556.1 - ], - [ - -122.848721, - 48.668651, - 555.3 - ], - [ - -122.848735, - 48.668624, - 553.5 - ], - [ - -122.848731, - 48.668589, - 552 - ], - [ - -122.848739, - 48.668553, - 550.1 - ], - [ - -122.848726, - 48.668518, - 548.8 - ], - [ - -122.848751, - 48.668492, - 546.8 - ], - [ - -122.848786, - 48.668468, - 544.2 - ], - [ - -122.848826, - 48.668445, - 542 - ], - [ - -122.848869, - 48.668425, - 540.1 - ], - [ - -122.848909, - 48.668406, - 538.8 - ], - [ - -122.848952, - 48.668396, - 538 - ], - [ - -122.848945, - 48.66843, - 538.9 - ], - [ - -122.848914, - 48.668455, - 540.4 - ], - [ - -122.848882, - 48.668484, - 542.3 - ], - [ - -122.848842, - 48.668522, - 545.1 - ], - [ - -122.848785, - 48.66856, - 548.8 - ], - [ - -122.848734, - 48.668582, - 551.6 - ], - [ - -122.848738, - 48.668535, - 549.2 - ], - [ - -122.848737, - 48.668497, - 547.5 - ], - [ - -122.848744, - 48.668452, - 545 - ], - [ - -122.84883, - 48.668402, - 540 - ], - [ - -122.848792, - 48.66838, - 540.3 - ], - [ - -122.848736, - 48.668372, - 541.3 - ], - [ - -122.848683, - 48.668368, - 542.7 - ], - [ - -122.848639, - 48.668363, - 544.2 - ], - [ - -122.848619, - 48.668334, - 543.4 - ], - [ - -122.848597, - 48.668303, - 542.7 - ], - [ - -122.84859, - 48.668271, - 541.4 - ], - [ - -122.848616, - 48.668236, - 538.4 - ], - [ - -122.848666, - 48.668205, - 535.3 - ], - [ - -122.848709, - 48.668176, - 533.2 - ], - [ - -122.84874, - 48.668149, - 531.4 - ], - [ - -122.848766, - 48.668123, - 530.2 - ], - [ - -122.848796, - 48.668102, - 529.2 - ], - [ - -122.848832, - 48.66809, - 528.6 - ], - [ - -122.848799, - 48.668067, - 528.5 - ], - [ - -122.848752, - 48.668061, - 528.6 - ], - [ - -122.848706, - 48.668053, - 528.4 - ], - [ - -122.848651, - 48.668051, - 528.8 - ], - [ - -122.848607, - 48.66806, - 530.2 - ], - [ - -122.848634, - 48.66803, - 528.1 - ], - [ - -122.848662, - 48.667996, - 526.1 - ], - [ - -122.848683, - 48.667955, - 524.3 - ], - [ - -122.848708, - 48.667918, - 523.1 - ], - [ - -122.84873, - 48.667893, - 521.9 - ], - [ - -122.848719, - 48.667862, - 520.8 - ], - [ - -122.848735, - 48.667836, - 519.5 - ], - [ - -122.848762, - 48.667815, - 518.2 - ], - [ - -122.84881, - 48.667811, - 517.2 - ], - [ - -122.848861, - 48.667822, - 516.5 - ], - [ - -122.848903, - 48.667837, - 516.2 - ], - [ - -122.848948, - 48.667854, - 515.9 - ], - [ - -122.849001, - 48.66786, - 515.2 - ], - [ - -122.849052, - 48.667869, - 515.1 - ], - [ - -122.849099, - 48.667875, - 514.6 - ], - [ - -122.849141, - 48.667879, - 513.9 - ], - [ - -122.849185, - 48.667883, - 512.9 - ], - [ - -122.849242, - 48.667886, - 511.7 - ], - [ - -122.849271, - 48.667908, - 511.8 - ], - [ - -122.849229, - 48.667908, - 513.1 - ], - [ - -122.849194, - 48.667922, - 514.4 - ], - [ - -122.849154, - 48.667939, - 515.7 - ], - [ - -122.84911, - 48.667934, - 516.4 - ], - [ - -122.849069, - 48.667926, - 516.9 - ], - [ - -122.849029, - 48.667908, - 516.9 - ], - [ - -122.848997, - 48.667887, - 516.5 - ], - [ - -122.848969, - 48.667861, - 515.8 - ], - [ - -122.848947, - 48.667832, - 515 - ], - [ - -122.848913, - 48.667817, - 515.1 - ], - [ - -122.848861, - 48.667811, - 516 - ], - [ - -122.848827, - 48.66779, - 515.9 - ], - [ - -122.848851, - 48.667756, - 514.2 - ], - [ - -122.848889, - 48.667716, - 511.8 - ], - [ - -122.848933, - 48.667684, - 510 - ], - [ - -122.84896, - 48.667663, - 508.7 - ], - [ - -122.848961, - 48.667629, - 507.6 - ], - [ - -122.848951, - 48.667598, - 507 - ], - [ - -122.848972, - 48.667553, - 505 - ], - [ - -122.849005, - 48.667514, - 502.5 - ], - [ - -122.849046, - 48.667509, - 500.6 - ], - [ - -122.849088, - 48.667513, - 499.1 - ], - [ - -122.849129, - 48.667515, - 497.8 - ], - [ - -122.849165, - 48.667535, - 497.6 - ], - [ - -122.849212, - 48.667541, - 496.5 - ], - [ - -122.849255, - 48.66753, - 494.8 - ], - [ - -122.849319, - 48.667518, - 492.6 - ], - [ - -122.84937, - 48.667525, - 491.8 - ], - [ - -122.849413, - 48.667544, - 491.7 - ], - [ - -122.849453, - 48.66756, - 491.5 - ], - [ - -122.849499, - 48.667569, - 491.4 - ], - [ - -122.849537, - 48.667589, - 491.8 - ], - [ - -122.849571, - 48.667605, - 492.8 - ], - [ - -122.849603, - 48.667626, - 494.1 - ], - [ - -122.849651, - 48.667617, - 492.4 - ], - [ - -122.849685, - 48.667595, - 490.1 - ], - [ - -122.849727, - 48.667585, - 488.2 - ], - [ - -122.849766, - 48.667575, - 486.8 - ], - [ - -122.849814, - 48.667583, - 486.6 - ], - [ - -122.849853, - 48.667607, - 487.6 - ], - [ - -122.849896, - 48.667648, - 488.4 - ], - [ - -122.849938, - 48.667688, - 488.7 - ], - [ - -122.849889, - 48.667679, - 489.1 - ], - [ - -122.849846, - 48.667711, - 490.6 - ], - [ - -122.849815, - 48.667735, - 491.6 - ], - [ - -122.849852, - 48.667709, - 490.5 - ], - [ - -122.8499, - 48.667682, - 489.1 - ], - [ - -122.849945, - 48.667661, - 487.8 - ], - [ - -122.84999, - 48.66765, - 486.5 - ], - [ - -122.850035, - 48.667646, - 485.9 - ], - [ - -122.850081, - 48.667658, - 486 - ], - [ - -122.850129, - 48.667672, - 485.2 - ], - [ - -122.850166, - 48.667689, - 484.1 - ], - [ - -122.850208, - 48.667703, - 483.7 - ], - [ - -122.850249, - 48.667713, - 483.2 - ], - [ - -122.850291, - 48.667725, - 483.1 - ], - [ - -122.850333, - 48.667745, - 482.3 - ], - [ - -122.850359, - 48.667768, - 482.1 - ], - [ - -122.85039, - 48.66779, - 482.6 - ], - [ - -122.850438, - 48.667796, - 481.6 - ], - [ - -122.850482, - 48.667803, - 481 - ], - [ - -122.850526, - 48.667807, - 479.9 - ], - [ - -122.850572, - 48.667801, - 478.3 - ], - [ - -122.85062, - 48.667804, - 477.2 - ], - [ - -122.850665, - 48.667813, - 476.2 - ], - [ - -122.850709, - 48.667825, - 475.4 - ], - [ - -122.850742, - 48.667844, - 475.8 - ], - [ - -122.850781, - 48.667857, - 475.8 - ], - [ - -122.850826, - 48.667868, - 475.1 - ], - [ - -122.850876, - 48.667869, - 473.3 - ], - [ - -122.850918, - 48.667869, - 471.7 - ], - [ - -122.850959, - 48.667878, - 470 - ], - [ - -122.851005, - 48.667901, - 469.4 - ], - [ - -122.851046, - 48.667924, - 469.8 - ], - [ - -122.851088, - 48.667945, - 469.7 - ], - [ - -122.851126, - 48.667958, - 469 - ], - [ - -122.851161, - 48.667975, - 468.7 - ], - [ - -122.851191, - 48.667999, - 469 - ], - [ - -122.851215, - 48.668026, - 469.8 - ], - [ - -122.851259, - 48.668031, - 468.8 - ], - [ - -122.8513, - 48.668026, - 467.5 - ], - [ - -122.85134, - 48.668037, - 466.9 - ], - [ - -122.851373, - 48.668066, - 466.8 - ], - [ - -122.851415, - 48.668082, - 466.5 - ], - [ - -122.851467, - 48.668083, - 465.1 - ], - [ - -122.851507, - 48.668075, - 464 - ], - [ - -122.851546, - 48.668091, - 463.6 - ], - [ - -122.851584, - 48.668112, - 463.4 - ], - [ - -122.851627, - 48.668113, - 462.6 - ], - [ - -122.851627, - 48.66815, - 463.6 - ], - [ - -122.851608, - 48.668177, - 464.9 - ], - [ - -122.85158, - 48.668201, - 466.6 - ], - [ - -122.851616, - 48.668225, - 466.3 - ], - [ - -122.851724, - 48.668221, - 464 - ], - [ - -122.851765, - 48.668205, - 463.3 - ], - [ - -122.851803, - 48.668183, - 462.6 - ], - [ - -122.851849, - 48.668174, - 462.2 - ], - [ - -122.851885, - 48.668151, - 461.5 - ], - [ - -122.851936, - 48.668131, - 460.7 - ], - [ - -122.851979, - 48.668133, - 460.3 - ], - [ - -122.852035, - 48.668142, - 459.2 - ], - [ - -122.851996, - 48.668156, - 460.8 - ], - [ - -122.852022, - 48.668134, - 459.3 - ], - [ - -122.851982, - 48.668122, - 459.9 - ], - [ - -122.851947, - 48.668107, - 459.8 - ], - [ - -122.851904, - 48.66812, - 460.5 - ], - [ - -122.851859, - 48.668143, - 461.3 - ], - [ - -122.851817, - 48.668127, - 461.1 - ], - [ - -122.851776, - 48.668117, - 460.9 - ], - [ - -122.85175, - 48.668068, - 459.3 - ], - [ - -122.85171, - 48.668056, - 459.3 - ], - [ - -122.851712, - 48.668023, - 458.3 - ], - [ - -122.851686, - 48.668002, - 458.4 - ], - [ - -122.851628, - 48.668009, - 459.7 - ], - [ - -122.851587, - 48.667995, - 459.7 - ], - [ - -122.851541, - 48.667985, - 460.4 - ], - [ - -122.851515, - 48.667964, - 460.4 - ], - [ - -122.851498, - 48.667938, - 460.1 - ], - [ - -122.851463, - 48.667916, - 460.2 - ], - [ - -122.851441, - 48.667891, - 459.6 - ], - [ - -122.851384, - 48.667879, - 460.2 - ], - [ - -122.851342, - 48.667881, - 461 - ], - [ - -122.851283, - 48.667882, - 462.1 - ], - [ - -122.851242, - 48.667876, - 462.7 - ], - [ - -122.851205, - 48.667857, - 462.8 - ], - [ - -122.851182, - 48.667833, - 462.3 - ], - [ - -122.851168, - 48.667803, - 461.5 - ], - [ - -122.851134, - 48.667774, - 461.1 - ], - [ - -122.851106, - 48.667744, - 460.5 - ], - [ - -122.851082, - 48.667717, - 459.7 - ], - [ - -122.851053, - 48.667693, - 459 - ], - [ - -122.85102, - 48.667672, - 458.3 - ], - [ - -122.850978, - 48.667652, - 458.1 - ], - [ - -122.850938, - 48.667652, - 458.8 - ], - [ - -122.850893, - 48.667658, - 459.6 - ], - [ - -122.850839, - 48.667657, - 460.7 - ], - [ - -122.850798, - 48.667647, - 461.5 - ], - [ - -122.850775, - 48.667622, - 460.7 - ], - [ - -122.850761, - 48.667592, - 459.3 - ], - [ - -122.850768, - 48.667552, - 456.6 - ], - [ - -122.85078, - 48.667519, - 454.4 - ], - [ - -122.850801, - 48.66749, - 452.4 - ], - [ - -122.850834, - 48.667464, - 450.5 - ], - [ - -122.850859, - 48.667438, - 448.8 - ], - [ - -122.850873, - 48.667412, - 447.7 - ], - [ - -122.850917, - 48.667383, - 446.1 - ], - [ - -122.850967, - 48.66736, - 444.6 - ], - [ - -122.851013, - 48.667348, - 443.7 - ], - [ - -122.851051, - 48.667331, - 442.8 - ], - [ - -122.851081, - 48.667312, - 441.9 - ], - [ - -122.851121, - 48.667295, - 441.2 - ], - [ - -122.851151, - 48.667271, - 440.4 - ], - [ - -122.851193, - 48.667263, - 440 - ], - [ - -122.851246, - 48.66725, - 439.2 - ], - [ - -122.851274, - 48.667243, - 438.6 - ], - [ - -122.851331, - 48.667245, - 437.7 - ], - [ - -122.851374, - 48.667237, - 436.9 - ], - [ - -122.851429, - 48.667231, - 435.8 - ], - [ - -122.851475, - 48.66721, - 434.3 - ], - [ - -122.851517, - 48.667195, - 432.9 - ], - [ - -122.85156, - 48.66718, - 431.5 - ], - [ - -122.851607, - 48.667156, - 429.4 - ], - [ - -122.851643, - 48.667135, - 428.1 - ], - [ - -122.851709, - 48.667132, - 426.7 - ], - [ - -122.851772, - 48.667132, - 425.6 - ], - [ - -122.851815, - 48.667132, - 424.9 - ], - [ - -122.851858, - 48.667152, - 425 - ], - [ - -122.851913, - 48.667166, - 424.7 - ], - [ - -122.851953, - 48.66719, - 425 - ], - [ - -122.851976, - 48.667233, - 426.4 - ], - [ - -122.851999, - 48.667262, - 427.2 - ], - [ - -122.852038, - 48.667269, - 426.6 - ], - [ - -122.852077, - 48.667291, - 426.7 - ], - [ - -122.852051, - 48.667317, - 428 - ], - [ - -122.852009, - 48.667347, - 429.9 - ], - [ - -122.851978, - 48.667368, - 430.7 - ], - [ - -122.852005, - 48.667345, - 429.8 - ], - [ - -122.852044, - 48.667318, - 428.2 - ], - [ - -122.852043, - 48.667288, - 427.2 - ], - [ - -122.852007, - 48.667273, - 427.5 - ], - [ - -122.851955, - 48.66726, - 427.8 - ], - [ - -122.851934, - 48.66723, - 426.9 - ], - [ - -122.851937, - 48.667198, - 425.6 - ], - [ - -122.851915, - 48.667173, - 424.9 - ], - [ - -122.851902, - 48.667138, - 423.9 - ], - [ - -122.851909, - 48.66711, - 422.9 - ], - [ - -122.851881, - 48.66708, - 422.6 - ], - [ - -122.851855, - 48.667053, - 422.8 - ], - [ - -122.851832, - 48.66703, - 423.1 - ], - [ - -122.851836, - 48.667002, - 422.9 - ], - [ - -122.851813, - 48.66698, - 423.1 - ], - [ - -122.851853, - 48.666942, - 422.1 - ], - [ - -122.851839, - 48.666908, - 421.6 - ], - [ - -122.851827, - 48.666879, - 421 - ], - [ - -122.851833, - 48.666842, - 420.1 - ], - [ - -122.851835, - 48.666813, - 419.7 - ], - [ - -122.85185, - 48.666786, - 419.4 - ], - [ - -122.851862, - 48.666747, - 418.7 - ], - [ - -122.851874, - 48.666716, - 418.1 - ], - [ - -122.85186, - 48.666688, - 418.4 - ], - [ - -122.851892, - 48.666651, - 417.5 - ], - [ - -122.851899, - 48.666619, - 416.4 - ], - [ - -122.851904, - 48.666587, - 415.6 - ], - [ - -122.851925, - 48.666563, - 414.4 - ], - [ - -122.851942, - 48.66653, - 413.4 - ], - [ - -122.851958, - 48.666497, - 412.3 - ], - [ - -122.851969, - 48.666467, - 411 - ], - [ - -122.851987, - 48.666437, - 409.6 - ], - [ - -122.852001, - 48.666409, - 408.6 - ], - [ - -122.852038, - 48.666388, - 407.5 - ], - [ - -122.852075, - 48.666356, - 406 - ], - [ - -122.852113, - 48.666335, - 404.7 - ], - [ - -122.852145, - 48.666317, - 403.3 - ], - [ - -122.852187, - 48.6663, - 401.6 - ], - [ - -122.852236, - 48.666306, - 400.6 - ], - [ - -122.852278, - 48.666311, - 399.5 - ], - [ - -122.852313, - 48.666335, - 399.2 - ], - [ - -122.852336, - 48.666357, - 399.2 - ], - [ - -122.852363, - 48.666382, - 399.4 - ], - [ - -122.852407, - 48.666385, - 398 - ], - [ - -122.852477, - 48.66639, - 396 - ], - [ - -122.852529, - 48.66639, - 394.7 - ], - [ - -122.852576, - 48.666396, - 393.6 - ], - [ - -122.852557, - 48.666423, - 394.8 - ], - [ - -122.852586, - 48.666442, - 394.6 - ], - [ - -122.852634, - 48.666462, - 394.6 - ], - [ - -122.852658, - 48.66648, - 394.7 - ], - [ - -122.852682, - 48.666505, - 395 - ], - [ - -122.852714, - 48.666531, - 395.2 - ], - [ - -122.852739, - 48.666554, - 395.4 - ], - [ - -122.852764, - 48.66653, - 394.3 - ], - [ - -122.852775, - 48.666497, - 393 - ], - [ - -122.852821, - 48.666498, - 391.9 - ], - [ - -122.852871, - 48.66649, - 390.4 - ], - [ - -122.852912, - 48.666513, - 390 - ], - [ - -122.852937, - 48.666539, - 389.9 - ], - [ - -122.852979, - 48.666529, - 388.5 - ], - [ - -122.853021, - 48.666544, - 387.8 - ], - [ - -122.853042, - 48.666568, - 387.9 - ], - [ - -122.853072, - 48.666593, - 388 - ], - [ - -122.853111, - 48.666605, - 387.7 - ], - [ - -122.853149, - 48.666615, - 387.3 - ], - [ - -122.853163, - 48.666649, - 388 - ], - [ - -122.853206, - 48.666665, - 388 - ], - [ - -122.853255, - 48.666666, - 386.9 - ], - [ - -122.853301, - 48.666661, - 385.7 - ], - [ - -122.853344, - 48.666655, - 384.7 - ], - [ - -122.853382, - 48.666675, - 384.5 - ], - [ - -122.853415, - 48.666701, - 384.7 - ], - [ - -122.853467, - 48.666713, - 384 - ], - [ - -122.853513, - 48.666694, - 382.4 - ], - [ - -122.853545, - 48.666715, - 382.1 - ], - [ - -122.853564, - 48.666746, - 382.4 - ], - [ - -122.853591, - 48.666767, - 381.9 - ], - [ - -122.853647, - 48.666767, - 380.5 - ], - [ - -122.853681, - 48.666784, - 379.9 - ], - [ - -122.85371, - 48.666806, - 379.7 - ], - [ - -122.853752, - 48.666798, - 378.9 - ], - [ - -122.853785, - 48.666781, - 377.8 - ], - [ - -122.853812, - 48.666754, - 375.7 - ], - [ - -122.853818, - 48.666787, - 377.1 - ], - [ - -122.85382, - 48.666817, - 378.1 - ], - [ - -122.853824, - 48.666844, - 378.7 - ], - [ - -122.853816, - 48.666882, - 380.1 - ], - [ - -122.853792, - 48.666914, - 381.5 - ], - [ - -122.853759, - 48.66689, - 380.9 - ], - [ - -122.853734, - 48.666867, - 380.8 - ], - [ - -122.853692, - 48.666865, - 381.3 - ], - [ - -122.853644, - 48.666857, - 382.4 - ], - [ - -122.853586, - 48.666852, - 384 - ], - [ - -122.853543, - 48.666842, - 385.1 - ], - [ - -122.853558, - 48.666814, - 384 - ], - [ - -122.85351, - 48.666805, - 385.2 - ], - [ - -122.853476, - 48.666784, - 385.5 - ], - [ - -122.853461, - 48.666757, - 385.3 - ], - [ - -122.853469, - 48.666728, - 384.3 - ], - [ - -122.853466, - 48.666699, - 383.6 - ], - [ - -122.853463, - 48.666671, - 382.8 - ], - [ - -122.853459, - 48.666642, - 381.8 - ], - [ - -122.853442, - 48.666615, - 381.3 - ], - [ - -122.85344, - 48.666586, - 380.3 - ], - [ - -122.853443, - 48.666559, - 379.2 - ], - [ - -122.853452, - 48.666531, - 377.9 - ], - [ - -122.853448, - 48.666493, - 377 - ], - [ - -122.853434, - 48.666461, - 376.5 - ], - [ - -122.853425, - 48.666433, - 376 - ], - [ - -122.853444, - 48.666409, - 374.8 - ], - [ - -122.853471, - 48.666381, - 373.6 - ], - [ - -122.853505, - 48.666357, - 372.5 - ], - [ - -122.853535, - 48.666337, - 371.6 - ], - [ - -122.85354, - 48.666308, - 370.9 - ], - [ - -122.853517, - 48.666282, - 370.6 - ], - [ - -122.853486, - 48.666261, - 370.4 - ], - [ - -122.853442, - 48.666246, - 371 - ], - [ - -122.853411, - 48.666224, - 371.1 - ], - [ - -122.853392, - 48.666197, - 370.9 - ], - [ - -122.853364, - 48.666171, - 370.9 - ], - [ - -122.853379, - 48.666142, - 369.5 - ], - [ - -122.85339, - 48.666111, - 368.4 - ], - [ - -122.853371, - 48.66608, - 368.1 - ], - [ - -122.853344, - 48.666049, - 368 - ], - [ - -122.853327, - 48.666021, - 367.3 - ], - [ - -122.853303, - 48.665995, - 366.9 - ], - [ - -122.853259, - 48.66599, - 367.4 - ], - [ - -122.853251, - 48.665963, - 366.8 - ], - [ - -122.853216, - 48.665929, - 366.3 - ], - [ - -122.853185, - 48.6659, - 365.6 - ], - [ - -122.853173, - 48.665873, - 364.7 - ], - [ - -122.853133, - 48.665864, - 365 - ], - [ - -122.853135, - 48.665834, - 364.3 - ], - [ - -122.853132, - 48.665806, - 363.9 - ], - [ - -122.85309, - 48.665789, - 364.4 - ], - [ - -122.853068, - 48.665758, - 364 - ], - [ - -122.85305, - 48.665726, - 363.3 - ], - [ - -122.853037, - 48.665695, - 362.1 - ], - [ - -122.852998, - 48.665674, - 362.2 - ], - [ - -122.852998, - 48.665635, - 360.7 - ], - [ - -122.852991, - 48.665608, - 359.8 - ], - [ - -122.853024, - 48.665575, - 358 - ], - [ - -122.853046, - 48.665549, - 356.7 - ], - [ - -122.853078, - 48.665525, - 355.4 - ], - [ - -122.853113, - 48.665504, - 354.1 - ], - [ - -122.85314, - 48.66548, - 352.7 - ], - [ - -122.853174, - 48.665455, - 351 - ], - [ - -122.853204, - 48.665436, - 349.8 - ], - [ - -122.853254, - 48.665438, - 349 - ], - [ - -122.853298, - 48.66543, - 347.9 - ], - [ - -122.853338, - 48.665438, - 347.5 - ], - [ - -122.853382, - 48.665448, - 346.8 - ], - [ - -122.853429, - 48.665459, - 346.4 - ], - [ - -122.853485, - 48.66546, - 345.4 - ], - [ - -122.853535, - 48.665455, - 344.2 - ], - [ - -122.853575, - 48.665465, - 342.8 - ], - [ - -122.85361, - 48.665481, - 341.6 - ], - [ - -122.853641, - 48.665506, - 341.5 - ], - [ - -122.853683, - 48.66552, - 341.6 - ], - [ - -122.853735, - 48.665531, - 341 - ], - [ - -122.85378, - 48.665544, - 340.2 - ], - [ - -122.85381, - 48.665568, - 340.3 - ], - [ - -122.853875, - 48.665575, - 338.3 - ], - [ - -122.853866, - 48.665603, - 339.6 - ], - [ - -122.853901, - 48.665626, - 339 - ], - [ - -122.853947, - 48.665631, - 337.4 - ], - [ - -122.853988, - 48.665639, - 336.4 - ], - [ - -122.854022, - 48.665658, - 335.7 - ], - [ - -122.854068, - 48.66567, - 334.8 - ], - [ - -122.8541, - 48.665698, - 334.9 - ], - [ - -122.854096, - 48.665732, - 335.7 - ], - [ - -122.854094, - 48.665762, - 336.5 - ], - [ - -122.854074, - 48.665787, - 337.9 - ], - [ - -122.854052, - 48.665758, - 337.6 - ], - [ - -122.854011, - 48.665747, - 338.8 - ], - [ - -122.853966, - 48.66574, - 340.1 - ], - [ - -122.853922, - 48.665732, - 341.3 - ], - [ - -122.853912, - 48.665695, - 340.5 - ], - [ - -122.853907, - 48.665665, - 339.9 - ], - [ - -122.85391, - 48.665638, - 339 - ], - [ - -122.853918, - 48.665604, - 337.7 - ], - [ - -122.853917, - 48.66557, - 336.6 - ], - [ - -122.853935, - 48.665544, - 335.6 - ], - [ - -122.853914, - 48.665514, - 334.7 - ], - [ - -122.853895, - 48.665481, - 334 - ], - [ - -122.853897, - 48.665446, - 332.5 - ], - [ - -122.853922, - 48.665413, - 330.2 - ], - [ - -122.853932, - 48.665385, - 329.1 - ], - [ - -122.853897, - 48.66537, - 329.2 - ], - [ - -122.853872, - 48.665344, - 328.6 - ], - [ - -122.85388, - 48.665304, - 327.2 - ], - [ - -122.853856, - 48.665272, - 327.3 - ], - [ - -122.85385, - 48.665244, - 326.9 - ], - [ - -122.853832, - 48.665216, - 326.9 - ], - [ - -122.853833, - 48.665185, - 326.3 - ], - [ - -122.853837, - 48.665156, - 325.9 - ], - [ - -122.853826, - 48.665118, - 325.2 - ], - [ - -122.853839, - 48.665091, - 323.9 - ], - [ - -122.853867, - 48.66507, - 322.7 - ], - [ - -122.853896, - 48.665041, - 321.3 - ], - [ - -122.853916, - 48.665068, - 322 - ], - [ - -122.853917, - 48.665102, - 322.9 - ], - [ - -122.853964, - 48.665107, - 322.5 - ], - [ - -122.854063, - 48.665088, - 319.7 - ], - [ - -122.854034, - 48.66511, - 320.3 - ], - [ - -122.854048, - 48.665069, - 320.1 - ], - [ - -122.854062, - 48.665038, - 319.6 - ], - [ - -122.854076, - 48.664991, - 318.1 - ], - [ - -122.854048, - 48.664957, - 317.3 - ], - [ - -122.853998, - 48.664967, - 318.3 - ], - [ - -122.854004, - 48.664935, - 316.8 - ], - [ - -122.853959, - 48.664937, - 317 - ], - [ - -122.853908, - 48.664943, - 317.4 - ], - [ - -122.853877, - 48.664916, - 317 - ], - [ - -122.853848, - 48.664891, - 316.9 - ], - [ - -122.853807, - 48.664883, - 318 - ], - [ - -122.853784, - 48.664861, - 318.4 - ], - [ - -122.85375, - 48.664844, - 319.3 - ], - [ - -122.853774, - 48.664822, - 318 - ], - [ - -122.853793, - 48.664794, - 316.6 - ], - [ - -122.853826, - 48.664773, - 314.9 - ], - [ - -122.853875, - 48.664768, - 313.5 - ], - [ - -122.853915, - 48.664755, - 312.2 - ], - [ - -122.853933, - 48.664727, - 311 - ], - [ - -122.853963, - 48.664698, - 309.5 - ], - [ - -122.854004, - 48.664689, - 308.4 - ], - [ - -122.854035, - 48.664668, - 307 - ], - [ - -122.854013, - 48.664644, - 306.8 - ], - [ - -122.853973, - 48.664649, - 307.7 - ], - [ - -122.85393, - 48.664657, - 308.6 - ], - [ - -122.853877, - 48.664659, - 309.9 - ], - [ - -122.853859, - 48.664633, - 309.5 - ], - [ - -122.85387, - 48.664604, - 308.2 - ], - [ - -122.853883, - 48.66457, - 306.6 - ], - [ - -122.853872, - 48.664539, - 306 - ], - [ - -122.853849, - 48.664507, - 305.9 - ], - [ - -122.853838, - 48.664467, - 304.9 - ], - [ - -122.853852, - 48.664439, - 303.5 - ], - [ - -122.853879, - 48.664415, - 301.9 - ], - [ - -122.853875, - 48.664383, - 300.9 - ], - [ - -122.853882, - 48.664346, - 299.6 - ], - [ - -122.853894, - 48.664315, - 298.3 - ], - [ - -122.853899, - 48.664287, - 297.6 - ], - [ - -122.853905, - 48.664252, - 297.1 - ], - [ - -122.853919, - 48.664222, - 296.3 - ], - [ - -122.853926, - 48.664181, - 295.7 - ], - [ - -122.853955, - 48.664142, - 294.8 - ], - [ - -122.853997, - 48.664122, - 293.6 - ], - [ - -122.854036, - 48.664112, - 292.4 - ], - [ - -122.854067, - 48.664091, - 291.2 - ], - [ - -122.854034, - 48.664061, - 291.6 - ], - [ - -122.854042, - 48.664029, - 291.1 - ], - [ - -122.85406, - 48.664001, - 290.5 - ], - [ - -122.854092, - 48.663972, - 289.4 - ], - [ - -122.854108, - 48.663941, - 289 - ], - [ - -122.854127, - 48.663915, - 288.7 - ], - [ - -122.854143, - 48.663887, - 288.5 - ], - [ - -122.854175, - 48.663853, - 288.2 - ], - [ - -122.854209, - 48.663829, - 288 - ], - [ - -122.854254, - 48.663809, - 287.5 - ], - [ - -122.854311, - 48.66379, - 287.4 - ], - [ - -122.854366, - 48.663773, - 287.7 - ], - [ - -122.854412, - 48.663764, - 288.1 - ], - [ - -122.854463, - 48.663762, - 288.8 - ], - [ - -122.854507, - 48.663772, - 289.2 - ], - [ - -122.854536, - 48.663792, - 289.3 - ], - [ - -122.854598, - 48.663789, - 289.4 - ], - [ - -122.854641, - 48.663781, - 289.1 - ], - [ - -122.854683, - 48.663773, - 287.7 - ], - [ - -122.854727, - 48.66377, - 286.2 - ], - [ - -122.854778, - 48.663774, - 285.2 - ], - [ - -122.854803, - 48.663802, - 284.7 - ], - [ - -122.854824, - 48.663829, - 284.3 - ], - [ - -122.854874, - 48.663843, - 283.1 - ], - [ - -122.854935, - 48.66385, - 281.8 - ], - [ - -122.854971, - 48.663867, - 281.4 - ], - [ - -122.855013, - 48.663877, - 281.2 - ], - [ - -122.85507, - 48.66388, - 281 - ], - [ - -122.855113, - 48.663877, - 280.5 - ], - [ - -122.855155, - 48.663877, - 279.7 - ], - [ - -122.8552, - 48.663883, - 278.9 - ], - [ - -122.855249, - 48.663908, - 278.8 - ], - [ - -122.855272, - 48.663932, - 278.9 - ], - [ - -122.85528, - 48.663962, - 279.4 - ], - [ - -122.855312, - 48.663985, - 279.5 - ], - [ - -122.855361, - 48.663982, - 278.9 - ], - [ - -122.855329, - 48.664005, - 279.7 - ], - [ - -122.855265, - 48.664021, - 281 - ], - [ - -122.855236, - 48.664, - 280.8 - ], - [ - -122.855221, - 48.663974, - 280.2 - ], - [ - -122.855219, - 48.663944, - 279.6 - ], - [ - -122.855216, - 48.663913, - 279.2 - ], - [ - -122.855224, - 48.66387, - 278.5 - ], - [ - -122.855239, - 48.663838, - 278 - ], - [ - -122.855242, - 48.66381, - 277.5 - ], - [ - -122.855236, - 48.663779, - 277.1 - ], - [ - -122.855215, - 48.663749, - 276.6 - ], - [ - -122.855208, - 48.663722, - 276.2 - ], - [ - -122.855173, - 48.663696, - 275.8 - ], - [ - -122.855158, - 48.663668, - 275.7 - ], - [ - -122.855125, - 48.663646, - 275.7 - ], - [ - -122.855088, - 48.663618, - 275.9 - ], - [ - -122.855063, - 48.663588, - 275.9 - ], - [ - -122.855059, - 48.663552, - 275.3 - ], - [ - -122.855022, - 48.663539, - 275.6 - ], - [ - -122.855011, - 48.663498, - 275 - ], - [ - -122.855015, - 48.663467, - 274.5 - ], - [ - -122.85503, - 48.66342, - 274.2 - ], - [ - -122.85503, - 48.66338, - 274.2 - ], - [ - -122.855034, - 48.66334, - 274.1 - ], - [ - -122.855032, - 48.663304, - 274 - ], - [ - -122.855039, - 48.663277, - 273.6 - ], - [ - -122.855044, - 48.663249, - 273 - ], - [ - -122.855046, - 48.663217, - 272.2 - ], - [ - -122.855, - 48.663213, - 272.5 - ], - [ - -122.854966, - 48.663188, - 272.1 - ], - [ - -122.854915, - 48.663179, - 271.8 - ], - [ - -122.85487, - 48.663168, - 270.1 - ], - [ - -122.854818, - 48.663173, - 269.7 - ], - [ - -122.854774, - 48.663163, - 270.1 - ], - [ - -122.85477, - 48.66312, - 267.2 - ], - [ - -122.854761, - 48.663088, - 266.5 - ], - [ - -122.85473, - 48.663063, - 266.1 - ], - [ - -122.854702, - 48.663037, - 266 - ], - [ - -122.854701, - 48.663009, - 265.5 - ], - [ - -122.854644, - 48.662987, - 266.1 - ], - [ - -122.854617, - 48.662958, - 265.9 - ], - [ - -122.854577, - 48.662944, - 266.5 - ], - [ - -122.854577, - 48.662912, - 265.3 - ], - [ - -122.854574, - 48.662872, - 264.3 - ], - [ - -122.854575, - 48.662833, - 264.1 - ], - [ - -122.854585, - 48.662802, - 264.4 - ], - [ - -122.854568, - 48.662775, - 264.4 - ], - [ - -122.854521, - 48.662785, - 263.4 - ], - [ - -122.854467, - 48.662785, - 263.9 - ], - [ - -122.854455, - 48.662756, - 263.4 - ], - [ - -122.854423, - 48.662725, - 262.8 - ], - [ - -122.854399, - 48.662698, - 262.8 - ], - [ - -122.854357, - 48.662702, - 262.7 - ], - [ - -122.854319, - 48.662712, - 263.5 - ], - [ - -122.854261, - 48.662708, - 264.8 - ], - [ - -122.854216, - 48.662708, - 266.3 - ], - [ - -122.854158, - 48.662725, - 269 - ], - [ - -122.854112, - 48.662721, - 270.2 - ], - [ - -122.854085, - 48.662693, - 269.2 - ], - [ - -122.854076, - 48.662652, - 266.6 - ], - [ - -122.854081, - 48.662613, - 263.6 - ], - [ - -122.854082, - 48.662583, - 261.8 - ], - [ - -122.854086, - 48.662546, - 261.5 - ], - [ - -122.854087, - 48.662517, - 262.6 - ], - [ - -122.854086, - 48.662474, - 263.1 - ], - [ - -122.854087, - 48.662424, - 261.7 - ], - [ - -122.85409, - 48.662397, - 260.1 - ], - [ - -122.854085, - 48.662363, - 257.6 - ], - [ - -122.854078, - 48.662327, - 254.5 - ], - [ - -122.854074, - 48.662294, - 252 - ], - [ - -122.85407, - 48.662262, - 249.8 - ], - [ - -122.854068, - 48.662228, - 247.6 - ], - [ - -122.854078, - 48.662189, - 245.7 - ], - [ - -122.854116, - 48.662173, - 246 - ], - [ - -122.854153, - 48.662153, - 246.1 - ], - [ - -122.854194, - 48.662136, - 246.6 - ], - [ - -122.854232, - 48.662115, - 246.6 - ], - [ - -122.854275, - 48.662101, - 247.4 - ], - [ - -122.854319, - 48.66209, - 248.4 - ], - [ - -122.854361, - 48.662075, - 248.9 - ], - [ - -122.854407, - 48.662062, - 249.5 - ], - [ - -122.854442, - 48.662038, - 249.2 - ], - [ - -122.854468, - 48.662016, - 248.9 - ], - [ - -122.854503, - 48.661988, - 248.5 - ], - [ - -122.854543, - 48.661972, - 249 - ], - [ - -122.854588, - 48.661965, - 250 - ], - [ - -122.854622, - 48.661988, - 251.8 - ], - [ - -122.854626, - 48.662016, - 252.9 - ], - [ - -122.854595, - 48.662059, - 253.7 - ], - [ - -122.854579, - 48.662094, - 254.8 - ], - [ - -122.854547, - 48.662124, - 255.9 - ], - [ - -122.85451, - 48.662148, - 257 - ], - [ - -122.854469, - 48.662163, - 257 - ], - [ - -122.854435, - 48.662187, - 257.9 - ], - [ - -122.854403, - 48.662211, - 259.2 - ], - [ - -122.854354, - 48.662219, - 258.6 - ], - [ - -122.854315, - 48.66219, - 254.5 - ], - [ - -122.854308, - 48.662145, - 251.1 - ], - [ - -122.854295, - 48.662113, - 248.7 - ], - [ - -122.854318, - 48.662087, - 248.2 - ], - [ - -122.854337, - 48.662045, - 246.8 - ], - [ - -122.854363, - 48.662015, - 246.2 - ], - [ - -122.854398, - 48.661988, - 245.9 - ], - [ - -122.854425, - 48.661962, - 245.6 - ], - [ - -122.854452, - 48.661926, - 244.7 - ], - [ - -122.854478, - 48.661894, - 244 - ], - [ - -122.854509, - 48.661857, - 242.9 - ], - [ - -122.854546, - 48.661839, - 242.9 - ], - [ - -122.854585, - 48.661811, - 242.4 - ], - [ - -122.85461, - 48.661777, - 241.5 - ], - [ - -122.854606, - 48.661746, - 239.8 - ], - [ - -122.854566, - 48.661738, - 238.4 - ], - [ - -122.854579, - 48.661707, - 237.5 - ], - [ - -122.854607, - 48.661679, - 237.2 - ], - [ - -122.854636, - 48.661642, - 236.4 - ], - [ - -122.854659, - 48.661618, - 236 - ], - [ - -122.854685, - 48.661593, - 235.7 - ], - [ - -122.85475, - 48.661575, - 236.3 - ], - [ - -122.854788, - 48.661567, - 236.6 - ], - [ - -122.854809, - 48.661532, - 235.8 - ], - [ - -122.854831, - 48.661503, - 235.4 - ], - [ - -122.854864, - 48.661476, - 235.2 - ], - [ - -122.854898, - 48.66146, - 235.5 - ], - [ - -122.854935, - 48.661436, - 235.7 - ], - [ - -122.85497, - 48.661397, - 235.1 - ], - [ - -122.854978, - 48.66137, - 234.6 - ], - [ - -122.854985, - 48.661342, - 234.3 - ], - [ - -122.855018, - 48.661319, - 234.3 - ], - [ - -122.855033, - 48.661262, - 234 - ], - [ - -122.855037, - 48.661246, - 234.1 - ], - [ - -122.855057, - 48.661217, - 234.2 - ], - [ - -122.855094, - 48.661182, - 234 - ], - [ - -122.855116, - 48.661159, - 233.8 - ], - [ - -122.855134, - 48.661127, - 233.6 - ], - [ - -122.855154, - 48.661102, - 233.4 - ], - [ - -122.855181, - 48.661077, - 232.9 - ], - [ - -122.855208, - 48.661055, - 232.4 - ], - [ - -122.855233, - 48.661033, - 231.6 - ], - [ - -122.855268, - 48.661008, - 230.5 - ], - [ - -122.855284, - 48.660975, - 229.9 - ], - [ - -122.855308, - 48.660952, - 229.1 - ], - [ - -122.85534, - 48.660929, - 228.1 - ], - [ - -122.855382, - 48.660903, - 226.8 - ], - [ - -122.855404, - 48.660879, - 226 - ], - [ - -122.855443, - 48.660849, - 224.3 - ], - [ - -122.855473, - 48.660828, - 222.9 - ], - [ - -122.855541, - 48.66081, - 221.2 - ], - [ - -122.855582, - 48.660793, - 220.5 - ], - [ - -122.855596, - 48.66076, - 219.3 - ], - [ - -122.855613, - 48.660724, - 218.6 - ], - [ - -122.855642, - 48.6607, - 218.4 - ], - [ - -122.855678, - 48.660661, - 217.7 - ], - [ - -122.855707, - 48.660641, - 217 - ], - [ - -122.855705, - 48.660605, - 215.7 - ], - [ - -122.855704, - 48.660574, - 214.9 - ], - [ - -122.855726, - 48.66055, - 214.3 - ], - [ - -122.855749, - 48.660527, - 213.8 - ], - [ - -122.855764, - 48.6605, - 213.6 - ], - [ - -122.855781, - 48.66047, - 213.5 - ], - [ - -122.855783, - 48.660441, - 213.5 - ], - [ - -122.855802, - 48.6604, - 213.2 - ], - [ - -122.855814, - 48.660362, - 212.8 - ], - [ - -122.855836, - 48.66033, - 212.6 - ], - [ - -122.855877, - 48.660321, - 212.5 - ], - [ - -122.855929, - 48.660309, - 212.4 - ], - [ - -122.855957, - 48.660284, - 211.9 - ], - [ - -122.855986, - 48.660247, - 211.3 - ], - [ - -122.856012, - 48.660215, - 210.6 - ], - [ - -122.856045, - 48.660186, - 209.7 - ], - [ - -122.856078, - 48.660166, - 208.9 - ], - [ - -122.856132, - 48.660144, - 208.5 - ], - [ - -122.856182, - 48.660133, - 208.4 - ], - [ - -122.856226, - 48.660112, - 208.4 - ], - [ - -122.856289, - 48.660084, - 208.8 - ], - [ - -122.856326, - 48.660071, - 209.3 - ], - [ - -122.856366, - 48.660065, - 210.1 - ], - [ - -122.856417, - 48.660057, - 210.7 - ], - [ - -122.85646, - 48.660055, - 210.5 - ], - [ - -122.856518, - 48.660054, - 209.1 - ], - [ - -122.856587, - 48.660055, - 206.7 - ], - [ - -122.856635, - 48.660054, - 205.4 - ], - [ - -122.856692, - 48.660054, - 204.8 - ], - [ - -122.856742, - 48.66006, - 205.4 - ], - [ - -122.856785, - 48.660037, - 204.9 - ], - [ - -122.856789, - 48.660071, - 206.3 - ], - [ - -122.856811, - 48.660096, - 207.4 - ], - [ - -122.856786, - 48.660126, - 208.5 - ], - [ - -122.856755, - 48.660153, - 209.2 - ], - [ - -122.856708, - 48.660165, - 209.5 - ], - [ - -122.856659, - 48.660172, - 209.6 - ], - [ - -122.856594, - 48.660176, - 210 - ], - [ - -122.856532, - 48.660175, - 210.9 - ], - [ - -122.856489, - 48.660173, - 211.2 - ], - [ - -122.856449, - 48.660163, - 211 - ], - [ - -122.856405, - 48.660146, - 210.6 - ], - [ - -122.856392, - 48.660114, - 209.9 - ], - [ - -122.856404, - 48.660078, - 210.4 - ], - [ - -122.856415, - 48.660046, - 210.9 - ], - [ - -122.856428, - 48.660012, - 211.3 - ], - [ - -122.856447, - 48.659985, - 211.3 - ], - [ - -122.856473, - 48.659963, - 211.2 - ], - [ - -122.856453, - 48.65993, - 211.4 - ], - [ - -122.856417, - 48.659913, - 211.6 - ], - [ - -122.85641, - 48.659881, - 211.2 - ], - [ - -122.856405, - 48.659842, - 210.2 - ], - [ - -122.856387, - 48.659812, - 209.9 - ], - [ - -122.85637, - 48.659786, - 209.6 - ], - [ - -122.856366, - 48.659759, - 208.9 - ], - [ - -122.856334, - 48.659733, - 208.3 - ], - [ - -122.856292, - 48.659721, - 207.9 - ], - [ - -122.85625, - 48.659714, - 207.6 - ], - [ - -122.856208, - 48.65971, - 207.5 - ], - [ - -122.856167, - 48.659685, - 207 - ], - [ - -122.856134, - 48.659652, - 206.1 - ], - [ - -122.856104, - 48.659626, - 205.5 - ], - [ - -122.856057, - 48.659606, - 205.1 - ], - [ - -122.856011, - 48.659602, - 205.4 - ], - [ - -122.855958, - 48.659599, - 205.8 - ], - [ - -122.855911, - 48.659595, - 206.2 - ], - [ - -122.855867, - 48.659572, - 205.9 - ], - [ - -122.855822, - 48.659562, - 205.5 - ], - [ - -122.855782, - 48.659551, - 205.2 - ], - [ - -122.855727, - 48.659557, - 205.5 - ], - [ - -122.855684, - 48.659559, - 205.5 - ], - [ - -122.855639, - 48.659564, - 205.1 - ], - [ - -122.855592, - 48.65957, - 204.6 - ], - [ - -122.855545, - 48.65957, - 204 - ], - [ - -122.855503, - 48.659581, - 204 - ], - [ - -122.855451, - 48.65959, - 204 - ], - [ - -122.855409, - 48.659569, - 203.5 - ], - [ - -122.855374, - 48.659553, - 202.7 - ], - [ - -122.855324, - 48.659542, - 202.1 - ], - [ - -122.855287, - 48.659555, - 202.9 - ], - [ - -122.855246, - 48.65956, - 202.9 - ], - [ - -122.855202, - 48.659571, - 203 - ], - [ - -122.855163, - 48.659586, - 203.1 - ], - [ - -122.855116, - 48.659607, - 203.1 - ], - [ - -122.855072, - 48.659616, - 202.5 - ], - [ - -122.855021, - 48.659624, - 202.1 - ], - [ - -122.854972, - 48.659635, - 202.1 - ], - [ - -122.854938, - 48.659653, - 202.7 - ], - [ - -122.854904, - 48.65967, - 203.1 - ], - [ - -122.854871, - 48.65969, - 203.3 - ], - [ - -122.854818, - 48.659695, - 201.5 - ], - [ - -122.854772, - 48.6597, - 199.8 - ], - [ - -122.854739, - 48.659678, - 198 - ], - [ - -122.854705, - 48.659654, - 196.2 - ], - [ - -122.854682, - 48.659631, - 195 - ], - [ - -122.854639, - 48.659612, - 194.1 - ], - [ - -122.854592, - 48.659604, - 195.5 - ], - [ - -122.854549, - 48.659593, - 197.3 - ], - [ - -122.854519, - 48.659574, - 198.3 - ], - [ - -122.854486, - 48.659545, - 197.5 - ], - [ - -122.85444, - 48.659532, - 196.8 - ], - [ - -122.854391, - 48.659519, - 196 - ], - [ - -122.854343, - 48.659494, - 195.1 - ], - [ - -122.854304, - 48.659463, - 193.8 - ], - [ - -122.854264, - 48.659454, - 193.3 - ], - [ - -122.854214, - 48.659461, - 193.1 - ], - [ - -122.854172, - 48.659472, - 193.1 - ], - [ - -122.854136, - 48.659487, - 193.2 - ], - [ - -122.854095, - 48.659481, - 192.8 - ], - [ - -122.854068, - 48.659455, - 192.4 - ], - [ - -122.85403, - 48.659439, - 192.5 - ], - [ - -122.853975, - 48.659425, - 192.6 - ], - [ - -122.853932, - 48.659417, - 192.7 - ], - [ - -122.853876, - 48.659412, - 192.4 - ], - [ - -122.853837, - 48.659398, - 191.8 - ], - [ - -122.853795, - 48.659383, - 191.5 - ], - [ - -122.853754, - 48.659364, - 191.5 - ], - [ - -122.853719, - 48.659346, - 192.1 - ], - [ - -122.853688, - 48.659323, - 192.5 - ], - [ - -122.853669, - 48.659293, - 192.2 - ], - [ - -122.853676, - 48.65926, - 191.6 - ], - [ - -122.853688, - 48.65922, - 191 - ], - [ - -122.853664, - 48.659191, - 189.9 - ], - [ - -122.853635, - 48.659163, - 188.6 - ], - [ - -122.853634, - 48.659131, - 187.3 - ], - [ - -122.853624, - 48.659102, - 186.3 - ], - [ - -122.853582, - 48.659102, - 186.5 - ], - [ - -122.853568, - 48.659067, - 185.4 - ], - [ - -122.853536, - 48.659051, - 185.4 - ], - [ - -122.853493, - 48.659032, - 185 - ], - [ - -122.853457, - 48.659018, - 184.7 - ], - [ - -122.853416, - 48.65901, - 184.6 - ], - [ - -122.853387, - 48.658991, - 184.1 - ], - [ - -122.853359, - 48.65897, - 183.7 - ], - [ - -122.853338, - 48.658941, - 183.2 - ], - [ - -122.8533, - 48.658919, - 183.3 - ], - [ - -122.853289, - 48.658885, - 182.9 - ], - [ - -122.853268, - 48.658854, - 182.8 - ], - [ - -122.853229, - 48.658832, - 183.6 - ], - [ - -122.853224, - 48.658802, - 183.5 - ], - [ - -122.853253, - 48.658768, - 182.5 - ], - [ - -122.853276, - 48.658741, - 181.6 - ], - [ - -122.853262, - 48.658711, - 181.7 - ], - [ - -122.853235, - 48.65869, - 181.8 - ], - [ - -122.853187, - 48.658695, - 182.6 - ], - [ - -122.853146, - 48.658692, - 182.8 - ], - [ - -122.853125, - 48.658667, - 182.1 - ], - [ - -122.853116, - 48.658634, - 181.2 - ], - [ - -122.853126, - 48.658605, - 180.1 - ], - [ - -122.853104, - 48.658576, - 179.2 - ], - [ - -122.853068, - 48.658551, - 178.8 - ], - [ - -122.853037, - 48.658521, - 178.2 - ], - [ - -122.852996, - 48.658512, - 178.7 - ], - [ - -122.852943, - 48.658512, - 179.7 - ], - [ - -122.852902, - 48.658501, - 179.9 - ], - [ - -122.852871, - 48.658483, - 179.6 - ], - [ - -122.852829, - 48.65848, - 180.3 - ], - [ - -122.852796, - 48.658461, - 179.7 - ], - [ - -122.852765, - 48.658431, - 178.2 - ], - [ - -122.852732, - 48.658402, - 176.6 - ], - [ - -122.852686, - 48.658389, - 175.9 - ], - [ - -122.852656, - 48.658366, - 174.4 - ], - [ - -122.852627, - 48.658343, - 172.9 - ], - [ - -122.852561, - 48.658331, - 172.5 - ], - [ - -122.852521, - 48.658309, - 171.3 - ], - [ - -122.85249, - 48.658283, - 170.1 - ], - [ - -122.852464, - 48.658261, - 169.3 - ], - [ - -122.852461, - 48.658222, - 168.4 - ], - [ - -122.852435, - 48.658194, - 168.5 - ], - [ - -122.8524, - 48.658161, - 168.8 - ], - [ - -122.852373, - 48.65812, - 168.8 - ], - [ - -122.852377, - 48.658088, - 168.7 - ], - [ - -122.852346, - 48.658061, - 169.3 - ], - [ - -122.852373, - 48.658037, - 169 - ], - [ - -122.852402, - 48.658013, - 168.5 - ], - [ - -122.852463, - 48.658, - 167.7 - ], - [ - -122.852522, - 48.657996, - 167 - ], - [ - -122.852583, - 48.657996, - 166.6 - ], - [ - -122.852638, - 48.657987, - 166.1 - ], - [ - -122.852692, - 48.657988, - 165.1 - ], - [ - -122.852748, - 48.657982, - 164.2 - ], - [ - -122.852792, - 48.657974, - 163.7 - ], - [ - -122.852835, - 48.657961, - 163.2 - ], - [ - -122.852882, - 48.657957, - 162.7 - ], - [ - -122.852924, - 48.657945, - 162.7 - ], - [ - -122.852954, - 48.657919, - 163.1 - ], - [ - -122.852973, - 48.657893, - 163.2 - ], - [ - -122.853022, - 48.657886, - 162.6 - ], - [ - -122.853062, - 48.657872, - 162.5 - ], - [ - -122.853096, - 48.657853, - 162.7 - ], - [ - -122.853145, - 48.657828, - 162.6 - ], - [ - -122.85317, - 48.657814, - 162.2 - ], - [ - -122.853175, - 48.657782, - 162.6 - ], - [ - -122.85322, - 48.657771, - 161.3 - ], - [ - -122.853258, - 48.657744, - 160.2 - ], - [ - -122.853258, - 48.657715, - 160.1 - ], - [ - -122.853289, - 48.657696, - 158.8 - ], - [ - -122.853323, - 48.657675, - 157.4 - ], - [ - -122.853373, - 48.657662, - 155.6 - ], - [ - -122.853385, - 48.657625, - 155.3 - ], - [ - -122.853395, - 48.65758, - 154.9 - ], - [ - -122.853395, - 48.657534, - 154.7 - ], - [ - -122.853397, - 48.657502, - 154.7 - ], - [ - -122.853443, - 48.657507, - 153.8 - ], - [ - -122.85347, - 48.657484, - 153.1 - ], - [ - -122.853497, - 48.657454, - 152.8 - ], - [ - -122.853552, - 48.657439, - 151.8 - ], - [ - -122.853593, - 48.657426, - 150.6 - ], - [ - -122.853611, - 48.657394, - 150.5 - ], - [ - -122.853618, - 48.657364, - 150.5 - ], - [ - -122.853626, - 48.657337, - 150.6 - ], - [ - -122.853648, - 48.657313, - 150.2 - ], - [ - -122.853666, - 48.657285, - 149.8 - ], - [ - -122.85369, - 48.657255, - 149.2 - ], - [ - -122.853724, - 48.657236, - 148.1 - ], - [ - -122.853762, - 48.657197, - 147.1 - ], - [ - -122.853803, - 48.657176, - 146.1 - ], - [ - -122.853835, - 48.657151, - 145.3 - ], - [ - -122.853885, - 48.657152, - 142.9 - ], - [ - -122.85391, - 48.657188, - 141.4 - ], - [ - -122.853939, - 48.657212, - 140.2 - ], - [ - -122.853979, - 48.657218, - 138.4 - ], - [ - -122.854021, - 48.657228, - 136.3 - ], - [ - -122.854059, - 48.657262, - 134.2 - ], - [ - -122.854078, - 48.657288, - 132.9 - ], - [ - -122.854093, - 48.657315, - 131.8 - ], - [ - -122.854105, - 48.657341, - 130.8 - ], - [ - -122.854125, - 48.657377, - 129.5 - ], - [ - -122.854136, - 48.657412, - 128.6 - ], - [ - -122.854143, - 48.65744, - 128 - ], - [ - -122.854101, - 48.657444, - 130 - ], - [ - -122.854058, - 48.657447, - 132.2 - ], - [ - -122.85409, - 48.657467, - 130.6 - ], - [ - -122.854103, - 48.657495, - 129.8 - ], - [ - -122.854113, - 48.657529, - 129.1 - ], - [ - -122.854125, - 48.657559, - 128.5 - ], - [ - -122.854164, - 48.657577, - 127 - ], - [ - -122.854203, - 48.657563, - 125.7 - ], - [ - -122.854165, - 48.657574, - 127 - ], - [ - -122.854194, - 48.657593, - 126.3 - ], - [ - -122.854237, - 48.657621, - 126.2 - ], - [ - -122.854279, - 48.657648, - 126.3 - ], - [ - -122.854304, - 48.657675, - 126.7 - ], - [ - -122.854342, - 48.657703, - 125.5 - ], - [ - -122.854377, - 48.657723, - 124.5 - ], - [ - -122.854421, - 48.657747, - 124.6 - ], - [ - -122.85446, - 48.657735, - 124 - ], - [ - -122.854502, - 48.657757, - 124.6 - ], - [ - -122.85455, - 48.657778, - 125.4 - ], - [ - -122.854597, - 48.657804, - 126.2 - ], - [ - -122.854632, - 48.657827, - 126.5 - ], - [ - -122.854603, - 48.657848, - 126.1 - ], - [ - -122.854574, - 48.657872, - 126.3 - ], - [ - -122.854595, - 48.65792, - 127.5 - ], - [ - -122.854562, - 48.657938, - 128.5 - ], - [ - -122.854609, - 48.657955, - 128.5 - ], - [ - -122.85465, - 48.657952, - 127.7 - ], - [ - -122.854661, - 48.657925, - 127.6 - ], - [ - -122.854649, - 48.657896, - 127.1 - ], - [ - -122.854614, - 48.65788, - 126.6 - ], - [ - -122.854576, - 48.657864, - 126.2 - ], - [ - -122.854532, - 48.657866, - 126.3 - ], - [ - -122.854489, - 48.657887, - 127.6 - ], - [ - -122.85444, - 48.657874, - 128.5 - ], - [ - -122.854385, - 48.657861, - 129.8 - ], - [ - -122.854378, - 48.657827, - 128.8 - ], - [ - -122.854406, - 48.65778, - 125.7 - ], - [ - -122.854431, - 48.657729, - 124.1 - ], - [ - -122.854438, - 48.65769, - 123.2 - ], - [ - -122.854428, - 48.657654, - 122.6 - ], - [ - -122.854408, - 48.657625, - 122.3 - ], - [ - -122.854368, - 48.65761, - 122.6 - ], - [ - -122.854366, - 48.657574, - 122.4 - ], - [ - -122.854341, - 48.657539, - 122.9 - ], - [ - -122.854319, - 48.657513, - 123 - ], - [ - -122.854286, - 48.657483, - 123 - ], - [ - -122.85429, - 48.65745, - 122.6 - ], - [ - -122.854306, - 48.657416, - 122.2 - ], - [ - -122.854314, - 48.657388, - 122 - ], - [ - -122.854347, - 48.657343, - 120.9 - ], - [ - -122.854366, - 48.657312, - 120.1 - ], - [ - -122.854379, - 48.657281, - 119.8 - ], - [ - -122.854391, - 48.657233, - 119.6 - ], - [ - -122.854402, - 48.657188, - 119.1 - ], - [ - -122.854408, - 48.657141, - 118.7 - ], - [ - -122.854407, - 48.657105, - 118.4 - ], - [ - -122.854421, - 48.657079, - 118.1 - ], - [ - -122.854448, - 48.657052, - 117.7 - ], - [ - -122.854477, - 48.65703, - 117.5 - ], - [ - -122.854471, - 48.656993, - 117.8 - ], - [ - -122.854492, - 48.656956, - 117.1 - ], - [ - -122.854525, - 48.656938, - 116.6 - ], - [ - -122.854548, - 48.656912, - 116.4 - ], - [ - -122.854569, - 48.656881, - 116 - ], - [ - -122.854595, - 48.65685, - 115.7 - ], - [ - -122.854609, - 48.656824, - 115.5 - ], - [ - -122.854611, - 48.656785, - 115.2 - ], - [ - -122.854615, - 48.65675, - 115 - ], - [ - -122.854619, - 48.656718, - 114.9 - ], - [ - -122.854631, - 48.656685, - 114.8 - ], - [ - -122.854649, - 48.65666, - 114.7 - ], - [ - -122.854691, - 48.656658, - 114.6 - ], - [ - -122.854752, - 48.656673, - 114.5 - ], - [ - -122.85482, - 48.656664, - 114.6 - ] - ], - "type": "LineString" - }, - "properties": { - "name": "Moran State Park Western Boundary Hike", - "time": "2015-04-18T15:51:49Z" - }, - "type": "Feature" - } - ], - "type": "FeatureCollection" -} diff --git a/platform/ios/app/pt-BR.lproj/Localizable.strings b/platform/ios/app/pt-BR.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/pt-PT.lproj/Localizable.strings b/platform/ios/app/pt-PT.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/ru.lproj/Localizable.strings b/platform/ios/app/ru.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/simple_route.json b/platform/ios/app/simple_route.json deleted file mode 100644 index 8b910dbdaf1..00000000000 --- a/platform/ios/app/simple_route.json +++ /dev/null @@ -1,184 +0,0 @@ -{ - "coordinates":[ - [ - -122.39899, - 37.787357 - ], - [ - -122.398818, - 37.78722 - ], - [ - -122.398794, - 37.7872 - ], - [ - -122.398259, - 37.786773 - ], - [ - -122.398984, - 37.786206 - ], - [ - -122.399053, - 37.786151 - ], - [ - -122.399379, - 37.785888 - ], - [ - -122.399614, - 37.785697 - ], - [ - -122.399884, - 37.785478 - ], - [ - -122.400382, - 37.78509 - ], - [ - -122.400478, - 37.785015 - ], - [ - -122.400599, - 37.785111 - ], - [ - -122.4012, - 37.785587 - ], - [ - -122.401495, - 37.785825 - ], - [ - -122.401705, - 37.785993 - ], - [ - -122.402041, - 37.786261 - ], - [ - -122.402476, - 37.786603 - ], - [ - -122.402573, - 37.78668 - ], - [ - -122.403019, - 37.787031 - ], - [ - -122.403315, - 37.78728 - ], - [ - -122.403358, - 37.787324 - ], - [ - -122.403382, - 37.787356 - ], - [ - -122.403398, - 37.787392 - ], - [ - -122.403405, - 37.787425 - ], - [ - -122.403415, - 37.787486 - ], - [ - -122.403434, - 37.787654 - ], - [ - -122.403436, - 37.787676 - ], - [ - -122.40344, - 37.787698 - ], - [ - -122.403444, - 37.787729 - ], - [ - -122.403464, - 37.787825 - ], - [ - -122.403476, - 37.787877 - ], - [ - -122.403497, - 37.787965 - ], - [ - -122.403591, - 37.788436 - ], - [ - -122.403684, - 37.788901 - ], - [ - -122.403774, - 37.789349 - ], - [ - -122.403798, - 37.789469 - ], - [ - -122.403872, - 37.789833 - ], - [ - -122.404232, - 37.789788 - ], - [ - -122.405435, - 37.789635 - ], - [ - -122.406, - 37.789562 - ], - [ - -122.406982, - 37.789436 - ], - [ - -122.407475, - 37.789373 - ], - [ - -122.408599, - 37.789231 - ], - [ - -122.408616, - 37.789229 - ], - [ - -122.408451, - 37.788454 - ] - ] -} \ No newline at end of file diff --git a/platform/ios/app/sv.lproj/Localizable.strings b/platform/ios/app/sv.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/threestates.geojson b/platform/ios/app/threestates.geojson deleted file mode 100644 index 9b70388782e..00000000000 --- a/platform/ios/app/threestates.geojson +++ /dev/null @@ -1,1612 +0,0 @@ -{ - "type": "FeatureCollection", - "features": [ - { - "geometry": { - "coordinates": [ - [ - [ - -75.80260539153913, - 39.722485154715464 - ], - [ - -75.76669272327231, - 39.722485154715464 - ], - [ - -75.76669272327231, - 39.765510893789376 - ], - [ - -75.73078005500548, - 39.765510893789376 - ], - [ - -75.73078005500548, - 39.79132633723372 - ], - [ - -75.69486738673865, - 39.79132633723372 - ], - [ - -75.69486738673865, - 39.817141780678064 - ], - [ - -75.623042050205, - 39.834352076307624 - ], - [ - -75.47939137713769, - 39.834352076307624 - ], - [ - -75.44347870887087, - 39.80853663286328 - ], - [ - -75.40756604060404, - 39.80853663286328 - ], - [ - -75.40756604060404, - 39.799931485048496 - ], - [ - -75.44347870887087, - 39.79132633723372 - ], - [ - -75.44347870887087, - 39.765510893789376 - ], - [ - -75.47939137713769, - 39.765510893789376 - ], - [ - -75.47939137713769, - 39.69666971127112 - ], - [ - -75.51530404540452, - 39.69666971127112 - ], - [ - -75.51530404540452, - 39.64503882438243 - ], - [ - -75.55121671367135, - 39.64503882438243 - ], - [ - -75.55121671367135, - 39.593407937493744 - ], - [ - -75.51530404540452, - 39.58480278967896 - ], - [ - -75.51530404540452, - 39.541777050605056 - ], - [ - -75.51530404540452, - 39.498751311531144 - ], - [ - -75.55121671367135, - 39.498751311531144 - ], - [ - -75.55121671367135, - 39.429910129012896 - ], - [ - -75.51530404540452, - 39.429910129012896 - ], - [ - -75.51530404540452, - 39.40409468556855 - ], - [ - -75.47939137713769, - 39.39548953775377 - ], - [ - -75.47939137713769, - 39.369674094309424 - ], - [ - -75.44347870887087, - 39.36106894649464 - ], - [ - -75.44347870887087, - 39.335253503050296 - ], - [ - -75.40756604060404, - 39.335253503050296 - ], - [ - -75.40756604060404, - 39.30943805960595 - ], - [ - -75.33574070407039, - 39.27501746834683 - ], - [ - -75.33574070407039, - 39.24920202490249 - ], - [ - -75.29982803580356, - 39.24920202490249 - ], - [ - -75.29982803580356, - 39.206176285828576 - ], - [ - -75.26391536753674, - 39.188965990199016 - ], - [ - -75.26391536753674, - 39.15454539893989 - ], - [ - -75.22800269926991, - 39.15454539893989 - ], - [ - -75.22800269926991, - 39.111519659865984 - ], - [ - -75.19209003100308, - 39.06849392079207 - ], - [ - -75.15617736273626, - 39.05988877297729 - ], - [ - -75.15617736273626, - 38.999652738273824 - ], - [ - -75.12026469446943, - 38.999652738273824 - ], - [ - -75.12026469446943, - 38.965232147014696 - ], - [ - -75.0843520262026, - 38.91360126012601 - ], - [ - -75.0843520262026, - 38.87918066886688 - ], - [ - -75.04843935793578, - 38.87918066886688 - ], - [ - -75.04843935793578, - 38.836154929792976 - ], - [ - -75.01252668966895, - 38.80173433853385 - ], - [ - -75.01252668966895, - 38.78452404290429 - ], - [ - -75.01252668966895, - 38.612421086608656 - ], - [ - -74.97661402140213, - 38.612421086608656 - ], - [ - -74.97661402140213, - 38.44892327812781 - ], - [ - -75.44347870887087, - 38.44892327812781 - ], - [ - -75.44347870887087, - 38.45752842594259 - ], - [ - -75.69486738673865, - 38.45752842594259 - ], - [ - -75.69486738673865, - 38.69847256475647 - ], - [ - -75.73078005500548, - 38.70707771257125 - ], - [ - -75.73078005500548, - 39.145940251125104 - ], - [ - -75.76669272327231, - 39.15454539893989 - ], - [ - -75.76669272327231, - 39.593407937493744 - ], - [ - -75.80260539153913, - 39.60201308530853 - ], - [ - -75.80260539153913, - 39.722485154715464 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "NAME": "Delaware" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - [ - [ - -80.50716493449343, - 40.634630823082304 - ], - [ - -80.50716493449343, - 42.32984494259426 - ], - [ - -80.36351426142612, - 42.34705523822382 - ], - [ - -80.18395092009199, - 42.381475829482945 - ], - [ - -80.0762129152915, - 42.39008097729772 - ], - [ - -80.00438757875786, - 42.42450156855685 - ], - [ - -79.7889115691569, - 42.50194789888988 - ], - [ - -79.75299890089008, - 42.51915819451945 - ], - [ - -79.75299890089008, - 42.00284932563255 - ], - [ - -79.53752289128911, - 42.00284932563255 - ], - [ - -79.50161022302228, - 41.99424417781778 - ], - [ - -79.42978488648863, - 42.00284932563255 - ], - [ - -78.96292019901988, - 42.00284932563255 - ], - [ - -78.92700753075306, - 41.99424417781778 - ], - [ - -78.7115315211521, - 41.99424417781778 - ], - [ - -78.7115315211521, - 42.00284932563255 - ], - [ - -77.92145281928191, - 42.00284932563255 - ], - [ - -77.92145281928191, - 41.99424417781778 - ], - [ - -77.81371481448143, - 41.99424417781778 - ], - [ - -77.74188947794778, - 42.00284932563255 - ], - [ - -77.16728678567856, - 42.00284932563255 - ], - [ - -76.37720808380836, - 42.00284932563255 - ], - [ - -76.37720808380836, - 41.99424417781778 - ], - [ - -76.19764474247422, - 41.99424417781778 - ], - [ - -76.1617320742074, - 42.00284932563255 - ], - [ - -75.87443072807278, - 42.00284932563255 - ], - [ - -75.83851805980596, - 41.99424417781778 - ], - [ - -75.65895471847183, - 41.99424417781778 - ], - [ - -75.623042050205, - 42.00284932563255 - ], - [ - -75.37165337233722, - 42.00284932563255 - ], - [ - -75.33574070407039, - 41.99424417781778 - ], - [ - -75.33574070407039, - 41.951218438743865 - ], - [ - -75.26391536753674, - 41.94261329092909 - ], - [ - -75.26391536753674, - 41.865166960596056 - ], - [ - -75.22800269926991, - 41.865166960596056 - ], - [ - -75.19209003100308, - 41.865166960596056 - ], - [ - -75.19209003100308, - 41.87377210841083 - ], - [ - -75.19209003100308, - 41.865166960596056 - ], - [ - -75.19209003100308, - 41.87377210841083 - ], - [ - -75.15617736273626, - 41.87377210841083 - ], - [ - -75.15617736273626, - 41.84795666496649 - ], - [ - -75.12026469446943, - 41.84795666496649 - ], - [ - -75.12026469446943, - 41.822141221522145 - ], - [ - -75.0843520262026, - 41.822141221522145 - ], - [ - -75.0843520262026, - 41.78772063026302 - ], - [ - -75.12026469446943, - 41.77051033463346 - ], - [ - -75.04843935793578, - 41.77051033463346 - ], - [ - -75.04843935793578, - 41.563986787078704 - ], - [ - -75.01252668966895, - 41.563986787078704 - ], - [ - -75.01252668966895, - 41.51235590019001 - ], - [ - -74.97661402140213, - 41.51235590019001 - ], - [ - -74.97661402140213, - 41.47793530893089 - ], - [ - -74.9407013531353, - 41.47793530893089 - ], - [ - -74.90478868486846, - 41.47793530893089 - ], - [ - -74.90478868486846, - 41.43490956985698 - ], - [ - -74.83296334833481, - 41.44351471767176 - ], - [ - -74.79705068006798, - 41.4263044220422 - ], - [ - -74.72522534353433, - 41.43490956985698 - ], - [ - -74.72522534353433, - 41.37467353515351 - ], - [ - -74.6893126752675, - 41.357463239523945 - ], - [ - -74.76113801180117, - 41.34885809170916 - ], - [ - -74.76113801180117, - 41.32304264826482 - ], - [ - -74.79705068006798, - 41.32304264826482 - ], - [ - -74.79705068006798, - 41.29722720482047 - ], - [ - -74.83296334833481, - 41.29722720482047 - ], - [ - -74.83296334833481, - 41.25420146574657 - ], - [ - -74.86887601660165, - 41.25420146574657 - ], - [ - -74.86887601660165, - 41.176755135413536 - ], - [ - -74.90478868486846, - 41.176755135413536 - ], - [ - -74.90478868486846, - 41.14233454415441 - ], - [ - -74.9407013531353, - 41.14233454415441 - ], - [ - -74.9407013531353, - 41.116519100710065 - ], - [ - -74.97661402140213, - 41.099308805080504 - ], - [ - -74.97661402140213, - 41.09070365726572 - ], - [ - -74.97661402140213, - 41.099308805080504 - ], - [ - -74.97661402140213, - 41.09070365726572 - ], - [ - -75.01252668966895, - 41.07349336163616 - ], - [ - -75.01252668966895, - 41.03907277037703 - ], - [ - -75.0843520262026, - 41.004652179117905 - ], - [ - -75.12026469446943, - 41.004652179117905 - ], - [ - -75.12026469446943, - 40.935810996599656 - ], - [ - -75.0843520262026, - 40.935810996599656 - ], - [ - -75.0843520262026, - 40.892785257525745 - ], - [ - -75.04843935793578, - 40.88418010971097 - ], - [ - -75.04843935793578, - 40.84975951845184 - ], - [ - -75.0843520262026, - 40.84975951845184 - ], - [ - -75.0843520262026, - 40.79812863156315 - ], - [ - -75.12026469446943, - 40.79812863156315 - ], - [ - -75.12026469446943, - 40.77231318811881 - ], - [ - -75.15617736273626, - 40.77231318811881 - ], - [ - -75.19209003100308, - 40.77231318811881 - ], - [ - -75.19209003100308, - 40.56578964056405 - ], - [ - -75.12026469446943, - 40.57439478837883 - ], - [ - -75.0843520262026, - 40.56578964056405 - ], - [ - -75.0843520262026, - 40.53136904930492 - ], - [ - -75.04843935793578, - 40.53136904930492 - ], - [ - -75.04843935793578, - 40.471133014601456 - ], - [ - -75.0843520262026, - 40.471133014601456 - ], - [ - -75.0843520262026, - 40.44531757115711 - ], - [ - -75.04843935793578, - 40.44531757115711 - ], - [ - -75.04843935793578, - 40.4022918320832 - ], - [ - -74.97661402140213, - 40.410896979897984 - ], - [ - -74.97661402140213, - 40.38508153645364 - ], - [ - -74.9407013531353, - 40.38508153645364 - ], - [ - -74.9407013531353, - 40.32484550175017 - ], - [ - -74.86887601660165, - 40.30763520612061 - ], - [ - -74.86887601660165, - 40.2646094670467 - ], - [ - -74.83296334833481, - 40.2646094670467 - ], - [ - -74.83296334833481, - 40.23879402360235 - ], - [ - -74.76113801180117, - 40.22158372797279 - ], - [ - -74.76113801180117, - 40.17855798889888 - ], - [ - -74.72522534353433, - 40.17855798889888 - ], - [ - -74.72522534353433, - 40.135532249824976 - ], - [ - -74.79705068006798, - 40.118321954195416 - ], - [ - -74.83296334833481, - 40.12692710201019 - ], - [ - -74.83296334833481, - 40.09250651075107 - ], - [ - -74.90478868486846, - 40.075296215121504 - ], - [ - -74.97661402140213, - 40.058085919491944 - ], - [ - -74.97661402140213, - 40.0322704760476 - ], - [ - -75.04843935793578, - 40.01506018041803 - ], - [ - -75.04843935793578, - 39.98063958915891 - ], - [ - -75.12026469446943, - 39.97203444134413 - ], - [ - -75.12026469446943, - 39.88598296319631 - ], - [ - -75.19209003100308, - 39.88598296319631 - ], - [ - -75.22800269926991, - 39.851562371937185 - ], - [ - -75.33574070407039, - 39.851562371937185 - ], - [ - -75.37165337233722, - 39.84295722412241 - ], - [ - -75.37165337233722, - 39.817141780678064 - ], - [ - -75.40756604060404, - 39.80853663286328 - ], - [ - -75.40756604060404, - 39.799931485048496 - ], - [ - -75.40756604060404, - 39.80853663286328 - ], - [ - -75.44347870887087, - 39.80853663286328 - ], - [ - -75.47939137713769, - 39.834352076307624 - ], - [ - -75.623042050205, - 39.834352076307624 - ], - [ - -75.69486738673865, - 39.817141780678064 - ], - [ - -75.69486738673865, - 39.79132633723372 - ], - [ - -75.73078005500548, - 39.79132633723372 - ], - [ - -75.73078005500548, - 39.765510893789376 - ], - [ - -75.76669272327231, - 39.765510893789376 - ], - [ - -75.76669272327231, - 39.722485154715464 - ], - [ - -75.80260539153913, - 39.722485154715464 - ], - [ - -76.52085875687567, - 39.722485154715464 - ], - [ - -77.02363611261124, - 39.722485154715464 - ], - [ - -77.84962748274826, - 39.722485154715464 - ], - [ - -78.49605551155113, - 39.722485154715464 - ], - [ - -78.81926952595258, - 39.722485154715464 - ], - [ - -79.46569755475545, - 39.722485154715464 - ], - [ - -80.0762129152915, - 39.722485154715464 - ], - [ - -80.50716493449343, - 39.722485154715464 - ], - [ - -80.50716493449343, - 40.634630823082304 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "NAME": "Pennsylvania" - }, - "type": "Feature" - }, - { - "geometry": { - "coordinates": [ - [ - [ - -75.15617736273626, - 40.77231318811881 - ], - [ - -75.12026469446943, - 40.77231318811881 - ], - [ - -75.12026469446943, - 40.79812863156315 - ], - [ - -75.0843520262026, - 40.79812863156315 - ], - [ - -75.0843520262026, - 40.84975951845184 - ], - [ - -75.04843935793578, - 40.84975951845184 - ], - [ - -75.04843935793578, - 40.88418010971097 - ], - [ - -75.0843520262026, - 40.892785257525745 - ], - [ - -75.0843520262026, - 40.935810996599656 - ], - [ - -75.12026469446943, - 40.935810996599656 - ], - [ - -75.12026469446943, - 41.004652179117905 - ], - [ - -75.0843520262026, - 41.004652179117905 - ], - [ - -75.01252668966895, - 41.03907277037703 - ], - [ - -75.01252668966895, - 41.07349336163616 - ], - [ - -74.97661402140213, - 41.09070365726572 - ], - [ - -74.97661402140213, - 41.099308805080504 - ], - [ - -74.97661402140213, - 41.09070365726572 - ], - [ - -74.97661402140213, - 41.099308805080504 - ], - [ - -74.9407013531353, - 41.116519100710065 - ], - [ - -74.9407013531353, - 41.14233454415441 - ], - [ - -74.90478868486846, - 41.14233454415441 - ], - [ - -74.90478868486846, - 41.176755135413536 - ], - [ - -74.86887601660165, - 41.176755135413536 - ], - [ - -74.86887601660165, - 41.25420146574657 - ], - [ - -74.83296334833481, - 41.25420146574657 - ], - [ - -74.83296334833481, - 41.29722720482047 - ], - [ - -74.79705068006798, - 41.29722720482047 - ], - [ - -74.79705068006798, - 41.32304264826482 - ], - [ - -74.76113801180117, - 41.32304264826482 - ], - [ - -74.76113801180117, - 41.34885809170916 - ], - [ - -74.6893126752675, - 41.357463239523945 - ], - [ - -74.58157467046702, - 41.29722720482047 - ], - [ - -74.50974933393337, - 41.28001690919091 - ], - [ - -74.50974933393337, - 41.26280661356135 - ], - [ - -74.25836065606559, - 41.14233454415441 - ], - [ - -74.15062265126511, - 41.116519100710065 - ], - [ - -74.07879731473146, - 41.064888213821376 - ], - [ - -74.0069719781978, - 41.047677918191816 - ], - [ - -73.93514664166415, - 41.004652179117905 - ], - [ - -73.89923397339732, - 41.004652179117905 - ], - [ - -73.89923397339732, - 40.92720584878487 - ], - [ - -73.93514664166415, - 40.91860070097009 - ], - [ - -73.93514664166415, - 40.84975951845184 - ], - [ - -73.97105930993098, - 40.84975951845184 - ], - [ - -73.97105930993098, - 40.78952348374837 - ], - [ - -74.0069719781978, - 40.78952348374837 - ], - [ - -74.0069719781978, - 40.712077153415336 - ], - [ - -74.04288464646463, - 40.70347200560055 - ], - [ - -74.04288464646463, - 40.68626170997099 - ], - [ - -74.04288464646463, - 40.651841118711864 - ], - [ - -74.18653531953193, - 40.64323597089708 - ], - [ - -74.18653531953193, - 40.59160508400839 - ], - [ - -74.22244798779876, - 40.59160508400839 - ], - [ - -74.22244798779876, - 40.55718449274927 - ], - [ - -74.25836065606559, - 40.54857934493449 - ], - [ - -74.25836065606559, - 40.47973816241623 - ], - [ - -74.18653531953193, - 40.47973816241623 - ], - [ - -74.07879731473146, - 40.4969484580458 - ], - [ - -73.97105930993098, - 40.522763901490144 - ], - [ - -73.93514664166415, - 40.522763901490144 - ], - [ - -73.89923397339732, - 40.488343310231016 - ], - [ - -73.89923397339732, - 40.23879402360235 - ], - [ - -73.93514664166415, - 40.22158372797279 - ], - [ - -73.93514664166415, - 40.15274254545454 - ], - [ - -73.97105930993098, - 40.12692710201019 - ], - [ - -73.97105930993098, - 40.023665328232816 - ], - [ - -74.0069719781978, - 40.01506018041803 - ], - [ - -74.0069719781978, - 39.82574692849284 - ], - [ - -74.04288464646463, - 39.80853663286328 - ], - [ - -74.04288464646463, - 39.722485154715464 - ], - [ - -74.07879731473146, - 39.705274859085904 - ], - [ - -74.07879731473146, - 39.653643972197216 - ], - [ - -74.22244798779876, - 39.498751311531144 - ], - [ - -74.22244798779876, - 39.4729358680868 - ], - [ - -74.25836065606559, - 39.45572557245724 - ], - [ - -74.25836065606559, - 39.42130498119811 - ], - [ - -74.29427332433241, - 39.37827924212421 - ], - [ - -74.36609866086607, - 39.34385865086508 - ], - [ - -74.36609866086607, - 39.318043207420736 - ], - [ - -74.47383666566655, - 39.300832911791176 - ], - [ - -74.47383666566655, - 39.27501746834683 - ], - [ - -74.50974933393337, - 39.26641232053205 - ], - [ - -74.50974933393337, - 39.240596877087704 - ], - [ - -74.58157467046702, - 39.21478143364336 - ], - [ - -74.58157467046702, - 39.17175569456945 - ], - [ - -74.65340000700068, - 39.128729955495544 - ], - [ - -74.65340000700068, - 39.05988877297729 - ], - [ - -74.6893126752675, - 39.05128362516251 - ], - [ - -74.6893126752675, - 39.016863033903384 - ], - [ - -74.72522534353433, - 39.016863033903384 - ], - [ - -74.72522534353433, - 38.95662699919991 - ], - [ - -74.79705068006798, - 38.93081155575557 - ], - [ - -74.79705068006798, - 38.904996112311224 - ], - [ - -74.83296334833481, - 38.887785816681664 - ], - [ - -74.90478868486846, - 38.87918066886688 - ], - [ - -75.01252668966895, - 38.80173433853385 - ], - [ - -75.01252668966895, - 38.78452404290429 - ], - [ - -75.01252668966895, - 38.80173433853385 - ], - [ - -75.04843935793578, - 38.836154929792976 - ], - [ - -75.04843935793578, - 38.87918066886688 - ], - [ - -75.0843520262026, - 38.87918066886688 - ], - [ - -75.0843520262026, - 38.91360126012601 - ], - [ - -75.12026469446943, - 38.965232147014696 - ], - [ - -75.12026469446943, - 38.999652738273824 - ], - [ - -75.15617736273626, - 38.999652738273824 - ], - [ - -75.15617736273626, - 39.05988877297729 - ], - [ - -75.19209003100308, - 39.06849392079207 - ], - [ - -75.22800269926991, - 39.111519659865984 - ], - [ - -75.22800269926991, - 39.15454539893989 - ], - [ - -75.26391536753674, - 39.15454539893989 - ], - [ - -75.26391536753674, - 39.188965990199016 - ], - [ - -75.29982803580356, - 39.206176285828576 - ], - [ - -75.29982803580356, - 39.24920202490249 - ], - [ - -75.33574070407039, - 39.24920202490249 - ], - [ - -75.33574070407039, - 39.27501746834683 - ], - [ - -75.40756604060404, - 39.30943805960595 - ], - [ - -75.40756604060404, - 39.335253503050296 - ], - [ - -75.44347870887087, - 39.335253503050296 - ], - [ - -75.44347870887087, - 39.36106894649464 - ], - [ - -75.47939137713769, - 39.369674094309424 - ], - [ - -75.47939137713769, - 39.39548953775377 - ], - [ - -75.51530404540452, - 39.40409468556855 - ], - [ - -75.51530404540452, - 39.429910129012896 - ], - [ - -75.55121671367135, - 39.429910129012896 - ], - [ - -75.55121671367135, - 39.498751311531144 - ], - [ - -75.51530404540452, - 39.498751311531144 - ], - [ - -75.51530404540452, - 39.541777050605056 - ], - [ - -75.51530404540452, - 39.58480278967896 - ], - [ - -75.55121671367135, - 39.593407937493744 - ], - [ - -75.55121671367135, - 39.64503882438243 - ], - [ - -75.51530404540452, - 39.64503882438243 - ], - [ - -75.51530404540452, - 39.69666971127112 - ], - [ - -75.47939137713769, - 39.69666971127112 - ], - [ - -75.47939137713769, - 39.765510893789376 - ], - [ - -75.44347870887087, - 39.765510893789376 - ], - [ - -75.44347870887087, - 39.79132633723372 - ], - [ - -75.40756604060404, - 39.799931485048496 - ], - [ - -75.40756604060404, - 39.80853663286328 - ], - [ - -75.37165337233722, - 39.817141780678064 - ], - [ - -75.37165337233722, - 39.84295722412241 - ], - [ - -75.33574070407039, - 39.851562371937185 - ], - [ - -75.22800269926991, - 39.851562371937185 - ], - [ - -75.19209003100308, - 39.88598296319631 - ], - [ - -75.12026469446943, - 39.88598296319631 - ], - [ - -75.12026469446943, - 39.97203444134413 - ], - [ - -75.04843935793578, - 39.98063958915891 - ], - [ - -75.04843935793578, - 40.01506018041803 - ], - [ - -74.97661402140213, - 40.0322704760476 - ], - [ - -74.97661402140213, - 40.058085919491944 - ], - [ - -74.90478868486846, - 40.075296215121504 - ], - [ - -74.83296334833481, - 40.09250651075107 - ], - [ - -74.83296334833481, - 40.12692710201019 - ], - [ - -74.79705068006798, - 40.118321954195416 - ], - [ - -74.72522534353433, - 40.135532249824976 - ], - [ - -74.72522534353433, - 40.17855798889888 - ], - [ - -74.76113801180117, - 40.17855798889888 - ], - [ - -74.76113801180117, - 40.22158372797279 - ], - [ - -74.83296334833481, - 40.23879402360235 - ], - [ - -74.83296334833481, - 40.2646094670467 - ], - [ - -74.86887601660165, - 40.2646094670467 - ], - [ - -74.86887601660165, - 40.30763520612061 - ], - [ - -74.9407013531353, - 40.32484550175017 - ], - [ - -74.9407013531353, - 40.38508153645364 - ], - [ - -74.97661402140213, - 40.38508153645364 - ], - [ - -74.97661402140213, - 40.410896979897984 - ], - [ - -75.04843935793578, - 40.4022918320832 - ], - [ - -75.04843935793578, - 40.44531757115711 - ], - [ - -75.0843520262026, - 40.44531757115711 - ], - [ - -75.0843520262026, - 40.471133014601456 - ], - [ - -75.04843935793578, - 40.471133014601456 - ], - [ - -75.04843935793578, - 40.53136904930492 - ], - [ - -75.0843520262026, - 40.53136904930492 - ], - [ - -75.0843520262026, - 40.56578964056405 - ], - [ - -75.12026469446943, - 40.57439478837883 - ], - [ - -75.19209003100308, - 40.56578964056405 - ], - [ - -75.19209003100308, - 40.77231318811881 - ], - [ - -75.15617736273626, - 40.77231318811881 - ] - ] - ], - "type": "Polygon" - }, - "properties": { - "NAME": "New Jersey" - }, - "type": "Feature" - } - ] -} \ No newline at end of file diff --git a/platform/ios/app/uk.lproj/Localizable.strings b/platform/ios/app/uk.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/vi.lproj/Localizable.strings b/platform/ios/app/vi.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/zh-Hans.lproj/Localizable.strings b/platform/ios/app/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/app/zh-Hant.lproj/Localizable.strings b/platform/ios/app/zh-Hant.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Contents.json b/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 73f0fa24970..00000000000 --- a/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "images" : [ - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-Small@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-Small@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-1.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-2.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-Small.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-3.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-40.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-4.png", - "scale" : "2x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "iTunesArtwork.png", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "iTunesArtwork@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-1.png b/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-1.png deleted file mode 100644 index 8133332fe2c5ef85155dcae6372de9da63abbfcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2296 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 diff --git a/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-40.png b/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-40.png deleted file mode 100644 index 2425133189ff8cbe90b7370b0014459066ecb457..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1295 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 diff --git a/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png b/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png deleted file mode 100644 index 311a1658a8f3bed24c342a36a673509cf3a761a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8633 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 LNkvXXu0mjfg!MNK diff --git a/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-Small.png b/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-Small.png deleted file mode 100644 index 630d7c04c602a190111cf1f3fc12fa9319ab188b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1009 zcmVO@G~{e4Jj|S?{Tv7@t@~WfY4=EG^}5sxMs{ zN;T{?gpX3KXe1($Vc)&&`eZvlFUwcqv)rJ`Pt=3aD%w*Tgxw#ab^_lw98J? z=p-%1!F2I>G{n=lox+K%;LDpT8znB78^XoF-mrPpvTZEM{vX$ zfU`e|+mnkp{pD{kJ{`lQWsT~HRxOHZ9QDW0EQJxd^$_Kt z^*kIj#OU}V0M<+PcV-z!`IOWs+PHrU#JiO2c#o?ZL5mT?_jo zwLb`sb3aa@$rHr;MvVKnM7*sVD_D);;0zkNM&SH7z4lzcH|KCr z3Zhx(-t7@hY8ZAL*1|ZTgwS%@1V{F14xe40#6A)~OpS+VpxK2iE(E6Wy6XmAqaN<9 z0kK~V!Hz~^pD%<@*>u#@XTxmPg>*Eb9*_Wj>5>gw`GpJE& zjxAUMz^Dd}|9*97aPaZs;>vo;21zpNv@EfkJM<}m2`^^=-+njrXm-)GxVE;wy1JG~ ztb*vdGwt@6c5T5wi`{guaP?2O^$rg|AuhopY^G@61p+>5UAX`SdPa0W3MT%O@2N5Mhr%YwK{!>p%YaFVoPv%|=e*@|F8;R>S^`Wz8h9 zn==t2pldy&wcj2kZtNB{^-ONv9So2h^fwva6`$ z^$f8~)lBz51cGet2yhRu+WD`3ARl~)4(+P?L>;5S;kL!oPXPJE2!W%p9|EjAFGX42 zXlm|`#p2{spMH-5wswQ^zv~z^)vk|jMA^*=PKq{o_4|X5?Qa8HyVq|%sP$;PKkBd- z@`@1?AH*!-{LxyEdga?8JFiR230QTzC&QN)eyn3PIAMqF5S?NH5Ok#QNgGjU?3{bL zyyZn-T1vE?y$h!_HN9Y3G`B=zt>u$mH>Z<2_D-x_1pl%|iun9duM`FGL0$M(aExAB zVhrA6K5Xr-^=jjjG1IQ~t@dcaVMk9=AW&K1g@=G(RC&}Iuf{b-zc}AFAB&qyOK(r+ zmdVo6H*VLR>1vM(1)Xr-F(nLFgrK5yzYFXZ`{j2RkIrF&%yw5 zi-toODN@O*SFR1kp2brdztGtR^nLPlKJIOdHeje6aqa;%h=vmwf24v{zqv7NUQNKp ztF!O3$mA(TfwEBCIjCMV?5InM1}Rd_X^o%USxJD$tXq zfwi@Gd{sKrQ^9E)hHyHhsr@dh#(Fh206S4D87EowvoHIJ*W8!3T^=iA!cdmfr(?}# z8T3kxhwnR&LC<2wU2Dz~ILdpQBF6jV>6Ow+2k-xe=NPLV;&bNNuS5O-) zV#8nG7bP*$pyOE0h(<&yR+B<2;nh8`z19VZ(NQiqv&*J4x#xZ`Q&XyfZ?L7df1gmx&+bUTqX@yMaV!QPN-F%B! zSX#Ln8adz&)wOle_XC;SGcfzEM?NlTPWsZIVyvceln5$m=1WBNAS>S+db~y)SXX%! zVzhq-MvqC_=?(RXa3`MN6bUXVYbOb9$unLh-Lr}Dj_!{SDfL)!(tixua*hm`_Oe!n%c z6i<+6lllI8t7{^U4ZSBSK)z3|IMWF($pjd^85!Tth7LlJ+&~9}aN%nX3+J|?$1CRu4D_g>fv^SJ5gq>4>!+D%s z)TGCf|7|}oHs?OqyVD(jp@QVJLQ(m1L*RDzB-{*5m-=@!bQ};BGMXc3zYxw#VLxDM zDi7@A<$O_@c(l+z^2C3!Z;vmu%M*mmrkRj0Jsqw7qGyLY0HdUo6^St0Q66YPG}#+(xzHQ#4%p4ZVS3I!EWhOo?PP;_qBWX3XtyA5gPmOHZ8%;GXPEOgmiJ&P zpBreW5CV2VG@&wdau)`jaa#6eX+eW_2%$HH5JZzVNwmq^&Zm#cT$ZlmpecGo2m-G| zOcnGlXo8gqy-v?JBfU#$Y7R9@O+$Yag211iM@vJb1YqqFZI6SpRG!MvHPP>dfXN@I zNMjAr+SyS=&_gtIS@b(T@CyR{mhX5e32d21zu`Na^O{W($feF}l&~v{e#PI;%&$$I cGr5=jFMMtdMcs_S_W%F@07*qoM6N<$f}AGzf&c&j diff --git a/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png b/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png deleted file mode 100644 index 436a8b404c948c1fc54bfca29b683d5164d3d933..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3371 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 Bb*%sZ diff --git a/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon.png b/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/Icon.png deleted file mode 100644 index 2c9ecb48cb7ee2ec78c18ae3eb1f4b0aaec1a69d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3559 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 diff --git a/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/iTunesArtwork.png b/platform/ios/benchmark/Assets.xcassets/AppIcon.appiconset/iTunesArtwork.png deleted file mode 100644 index f87c8734b5b27a49cd6adf2be8d29d856940b138..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113442 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≫w*Ag!d4KJ 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 - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/ios/benchmark/Info.plist b/platform/ios/benchmark/Info.plist deleted file mode 100644 index fc89fdaf08d..00000000000 --- a/platform/ios/benchmark/Info.plist +++ /dev/null @@ -1,53 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - $(PRODUCT_NAME) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - com.mapbox.GL.benchmark - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 0.0.2 - CFBundleSignature - MBGL - CFBundleVersion - 0.0.3 - LSRequiresIPhoneOS - - NSHumanReadableCopyright - © 2015–2019 Mapbox - UIApplicationExitsOnSuspend - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - MGLMapboxMetricsEnabledSettingShownInApp - - - diff --git a/platform/ios/benchmark/MBXBenchAppDelegate.h b/platform/ios/benchmark/MBXBenchAppDelegate.h deleted file mode 100644 index 2368ca6daf5..00000000000 --- a/platform/ios/benchmark/MBXBenchAppDelegate.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -@interface MBXBenchAppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/platform/ios/benchmark/MBXBenchAppDelegate.m b/platform/ios/benchmark/MBXBenchAppDelegate.m deleted file mode 100644 index d1a0ddf9435..00000000000 --- a/platform/ios/benchmark/MBXBenchAppDelegate.m +++ /dev/null @@ -1,16 +0,0 @@ -#import "MBXBenchAppDelegate.h" -#import "MBXBenchViewController.h" - -@implementation MBXBenchAppDelegate - -- (BOOL)application:(UIApplication*)application - didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { - - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.rootViewController = [MBXBenchViewController new]; - [self.window makeKeyAndVisible]; - - return YES; -} - -@end diff --git a/platform/ios/benchmark/MBXBenchViewController.h b/platform/ios/benchmark/MBXBenchViewController.h deleted file mode 100644 index c4439be5ece..00000000000 --- a/platform/ios/benchmark/MBXBenchViewController.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface MBXBenchViewController : UIViewController - -@end diff --git a/platform/ios/benchmark/MBXBenchViewController.mm b/platform/ios/benchmark/MBXBenchViewController.mm deleted file mode 100644 index 901eb07cd12..00000000000 --- a/platform/ios/benchmark/MBXBenchViewController.mm +++ /dev/null @@ -1,151 +0,0 @@ -#import "MBXBenchViewController.h" -#import "MBXBenchAppDelegate.h" -#import "MGLMapView_Private.h" - -#include "locations.hpp" - -#include - -@interface MBXBenchViewController () - -@property (nonatomic) MGLMapView *mapView; - -@end - -@implementation MBXBenchViewController - -#pragma mark - Setup - -+ (void)initialize -{ - if (self == [MBXBenchViewController class]) - { - [[NSUserDefaults standardUserDefaults] registerDefaults:@{ - @"MBXUserTrackingMode": @(MGLUserTrackingModeNone), - @"MBXShowsUserLocation": @NO, - @"MBXDebug": @NO, - }]; - } -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - // Use a local style and local assets if they’ve been downloaded. - NSURL *tileSourceURL = [[NSBundle mainBundle] URLForResource:@"mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6" withExtension:nil subdirectory:@"tiles"]; - NSURL *url = [NSURL URLWithString:tileSourceURL ? @"asset://styles/streets-v8.json" : @"mapbox://styles/mapbox/streets-v8"]; - self.mapView = [[MGLMapView alloc] initWithFrame:self.view.bounds styleURL:url]; - self.mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.mapView.delegate = self; - self.mapView.zoomEnabled = NO; - self.mapView.scrollEnabled = NO; - self.mapView.rotateEnabled = NO; - self.mapView.userInteractionEnabled = YES; - self.mapView.preferredFramesPerSecond = MGLMapViewPreferredFramesPerSecondMaximum; - - [self.view addSubview:self.mapView]; -} - -- (void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - - [self startBenchmarkIteration]; -} - -size_t idx = 0; -enum class State { None, WaitingForAssets, WarmingUp, Benchmarking } state = State::None; -int frames = 0; -std::chrono::steady_clock::time_point started; -std::vector> result; - -static const int warmupDuration = 20; // frames -static const int benchmarkDuration = 200; // frames - -- (void)startBenchmarkIteration -{ - if (mbgl::bench::locations.size() > idx) { - const auto& location = mbgl::bench::locations[idx]; - [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(location.latitude, location.longitude) zoomLevel:location.zoom animated:NO]; - self.mapView.direction = location.bearing; - state = State::WaitingForAssets; - NSLog(@"Benchmarking \"%s\"", location.name.c_str()); - NSLog(@"- Loading assets..."); - } else { - // Do nothing. The benchmark is completed. - NSLog(@"Benchmark completed."); - NSLog(@"Result:"); - double totalFPS = 0; - size_t colWidth = 0; - for (const auto& row : result) { - colWidth = std::max(row.first.size(), colWidth); - } - for (const auto& row : result) { - NSLog(@"| %-*s | %4.1f fps |", int(colWidth), row.first.c_str(), row.second); - totalFPS += row.second; - } - NSLog(@"Total FPS: %4.1f", totalFPS); - NSLog(@"Average FPS: %4.1f", totalFPS / result.size()); - exit(0); - } -} - -- (void)mapViewDidFinishRenderingFrame:(MGLMapView *)mapView fullyRendered:(__unused BOOL)fullyRendered -{ - if (state == State::Benchmarking) - { - frames++; - if (frames >= benchmarkDuration) - { - state = State::None; - - // Report FPS - const auto duration = std::chrono::duration_cast(std::chrono::steady_clock::now() - started).count() ; - const auto fps = double(frames * 1e6) / duration; - result.emplace_back(mbgl::bench::locations[idx].name, fps); - NSLog(@"- FPS: %.1f", fps); - - // Start benchmarking the next location. - idx++; - [self startBenchmarkIteration]; - } else { - [mapView setNeedsRerender]; - } - return; - } - - else if (state == State::WarmingUp) - { - frames++; - if (frames >= warmupDuration) - { - frames = 0; - state = State::Benchmarking; - started = std::chrono::steady_clock::now(); - NSLog(@"- Benchmarking for %d frames...", benchmarkDuration); - } - [mapView setNeedsRerender]; - return; - } - - else if (state == State::WaitingForAssets) - { - if ([mapView isFullyLoaded]) - { - // Start the benchmarking timer. - state = State::WarmingUp; - [self.mapView didReceiveMemoryWarning]; - NSLog(@"- Warming up for %d frames...", warmupDuration); - [mapView setNeedsRerender]; - } - return; - } -} - -- (NSUInteger)supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskLandscape; -} - -@end diff --git a/platform/ios/benchmark/assets/glyphs/download.sh b/platform/ios/benchmark/assets/glyphs/download.sh deleted file mode 100755 index 01ca5c63c71..00000000000 --- a/platform/ios/benchmark/assets/glyphs/download.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -set -u - -LIST=( - "DIN%20Offc%20Pro%20Regular%2cArial%20Unicode%20MS%20Regular/0-255.pbf" - "DIN%20Offc%20Pro%20Medium%2cArial%20Unicode%20MS%20Regular/0-255.pbf" - "DIN%20Offc%20Pro%20Bold%2cArial%20Unicode%20MS%20Bold/0-255.pbf" - "DIN%20Offc%20Pro%20Regular%2cArial%20Unicode%20MS%20Regular/256-511.pbf" - "DIN%20Offc%20Pro%20Regular%2cArial%20Unicode%20MS%20Regular/8192-8447.pbf" - "DIN%20Offc%20Pro%20Medium%2cArial%20Unicode%20MS%20Regular/8192-8447.pbf" - "DIN%20Offc%20Pro%20Italic%2cArial%20Unicode%20MS%20Regular/0-255.pbf" - -) - -# from https://gist.github.com/cdown/1163649 -urldecode() { - local url_encoded="${1//+/ }" - printf '%b' "${url_encoded//%/\x}" -} - -for i in ${LIST[@]} ; do - OUTPUT=`urldecode "$i"` - if [ ! -f "${OUTPUT}" ] ; then - mkdir -p "`dirname "${OUTPUT}"`" - echo "Downloading glyph '${OUTPUT}'" - curl -# "https://api.tiles.mapbox.com/v4/fontstack/${i}?access_token=${MAPBOX_ACCESS_TOKEN}" | gunzip > "${OUTPUT}" - fi -done diff --git a/platform/ios/benchmark/assets/sprites/mapbox-streets.json b/platform/ios/benchmark/assets/sprites/mapbox-streets.json deleted file mode 100644 index 488bf335dee..00000000000 --- a/platform/ios/benchmark/assets/sprites/mapbox-streets.json +++ /dev/null @@ -1,2034 +0,0 @@ -{ - "secondary_marker": { - "x": 0, - "y": 0, - "width": 20, - "height": 50, - "pixelRatio": 1, - "sdf": false - }, - "default_marker": { - "x": 22, - "y": 0, - "width": 20, - "height": 50, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-alternate-1-large": { - "x": 44, - "y": 0, - "width": 21, - "height": 37, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-business-1-large": { - "x": 67, - "y": 0, - "width": 27, - "height": 37, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-business-2-large": { - "x": 0, - "y": 52, - "width": 27, - "height": 37, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-alternate-2-large": { - "x": 29, - "y": 52, - "width": 27, - "height": 37, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-truck-1-large": { - "x": 58, - "y": 52, - "width": 23, - "height": 35, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-truck-2-large": { - "x": 96, - "y": 0, - "width": 27, - "height": 35, - "pixelRatio": 1, - "sdf": false - }, - "marsh-32": { - "x": 0, - "y": 91, - "width": 32, - "height": 32, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-alternate-1-small": { - "x": 96, - "y": 37, - "width": 17, - "height": 31, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-business-1-small": { - "x": 34, - "y": 91, - "width": 17, - "height": 31, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-alternate-2-small": { - "x": 53, - "y": 91, - "width": 21, - "height": 31, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-truck-2-small": { - "x": 76, - "y": 91, - "width": 21, - "height": 31, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-business-2-small": { - "x": 99, - "y": 91, - "width": 21, - "height": 31, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-truck-1-small": { - "x": 125, - "y": 0, - "width": 17, - "height": 31, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-duplex-4-large": { - "x": 144, - "y": 0, - "width": 40, - "height": 29, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-duplex-3-large": { - "x": 144, - "y": 31, - "width": 35, - "height": 29, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-2-large": { - "x": 144, - "y": 62, - "width": 29, - "height": 29, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-duplex-5-large": { - "x": 0, - "y": 125, - "width": 43, - "height": 29, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-3-large": { - "x": 144, - "y": 93, - "width": 35, - "height": 29, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-1-large": { - "x": 45, - "y": 125, - "width": 25, - "height": 29, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-business-3-large": { - "x": 72, - "y": 125, - "width": 35, - "height": 28, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-business-2-large": { - "x": 109, - "y": 125, - "width": 29, - "height": 28, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-business-1-large": { - "x": 140, - "y": 125, - "width": 25, - "height": 28, - "pixelRatio": 1, - "sdf": false - }, - "mx-federal-2-large": { - "x": 0, - "y": 156, - "width": 25, - "height": 26, - "pixelRatio": 1, - "sdf": false - }, - "mx-federal-4-large": { - "x": 27, - "y": 156, - "width": 37, - "height": 26, - "pixelRatio": 1, - "sdf": false - }, - "mx-federal-1-large": { - "x": 66, - "y": 156, - "width": 20, - "height": 26, - "pixelRatio": 1, - "sdf": false - }, - "mx-federal-3-large": { - "x": 88, - "y": 156, - "width": 30, - "height": 26, - "pixelRatio": 1, - "sdf": false - }, - "mx-state-3-large": { - "x": 120, - "y": 156, - "width": 31, - "height": 25, - "pixelRatio": 1, - "sdf": false - }, - "mx-state-4-large": { - "x": 186, - "y": 0, - "width": 36, - "height": 25, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-3-small": { - "x": 186, - "y": 27, - "width": 30, - "height": 25, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-2-small": { - "x": 186, - "y": 54, - "width": 25, - "height": 25, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-1-small": { - "x": 186, - "y": 81, - "width": 21, - "height": 25, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-duplex-5-small": { - "x": 186, - "y": 108, - "width": 36, - "height": 25, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-duplex-4-small": { - "x": 186, - "y": 135, - "width": 34, - "height": 25, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-duplex-3-small": { - "x": 153, - "y": 156, - "width": 30, - "height": 25, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-business-2-small": { - "x": 0, - "y": 184, - "width": 25, - "height": 24, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-business-3-small": { - "x": 27, - "y": 184, - "width": 30, - "height": 24, - "pixelRatio": 1, - "sdf": false - }, - "us-interstate-business-1-small": { - "x": 59, - "y": 184, - "width": 21, - "height": 24, - "pixelRatio": 1, - "sdf": false - }, - "mx-state-1-large": { - "x": 82, - "y": 184, - "width": 20, - "height": 24, - "pixelRatio": 1, - "sdf": false - }, - "mx-state-2-large": { - "x": 104, - "y": 184, - "width": 25, - "height": 24, - "pixelRatio": 1, - "sdf": false - }, - "post-15": { - "x": 131, - "y": 184, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "prison-15": { - "x": 156, - "y": 184, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "religious-christian-15": { - "x": 181, - "y": 184, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "religious-jewish-15": { - "x": 224, - "y": 0, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "religious-muslim-15": { - "x": 224, - "y": 25, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "rocket-15": { - "x": 224, - "y": 50, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "shop-15": { - "x": 224, - "y": 75, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "star-15": { - "x": 224, - "y": 100, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "suitcase-15": { - "x": 224, - "y": 125, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "swimming-15": { - "x": 224, - "y": 150, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "theatre-15": { - "x": 224, - "y": 175, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "town-hall-15": { - "x": 0, - "y": 210, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "triangle-15": { - "x": 25, - "y": 210, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "triangle-stroked-15": { - "x": 50, - "y": 210, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "dentist-15": { - "x": 75, - "y": 210, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "hospital-15": { - "x": 100, - "y": 210, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "pharmacy-15": { - "x": 125, - "y": 210, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "america-football-15": { - "x": 150, - "y": 210, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "baseball-15": { - "x": 175, - "y": 210, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "basketball-15": { - "x": 200, - "y": 210, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "campsite-15": { - "x": 249, - "y": 0, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "cemetery-15": { - "x": 249, - "y": 25, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "dog-park-15": { - "x": 249, - "y": 50, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "beer-15": { - "x": 249, - "y": 75, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "park-15": { - "x": 249, - "y": 100, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "bar-15": { - "x": 249, - "y": 125, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "playground-15": { - "x": 249, - "y": 150, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "zoo-15": { - "x": 249, - "y": 175, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "college-15": { - "x": 249, - "y": 200, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "ferry-15": { - "x": 0, - "y": 235, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "school-15": { - "x": 25, - "y": 235, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "rail-metro-15": { - "x": 50, - "y": 235, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "cafe-15": { - "x": 75, - "y": 235, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "bus-15": { - "x": 100, - "y": 235, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "airport-15": { - "x": 125, - "y": 235, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "airfield-15": { - "x": 150, - "y": 235, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "fast-food-15": { - "x": 175, - "y": 235, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "rail-light-15": { - "x": 200, - "y": 235, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "rail-15": { - "x": 225, - "y": 235, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "heliport-15": { - "x": 274, - "y": 0, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "restaurant-15": { - "x": 274, - "y": 25, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "alcohol-shop-15": { - "x": 274, - "y": 50, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "art-gallery-15": { - "x": 274, - "y": 75, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "bakery-15": { - "x": 274, - "y": 100, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "bank-15": { - "x": 274, - "y": 125, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "bicycle-15": { - "x": 274, - "y": 150, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "car-15": { - "x": 274, - "y": 175, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "cinema-15": { - "x": 274, - "y": 200, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "circle-15": { - "x": 274, - "y": 225, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "circle-stroked-15": { - "x": 0, - "y": 260, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "clothing-store-15": { - "x": 25, - "y": 260, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "embassy-15": { - "x": 50, - "y": 260, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "fire-station-15": { - "x": 75, - "y": 260, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "fuel-15": { - "x": 100, - "y": 260, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "garden-15": { - "x": 125, - "y": 260, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "grocery-15": { - "x": 150, - "y": 260, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "hairdresser-15": { - "x": 175, - "y": 260, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "harbor-15": { - "x": 200, - "y": 260, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "ice-cream-15": { - "x": 225, - "y": 260, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "laundry-15": { - "x": 250, - "y": 260, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "library-15": { - "x": 299, - "y": 0, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "lodging-15": { - "x": 299, - "y": 25, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "marker-15": { - "x": 299, - "y": 50, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "monument-15": { - "x": 299, - "y": 75, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "museum-15": { - "x": 299, - "y": 100, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "music-15": { - "x": 299, - "y": 125, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "place-of-worship-15": { - "x": 299, - "y": 150, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "police-15": { - "x": 299, - "y": 175, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "golf-15": { - "x": 299, - "y": 200, - "width": 23, - "height": 23, - "pixelRatio": 1, - "sdf": false - }, - "mx-federal-4-small": { - "x": 0, - "y": 285, - "width": 31, - "height": 22, - "pixelRatio": 1, - "sdf": false - }, - "mx-federal-1-small": { - "x": 299, - "y": 225, - "width": 17, - "height": 22, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-duplex-3-large": { - "x": 33, - "y": 285, - "width": 32, - "height": 22, - "pixelRatio": 1, - "sdf": false - }, - "mx-federal-2-small": { - "x": 299, - "y": 249, - "width": 21, - "height": 22, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-duplex-4-large": { - "x": 67, - "y": 285, - "width": 34, - "height": 22, - "pixelRatio": 1, - "sdf": false - }, - "mx-federal-3-small": { - "x": 103, - "y": 285, - "width": 25, - "height": 22, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-duplex-5-large": { - "x": 130, - "y": 285, - "width": 37, - "height": 22, - "pixelRatio": 1, - "sdf": false - }, - "washington-metro-11": { - "x": 225, - "y": 210, - "width": 21, - "height": 21, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-3-large": { - "x": 169, - "y": 285, - "width": 30, - "height": 21, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-2-large": { - "x": 201, - "y": 285, - "width": 27, - "height": 21, - "pixelRatio": 1, - "sdf": false - }, - "light-11": { - "x": 250, - "y": 235, - "width": 21, - "height": 21, - "pixelRatio": 1, - "sdf": false - }, - "subway-11": { - "x": 275, - "y": 260, - "width": 21, - "height": 21, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-1-large": { - "x": 230, - "y": 285, - "width": 20, - "height": 21, - "pixelRatio": 1, - "sdf": false - }, - "u-bahn-11": { - "x": 252, - "y": 285, - "width": 21, - "height": 21, - "pixelRatio": 1, - "sdf": false - }, - "mx-state-1-small": { - "x": 186, - "y": 162, - "width": 17, - "height": 20, - "pixelRatio": 1, - "sdf": false - }, - "mx-state-4-small": { - "x": 275, - "y": 285, - "width": 29, - "height": 20, - "pixelRatio": 1, - "sdf": false - }, - "mx-state-3-small": { - "x": 324, - "y": 0, - "width": 25, - "height": 20, - "pixelRatio": 1, - "sdf": false - }, - "circle.sdf": { - "x": 324, - "y": 22, - "width": 19, - "height": 20, - "pixelRatio": 1, - "sdf": true - }, - "mx-state-2-small": { - "x": 324, - "y": 44, - "width": 21, - "height": 20, - "pixelRatio": 1, - "sdf": false - }, - "zoo-11": { - "x": 324, - "y": 66, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "beer-11": { - "x": 324, - "y": 87, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "dlr-11": { - "x": 324, - "y": 108, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "dlr.london-overground.london-underground.national-rail-11": { - "x": 0, - "y": 309, - "width": 75, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "dlr.london-underground-11": { - "x": 77, - "y": 309, - "width": 39, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "dlr.london-underground.national-rail-11": { - "x": 118, - "y": 309, - "width": 57, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "dlr.national-rail-11": { - "x": 177, - "y": 309, - "width": 39, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "heliport-11": { - "x": 324, - "y": 129, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "museum-11": { - "x": 324, - "y": 150, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "london-overground-11": { - "x": 324, - "y": 171, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "london-overground.london-underground-11": { - "x": 218, - "y": 309, - "width": 39, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "london-overground.london-underground.national-rail-11": { - "x": 259, - "y": 309, - "width": 57, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "london-overground.national-rail-11": { - "x": 0, - "y": 330, - "width": 39, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "london-underground-11": { - "x": 324, - "y": 192, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "london-underground.national-rail-11": { - "x": 41, - "y": 330, - "width": 39, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "circle-11": { - "x": 324, - "y": 213, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "metro.rer-11": { - "x": 82, - "y": 330, - "width": 39, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "moscow-metro-11": { - "x": 324, - "y": 234, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "national-rail-11": { - "x": 324, - "y": 255, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "rail-11": { - "x": 324, - "y": 276, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "rer-11": { - "x": 96, - "y": 70, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "rer.transilien-11": { - "x": 123, - "y": 330, - "width": 39, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "s-bahn-11": { - "x": 318, - "y": 309, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "music-11": { - "x": 164, - "y": 330, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "transilien-11": { - "x": 185, - "y": 330, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "school-11": { - "x": 206, - "y": 330, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "place-of-worship-11": { - "x": 227, - "y": 330, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "weiner-linien-11": { - "x": 248, - "y": 330, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "ferry-11": { - "x": 269, - "y": 330, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "circle-stroked-11": { - "x": 290, - "y": 330, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "bus-11": { - "x": 311, - "y": 330, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "police-11": { - "x": 351, - "y": 0, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "airport-11": { - "x": 351, - "y": 21, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "fast-food-11": { - "x": 351, - "y": 42, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "airfield-11": { - "x": 351, - "y": 63, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "post-11": { - "x": 351, - "y": 84, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "clothing-store-11": { - "x": 351, - "y": 105, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "prison-11": { - "x": 351, - "y": 126, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "alcohol-shop-11": { - "x": 351, - "y": 147, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "religious-christian-11": { - "x": 351, - "y": 168, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "embassy-11": { - "x": 351, - "y": 189, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "religious-jewish-11": { - "x": 351, - "y": 210, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "bar-11": { - "x": 351, - "y": 231, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "religious-muslim-11": { - "x": 351, - "y": 252, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "fire-station-11": { - "x": 351, - "y": 273, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "rocket-11": { - "x": 351, - "y": 294, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "art-gallery-11": { - "x": 351, - "y": 315, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "shop-11": { - "x": 0, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "fuel-11": { - "x": 21, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "star-11": { - "x": 42, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "restaurant-11": { - "x": 63, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "suitcase-11": { - "x": 84, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "garden-11": { - "x": 105, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "swimming-11": { - "x": 126, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "bakery-11": { - "x": 147, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "theatre-11": { - "x": 168, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "grocery-11": { - "x": 189, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "town-hall-11": { - "x": 210, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "rail-metro-11": { - "x": 231, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "triangle-11": { - "x": 252, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "hairdresser-11": { - "x": 273, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "triangle-stroked-11": { - "x": 294, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "bank-11": { - "x": 315, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "dentist-11": { - "x": 336, - "y": 351, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "harbor-11": { - "x": 372, - "y": 0, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "hospital-11": { - "x": 372, - "y": 21, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "cafe-11": { - "x": 372, - "y": 42, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "pharmacy-11": { - "x": 372, - "y": 63, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "ice-cream-11": { - "x": 372, - "y": 84, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "america-football-11": { - "x": 372, - "y": 105, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "bicycle-11": { - "x": 372, - "y": 126, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "baseball-11": { - "x": 372, - "y": 147, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "laundry-11": { - "x": 372, - "y": 168, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "basketball-11": { - "x": 372, - "y": 189, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "college-11": { - "x": 372, - "y": 210, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "campsite-11": { - "x": 372, - "y": 231, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "library-11": { - "x": 372, - "y": 252, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "cemetery-11": { - "x": 372, - "y": 273, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "car-11": { - "x": 372, - "y": 294, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "dog-park-11": { - "x": 372, - "y": 315, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "lodging-11": { - "x": 372, - "y": 336, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "golf-11": { - "x": 0, - "y": 372, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "rail-light-11": { - "x": 21, - "y": 372, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "park-11": { - "x": 42, - "y": 372, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "marker-11": { - "x": 63, - "y": 372, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "cinema-11": { - "x": 84, - "y": 372, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "monument-11": { - "x": 105, - "y": 372, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "playground-11": { - "x": 126, - "y": 372, - "width": 19, - "height": 19, - "pixelRatio": 1, - "sdf": false - }, - "us-state-5-large": { - "x": 147, - "y": 372, - "width": 48, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "default-1-large": { - "x": 197, - "y": 372, - "width": 18, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-3-small": { - "x": 217, - "y": 372, - "width": 25, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-2-small": { - "x": 244, - "y": 372, - "width": 21, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-1-small": { - "x": 205, - "y": 162, - "width": 17, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "default-2-large": { - "x": 267, - "y": 372, - "width": 25, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "default-6-large": { - "x": 294, - "y": 372, - "width": 50, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "default-3-large": { - "x": 346, - "y": 372, - "width": 32, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "default-5-large": { - "x": 393, - "y": 0, - "width": 45, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "default-4-large": { - "x": 393, - "y": 20, - "width": 39, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "us-state-1-large": { - "x": 393, - "y": 40, - "width": 22, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "us-state-6-large": { - "x": 0, - "y": 393, - "width": 54, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "us-state-2-large": { - "x": 393, - "y": 60, - "width": 28, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "us-state-4-large": { - "x": 393, - "y": 80, - "width": 42, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "us-state-3-large": { - "x": 393, - "y": 100, - "width": 35, - "height": 18, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-duplex-5-small": { - "x": 393, - "y": 120, - "width": 29, - "height": 17, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-duplex-4-small": { - "x": 393, - "y": 139, - "width": 28, - "height": 17, - "pixelRatio": 1, - "sdf": false - }, - "us-highway-duplex-3-small": { - "x": 393, - "y": 158, - "width": 27, - "height": 17, - "pixelRatio": 1, - "sdf": false - }, - "entrance-11": { - "x": 417, - "y": 40, - "width": 17, - "height": 17, - "pixelRatio": 1, - "sdf": false - }, - "marsh-16": { - "x": 422, - "y": 158, - "width": 16, - "height": 16, - "pixelRatio": 1, - "sdf": false - }, - "us-state-1-small": { - "x": 393, - "y": 177, - "width": 17, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "us-state-6-small": { - "x": 393, - "y": 194, - "width": 45, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "default-4-small": { - "x": 393, - "y": 211, - "width": 33, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "default-3-small": { - "x": 393, - "y": 228, - "width": 27, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "default-5-small": { - "x": 393, - "y": 245, - "width": 38, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "default-2-small": { - "x": 412, - "y": 177, - "width": 21, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "us-state-2-small": { - "x": 393, - "y": 262, - "width": 23, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "default-1-small": { - "x": 423, - "y": 60, - "width": 15, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "us-state-4-small": { - "x": 393, - "y": 279, - "width": 35, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "metro-11": { - "x": 423, - "y": 139, - "width": 15, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "us-state-3-small": { - "x": 393, - "y": 296, - "width": 29, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "us-state-5-small": { - "x": 393, - "y": 313, - "width": 40, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "default-6-small": { - "x": 393, - "y": 330, - "width": 44, - "height": 15, - "pixelRatio": 1, - "sdf": false - }, - "oneway-spaced-white-large": { - "x": 424, - "y": 120, - "width": 14, - "height": 6, - "pixelRatio": 1, - "sdf": false - }, - "oneway-spaced-large": { - "x": 424, - "y": 128, - "width": 14, - "height": 6, - "pixelRatio": 1, - "sdf": false - }, - "oneway-spaced-small": { - "x": 422, - "y": 228, - "width": 11, - "height": 5, - "pixelRatio": 1, - "sdf": false - }, - "oneway-spaced-white-small": { - "x": 422, - "y": 235, - "width": 11, - "height": 5, - "pixelRatio": 1, - "sdf": false - } -} \ No newline at end of file diff --git a/platform/ios/benchmark/assets/sprites/mapbox-streets.png b/platform/ios/benchmark/assets/sprites/mapbox-streets.png deleted file mode 100644 index 00925f91a2af802481d45cc28dfdad712887433e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81643 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 oKj_XvuH(U;QqtGWF1!Jnr)g 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

XqCIwdXk4~Q%+{3sN=$|JtH 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

WUp{Fzolp242j(AS!bGT*3SYE&Zl8EvN}U} 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 EKh?!JQ~&?~ diff --git a/platform/ios/benchmark/assets/styles/streets-v8.json b/platform/ios/benchmark/assets/styles/streets-v8.json deleted file mode 100644 index 4befdc121a4..00000000000 --- a/platform/ios/benchmark/assets/styles/streets-v8.json +++ /dev/null @@ -1,8935 +0,0 @@ -{ - "version": 8, - "name": "Mapbox Streets", - "sources": { - "composite": { - "url": "asset://tiles/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6.json", - "type": "vector" - } - }, - "sprite": "asset://sprites/mapbox-streets", - "glyphs": "asset://glyphs/{fontstack}/{range}.pbf", - "layers": [ - { - "id": "background", - "type": "background", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "layout": { - "visibility": "visible" - }, - "paint": { - "background-color": "#ede9d9" - } - }, - { - "id": "landcover_crop", - "type": "fill", - "source": "composite", - "source-layer": "landcover", - "minzoom": 0, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "crop" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#ddecb1", - "fill-opacity": { - "base": 1.5, - "stops": [ - [ - 2, - 0.3 - ], - [ - 14, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "landcover_grass", - "type": "fill", - "source": "composite", - "source-layer": "landcover", - "minzoom": 0, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "grass" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#ddecb1", - "fill-opacity": { - "base": 1.5, - "stops": [ - [ - 2, - 0.3 - ], - [ - 14, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "landcover_scrub", - "type": "fill", - "source": "composite", - "source-layer": "landcover", - "minzoom": 0, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "scrub" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#ddecb1", - "fill-opacity": { - "base": 1.5, - "stops": [ - [ - 2, - 0.3 - ], - [ - 14, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "landcover_wood", - "type": "fill", - "source": "composite", - "source-layer": "landcover", - "minzoom": 0, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "wood" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#ddecb1", - "fill-opacity": { - "base": 1.5, - "stops": [ - [ - 2, - 0.3 - ], - [ - 14, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "landcover_snow", - "type": "fill", - "source": "composite", - "source-layer": "landcover", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "snow" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#fff", - "fill-opacity": 0.2, - "fill-antialias": false - } - }, - { - "id": "scrub", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "minzoom": 9, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "scrub" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#ddecb1", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 9, - 0 - ], - [ - 16, - 0.2 - ] - ] - } - } - }, - { - "id": "grass", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "minzoom": 9, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "grass" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#ddecb1", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 9, - 0 - ], - [ - 16, - 0.4 - ] - ] - } - } - }, - { - "id": "wood", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "minzoom": 6, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "wood" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#ddecb1", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 6, - 0 - ], - [ - 16, - 0.5 - ] - ] - } - } - }, - { - "id": "agriculture", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "agriculture" - ] - ], - "layout": { - "visibility": "none" - }, - "paint": { - "fill-color": "rgba(221,85,85,1.000)", - "fill-opacity": 1 - } - }, - { - "id": "hospital", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "hospital" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#f4dcdc" - } - }, - { - "id": "school", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "school" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#f3ebb4" - } - }, - { - "id": "parks", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "park" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#cde8a2", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 5, - 0 - ], - [ - 6, - 1 - ] - ] - } - } - }, - { - "id": "glaciers", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "minzoom": 9, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "glacier" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#dcedf9", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 9, - 0 - ], - [ - 10, - 0.25 - ] - ] - } - } - }, - { - "id": "pitch", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "pitch" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#c3e194" - } - }, - { - "id": "pitch-line", - "type": "line", - "source": "composite", - "source-layer": "landuse", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "pitch" - ] - ], - "layout": {}, - "paint": { - "line-color": "#e1f2c6" - } - }, - { - "id": "cemetery", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "cemetery" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#dde6c2" - } - }, - { - "id": "industrial", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "industrial" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#e0dae0" - } - }, - { - "id": "sand", - "type": "fill", - "source": "composite", - "source-layer": "landuse", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "sand" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#ededcf" - } - }, - { - "id": "hillshade_highlight_bright", - "type": "fill", - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 18, - "interactive": true, - "filter": [ - "all", - [ - "in", - "level", - 94 - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#fff", - "fill-opacity": { - "stops": [ - [ - 15, - 0.12 - ], - [ - 18, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_highlight_med", - "type": "fill", - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "level", - 90 - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#fff", - "fill-opacity": { - "stops": [ - [ - 15, - 0.12 - ], - [ - 18, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_shadow_faint", - "type": "fill", - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 17, - "interactive": true, - "filter": [ - "all", - [ - "in", - "level", - 89 - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#5a5517", - "fill-opacity": { - "stops": [ - [ - 15, - 0.05 - ], - [ - 17, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_shadow_med", - "type": "fill", - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "level", - 78 - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#5a5517", - "fill-opacity": { - "stops": [ - [ - 15, - 0.05 - ], - [ - 17, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_shadow_dark", - "type": "fill", - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "level", - 67 - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#5a5517", - "fill-opacity": { - "stops": [ - [ - 15, - 0.06 - ], - [ - 17, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "hillshade_shadow_extreme", - "type": "fill", - "source": "composite", - "source-layer": "hillshade", - "maxzoom": 17, - "interactive": true, - "filter": [ - "all", - [ - "in", - "level", - 56 - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#5a5517", - "fill-opacity": { - "stops": [ - [ - 15, - 0.06 - ], - [ - 17, - 0 - ] - ] - }, - "fill-antialias": false - } - }, - { - "id": "waterway-river", - "type": "line", - "source": "composite", - "source-layer": "waterway", - "minzoom": 8, - "maxzoom": 22, - "interactive": true, - "filter": [ - "any", - [ - "in", - "class", - "river" - ], - [ - "in", - "class", - "canal" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": { - "base": 1, - "stops": [ - [ - 0, - "butt" - ], - [ - 11, - "round" - ] - ] - }, - "line-join": "round" - }, - "paint": { - "line-color": "#8ccbf7", - "line-width": { - "base": 1.3, - "stops": [ - [ - 8.5, - 0.1 - ], - [ - 20, - 8 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 8, - 0 - ], - [ - 8.5, - 1 - ] - ] - } - } - }, - { - "id": "waterway-other", - "type": "line", - "source": "composite", - "source-layer": "waterway", - "minzoom": 13, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "class", - "river" - ], - [ - "!=", - "class", - "canal" - ] - ], - "layout": { - "visibility": "visible", - "line-join": "round", - "line-cap": "round" - }, - "paint": { - "line-color": "#8ccbf7", - "line-width": { - "base": 1.35, - "stops": [ - [ - 13.5, - 0.1 - ], - [ - 20, - 3 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13, - 0 - ], - [ - 13.5, - 1 - ] - ] - } - } - }, - { - "id": "water", - "type": "fill", - "source": "composite", - "source-layer": "water", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#8ccbf7" - } - }, - { - "id": "landuse-overlay", - "type": "fill", - "source": "composite", - "source-layer": "landuse_overlay", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all" - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#9DD3D8", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 10, - 0.25 - ], - [ - 10.5, - 0.15 - ] - ] - } - } - }, - { - "id": "landuse-overlay-pattern", - "ref": "landuse-overlay", - "interactive": true, - "paint": { - "fill-color": "#9DD3D8", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 10, - 0 - ], - [ - 10.5, - 1 - ] - ] - }, - "fill-pattern": { - "base": 1, - "stops": [ - [ - 13, - "marsh-16" - ], - [ - 14, - "marsh-32" - ] - ] - } - } - }, - { - "id": "barrier_line-land-polygon", - "type": "fill", - "source": "composite", - "source-layer": "barrier_line", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "land" - ], - [ - "in", - "$type", - "Polygon" - ] - ], - "layout": {}, - "paint": { - "fill-color": "#ede9d9" - } - }, - { - "id": "barrier_line-land-line", - "type": "line", - "source": "composite", - "source-layer": "barrier_line", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "land" - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "line-cap": "round" - }, - "paint": { - "line-width": { - "base": 1.99, - "stops": [ - [ - 14, - 0.75 - ], - [ - 20, - 40 - ] - ] - }, - "line-color": "#ede9d9" - } - }, - { - "id": "building-bottom", - "type": "fill", - "source": "composite", - "source-layer": "building", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#cbc6b7", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 15.5, - 0 - ], - [ - 16, - 1 - ] - ] - } - } - }, - { - "id": "building-top", - "ref": "building-bottom", - "interactive": true, - "paint": { - "fill-color": { - "base": 1, - "stops": [ - [ - 15, - "#ede9d9" - ], - [ - 16, - "#e8e0cc" - ] - ] - }, - "fill-opacity": { - "base": 1, - "stops": [ - [ - 15, - 0 - ], - [ - 15.5, - 1 - ] - ] - }, - "fill-outline-color": "#d0cbbb", - "fill-translate": { - "base": 1, - "stops": [ - [ - 15, - [ - 0, - 0 - ] - ], - [ - 20, - [ - -5, - -5 - ] - ] - ] - } - } - }, - { - "id": "aeroway-polygon", - "type": "fill", - "source": "composite", - "source-layer": "aeroway", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "$type", - "Polygon" - ], - [ - "!=", - "type", - "apron" - ] - ], - "layout": {}, - "paint": { - "fill-color": "#dbcedb", - "fill-opacity": { - "base": 1, - "stops": [ - [ - 11, - 0 - ], - [ - 11.5, - 1 - ] - ] - } - } - }, - { - "id": "aeroway-runway", - "type": "line", - "source": "composite", - "source-layer": "aeroway", - "minzoom": 9, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "type", - "runway" - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt" - }, - "paint": { - "line-color": "#dbcedb", - "line-width": { - "base": 1.5, - "stops": [ - [ - 9, - 1 - ], - [ - 18, - 80 - ] - ] - } - } - }, - { - "id": "aeroway-taxiway", - "type": "line", - "source": "composite", - "source-layer": "aeroway", - "minzoom": 9, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "type", - "taxiway" - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt" - }, - "paint": { - "line-color": "#dbcedb", - "line-width": { - "base": 1.5, - "stops": [ - [ - 10, - 0.5 - ], - [ - 18, - 20 - ] - ] - } - } - }, - { - "id": "admin-3-4-boundaries-bg", - "type": "line", - "source": "composite", - "source-layer": "admin", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - ">=", - "admin_level", - 3 - ], - [ - "in", - "maritime", - 0 - ] - ], - "layout": { - "visibility": "visible", - "line-join": "bevel" - }, - "paint": { - "line-color": { - "base": 1, - "stops": [ - [ - 8, - "#ede9d9" - ], - [ - 16, - "#f6e8e1" - ] - ] - }, - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 3.5 - ], - [ - 10, - 8 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 7, - 0 - ], - [ - 8, - 0.75 - ] - ] - }, - "line-dasharray": [ - 1, - 0 - ], - "line-translate": [ - 0, - 0 - ], - "line-blur": { - "base": 1, - "stops": [ - [ - 3, - 0 - ], - [ - 8, - 3 - ] - ] - } - } - }, - { - "id": "tunnel-street_limited-polygon", - "type": "fill", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "Polygon" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#EEE8E3", - "fill-opacity": 0.75 - } - }, - { - "id": "tunnel-path-bg", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "path" - ] - ], - "layout": { - "visibility": "none", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 2 - ], - [ - 18, - 7 - ] - ] - }, - "line-dasharray": [ - 1, - 0 - ], - "line-color": "#d9d3c9", - "line-blur": 0, - "line-opacity": { - "base": 1, - "stops": [ - [ - 15, - 0 - ], - [ - 15.25, - 0.5 - ] - ] - } - } - }, - { - "id": "tunnel-path", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "path" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 15, - [ - 0.1, - 1.25 - ] - ], - [ - 16, - [ - 0.1, - 1.6 - ] - ], - [ - 17, - [ - 0.1, - 1.45 - ] - ], - [ - 18, - [ - 0.1, - 1.3 - ] - ] - ] - }, - "line-color": "#f5f2ee", - "line-opacity": { - "base": 1, - "stops": [ - [ - 15, - 0 - ], - [ - 15.25, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-street-low", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street" - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "#fff", - "line-opacity": { - "stops": [ - [ - 11.5, - 0 - ], - [ - 12, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "tunnel-street_limited-low", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "#fff", - "line-opacity": { - "stops": [ - [ - 11.5, - 0 - ], - [ - 12, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "tunnel-motorway_link-case", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "motorway_link" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "#fff", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-service-driveway-case", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "service", - "driveway" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "#c4beb7", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-street_limited-case", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "LineString" - ], - [ - "!=", - "type", - "construction" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "#c4beb7", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 12 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ], - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-street-case", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "#c4beb7", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ], - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-main-case", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "main" - ], - [ - "!=", - "type", - "trunk" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.2, - "stops": [ - [ - 10, - 0.75 - ], - [ - 18, - 2 - ] - ] - }, - "line-dasharray": [ - 3, - 3 - ], - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-color": "#c4beb7" - } - }, - { - "id": "tunnel-trunk-case", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "main" - ], - [ - "in", - "type", - "trunk" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "#fff", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": 1, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-motorway-case", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "motorway" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "#fff", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": 1, - "line-dasharray": [ - 3, - 3 - ] - } - }, - { - "id": "tunnel-motorway_link", - "ref": "tunnel-motorway_link-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "#ffbe8c", - "line-opacity": 1, - "line-dasharray": [ - 1, - 0 - ] - } - }, - { - "id": "tunnel-service-driveway", - "ref": "tunnel-service-driveway-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "#fff", - "line-dasharray": [ - 1, - 0 - ] - } - }, - { - "id": "tunnel-construction", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 14, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "LineString" - ], - [ - "in", - "type", - "construction" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt", - "line-join": "miter" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "#d9d3c9", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - }, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 0.4, - 0.8 - ] - ], - [ - 15, - [ - 0.3, - 0.6 - ] - ], - [ - 16, - [ - 0.2, - 0.3 - ] - ], - [ - 17, - [ - 0.2, - 0.25 - ] - ], - [ - 18, - [ - 0.15, - 0.15 - ] - ] - ] - } - } - }, - { - "id": "tunnel-street_limited", - "ref": "tunnel-street_limited-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "#EFEDEB", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-street", - "ref": "tunnel-street-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "#fff", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-main", - "ref": "tunnel-main-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-color": "#fff", - "line-opacity": 1, - "line-dasharray": [ - 1, - 0 - ], - "line-blur": 0 - } - }, - { - "id": "tunnel-trunk", - "ref": "tunnel-trunk-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "#f2de9e" - } - }, - { - "id": "tunnel-motorway", - "ref": "tunnel-motorway-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-dasharray": [ - 1, - 0 - ], - "line-opacity": 1, - "line-color": "#ffbe8c", - "line-blur": 0 - } - }, - { - "id": "tunnel-rail", - "type": "line", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 13, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "major_rail", - "minor_rail" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt" - }, - "paint": { - "line-color": { - "stops": [ - [ - 13, - "#d8d5c8" - ], - [ - 16, - "#c0beb2" - ] - ] - }, - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 20, - 1 - ] - ] - } - } - }, - { - "id": "tunnel-rail-tracks", - "ref": "tunnel-rail", - "interactive": true, - "paint": { - "line-color": { - "stops": [ - [ - 13, - "#d8d5c8" - ], - [ - 16, - "#c0beb2" - ] - ] - }, - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 4 - ], - [ - 20, - 8 - ] - ] - }, - "line-dasharray": [ - 0.1, - 15 - ], - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.75, - 0 - ], - [ - 20, - 1 - ] - ] - } - } - }, - { - "id": "road-path-bg", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "path" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 2 - ], - [ - 18, - 7 - ] - ] - }, - "line-dasharray": [ - 1, - 0 - ], - "line-color": "#d9d3c9", - "line-blur": 0, - "line-opacity": { - "base": 1, - "stops": [ - [ - 15, - 0 - ], - [ - 15.25, - 0.5 - ] - ] - } - } - }, - { - "id": "road-path", - "ref": "road-path-bg", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "#fff", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 15, - [ - 0.1, - 1.25 - ] - ], - [ - 16, - [ - 0.1, - 1.6 - ] - ], - [ - 17, - [ - 0.1, - 1.45 - ] - ], - [ - 18, - [ - 0.1, - 1.3 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 15, - 0 - ], - [ - 15.25, - 1 - ] - ] - } - } - }, - { - "id": "road-street_limited-polygon-outline", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 12, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "Polygon" - ] - ], - "layout": { - "visibility": "none" - }, - "paint": { - "line-color": "#d9d3c9", - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 1.5 - ], - [ - 20, - 4 - ] - ] - }, - "line-opacity": 1 - } - }, - { - "id": "road-street-low", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street" - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "#fff", - "line-opacity": { - "stops": [ - [ - 11, - 0 - ], - [ - 11.25, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "road-street_limited-low", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "#fff", - "line-opacity": { - "stops": [ - [ - 11, - 0 - ], - [ - 11.25, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "road-motorway_link-case", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 10, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "motorway_link" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "#fff", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 10.99, - 0 - ], - [ - 11, - 1 - ] - ] - } - } - }, - { - "id": "road-service-driveway-case", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "service", - "driveway" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "#d9d3c9", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - } - } - }, - { - "id": "road-street_limited-case", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "LineString" - ], - [ - "!=", - "type", - "construction" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "#d9d3c9", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 12 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-street-case", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "#d9d3c9", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-main-case", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "main" - ], - [ - "!=", - "type", - "trunk" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.2, - "stops": [ - [ - 10, - 0.75 - ], - [ - 18, - 2 - ] - ] - }, - "line-color": "#d9d3c9", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 9.99, - 0 - ], - [ - 10, - 1 - ] - ] - } - } - }, - { - "id": "road-trunk-case", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 5, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "main" - ], - [ - "in", - "type", - "trunk" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "#fff", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 5.9, - 0 - ], - [ - 6, - 1 - ] - ] - } - } - }, - { - "id": "road-motorway-case", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "motorway" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "#fff", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-opacity": { - "base": 1.2, - "stops": [ - [ - 5.9, - 0 - ], - [ - 6, - 1 - ] - ] - } - } - }, - { - "id": "road-street_limited-polygon", - "type": "fill", - "source": "composite", - "source-layer": "road", - "minzoom": 12, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "Polygon" - ] - ], - "layout": { - "visibility": "none" - }, - "paint": { - "fill-color": "#EFEDEB", - "fill-opacity": 1 - } - }, - { - "id": "road-service-driveway", - "ref": "road-service-driveway-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "#fff" - } - }, - { - "id": "road-motorway_link", - "ref": "road-motorway_link-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "#ffa159", - "line-opacity": 1 - } - }, - { - "id": "road-construction", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 14, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "LineString" - ], - [ - "in", - "type", - "construction" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt", - "line-join": "miter" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "#d9d3c9", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - }, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 0.4, - 0.8 - ] - ], - [ - 15, - [ - 0.3, - 0.6 - ] - ], - [ - 16, - [ - 0.2, - 0.3 - ] - ], - [ - 17, - [ - 0.2, - 0.25 - ] - ], - [ - 18, - [ - 0.15, - 0.15 - ] - ] - ] - } - } - }, - { - "id": "road-street_limited", - "ref": "road-street_limited-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "#EFEDEB", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-street", - "ref": "road-street-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "#fff", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "road-main", - "ref": "road-main-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-color": { - "base": 1, - "stops": [ - [ - 5, - "#ede9d9" - ], - [ - 8, - "#fff" - ] - ] - }, - "line-opacity": { - "base": 1.2, - "stops": [ - [ - 5, - 0 - ], - [ - 5.5, - 1 - ] - ] - } - } - }, - { - "id": "road-trunk", - "ref": "road-trunk-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "#f2cf60" - } - }, - { - "id": "road-motorway", - "ref": "road-motorway-case", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": { - "base": 1, - "stops": [ - [ - 5.9, - "#fff" - ], - [ - 6, - "#ffa159" - ] - ] - }, - "line-opacity": { - "base": 1.2, - "stops": [ - [ - 5, - 0 - ], - [ - 5.5, - 1 - ] - ] - } - } - }, - { - "id": "road-rail", - "type": "line", - "source": "composite", - "source-layer": "road", - "minzoom": 13, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "major_rail", - "minor_rail" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt" - }, - "paint": { - "line-color": { - "stops": [ - [ - 13, - "#d8d5c8" - ], - [ - 16, - "#b3b1a6" - ] - ] - }, - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 20, - 1 - ] - ] - } - } - }, - { - "id": "road-rail-tracks", - "ref": "road-rail", - "interactive": true, - "paint": { - "line-color": { - "stops": [ - [ - 13, - "#d8d5c8" - ], - [ - 16, - "#b3b1a6" - ] - ] - }, - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 4 - ], - [ - 20, - 8 - ] - ] - }, - "line-dasharray": [ - 0.1, - 15 - ], - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.75, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "bridge-street_limited-polygon", - "type": "fill", - "source": "composite", - "source-layer": "bridge", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "Polygon" - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "fill-color": "#EEE8E3", - "fill-opacity": 0.75 - } - }, - { - "id": "bridge-path-bg", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "path" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 2 - ], - [ - 18, - 7 - ] - ] - }, - "line-dasharray": [ - 1, - 0 - ], - "line-color": "#d9d3c9", - "line-blur": 0, - "line-opacity": { - "base": 1, - "stops": [ - [ - 15, - 0 - ], - [ - 15.25, - 0.75 - ] - ] - } - } - }, - { - "id": "bridge-path", - "ref": "bridge-path-bg", - "interactive": true, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 15, - 1 - ], - [ - 18, - 4 - ] - ] - }, - "line-color": "#fff", - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 0.1, - 1.25 - ] - ], - [ - 16, - [ - 0.1, - 1.6 - ] - ], - [ - 17, - [ - 0.1, - 1.45 - ] - ], - [ - 18, - [ - 0.1, - 1.3 - ] - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 15, - 0 - ], - [ - 15.25, - 1 - ] - ] - } - } - }, - { - "id": "bridge-street-low", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street" - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "#fff", - "line-opacity": { - "stops": [ - [ - 11.5, - 0 - ], - [ - 12, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "bridge-street_limited-low", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "#fff", - "line-opacity": { - "stops": [ - [ - 11.5, - 0 - ], - [ - 12, - 1 - ], - [ - 14, - 1 - ], - [ - 14.01, - 0 - ] - ] - } - } - }, - { - "id": "bridge-motorway_link-case", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 12, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "motorway_link" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "#fff", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-opacity": 1 - } - }, - { - "id": "bridge-service-driveway-case", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "service", - "driveway" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "#d9d3c9", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - } - } - }, - { - "id": "bridge-street_limited-case", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 14, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "LineString" - ], - [ - "!=", - "type", - "construction" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "#d9d3c9", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 12 - ] - ] - } - } - }, - { - "id": "bridge-street-case", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 14, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.75 - ], - [ - 20, - 2 - ] - ] - }, - "line-color": "#d9d3c9", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 13, - 0 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - } - } - }, - { - "id": "bridge-main-case", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 8, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "main" - ], - [ - "!=", - "type", - "trunk" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.2, - "stops": [ - [ - 10, - 0.75 - ], - [ - 18, - 2 - ] - ] - }, - "line-color": "#d9d3c9", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-translate": [ - 0, - 0 - ] - } - }, - { - "id": "bridge-motorway-trunk-case", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "any", - [ - "in", - "class", - "motorway" - ], - [ - "in", - "type", - "trunk" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 16, - 2 - ] - ] - }, - "line-color": "#fff", - "line-gap-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - } - } - }, - { - "id": "bridge-motorway_link", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 10, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "motorway_link" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "#ffa159" - } - }, - { - "id": "bridge-service-driveway", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "service", - "driveway" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "#fff" - } - }, - { - "id": "bridge-construction", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 14, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "LineString" - ], - [ - "in", - "type", - "construction" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt", - "line-join": "miter" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "#d9d3c9", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - }, - "line-dasharray": { - "base": 1, - "stops": [ - [ - 14, - [ - 0.4, - 0.8 - ] - ], - [ - 15, - [ - 0.3, - 0.6 - ] - ], - [ - 16, - [ - 0.2, - 0.3 - ] - ], - [ - 17, - [ - 0.2, - 0.25 - ] - ], - [ - 18, - [ - 0.15, - 0.15 - ] - ] - ] - } - } - }, - { - "id": "bridge-street_limited", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street_limited" - ], - [ - "in", - "$type", - "LineString" - ], - [ - "!=", - "type", - "construction" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 12 - ] - ] - }, - "line-color": "#EFEDEB", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "bridge-street", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 12.5, - 0.5 - ], - [ - 14, - 2 - ], - [ - 18, - 18 - ] - ] - }, - "line-color": "#fff", - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "bridge-main", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "main" - ], - [ - "!=", - "type", - "trunk" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 8.5, - 0.5 - ], - [ - 10, - 0.75 - ], - [ - 18, - 26 - ] - ] - }, - "line-color": "#fff", - "line-opacity": { - "base": 1.2, - "stops": [ - [ - 5, - 0 - ], - [ - 5.5, - 1 - ] - ] - } - } - }, - { - "id": "bridge-trunk", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "main" - ], - [ - "in", - "type", - "trunk" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "#f2cf60" - } - }, - { - "id": "bridge-motorway", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "motorway" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-width": { - "base": 1.5, - "stops": [ - [ - 5, - 0.75 - ], - [ - 18, - 32 - ] - ] - }, - "line-color": "#ffa159" - } - }, - { - "id": "bridge-rail", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 13, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "major_rail", - "minor_rail" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt" - }, - "paint": { - "line-color": { - "stops": [ - [ - 13, - "#d8d5c8" - ], - [ - 16, - "#b3b1a6" - ] - ] - }, - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 20, - 1 - ] - ] - } - } - }, - { - "id": "bridge-rail-tracks", - "ref": "bridge-rail", - "interactive": true, - "paint": { - "line-color": { - "stops": [ - [ - 13, - "#d8d5c8" - ], - [ - 16, - "#b3b1a6" - ] - ] - }, - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 4 - ], - [ - 20, - 8 - ] - ] - }, - "line-dasharray": [ - 0.1, - 15 - ], - "line-opacity": { - "base": 1, - "stops": [ - [ - 13.75, - 0 - ], - [ - 20, - 1 - ] - ] - } - } - }, - { - "id": "bridge-aerialway", - "type": "line", - "source": "composite", - "source-layer": "bridge", - "minzoom": 13, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "aerialway" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt" - }, - "paint": { - "line-color": "#b3ada6", - "line-width": { - "base": 1.5, - "stops": [ - [ - 14, - 0.5 - ], - [ - 20, - 1 - ] - ] - } - } - }, - { - "id": "hedges", - "type": "line", - "source": "composite", - "source-layer": "barrier_line", - "minzoom": 16, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "hedge" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-color": "#e2f4c2", - "line-width": { - "base": 1, - "stops": [ - [ - 16, - 1 - ], - [ - 20, - 3 - ] - ] - }, - "line-opacity": 1, - "line-dasharray": [ - 1, - 2, - 5, - 2, - 1, - 2 - ] - } - }, - { - "id": "fences", - "type": "line", - "source": "composite", - "source-layer": "barrier_line", - "minzoom": 16, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "fence" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-color": "#cbc6b7", - "line-width": { - "base": 1, - "stops": [ - [ - 16, - 1 - ], - [ - 20, - 3 - ] - ] - }, - "line-opacity": 1, - "line-dasharray": [ - 1, - 2, - 5, - 2, - 1, - 2 - ] - } - }, - { - "id": "gates", - "type": "line", - "source": "composite", - "source-layer": "barrier_line", - "minzoom": 17, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "gate" - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-color": "#cbc6b7", - "line-width": { - "base": 1, - "stops": [ - [ - 16, - 1 - ], - [ - 20, - 3 - ] - ] - }, - "line-opacity": 0.5, - "line-dasharray": [ - 1, - 2, - 5, - 2, - 1, - 2 - ] - } - }, - { - "id": "admin-2-boundaries-bg", - "type": "line", - "source": "composite", - "source-layer": "admin", - "minzoom": 1, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "admin_level", - 2 - ], - [ - "in", - "maritime", - 0 - ] - ], - "layout": { - "visibility": "visible", - "line-join": "miter", - "line-cap": "butt" - }, - "paint": { - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 3.5 - ], - [ - 10, - 10 - ] - ] - }, - "line-color": { - "base": 1, - "stops": [ - [ - 6, - "#ede9d9" - ], - [ - 8, - "#f6e8e1" - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 3, - 0 - ], - [ - 4, - 0.5 - ] - ] - }, - "line-translate": [ - 0, - 0 - ], - "line-blur": { - "base": 1, - "stops": [ - [ - 3, - 0 - ], - [ - 10, - 2 - ] - ] - } - } - }, - { - "id": "admin-3-4-boundaries", - "type": "line", - "source": "composite", - "source-layer": "admin", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - ">=", - "admin_level", - 3 - ], - [ - "in", - "maritime", - 0 - ] - ], - "layout": { - "visibility": "visible", - "line-join": "round", - "line-cap": "round" - }, - "paint": { - "line-dasharray": { - "base": 1, - "stops": [ - [ - 6, - [ - 2, - 0 - ] - ], - [ - 7, - [ - 2, - 2, - 6, - 2 - ] - ] - ] - }, - "line-width": { - "base": 1, - "stops": [ - [ - 7, - 0.75 - ], - [ - 12, - 1.5 - ] - ] - }, - "line-opacity": { - "base": 1, - "stops": [ - [ - 2, - 0 - ], - [ - 3, - 1 - ] - ] - }, - "line-color": { - "base": 1, - "stops": [ - [ - 3, - "#c3bfcc" - ], - [ - 7, - "#aba8b3" - ] - ] - } - } - }, - { - "id": "admin-2-boundaries", - "type": "line", - "source": "composite", - "source-layer": "admin", - "minzoom": 1, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "admin_level", - 2 - ], - [ - "in", - "maritime", - 0 - ], - [ - "in", - "disputed", - 0 - ] - ], - "layout": { - "visibility": "visible", - "line-join": "round", - "line-cap": "round" - }, - "paint": { - "line-color": "#787680", - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 0.5 - ], - [ - 10, - 2 - ] - ] - } - } - }, - { - "id": "admin-2-boundaries-dispute", - "type": "line", - "source": "composite", - "source-layer": "admin", - "minzoom": 1, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "admin_level", - 2 - ], - [ - "in", - "maritime", - 0 - ], - [ - "in", - "disputed", - 1 - ] - ], - "layout": { - "visibility": "visible", - "line-cap": "butt", - "line-join": "round" - }, - "paint": { - "line-dasharray": [ - 1.5, - 1.5 - ], - "line-color": "#787680", - "line-width": { - "base": 1, - "stops": [ - [ - 3, - 0.5 - ], - [ - 10, - 2 - ] - ] - } - } - }, - { - "id": "contour", - "type": "line", - "source": "composite", - "source-layer": "contour", - "minzoom": 14, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "!=", - "index", - 5 - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "line-opacity": 0.07, - "line-color": "#66601a" - } - }, - { - "id": "contour-index", - "type": "line", - "source": "composite", - "source-layer": "contour", - "minzoom": 14, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "index", - 5 - ] - ], - "layout": { - "visibility": "visible" - }, - "paint": { - "line-opacity": 0.12, - "line-color": "#66601a" - } - }, - { - "id": "tunnel-oneway-arrows-color", - "type": "symbol", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "oneway", - 1 - ], - [ - "in", - "class", - "main", - "street", - "street_limited" - ], - [ - "!=", - "type", - "trunk" - ] - ], - "layout": { - "symbol-placement": "line", - "icon-image": { - "base": 1, - "stops": [ - [ - 16, - "oneway-spaced-small" - ], - [ - 17, - "oneway-spaced-large" - ] - ] - }, - "icon-ignore-placement": false, - "symbol-spacing": 250 - }, - "paint": {} - }, - { - "id": "tunnel-oneway-arrows-white", - "type": "symbol", - "source": "composite", - "source-layer": "tunnel", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "oneway", - 1 - ], - [ - "any", - [ - "in", - "class", - "motorway", - "motorway_link" - ], - [ - "in", - "type", - "trunk" - ] - ] - ], - "layout": { - "symbol-placement": "line", - "icon-image": { - "base": 1, - "stops": [ - [ - 16, - "oneway-spaced-white-small" - ], - [ - 17, - "oneway-spaced-white-large" - ] - ] - }, - "icon-ignore-placement": false, - "symbol-spacing": 250 - }, - "paint": {} - }, - { - "id": "road-oneway-arrows-color", - "type": "symbol", - "source": "composite", - "source-layer": "road", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "oneway", - 1 - ], - [ - "in", - "class", - "main", - "street", - "street_limited" - ], - [ - "!=", - "type", - "trunk" - ] - ], - "layout": { - "symbol-placement": "line", - "icon-image": { - "base": 1, - "stops": [ - [ - 16, - "oneway-spaced-small" - ], - [ - 17, - "oneway-spaced-large" - ] - ] - }, - "icon-ignore-placement": false, - "icon-rotation-alignment": "map", - "icon-padding": 2, - "symbol-spacing": 250 - }, - "paint": {} - }, - { - "id": "road-oneway-arrows-white", - "type": "symbol", - "source": "composite", - "source-layer": "road", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "oneway", - 1 - ], - [ - "any", - [ - "in", - "class", - "motorway", - "motorway_link" - ], - [ - "in", - "type", - "trunk" - ] - ] - ], - "layout": { - "symbol-placement": "line", - "icon-image": { - "base": 1, - "stops": [ - [ - 16, - "oneway-spaced-white-small" - ], - [ - 17, - "oneway-spaced-white-large" - ] - ] - }, - "icon-ignore-placement": false, - "icon-padding": 2, - "symbol-spacing": 250 - }, - "paint": {} - }, - { - "id": "bridge-oneway-arrows-color", - "type": "symbol", - "source": "composite", - "source-layer": "bridge", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "oneway", - 1 - ], - [ - "in", - "class", - "main", - "street", - "street_limited" - ], - [ - "!=", - "type", - "trunk" - ] - ], - "layout": { - "symbol-placement": "line", - "icon-image": { - "base": 1, - "stops": [ - [ - 16, - "oneway-spaced-small" - ], - [ - 17, - "oneway-spaced-large" - ] - ] - }, - "icon-ignore-placement": false, - "symbol-spacing": 250 - }, - "paint": {} - }, - { - "id": "bridge-oneway-arrows-white", - "type": "symbol", - "source": "composite", - "source-layer": "bridge", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "oneway", - 1 - ], - [ - "any", - [ - "in", - "class", - "motorway", - "motorway_link" - ], - [ - "in", - "type", - "trunk" - ] - ] - ], - "layout": { - "symbol-placement": "line", - "icon-image": { - "base": 1, - "stops": [ - [ - 16, - "oneway-spaced-white-small" - ], - [ - 17, - "oneway-spaced-white-large" - ] - ] - }, - "icon-ignore-placement": false, - "symbol-spacing": 250 - }, - "paint": {} - }, - { - "id": "housenum-label", - "type": "symbol", - "source": "composite", - "source-layer": "housenum_label", - "minzoom": 17, - "maxzoom": 22, - "interactive": true, - "layout": { - "visibility": "visible", - "text-field": "{house_num}", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 4, - "text-max-width": 7, - "text-size": 9.5 - }, - "paint": { - "text-color": "#b2aca5", - "text-halo-color": "#e8e0cc", - "text-halo-width": 1.5, - "text-halo-blur": 0 - } - }, - { - "id": "contour-index-label", - "type": "symbol", - "source": "composite", - "source-layer": "contour", - "minzoom": 14, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "index", - 5 - ] - ], - "layout": { - "text-field": "{ele} m", - "symbol-placement": "line", - "text-max-angle": 25, - "visibility": "visible", - "text-padding": 5, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-size": 9.5 - }, - "paint": { - "text-color": "#a7a696", - "text-halo-width": 1, - "text-halo-blur": 1, - "text-halo-color": "rgba(237,233,217, 0.25)" - } - }, - { - "id": "waterway-label", - "type": "symbol", - "source": "composite", - "source-layer": "waterway_label", - "minzoom": 12, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "river" - ] - ], - "layout": { - "text-field": "{name_en}", - "visibility": "visible", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-max-angle": 30, - "text-size": { - "base": 1, - "stops": [ - [ - 13, - 12 - ], - [ - 18, - 16 - ] - ] - } - }, - "paint": { - "text-halo-width": 0.5, - "text-halo-color": "#ffffff", - "text-color": "#004087", - "text-halo-blur": 0.5 - } - }, - { - "id": "poi-scalerank4-l15", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 17, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "rail-light", - "rail-metro", - "rail", - "airport", - "airfield", - "heliport", - "rocket", - "park", - "golf", - "cemetery", - "zoo", - "campsite", - "swimming", - "dog-park" - ], - [ - "in", - "scalerank", - 4 - ], - [ - ">=", - "localrank", - 15 - ] - ], - "layout": { - "text-line-height": 1.2, - "text-allow-overlap": false, - "icon-image": "{maki}-11", - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 2, - "visibility": "visible", - "text-offset": [ - 0, - 1 - ], - "icon-optional": false, - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.02, - "text-max-width": 8, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - } - }, - "paint": { - "text-color": "#65513d", - "text-halo-color": "#ffffff", - "text-halo-width": 1 - } - }, - { - "id": "poi-scalerank4-l1", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 16, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "rail-light", - "rail-metro", - "rail", - "airport", - "airfield", - "heliport", - "rocket", - "park", - "golf", - "cemetery", - "zoo", - "campsite", - "swimming", - "dog-park" - ], - [ - "in", - "scalerank", - 4 - ], - [ - "<=", - "localrank", - 14 - ] - ], - "layout": { - "text-line-height": 1.2, - "text-allow-overlap": false, - "icon-image": "{maki}-11", - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 1, - "visibility": "visible", - "text-offset": [ - 0, - 1 - ], - "icon-optional": false, - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.02, - "text-max-width": 8, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - } - }, - "paint": { - "text-color": "#65513d", - "text-halo-color": "#ffffff", - "text-halo-width": 1 - } - }, - { - "id": "poi-parks_scalerank4", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 16, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "maki", - "park", - "cemetery", - "golf", - "zoo", - "playground" - ], - [ - "in", - "scalerank", - 4 - ] - ], - "layout": { - "text-line-height": 1.2, - "text-allow-overlap": false, - "icon-image": "{maki}-11", - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 1, - "visibility": "visible", - "text-offset": [ - 0, - 1 - ], - "icon-optional": false, - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.02, - "text-max-width": 8, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - } - }, - "paint": { - "text-color": "#4c661f", - "text-halo-color": "#ffffff", - "text-halo-width": 1 - } - }, - { - "id": "poi-scalerank3", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "rail-light", - "rail-metro", - "rail", - "airport", - "airfield", - "heliport", - "rocket", - "park", - "golf", - "cemetery", - "zoo", - "campsite", - "swimming", - "dog-park" - ], - [ - "in", - "scalerank", - 3 - ] - ], - "layout": { - "text-line-height": 1.2, - "text-allow-overlap": false, - "icon-image": "{maki}-11", - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 1, - "visibility": "visible", - "text-offset": [ - 0, - 1 - ], - "icon-optional": false, - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.02, - "text-max-width": 8, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - } - }, - "paint": { - "text-color": "#65513d", - "text-halo-color": "#ffffff", - "text-halo-width": 1 - } - }, - { - "id": "poi-parks-scalerank3", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "maki", - "park", - "cemetery", - "golf", - "zoo" - ], - [ - "in", - "scalerank", - 3 - ] - ], - "layout": { - "text-line-height": 1.2, - "text-allow-overlap": false, - "icon-image": "{maki}-11", - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 2, - "visibility": "visible", - "text-offset": [ - 0, - 1 - ], - "icon-optional": false, - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.02, - "text-max-width": 8, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - } - }, - "paint": { - "text-color": "#4c661f", - "text-halo-color": "#ffffff", - "text-halo-width": 1 - } - }, - { - "id": "road-label-small", - "type": "symbol", - "source": "composite", - "source-layer": "road_label", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "class", - "motorway", - "main", - "street_limited", - "street" - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "text-ignore-placement": false, - "text-max-angle": 30, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-padding": 1, - "visibility": "visible", - "text-rotation-alignment": "map", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 15, - 10 - ], - [ - 20, - 13 - ] - ] - } - }, - "paint": { - "text-color": "#3a3836", - "text-halo-color": "#ffffff", - "text-halo-width": 1.25, - "text-halo-blur": 1 - } - }, - { - "id": "road-label-medium", - "type": "symbol", - "source": "composite", - "source-layer": "road_label", - "minzoom": 11, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "street", - "street_limited" - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "text-max-angle": 30, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-padding": 1, - "visibility": "visible", - "text-rotation-alignment": "map", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 11, - 10 - ], - [ - 20, - 14 - ] - ] - } - }, - "paint": { - "text-color": "#3a3836", - "text-halo-color": "#ffffff", - "text-halo-width": 1 - } - }, - { - "id": "road-label-large", - "type": "symbol", - "source": "composite", - "source-layer": "road_label", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "class", - "main", - "motorway" - ] - ], - "layout": { - "text-allow-overlap": false, - "text-ignore-placement": false, - "text-max-angle": 30, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "text-padding": 1, - "visibility": "visible", - "text-rotation-alignment": "map", - "text-field": "{name_en}", - "text-letter-spacing": 0.01, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 9, - 10 - ], - [ - 20, - 16 - ] - ] - } - }, - "paint": { - "text-color": "#3a3836", - "text-halo-color": "rgba(255,255,255, 0.75)", - "text-halo-width": 1, - "text-halo-blur": 1 - } - }, - { - "id": "other-motorway-shields", - "type": "symbol", - "source": "composite", - "source-layer": "road_label", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "shield", - "us-interstate", - "us-interstate-business", - "us-interstate-duplex" - ], - [ - "<=", - "reflen", - 6 - ] - ], - "layout": { - "text-allow-overlap": false, - "icon-image": { - "base": 1, - "stops": [ - [ - 0, - "{shield}-{reflen}-small" - ], - [ - 16, - "{shield}-{reflen}-large" - ] - ] - }, - "icon-rotation-alignment": "viewport", - "symbol-avoid-edges": false, - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "symbol-placement": { - "base": 1, - "stops": [ - [ - 10, - "point" - ], - [ - 11, - "line" - ] - ] - }, - "text-padding": 2, - "visibility": "visible", - "text-rotation-alignment": "viewport", - "text-field": "{ref}", - "text-letter-spacing": 0.05, - "icon-padding": 2, - "symbol-spacing": { - "base": 1, - "stops": [ - [ - 11, - 100 - ], - [ - 14, - 200 - ] - ] - }, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 9 - ], - [ - 16.01, - 11 - ] - ] - } - }, - "paint": { - "text-color": "#3a3836", - "icon-halo-color": "rgba(0, 0, 0, 1)", - "icon-halo-width": 1, - "text-opacity": 1, - "icon-color": "white", - "text-halo-color": "#ffffff", - "text-halo-width": 0 - } - }, - { - "id": "interstate_motorway_shields", - "type": "symbol", - "source": "composite", - "source-layer": "road_label", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "shield", - "us-interstate", - "us-interstate-business", - "us-interstate-duplex" - ], - [ - "<=", - "reflen", - 6 - ] - ], - "layout": { - "text-allow-overlap": false, - "icon-image": { - "base": 1, - "stops": [ - [ - 0, - "{shield}-{reflen}-small" - ], - [ - 16, - "{shield}-{reflen}-large" - ] - ] - }, - "icon-rotation-alignment": "viewport", - "symbol-avoid-edges": false, - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "symbol-placement": { - "base": 1, - "stops": [ - [ - 10, - "point" - ], - [ - 11, - "line" - ] - ] - }, - "text-padding": 2, - "visibility": "visible", - "text-rotation-alignment": "viewport", - "text-field": "{ref}", - "text-letter-spacing": 0.05, - "icon-padding": 2, - "symbol-spacing": { - "base": 1, - "stops": [ - [ - 11, - 100 - ], - [ - 14, - 200 - ] - ] - }, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 9 - ], - [ - 16.01, - 11 - ] - ] - } - }, - "paint": { - "text-color": "#fff", - "icon-halo-color": "rgba(0, 0, 0, 1)", - "icon-halo-width": 1, - "text-opacity": 1, - "icon-color": "white", - "text-halo-color": "#ffffff", - "text-halo-width": 0 - } - }, - { - "id": "poi-scalerank2", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 13, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "rail-light", - "rail-metro", - "rail", - "airport", - "airfield", - "heliport", - "rocket", - "park", - "golf", - "cemetery", - "zoo", - "campsite", - "swimming", - "dog-park" - ], - [ - "in", - "scalerank", - 2 - ] - ], - "layout": { - "text-line-height": 1.2, - "text-allow-overlap": false, - "icon-image": { - "stops": [ - [ - 14, - "{maki}-11" - ], - [ - 15, - "{maki}-15" - ] - ] - }, - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 2, - "visibility": "visible", - "text-offset": [ - 0, - 1.25 - ], - "icon-optional": false, - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.02, - "text-max-width": 8, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 14, - 11 - ], - [ - 20, - 14 - ] - ] - } - }, - "paint": { - "text-color": "#65513d", - "text-halo-color": "#ffffff", - "text-halo-width": 1.25 - } - }, - { - "id": "poi-parks-scalerank2", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 13, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "maki", - "park", - "golf", - "cemetery", - "zoo", - "campsite", - "swimming", - "dog-park" - ], - [ - "in", - "scalerank", - 2 - ] - ], - "layout": { - "text-line-height": 1.2, - "text-allow-overlap": false, - "icon-image": { - "stops": [ - [ - 14, - "{maki}-11" - ], - [ - 15, - "{maki}-15" - ] - ] - }, - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 2, - "visibility": "visible", - "text-offset": [ - 0, - 1.25 - ], - "icon-optional": false, - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.02, - "text-max-width": 8, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 14, - 11 - ], - [ - 20, - 14 - ] - ] - } - }, - "paint": { - "text-color": "#4c661f", - "text-halo-color": "#ffffff", - "text-halo-width": 1.25 - } - }, - { - "id": "rail-label", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 12, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "type", - "Rail Station" - ] - ], - "layout": { - "icon-image": "{network}-11", - "symbol-avoid-edges": true, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "icon-allow-overlap": false, - "symbol-placement": "point", - "text-justify": "center", - "visibility": "visible", - "text-offset": [ - 0, - 1 - ], - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "" - ], - [ - 13, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.02, - "icon-padding": 0, - "text-max-width": 7, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 11 - ], - [ - 20, - 13 - ] - ] - } - }, - "paint": { - "text-color": "#65513d", - "text-halo-color": "#ffffff", - "text-halo-width": 1.5, - "icon-halo-width": 4, - "icon-halo-color": "#fff", - "text-opacity": { - "base": 1, - "stops": [ - [ - 13.99, - 0 - ], - [ - 14, - 1 - ] - ] - } - } - }, - { - "id": "water-label-sm", - "type": "symbol", - "source": "composite", - "source-layer": "water_label", - "minzoom": 15, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "<=", - "area", - 10000 - ] - ], - "layout": { - "text-field": "{name_en}", - "visibility": "visible", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 16, - 13 - ], - [ - 20, - 16 - ] - ] - } - }, - "paint": { - "text-halo-width": 0, - "text-halo-color": "#ffffff", - "text-color": "#004087", - "text-halo-blur": 1.5 - } - }, - { - "id": "water-label", - "type": "symbol", - "source": "composite", - "source-layer": "water_label", - "minzoom": 5, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - ">", - "area", - 10000 - ] - ], - "layout": { - "text-field": "{name_en}", - "visibility": "visible", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 13, - 13 - ], - [ - 18, - 18 - ] - ] - } - }, - "paint": { - "text-halo-width": 0, - "text-halo-color": "#ffffff", - "text-color": "#004087", - "text-halo-blur": 1.5 - } - }, - { - "id": "poi-parks-scalerank1", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "maki", - "park", - "golf", - "cemetery", - "zoo", - "campsite", - "swimming", - "dog-park" - ], - [ - "<=", - "scalerank", - 1 - ] - ], - "layout": { - "text-line-height": 1.2, - "text-allow-overlap": false, - "icon-image": { - "stops": [ - [ - 13, - "{maki}-11" - ], - [ - 14, - "{maki}-15" - ] - ] - }, - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 2, - "visibility": "visible", - "text-offset": [ - 0, - 1 - ], - "icon-optional": false, - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.02, - "text-max-width": 8, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 14 - ] - ] - } - }, - "paint": { - "text-color": "#4c661f", - "text-halo-color": "#ffffff", - "text-halo-width": 1, - "text-halo-blur": 0 - } - }, - { - "id": "poi-scalerank1", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "maki", - "rail-light", - "rail-metro", - "rail", - "airport", - "airfield", - "heliport", - "rocket", - "park", - "golf", - "cemetery", - "zoo", - "campsite", - "swimming", - "dog-park" - ], - [ - "<=", - "scalerank", - 1 - ], - [ - "!=", - "type", - "Island" - ] - ], - "layout": { - "text-line-height": 1.2, - "text-allow-overlap": false, - "icon-image": { - "stops": [ - [ - 13, - "{maki}-11" - ], - [ - 14, - "{maki}-15" - ] - ] - }, - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 2, - "visibility": "visible", - "text-offset": [ - 0, - 1 - ], - "icon-optional": false, - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": "{name_en}", - "text-letter-spacing": 0.02, - "text-max-width": 8, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 14 - ] - ] - } - }, - "paint": { - "text-color": "#65513d", - "text-halo-color": "#ffffff", - "text-halo-width": 1 - } - }, - { - "id": "airport-label", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 9, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "maki", - "airport", - "heliport", - "rocket" - ], - [ - "<=", - "scalerank", - 2 - ] - ], - "layout": { - "text-allow-overlap": false, - "icon-image": { - "stops": [ - [ - 12, - "{maki}-11" - ], - [ - 13, - "{maki}-15" - ] - ] - }, - "text-ignore-placement": false, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 2, - "visibility": "visible", - "text-offset": { - "base": 1, - "stops": [ - [ - 12, - [ - 0, - 1 - ] - ], - [ - 13, - [ - 0, - 1.25 - ] - ] - ] - }, - "icon-optional": false, - "text-rotation-alignment": "viewport", - "text-anchor": "top", - "text-field": { - "stops": [ - [ - 12, - "{ref}" - ], - [ - 13, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.02, - "text-max-width": 9, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 12 - ], - [ - 18, - 18 - ] - ] - } - }, - "paint": { - "text-color": "#000000", - "text-halo-color": "#ffffff", - "text-halo-width": 1.25 - } - }, - { - "id": "poi-islets", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "type", - "Islet" - ] - ], - "layout": { - "text-line-height": 1.2, - "text-allow-overlap": false, - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 2, - "visibility": "visible", - "text-offset": [ - 0, - 0 - ], - "icon-optional": false, - "text-rotation-alignment": "viewport", - "text-anchor": "center", - "text-field": "{name_en}", - "text-letter-spacing": 0.02, - "text-max-width": 8, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 14, - 16 - ] - ] - } - }, - "paint": { - "text-color": "#65513d", - "text-halo-color": "#ffffff", - "text-halo-width": 1 - } - }, - { - "id": "place-neighbourhood", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 10, - "maxzoom": 16, - "interactive": true, - "filter": [ - "all", - [ - "in", - "type", - "neighbourhood" - ] - ], - "layout": { - "visibility": "visible", - "text-field": "{name_en}", - "text-transform": "uppercase", - "text-letter-spacing": 0.1, - "text-max-width": 7, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-padding": 3, - "text-size": { - "base": 1, - "stops": [ - [ - 12, - 11 - ], - [ - 16, - 16 - ] - ] - } - }, - "paint": { - "text-halo-color": "rgba(255,255,255, 0.5)", - "text-halo-width": 1.75, - "text-color": "#805540", - "text-halo-blur": 0 - } - }, - { - "id": "place-suburb", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 10, - "maxzoom": 16, - "interactive": true, - "filter": [ - "all", - [ - "in", - "type", - "suburb" - ] - ], - "layout": { - "visibility": "visible", - "text-field": "{name_en}", - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-letter-spacing": 0.15, - "text-max-width": 7, - "text-padding": 3, - "text-size": { - "base": 1, - "stops": [ - [ - 11, - 11 - ], - [ - 15, - 18 - ] - ] - } - }, - "paint": { - "text-halo-color": "rgba(255,255,255, 0.5)", - "text-halo-width": 1.75, - "text-color": "#805540" - } - }, - { - "id": "place-hamlet", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 10, - "maxzoom": 16, - "interactive": true, - "filter": [ - "all", - [ - "in", - "type", - "hamlet" - ] - ], - "layout": { - "visibility": "visible", - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 12, - 11.5 - ], - [ - 15, - 16 - ] - ] - } - }, - "paint": { - "text-halo-color": "#ffffff", - "text-halo-width": 1.25, - "text-color": "#000000" - } - }, - { - "id": "place-village", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 8, - "maxzoom": 15, - "interactive": true, - "filter": [ - "all", - [ - "in", - "type", - "village" - ] - ], - "layout": { - "visibility": "visible", - "text-field": "{name_en}", - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11.5 - ], - [ - 16, - 18 - ] - ] - } - }, - "paint": { - "text-halo-color": "#ffffff", - "text-halo-width": 1.25, - "text-color": "#000000" - } - }, - { - "id": "place-town", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 6, - "maxzoom": 15, - "interactive": true, - "filter": [ - "all", - [ - "in", - "type", - "town" - ] - ], - "layout": { - "icon-image": "circle.sdf", - "text-font": { - "base": 1, - "stops": [ - [ - 11, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 12, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "visibility": "visible", - "text-offset": { - "base": 1, - "stops": [ - [ - 7, - [ - 0, - -0.15 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "bottom" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 7, - 11.5 - ], - [ - 15, - 20 - ] - ] - }, - "icon-size": 0.3 - }, - "paint": { - "text-color": "#000000", - "icon-halo-blur": 1, - "icon-halo-color": "#ffffff", - "icon-halo-width": 1, - "icon-color": "#000000", - "text-halo-color": "#ffffff", - "text-halo-width": 1.25, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - } - } - }, - { - "id": "poi-islands", - "type": "symbol", - "source": "composite", - "source-layer": "poi_label", - "minzoom": 0, - "maxzoom": 22, - "interactive": true, - "filter": [ - "all", - [ - "in", - "type", - "Island" - ] - ], - "layout": { - "text-line-height": 1.2, - "text-allow-overlap": false, - "text-ignore-placement": false, - "text-max-angle": 38, - "text-font": [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ], - "symbol-placement": "point", - "text-padding": 2, - "visibility": "visible", - "text-offset": [ - 0, - 0 - ], - "icon-optional": false, - "text-rotation-alignment": "viewport", - "text-anchor": "center", - "text-field": "{name_en}", - "text-letter-spacing": 0.02, - "text-max-width": 7, - "symbol-spacing": 250, - "text-size": { - "base": 1, - "stops": [ - [ - 10, - 11 - ], - [ - 18, - 16 - ] - ] - } - }, - "paint": { - "text-color": "#65513d", - "text-halo-color": "#ffffff", - "text-halo-width": 1 - } - }, - { - "id": "place-city-sm", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 0, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "!in", - "scalerank", - 0, - 1, - 2, - 3, - 4, - 5 - ], - [ - "in", - "type", - "city" - ] - ], - "layout": { - "icon-image": "circle.sdf", - "text-transform": "none", - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "visibility": "visible", - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - -0.2 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "bottom" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 1, - "stops": [ - [ - 6, - 12 - ], - [ - 14, - 22 - ] - ] - }, - "icon-size": 0.3 - }, - "paint": { - "text-color": "#000000", - "icon-halo-blur": 1, - "icon-halo-color": "#ffffff", - "icon-halo-width": 1, - "icon-color": "#000000", - "text-halo-color": "#ffffff", - "text-halo-width": 1.25, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - } - } - }, - { - "id": "place-city-md-s", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 0, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "in", - "scalerank", - 3, - 4, - 5 - ], - [ - "in", - "type", - "city" - ], - [ - "in", - "ldir", - "S", - "SE", - "SW", - "E" - ] - ], - "layout": { - "visibility": "visible", - "text-field": "{name_en}", - "icon-image": "circle.sdf", - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "top" - ], - [ - 8, - "center" - ] - ] - }, - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - 0.1 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "text-size": { - "base": 0.9, - "stops": [ - [ - 5, - 12 - ], - [ - 12, - 22 - ] - ] - }, - "icon-size": 0.35 - }, - "paint": { - "text-halo-width": 1, - "text-halo-color": "#ffffff", - "text-color": "#000000", - "text-halo-blur": 1, - "icon-color": "#000000", - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - } - } - }, - { - "id": "place-city-md-n", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 0, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "in", - "scalerank", - 3, - 4, - 5 - ], - [ - "in", - "type", - "city" - ], - [ - "in", - "ldir", - "N", - "NE", - "NW", - "W" - ] - ], - "layout": { - "icon-image": "circle.sdf", - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "visibility": "visible", - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - -0.25 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "bottom" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 0.9, - "stops": [ - [ - 5, - 12 - ], - [ - 12, - 22 - ] - ] - }, - "icon-size": 0.35 - }, - "paint": { - "text-color": "#000000", - "icon-halo-blur": 1, - "icon-halo-color": "#ffffff", - "icon-halo-width": 1, - "icon-color": "#000000", - "text-halo-color": "#ffffff", - "text-halo-width": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 1 - } - }, - { - "id": "place-city-lg-s", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 1, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "<=", - "scalerank", - 2 - ], - [ - "in", - "type", - "city" - ], - [ - "in", - "ldir", - "S", - "SE", - "SW", - "E" - ] - ], - "layout": { - "icon-image": "circle.sdf", - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "visibility": "visible", - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - 0.15 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "top" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 0.9, - "stops": [ - [ - 4, - 12 - ], - [ - 10, - 22 - ] - ] - }, - "icon-size": 0.4 - }, - "paint": { - "text-color": "#000000", - "icon-halo-blur": 1, - "icon-halo-color": "#ffffff", - "icon-halo-width": 1, - "icon-color": "#000000", - "text-halo-color": "#ffffff", - "text-halo-width": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 1 - } - }, - { - "id": "place-city-lg-n", - "type": "symbol", - "source": "composite", - "source-layer": "place_label", - "minzoom": 1, - "maxzoom": 14, - "interactive": true, - "filter": [ - "all", - [ - "<=", - "scalerank", - 2 - ], - [ - "in", - "type", - "city" - ], - [ - "in", - "ldir", - "N", - "NE", - "NW", - "W" - ] - ], - "layout": { - "icon-image": "circle.sdf", - "text-font": { - "base": 1, - "stops": [ - [ - 7, - [ - "DIN Offc Pro Regular", - "Arial Unicode MS Regular" - ] - ], - [ - 8, - [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ] - ] - ] - }, - "visibility": "visible", - "text-offset": { - "base": 1, - "stops": [ - [ - 7.99, - [ - 0, - -0.25 - ] - ], - [ - 8, - [ - 0, - 0 - ] - ] - ] - }, - "text-anchor": { - "base": 1, - "stops": [ - [ - 7, - "bottom" - ], - [ - 8, - "center" - ] - ] - }, - "text-field": "{name_en}", - "text-max-width": 7, - "text-size": { - "base": 0.9, - "stops": [ - [ - 4, - 12 - ], - [ - 10, - 22 - ] - ] - }, - "icon-size": 0.4 - }, - "paint": { - "text-color": "#000000", - "icon-halo-blur": 1, - "icon-halo-color": "#ffffff", - "icon-halo-width": 1, - "text-opacity": 1, - "icon-color": "#000000", - "text-halo-color": "#ffffff", - "text-halo-width": 1, - "icon-opacity": { - "base": 1, - "stops": [ - [ - 7.99, - 1 - ], - [ - 8, - 0 - ] - ] - }, - "text-halo-blur": 1 - } - }, - { - "id": "marine-label-sm-ln", - "type": "symbol", - "source": "composite", - "source-layer": "marine_label", - "minzoom": 3, - "maxzoom": 10, - "interactive": true, - "filter": [ - "all", - [ - ">=", - "labelrank", - 4 - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "text-line-height": 1.1, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "visibility": "visible", - "text-field": "{name_en}", - "text-letter-spacing": 0.1, - "text-max-width": 5, - "symbol-spacing": { - "base": 1, - "stops": [ - [ - 4, - 100 - ], - [ - 6, - 400 - ] - ] - }, - "text-size": { - "base": 1, - "stops": [ - [ - 3, - 12 - ], - [ - 6, - 16 - ] - ] - } - }, - "paint": { - "text-color": "#c8e5f9" - } - }, - { - "id": "marine-label-sm-pt", - "type": "symbol", - "source": "composite", - "source-layer": "marine_label", - "minzoom": 3, - "maxzoom": 10, - "interactive": true, - "filter": [ - "all", - [ - ">=", - "labelrank", - 4 - ], - [ - "in", - "$type", - "Point" - ] - ], - "layout": { - "visibility": "visible", - "text-field": "{name_en}", - "text-max-width": 5, - "text-letter-spacing": 0.1, - "text-line-height": 1.5, - "symbol-placement": "point", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 3, - 12 - ], - [ - 6, - 16 - ] - ] - } - }, - "paint": { - "text-color": "#c8e5f9" - } - }, - { - "id": "marine-label-md-ln", - "type": "symbol", - "source": "composite", - "source-layer": "marine_label", - "minzoom": 2, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "in", - "labelrank", - 2, - 3 - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "text-line-height": 1.1, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "symbol-placement": "line", - "visibility": "visible", - "text-field": "{name_en}", - "text-letter-spacing": 0.15, - "text-max-width": 5, - "symbol-spacing": 250, - "text-size": { - "base": 1.1, - "stops": [ - [ - 2, - 12 - ], - [ - 5, - 20 - ] - ] - } - }, - "paint": { - "text-color": "#c8e5f9" - } - }, - { - "id": "marine-label-md-pt", - "type": "symbol", - "source": "composite", - "source-layer": "marine_label", - "minzoom": 2, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "in", - "labelrank", - 2, - 3 - ], - [ - "in", - "$type", - "Point" - ] - ], - "layout": { - "visibility": "visible", - "text-field": "{name_en}", - "text-max-width": 5, - "text-letter-spacing": 0.15, - "text-line-height": 1.5, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1.1, - "stops": [ - [ - 2, - 14 - ], - [ - 5, - 20 - ] - ] - } - }, - "paint": { - "text-color": "#c8e5f9" - } - }, - { - "id": "marine-label-lg-ln", - "type": "symbol", - "source": "composite", - "source-layer": "marine_label", - "minzoom": 1, - "maxzoom": 4, - "interactive": true, - "filter": [ - "all", - [ - "in", - "labelrank", - 1 - ], - [ - "in", - "$type", - "LineString" - ] - ], - "layout": { - "visibility": "visible", - "text-field": "{name_en}", - "text-max-width": 4, - "text-letter-spacing": 0.25, - "text-line-height": 1.1, - "symbol-placement": "line", - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 1, - 14 - ], - [ - 4, - 30 - ] - ] - } - }, - "paint": { - "text-color": "#c8e5f9" - } - }, - { - "id": "marine-label-lg-pt", - "type": "symbol", - "source": "composite", - "source-layer": "marine_label", - "minzoom": 1, - "maxzoom": 4, - "interactive": true, - "filter": [ - "all", - [ - "in", - "labelrank", - 1 - ], - [ - "in", - "$type", - "Point" - ] - ], - "layout": { - "visibility": "visible", - "text-field": "{name_en}", - "text-max-width": 4, - "text-letter-spacing": 0.25, - "text-line-height": 1.5, - "text-font": [ - "DIN Offc Pro Italic", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 1, - 14 - ], - [ - 4, - 30 - ] - ] - } - }, - "paint": { - "text-color": "#c8e5f9" - } - }, - { - "id": "state-label-sm", - "type": "symbol", - "source": "composite", - "source-layer": "state_label", - "minzoom": 3, - "maxzoom": 9, - "interactive": true, - "filter": [ - "all", - [ - "<", - "area", - 20000 - ] - ], - "layout": { - "text-allow-overlap": false, - "text-ignore-placement": false, - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "visibility": "visible", - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{abbr}" - ], - [ - 6, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.15, - "text-max-width": 5, - "text-size": { - "base": 1, - "stops": [ - [ - 6, - 10 - ], - [ - 9, - 14 - ] - ] - } - }, - "paint": { - "text-opacity": 1, - "text-color": "#242424", - "text-halo-color": "#ffffff", - "text-halo-width": 1 - } - }, - { - "id": "state-label-md", - "type": "symbol", - "source": "composite", - "source-layer": "state_label", - "minzoom": 3, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "<", - "area", - 80000 - ], - [ - ">=", - "area", - 20000 - ] - ], - "layout": { - "text-allow-overlap": false, - "text-ignore-placement": false, - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "visibility": "visible", - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{abbr}" - ], - [ - 5, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.15, - "text-max-width": 6, - "text-size": { - "base": 1, - "stops": [ - [ - 5, - 10 - ], - [ - 8, - 16 - ] - ] - } - }, - "paint": { - "text-opacity": 1, - "text-color": "#242424", - "text-halo-color": "#ffffff", - "text-halo-width": 1 - } - }, - { - "id": "state-label-lg", - "type": "symbol", - "source": "composite", - "source-layer": "state_label", - "minzoom": 3, - "maxzoom": 7, - "interactive": true, - "filter": [ - "all", - [ - ">=", - "area", - 80000 - ] - ], - "layout": { - "text-allow-overlap": false, - "text-ignore-placement": false, - "text-transform": "uppercase", - "text-font": [ - "DIN Offc Pro Bold", - "Arial Unicode MS Bold" - ], - "text-padding": 1, - "visibility": "visible", - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{abbr}" - ], - [ - 4, - "{name_en}" - ] - ] - }, - "text-letter-spacing": 0.15, - "text-max-width": 6, - "text-size": { - "base": 1, - "stops": [ - [ - 4, - 10 - ], - [ - 7, - 18 - ] - ] - } - }, - "paint": { - "text-opacity": 1, - "text-color": "#242424", - "text-halo-color": "#ffffff", - "text-halo-width": 1 - } - }, - { - "id": "country-label-sm", - "type": "symbol", - "source": "composite", - "source-layer": "country_label", - "minzoom": 1, - "maxzoom": 10, - "interactive": true, - "filter": [ - "all", - [ - ">=", - "scalerank", - 5 - ] - ], - "layout": { - "text-field": "{name_en}", - "visibility": "visible", - "text-max-width": 6, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 0.9, - "stops": [ - [ - 5, - 14 - ], - [ - 9, - 22 - ] - ] - } - }, - "paint": { - "text-color": "#000000", - "text-halo-color": { - "base": 1, - "stops": [ - [ - 2, - "rgba(255,255,255,0.75)" - ], - [ - 3, - "#ffffff" - ] - ] - }, - "text-halo-width": 1.25 - } - }, - { - "id": "country-label-md", - "type": "symbol", - "source": "composite", - "source-layer": "country_label", - "minzoom": 1, - "maxzoom": 8, - "interactive": true, - "filter": [ - "all", - [ - "in", - "scalerank", - 3, - 4 - ] - ], - "layout": { - "text-field": { - "base": 1, - "stops": [ - [ - 0, - "{code}" - ], - [ - 2, - "{name_en}" - ] - ] - }, - "visibility": "visible", - "text-max-width": 6, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 3, - 10 - ], - [ - 8, - 24 - ] - ] - } - }, - "paint": { - "text-color": "#000000", - "text-halo-color": { - "base": 1, - "stops": [ - [ - 2, - "rgba(255,255,255,0.75)" - ], - [ - 3, - "#ffffff" - ] - ] - }, - "text-halo-width": 1.25 - } - }, - { - "id": "country-label-lg", - "type": "symbol", - "source": "composite", - "source-layer": "country_label", - "minzoom": 1, - "maxzoom": 7, - "interactive": true, - "filter": [ - "all", - [ - "in", - "scalerank", - 1, - 2 - ] - ], - "layout": { - "text-field": "{name_en}", - "visibility": "visible", - "text-max-width": { - "base": 1, - "stops": [ - [ - 0, - 5 - ], - [ - 3, - 6 - ] - ] - }, - "text-font": [ - "DIN Offc Pro Medium", - "Arial Unicode MS Regular" - ], - "text-size": { - "base": 1, - "stops": [ - [ - 1, - 10 - ], - [ - 6, - 24 - ] - ] - } - }, - "paint": { - "text-color": "#000000", - "text-halo-color": { - "base": 1, - "stops": [ - [ - 2, - "rgba(255,255,255,0.75)" - ], - [ - 3, - "#ffffff" - ] - ] - }, - "text-halo-width": 1.25 - } - } - ], - "owner": "nicki", - "modified": "2015-05-07T16:43:40.332Z", - "created": "2015-05-07T16:00:16.592Z", - "id": "nicki.7bfc461f" -} diff --git a/platform/ios/benchmark/assets/tiles/download.sh b/platform/ios/benchmark/assets/tiles/download.sh deleted file mode 100755 index f44dda18fd6..00000000000 --- a/platform/ios/benchmark/assets/tiles/download.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env bash - -set -u - -LIST=( - # paris - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/11/1037/704.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/11/1037/705.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/11/1038/704.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/11/1038/705.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/11/1036/704.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/11/1037/703.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/11/1036/705.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/11/1038/703.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/11/1036/703.vector.pbf" - - # paris2 - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/13/4150/2819.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/13/4149/2819.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/13/4150/2818.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/13/4148/2819.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/13/4149/2818.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/13/4148/2818.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/13/4150/2820.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/13/4149/2820.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/13/4149/2817.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/13/4148/2817.vector.pbf" - - # alps - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/6/34/23.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/6/34/22.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/6/33/23.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/6/33/22.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/6/34/21.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/6/32/23.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/6/32/22.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/6/33/21.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/6/32/21.vector.pbf" - - # us east - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/5/9/12.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/5/8/12.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/5/9/13.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/5/8/13.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/5/9/11.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/5/7/12.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/5/8/11.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/5/7/13.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/5/7/11.vector.pbf" - - # greater la - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/9/88/204.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/9/88/205.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/9/89/204.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/9/89/205.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/9/87/204.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/9/88/203.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/9/87/205.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/9/89/203.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/9/87/203.vector.pbf" - - # sf - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/14/2621/6333.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/14/2620/6333.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/14/2621/6334.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/14/2620/6334.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/14/2621/6332.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/14/2619/6333.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/14/2620/6332.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/14/2619/6334.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/14/2619/6332.vector.pbf" - - # oakland - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/12/657/1582.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/12/657/1583.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/12/658/1582.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/12/658/1583.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/12/656/1582.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/12/657/1581.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/12/656/1583.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/12/658/1581.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/12/656/1581.vector.pbf" - - # germany - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/6/34/20.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/6/33/20.vector.pbf" - "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/6/32/20.vector.pbf" -) - -for OUTPUT in ${LIST[@]} ; do - if [ ! -f "${OUTPUT}" ] ; then - mkdir -p "`dirname "${OUTPUT}"`" - echo "Downloading tile '${OUTPUT}'" - curl -# "https://a.tiles.mapbox.com/v4/${OUTPUT}?access_token=${MAPBOX_ACCESS_TOKEN}" | gunzip > "${OUTPUT}" - fi -done diff --git a/platform/ios/benchmark/assets/tiles/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6.json b/platform/ios/benchmark/assets/tiles/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6.json deleted file mode 100644 index 371428d415e..00000000000 --- a/platform/ios/benchmark/assets/tiles/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6.json +++ /dev/null @@ -1 +0,0 @@ -{"attribution":"© Mapbox © OpenStreetMap Improve this map","bounds":[-180,-85.0511,180,85.0511],"center":[0,0,0],"format":"pbf","maxzoom":15,"minzoom":0,"name":"Mapbox Streets V6 + Vector Terrain V2","scheme":"xyz","tilejson":"2.0.0","tiles":["asset://tiles/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/{z}/{x}/{y}.vector.pbf"],"vector_layers":[{"description":"Generalized landcover classification","fields":{"class":"One of: wood, scrub, grass, crop, snow"},"id":"landcover","maxzoom":22,"minzoom":0,"source":"mapbox.mapbox-terrain-v2"},{"description":"","fields":{"class":"One of: shadow, highlight","level":"Brightness %. One of: 94, 90, 89, 78, 67, 56"},"id":"hillshade","maxzoom":22,"minzoom":0,"source":"mapbox.mapbox-terrain-v2"},{"description":"Elevation contour polygons","fields":{"ele":"Integer. The elevation of the contour in meters","index":"Indicator for every 2nd, 5th, or 10th contour. Coastlines are given -1. One of: 2, 5, 10, -1, null"},"id":"contour","maxzoom":22,"minzoom":0,"source":"mapbox.mapbox-terrain-v2"},{"description":"","fields":{"class":"One of: park, cemetery, hospital, school, industrial, parking, pitch, piste, agriculture, wood, scrub, grass, sand, rock, glacier","osm_id":"Unique OSM ID number","type":"OSM tag, more specific than class"},"id":"landuse","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"class":"One of: river, canal, stream, stream_intermittent, ditch, drain","osm_id":"Unique OSM ID number","type":"One of: river, canal, stream, ditch, drain"},"id":"waterway","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"osm_id":"Unique OSM ID number"},"id":"water","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"osm_id":"Unique OSM ID number","type":"One of: runway, taxiway, apron"},"id":"aeroway","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"class":"One of: fence, hedge, cliff, gate, land","osm_id":"Unique OSM ID number"},"id":"barrier_line","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"osm_id":"Unique OSM ID number"},"id":"building","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"class":"One of: wetland, wetland_noveg","osm_id":"Unique OSM ID number"},"id":"landuse_overlay","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"class":"One of: motorway, motorway_link, main, street, street_limited, service, driveway, path, major_rail, minor_rail","layer":"Number used for ordering overlapping tunnels. May be any integer, but most common values are -1 to -5","oneway":"Number. Oneway roads are 1, all others are 0","osm_id":"Unique OSM ID number","type":"The value of the tunnel's highway tag"},"id":"tunnel","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"class":"One of: motorway, motorway_link, main, street, street_limited, service, driveway, path, major_rail, minor_rail","oneway":"Number. Oneway roads are 1, all others are 0","osm_id":"Unique OSM ID number","type":"The value of the road's highway tag"},"id":"road","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"class":"One of: motorway, motorway_link, main, street, street_limited, service, driveway, path, major_rail, minor_rail, aerialway","layer":"Number used for ordering overlapping bridges. May be any integer, but most common values are 1 to 5","oneway":"Number. Oneway bridges are 1, all others are 0","osm_id":"Unique OSM ID number","type":"The value of the bridge's highway tag"},"id":"bridge","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"admin_level":"The OSM administrative level of the boundary. One of: 2, 3, 4","disputed":"Number. Disputed boundaries are 1, all others are 0","maritime":"Number. Maritime boundaries are 1, all others are 0"},"id":"admin","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"code":"ISO 3166-1 Alpha-2 code","name":"Local name of the country","name_de":"German name of the country","name_en":"English name of the country","name_es":"Spanish name of the country","name_fr":"French name of the country","name_ru":"Russian name of the country","name_zh":"Chinese name of the country","osm_id":"Unique OSM ID number","parent":"ISO 3166-1 Alpha-2 code of the administering/parent state, if any","scalerank":"Number, 1-6. Useful for styling text sizes","type":"One of: country, territory, disputed territory, sar"},"id":"country_label","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"labelrank":"Number, 1-6. Useful for styling text sizes","name":"Local or international name of the water body","name_de":"German name of the water body","name_en":"English name of the water body","name_es":"Spanish name of the water body","name_fr":"French name of the water body","name_ru":"Russian name of the water body","name_zh":"Chinese name of the water body","placement":"One of: point, line"},"id":"marine_label","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"abbr":"Abbreviated state name","area":"The area of the state in kilometers²","name":"Local name of the state","name_de":"German name of the state","name_en":"English name of the state","name_es":"Spanish name of the state","name_fr":"French name of the state","name_ru":"Russian name of the state","name_zh":"Chinese name of the state","osm_id":"Unique OSM ID number"},"id":"state_label","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"capital":"Admin level the city is a capital of, if any. One of: 2, 3, 4, null","ldir":"A hint for label placement at low zoom levels. One of: N, E, S, W, NE, SE, SW, NW, null","localrank":"Number. Priority relative to nearby places. Useful for limiting label density","name":"Local name of the place","name_de":"German name of the place","name_en":"English name of the place","name_es":"Spanish name of the place","name_fr":"French name of the place","name_ru":"Russian name of the place","name_zh":"Chinese name of the place","osm_id":"Unique OSM ID number","scalerank":"Number, 0-9 or null. Useful for styling text & marker sizes","type":"One of: city, town, village, hamlet, suburb, neighbourhood"},"id":"place_label","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"area":"The area of the water polygon in Mercator meters²","name":"Local name of the water body","name_de":"German name of the water body","name_en":"English name of the water body","name_es":"Spanish name of the water body","name_fr":"French name of the water body","name_ru":"Russian name of the water body","name_zh":"Chinese name of the water body","osm_id":"Unique OSM ID number"},"id":"water_label","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"address":"Street address of the POI","localrank":"Number. Priority relative to nearby POIs. Useful for limiting label density","maki":"The name of the Maki icon that should be used for the POI","name":"Local name of the POI","name_de":"German name of the POI","name_en":"English name of the POI","name_es":"Spanish name of the POI","name_fr":"French name of the POI","name_ru":"Russian name of the POI","name_zh":"Chinese name of the POI","network":"For rail stations, the network(s) that the station serves. Useful for icon styling","osm_id":"Unique OSM ID number","ref":"Short reference code, if any","scalerank":"Number. 1-4. Useful for styling icon sizes and minimum zoom levels","type":"The original OSM tag value","website":"URL of the POI"},"id":"poi_label","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"class":"One of: motorway, motorway_link, main, street, street_limited, service, driveway, path","len":"Number. Length of the road segment in Mercator meters","localrank":"Number. Used for shield points only. Priority relative to nearby shields. Useful for limiting shield density","name":"Local name of the road","name_de":"German name of the road","name_en":"English name of the road","name_es":"Spanish name of the road","name_fr":"French name of the road","name_ru":"Russian name of the road","name_zh":"Chinese name of the road","osm_id":"Unique OSM ID number","ref":"Route number of the road","reflen":"Number. How many characters long the ref tag is. Useful for shield styling","shield":"The shield style to use. One of: default, mx-federal, mx-state, us-highway, us-highway-alternate, us-highway-business, us-highway-duplex, us-interstate, us-interstate-business, us-interstate-duplex, us-interstate-truck, us-state"},"id":"road_label","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"class":"One of: river, canal, stream, stream_intermittent","name":"Local name of the waterway","name_de":"German name of the waterway","name_en":"English name of the waterway","name_es":"Spanish name of the waterway","name_fr":"French name of the waterway","name_ru":"Russian name of the waterway","name_zh":"Chinese name of the waterway","osm_id":"Unique OSM ID number","type":"One of: river, canal, stream"},"id":"waterway_label","source":"mapbox.mapbox-streets-v6"},{"description":"","fields":{"house_num":"House number","osm_id":"Unique OSM ID number"},"id":"housenum_label","source":"mapbox.mapbox-streets-v6"}]} diff --git a/platform/ios/benchmark/locations.cpp b/platform/ios/benchmark/locations.cpp deleted file mode 100644 index 9f53877e401..00000000000 --- a/platform/ios/benchmark/locations.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "locations.hpp" - -namespace mbgl { -namespace bench { - -const std::vector locations = { - { "paris", 2.3411, 48.8664, 11, 0.0 }, - { "paris2", 2.3516, 48.8356, 13, 273.8 }, - { "alps", 10.6107, 46.9599, 6, 0.0 }, - { "us east", -84.3395, 36.9400, 5, 0.0 }, - { "greater la", -117.9529, 34.0259, 9, 0.0 }, - { "sf", -122.4202, 37.7625, 14, 0.0 }, - { "oakland", -122.2328, 37.8267, 12, 0.0 }, - { "germany", 9.2280, 50.9262, 6, 0.0 }, -}; - -} -} diff --git a/platform/ios/benchmark/locations.hpp b/platform/ios/benchmark/locations.hpp deleted file mode 100644 index 1ea65d62803..00000000000 --- a/platform/ios/benchmark/locations.hpp +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include -#include - -namespace mbgl { -namespace bench { - -struct Location { - const std::string name; - const double longitude; - const double latitude; - const double zoom; - const double bearing; -}; - -extern const std::vector locations; - -} -} diff --git a/platform/ios/benchmark/main.m b/platform/ios/benchmark/main.m deleted file mode 100644 index 52bb4455525..00000000000 --- a/platform/ios/benchmark/main.m +++ /dev/null @@ -1,10 +0,0 @@ -#import - -#import "MBXBenchAppDelegate.h" - -int main(int argc, char * argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([MBXBenchAppDelegate class])); - } -} diff --git a/platform/ios/docs/guides/For Style Authors.md b/platform/ios/docs/guides/For Style Authors.md deleted file mode 100644 index d6259238fe2..00000000000 --- a/platform/ios/docs/guides/For Style Authors.md +++ /dev/null @@ -1,434 +0,0 @@ - -# Information for Style Authors - -A _style_ defines a map view’s content and appearance. If you’ve authored a -style using -[Mapbox Studio’s Styles editor](https://www.mapbox.com/studio/styles/) or as -JSON in a text editor, you can use that style in this SDK and manipulate it -afterwards in code. This document provides information you can use to ensure a -seamless transition from Mapbox Studio to your application. - -## Designing for iOS - -When designing your style, consider the context in which your application shows -the style. There are a number of considerations specific to iOS that may -not be obvious when designing your style in Mapbox Studio on the Web. A map view -is essentially a graphical user interface element, so many of same issues in -user interface design also apply when designing a map style. - -### Color - -Ensure sufficient contrast in your application’s user interface when your map -style is present. Standard user interface elements such as toolbars, sidebars, -and sheets often overlap the map view with a translucent, blurred background, so -make sure the contents of these elements remain legible with the map view -underneath. -The user location annotation view, the attribution button, any buttons in -callout views, and any items in the navigation bar are influenced by your -application’s tint color, so choose a tint color that contrasts well with your -map style. -If you intend your style to be used in the dark, consider the impact that Night -Shift may have on your style’s colors. - -### Typography and graphics - -Choose font and icon sizes appropriate to iOS devices. iPhones and iPads have -smaller screens than the typical browser window in which you would use Mapbox -Studio, especially when multitasking is enabled. Your user’s viewing distance -may be shorter than on a desktop computer. Some of your users may use the Larger -Dynamic Type and Accessibility Text features to increase the size of all text on -the device. You can use the -[runtime styling API](#manipulating-the-style-at-runtime) to adjust your style’s - font and icon sizes accordingly. - -Design sprite images and choose font weights that look crisp on both -standard-resolution displays and Retina displays. This SDK supports the same -resolutions as iOS. -Standard-resolution displays are limited to older devices that your application -may or may not support, depending on its minimum deployment target. - -Icon and text labels should be legible regardless of the map’s orientation. -By default, this SDK makes it easy for your users to rotate or tilt the map -using multitouch gestures. -If you do not intend your design to accommodate rotation and tilting, disable -these gestures using the `MGLMapView.rotateEnabled` and -`MGLMapView.pitchEnabled` properties, respectively, or the corresponding -inspectables in Interface Builder. - -### Interactivity - -Pay attention to whether elements of your style appear to be interactive. -A text label may look like a tappable button merely due to matching your -application’s tint color or the default blue tint color. -You can make an icon or text label interactive by installing a gesture -recognizer and performing feature querying (e.g., -`-[MGLMapView visibleFeaturesAtPoint:]`) to get details about the selected -feature. - -Make sure your users can easily distinguish any interactive elements from the -surrounding map, such as pins, the user location annotation view, or a route -line. Avoid relying on hover effects to indicate interactive elements. Leave -enough room between interactive elements to accommodate imprecise tapping -gestures. - -For more information about user interface design, consult Apple’s -[_iOS Human Interface Guidelines_](https://developer.apple.com/ios/human-interface-guidelines/). -To learn more about designing maps for mobile devices, see [Nathaniel Slaughter's blog post](https://www.mapbox.com/blog/designing-maps-for-mobile-devices/) on -the subject. - -## Applying your style - -You set an `MGLMapView` object’s style either in code, by setting the -`MGLMapView.styleURL` property, or in Interface Builder, by setting the “Style -URL” inspectable. The URL must point to a local or remote style JSON file. The -style JSON file format is defined by the -[Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/). This -SDK supports the functionality defined by version 8 of the specification unless -otherwise noted in the -[style specification documentation](https://www.mapbox.com/mapbox-gl-style-spec/). - -## Manipulating the style at runtime - -The _runtime styling API_ enables you to modify every aspect of a style -dynamically as a user interacts with your application. The style itself is -represented at runtime by an `MGLStyle` object, which provides access to various -`MGLSource` and `MGLStyleLayer` objects that represent content sources and style -layers, respectively. -For more information about the capabilities exposed by the runtime styling API, -see “[Runtime Styling](https://www.mapbox.com/ios-sdk/maps/overview/runtime-styling/)”. - -The names of runtime styling classes and properties on iOS are generally -consistent with the style specification and Mapbox Studio’s Styles editor. Any -exceptions are listed in this document. - -To avoid conflicts with Objective-C keywords or Cocoa terminology, this SDK uses -the following terms for concepts defined in the style specification: - -In the style specification | In the SDK ----------------------------|--------- -bounds | coordinate bounds -filter | predicate -function type | interpolation mode -id | identifier -image | style image -layer | style layer -property | attribute -SDF icon | template image -source | content source - -## Specifying the map’s content - -Each source defined by a style JSON file is represented at runtime by a content -source object that you can use to initialize new style layers. The content -source object is a member of one of the following subclasses of `MGLSource`: - -In style JSON | In the SDK ---------------|----------- -`vector` | `MGLVectorTileSource` -`raster` | `MGLRasterTileSource` -`raster-dem` | `MGLRasterDEMSource` -`geojson` | `MGLShapeSource` -`image` | `MGLImageSource` - -`canvas` and `video` sources are not supported. - -### Tile sources - -Raster and vector tile sources may be defined in TileJSON configuration files. -This SDK supports the properties defined in the style specification, which are a -subset of the keys defined in version 2.1.0 of the -[TileJSON](https://github.com/mapbox/tilejson-spec/tree/master/2.1.0) -specification. As an alternative to authoring a custom TileJSON file, you may -supply various tile source options when creating a raster or vector tile source. -These options are detailed in the `MGLTileSourceOption` documentation: - -In style JSON | In TileJSON | In the SDK ---------------|---------------|----------- -`url` | — | `configurationURL` parameter in `-[MGLTileSource initWithIdentifier:configurationURL:]` -`tiles` | `tiles` | `tileURLTemplates` parameter in `-[MGLTileSource initWithIdentifier:tileURLTemplates:options:]` -`minzoom` | `minzoom` | `MGLTileSourceOptionMinimumZoomLevel` -`maxzoom` | `maxzoom` | `MGLTileSourceOptionMaximumZoomLevel` -`bounds` | `bounds` | `MGLTileSourceOptionCoordinateBounds` -`tileSize` | — | `MGLTileSourceOptionTileSize` -`attribution` | `attribution` | `MGLTileSourceOptionAttributionHTMLString` (but consider specifying `MGLTileSourceOptionAttributionInfos` instead for improved security) -`scheme` | `scheme` | `MGLTileSourceOptionTileCoordinateSystem` -`encoding` | – | `MGLTileSourceOptionDEMEncoding` - -### Shape sources - -Shape sources also accept various options. These options are detailed in the -`MGLShapeSourceOption` documentation: - -In style JSON | In the SDK ------------------|----------- -`data` | `url` parameter in `-[MGLShapeSource initWithIdentifier:URL:options:]` -`maxzoom` | `MGLShapeSourceOptionMaximumZoomLevel` -`buffer` | `MGLShapeSourceOptionBuffer` -`tolerance` | `MGLShapeSourceOptionSimplificationTolerance` -`cluster` | `MGLShapeSourceOptionClustered` -`clusterRadius` | `MGLShapeSourceOptionClusterRadius` -`clusterMaxZoom` | `MGLShapeSourceOptionMaximumZoomLevelForClustering` -`lineMetrics` | `MGLShapeSourceOptionLineDistanceMetrics` - -To create a shape source from local GeoJSON data, first -[convert the GeoJSON data into a shape](working-with-geojson-data.html#converting-geojson-data-into-shape-objects), -then use the `-[MGLShapeSource initWithIdentifier:shape:options:]` method. - -### Image sources - -Image sources accept a non-axis aligned quadrilateral as their geographic coordinates. -These coordinates, in `MGLCoordinateQuad`, are described in counterclockwise order, -in contrast to the clockwise order defined in the style specification. - -## Configuring the map content’s appearance - -Each layer defined by the style JSON file is represented at runtime by a style -layer object, which you can use to refine the map’s appearance. The style layer -object is a member of one of the following subclasses of `MGLStyleLayer`: - -In style JSON | In the SDK ---------------|----------- -`background` | `MGLBackgroundStyleLayer` -`circle` | `MGLCircleStyleLayer` -`fill` | `MGLFillStyleLayer` -`fill-extrusion` | `MGLFillExtrusionStyleLayer` -`heatmap` | `MGLHeatmapStyleLayer` -`hillshade` | `MGLHillshadeStyleLayer` -`line` | `MGLLineStyleLayer` -`raster` | `MGLRasterStyleLayer` -`symbol` | `MGLSymbolStyleLayer` - -You configure layout and paint attributes by setting properties on these style -layer objects. The property names generally correspond to the style JSON -properties, except for the use of camelCase instead of kebab-case. Properties -whose names differ from the style specification are listed below: - -### Circle style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -`circle-pitch-scale` | `MGLCircleStyleLayer.circleScaleAlignment` | `MGLCircleStyleLayer.circleScaleAlignment` -`circle-translate` | `MGLCircleStyleLayer.circleTranslation` | `MGLCircleStyleLayer.circleTranslation` -`circle-translate-anchor` | `MGLCircleStyleLayer.circleTranslationAnchor` | `MGLCircleStyleLayer.circleTranslationAnchor` - -### Fill style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -`fill-antialias` | `MGLFillStyleLayer.fillAntialiased` | `MGLFillStyleLayer.isFillAntialiased` -`fill-translate` | `MGLFillStyleLayer.fillTranslation` | `MGLFillStyleLayer.fillTranslation` -`fill-translate-anchor` | `MGLFillStyleLayer.fillTranslationAnchor` | `MGLFillStyleLayer.fillTranslationAnchor` - -### Fill extrusion style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -`fill-extrusion-vertical-gradient` | `MGLFillExtrusionStyleLayer.fillExtrusionHasVerticalGradient` | `MGLFillExtrusionStyleLayer.fillExtrusionHasVerticalGradient` -`fill-extrusion-translate` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation` -`fill-extrusion-translate-anchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor` - -### Line style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -`line-dasharray` | `MGLLineStyleLayer.lineDashPattern` | `MGLLineStyleLayer.lineDashPattern` -`line-translate` | `MGLLineStyleLayer.lineTranslation` | `MGLLineStyleLayer.lineTranslation` -`line-translate-anchor` | `MGLLineStyleLayer.lineTranslationAnchor` | `MGLLineStyleLayer.lineTranslationAnchor` - -### Raster style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -`raster-brightness-max` | `MGLRasterStyleLayer.maximumRasterBrightness` | `MGLRasterStyleLayer.maximumRasterBrightness` -`raster-brightness-min` | `MGLRasterStyleLayer.minimumRasterBrightness` | `MGLRasterStyleLayer.minimumRasterBrightness` -`raster-hue-rotate` | `MGLRasterStyleLayer.rasterHueRotation` | `MGLRasterStyleLayer.rasterHueRotation` -`raster-resampling` | `MGLRasterStyleLayer.rasterResamplingMode` | `MGLRasterStyleLayer.rasterResamplingMode` - -### Symbol style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -`icon-allow-overlap` | `MGLSymbolStyleLayer.iconAllowsOverlap` | `MGLSymbolStyleLayer.iconAllowsOverlap` -`icon-ignore-placement` | `MGLSymbolStyleLayer.iconIgnoresPlacement` | `MGLSymbolStyleLayer.iconIgnoresPlacement` -`icon-image` | `MGLSymbolStyleLayer.iconImageName` | `MGLSymbolStyleLayer.iconImageName` -`icon-optional` | `MGLSymbolStyleLayer.iconOptional` | `MGLSymbolStyleLayer.isIconOptional` -`icon-rotate` | `MGLSymbolStyleLayer.iconRotation` | `MGLSymbolStyleLayer.iconRotation` -`icon-size` | `MGLSymbolStyleLayer.iconScale` | `MGLSymbolStyleLayer.iconScale` -`icon-keep-upright` | `MGLSymbolStyleLayer.keepsIconUpright` | `MGLSymbolStyleLayer.keepsIconUpright` -`text-keep-upright` | `MGLSymbolStyleLayer.keepsTextUpright` | `MGLSymbolStyleLayer.keepsTextUpright` -`text-max-angle` | `MGLSymbolStyleLayer.maximumTextAngle` | `MGLSymbolStyleLayer.maximumTextAngle` -`text-max-width` | `MGLSymbolStyleLayer.maximumTextWidth` | `MGLSymbolStyleLayer.maximumTextWidth` -`symbol-avoid-edges` | `MGLSymbolStyleLayer.symbolAvoidsEdges` | `MGLSymbolStyleLayer.symbolAvoidsEdges` -`text-field` | `MGLSymbolStyleLayer.text` | `MGLSymbolStyleLayer.text` -`text-allow-overlap` | `MGLSymbolStyleLayer.textAllowsOverlap` | `MGLSymbolStyleLayer.textAllowsOverlap` -`text-font` | `MGLSymbolStyleLayer.textFontNames` | `MGLSymbolStyleLayer.textFontNames` -`text-size` | `MGLSymbolStyleLayer.textFontSize` | `MGLSymbolStyleLayer.textFontSize` -`text-ignore-placement` | `MGLSymbolStyleLayer.textIgnoresPlacement` | `MGLSymbolStyleLayer.textIgnoresPlacement` -`text-justify` | `MGLSymbolStyleLayer.textJustification` | `MGLSymbolStyleLayer.textJustification` -`text-optional` | `MGLSymbolStyleLayer.textOptional` | `MGLSymbolStyleLayer.isTextOptional` -`text-rotate` | `MGLSymbolStyleLayer.textRotation` | `MGLSymbolStyleLayer.textRotation` -`text-writing-mode` | `MGLSymbolStyleLayer.textWritingModes` | `MGLSymbolStyleLayer.textWritingModes` -`icon-translate` | `MGLSymbolStyleLayer.iconTranslation` | `MGLSymbolStyleLayer.iconTranslation` -`icon-translate-anchor` | `MGLSymbolStyleLayer.iconTranslationAnchor` | `MGLSymbolStyleLayer.iconTranslationAnchor` -`text-translate` | `MGLSymbolStyleLayer.textTranslation` | `MGLSymbolStyleLayer.textTranslation` -`text-translate-anchor` | `MGLSymbolStyleLayer.textTranslationAnchor` | `MGLSymbolStyleLayer.textTranslationAnchor` - -## Setting attribute values - -Each property representing a layout or paint attribute is set to an -`NSExpression` object. `NSExpression` objects play the same role as -[expressions in the Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions), -but you create the former using a very different syntax. `NSExpression`’s format -string syntax is reminiscent of a spreadsheet formula or an expression in a -database query. See the -“[Predicates and Expressions](predicates-and-expressions.html)” guide for an -overview of the expression support in this SDK. This SDK no longer supports -style functions; use expressions instead. - -### Constant values in expressions - -In contrast to the JSON type that the style specification defines for each -layout or paint property, the style value object often contains a more specific -Foundation or Cocoa type. General rules for attribute types are listed below. -Pay close attention to the SDK documentation for the attribute you want to get -or set. - -In style JSON | In Objective-C | In Swift ---------------|-----------------------|--------- -Color | `UIColor` | `UIColor` -Enum | `NSString` | `String` -String | `NSString` | `String` -Boolean | `NSNumber.boolValue` | `NSNumber.boolValue` -Number | `NSNumber.floatValue` | `NSNumber.floatValue` -Array (`-dasharray`) | `NSArray` | `[Float]` -Array (`-font`) | `NSArray` | `[String]` -Array (`-offset`, `-translate`) | `NSValue.CGVectorValue` | `NSValue.cgVectorValue` -Array (`-padding`) | `NSValue.UIEdgeInsetsValue` | `NSValue.uiEdgeInsetsValue` - -For padding attributes, note that the arguments to -`UIEdgeInsetsMake()` in Objective-C and `UIEdgeInsets(top:left:bottom:right:)` -in Swift -are specified in counterclockwise order, in contrast to the clockwise order -defined by the style specification. - -### Expression operators - -Many expression operators defined in the style specification have corresponding -symbols to be used with the `+[NSExpression expressionWithFormat:]`, -`+[NSExpression expressionForFunction:arguments:]`, or -`+[NSExpression expressionForFunction:selectorName:arguments:]` method: - -In style specification | Method, function, or predicate type | Format string syntax ------------------------|-------------------------------------|--------------------- -`array` | | -`boolean` | | -`collator` | `NSComparisonPredicateOptions` | `'Québec' =[cd] 'QUEBEC'` -`literal` | `+[NSExpression expressionForConstantValue:]` | `%@` representing `NSArray` or `NSDictionary` -`number` | | -`string` | | -`to-boolean` | `boolValue` | -`to-color` | | `CAST(var, 'UIColor')` -`to-number` | `mgl_numberWithFallbackValues:` | `CAST(zipCode, 'NSNumber')` -`to-string` | `stringValue` | `CAST(ele, 'NSString')` -`typeof` | | -`geometry-type` | `NSExpression.geometryTypeVariableExpression` | `$geometryType` -`id` | `NSExpression.featureIdentifierVariableExpression` | `$featureIdentifier` -`properties` | `NSExpression.featureAttributesVariableExpression` | `$featureAttributes` -`at` | `objectFrom:withIndex:` | `array[n]` -`get` | `+[NSExpression expressionForKeyPath:]` | Key path -`has` | `mgl_does:have:` | `mgl_does:have:(self, 'key')` -`length` | `count:` | `count({1, 2, 2, 3, 4, 7, 9})` -`!` | `NSNotPredicateType` | `NOT (p0 OR … OR pn)` -`!=` | `NSNotEqualToPredicateOperatorType` | `key != value` -`<` | `NSLessThanPredicateOperatorType` | `key < value` -`<=` | `NSLessThanOrEqualToPredicateOperatorType` | `key <= value` -`==` | `NSEqualToPredicateOperatorType` | `key == value` -`>` | `NSGreaterThanPredicateOperatorType` | `key > value` -`>=` | `NSGreaterThanOrEqualToPredicateOperatorType` | `key >= value` -`all` | `NSAndPredicateType` | `p0 AND … AND pn` -`any` | `NSOrPredicateType` | `p0 OR … OR pn` -`case` | `+[NSExpression expressionForConditional:trueExpression:falseExpression:]` or `MGL_IF` or `+[NSExpression mgl_expressionForConditional:trueExpression:falseExpresssion:]` | `TERNARY(1 = 2, YES, NO)` or `MGL_IF(1 = 2, YES, 2 = 2, YES, NO)` -`coalesce` | `mgl_coalesce:` | `mgl_coalesce({x, y, z})` -`match` | `MGL_MATCH` or `+[NSExpression mgl_expressionForMatchingExpression:inDictionary:defaultExpression:]` | `MGL_MATCH(x, 0, 'zero match', 1, 'one match', 'two match', 'default')` -`interpolate` | `mgl_interpolate:withCurveType:parameters:stops:` or `+[NSExpression mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` | -`step` | `mgl_step:from:stops:` or `+[NSExpression mgl_expressionForSteppingExpression:fromExpression:stops:]` | -`let` | `mgl_expressionWithContext:` | `MGL_LET('ios', 11, 'macos', 10.13, $ios + $macos)` -`var` | `+[NSExpression expressionForVariable:]` | `$variable` -`concat` | `mgl_join:` or `-[NSExpression mgl_expressionByAppendingExpression:]` | `mgl_join({'Old', ' ', 'MacDonald'})` -`downcase` | `lowercase:` | `lowercase('DOWNTOWN')` -`upcase` | `uppercase:` | `uppercase('Elysian Fields')` -`rgb` | `+[UIColor colorWithRed:green:blue:alpha:]` | -`rgba` | `+[UIColor colorWithRed:green:blue:alpha:]` | -`to-rgba` | | `CAST(noindex(var), 'NSArray')` -`-` | `from:subtract:` | `2 - 1` -`*` | `multiply:by:` | `1 * 2` -`/` | `divide:by:` | `1 / 2` -`%` | `modulus:by:` | -`^` | `raise:toPower:` | `2 ** 2` -`+` | `add:to:` | `1 + 2` -`abs` | `abs:` | `abs(-1)` -`acos` | `mgl_acos:` | `mgl_acos(1)` -`asin` | `mgl_asin:` | `mgl_asin(0)` -`atan` | `mgl_atan:` | `mgl_atan(20)` -`ceil` | `ceiling:` | `ceiling(0.99999)` -`cos` | `mgl_cos:` | `mgl_cos(0)` -`e` | | `%@` representing `NSNumber` containing `M_E` -`floor` | `floor:` | `floor(-0.99999)` -`ln` | `ln:` | `ln(2)` -`ln2` | | `%@` representing `NSNumber` containing `M_LN2` -`log10` | `log:` | `log(1)` -`log2` | `mgl_log2:` | `mgl_log2(1024)` -`max` | `max:` | `max({1, 2, 2, 3, 4, 7, 9})` -`min` | `min:` | `min({1, 2, 2, 3, 4, 7, 9})` -`pi` | | `%@` representing `NSNumber` containing `M_PI` -`round` | `mgl_round:` | `mgl_round(1.5)` -`sin` | `mgl_sin:` | `mgl_sin(0)` -`sqrt` | `sqrt:` | `sqrt(2)` -`tan` | `mgl_tan:` | `mgl_tan(0)` -`zoom` | `NSExpression.zoomLevelVariableExpression` | `$zoomLevel` -`heatmap-density` | `NSExpression.heatmapDensityVariableExpression` | `$heatmapDensity` -`line-progress` | `NSExpression.lineProgressVariableExpression` | `$lineProgress` -`format` | `+[NSExpression mgl_expressionForAttributedExpressions:]` or `mgl_attributed:` | `mgl_attributed({x, y, z})` - -For operators that have no corresponding `NSExpression` symbol, use the -`MGL_FUNCTION()` format string syntax. - -## Filtering sources - -You can filter a shape or vector tile source by setting the -`MGLVectorStyleLayer.predicate` property to an `NSPredicate` object. Below is a -table of style JSON operators and the corresponding operators used in the -predicate format string: - -In style JSON | In the format string ---------------------------|--------------------- -`["has", key]` | `key != nil` -`["!has", key]` | `key == nil` -`["==", key, value]` | `key == value` -`["!=", key, value]` | `key != value` -`[">", key, value]` | `key > value` -`[">=", key, value]` | `key >= value` -`["<", key, value]` | `key < value` -`["<=", key, value]` | `key <= value` -`["in", key, v0, …, vn]` | `key IN {v0, …, vn}` -`["!in", key, v0, …, vn]` | `NOT key IN {v0, …, vn}` -`["all", f0, …, fn]` | `p0 AND … AND pn` -`["any", f0, …, fn]` | `p0 OR … OR pn` -`["none", f0, …, fn]` | `NOT (p0 OR … OR pn)` - -## Specifying the text format - -The following format attributes are defined as `NSString` constans that you -can use to update the formatting of `MGLSymbolStyleLayer.text` property. - -In style JSON | In Objective-C | In Swift ---------------|-----------------------|--------- -`text-font` | `MGLFontNamesAttribute` | `.fontNamesAttribute` -`font-scale` | `MGLFontScaleAttribute` | `.fontScaleAttribute` -`text-color` | `MGLFontColorAttribute` | `.fontColorAttribute` - -See the “[Predicates and Expressions](predicates-and-expressions.html)” guide for -a full description of the supported operators and operand types. diff --git a/platform/ios/docs/guides/Gesture Recognizers.md b/platform/ios/docs/guides/Gesture Recognizers.md deleted file mode 100644 index 26237e3cfa2..00000000000 --- a/platform/ios/docs/guides/Gesture Recognizers.md +++ /dev/null @@ -1,38 +0,0 @@ -# User Interactions - -The Mapbox Maps SDK for iOS provides a set of built-in gesture recognizers. You can customize or supplement these gestures according to your use case. You see what gesture recognizers are on your `MGLMapView` by accessing the `gestureRecognizers` property on your map. - -## Configuring user interaction - -Several properties on an `MGLMapView` provide ways to enable or disable a set of gesture recognizers. Boolean values are set to `YES` by default. - -- `zoomEnabled` - Allows the user to zoom in or out by pinching two fingers, double-tapping, tapping with two fingers, or double-tapping then dragging vertically. Accepts Boolean values. -- `scrollEnabled` - Allows the user to scroll by dragging or swiping one finger. Accepts Boolean values. -- `rotateEnabled` - Allows the user to rotate by moving two fingers in a circular motion. Accepts Boolean values. -- `pitchEnabled` - Allows the user to tilt the map by vertically dragging two fingers. Accepts Boolean values. -- `decelerationRate` - Determines the rate of deceleration after the user lifts their finger. You can set the value using the `MGLMapViewDecelerationRateNormal`, `MGLMapViewDecelerationRateFast`, or `MGLMapViewDecelerationRateImmediate` constants. - -## Individual gestures - -|Gesture | Description | Related Property | -|:-------:|----------------| -----------| -|Pinch | Zooms in or out on the map's anchor point | `zoomEnabled` | -|Rotation | Changes the MGLMapView direction based on the user rotating two fingers in a circular motion | `rotateEnabled` | -|Single tap | Selects/deselects the annotation that you tap. | | -|Double tap | Zooms in on the map's anchor point | `zoomEnabled` | -|Two-finger tap | Zooms out with the map's anchor point centered | `zoomEnabled` | -|Pan | Scrolls across mapView (_note: if_ `MGLUserTrackingModeFollow` _is being used, it will be disabled once the user pans_)| `scrollEnabled` | -|Two-finger drag | Adjusts the pitch of the `MGLMapView` | `pitchEnabled` | -|One-finger zoom | Tap twice; on second tap, hold your finger on the map and pan up to zoom in, or down to zoom out | `zoomEnabled`| - -![quick zoom](img/user-interaction/quickzoom.gif) ![rotation](img/user-interaction/RotateSydney.gif) - -## Adding custom gesture recognizers - -You can add `UIGestureRecognizers` to your map programmatically or via storyboard. Adding custom responses to gesture recognizers can enhance your user's experience, but try to use standard gestures where possible. - -The gesture recognizers that you add will take priority over the built-in gesture recognizer. You can also set up your own gesture recognizer to work simultaneously with built-in gesture recognizers by using `-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:`, allowing you to enhance already existing gesture recognizers. - -You can also add gesture recognizers that are only called when the default gesture recognizer fails (and vice versa), such as when a user taps on a part of the map that is not an annotation. The documentation for [MGLMapView](Classes/MGLMapView.html) includes an example of how to create a fallback gesture recognizer. - -If you would like to disable a specific set of gesture recognizers, such as zoom, you can set the Boolean value for the appropriate property to `NO`. You can then add your own gesture recognizers to perform those actions. diff --git a/platform/ios/docs/guides/Info.plist Keys.md b/platform/ios/docs/guides/Info.plist Keys.md deleted file mode 100644 index 6322b42dc16..00000000000 --- a/platform/ios/docs/guides/Info.plist Keys.md +++ /dev/null @@ -1,42 +0,0 @@ -# Info.plist Keys - -The Mapbox Maps SDK for iOS supports custom `Info.plist` keys in your application in order to configure various settings. - -## MGLMapboxAccessToken - -Set the [Mapbox access token](https://www.mapbox.com/help/define-access-token/) to be used by all instances of `MGLMapView` in the current application. - -Mapbox-hosted vector tiles and styles require an API access token, which you can obtain from the [Mapbox account page](https://www.mapbox.com/studio/account/tokens/). Access tokens associate requests to Mapbox’s vector tile and style APIs with your Mapbox account. They also deter other developers from using your styles without your permission. - -As an alternative, you can use `MGLAccountManager.accessToken` to set a token in code. See [our guide](https://www.mapbox.com/help/ios-private-access-token/) for some tips on keeping access tokens in open source code private. - -## MGLMapboxAPIBaseURL - -Use this key if you need to customize the API base URL used throughout the SDK. If unset, the default Mapbox API is used. - -The default value is `https://api.mapbox.com`. - -## MGLMapboxMetricsEnabledSettingShownInApp - -If you have implemented custom opt-out of Mapbox Telemetry within the user interface of your app, use this key to disable the built-in check for opt-out support. See [this guide](https://docs.mapbox.com/help/how-mapbox-works/attribution/#mapbox-maps-sdk-for-ios) for more details. - -## MGLIdeographicFontFamilyName - -The name of the font family to use for client-side text rendering of CJK ideographs. - -Set `MGLIdeographicFontFamilyName` in your containing application's Info.plist to font family name(s) that will be available at run time, such as “PingFang TC” or “Marker Felt”. This plist key accepts: - -- A string value of a single font family name. - -- An array of font family names. Fonts will be used in the defined order, eventually falling back to default system font if none are available. - -- A boolean value `NO` to disable client-side rendering of CJK glyphs — remote fonts specified in your style will be used instead. - -## MGLCollisionBehaviorPre4_0 - - If this key is set to YES (`true`), collision detection is performed only between symbol style layers based on the same source, as in versions 2.0–3.7 of the Mapbox Maps SDK for iOS. In other words, symbols in an `MGLSymbolStyleLayer` based on one source (for example, an `MGLShapeSource`) may overlap with symbols in another layer that is based on a different source (such as the Mapbox Streets source). This is the case regardless of the `MGLSymbolStyleLayer.iconAllowsOverlap`, `MGLSymbolStyleLayer.iconIgnoresPlacement`, `MGLSymbolStyleLayer.textAllowsOverlap`, and `MGLSymbolStyleLayer.textIgnoresPlacement` properties. - -Beginning in version 4.0, the SDK also performs collision detection between style layers based on different sources by default. For the default behavior, omit the `MGLCollisionBehaviorPre4_0` key or set it to NO (`false`). - -This property may also be set using `[[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:@"MGLCollisionBehaviorPre4_0"]`; it will override any value specified in the `Info.plist`. - diff --git a/platform/ios/docs/guides/Migrating to Expressions.md b/platform/ios/docs/guides/Migrating to Expressions.md deleted file mode 100644 index d92aab0ffcd..00000000000 --- a/platform/ios/docs/guides/Migrating to Expressions.md +++ /dev/null @@ -1,266 +0,0 @@ - - -# Migrating from Style Functions to Expressions - -[Runtime Styling](https://www.mapbox.com/ios-sdk/maps/overview/runtime-styling/) enables you to modify every aspect of the map’s appearance dynamically as a user interacts with your application. Developers can specify in advance how a layout or paint attribute will vary as the zoom level changes or how the appearance of individual features vary based on metadata provided by a content source. - -With Mapbox Maps SDK for iOS v4.0.0, style functions have been replaced with expressions. These provide even more tools for developers who want to style their maps dynamically. This guide outlines some tips for migrating from style functions to expressions, and offers an overview of some things that developers can do with expressions. - -An expression is represented at runtime by the `NSExpression` class. Expressions can be used to style paint and layout properties based on zoom level, data attributes, or a combination of the two. - -A constant expression can also be assigned to a style property. For example, the opacity of a fill style layer can be set to a constant value between 0 and 1. - -The documentation for each individual style layer property notes which non-constant expressions are enabled for that property. Style functions supported four interpolation modes: exponential, interval, categorical, and identity. - -This guide uses earthquake data from the [U.S. Geological Survey](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php). Under each interpolation mode, the style function implementation will be shown, followed by the current syntax. - -For more information about how to work with GeoJSON data in our iOS SDK, please see our [working with GeoJSON data](working-with-geojson-data.html) guide. To learn more about supported expressions, see our ["Predicates and Expressions"](predicates-and-expressions.html) guide. The "Predicates and Expressions" guide also outlines Mapbox custom functions that can be used to dynamically style a map. - -## Stops -Stops are dictionary keys that are associated with layer attribute values. Constant values no longer need to be wrapped as style values when they are values in a stops dictionary. - - -Style function syntax: - -```swift -let stops = [ - 0: MGLStyleValue(rawValue: .yellow), - 2.5: MGLStyleValue(rawValue: .orange), - 5: MGLStyleValue(rawValue: .red), - 7.5: MGLStyleValue(rawValue: .blue), - 10: MGLStyleValue(rawValue: .white), -] -``` - -Current syntax: -```swift -let stops: [NSNumber: UIColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, -] -``` - - -## Interpolation mode - -Style functions supported four interpolation modes: exponential/linear, interval, categorical, and identity. For more information about supported custom expressions, please see the "Predicates and Expressions" guide. - -### Linear - -`+[NSExpression(MGLAdditions) mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` takes the interpolation type as a parameter. If you previously used the default interpolation base, use the curve type `MGLExpressionInterpolationMode.linear`. See the [`mgl_interpolate:withCurveType:parameters:stops:`](predicates-and-expressions.html#code-mgl_interpolate-withcurvetype-parameters-stops-code) documentation for more details. - -The stops dictionary below, shows colors that continuously shift from yellow to orange to red to blue to white based on the attribute value. - -Style function syntax: - -```swift -let url = URL(string: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson")! -let symbolSource = MGLSource(identifier: "source") -let symbolLayer = MGLSymbolStyleLayer(identifier: "place-city-sm", source: symbolSource) - -let source = MGLShapeSource(identifier: "earthquakes", url: url, options: nil) -mapView.style?.addSource(source) - -let stops = [ - 0: MGLStyleValue(rawValue: .yellow), - 2.5: MGLStyleValue(rawValue: .orange), - 5: MGLStyleValue(rawValue: .red), - 7.5: MGLStyleValue(rawValue: .blue), - 10: MGLStyleValue(rawValue: .white), -] - -let layer = MGLCircleStyleLayer(identifier: "circles", source: source) -layer.circleColor = MGLStyleValue(interpolationMode: .exponential, - sourceStops: stops, - attributeName: "mag", - options: [.defaultValue: MGLStyleValue(rawValue: .green)]) -layer.circleRadius = MGLStyleValue(rawValue: 10) -mapView.style?.insertLayer(layer, below: symbolLayer) -``` - -Current syntax: - -```swift -let url = URL(string: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson")! -let symbolSource = MGLSource(identifier: "source") -let symbolLayer = MGLSymbolStyleLayer(identifier: "place-city-sm", source: symbolSource) - -let source = MGLShapeSource(identifier: "earthquakes", url: url, options: nil) -mapView.style?.addSource(source) - -let stops: [NSNumber: UIColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, -] - -let layer = MGLCircleStyleLayer(identifier: "circles", source: source) -layer.circleColor = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(mag, 'linear', nil, %@)", - stops) -layer.circleRadius = NSExpression(forConstantValue: 10) -mapView.style?.insertLayer(layer, below: symbolLayer) -``` - -### Exponential - -If you previously used an interpolation base greater than `0` (other than `1`), you can use `MGLExpressionInterpolationMode.exponential` as the curve type for `+[NSExpression(MGLAdditions) mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` or `'exponential'` as the curve type for [`mgl_interpolate:withCurveType:parameters:stops:`](predicates-and-expressions.html#code-mgl_interpolate-withcurvetype-parameters-stops-code). The `parameters` argument takes that interpolation base. This interpolates between values exponentially, creating an accelerated ramp effect. - -Here’s a visualization from Mapbox Studio (see [Mapbox Studio and iOS](https://www.mapbox.com/ios-sdk/maps/overview/mapbox-studio/)) comparing interpolation base values of `1.5` and `0.5` based on zoom. In order to convert camera style functions, use `$zoomLevel` or `MGL_FUNCTION('zoomLevel')` as the attribute key. - - - - -The example below increases a layer’s `circleRadius` exponentially based on a map’s zoom level. The interpolation base is `1.5`. - -Style function syntax: - -```swift -let stops = [ - 12: MGLStyleValue(rawValue: 0.5), - 14: MGLStyleValue(rawValue: 2), - 18: MGLStyleValue(rawValue: 18), -] - -layer.circleRadius = MGLStyleValue(interpolationMode: .exponential, - cameraStops: stops, - options: [.interpolationBase: 1.5]) -``` - -Current syntax: - -```swift -let stops = [ - 12: 0.5, - 14: 2, - 18: 18, -] - -layer.circleRadius = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.5, %@)", - stops) -``` - -### Interval - -Steps, or intervals, create a range using the keys from the stops dictionary. The range is from the given key to just less than the next key. The attribute values that fall into that range are then styled using the layout or paint value assigned to that key. You can use the `+[NSExpression(MGLAdditions) mgl_expressionForSteppingExpression:fromExpression:stops:]` method or the custom function [`mgl_step:from:stops:`](predicates-and-expressions.html#code-mgl_step-from-stops-code) for cases where you previously used interval interpolation mode. The first parameter takes the feature attribute name and the second parameter (`from:`) optionally takes the default or fallback value for that function. The final parameter takes a stops dictionary as an argument. - -When we use the stops dictionary given above with an `'mgl_step:from:stops:'`, we create ranges where earthquakes with a magnitude of 0 to just less than 2.5 would be yellow, 2.5 to just less than 5 would be orange, and so on. - -Style function syntax: - -```swift -let stops = [ - 0: MGLStyleValue(rawValue: .yellow), - 2.5: MGLStyleValue(rawValue: .orange), - 5: MGLStyleValue(rawValue: .red), - 7.5: MGLStyleValue(rawValue: .blue), - 10: MGLStyleValue(rawValue: .white), -] - -layer.circleColor = MGLStyleValue(interpolationMode: .interval, - sourceStops: stops, - attributeName: "mag", - options: [.defaultValue: MGLStyleValue(rawValue: .green)]) -```` - -Current syntax: - -```swift -let stops: [NSNumber: UIColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, -] - -layer.circleColor = NSExpression(format: "mgl_step:from:stops:(mag, %@, %@)", - UIColor.green, stops) -``` - -### Categorical - -Categorical interpolation mode took a stops dictionary. If the value for a specified feature attribute name matched one in that stops dictionary, the style value for that attribute value would be used. Categorical style functions can now be replaced with `MGL_MATCH`. - -`MGL_MATCH` takes an initial condition, which in this case is an attribute key. This is followed by possible matches for that key and the value to assign to the layer property if there is a match. The final argument can be a default style value that is to be used if none of the specified values match. - -There are three main types of events in the USGS dataset: earthquakes, explosions, and quarry blasts. In this case, the color of the circle layer will be determined by the type of event, with a default value of blue to catch any events that do not fall into any of those categories. - -Style function syntax: - -```swift -let categoricalStops = [ - "earthquake": MGLStyleValue(rawValue: .orange), - "explosion": MGLStyleValue(rawValue: .red), - "quarry blast": MGLStyleValue(rawValue: .yellow), -] - -layer.circleColor = MGLStyleValue(interpolationMode: .categorical, - sourceStops: categoricalStops, - attributeName: "type", - options: [.defaultValue: MGLStyleValue(rawValue: .blue)]) -``` - -Current syntax: -```swift -let defaultColor = UIColor.blue -layer.circleColor = NSExpression(format: "MGL_MATCH(type, 'earthquake', %@, 'explosion', %@, 'quarry blast', %@, %@)", - UIColor.orange, UIColor.red, UIColor.yellow, defaultColor) -``` - -If your use case does not require a default value, you can either apply a predicate to your layer prior to styling it, or use the format string `"valueForKeyPath:"`. - -### Identity - -Identity interpolation mode used the attribute’s value as the style layer property value. In this example, you might set the `circleRadius` to the earthquake’s magnitude. In order to use a feature attribute value to style a layer property, set the property value to `[NSExpression expressionForKeyPath:]`, which take the feature attribute name as an argument. - -Style function syntax: - -```swift -layer.circleRadius = MGLStyleValue(interpolationMode: .identity, - sourceStops: nil, - attributeName: "mag", - options: [.defaultValue: MGLStyleValue(rawValue: 0)]) -``` - -Current syntax: -```swift -layer.circleRadius = NSExpression(forKeyPath: "mag") -``` - -![identity mode](img/data-driven-styling/identity.png) - -Some built-in functions can be applied to attribute values to style layer property values. To set the circle radius to three times the earthquake’s magnitude, create a `multiply:by:` function that takes the attribute value and the multiplier as arguments, or use a format string. - -```swift -layer.circleRadius = NSExpression(forFunction: "multiply:by:", arguments: [NSExpression(forKeyPath: "mag"), 3]) -``` - -![multiply magnitude](img/data-driven-styling/multiply.png) - -You can also cast attribute values in order to use them. One example is to cast an integer as an `NSString` and use it as a text value. - -```swift -let magnitudeLayer = MGLSymbolStyleLayer(identifier: "mag-layer", source: source) -magnitudeLayer.text = NSExpression(format: "CAST(mag, 'NSString')") -mapView.style?.addLayer(magnitudeLayer) -``` - -![cast a value](img/data-driven-styling/cast.png) - -### Constant Values - -For constant values that do not necessarily change based on camera or attribute values, use `[NSExpression expressionForConstantValue:]` (previously `[MGLStyleValue valueWithRawValue:]`). - -## Resources - -* [USGS Earthquake Feed](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php) -* [For Style Authors](for-style-authors.html) -* [Predicates and Expressions](predicates-and-expressions.html) diff --git a/platform/ios/docs/guides/Tile URL Templates.md b/platform/ios/docs/guides/Tile URL Templates.md deleted file mode 100644 index 4c8064f7818..00000000000 --- a/platform/ios/docs/guides/Tile URL Templates.md +++ /dev/null @@ -1,99 +0,0 @@ - -# Tile URL Templates - -`MGLTileSource` objects, specifically `MGLRasterTileSource` and -`MGLVectorTileSource` objects, can be created using an initializer that accepts -an array of tile URL templates. Tile URL templates are strings that specify the -URLs of the vector tiles or raster tile images to load. A template resembles an -absolute URL, but with any number of placeholder strings that the source -evaluates based on the tile it needs to load. For example: - -* `http://www.example.com/tiles/{z}/{x}/{y}.pbf` could be - evaluated as `http://www.example.com/tiles/14/6/9.pbf`. -* `http://www.example.com/tiles/{z}/{x}/{y}{ratio}.png` could be - evaluated as `http://www.example.com/tiles/14/6/9@2x.png`. - -Tile URL templates are also used to define tilesets in TileJSON manifests or -[`raster`](https://www.mapbox.com/mapbox-gl-js/style-spec/#sources-raster-tiles) -and -[`vector`](https://www.mapbox.com/mapbox-gl-js/style-spec/#sources-vector-tiles) -sources in style JSON files. See the -[TileJSON specification](https://github.com/mapbox/tilejson-spec/tree/master/2.2.0) -for information about tile URL templates in the context of a TileJSON or style -JSON file. - -Tile sources support the following placeholder strings in tile URL templates, -all of which are optional: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Placeholder stringDescription
{x}The index of the tile along the map’s x axis according to Spherical - Mercator projection. If the value is 0, the tile’s left edge corresponds - to the 180th meridian west. If the value is 2z−1, - the tile’s right edge corresponds to the 180th meridian east.
{y}The index of the tile along the map’s y axis according to Spherical - Mercator projection. If the value is 0, the tile’s tile edge corresponds - to arctan(sinh(π)), or approximately 85.0511 degrees north. If the value - is 2z−1, the tile’s bottom edge corresponds to - −arctan(sinh(π)), or approximately 85.0511 degrees south. The y axis is - inverted if the options parameter contains - MGLTileSourceOptionTileCoordinateSystem with a value of - MGLTileCoordinateSystemTMS.
{z}The tile’s zoom level. At zoom level 0, each tile covers the entire - world map; at zoom level 1, it covers ¼ of the world; at zoom level 2, - 1⁄16 of the world, and so on. For tiles loaded by - a MGLRasterTileSource object, whether the tile zoom level - matches the map’s current zoom level depends on the value of the - source’s tile size as specified in the - MGLTileSourceOptionTileSize key of the options - parameter.
{bbox-epsg-3857}The tile’s bounding box, expressed as a comma-separated list of the - tile’s western, southern, eastern, and northern extents according to - Spherical Mercator (EPSG:3857) projection. The bounding box is typically - used with map services conforming to the - Web Map Service - protocol.
{quadkey}A quadkey indicating both the tile’s location and its zoom level. The - quadkey is typically used with - Bing Maps. -
{ratio}A suffix indicating the resolution of the tile image. The suffix is the - empty string for standard resolution displays and @2x for - Retina displays, including displays for which UIScreen.scale - is 3. -
{prefix}Two hexadecimal digits chosen such that each visible tile has a - different prefix. The prefix is typically used for domain sharding.
- -For more information about the `{x}`, `{y}`, and `{z}` placeholder strings, -consult the -[OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames). diff --git a/platform/ios/docs/img/screenshot.png b/platform/ios/docs/img/screenshot.png deleted file mode 100644 index 62c04746d4769b5de58e7784e7fa89d4a8dca5c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327733 zcmd41c|25a{P&+0CDNkoP05~hjNPC`R79mnWIGHp6cc7b+Ngv{!i=?2X|ZG`TegrH z%b5`hW6L@d#yZw)zpKypcR%j?-}}G2hX*m|T-SB3>%F|*&-Zz9-r8cCY%jRD4JovtL-s;jR@aw5t{rVoXlepgF0jv{&JtqTuP6T$J z#PysA=spq9bsT)%WF5cRdF)1qseikv-%k_2HdDVg6Ktyqw#C>NeEmRQZ#MRAMqg*5 zeV9hxu%TC@A*R6qQ*Yo&*Y~99d(;_t)agUt^`Kfk_ZnTdYF)Q)I<8f^u2nj&l{zjJ z+W)@FwVlCN847$|`-*b@in>;+$0DDEZKgwu+ zRnS&m|D(3KgWlT3Z14Ql&ieAL!RdBIS65eWZ(m>UaR0#I@SoAqaqjfY%-sC^;^HEA zVq#!~Ju*5r$mTS({^U;2{vH~sqtWByh-j1J*L|^>FJIL#f1LEl)pE#naCAmFe$L4K zs&P46?ZV4br%tJ!&pdnXe8jy6kJCS@+N7)4q_?!Tp|0k?d-tyCSI^Ac!tMCX;?gn~ zFAtc(sI08Ay=;FgnBa30PoaMKSo|%SL{`x<*x1-GHajP$s$Duby}GuBGCHZMjTR9R z`IMU{CojKc%N8Laq4o9kzbh;Ai%W+O9|p&?ZQHiR<-d;;(j}!3d-v`Y78X`gQbM6n z2n0f1UH!m;11c&iJ9g~Q*VjLC{|++SN0}8U4eZ9^{OVP0mcs&JT}H;G>@N<`;+lOpJ_8+IR%|gg#En%4LjH)wb2s z28xGg`Zm_qxbqw)x1pEYS=Uwd;m5%D{=$y2=IS2m-12nwufqGx1{-ER7`nB4;8*Vu zv-5Xn|AQ+i*&5;TL?-+Zk8~H2i2W;$m zVv;%zN&o%Rb@j%bV^@55Zwf{s!o23$b^oXH4fK9m3a`nl=A#?sv{+sooa#;6Xi#=E zM{~a(Umqs#t9-P%AzJ2u@C6fXb;&*c`qJ@d4$>}4Kd#{1D;nr`Iy4pQGUYBKkesb> zyUZ-4H#YUdQLwWcw=P=SZc>S7fK&Ou{r5|S|26;r?M?shU9VR5BFkjc)|EeJ%#L5e z^L3#H%C%(rf=_=3ERJy)t^!+=*Vei@AYG ztZKXVRZHSl_K&dC%VX--_Da9zX@63hkXYw-XFq<3{B06SGZ(jrh&$cc=Citk% z2CZHZUinNUJ8`!y*9jKwg$}MN{x^-w`gh)aqd~(*^GCrDLZ&MXDyQ%xGL@3)6@MoW zob-_WI^J(O;?AC`gtD-~y>C?#j)&}IG*hBm*_z_>ztb~sWZ8WvyM=v@s!Vr@(duE= z!6mldcgUB=s#fLsI&ysPB>uNX%vEN7hdIg8UcoEOs7k`KWKB;Yt#(yZB4(%x<$54; zZ8BtQkFs`E^U<^8N*^JQ^=JRr2!H-(;~rJvv_fEDL* zCQ^&@TYMK%i*;8Iipk=X7WAh2%CiQdHQNIF^23=mr+aWm1faf(h-R=URrrnd=MU4n zRg+hR%J9vlu2RUPJA{B!HTBvHg)@K0qQioM!cPs;Z_&eRYx4ZKUoERDzRL9W_4M?# zIvw)&zj4FFs@zQlej8D;e7Z(lQpzV}DSbqQZ)L{tZ(DK%e*@EH{qN~%#OR|=hZiJpytKAPSCT2v!U<#uMA%0N@K;5RX8 zqR}l2jfar`z&3qa8z1d!_2CEe7c>#}pSxNf%vSJ~4@L56IJ+Wkr3c^^!Iw+fa>LWM z7e1j<%CEgP!oSjS-a$VnL=%j2Uefcbw&%59HZ~~3BDRWc4ZL{E;#UGb(w#hy5+0bj9(?cz_JqvQ5ov8*9wN&P7xX;l|W zAai7e?+C{Q3BbFL285Gl}Ohdp~2)^7OsB|8GH?!J7gNZbZc=y*eoJxedKpklgmNlua>F)>I#{66m%TSN~9b^UQBLMbpI04VIsA zEy~KSBo!>{&Goo%uJ%wDIF>q8F#3UD){osYK;d zP|m3D~{F!+(8955;<_qBZEhLfaA;&#g;z zP)Pnf@z5=yS~bd&J@Ihhxuj6?T)3+5Rn4N94n4%Pryd%4@aqz72hnl1CRUeJce9~9 zT@$MX{&VIx8PRxDJUI|EM9~v0n{RkrHkxm_#8->iWLzpnZ77%6tD1CSJq&U8;`*(QJO86U-`??>%W6K>z#jF>kl zOH)@8cbu#mHCp-N%!A?5C2xEf%EwH!?p^n<8{x|19tLSG9KSFNx6u%fyGn04oI|D; zO&ykG)<>yxre`pHO>~Q6C0^7pgfwK~f0cJd<#vWEYS3W^Bufjd`LKsiOBdQ-LrST? zS8b*fU{z2(gMP-z#_oUit8eaVo;ck+$jjaK_n`|-AH?aGE?D{=U0mX}ytsf;fIk0#yg<($DfT_Lk7sQ#Kia`#3yk9G4GFQdSx(VWocGDsm@IY zvVwK@(IrtWqlHe$>;7nAU+W*g{*7xFU#oIk+w-UNPz1kMVT#44_BQ7C0fik<7R}+5 zu-@@2QokgeCZ@?*%319Hf25>f^SSG&<5zNt9R#=YJzL$*NvJhV@mT*Z5nmjTe)80z ziwve5>U`fvJ9r`I(_!?@qFe`0p0~*{aao5LEz4;EAO`qoE-G?ifXuOu;O*h?Mj_T6^e$!>*4y zr*raxSnzkRJeeb@20e*4!JzeQGz8HMiu0+xP~(|wMQ{PM>3Kkm0%Y^NAj^yVMjDgL@KY_O6p zbKU2eIk}{Fg8NlDa*%bl?J2_Ceq-Q)L!nN^pARBqMrP&?N*U+9R2`Ly!C&0wT2ktB zMo%^0@|z8IFUYv?)W2Cc{<1>!Q~zYmqCZt4b&s`-_DivXo_AS!w9mbMRNWTrK7%*^ zwQEFYuYu?5kg775-7f-O`<=%szI>S@Ra0R5^VW+q9u<11%N9rQl~>1Uqv0*)Q;jIc zBbGx?c&_SS4fY!Fs&lfChhW3N#RHC+dQ^)eQeG}?)f)a&)nSn$iKi^KZxtLl!Y1GG z-P2%9vQ?#_s$9p-7wM^wb6(jTn;rVz+*TDfotW?0pqjzyXbi7cfJCGcyxEw*D<>X# z5qpDP=h7*5Nk0ZywZZAuB6a(^vVPT3`5(pZbC8u-H1*6sKq&l0?Lkgid-xM{M%>CM z|Nf8nKlMkoN^g_FvE8pA?Hx23t!mXoRvx$X8Lb9ap{&E#^+|bm_k3WAQqm7ZE+XTM z(-~NRNvj|fwy(w+DA>ICF4^!{(3NVrFZBGQ_)*>VT_TkTZzGu7xdY*r$;IXfrm?<(i%M+p6uRSm(DPCv(h)?`Qui5Ob zG}&Ca$3eSUk-Hpmkt7CkW!AmahsdX)_nSvG3a;5;+pg7biLc;U3)2)gUpdk(93fCd z>Tz)|`}<2P{Zw%LE{xjFPhGdfW=RJ-tUHP{7e02~N@hWUx5_?-QWbV)rD(F*!6RQ% zvWNC{4xY%%R^_vz=?A-FDN=Yvs-_0J1RHhmXw^^SaLS}*5z*tel`t(FPO8~QVww$~ zDBb%_UO$Fgfq+?h88*5w`7&@yp7$j{Q_MhciPf8kJdN&h*V zRn%8j0DN;TH%N2uP z^hDBkO>WB7ezW%IR-V!Wqhp_LzZGaCsQ9?C3Qb#B{lY)acFTX!D%mo3y8AdaFi_M! zarb{0EYn@wB%XLg3XCXd+w}KeIqyGZnj8>v7vW>%ZN4q!t{r4mwznekoXh8hk6)GY zRHC(na^$rGR@BNqbj}wqIU41dd`pQA*rGkDh&^%)V~czV*IX)EYs$ah_sDNx^^ReK zdR!3q{^LW2nV;XH-nX+q1y@0n4cyB?E!aco=1d=#9V3;VRP$ir$qwHm%<75n&P>0yi!?BEFs=F{VJ&Ez5W}6}!LvmJMY*@%}2~1^AG3eJ9d^puIR2-JmD( zsQ0Vlx!=~R%v&}!y1PeCs3w)UcIB1^S?NTQa?mMd>oyyTsO#gCEprp!2dx&lw>&$- z60pFn?1W`|l#h2&2&R=qth5)qy)Edt-2|u3uRc1EXSwXnkcukgjfM`39^S zQFp7#+N2!(-ZWtY_Us-^8_BO@*c{i|SAVBep#)hhzVLFK^~nON!RGD(%i_fCc*!b> zNQ^BFYF0E_a4^(h4-M72cqGIfraX&lYjyCMy}fdC(l>bbpP%_j)RQ;fd{I)Lw{U&% z$I4L3y6x|;K!tRHwNt_2KhmBI>MW>6vUBP^e42);IvtX1 zX4t{!k7`u7TEc6bZkVoX;MHvd`fG~_X5IX!5$qq;w1lm~El`U=s{2xz?4xUAR=XLj z+nQec3{EQ^YP7PODwIx4K0sF02_V${NmKLVm`3PZjO@z)MLDSNYk9onMM_Dz`z>Y? z_@QvrH{sT=7e%)+61mq|h|I$MDTTkUe^{Pa7?4gZ1S7C~UQ=ie*B3^)M@O%-guw-g zmdjf6S2Ii2XH`rz*3vh$-rl|0?s8}TDO)bufc1mCCo}ug5;kyQ-4ZwU3LSiGzSKuR z8#--0l-w$L2`BvCd={UR&w_7WUEa=m?O@ySb!bi}HPH;|xG!Psq`UAL3)GwUu-2&Y z3+i&pxf07e*VdiZss}VEuP90;Dfujlz1dUey?*-|Heca=cPrj*!gFR9Vl$H|Vm{Ia z=vMvJZ&gjg%*q!P-d7{yjicCaxu)41=r{53U(>F+cYdw8BgLz` zLzcCW`R$5*idUQb=gFMP^z%6Zrw#2ECnG9_Yeb>m?iafH?U&E(98ayNF38gsNGt0u zv%wV8UzbHvkdoa!ft`CE2K~D%Oe|R_C{~2n`}X$#y1_L~#c#{N?aII9Nxkt){p&xV z9&4MCdj+rZ0@(4Y(X2P?xED`%1qe8Kh}0UK_8(`gJj=mWz6fd=M@X-r-UR$5!e&L> zc`>Hg<8vt%6ltbefpo^iz2=VOb>#*56tK4kyXN=5UB1|!-}3hqB35 zQLPm+@S{sl1W@%HH;Vb7MOZz;+|vF2B?TY3c0Ffd@uIT7-_8wcN4`WmM>jka?SO6s zEy|=PyHhb&jrGT`uJz3wYqts_hA$Ry(bvwL?+(|%{UtW>6Rt(X@j?G)cr6)mUCyI> z^g)sN^XBj$N#Dh>x;|Tc^x=_BuCV<3-C?>|MI~bL-1wQr;EoOg{Wo)>|M;Rodv8PN8@_I2)=KA<>oSWjFf+m zZdA+uf!)|nJ%jQq`{bW~Aa&R4F8{gfi~ReWykk6EHhg!6HVp=H)z7OYe0X!G8GWck zqBeLqzmZWTe2g)p?zvLyV{YL7OAEccx48nitx{4W-3j3NK?e5|~w(AY_MYTPO zA>BKA4_lJ%EY`?>2RrPZcBjlrqriPm^*ndGpW)3H&4?b0?BUVv!l0)oTASr>o5A)XWwY*7}-mw;~HP<&D)6j z@-6Q%9I@%g1fx8yFxEMiT#7wLZ_1IysM^tQW-EwlV_ZFEE&6;hL`6sewl*;jOs>!> zBVSDTSW@ZeHkD0Dw;c6MP6Nw5PFTGZe3eADww6=;@XIs*-^H`ZW`f`N$Io*v-e$>X zZ#(OGTKBmu7F^`tzWMWD49yMGGLBVjbx>A6taw#gckYDl^%r%d__&(6SF@!eo{5AC zK3$!V@}K$q=RavZ9wZ!fly7tw3hEGw4&^?+j-qut(kth0&379uOk$T}Bs32hVVaXi zhxkcY1?d~H-tJe`8izmpS+%KdUuRsFfw2N3+%r?Mwr}Fd=@UR+i<^JeA)|4-qg~w$ zH65>0h-4_B+HQ``Z+Wov(;u{q%7^j4_Q+CGjBwk$E5XCwCGqG_N@*&KrXC@~?JAexoST=j`$j9gd8uz7_E6N2#mIGKOc4!~8fKS{4=oqe=dse|p%fstb{( zc9T89(gIJ%c>C;2K|R1+)JvU;BisDXJVK-!yTQ`knu8)@l5MPZy?fGl`=}AiyDz~? zy~H+-!S9&Rz}V-w335w0@N8E@URjR0T&g&%HOs zmSDroJ&SV8o;)rKA zVbo)c*V$Q3{PkVDy$|#Dz0f%!#WuKXCpWX1@@i@61NUW4(C<&0qEAr6rdw*FYm$GM zS_N^@o18J;6RgIMBGuhOY7>k1a<=ySMYX5sJwK3~>m8L-IDQ}eZdc^{8*UfMEx5)x zhpjzd@|h#jAj@|}#iMcPhDlU^jHK_m9Q7T281L8#!yE2WuWzbY>OQwPF{yiUd@E(| zs0(TD7M=E^>PMSHkMQHN8>7!Nh15@_9?IJrd(nyYVC-V>>5PqQGy(I-$j%r0{ik}u zHFlG$3toL53Wv9+x)_hGRrhSDvH}iT{{17dXV1%vHcCeACAPv{aq5EmBSkUz4bI=v(D27` zIi2xv*WL3m6|J>dV|+b!>kck`FYdfuuBsfq8DHE!h-~tWq6_(*-H92Cp{ptml*H!< zqA_J#hz@mStfCE-Ts$n`-QAC<2uhknvqem($?1$cM>s(Us$8BI)q;Bff$MS5RZK>G z5FEba6vcKk9!BIp@8as*jDCYa!3RNTT@yU>*!|FjpU^6+ppK6X56iAMQ}|cqCLcl;qKIUbXN0N z&52Z^KbpOcqz392&XD928CTU(sn5ROnjsk*WcjImupdBnth$`-Pt)8?G+B%FnBmn5se9T5y!*M2Es9qU{aMo8WW?(jHRbxnVNXG{vaB2eE^AqS|66m7Dntp?#~N{5Jl%=C zbO7ZyOImrACPgHtpfT<7bm=Wba?86Keatk;VlU0J-d$)ShVIlhb^t8pFu#JSrPYS8cQ1K|rCtlpn zgI*2!Kk}@FihR**p#-{g{=DrF((6VHwb3a0?Q$pwY4MbvLzpJzg0+nk@i3gt@yO(n zR${te5$l;yhQ?jDT30sFbhioadFc`nTqThb*;@m(Uq-XJu>tKpbS8?OBZop`e20)? ztig6c*GsdV$s3(`IAA*h=XAuNBc2{p21B&i)0jR23}2fXL0X6+Q0f_9lj&UF5hSYl zig_@Chv$nqE96xq5r!d*y`aZf%JE`YV%;N=^q9EoQk-fCGnsPiogtC@t5%{Jv8+WT zm-0vx{6unS7gZO5@(}bE1xKfbpmNLtZAO&t#W043OK4D$trp$aIDNf9HRj{TG=-&6$5v0!)73pIN5l1%}hr5YOJ7~CXRsMgJ1A;3A~XtwUM z-V(g}BwQ=n0ilKJyy{#7#Vy$!bi6PXQQ&4WOEO5dr9Ns4p|aGxX1=o;e2wsM5jW|~ zb;r(&8Y4*GBM*HqFo%F!dX(ZT(_ZmN#>lp}msf*Ci}NHZn+0UE(HM4)onI%|(!5TG zWCHvEd3i>fAVVbId`Bx|-8!NF{Fn3JMi=GvF-bIgmxhkG?FT`{n9q)w&we}V9n5C> zkyBx8CX@vB%pOa(WZb874W~&PuYgBW{#!>8!P4!qgGeuO0nJo&;(jr@DPsStTGWk5wKT zjN1Su8O)Ld-QroN_K5|K4dh=1_Ox6NS(|TP`}5Xxq&e|>uz)v0t;uIBj6H}5IyX3WgWcI#V zu((lCVyOvaO*sAOyno!O^VteZGg5f?Arf^aEjMs;N)2#dRQ^2!;%+piUQ`(mZ#ThR zl~El`dQe3i(^Vn2BcpqC{pi zoeON=whqFyNI$SZpvDsk@N(R869_kIq#XwcynhqMfTQ-~g zt;0IjzUxOqgyUsys-2pag*|I3Ce*JHxZ2e~1d3e2BNfDl;^Ci-P+UW~+^jOup!*L< zCchemh-C6H%!LEYB<~E}S}4x&9XObpYrY?nWLZ^%s81_;daw$SC5)h24IyzyIgQXl zf5t#0n*A}69#glm11ty8ICuKXLof&j&Gv48A4```AeIy5n%Nfes>kn#)Htx1hbR8@$VB1#BiKmL1=e2{TV z-7u&6k=?oo>SdILXDxZqBVI0$JA^|}MK3s^*%2ljWW+6LJp}ItmlO|XuMO)*t_bk@ zk#qzBrsOw4nDzW`Z)XLlbuHKzkui2xM8~e*P^CkZPis1q8Is>+(XK6Mj3gSfg0^F) zey~MQBNFH_QfPMl8c090q#3yYIn&`&Xp9#5bf0PJto%JXOpw)jK+nmz%WNBwB|5~G zb%z%Cf)jK+H8YHK1gH4BA34NNEM+z^fsv7=EoVv$>FAB7xocZ>-CVcGlPj^ zyPI}(neh`1P#n)gcz9oPGYBtFyqp>A^1Z_$qy0!nej+QP5gHjp`qF}vBGm;Y7&*r# z(U_+3SyCay47nI~czzxeypOC$z5D=7tr+=BlDG_fB-CV@q>?azG}TWqkds1Co$gqB z;o)7&^?D$pa+?}fiW?xzh*wBD-N_BT45!oK@)^>iRoMcXc(6KZpau88H%dX~6{E1Ux;c-rW!MDj4U=hd=n?2>!kLk3Xd!ba=J*lL zplGn&9p^eIu0;ntR0jdJ>PKYlT0UKtNr!JG(w#uu3%19@d4p$Pkx{MY3id~V@8fdb zW~hREXrZ0Zn6t_iMNl>HFkP0aNF?i`Bzm$6d2hW*OsELxn=4JH!7;PghQv}zXEHmI z&b?2ECnfs!hfw6#mu;p=QnME(@LzWb#GVn)eqQ5nW+0aCM3(*z&5%TB#02nEdI(%m zGY|k%P77&k1qaiVT@oA0pXDmdpz*LSNc?fXX%HI|TJ$myavenN(chwq7@1<)xX7&UoDO>@>hU< z8b)S;BOt#5-Y0=qc05vx1L1IC!7(iO?L>0!f_F?S>&s4WA_AjiYeZbu_p0l_ zvA+~_*fwLrgJp1%(l0@^jP)D^l2m|~`GC%4XkF;R!_x@Q*5zOp zGB-1Fh(d+hZ)XZuy3dlxZ_5+Yg)2|2`Q+!6RwPa^Phzrp2E=6&BZ1z-X@K5^>mg8n z;q~B*9LP6*0cFqm8{?2}TZNX39#_*mi}Tb{F%a@-`*__OAX|p zex%Ve;00M|OW^Bv>@72U+rS{{^i`0EHs-zhkr54w7o&joG$<}kY`dY7G9rq=Ndj?a zd&W~wG=$o~$t1BfaXpXi1c)hAw(>@Qfq1D%1bjO<%?eh z(3t2;lXm@>zBW)FgJu z>S)NQ6qxKClK_t>5GB0kuWQXpxLwvBT8IS+qQhyBz(IEBqA`sITy~-#aJP+Xs8OdQ z3>w*nw4La%wwdT)`u#%gHxSz`=0J?Bfr9m^hD6prkZrJuBf@Bmrf4%BF8#phuzkbJ z-q%`sCcFk7+@c)#7pKdN06`^UnzU9@IzuYtCprMXBU5Y_LRml@ag_sLRb>R#ZU||r zjljJw1=UbXBppltGD}iDV|+NsEKoj1%RJ<}qM6WaM(G7hes!h(90HdKB1B#@_^@lGFr_%( z9)TN{B$9!Pku&Hs{iv)tf&%9<0tJp}v$`vu7Dpk8SLel!;il$!0kYN%a-Wsu{q#RK)h zdR4?`1U2(0$ABu*3e63g7<)$1)*FbO5LH#>AuO3~v{vD^wdeClIQL*SH+lIr+5X!OpPeUnA*gThFcTwH_+AbJLSV_ObWmoXY!JLy zM&Qcz>l`G#$97^VKb9VI>MGcFM#v1whl*DYohB=`-v_m%)N2VT@+sZ!lC|gLOGO4F z$YS!%j8xD4#WN)2PoPQnCy{+G4QbGwhLD`7qS&nn+>EN|YS#RrlC3%`o*>(H>t~W{ zp@r4?sG?mLjCsIIOJDgVtZC_e$y^exgNi!A*4ZfB66BF;?_F8|y6x%^(y~WC*vu11 z3i5`0fzdR%T8r~$FYy2~fsP&cve(g~us1V`o^upIy=dS#!i0hyj$b+5^E#q%@3phw zfr0Sz;=v${`cIQQ_kY=4#B`(MX2=QjAi!yt)j{lwK;}g@Te*Sl$_<$&LHInbgikyO zRZMqGFyo2yH==YRW85Wyp2j+m+pC2t1J(pDUL+47i?b*dfU;mmj`M;q1#3rvr&+$f z^8#>#ftB|#Vd@i5jeeYZwF_XvMuTqQE@vlsSmY^1v6(f^;Z= zbOaOCS>UNj3o*+v^q2;X#e!auCgBkeYHY-L)qbS!bu_zk=P-{BBY`~gMPr2b&t!Iq z*>ZN16RXAhnu-9s`EPzaTnH60q+FFHS<)vp%PcH(MHoPgD{Lu<3A=%y%7-^#UY8a} zkH#~`A&eEjyM#odD(#CG49YO8J4ti$sZZEnNFD)0NDK4}{b)MGuDoWVMp<5}yR_ec zgY=EfqF9&!3Gn3>5HSKbfI9MX*8tYtrwmX<0V59tx^?-dIzWT+opVzpN({NQ8uXUA z3$mFUq;bal|bRDQUF7kkPmX99y&!$eflSpPrP7)=;uF_PVqVe*v8(zTG}+p z;F^3(#&RtTXcEb^9QO<~`#Lz~ zlyi9pH0HGsJhxgW<(N?%(c?|u;@3vVTGAc>t-g(;OOSIT;tD2j;w`txEpI>Vhq;{W ze5F_v?VsR^3Vupg1(CuwO);<$JXXS^rlO?mP3_XQu}{aa%5f_cGMa5hX#~hh4V;l6 zY{6`@wgp;{F%2>^{pM!HsH9I7FZ=*}TCawJRcoL-UCJwWX2*G?`5{4e6@Hv+|Lp{& zzLo1y#7^f{LvcS2{gitXG=xDJ!tb6!4^Iw)%BCv)ce|+1 z{8-XPR5G6LT5=Fr~gel%fU#& zvZh;e=T}2Cr(xtG$akQm)c_gW zCmYR%1NUug3)|*6;ypte(eWXnF+%f?Z<*jg=zXg>zaMNRnjHpXm;a0w@JN2ta{wRM z0gnW!@D>8MJ}Xf3;?zAX<7+xYD6`j8@l6BU6hK=RS176L^tcSqG48U}Wdw3X7=dye(M3W(uLIi! zN;F0;!arJDUybwZA`T&mA2n&u>copj>aa1A zmO2!&I1@l&G;!l2xXx3lMnC!krwQp(jEDbW&;Q|~;O?%YvJEbvc%bj0?;jX1oF+*) zJuEm-dlEB9x(W0_gF6Us(u~%+lWb5##f`!iRu-m3kKoeqTo3@n3yaDF>=ZbCg{p3< z;a~1G_lWK$2eG`F3apf^>$x*z03qVJYqLyD3q2rxHesQVvTln~3T zLH=%rF#cynZNJ}iYQNVk9ig=FT?6mt^&=DZ$8aIxv-J4f<&@G7bL+V zz(d!H>%dY8LEx~pmW+?RS~Egd#?t6qO%Qu+sBz0_+ndVg z-qvMd_B`7bVdiHDP!G}IQ-+4#Us;@}Oc>xxfW$0L@fTbHRtoUvd>Gkn2x&vRREHam zL}O}7FCThN2M}-k)vfk^B#s9PQR-iRg9o`IK_m8X(QG} zo(yV>hKK2ZDmXWmrkBD)US5%X;>OPtrQM*y|Fs*)aI9R@0t6zY2%7Bz5Wvm2p#9?( z7rPBJ0gM7^ZDlH!-c!VQ;?9qUMKzrN0;D<;`-!&RphSWip`x;HP{yf! zL(Vh^vjtS)SkeU0u@RUDToAGZ{s7Z61J0b#T&aD@WTkPh>@=C`2D~g`{f~AL5F)$W z_`E*Okj8y6?aD;fBc zfzddB0)Y}>j7edfvQ4$@O|mbGcOwrFSz>3LGLhNnHw^dG7%)AVk>m7_7%e=Y!#&P5 zMIM-3G<&r{EZ#~V1?JEJo)WeoZ=>W01PuEd^iSD(r2-I_@I62s4?h{BLG78V8~`6Y zBZiT_N(kzPP|fQZlEZ{AMkBW2kK7a}G=V(!_ceM#T}qJ-d2I%gNeRc#32t*T9 z$Y+CNWj9FGS3XlL7KQ-(N$R>yuvU`o(-cbq8ZNi!D)|PG8esZQCK%@RCo!?*3ZTGI zm^C08oTS^i%DyB&Z3Z-1?e!8^UKfTPw?Od%Z0EEtY^N3i*bH3i0#I)j)mD68DR%Oz z4T8GZI=Nm7s-%OcRs!q{$UW+i2mySLsNL%tA4zw@5qmmg;D_>bU=tBO7;i zj-)kyP?q|afDAOefeW9TAsP5=?Z(5EsuAbR#fTCaky}9ACHtv?ayzD7IsNWixmhrl z4;u3%$xPQRCdQqL#=|)Ofv{JdIzS+!?q_`dM;0XoW@G4BfCP{Wrhu6-BAT`FZ~^eG z1rR>ei^69}kOI*FD6is>Z*X#Bnp4qs^^vIeues^Kej8=kKl_m=S*1t-h*p()ig_g2 z4g&lgcYT_aC5DGR0=W`RHOY~9OrLO*!W$q4$vTx7g;()^fLoBILur)h12P%;)1**z z_g5Lqf|HfsA+}vnI%vlvHWW~$>%k@hqFMYoy`{i^FCNzVPHmMmp`P-$BXR)t^Hyem z$ED;SK0JWz2GY$BC+p~}-aa3S2B{zDDv5NK-vAP433`B3U;d`m<>q>*eH)Qwf${nc z!ta9r8!d8LMM2);?%Cxuuz7+01d$vbiML>nhj$Bbf>A4@^;pJHYq0^*g+|DH%zB{) zGPegR5C!}snE-2BX_1aRvmwB_OOHV)&=EpVLBwBJ07LOKnQ`PXG)6guVjLh?20k>p zo4agw9Vm|z=0|}v7I0OZr9svS3XgO&(3k~UCCGQ$R?Wj_Jy(D}i*?EcDF+n2z5l{T z30-NR{KwnYqlqA97_`?UjF6l_f+ieRR52}6L1XL#-u_@hQM!@O8l*Q)DTGw+-&LF7 z3D-b0t;I_K%r2&b-k?A~3^EC}!AXyb6o6hE@FQ^VK+_`GD>>23ZXYN_9RFKqPyjzi zfN0=#4;We)JFElb8%OqPxg?RLkPXp6M62{I0{z|To!5S-tn!3Q!)s%1Dwg@XdCA9& ztba$dHKsDYflecr_PY`<*3mFjqpe!TX0}zD2fL@zO z1K4}Xm3%5_@S=WeC(!(c;5ab0HK!BHdNU=DK-Dg{xcp9}qbVR|`6gjq{?*wiU*o^N zAP8#x{%8s!!FQoy=#iyEsGJ@Zkf$>c+0FxCII0%$NTkLz=|ckqUS{zCW{v}Qs(>1O zp%LBa06YJSkgfj$hJ+J*aQP3T;Ct_w8xTF9=VJky>3a@Ugo7T$sLkT%r*xsrD+T#r#9z(k@ zv9eMUX!c8z8gq0I`APN3_3XfA4mM4MHNnuBC4*$2XM~4K!iSvp2->mLRfk{D;UfV#F*T`(R|^3O__DTa`Af9`GeEsTgF(B@gC019)LY(v zPFwcuaA!2=-pX2gd=NC7{lp{v79~0iaJMrue&J<7&!;SH7dXh;+h246$s0l%WrzS_ zS_BTzX1T{^7!A$>8s}DdgLXCO6BI9}(c$k_=MX$z>FW}PvckVE8(^LQQSMF#h|b`G z>P#?MNg=JmZ{aOqrtK#j%s2%uU_g*zedF-{0Mm9FcBr@(<$}Bk0P4y7Zy+jCKd@|P zNWCLi1tP1Jy}u2efEz&$Rca6&{0ESsSL4>sLR0`TYnQ;G^?(cnW&}n@1qr0>ySAla>s zI05MgGy*B31yn(Tqn#@^Jg30B5Wnjn>nwA_A;Zj4NDaJQRB$>U^!q?{GKm@hX>?k( z5gha?2?Pbd#~5x7=vLJp0k&s|hd%;Tnd7~X2nZ^qROt$iHFlcxE1I4|xnAUehc`sZ zF239MQ`G1XAA1>eG9wo33?wGxlEAVgC35lL<*ZC{n|V)QNb1_G1aUb*x2Y(yP^n}; zu+Y!9b?(LwnzIt;QY5EPa z3kC062mpl|)tvLH@;PPxW+EM1@eNXl%w&B+vysJU5MtW+i4r~_3LuNY8y&)~P5<8e z08pK^ljv{`c&K9H1H3el#f8FyUk=Vc0^)Mz?9PX$!0`tE0KO1?5=a?g5fh*^G03kh}@iZdQS@_y|Hy=*mLPkA8MH*>4ZPD8stR2Td~vx6@caUN=c-i9n9 zSHN|x<+yM7C3Rop>bD+1EZ0t@R468i5?QFL7M`Fp<-h#N7Rc$nMKDO7sn9@gL2eZ2 z2;cEU@WiH`r8AeSA%%Apw!$rgxiF|zXm}#li>G}o`Gf*-IUA^so*!U`uf_T70pt{G zfJi(@CX#(X5|mD7h0P;T$aGx-{0B&nVXreTRA9C!g9IQTOF_IBt3Q!d*td!LQK-2v!3WyR#$3%5^ZJY*81Mm(96gq*% zG(<#!ne>XAR{jTEz5=T0IiLUvrj~zG7@%MN^l2U%^YNZ)8vXD)>3W;!^98`fWk}73 zw8kI(e~i6*IFxJuKD<_~w%V+AN;E2>LK;&v8LZVtiL^?|E@I563}Q+|)M~dx#wN_z zu2w~b#E2wRVr<5!6eil(jmj=2G`8<~Ydz2R`#av>dmQgS&#@je&CGq@*Y(+)pYuGg zpsseWd*63B#md+9a#UjPpmG9il(X9`m!CBc0g4!|Ed_#XvAHz*2K5FdZkh;FU^1Q) z2Ip7+3EY4Sf=;WP^vT973>9(!U88f}^EuwVn3@pe)}DE)A~A?@6A=nk$t8j2MNZmj z1Cq4ilt}Wp=Z&vWehY3#yQ#R)=R@!x=0Bk)U3EQPO&WRi;$Xqpz(>2BUISJzhP{%* z^RVucaoJt@U%5wxYb7yQFK^di_4KZxv zKcqDm{GQ4ubV+t67#78)bYpag&1W*QpZW_M#N)LUif=P80=q=*VO|z!0<>?tu0vz) zMwgz2nVw6I>2K(IJf~HS=;gN}H8t#d{SSduzM;CSn%146G3VkJwhKM_xMY<$h5K4@ z573oS=O9cnZrMo4Dd#f20?!a{PGYdJ^=N1rr#UpGc>@~~FHoj@cuF^KdCu}kD3?%3 z>=SL|l(!QfMTz?iz)tp_Ai@YGQ3A~%ec9nF_Ml{Tf|B`jLzZ>NB#yW$c4HPQD)#&o zO`7DFEVsSM$Uy{_nancQrTDyiN|)6A8kVWg@ol2GBz)yg=D*N1sAd9r5F!6$ir4Qz zZ^b{&;9HsnGj2+`CLJRBy;FRw&1ofkj?&&Y`C@s!X_!e+G=drNRUmh+iP(-o@IcHV z^JZs$TG1+^D`9aXt8_$?A+D?+3DU5V_a2ef#WpHRq(Y_0w3J+|s!D$rPEdZ!)zFi%dPACBPJDfbUm6?tu zHdT}VW+NZrZXCsJV#5reW7K3Rm;9W3z;VP8pZyjf;oSZ(YBI9n+RJPSm`Y1>Dt7k8 zAk=a@4m7zc7TaCYEPbe@&7_AqkZVFSh1f7iCHK;GqGmCXZ58fbCQDXw#Hcl05r8^; z*^|(zTi|yAO;Xh1_O)VBSbPW)bY4ZaRgV)WsMy7?COE0+`DR@bpRfEX0ME(ynoj+f zRd;Y7=5!VZi*-UBQ)?G+WEdvhuzr+C(xDqNi&#}dU_g$u1c7gIt7d-8F$CTdqBuFZ z+rD8INm?`#W<9Xy2|WPU*p&8Lw8ip0B=$VbG5{bsR17E3+xfm$O45$L1uEj0mPn37 z$#3_uFJ_{x(eFT%r6%Q_XrQQU(;@1-lX@K9siHJJEWx=n2|>l|K;f_5bz;q&p=J*1 zh?}A9o6Mu>^>Vc?)k`xz0i7-xTzRSG z@l4H=03wQU@0sXCyv>QnL1rJ#w?0 zO=1^>B_y0sw|c%0iF#IKwLjW@gpg8mlGI;sSeL^SFVgP-TPoU(4-m0(^MwT>`-_=A zU|1GE@u{h7{#~W#%q`Oyj@?Z4IF(PR$|b)1wAyor&)s?Fb!oFqBUlL+Utdm7R0;;T z?fjtc>r5cxTA+d=<5&^=%wvUdS3&HOugFA!DLWezdmx`N)waER8G(ZS)!a^#TnY^N z`^Hp`Z}TnYCQKS#yr~za5#Miozz}_OYZ;gZ$N`a$dbtHoVl9Di8KpXg^7T1UJG)ca zh7QaIP`)jDFcjdcds!JxZJ;@ri@&(^KJ)&iwbkmrt#?V^mH{vr?Jo-A6Z#hSgiC4G zm7G{Ss=&U$!v`PxDz^u_d5y=)emAAJkjHNUj4QM=chb6AxS1nUFJun9Lb2z((FB;; z%(~BIs@CDn2yPbf7V8vcP)I--4$u-Pq*OsCtF~BU)||4}}PXuUE^@ z8qLXZ{n==K^$*w)znU!kFGjiG#kE7p7!u=VD&F-GYQ7Ej5k{+Ue7(T*EIfxtlZO@n zGr2k!g26s!WbKK9S@#htG~4;b2!|jIN0uRR^JX#ke&x#2zyn~H8(_$V(U>r4S#e^^ z{1>Via2C4^0DEgTOOSF4d}}Mp;|p(IAjjW9EwU>7fm0}rS;!1P2ad(K>Z)MGT*G8` zAGzVko}MPNd7{RAd$g1q94gAP^jPZJ2Ac_vBY)XB;Sk6vl;q~Y`9y#R+{hyZMgLls zwsxTGD>oC!7zQU|A7OmOXXBDz1^7P%M;U!pCrZf2_$wo5Wr85>4QQ2A>kHcee2Dq! zF`!8pwo@#~THy%o3b*s;FGVBE)GVw6{3(qn!+M)#aP4#Wks0TN|6l}RDOXsB3PRU_ z-A-5x&>0oVwva{GB>rnZ7Y|dF8F8^Z<>y9BQ60RQ&df!QxYyP2|Ye$woE^21pA_ z?hBFjfHbn_Kf-ODMxs0ltis%*y->E2L-kVT@SIUdJ8OA^au{!r)wPPmZnmyH{R{wN z@1MVv>x;AT&^EXfo6$7Vnz_40fFY*o#HWU8b6+C@H|i+2h-+ud zFwg~eZ3lWpH%}4yH42(7Kbnj8 z)*Po6Y@Sb4ju?TIM~~ZtZ72J+{NXvqz!YM*#Ojn=w`i+AS|ZdW&nZD``?q~{v<4V7Z&g3bNx72MNCICbvey4%0 zS{V9$DKYv0scO-|nN{)OIZC{Q($6c=y+$t1vQWqRW$$5F1`yoMhZhBp&uRj#1754* zF&94OtRqS5Z0o;rjc~uK69kPqRF6M@kF3x|xlnhbtuZ6#Sf4#lUtGRZ{boj86S-&+ zN9Oi~)ARoHhfbBviUjIebmU_}210Mj1`ItiQs!68aINZ(w@wax7JoM9*!Q@!e}?ej z-!+;2hKg+b7mk>H*~|p8lcefJwX<#jK9im#NvCGt)?%;Ac(xl;H1)KNy8vXM_f$($ zSiMEz)~bXB)u6C5XD8nJysHiF0&c&_eV&#&b$J-@3bz5|#pPj^J5bf8Rz7UBLY;WQ zOW6uE(?Bf}<*f(HMeQb_(OGF%1&@EyA}Hlslfy6-vvfA*FJ>asys30RFGO$C*5Kq# zmAutyf7^{to>{H>4P5zzKCZ8bRi(V3>bK>qp7(vXyE~g;omJ^LYM~4PZPYJXtL)ml z71tdQS(gl>T;u@VIkkh$1YUbpkY>I06%R8-z?;~%IS&{Ex7x(*Oqb)4VJ}dPX&mle zI;IMGre)5f6F{T<_7#=W0|E(&0pPwI^l-KS*S`P;copb0P_ZVSwtoNt?hHB{WSyxJ zIyu*@d;J|(e~G=DyS_x^q84*UhvtaUI55j()5RqI2J#urDs#tQ<_2P3AZqg8jQ(%-f)+~OBQ;vyP}Ck8^!W|gfdjgr?F z5W}Yyvg@H1vIR=PWhhA^syd@AHc|UECM)aYN0!oC8b4HA5_BqaV%~7DJ3JV!Q(Vwv z1|2;Wl)r&Z(*7U;ajS{kkYcsxq_Q`Ag=;M%G-#py{>3zH)>|@}|ilQSFtuKgDPxXF5Ht zXuNp9Yr)tiPzOQ|tk^hc=N^5c5Om~++PO4`Xt0JbT-qHk()BI0^9V>#j=FjuYbyHo z9FMgqUc)i0#Jlj+fJnI8GAw8O8eGxdOjZdZD1!%9q$s-VdnDJPsJzkQrq`)ORr){h z%+Yv3bLgh;93XIg}p#EQ;_jssr1=0eBOLRLwWp3l;_1Js+kF>b$QYQL@fG4&LF z*52sWdHh;HuhkoOa&PWgruE z%X6r441iS7ZzNNXrp*Ih)Uox^1b7ERN9URQL)onU&TCk5x|L&@Cq*A3h5HuII|BiN zuL9BqNVFfG(?y7TW|f%^_TZ647BwamyhM~m9`CszFgr=&Z>_)EHYbU?muP=c{&aip zTf2a2=Sll6j1v5%qMxz5E@TZ~bp-5l#@MgN5%Y4UI|`^p z6$s{;=sopI2{z}Omk9!;TjLStzF8z6yePz&zD2Fj=_~I{9+!I%c^-=$Un$HjmFkcJ;0(%tkY6`)TV&5`U=+!xmYipeTGc#~Q>Bg6=y0_Oej5cSqSi8?5S7 zAK_1$T;J!Np_ThRm3E)+=MDmxv5u8R`3fCCJw@Antg_Q5y4OaIX-<0&T0{y%+j0qp-g(zcckI{hn+l zM{J8nV&1N9C`H55Ug3OVpmNA_Ys016wayK|Xtcbb`2uY+c_>V*rlpr1S?hIle3|J6 zM7PVHaSJMrDnE7`;Fi`fsyxpNX6@TWh<~)Li>4nzL#=@vQOa}X~yw{D=jp!-}ZPsKZ^*B>`2qgv3oNkIXh zC05(JTem0WYU>J2?g6JpWB!+0I&qb~ySNpXmTr(+<3M!P0saqJEsvRFtIuJayB{Eu znQp_T43u%YZ`VRPib`N5sGA};<}{s`KwlctUZ(eQjf${XgL5mWbcBZV3aB=U&TZ&7 z1a6OtJ7D}d-I5O_z%RxRPKeRH-0noREXT=nKWqzVDi9g}7e)-4qQ-XXNWq9RE*CVo zSWKwP{hw!n-=Gf+3VRhaj)T0$G z*mMNcX$eG#!sA$Zmjgc>@oXatzS{AoLEk`(iEGq2zF---yjP*F!NnJVl}$xUbPF+< zRla}$(mXR)DZO}mCri9h{WN3aLXJ50Cv=E>6vQH|q?sR^$+n}5#{s}ABgzUIXp)=! zHzHwf5cD8;*FKGt3+!Yd!U zIhbu%DWNC(I)s?~VbsgrXpY%OjriTAzrEF5vn2(cU@Vc@B`17@2FV70q;PmapR-8~ zq!%6_SYmwcyp8Q)kgP|dl3U`zer2p8hsOn5j`4-e&#%~`TiM!fWqxY) z<)bg@r-dM_XU{d@5USHNs|1^FJ6EUD51rXtP%2SYz@*@R`)2-|Xo{ zVyF0CHnVCk00hTF2bCC6rIkE`pqMUsKb^g>p{ydTs{a5`iMUd_x0(Kpxe&ij4$#>sMMK4$fe$`twtiaUC_t91qjBd5@hH9p?zy}FpFLAP%(3Hf?W zmf?=(=4n%hi}1^Q-n5mV(aM@G2;!M+kRbC=pB$2q>CyW!2p0MSgh&>*zWusSwO1J$ zniBe)q&&#-bgsHia5&>k!9jFXy9PFo@!ADXF8ACFk&wr$*i+HpSiUysXRunjB%FSOS=Pn%BMA z+9%O@mQ{5cJy2_LW1|`@Jg6(2)22?69wexTE-}KVD`z?@>_}Hcx)bKu;E5m1^sUE+ zN;>+HGS zNJoAk=402JKl4wF?2ldbh2bKdPvXaI?BG@{#$^0J zL7Wy^$kFXz6iCwEZ6aP(7aiRDP$YcRXOXq9(khVR<7ZR8&*ZVVzKdCXTm$t4M^o!E z$urFM*sm)^5|C$jAHI8iNnD(Xq$7DKZ7G`L&-BX@KX9f@&SCItrx0K0>Wr}zwOe(9 zusNf3=r1U6bmXUIpqe>4?HA`x05w2N0YqCn)n#EDjAec0dbm&$WXiJ9J@PcB7#IVP zZptzrVK&rzX@}}D&JwS^@s(@h3b<{-EO61>xE|=^Y;|1|dbzxJX-OZ+;H(RH6Tn;zykyw@d3QPGgk-dYL`%IH7yiwoELt4ASh+~qz$ex^a`(Y5&I zdQ&W$!RfUN*9-=LsC!*j=sSA@2p zG?uP|SaRa=0De%Kh+Z1@6d>Eg*C}OjeSOLL{|eaYktJyjG-e8L@et_*mU@>|3UWB@ z%KCL%<>|+uqH?j4q0w^#8v$c$0J3jLI{N2=1$GziWaoTY!48p3jm|QmTOs{8cOQc6 zK$r{gY3DB%G-gTWY?|bG#)Xz5o!d}{HO%0M-!CqWlN_0KculG)as9`)p@LwSg3g-ho6G)9)jAUdYdspLU=nUoY5L30G2rCOEbA)RYbw|OVuog4RWal zAYX-676M}*2e;AUI`oUga~Lz5|e-v!?*VkLqcw z!u|zGX(zQg;yS=vp#u{NcK@Ge#VwI=?3Dxxmrnr=@*GeJ$4E{{i4KQ+-S9|?>Ad_% z0nG)=&7A&qU+)Xee{vm43sJi;fHNpPT(fB28Bj01e)AsNG(nxRR&HBVhRr#$dU5m= zNATqIuXcrEo(smphl3=kI&+67ydvU5{QvBmUbAHgG|dfxfd(Xgw^I@Nppzg7#*L~A z@E(H)bp`in4$M}$H73!_*{nDuxohbGq83fTNdh@kvCr&(b+Cn87hB@aYtn(}?s1sF zE_m}9y?pOV!o+t$8N41b}9n)h7WqA<%vN`t}68 zITj`m9(MIaJw|;ka+Tq6*da#1`r2aa&~vTK26U%W7B=NBhhP(@0c^9Pw|+Ed z0A(f52mtcf$k*JYY{W0s&>4(W#vO%X-o8YW8kM5)U&E4~oWLMds|&%+0B9rz{*I_{j4_a7 zU1@M0=-?biXE7jR%YV4lw*o-^9H&WT`)LoP+>Acnj@hj3tur~k-Pf_tto$LUQW|C> zH0A)iE&r5Qc0yTw{?&z?yg4u2Pi1#FgZvlD$Sr;vUjS@%U@||q%I5R9(LYN_>=nxN z!ag2ADOed7>kjJmy_fq%;9w+H!A-&jtF2}ld!Cv8=_)#J!u2YolSZK1^Ryv3{w2)(c z45jvWq0e3Qz6{(D-BAn;?=I@SBtDi}a)_nj#{^RmK#pEClUb~}>W;y-X&eQUg?c2m zfy-2SFCHh*;$t0SDa~a48}xVctDowy%l?XngtD|i`_B9{z>RZ=$0P7 zM&F=;8(bycD1AsZF;lB7oWxN;h!$=qQF@i|^iI@PgVeFR1<)dNoWNzmpR-#iJv7M` zmvPqbzkyI%C%i5``Tnnq#|xn|lHWt(H$J1^vuz--JA}KJ!;qr8ss-V9>V5bDgJwO^ zyw}GS)Co~HgC&uJNu={xYy0y`u^0<*sM{#R}g;LT|y{<=g>1VlZxfg5$eiYM>>Ha!lvf`RHs926!*XmTTxQgS3$prT{Ig5bsj6}C(B6qo~St} z1@E7L8ZKvVIJpL#AxUGJ$-_Uh-w%WRep^zY9X#oD6S)$*P`B#US!LfT!gnuG zre=YS37~I&dlt6F*k@q23H%sF6S>BlB)#yPJyrq!1dX~!JDKl+*07mU>05rEfm(n$ zJFOY2prtfkHS6n;E1|*_~NWje7 zg+FTnX-NG&IV}H`?1I3Ke_5g8%wbfaLzA*WHgBK9+ky-e;tkGb{yAskqnbq{+coP% z)+z}r6Wr=`+GDi?0etdTQeq3%pBHFWzW|s(Mt_X08h%>Dio8G2IKx8j#Xnd(()WPa zXZ-BeJBpcZv^G@hm8eH8zH&R_n6qhgW+iYHSC9B*{D0o|!R#W%Xghzg?U6)^#*LcU z0Vh_shvwv8>M5ohzcH*ksuJ5lmAbqiJ-rI|)|MuTFU6WMag^&A#WNx!Q zx8!mJc-<@4v)q%VyDAgO0aIT>4}Eg{#ehb@Cp_?9!~lz}~B^JO1_ zBTD6bgp*~rm5;A+qCOX(<2H>W1e12*jk+R&Jy%0zw;1l)WdF-vW7BthRV8g5AWNuO zY$%tPNwo~6ddo()FE0ucm>q(SJ(k+Z)lag{I#W)=vQ6v%l!4izujRf?^9@i+y64^p zxV$`iZg|LwNF+Vk2%%|bGDzFM*td}z-pq>+J$h<}zl5$zw^1v0jE=NIqUN#rL5Byb z_KjKvecoGinjqXb_y|GJn(rgrvj*4Eze|@Na|*jXq2hBBc^s{nJjTA}E=(v>tAHC@ z=1j7I47kSOGBCSk9?s}1hvg0V2cfStl_TW_9gF-@f4i0<2J(X-8gug$O!JP{yf{52)?L~^WR(gr>#s&&MJmq4p8N zY04}~u^of?XG^PNGEoftN3>o&J^08vUQ@{ZwXvSU*6iplygU08fGJtr1pc)S>3dV^ z!5Cik&Rbs8>=}w}^<$F7RCv0qQC|MWK(!^AkU`?}}u~E4J+&QFZtDE^w3L^Ti_j z9og6N#h{SdBQbv@FAyQnrF`WU(DX0#Pb-Sqy$Q&bx^8*xHy}$Vm(~myw_!h9q`)kL zxgo*#&hs9?kOj)c-^=J@Skq0Ex@d6`)Q8(l-?iYbtcZ`voY9WuI5$pqnrfiWaDXIU zSn2QyQR(m@aC$+o$*ocp=K|Ff9@#8aC|vmk&;+j#Fa*|~+rOA6N^n3M-)N!Jk`%fM zF887n&x6J(#g*I;QL5cS7VP#f`A8Y|B9n39*@G?{iH}>2=A;(czJh<$d_1F!bji--%JOLd-U>< zLJ7VD%)~fG>wXq@6~gUnAK?&N)9ZFQz1C7(JB-E2Or$KXb}BZCc!B%MmNZ-6r{ik2 z>e@arDz%r8ZM9Jy)1JvhyQXRrTKFTVx-xgBf>8serELA+@x&sJBQtEtGdeRB4GeQ z#v;;^NiX-Q%}+7A{;>6V3rYcXRgT9IT>tCKg#U>VdcZ)7nzq}PfZrOCgud{%iXkI1 zH(eXJGI6dyQ*nE5(X(?WtO{{c3C<=VG1_!CQbap~f?R!?kp%-)Pig0J?e<+v;=3twB*M_)Q zorAz64h#w_B_$p_qkLd4=J)!?Oyph6f3jWr>813XpfMKj_^fmSn zr(~4<<;-eW6RLLnORh|9tLW(fva(J4BUexGGLJ2Eq~9`IF)4q zlKX<1ey$j^MArcaKucG-?k)@!?PjuG*!Gx$o$Wd({9A;Q(I2AnkiNnt&>k=4A1W-T zd*^1R-=Nm9koO@Zs*QpfP#^cDb-7ar1x@bNuFK{0u|GVRgOiOnbHws|Agm&mp`TF6 zB6B1`89odAQl#WD&T%F9OEl5b@auu2K(ddMz$`dbR$k(8rot0SjR7v1^Sc#8Xd5M?H%D?GORZJ4UaO+>pQz^cV;yF2y5HEEpTNP-nkZ zxinZXozd;k{w1#Msej1x+d3IUs~IWV`IBUgCHh;WCf||&>eQwFJ*iOrqDt7^um(Up&v@R`YjV&u2iDwA6F>gGFt7s{hzV@b(sJ$?#@ z=DoPVM^30YYpojEMCLo1w@ki+@lNuIfO+V*2VhmFB_Rh6++YG%B+~jS7D%jtSiS~e zc2`?_T;H8elT07|eK&zOHD83|q3(gJY72FzZ5UOvU%(5;O+bL7f zNmzoV2}jFC4KCuwLWXGMcaazo%p;+p*TI=`-hTLz2rAP$zF1`-1d``RMsYpOWNopT z%RN>t=EvTA=2aFJQ^do_xyhgQR{txIXQ3NIO_j0?OwYx5)gbOOUK`#jsl>z(P7Qk^ zAGypBTy=gx{M%Q+g;}i>GDnHeYg1pd?-Q zLEH2Lphw>6${Aw+7qd9l-4_I`9y!RsGz8~*!>m0uCy$U%gKPcR6HSsc`x0h4g{YJi zBE9Ew@`oMqKw@Tjn)QZ(oxxcdQu(h=UD&I^ z1RX`77CiigCh7mKZ7J7s#0=8-JL`!?v=KjXZ7>;teD`Iq#6Cd5F)Km{T9n-d&u{ZV zHi!11VJlNh@w-qRm>ZZ=&J7pcRHJ2ZOG8vVOowHmW5KDqi z6>M7%tISYS)%MM(YTIcNLv0ik*s^v*ZZzgf@XrR%NJqh(0<3y!_i`1yQqg!#Gx;w^ z{kW$tY9Roi9t)buKxS`dY3EepVf&WqWPx`DFVKSil4DIY6Zt_jwcsR3S8o|o#@6SZ z8QeT?85}&`0Y^HOtskTSSk*UPsSXOtIiGye1q3S)P1`8Nj}bp)gc+E1V9cPLm=)jl zpnmo69?X?JTyBV*G$050CHr8X?1KZ!C`OwG+E!qL5rc)?(N}d8;QR+k8`ZCfb?e-D z*FzWeW=+vvlxnFSc#B1~RCRQdvw}Ir0&+00lCxSHxLaw*w-n5V zHqLwYVD%<>@D>d9FY_HkyRiPbL9P2g7*{vfZanYSY9yqq#oP8@cLQKX@IP;Sk?9my z&=W)MTxlO*5< zK^c2m>jlQqQgDg;eDAbktt=2VK4dna+s>TPlyW@!^t92F4V{Y`ehu^e9Q>{i)Zrw& zrR!qn9_!E+;BnX{J1xEHE1T>dw^n1&5rE+A(TTVT{`0yE+a)=>?;SdksDZJ91Vy>R zvTrvI{sYUIfhkrqfr5!#){!VOe?;IFzFppiY#KP6Jh=VvmX`c^{X?yJ+n&m&4r#x5 zC8{GMT>{l;KIU+`iX7gb0=uM*k%aT7dLJO>Xs|GnUNLEW|K5HbS!eLh0f(BIqf27W zLRup?`bh>TKGq4bnGDpdPEX3U9_cEhhhhgWD8^F&a3j2s)vo~Z+Fs2i5M2}xnd@rQ zRr&~3Hw347i(#!{5&oPEyzsw(=UdI3@`sobg6RRZon$B$HAY4-pfXWQGkI~6_4~H3 z%lw(STdbaw_eKiRj?pBvBls;^=1$s%u5&D|uz}lJW6U!SPmv*uF|?z_DF z^KAZsRQngAPz6AOciXxhdU?O^-b;SodxplOZJaM_0G9^yFt9dL(0WA~Ksq|fQ0-d! z)#@MYPhDumKay4QTxZ9MCoo9a)osib$|zM3zjzkZgU|sC&N_v85gLad7M+SX?G6-E zO&Br!-{tB#)k6;~sEbML4X&>dFB}tt@U%l#gjd?6E&fh4-({B7ZpFgQmRa0w*dm(u z?>w`z>hnQypK@z`=T!(&au84Mu=GbOqa(LRlx1>2Y_!>i0mV27%OhlMrbaHh_tH=W z*}*M9E$9%3@?R&1R^*U;h5N(@k>5S%7t_r#hx;IV2Mc5`ppk9I&2+0`R(XyD;2-?g zrPG(BhrYoB7Iz=X$}0(?4Of4H$XEk4N|ix8#!Ka`^{@MmRAW++&9|X*N zW$vPU0z*EqaGcDsE|hWy5Aqv)#c;(@i=?m7|3f(CL0RXevreHOO`QA!b{k)9p_&}g zp+-M@w-=zA=Q70w)`#T}!qbDW;0y(l1;#%m6nm@Ula&`$CsiQTKAje?`h%*u?*}r9 zPp-C-FI@SY;PX#~!KQH&Iprkyt27sL(=CxNebZp68y_O#yrO+Mc<=v*Nv90HhG_~7 z*7A=upHnCf6uxzI;FO7ZC8jv~7eO?I`2WLDRVSqP`8%7k5pK@}kZjbzR#1*F_ZK0r zuQTeo(L~m3Rr#<18&+FAZBvD`we|ZFU%nn_(Te@RLuk7%rD?(FLE~e}ClnFUmUf=`GQ4!0I$wBwUG7!`Umq z8_t|7!id}fy21Jx9|x|9W8kjYU21mVCyLmA!36xto6$(WcHI8czN1kU7^)~KHkD`X zzDFTRXLKVtgmDqOnx7rw?J`JM${e`jL1UhJ!kInc%t`sLF=wId%_|`K8~Gkg z>q*f=yLIE39@jUvQl)5*X8e2xs_MBkW;&e7lh*4;2UiPI9az_m7|ixr#ecd8cRXIW z;{@Dw&ai9$mpLb|t;w*jd-3JKqh+4r<;huRyko3kL%2LS`xDJs((C2)_E58XdTtgf zIB*OJr|}KK+a4$gS(t4lx`aQ&Jdu5R%qEGP%Kj2FjavP9igA_IKy`$>8z<&Qcf<)) z66r7ynqSjlE5`1PFZD&weLiD4W9?oIwl;@n1FjOU=blkB9Ep!qDR~PMsx`%h1fd-I znErIsp&}Y|TRbKuj5B*3WA~W6St?L=xoDSqt zydLnv>FV~k>orpFB>KdqCYsCel*6lG$*FJ(6C45h9E}MU=1!Q!P!$<7HU&3BO3!y| zy+xBeiaUhS7(8-D6aH(+sU92N5O!y-eblQ^$M^@|_ksVkli>_)^*W4Pj5nt={l#n@ zj;Da?zT2un-6Dp-HUFbZmwy@ZqP2$8+b0eUhmNfg_ z#+y{qt}q*OJh2{QO?3c{qxmOBB2^j<*j{7#%vZ9oYF+?uOb#c3Pn~&OsM7_Zawe0D}fv z5W)%8h+=JXG@wu(*-W{pI6=G&z56!a zDb~d+5hGYzs3>gPzk#!4iP1}>;PD@t@ulMln6HYOzFjz;4XPRdi#ZP$V&8X*9GN8Y zf^u&lHlQ*^n@%SvT%MTd8rv4Rrov{2xdk;4)suiY%^ETt`b{Wr{pPlShsY+Nxjzaq z9v@|(jdp?cyIyD3JvAoMw`wkY2T*UqO3{#~> zAEC+NKR845`0O{BPaOZ(l@qC?ttTcOOs@iqb-4cbWm9#gaI9mZ)s??9+=$r>(u*RE z`Dqc@eppCMw}^z|FKU!P657yVL_*o0)<*6}8osY`+jvO42@al8#p=v?TTX*d17D)IsAVtIq&amAHKywTrfDD0zlG0g%XkZfrsgzdkH+&^V^OrTQ@%j{Ha&g$Ko_4{gCO4Xk3o4 zBooSae{C$;uG_4h*ak;C-2(?;f{+q2$KAey&>B9%X=~ zzdT?rA}1WePhC%lUM3*YZVIRICM z$a7Z4g%lvs22!s*!|NBlbaIvs{rK~3RCTR{3n-9KCO)<%u@Q{@GpsAD(DDo?-#gCa zONR~d9m;AsNtJmm%0~foAd>!n+i{`}9QV2ssG5u)A!0)gZgo!}+}JM145~tU0;lyf zGgR{JBX=sfZ8zmvr33lPdBI3IAL`>9(|a80U�o;~fuxaDohGPUx9Xu_d_9ILy?o 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

nkc!*-B(1&Z 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 +ein3Qwd}g3ca7%@ZE%}*hAj5qgWfH}apY4lV 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%0D*-DX_FRS3NyTXd{WOxO!w!3bUL^lW9 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�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

fGT87p5Trn8e5hS~wV$5ZC)jvh6L{ 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 z zc_f)N>2$XDcq=|Q*;fz&00aJr!GS^G0mh&c#2w^-S1(W}7tZiE5SRc5G{EQw7HWeh z#Q=aMJyW6{HPBe~%~c`1O|yvT&#}E_EN>~7M0AIRkR*mJE!ZjL;*-Rd5-C}NswIWq zlQ+)ot7Ff?+)D#$L8A&M7uAufO!p#9&TRy$PIc7>t7_E-Y4u}=>K1BRwapo!b(;~I zT3I1Q$kI47a5vLKSWki|p5nDY=zh?C=0#Ic0p_tHKM7~#u}(yR)W$StY{h35Y_((Fl|mvtYbmO zoQ_(qP=`GulExz2*(&I!Is(yO0S7j~UVuJe{cLGr5?bR@2Dxng?8O?zG3zKdxXB&J z=d5cYpQ=!)hppLJjm6yDu5!HOT@XeEz#j0n7dFwAZe<68ui|;s>=NjRVOE$;(I=4vqCpT& z$fl%vRdWdTmVj@@D7HTLC$PF)Xd=7hy3)Z};@JU_d3;;$Vp#vD2F)^SkLaW)mB3tM zoeGPVeBJFB1TJ5W-gZf&VmG&#FQ8EnAguoUs|L zxpT{D7KaV>-aeOv%-Ql}MU*_yu~DSAo>e990?d)F+Bd&(KJb>iy3(o;U_@3y^Q0+V zT{HJ{*NzQB4`k-A-FBK^n7-q<#znolhGu$>ZZxZjogVY{=?M&8D=>p#VJlyG4dmRc zhCf{GJ^MPms20kqx9!p~Nl~+?B7zk&Hy~Sgm?J%&DydnJXUTvk-f9|lkw{IHYaYhD zqvmlAju6uI_4~CQVl2k98aY^5TPzBn!=I_0ZQX>N+mrv(rRfN+)RTbhV4? zjkg89N3IQtOwC5i5K^!g#46@)poALi=t46$^s&&~VUEjq;VTOEz!6TUhF|yTUix^% zIqFjX8Gxk*Uy;>AALn=% z-YQ-*)96uT?kK6*d67Jp8mM{aug~7aziv~sJ1+qjp&Id25xSYKl3LSyo+KxyH)ie~ zYXi-$dD5{w(qoRO+fM*`n>VzOd7J=+*S1iE?`r?t0}p(j&xO@kt%#(D15~|F7zRp+ zD0*AFbeQ7|N2Bs>^KD+6cdvEzP{DYo0eVu=MnG2?HH8T!*DKJHAe_c=n^aG2b$=Yd zDir8`+Q(uqMLp#=8L@_S0VsMtmo{K#ehu&fat9T4RYy$697IQS=F)nbmv>)Pe`42p zBO`qF5q?oZd;!90JF|8o$bMc$0>$K4GFXE$LVLayaD$;}Ooatu=58iff+@#nBM2Tm zczgwi89kC=A#y$+wLE*bRRJ>_-Z6tt*mCfpb916Q6heSu0&EDVZNcYHatIlxmmorS zY*m5-OdjhoVC@5-(B_~jQ^{9b%6m$Q$ejA;;cQax_NfnVA_f)dCcP;sl(T9N* z=^xL+kyO)x1t=oP2Wu;UlZUr0Etol_RB^Spe`M)ND>;E1wuzi_D1%^w^SFfA=VBMo zW|xy>QSouy_>sy&Vp(ZcB6MS9KujgTIA2weDkYJ)7?bhXf@|4?6M344!7bJ&6MY~# zhyh|+`F1QfkXHzox3L3d5P39EOQ0BW4jC{Oz!o_Jm3~r~ueh2?=_}E=8xt8I1BjdX zXr15Di3X^QH6R8uuzUD8n1%mTeY!K2Hx`*^c$CXYfnfPj4|N0Id42LpO=4DGY=@bH z*NfhgiJEy{bCv;8rcnSklTM?AF({qhp^QUjnpW0YDDVS7Fa}@{2Vp>=p;S!CS&wh& znpU}v;COc5SeZn{ng8h|YETA`M25U3p0*`>ij_(PN}LQyp5LVeWKf|vN})Ik1Q3*n zycwMfDvd}soAbpe02zW+$DiHEWq5RF6SqGZNG{CDqKH9F?75}n~Gn>sjrnb?lQui%M+v8kG#gsQ>nCiyCzSX{kjTa{hdu04zHhDlAjyFdrE-3W`aTBF#Ig9O%!ZX z25&a{TO)f|fs`NFYT0!W@X5L@e%`T@M2RumJ~ri#BZYEv1U;24XIDYK>~+3}2n%eT zh_MdEL5YAc__73=5Gw_xaUDsI=}S#ZutsUExpB5;tyTD2QjP`BX&eyb#yajAnc(+y-@sa0tpRZfG&e>Q~Fv~>b)@Mt!X z8?6m~>}YnGj!T$0*Gtc6;ddV!wB7>wJX>d%N{V9`eZF4KygfLX(4VU0+fkjJuEaX7 z+=ArfO0+_ecuWS!1tSQ$=&E5AB#iWDWygvf98Qc+fR+VK}~ONPQl*Da~v1bewx5%!VrCBayKfzBQmJagRAAeL$KG-g zo;nZ)W_-QuVSHJl8yK5i*Wu1xC6Ag9r;&iRF2n>ZafTF@?8r`{=zrMD&VN}mm-b5P za5xtoftN);M)u3QIv)tNs|?H?Ud_#SuJ*DFiK%wHVSU=9oDbjzV^zGS3UR@Q_0~N@ zjelz?f8U2)brLBreN!G^t)be2${2l2{n2O{y4#@kZXpO`xiQU1vNM{MzD{FqSu9?F zi&KQ`P{c~AdO@~Fn5Exo9=9;TFK&8vB({%f0Eo2?=6hFz+qc->Fx9BQjM!TWdy^^_ ze10s8ZHV7$NbezfEsNgSe(szy8CjC~qlooYnk%{E!>}WY2vys$Dwoq41?M zQGuy|)2}evBE$3Oba{~uLR}@sR8WBH#^4+mvnppl+F`*O$k>HPh!Zjdmekv8i7eP4 zy)yl4L(6^FiQ~4qM#A2XzP~pMWd6=um1&JY_BBi@h2L#`dEKbF0)a4RB;U9LVBJEH zDzKHfoIjZ^z7ssV0l=``l2qMM{XX--b+-KZkgo%giT&tR#j=@o(tYHp#p^S5;;gLF z=_BgcKko4(9~$srOHxv83^}nTtHtZ}SHV6cI>U6F;1;zY@3LV*W6Z;gqGPAO3|+6^ zzzO$7(q1@Ds+N^=(_5nsa#*DqQ@+e|D#0dHw-mf~08Z}?sTAByAu1wnAM-{SNw<^&XLGJY%=` zzaGj^2LU_pD?T*`((Bq4rXQA9dzf1;1&$_u>g#is&JrFPMjCr2Dx}VC{9KwDBPALvD(^{&&d~jQs(%TKY>e|l#V z8VfB5MVy@fL3B3r$M5n55i}U_kwRqfEk=s|Vbk`)NIm{%GL#BIbd$;T4Sxt;d8^f1 zU5F$Yw76`V@C`X&QXE~|_4)SSb_h!LaJ$E%>OF8CzAyn5Otr4YIHKcNdOt%|T7)BV z2%g~i?rSMVeRHDlVN`U{L=q3IkI6pbwmx%lFR}PNfb6&xhSs9dV0$E-R(S(!dKiAo z-!(xPHwL+G&cylp@tam%%x~US{iG7$n;hhi?x?AsP}4sncfy{tv7X~Cz=r14$cz27<~N_CqE{yGr6tjubv)5W5jW%Hqa=qZ+Tn5p7iz5H9pg(vkp{ck&1(mjZOEdw zU+tHBF>Q9B^VXZ^!_`w?R6;IxUqgo&xr7y?f&G`jJU z9%BG?72N6qBX19RQoqb}2J!-2bzUm3#`H-vd1>saej~s_l6G|iT^4|*4M7!8*(770 z|F|C@JyTxUHp`aM>jGwDJ6RDCTPMa<`6c#8V~&4{^%YmxwoMwht2Uqx|MzF95N6Z{BXEt5oROfLLmR_q)wT8I=_* zPDR+|r)rCqz)KSIqBxU|-jq56NZ`nq3)MnID(c2_B9`W=blz3KH)DtHw`?OpN}V9d zM%?87=_sKiCTw>B7o4a!XlK>fg)$AAv->cCfC02`gg?>L#csn9YZXqbq>P!?3M&=8=S*v7K2NJ7`J|h8o?`Un*w{|2h>~; zMXzcj(uJ>vMq~A!PqR6ve?f)MW5bem-qnc-V%a{g3{b_Aj|ob9Q}^}`*3)DP?mt9( z++atORa5TM#60?%`?e71uGnRzc1PhV+;L74iGJ@!$p5;WqWIr;mF`!htl8NV0(&)#*`=LRlhY}?P$RCO_zBO|2Ru~ar!4~IJO1Q`sQMI5vOEe0%kb53DMABKV9 z21}8$$2!y&nuSifEXHo|XmXh3D0G7pE43Mn*=Q%a@8bfXHr^iz^@8RpN`~a!lLDOZ zC?$lGg2_sUu>vg!i8X3rN?Ve;6b4kto?L`xjrznaj?-2u!0}JC7k_ot7#yN=EgiUpWy=aZ01&28GiiDJ6fN{{RaI)i3?hco=4;_7 z?1e<*6Wx3zJ&8K%BGeI$BvB%-r?ol8d(_iX8`$`3Fg8+d{L?V{dLbcIC#!Orp`{Z_ zWz;q^HS7bfG)E+EPM+es!c6LgN74IsZ3IkhDvpqC{>ZPl1*c>r*Bgcl2u+j8x1{I` zR|Io9PZItUD#v^>mPnNSUM0juC#2mdikZa^r6ESOYg&353B2tojpggdLvkt#-gnTq z10-ObQTNw##-ZbjL{6+<$)e{|zp&Z*Z058eH25~gU&&V0T!~Oe#=;#8lldvu0?xu8 zjnYS}*02m;i)4N*Z4#fy~!{w^Y1yQ`jBWaxJ#w>_NiLVE4 z`O+tf;hm!MTOw-Y4lBQwYlonkMF8d9%A`<~6{Nf&4m|I(JjGU(9ksS|^eQxe$yLaH zZ5?`86Eo8Ll%Afco8nh`I)Km-D{E_%oITQ+%odB~?GjyFW27}!Pm)VOS7@hfoTFfe z;UC8K5}j!<_J>P^wW0xQpJBj9ugeh^^vTpZsM;P=&wBBciZB$BYep`k>r2rk%c~Im z`#^{MiGLFAKjY2LK(+PO=*Kom%aV8 z^*w{cPrv9^c5(9R>Sz{9KS^bWxyU=53Dv+xY%gg4@CB)>_VM>zoL+knZBB*c@#efQ zx=vlq4B|Uc<u?Qk#ECyUMA7`qN8B39mI?#`9Pg~&uPAKP=c zfKJzVG89`FB07D52v%Wpsk&a1Zd)&wBlcPwkGE=`l5u@~5yaiTozcuMX)}8#?pr$% zh*Yp|12>QVHN+a9NGz`haM3ir`zJwwG1CT1*>SH!J* z4wkYw_i2OeBVdmVZN1zH#{oupKHk8c2i07x^UVSeTDo-f?kG! z=(4$yB7c+~9|Rs?DQ5A~bOb1$k>CU73f)0ZTUtT`|PChR>Q)YTW z#I5+(Q6&&$#Cr3E;)xkWPzoQJgvZO#o)SLCL{P_|v}-4{j2gEB7zeT%#5jlHa!@{- zUE%eF1`i-%Z9Hd=aoY##ZnSm@bO;`J42Cx)S{opV(1?qLJUnF0$KO4S0Fe+w0p*DR zI#c~CN8Si}InS2nb8(C%#(;n0?cCWSPHd98tb$MRVWx%PP!uYRb2`*7%0 z%j@$Xi-2F7b zD3P^E>&Tu+g~K?36z=>ejspsFnO{Z5^_0hPt@Ftw(5O8*h12M3f_Rn2#_$4JKx8Eu=ezis*Ropi%p27U`9%LNLwqrJL~VUbhG z_U|@QN%Us^B^0)q64EApCphioQYY=A;K<#1voaC&5O3Zi8{R zMi4TE4^&G}n^;Ta8Y_~jO#POg$&gX%!Y!dB7WAi*{2ki~>jn6) zC`9YXKjD@i_sLOOgrlO$a%2jp{{_0Uw)u#BZdMtzkjXLBQOsVOtc>M#kOa~WmD1k} z_x3CL%!s^6LQDjCHc`bZY)Ba)GSz`|?PbCU1%8Pu?@Nx8{R^G|F?f&vP<$*}pWa3=zowCq~m;qRJo0T}?0!(cHdfnW{l=&;2K9k}5y1@@_CObuYKPId!VDvZo6e_CXX*i%mR?rudmlYO0@e=1QerJE9(0 zt?qEffJMGJ7O1v1`29-iv}~GX8K+f(TdF%e6f!+BI>i>5zBM)u7ahYYFZv5sdPwMI zGL&u}5~;dCMKzK>|C<&O0fJfpzs*IZpsS0aWC)3>3yP{gv;%~O#9wG)i4}&hY$R68 z=x7Z<+{6)r?r>@a5I(FDRcqv;KOsp5j&=jgL+j?YRwi;?0;!6B=aEEnNZ>nEyBSrd zFDjltkEdmXLlGi4&$T$n!8{fT^*8DWGm8+A3Jqs?JwWlbsJ)NYmM7L`0hu_*q5u`w zi3^@KKFwG}vZclTZ$>RO<5NKtE}77U>m5r(31 zy)JE+Ufvt6l4u&+E}n=|l+1 zM@iB0(aEgmk&E(a5-n?kVeCQ}0J-?}861M_Wi~78a^j~oiT#aW@&wbnf*WLFTAmbX zmN^^@B~P!ViuU2l=fZ|Lg}%!9%kP7L?qa4Ty;t>d{e;tvqAQ?~w9d_nUm-$UWPSDQ?aN56~B(k20-5F^n?Y=#X4RGd=kYv3- zkXBV>ffn`d97qiS<^R*7uieT!)w0-Mrs$s5%mkQ@h1-a>;Q*Q}L$*43H2)~Tu{nzp zObitZ#`^+xYRC1*hquhL7O|dWcucX_VsZ40+mFXE!5I1Sss#;UK(h1cLfhS1s7djm zOl^`eg9QlM4X?k}TDk!Af1F`^4x>dbA-7n?S6Y}76}M*HC(7!)=`rT&D8<*&`%ie5 z11FrA5!72`NWVollLYSNi@j!1)({3-k}&8C;64h6b&{$ z(ILE}s5WiukP8N8v4FD(hA{!)lh+%c4#O4qs^hV7G1$Vf5tj+n4p*Hw=854lxN!%U zsuYH!H)(5b4;an2(uH=0gKv3We2^Fr2}mWY4W&K2LM-V zk7d6q!oN34Gl6Q#Kuz{*55`wwRppNZO>9ea&3qE`XiB>-U&;ZD#BOq)hRdAF78fl? za_@+)JV3Cwl2CRKmep78jx;`rqyFj7!#oQo*5cntjn*9%rIO7SZi>lO!~VF+3$Iw= z#~Rk3n!zMMn->&)9*WDTWc9EE6Ik4^v<3aR4cA!w7YuH}wy*e{duYgT3&PI}Hx$;L zMl>*Us07e1w6=t9X0sHHkC;l8uVf=N;?BYn_37Q_L!X-&0NF)F0x?aBc-0hY50kEY zg25??*Z0v9D3A{}9*|#M*`+LT_>;*;g7p+#n$mn7x5EjiI{;JszWXx@E$(@i3(K0% zI=cvNt**(jU&$xNzbicq4CyO3KN}eJC8l67hSLy#(KN%s8WLxfgT_NT-tlu}NKKnE z<>d|9o73)4(bR_0H$_CLah%}_S=cKg0QvZeK89iwmrf;aAXk#>LYKt6$PE!Qq-?C? zYY~mRd}AMbh6sNs=ghFJHH2$+l#1vYW^5F6F3Ca|E7N_k+77?GP;O!y$|I1gt0C*r+tsfBVJ?G zHyvxbPzPx{lYW2TkQ#JVLS))#=T)U0Bsw~K;EtK28WX9Dt#R!yYZ!;Im(^1ohHIHP zR-wnvjl;{c_0PED-U|EWN}|r$BQ30zFrxO#%1?(d8na7r6_=McUWInt?s8X-Z}DUC z#9XllP7Ud6vziN?D=qGpI+7N#4$2J&(tT>NAmQ0XFQ84>{+ozy1Tz0J6%3>(i;T55 zrBSyggrxZg(ZfGUHr8hr^Be9T-pcx?6VFEZR}+xr?+Ps^Mi~yXDjrX=*Xzh)vqLk_ z-)wH_;gSCK&TxY{n_;Ykx6c)w!FinSd9I*mTps-R6rSU zm-!TjG`L@=z?L5Wa$uX6LZ{zp8(E=^xmUF!@l!YGi`nNto9i^6KI8MH0;wJc&66KK zneR1gPbe4-wqw+=!pj*3(C_+C`)UKj7A`Xu1LM$8`*(|TIovgQ^=puZCAMLho(tsv zj5^t0>VLbuU+~I=8q1NEW90vitr47m_Aha{i+D=tdyGZ-`Xlt)@5OKKE9sN2=phRN zFRzwFf_{p0>Qcn_4y8oGG9VUvS)gLJx!>G_R|>e=1?UR|OD2^oih zmDXVhUON2d^k~AF0**xC8r47K)m8zK1%+%*x~WcqS&YbX?2L*lHVBz-P7jxhyYPH$ zQcV0t#|-*;3`{>%7q0um$WjR=STM@%xfB9}?wv~DYTXDX)uDGY;A=BI| z1_>1d4x+$FTVTD1&bKN(-E&5<1FU zOp7|oh#bhZ^Vc>LI*c)0=?a(UoeHQe0quC=5}b)qJ@o`u;m#ZGG`2d;QcQ_*MRW6CsF% zD1os{Nf&@354o)1=;JMEA6dAxoJ&9rY+u+$t#Tc@LM^f}mBZ?8TT|M#za3T$D#Tl; zMtt|Eq)5c-HjUTj*ttP(ovO9z5yW=5OPv-t)MJz5+K`3oC!kyUtNf}J)n^f-?Z{vI zk+)ZmVUTJ6)|QlejIH@&dw&r~@98MuqAdIb#K?|EfKp@XmV+8`R`R*V-oI<(Z!d}M zx4K87tq^LM4MRr`0rZFYr_+AU!>qy3=kmCbzy70)O>_O;cn#AR4+`&qB}8T5^Ix}y zlf^*+EwikmZodgjxY9{J1C7mH6sQHJFzZa8r@qKH242Uq{C(A~IMC*}Y?mA7W%#HN zJW)4{I|hsROZ;BE@E-arA8GK9jJiW!LF8a#wFv(|3G}4r?2Yd{5YpK25JZ=h#p1i6 zmnFxLKxvHSb|UflVGjQxXqv&oMt{~zH3Dbp+6&CTpltZa`oM$oFKTVq0J@MQjL6C0$?P;}`YGo1@?RdD)GP`{K zvLu`vJA#^^CRrqL2$hdUj+j}KFMMvqCiYh}?@m)Fb_4O|FE2#sg9S)lV~vtTHX;`t z-SY#P%?mu2$o)Ab4Q%oCE|yQi)Q~+ZgJlQBIr1~%xYnz$aHLYs9&#zZ#Z2Y`$ucQV z4{cdktKZg51<=u7xw*$h97R|P^PS_|DTE3I4d3>^b3Hx`{5FDZ>tc?_m=3$pw!-a- z5u93hu?;R0__DF;8)uxXR)0D1yoMZ)`_a64Z@S&cOX8(xW+~;+p(PWuB<4(MB-y!V zp6{9pLLMHvCD|yczu*K<;t{G0H=R+UOfkT9ZK=$ol9>SxBMan=G(+Ufjz~LG$iGdr zTGA$X9IK_58(Kz$Rx*>M+KcZqjFQ9E^W@6l@1G2$Bh!|UYyvI+^83%mu}jx1Vk5r$ zc#Ce2FToeGv=$#WQ&H1+nmN&m2nB-VSJi&q%eO7xf@ zzXga#n-RejE9pw{PmLrUTb7v3$7g1@3LSF<$6YKIu^`f!-#S*MinZd?WF?E95KE%P z&?oe+<`KkPcQlwwT{>}GqEYn{gd!D%mB;`c;EuMc>t?6Gxpl0494|{UWKl*FLZzTd zon-Cukb7wm!}P-meZ}n?H;=^#L$x~seX1pr{!=7DEC3=J3`gP49dXQSMkKNL{XdXO zSPYLteCG6Hk+BPl$*xBWqDJs}XwY|sd47lC_!E-O!sanoO}xe9Ki5E%nxG)D0v`BDO$6Rz$I@4L|>n#6kz; zKr)#cZH{e%tA{LIqS(X!2CM*ngi5jgFRn_WjM z!x`>o-;ax@iCWAY;ApK`j?Nh&Gxf3CUM*!Vl1(zaPXz!5mAM>X%<3V+2tBZr3L!UY zR1Cgp8eK*+`9i)D3jajHSEo z*pymoqmCg+drqjHp(U`^ilV4K{FslC90p>W5Hb{%!+fJu;voXNB1qzSwMK=xyHdqK$D6myBHde!XT8WeJBN?O^a}l#Lk6-q|tE@ zNco_E|AA8+hS!#`ij_hky5DUs92ly+%l{WnY4Zh*cQkCuXP?nx04+-iqaaVUKEzS# zWB5qW3D;E3l!#pa3I+ETPiusn0HpNHw1`+U`4Dti_bd_{sJ$mW6i500hf{KSoDb%N zSXUQI^R)Ds{97)DsxaIwMuD78>2I$M?|;IyNEj{%ORDq!Hs8JsMWA7Yeucb8{qS>; zJ-O`HEOv-tbx|m+IrU@#=O(Yvr~CKMFN!~3lf(L-FZxLigQqZC2V%FOyq&=-f4fon zW^B_pzYKncPigod9fU!w5XsRP^194j@0Rt=1I`D2QxN=6wA2E8yZyH55sqST7z3lH zKZsZ$@3!#8jV~>Y_>JOSZq{HaND;^3f%G*=5EVfm)M^T|4y9{~NwXsP+5rt_85>)P zLT^_XN|YUJkFpWcdnR?@pV8Gv>jh39!iYSdt;|~Ivuz^ft@H_F{!5du%5pc0j*(9} zT#li$pvr`rs{{tno6+0xe(?;sSU)R~X(Bl-r`{(1R$+M*KKVazim&gTl#ggNer-w2 z2Az!~3*1O5-i5l?4$Z0>l}<8Q>ec8}kJLYvsR#udm`!GzC2>^42p0m>#FbaV^BbfD zs6Ny)`x&D&LXA&KY z^u$IsJ4+RqFK8&n4_8x*xzXxB1Q+j?ARrglv-*@3#~IgRDKli~2m=+~XUPLKY6kz@ zk?KyslSJrUm_e|cA><%t?imb@PHHLz(_q(0vY&sEsR)tpG<{gQ_IUbfWaSGY=Ecxk z(84eXN@KXOVkYZIH~T*oIiK%cwhn*&%{+_xNz}WK!?nwMmDsEAeI@z5F@q7XEtn$x zYTS;#!kiR^c)K-}wBwCcc}++8>@_GMBiZ*)wEBqVzB|2Vo1}Y_CqttMAb`wbutaTo8b+4;&46#4iI%9F96A}#@gLr-a$h2q_q1rxnygnfBMv?1w zH;vBlpL=5}!>5-!y?qrK?R?)i8pTNfHv%TOdJ4xCJTH|-@4Ze9SNXb15J9~6rTN%R z!2d%e(kM4J97T}WH!P5`RNUbiYY!G~^-X&OTW7TCTOghl&O84Dx* zupFOO5;4B#P$D%o0*Y>lL3_TB9tePw&H*Gr22$uYoFjz(FeGte5Nh^~2w*G~_1sGV zD|87s0)Y8Jv=hf)afum1-hJ{cYQ{tDETo$V)pC&e<6(C-Gn zv-J~6uoQ@)@wJ46@ebKhGz@DimxZe|GF}>_g6nn&x!I2bJ2Z#C#v{}R%;RV|TLUQo zr3k6I%Ch0@)EFArU>>p+#C91=M=}x!P2wk@K$s+QP$`&e=RK{hh9ybpbOrHNX##r? zAT9TyT6@A#$?!XF%a2XC!B_V%lg4rkTa95k&$=kEKXvq-y-N2Qts;*EkjRmfm(G91 z^s`MdU(E4qA9WfX68+XGm0#*GX|Ow3`j`r0!AL{!$gWmu#afmQE4siHM7 zOJ|MNXz{wWHJF~vml(1z((brL9jDU@h8}DP&-V4yD>t4?el(%HH(Uz+Ru^=A1%hT8 z(7hJ9y6{tlDiMot?)SD(tQ6zqn50m_IT}@7p4c_wl)RLXP1H(*7+W(~2J@Yp0 zN0eP7=RD0{{);wPgf>O2Inv(Z^S3cADTE#Cb$>sXDM748uZjON5la`YvgBy(^G#&m zj*p$DkI6k+sLgU=@UnP?+|^dmBpipMW&}Gm!k8=3+$_)KGxc^j7Wg-mzF;wneQ;#tI(;k(%x4Av{f5i8B6NdG4RsPL#?@%$OPsQD=wEhJjeT%pd zVQ6xvB(+v&80GWiw5bMbHAO4=o@f>z_nL7ldb#W|H|Rtf&e`6V1iUbcTMcjY@@iqq z1!&Fv`qfo(saZ*BYW)xUuZG;ZhpyAsNkjM3NPF_H*7>hzHxvwr!-+ICaym|$;bBIW zavPx&a|(|jsKQy33cJxC%YS$blAZKd`hxL?oU-bJl)iFZSu{yI#Qm$ztIu<~1iu4rpmgYs1lf z0%`uI7!YuVb-rB}S*E+i6HR<_zW|zRc(-czYvr&a?^iya$`WOu4}3`)jLST{dprx+ z_(H>W>6HESH&p0uu=BZDpyawuz~~#w!{f0hptJ(LqgCf!@Tc(SYYvd#t70id!>+p7 zuVr(UUY1c8q>rD^XvO<#RatFFQg5KvdE9rwrWXFlG7+=MXq~*9=#=-Ic~i+HNvvj`+F#~s4iWp4;ooH4h{JeYHzV5hqdbZI zzqR;XZF;GI!w2cW@|@u<*1@6C&MqVVL<+Geb|G{4jxYgVrm3j$*Ul(E2UAhxm=$?A z%@kb5CsyCrXRF%tn2RIAmNVKvnuOSVvC3x|Vn~JT?ENIy6hqP=MP!JKnj3DmPZ`CHRJKp}^HzBjAezhQ=2HdXheV(tD+t63U%Sp>0u4vyiKn%NqBIasL_$qYyt zu~BY{1na*ccd_uxEp3-l!qoQg1bQ6MXPg(p4AD zp@BVHXMZc0RU4IH!&uVe3vy^z+?z(+Qj9=|EODK33ag9e0=%KEh*~q{+Ng*Q8pWk~ z>GoNfb~wrTznD|%@I!S{V+p;V^qi!&Lv!O2Wp%;q-0_TI<<^`v-bPj0Mi4fiWPe9L zwI}oZvKY)ED<-gwq+z4HUI&T@%1kcnu^itnUCVaMpDzArn5!5VT&qW7yT zp`zyGQ7Mfn87-!G$Cvy|m41sOc_>O_nRWfH3}k}2namhMSN(C$s2r>A9olTcz=hOm zd-D!aGJao3S!{&7QbUzy%6BDLLD}!?Wgun-z)7Ho+6G!Is?x>dk zB-{9n+ib$BBJ1@mQSzw^3izP%-={!NEy>&s?-C*+6nbf299tx(OSqa_R0|sUlN*lZ;|a%c|l4@n5VPOp#Xs~2ph&mS)y^;<;klZIr-$sjd(&=> z&1DuM7!2I)>D+FhH+1}_)hkla@hwl}w~$-QF4;(d4^FN5=;ix%+YsfY9?g2$Zl3a_ znbeS;?qJ0(-HE;@Cei6r*Wa&DZq2^x`~;}VZqE!e^YkUNK3aXea>r3z>%GzdFs%PS zC4^DGhGLZRN~L_i1gQK_OS%%GQI99pgoEl%H#cr!c5gpTK=X)Sny+!cWmL~u7MK|V zG#yQ&ErU2*w)fi&{eiYHRfPwl7T*N*?&h`1h#2(=jSvKXKBiK8jFy}yB^I!N@Eaq3 ztsHzOKZ5+#8AHE!bC&FL0Vjj)C8iCN<7ZM*d+rfa-4-u-&CI;nbCa;X!BM-A zQr1Df_3_C^P0ZOh*$aIESr4O^NB3!;j`P4*| zy(Y=OMF&RN%eP}Yt4LK>b>;nhePrT_Fr{@zrz85gK(hJN4Su=~qpjY==(&jxD(U_? z=}V&XUlWI@!xVqV7*&tXpR|UjB&gprBeVz&hUG4tp_lR-2pc#D!*gd4Rp$xALhjn< zW~HW86LEH#dw%xTl>Z%NDd^5C9D%=NJR|$I^aBweCD+E=ViFgPob_MqD(8ZVa5fzJ z>TOJ8m?^){^}Ldqy1U~I+n6POUm9kHyg08i|1-tgonaptTdr!8-0Y-XlA&;AmR^dX z5*?wQS=9*{l^j`gGF%L0U4xx{E)Gr=h;Q%EB!<0PHcCo;2;QK#Yd3Szvw2<#rkf&h z$k9&FkY?MU(LjEtLF9EubTxI+HeGkx|Lm`lh*>mr8a(hEtz~c~?o+gZJ#mb$L9{{!*}qH2a>$>BGBPNj9^7Y8#D{_qUCCspJU18jNHbNuQZ0xgYip z`!{+My6Rph+Oj`F5B4bEY2Z22e)1oGN2$1a&yQm69IeeVvF(_{zci|QlVK9kuJ^Im zd~ZJv45o8`A0Ly)&$?nUy2`%1lUuaR>rihCSMISH`fq;$QF?#hHMi?yJ6D=*!rIh5 zKi+Wwz;-1S&fdgJK^(+I3I{%#{((IIxrz*ZAZ0cG^p9?g#66|! zP*NI#v%t#69x?KDUq=4yiJ7|uZ=9?Y0qg3_4fAaO#eth*=7DrP<0K{A@f7)Z^WpM% z5O-VQ)s9Ry5ZJD>jq~oP$&(Xfz$udg7%SVCcCe{Q&ON9I*);j`2W@S5^lWN_Xo$oG z{O~zm>FW(bN>(zN`F}jY*edo=nf^48n1ouS_csih*|dYprUa2F%MYf>Q`96|nN8p5 zn*`~CfT9-a^(y*w%8YZV%=Chfj0vnolQZr_n-?`kyUJ2>A&|P5^5coF2io;iVcV-W?ww-mm9^*GR&s8jRLvp zch-+Cn11v97P=Hn1y5dwv$uBzLdwM@X64b_QZ2&al_ zWUnbU#6{N{YOR7)-ZyG@bdu)SD_6rWX(6#jt*OZQshbF?4;&?k`b_X^v3v3M+sWa( zg$Ffij(OU_)x4x{$a0(X#t(8IP_4e8w!&1KIUytxf$|KGO#jaDZe;k57H{LOuSmU9 zgLYpWKXcx!G0UP^zenxBMyt0#i|2f@rbO%WJ?`22NLI4-NA@xSX^;Co)EQ_gO|*dZ z^C0#R)aL#Elf_f?8?gfT(+&GY-i*pE`%C%t{ZH8)=huTV8f?ZT&9=o~-3Q>Lej1@i zzJF#RYFaB;u^|=eXoecAwQAq#+-4bnB_+Sk zH?oG^+F^R1JX3VWA$SiQ7xN!bvTx7HywtV(8Q?bQ@fRh;n7AVV33LN8*HsPMj>m;X4~w*ncsf4G=t%3;C1To z7560ag8D6PV;dAHW&Syro%VK2x5Am`swf~w$;N)d!>CqzI2O8K*@Hqdt`bXcqcHId z#uS^|NjnPC1U8{q+2Q;$P4qM-wV261OV)e66|QeHQCXvt%sTGl*>CB2l2_=K70M5a z<$@n;eGwl@5O4gr(2|qtxamRmU#+mK%r(N(;Y^hMQ?`{iEoDzj`JT;xFaTaQj;l4c zs9hQ(rIPRt!gbG6CH@_&_qSMcR4Spn-JswU!I)y}L3IcNQwzB*#m7 z0^=a3^Va6Phf1I}CO7qNRX?d`k9d~%)uHe*leqEJhCrJFU#6e}V zIt7)~dVq;kovf;}n5S_Nh>6f~y^BSMq^)2^>@Eo*j}+pp!1`o#D`@w_e&V;D1>w#x z+h5*)48MzPDCMWo@Xp$ZArLx0>+=I^f zz(RapT|BVkqyAcmH7mzHZw5l*+DDTR{>cbSTWLtG7UGt)|0C<=VqAz%!s^@ogDb~} zC#NyY^%r-0`4aNW!KuJDD)+Cj z2<#JYj&{OmWH=&zJ#yg6U1z!I*vzMo7_v@wPov4gjL*l};)%^1-aXPM1@9CTv4oi5 zIdo4k#174GeilY8P#CS1L3s_?3Ij;=Nu*Z--F|u&#w48ZTO0#$5RTtrpgG@|8EL!* z#0uz^qX_02pcKUj0^c2^6}GYZ|5NoD;aa!CoP3R-wHZQG5CS1DOh!Qu0jP?ABkUVL zIQiirA_ev^dT6!e!Ty4lURq8~zKsCmQ8;c`_XKOAe-hGHV9+*?X*BgFA3Cn0k3@yi zhJ`2O{uaXZ=DH`g3WMOB13==bKr|vGB$RGgC|Q`~&k=!fx%n6~ugt|eL=c9^;c#qF zp)AFX1rqt8yj__{?BU!m8OJm=F2XPx#hC1w3%Wm=S7c zLNw!oSr#&eQ--7k)Ff&wD;aO8&{N)j7Z4G^*Zj7dDDuKX2FE`c$qR|pTf{p+g7X_w zENm09k^pIKCpNWr`88q}?VY4O+PP9~HL-{zs%|UGNCDn-l%HI#_#EIhP* z&K}^xs`he|wxSzlDjfJQr$x{i{53?U&gXkJFkFz3g|WG+&HsX}F?Gd}-dim0kV$S} zM|((>*QLd&X68Tcp7LxTp#~Pc(ae|u@?h$eup0!}e@}7bm8Yz{6%~5g;j0O7-DY>2 zy_-;{4Qj4NOBYw?*-A~W+HLe#0`2Z`%4_!orXe;r^?3s7NKS(#_+k!??1{FT?wV{l zU#=2~vo+rlr#OOjwuUqU=2B|p7P4o6Z=(q*I#t{le@lZISW$L>K1|-|JjceUzH%>1 zB)zwjS*bU}jt-4)d%?G@|CZG{E=MkuAGQ5F9mRV)V>F4K$dAI6;ADw6ZKJnSMy&(a z*SgdA#ZA9mP3H#{598j_kEvSX_;OAvVfyjHYlmAOS8^mF<6K!nYsZ_-upAb$wxi~n zhyRbPyKt&1aQ8jD3)pmbcO%{4rW;A=4rytS(7oyI?(XjH?rxNp7C{t5L7DI^-!50W7q9(6RR9n_K7uLu6;iye|2w z+FG?adQv;Xa;0>3>mHPog-!Eyo%@%++sFLN!rXVNrhzXQ6)Bw7E#ydKt|!)zZj)CnmN{x4X@m z54Bchhm9F*$o0!0x$yXl_6HRqUU)5F5b}S2mB{o3Qk{4EeTIK;Ml`rK<%)l^+$Udt zGL3DZ_``ekQJc09LmJiF70hO>@v1WRy5-m&F8QM{smWWGj5F?}z|d%U+r^QXuFB)n z#l^BOUV9Rb^d9O4tYYWz6;RspWV}_3hbNxji-}4#=Tn9?Ik9%1$-sB-pbzz(Y@%~L zJwFQ1U8W4qd60X-XVN7(Cw%H;)ybHBC0&9gd{l|G>Vt@iSd)cTT*`j>rEV%ko%wHs zdNud}AAN=PYu}U3#J)bJ`gffYQJ8MGkk@uiH~OdwcKL@Oe9boI2?g@N7KnB4bl4k7 zUGdKg$E`d1+kDA)AKzhaBE3jDxoWb6pzcXa<`>9>?A!Uw#&wS%$ox0;#JE8YO*~?h0v1DQ8?FsJt z{q56#0%N6^1(bVk2N}w?8~62jXYU%;l7$twd!nXAhqGZHiwlPi+V+3f3U#IYQDMg} z=_UaVwD_Zv-XMks;}Wa-IsI{Z%wOA)OVtz)a7-Y!gXu_qkjk;utwi$t_V2?kk-%MP z-eAqPqsMrz7DTZ?`x@OYrjkX!!INJwsMIt_XiW%ztP4yM#XKFL7Ei*hiNiYr@hm0Y zW;Zh(L}2(zRQdB0s!F_Yr3|9Z0C89bixOi}qI<#Gz4LxDr^^YKd%ul)Ptf`+F`utk5o- zg~c+458f^>1}Ekp#`Z)r1pr7N0HoXqa*`mA?>HqQm|;<{kh302KbEI#IfE4*(hNX~ zMpUbI_x=Pm{Z7z?RZB*9XD@V^OrwjEBL@3%)Pt82e_P-u+n9i`f+vN7Qb_u(CP)}Y zj=Cv&P|+~k07p&{vM`nnJd!Kgl;zUoXw!zp+zoN<$gZ9WqH+wOHz0n}jt0bZv8xR8 zkx1%$w((vzy(|xvTHz`}a+-e~NW-iV6jBo*I&7vTsCNhjQ?W)bOW=1X0>4Dm&X`0C zC~ZzgvDY*}(ma_p0PILhvmO7H;a1A2rsb0n$u2bBiI z<1c0N2{<9k<;nKafu6N^s*#iM!8#AlyhX+d5)caxS|){DZBAbf`lKXBZqSNwK4iRW zTbvPEiY`1oIt**O%_X^^>rC#X|DzacJQ{aCQ4^ywB3kWk-A)!mVe}Y@!a~b6%|94I zu`~@Jfad8}w-`q<=0ApQv`@ z{2K)#i(06`DRu96h~#Bcq@@}7hnC269L;*EPLUW11D4Xn`D?BZE8!h#~!6TA`@(SdYFqk6a3py}p-uDVKR%gLvV= zcq6JUPD&)OAchBoysrvaW`X#4q@!dom^@bUSsmS3EiNIK1{Nf*tMk@og{N2T)|dja z%L?s@AgcgAwrF>b2=`RKX`y?AJEhf;GGGW+VO=QERa<%MwaOzGOq)Q-I@2MaDX$kJ z{?a4TkV03Jvy{cXz#pjC9mC7DJ<0&nvDJO+X`{oJq-$@3#j_z7RWyd;H00+u^AX5X zmJHIRkhgA$Od8fGIeI&J$vvS-PsS4DVY24I82kuC%-bbDJCrLrDlC?$zoc!d%i`wG z&djGo>i&sDRQYQ20!Knb9gos2Rul%}@FArYQVr7%0 zS)$by6(rnnP9~TK1f}S1gb090p=#+!qu#2*hsj*OLx%Bp*Z+-?$BenVqa zf>e5>Wkl$ONtd9PnaaPb9nWeq3o+gbGFs}XMXxhfPSIZ}#suR(goJp3QeYz|TX}eU zpcGf5)2Rt|Ysi{SkF!J)X%O{B-2qn zm#dbUuf5w@x;1vglPdtE>lkG&L5L)37W3e67>^|L8P0mGvI3Ak-{JfSOirvV`MnL<-C=()C(j6?r2_Mp4(EMW;8!i?C_*r` z?u$8_UQsBr_)3R>$$LsISWcEpCE9;^C1VSN=rV$ey+AMQ`XHtVAilZ|2h}3dE?ei?|8Z2|7;$LLJWp!zJqL0+0lDXu}vRf1IN$2b${Oj@t~n zFOD>pV>r38dgyJL(9C~FxF*GwaLFQ+9f%)4fJ)|S&8PO37Z5}{7Mtw2h48{ADZrYo z=n{+B=9f~W;^BBzDIle8jc$qHvy=y`+LQxwK%O8ybwfJ2nAd-%qE`TxU1LeX?G;`- z)e>C61`_n87I&Rmo+=tvW&Ecd3}iI>*xok013*jBsnG)|u0N=m)1wg@tsXyZrtsgX z{9Nf$i5apu@MMyr@YBB42~tr55u{mdI=%A8(s-fh(0NGd+}Y_wySK*bGU?(tZW#ua z`VV#7eYM(RZK0pXw>KJ?_n`-cMQPxtI}L?nf5s@Xl)dQO)XnX-vRbV z5nHmI45x9TMDoIiJwHn~O+O#T{22K-eP)y@?^bd!$=;SsqguQ(hv7R#$4C_>8)J0& zbuz`i*E8y;mw2{Z?=HcJtc=WeHshSn@?u!KhCgH7P-ig}=X^$5Q<=0bwH5PBl@wH* zy2H#mBx}`~5=@Vwo=%HeeOfx%#wXT#W?{huSioZbd;-Q;;kGX_=qt_mpjEkEg&aNg zxw+_RJwzD69_qyw4?wKxuU3w?iIx^8sUpqDu$^>+VJk zQGpf{NM7F9Gft8b>PVgeq%j_&&j8K}Iwk33A~Uc$9&fy#Yr7(~7ElJYg?1n$N01w? zSTAK{RzVaG(N}75lP>1}J{GEj#cbEIdP9@VAq$0{;SXmANj3fK$KV~o{-xHdZ$$H- zQgVn=gd`VqlD$p-Ku$5gH5QY6z1~MvpaU)2;_Q9DR5NsvX|hfa5zO>-LHT&4A-L)$ zG8>GHCB`L!S{FqOhyN3`N@p_nb;yY$ga8?quZSXhWlFs7zHTEq>Xh0}qEB-O<}MnY zzokzu_rAa`|4u_x-r;-;(Cg(k2EEX&DBj=%fBT&!x~;}?^X;Df8>3H0ZRq0bHnIDk z|Ac77f;=DPZ|!Ogfk@X>q)I*F7-b;7p@lksOS0V3$QU*YOotB;C}C&m2d7bkoAlu1 zb)IKk>1ri*|8qioEpETGRxP{N$=w|OK;@Dn42!f?^gSqHas&Z!8!+Lw-hE7YKe1}>lI35oQ28qE2T@XjuHtAt z>rHGfq_q9cbQ~Qq^GE#X{ay)9sH#pB+cGT)y7_Id{xN~2H}gz32-e5Hd9jtrf74ev zYC33lzN)sz*z0rg?A`F`DUdiPvTIM%rMRs{K@>?ZcEYdVbw4J~pF4L3hP~^5GlSi~ zI)}@eo_XX2&lVM(_0{#jE$g6LkMsOj0X_9Jyok6G$^1WMJ~1mB^;IrdG-&Iu_S!hn zwpu$1%OBH-KbXi7Bh??gjF-dTP}iNi^poLSbJAt=>RcDDfZ?zH^a{vVBQ-2beK;#h z#1vfu&7;i;d1u`$k#_y^6X1M43QVAOwf7e`lCzKPe{xyLwE2{NHh~oLcX_{bCl_CN z;SB?`$&1kTtrLnr{Dy`OGKf!(tZD}=1P+H`;o9!qSQJG=Fj~zon@i_W2*jLLCV=!P zDFAew0%JEVsgM*x{tDq!bH>>$!S@F>A`5i$U~F1-3Vn@JWE>p)CRmoI{amQ>rvqzn zQ2|mucAm5xn&&Jkm|WQogS<@^n~U0|pyS-#dAZGHSNRCuz--dR6{engmcaU@-M~Yc zGo$GGOFr&?O{DM(E&ZXSh{lfH9({NgUOZC6eYHXJ03I?lSe={j+enrFQ`62&L1o@z zEu%iCxJTPoGINBqy|G+$NGxxP&JUiDi8zTC?P~eD0Fk>@3>Pa*iEI|j^;ETDmygCj z-DweWD<^gC;#VCG7!$bD`XD7J?-Ckyjf6;G2t-YEzW!6`W2N|$PeHopQ)GFvPf`PL z0KUx=L8{v&(zK1QR9Heq zdW0bFSsb7wzIVGncGV3kEliL(4xoStS|X)9lfSj^1}zBEU<-;glM2>x$RFDb9E;W9 z)CtmQ84NE7hA}24i&qXSFpZL3Mj2~LjC~swD$}!rKtq=^v$Q6{P`wOWc~+7F>O2%A zxb#OHT-+30C4}3X6{XX>_lZnjgVy$KZQiV93ZJUcCjpqtGR7K$Nn9*{rDo=YYA}^r z7m<`yHN7R?%TGt!Dyr))YO&3CGE|^f6!s0XE}~#*IWPBHvS+UOh|7PJG=D3iL)>FY zPH4XpYp8=BznHKOb|Z{t2yE)wTFcVX9He&-7eU%KM%7f*?RiI4Y2EhQVf(5=2e%Lz zLu=1Zs_83PseS3SD9XF=&}U_58N55A#?f8i#VfCV+(%b;pC~cgzJ(xHZlCZpN9$V6 z8B+U~ehu56ItYIVxqH{-y$GwZ`L)qj@4+MqXF2CLqZT_Y8kN*B^zNG47D2HQ{x*>p zii%JG88%Km#Nj!&-Vehwg<$gU@<@IOS4qS zh4`xHr9I$VDz;fNS~7I;=^}J`&Q;6&A41}@k$fpUQlM=nas7KJr0)#l{p4P9UHGfN zFK@f7q<|L*O;sL9zcrt3+S?y#7dS_ozt~~0z;e9MUAO6t0jR>TiBxsR7Qd{zpmYhO zoOp#V$p*O~!a)`O3*kS>d3UE{6m%T4P+k(*M|EcL?M->S(>wDwsvQY_tm^XA1;z&KTj*Nc#q@yj&>*pdN6@b#z{9ME!NF%7YG@cf(iZG!v_s5JU%6b65d{1ek z!^HFsX6SL5G}ap=%MK|VE>|!e_mUm*Huf9~$^7dSBDf;*b* zxBE5;$T!T(Q+kr9jzz~iWb2unOps-6XkuCpfY?*M_ItnK40UW{wB7bpy+z)HqfX5L@ka*4M>%Lwp9wVCuY`Hb zFn^>;!BnuRkd}Y{kxygrqBW=QgxmCZ6V!2E8W{j%%=HCd+x(j<5*!FI0t{-9&_%z= z!3S;{mVJQAB02u>Q~G45Iz$)am54`ny89SC`&x{szx zGmKStgUXHrg!(=}@WZ%~uHR-rQTjj_Wq=U!y?uh?*2KKFGQ5;TLPu8r@3w_QAM*rhm>@(vjA=v)O^-zypA92~or1Peu46IcEW#k? z(j$lS?~!fpw&gKwd>TW4jHiT$9FQMEI5dEygP|HhN?|^jpMU^-bVXuTEkv_v7>a)a zK$!HUP=G@+7+ik@=L=%dm}1_hrt@)=6$ooZybXe#b<B~s*7O>NFf-s``oZq)4!_B|6Mbr{ zKbs2+;nbE}7i_<3j!J(|i>wv>J<5h)m}I%HSOrIoLYO}j1?)ZsVb$-MOzZo?+o3qXJ0cheFKAmRIH)XA=Q9nP#{n*uY*!XJ zjdZ}uX^W3zEa9}Py_Y~~h{fR^e*D$g6Jre?;yBN9DQGvxd2PYWV3yzRf3&5Oqs6Ef^(b3Ko4O|%R+W|T|6LQ_}6 zjb0jzy2s9H1TJ6HP`B&v{t+y}L>R)|zqTo4kDRZl+Mk~=02pJRp8`KVHSfPm`{XB4 zp6Ul>s#vk#c-8|3g8J5_JoPnD3g6!fkmRfQ2cS@eLx{@vA{hLb!qLejD~i0x8W~I? zxF^?4yt#tH0TxuZgtSWNX{Uz~36m&;(Hv7P7IAX66Gp~FZwEfZs|r~FNor9KhpAJk z@`QxEs7j`RH*!9M8KkRW`!S+_@2#WnHtkH~^~WMJxu_+URH)T6<%bebR3|C(x#`Xr zQ*^I8jIu4%6^+7mu1WB6+^3ZOAHi}|gsy1gz5t8GhBzD*Shcwp7KZblRj2_v3|N!` zNM1 zLLyP*?P7FrqT5ic@t%x24}!r9t9Oyhix}8j7$k$}a!pq?QF61d7nGvOe2899^{c&C{P4)Ag`J2|LgXhSrwtSLq$ zucPf-iOgaek%C-B2l}f&zq>$z`it+IOMKnQU+C0FW}T)#cPAe09SQi>B7$U))-J8E zcGdXc#_Squ%$!qJ9*XNlvjkl-a&9Bamf*}6PVcd9mU%(q2bwn9@o(zU9c#8qX1vf$ zEPMW^a(Rbzk)0{l+*M`oWHRf4Ff1wHsi;phd>?MPT}Imr~N)K=aS_{#^?T-5;wNE_#@i zX$+)xCX_>LxYsb_Za~nH0f;}@5cW?`;P~JGvfHE7-vaJnik>}WrGg=xmoSYmT7CfP zpJ~MNQ9BQxFB$|{alNDKCaFkdK6vhfEIkN-hIca+VfY8suLBNmnt=(hrvwwH;t-QU z7T;sIUCl z!zqpaQUebFOF>}R4alQTm?O*5NYhdtfhox>P@uu3tTGEiYwL z1hYk`9M8l~09sYOMgd4MtSOUBBUKh;xONZPX=c_i83H@3vN3jRVUsA0{6`maKFTk1 z$c+poRM#?rye!&E1PVx7r_P$^RB?MuItO-Ys@9x&4F1hCMqKXIS&QZbQcN@rAH8a* z4i9%qqE?}81a)VK*hc~f@$)@_dWL9wL%ovKA3$%BghVWY@Nj)v*xWliIu19#yY+F= zcQMhk)!-XC(a|)9#;n>T8}uJ<=Uv7^yjd@FH3c@hUdC#$oC)=sUSr9(6+P?vr)?SE)401OLrLU+lNIJSj#O>h z7)f zmv5<<5?-dbuW2LL>m{{5MUX@FH_0b|kH@jX*l0qMk&PJ>LYG2 zd#smX%lTWA0nxf>_L?Huper^i!Dz1X9=Yrz=@(s)eac4{oI29tjxJjsl5q;B!`rk@ zv-TFeY^x<(AbfMq)O+DNiQV>z3+6TK-=IukOL$dMKP3^C7Cx@MO_GW-+~p!q1?E7Kb6{(l@$DlPxuiIktK96eQqK57l7JWc_6kA13}KzjS>v^+F=PWP z(n+=jxyEJ2Mj-YcTn2qNb8)@Qs46`7oWSm(HK^?NecF|g8aT@_P=13Ya`U(jZv*gD zx!*m`$OtUKhFu?E_;o&6vmRoW#aGTcT#3tKO~AVQv92ECMt{zb5Thc!_rEGZ_0aQTBu&e>^k6V1C!mLve)tZ>5bY1ziT>0LUw)@q5EuH5gu=D_7@M=vL;(4WMtWIj1 zlIvCg`J4ODwRPpS>{fS`AK$|eXm>fHO?90-JUYqPWYG00;YTdARR{SHUK#37z0%YR z^n5kBKAKysXOy)z#`nP=A*VOe(G-rR6YMq5=F6og`MQhs&_`;{s`PHVh95N<03Gv`WaIGXeB>g@p4UkS{&(tGl)E z7}r+0>&b!lB&~NMtspXCAf_uE2iJR==@ZsCsnLypHLm|a$(!TNCDf^oyO3g{B@w65A4Ys?kHC91s8KmB`Nz2w=#kBt*`-TQ!~2 z8(7FlFyWJYSP}%T%R}6|2+tT~D-8|9V$m+LRpQ@MqY}1wY7hMYb&i#`3?&ST*RyB* z>f5gnB2{jUG8oWsVC?=tCHk@fwgD)6Ady>I1!W%x|3T2Lr6bzYEHJ%kLBfQX!(ko? zM2-~^0Zk#u5vX`RBrN|px>e`KLI^hu!m$!AAuTiRj(86z8w`pJ&}YjY70?y*QF@@Z z-S9P1pdR)9IQ8%`(NhLIvm5?uMQAC#S zp`^I7J`oWl^u};};TyBB%ksS_!7`wPor=($iNt;>5Bx@72VWu;I~DBB82bv!>kd+j zc8)enurf^QEs43q%PNNnOWbiGo|uTeSY&ANttq1jiYneabVa89_86XtI22N{f>zOw zi<$(&rox%YL4*kzzM)i)!Qz=-#-vHU)-ef7e(w7zIGHgF77^pZi7U8}K^__UJD^oq zDygln<^&R2ImH7Xx1W@*zJ9g9aP35m=+mH3X%}xH-%d@4=LzT^0P{N8o4SHwNI}v> zKRsYFw7c@(u}ymJPY@6#@ZDqzIy?xq0}#F$5^I2Gxu;~~lkRSlZoT3;XlMD3IEL&r z)hsfz3@>Bkg*I4=Cy`w^N`o~g#Q&A8SZ96oER7AQnsyPJlRORYZuESnq)i?eo`9Km4`N zmP2L!tPrGg;*o5h`dsPV^$y`rM(3Adwa#BvYFH%)&$esNjR0jN%e$W{y3N1KajK9% zHz>Vue_O=F-{}{g+a(aR&cp|+8X&7dPRSp5@X3!rs`79q#5HzYvz3_2ZFdm;6JDG0 zA$1)AQpc$YH!O)H)8ak_W}jA)Kc*Wam(3YQVQ zdMyxl;1F2QRPr~dcsCh-lP!8@Y-JH+HSIZ zoC_LxSc|C&I8%h>h@?5|F;a`%mzYgwSD`6Ci*KEb+UtYlx`@9GcZ;c`x2RvF9(yy2 zUt1xmaka9+PP*IQLEOHFcF)RccNLE?+A7oSrjB(Utg`Z+_I4HWS`d2PjYtr>%3CTU z2Vv4m_h_RZ4%9-f_3`XANJ>@$VomAQC78O}>e-zGVOBcQ+%haPUn$F1( z_M_jd%gfek^lzb;g21?YtO}G%vfFYu5>>Jb_2t`a$h$L8t4z_5$Q&ajyY*#Ys?8of zfuKSB?24-++Q2SrVresq$@Ue-=7#OayKbN^_YkAEFXpl4@DD*Y3IMMxGN+iPEj#yX z)z;0&GSARq0Ee6edO)1UXq;A|AqF|N=Mdp)Jv7W3CxWPwYizhA<0^(m6SZFifN zcEEw)rc!ckXh-hknB(@yRTC|lMnYH)tq0mzcuZR)a)%+T*T1~|W|AwY%34RauzV~P zd#I1s*p}|+$Xh?Y`_fL*or&2clp=*8m(J)c79&1aNXwav1=@&e!1NE=wmqBDA>R%Z zvCLl5-Z{2e8RULc;{+BORc`a}S&Z3sjOGGinjR*vBfqBBEmo!IQ3nm2a*Pq{6yPn` zitPN;Nl##}jKSF-9^2!=Nk2!Jo#B>J4M9~KV?$0lN63dPpuF7lHO2yP7B`2&l9V#3 zmQ6@5z|$!R0VHp)ycaXXp;%&?q^6AJ3127-D<9BX*qUjMdNG#tlh46&o_}6a^(=`V zCK(Q+KFZ;%Bkmaq>yb~l&>`}{roQF!d^*m;jCsMo}$m9o1rz+6CZO%Gj{#yPN^_k zXa3I`Urg($H5Ri!Ss|JBXyVeo8Q9Y2|w9K0)~M-{hvHnLMYd9w8HB$`Q(we za(1Rk{=^PWB=btI_O>*CJ+JR;=d&^DyL61_n?Vk9hKocfVRHsTYc^0nIGI|%l zHTkY(L$z5wnV2-DYh9-Ldd(i%Jvst^??%6GjtqiLGF}X)GD`&#P-}Oz#&0JoeU4p{ z@7LI$A)aANU$PlA#AMCJoUdxdNM{mz8l_DzswXXx;g*i5}Wxrs&>Eq=X6O*i_7IjKe+kIctqRjqlsZer$8CD4P*G5uYTElHiMO zA8X&nX`{yl@=6|(sdIGt4?b=mzE^@^t|V-1mnyz+&t zQ3&R7I@W$=ZF?sD74FT~EjMi*K;dYQD?1|b2JM=y@IuI!GH^yg4a?k{;$jMKj8iR= zM*~?YeJ_eBsH#m|5Rw=0%h zo<#?hG5|>QI~XXw1QvVD1atEXSksJTRs=s*))k@SA5WAz0sf`-| zTRXJS2fY^nbKQex1RsSI+FYNE;~y(;&^r1tI#1V3FnrH-v##6|6C;YpP48wquDtihKTEJvcNCo68 z2HXb6A++Q%JqywdlPDYvaXKkrLN+7GwAqqQj@5>&Hq(8>)G6kt0>Dd8Cq_lPnHAY$~R47^EZ%%=)K$JN&`$!$;y?*A2j~UC#dV=Y99mFGy-?YPFUQ`Z~K-vZHAF zzl+4Jb3WbNByNgITaLGp{(p_hYLFWJSWk9)q?+ybzfXUvX`%=3tO0&7yMEd4`1Kg$ zI2d|}yj@3RqgBYkbIy=_$)wk`?IQMLELxclEw3S=2f%}&F0uI8$XOCgg&~&lVF`RQ za#Vvi16>1d!?F<&DmWNy;Bw$hMRcmpm2q(31 z$s1IZYS)=>DMN68Xt4N8{40FSSq^^1eaP+N3mzkWsf0xfk`xRZ!qzQbjjy{v6`JA+ zuP3tk(a%Whb-yC~wZ(J1jCXgbTwSPFiwCKH#*KGCs{mTVlGoCLtj(iR^;+*s$gP2r z_NB`jh8o)2MAg<|!tt{le|1syPrF_ayJhiI1Ho`@nJ9%_RbnM2J{(ScD-{WTWt0BV z(elZzBOjhmM;VEg zZ#bCFBvMyQ9FA?jdBh$>6b7zo;H%Xwud4w+>zZ*1VJRC+%odB-%6+N*FyN)_r4RTE zIjTYCv74Yps-k6jp;fkLN7e|wRbBKc(->d1zSJ5b6j?}orQxR>`ik6pQiSrOuUcup zbTtxBSC<_)LJ@>|UoSo2QIrB5z|vez{fK_~iL#CeMT*pkdC8dw`# zW6Qd4gfnR1$b zKer+!3cLFYgp31%S_{toVSLjihN#x-N6ULvhub4+9QR&6nyrZlQ*1@42Og@v{=_vv#J@p+^doISs0hA`uuZ-06`c zw+SZ3)|_smAqvvG*q_X$(*rVjMngHIOJRDePChf1ZY<%=7zZr#UXlWr@@%flTXr!9 zxZ5vC@@bf=BXp*g)3SbxsNMhwLofX1U&orRn-%iTnJ|{71dM&iKJhCu$z$5bXtt;woP%ERgg1QY%529r9r+C+7zLns;{-H)-(H(ZK`aD zZ^e?Gq|~=s_1ib*@Xv4IQ3JVGth)3^w1-7jw!_X7)>23$e_;MR(4E-m<)a0;OBlLw%*M7RT>i{tvc)=9S{zmpojSxE{v_nNn*#E`eT7m`~KtQw{>5M&YX;0zi` zJApebp%J&f9;?1M8M4gt{y~rS8=Rin0>toEgzjPQ;XxnxPuE66<{^4eDGdF&0MS>O zxuh&Of8M{SoeW9ge%|h0xBch%61J?U zBj6$N!x3_gASQ-B`9F!A4cPluL-IdjUbR&3X|>@Ysx?D8;)E&c7Hi*hMZYx`_7f2Z zTo%Ur!=pPHN~_4&U?p?SCmNpJ&s8I5pvw7XMz)??V$28*^OV(^DyC(j8|X~aGLGHY zDDET=N~{h-7w;AFO#j2zNnMkn){_>=GX&}?VrG*{T9nb7j>6vxBBB8W40bL;7)sh!AwexUd69BUL)N;%>Upoq8C z8OubcMPFz~uaP4BAiyHr`q}|#%`v1zs#v7bnMF5+xl`4Bp!6?H?9Bd0c628j$YE@X zX=fuUrP_DTVGW*1CJdsrm&&nPgyhU&JcUWKAjW{Rj#!~8Uhw*HhY58AKWEYP=xESPz$M2M(om$sn7u+qhET^2>)nz z)IZGO(Pa)6NP-5Xuh3cLsF>Ci-74mi zvVfSO;OCfN9uhFk0^+qO`gKij4F0IZRH&J3M-BPHf%s5TOVtH_cksl&8z2FqA1Y5< zs{a@X?t$RvOAVa+`H+RVj7WkT9uPG*oQ5VO5&u<|s@k;9{C$lilPI_+W1-l1e%TU} z6e@>>sY!#W`71?A&_mcWl92@to&i$`TC0*UcA+q;QN8phx(a?q?c z{?|$LHVs)3kKTXiEpSzlC}%0WVwfsnnzVMgMtL|}CR*ZHTkZJG2*q-Rac~0+LBEHl z#+$MF{id*r)oDCL%g`un ziC`UAef11+HUR}iAYMdzU;ou;p@GhQmz|Uq=u1W@NA5?_3oqb8Hhn@BzE2{;SJx&o z^=JfwqC(XxRkb>4-VXTZ-HnKS4N-H_A;D$Y47Yo&`Uk`IQ6AI5z~pM4y92=vH^3>? z5AY%rtDz)YKvZZBNzP~{U>eZ*X<%ni2Kq<9DD`av6@`-1QMI;8F~J(Hh83}37Bq{3ph!Y!s~FYs3!U zqP>*&r6gOH0^_(N+*J|XCGcEKc6iL6ZcwJa$u$g#PsT$%1Y${ zVVWB;@ODJOKH(&i>FdK>rMea93Fh|K=aE9kQmWZ)gIGF(jxW@KhFB)eA*brkIASt{ zhy{T!{m%RJ1a&qNaWx&{SDhk)v+=x%@bsOryV|s;Vh-) zdCZqyJXF3cJsB(q60XVM-5}`-nzpyl$bJrOFk+)vgBt8zSz+x-I(d1s9)xY!V&y; z$~*4iWcA2mQuuw^C*0la8Ey_^|Ld_ingL%_0*X@b|EfgI1V>c*-2gzAf7wU?snVR@OkO$9HzE@)*F zY`uQ4nBxoh1fdmXj4Yv%xImXaSZ@3^DLH%UK8ZB zCaPdE&sy%pk)Rg41h!q%YJl+< zwso%K0jlT8$)H|bA3RESb<0<}zp-90mwCO?XfEwW@8k71*YCB)=QIe_ret7yi#fJu zG>aBADzF8m{LS#A#4XpiG#3qc-@Dx~mrC{Vd7IdcuTp?exgr&U+%IF%4kZYv%V1|W_UQ*eM!LFYe%#a$JEQf0^S)uSCT+2 zr*L}~cG}0g#75lFrE7-9x~MVq1l%7|DE27KzZd>U)^C01S$wUEa!dP-*I`Z>dLGqe zbE>}0p|iZ zVd(<$Z@}k|F?D}6WlRCCY3-HR&20Rxt*pFgBHc~j^HX%JT{h}7bvd6gC84}@*e$93 zn7Bv$y(%k%nYA0Kh2vw2Vv~P!{Uv$aH7U2kU3$f%dLsj)9lv?e{AvySGF%D^LQ6g! zEWC*=YFt}5L9HM|09ItdUz1pLl_Uyv8vDp5mT}F|oetFGW9uKN zB8Ug{$kL8IetA7~zfSbZmv|fXw#X9c#0RtTm$eV;5#|??fn)Rm7m_`o-qLWc%}!c; zn&Q!aLlP2ZbejRPGW>UP68%hXMN zRc`!cQzHTFuNN3xZh+pxD$Th5Kqj8gJmD;&EcX}8-fo-Xnfwn;e)nN{t*<4$?LP{F z|9&|Y^-cXKW#jWm!UBz9KOW2b3wzzEfbUc+91Y@L7`C*UW5LlZxKVcMf6q1f;&4-Q zoaiQxo2(~zd7t=0=K$-`cW4#&YFWMz6&#Ot5K>`%={d~nE&Pp86}aN$-BlfclIVY# zWvd(W&hcm7TpDi}<+Ie$Y!cdz)zf{9!*hT{}A`C+L*+VgMd{8w-^7$j?U(YK8f zO9n*Yge7eig+^nu=+rn~(ksSb$-#||E*M7QAc~2$tTRKXiHxRXco01Li7agUxteVJ zPeh>r+tstzk{bZXhXjtG$qSOOu&S2EL|ER0n{ zj(?v`riqmoBL@;EMwEE@T9A!fp(dBp9W`#8+_1+L8mz=?%o^5?VTP=|*z2t%^Vw!| zJZRZ__H*ozqP@i%h04nAeSI(5N>p2ZVU0;CCb9{m^FA32w(1(nG8zXCs`fBz8OcWW zFBCuR2&z0byKZBPz?f@;*-s8z=B@QNsNSNG=0SE7cr5yS?~k?vjF zhalotSWqyQI1~tsDM%iX@g-z!r3pc=83xAfOGZOXuaFN2UAiLLU}2+9c63Q^oZ5>5 zdoO#*!%&N)g2!3J88XhJ#L0;P$1Cq;Bo1HtW3_We?Xus6#0+Jp z)auil@JzMiXywy+3PNG!Su0pUfC$ZEhL!|ER<5n_bbe z>zm7^A~76O`#F(3N(OnGxdN#0`%ZMFrvoE1CHB&ZvWVzaplNOxZ|IN{GP@S+jR_8= zp}YA))yhdHgirjZ>dzg=lCP-K$0R*?w2m3!T0c+O8sqvnUbsKLwx=R7ql+_hMldc_ z*YwD$%a&EkhFlm|lKpbhK~GSPb}??dI=kxqg%ZLme-&zfHLK2jx?Zm&cXO!2bf4$E z;GnPMQ=7`4(9+2_f7YkYUtV22$D~3pPn0R)Ru&{BYmhfNGz=SlABGhFw~TZXdwUJR zCiyBfgmAcs)R=j5sDN3vES!wr!>_}UbsZK)hSIb_M%l=`8EO(LhSpIAH+45xPN9Mcd{YR&9-E#}-`IjgK3zKK~2pN0Zvwd5V^F{EPNqpSozVT02TZ@YoF$RL5 z{-&UMrJ8MG8?@V8`t^N}>+5WE$Pa6un&duCOVW#kQIm4s!9OlqHDGe|pgnOTV{BnH zKCGh*LzW$%`p7Zzn47(FIZX2d4>qb^xHYTrMDN9$wYcP#P)H>HGoBA&aMlZ~ts5)H zolic@Ld%Oc95V}`s+^Z^X$w!nv#pBJ#wb?yZDpk7_k_<9Xygx~4zI{;qpXUD`a!-S z7$%_T^jSFFI5s3%KXS7KE zH0>x@doeMR$459xfa+m>d_+E0%26;cJzFvKB}M|4N+f{xio=oCz(Ca3z$&3ks(9 zwo3edLUrnup=R?bGIu-+owwyU*2=k9N}Da2G=!{`XhKKgv+X{f(;_MR;MLo}Tzf^Y zLNIqBER}4Kj-O=*!)AdF6C0-Rs-+U$dZCZxp*jXTt1yX*x5yiXbDZGaObWk#5{t`@ zUE;@3wdmMEHX+Ad3EHdTc<1I)lNARghJSBastL>IKOz(@R7kud>gN?G)-pOWvwB~4 zhD_gU@l;R)w_xItYJ!-|$b1}J8B6VD#!Rc)KqFRpm+aG-Bd^A`wgDLfS^2~UR@Oxf zn;8P#cDavO$_kkt03#Z1B!TI-r z5H&258Ew5}Me5kfnC@2Fl6UDUuvD!mTJ=8kNPVzjA20G&ViCHh$N+Kd4AK~A8$+f7 z%pVKOb|{|6GqI|`eYBZ%!a=-K_!ozfrA)S?lB0kY)iP(qYOM1k@B~EQR?>7};NupC zW|l1R7%XD*FAz<=J`{&2CZ1Yw8yAHkm3}Eh@YEfSqO3JyrfEt{9}Pq`Q8-$E*QrM5 zMMQtJU;Y{-o>`lMK!=g_zhIqV8gme}q4O)dlaZ{M@v-`1gv0wWldPE{grX|2Mdh5` z3M1!R;Qc=ms_k^z2A1Z8$p(4t_~OS>Y2j8GR=glLyR^&&@NUZqrN2S?VJ2c&_8>&7JMpZC> z_Y&BTq!)WR8$ruh)E|UDg4N94nUCdOtV-61%{~dHP)>Dts^s-4N=IVka)NK#3?*#9g-DumtJIPd)j(3_$RnHKZ?E;OP4+oOU4_#Yk>Y{vg0OvKo{ zwDJGjqe6FGjDarANfC@EVgWpHNq0}R5Os!RaHlDb<{e)cH92pLwYaco!3JVO2E8@G2=r!G zIylsNgw;c#Ok^hM=SqT?-|7Ndzrt8{$iq)b=-Y!tDlN?lk7dts6C^L%pgghiM!WK? zWQ)y-{~}Bz<<8|h1)V0->GI4ItZb2x!)$(Vb)a5htcATw)2ijKR~r_>Tv$k?=rvK!1 zK0VxWy$TJ@@Nrqb991H-0HU;+06KfF&6Q9vqL3+Bv4CdpLH!v&BFHR^NUcywvMkUs z%M6Xw=mH%f!Sus_6+*~cv*>u1?ruyl*J3IZV~FRxchM0}N%SxwVYEV*>xQG9sA`Hfg^o%RZJd5^pzs zXGnx8!B>io-r4FedJgvo$5}O=V1Vju8UPaI@Nd9b?cV5^T^xLHyHXBK+PwR;Z}|#? zw=&wa=IF5Eqhv8AKD-!eLJV09$n?>`d12#-`Whg5s;sBj!ItlXv0YXxr=xIE?;VT` z0*8Zg`Wg1KPrk!*r6?$)d9$yNYdKks?EMYhG0&8<@x|GV^3{1+S#3h)50KCT?-|m5 zoDbI}U3|ZzugF1CO;h3SP@y+h<1rt>H`Z(|OISBJ&i#>wsewSPao3%1q!5H92; z?vIDHdNG!tOE~*Q)Q@z%-Vc&dWBrv8fp1RJE>5k6e=; zJD%ewj=|~9od>__ii}Fnnn>NzJ*8benzd{_V@2jcSF3@(#@+>w0VC3}JDV1nZ=Ub| zBo7TxEuPY&5Q84@!x+N5IV(@KYv>%B%cbu`7S<>?H{^%9tu%(fQ-ox6@G{cXt!a1A zI?lw$R{qN4Q+K6fW8jMrE4t{Lcj$2$Wz2irJz7N=)dHJeuKR1Z6ykB;AQm%)Z~4@M z;ac*52y6Zu*`cb{08Klg zNP7SPion1QzV!wC67KL%PgT^u2hG&?DI|4?!Jrfm2Qgd&a7+lm=M>HLUyH7MT1IuELcK#2^^OXJtji^D4`#M#7QkAt?s|@nx{cZ=rZo*P$}j2#id1#y4JYFyYvq z8>XoR+e7o%g{LFR13?&$ZA`eay-o&=)(0F{4>DI~Kpf8q3GX62O!B+pYvy(!o-34t zF<#r^X`K8=8Tv~ZS@B`Pb_ZM(xmY8Q_v(Xkd;alM@gxKw!z8&SE4Gw`blIHh`D+1) zmquPoJp)6*>BdnNQG~wxtLu+BM1+Z=3ZkCiK@L$z7kLw-Hp_%iK|R_>N+X-Fn%a*J zxCRo5IP|kG!$puW7Nvw7bxr_8K|p=mahMZ;Y(^K5eb$GAmaV~G)ra=mni0P_Ss7`9Xh&NN1`ZQmiqziD;){n3ivx0eD<^|ar0)f0~;xv zQrq~QUIPC%Io&VTnxW}q_yaq5vzBaZ8`>rgrE9-A%34$hFr0V4 zUv2&>lmLk;+fB+(k!~%py~kA6#?@|!mP3R7%TwHnw^Q8o!_J4HE%RS-7sikF_8C$E0)O68|Hf?b)1( z(c0F>(e&48s!|X2^l_0#_?tE>652@Um$^OcZT6u>Z)rppfTU z{5mX4i9CxcTfp0zujV~EU$L%9y4gD~>N72m+Zz&$!T^KGe!|x{^^LgbwTZ3gSo_EKd@5Kj1#V*Y|`rj=H1!nKq zmXW%Gc|9D;-`AGE-(^9h%e~uRkqcr{69sZeem6mJbf}#VxXJc>d4_VJAzm&)ANxGj9fAW0 zgL1Vs7!-JZdZI*Gy@?tKbCl)slx10J3quwT1#Y1>`-)Y+B7F2i{7w$AuLy;cIxl&N zCAD}J>>xzi-(V2XQQ3>taA*L%lS z3+83=4-IZ5%b~#0=syUPOB5h?q5s2xkBBgS&^NE&%N(11QM4nfq=ue*_@w3oBF0{^ ziU>~|<;3e(No*CwHO&sHZ|(1{4M^)_yGKZQREP_a&99<`h;SbKvXhaOxmh){E$*K`u2y$ z#dPJ{*#0nM(Lz~Kl~8>;@)zW{A_1w$71Bm3JPTJ2y;&60{lrq)#9HWSc5DQ0H=#dt zoRnb7Rr}OrWGRco!WRmmKIsDEeKw;lOgnkaCJSZ@1clG|6CIlng_)&SBLjQcJXZuxogWLrN^i>FE=i!#Yi?uNM;^LhUlIR z8BvyK`Lkpn@?~>PjWU1vrw&A@s`h0YS>b8DifwPm9c|C@5>X6o;aC}x#BdfM%FaVO z`PlB1o@|^DXXm|yu0M~Gr5pp;CVQXI05h>K(q(w9*oKNKweAQMDav(GjWMLUNNOkmZwAEI@x@U&>Qt@~;-BUL+ZIl;?M)2E{|sfR_7+ zp(sGXLa^LUL}o}V1Ntn{y(2*OE*}?25${mozvDvxLgAUhkg#}H&YokM;rJ;a1^ku* z)wi=U#{@+jQuJ}yh1?_mMS)EAZ>BcfEFXNd7gUL9$Den`!lROv@iv$0wkrsXh)UXs9` zd6}Hg)1mOUt*WiE&ZCnd4$Quz`^vsDZ^<|PDH-XZ>ND8`O}kiJY=d3V*hdP#9JiSI z9p`tLonc56u3=TK=0+a~#3@;2tAG%2w-}1>OIPjPYOP&8M|PC0;>cx=m3{5X4Y5Y(yH@u%?Ql8(xOTk(pX)qrC>SqA1e+ol%3rq$VD+aM;{X z1($}l=&sc|p*L@xWJ#?xP#Jk%#pYTCfuQ{*x^f@x_6m9w`F`F*16>5{XIi7x$}u`p zr;iD+O;Qi=Eqm-fNs3h6c9e*|t+_Yws{%JnMzt1-%Xm5>#l*F%3coo{52B>ZO^^GR zI*1^4&Tb2A{Q>^WGcMU1f#Pb~d4d|wmDBQ;k|&k2*=M=xH%Vk|Q8Og6x*)E&EStu~ zv{QG@P~WMe-YEAhDzzmL?gD62Q2WgOQif7uz{AI2cS`ZuCRaqzqiJrf)-Wzcz&9H` zi0dUVW~j5`x0h$XOLr)T05Tm1*EpSDP}k(_R}SN*^M~r#(iU{zOzyR;YVlf9NRuv` zc~fkWs_dI-Rd~wsM@X&+NpA1gP9N_$pK61)WQuO8)0U`Kqllm{tm7cXaWjdEGQZ-O zVvbjW9R0BRCKFjMWVKYb)fP$2dd0OirxPaf^*XG3H)-b30YvX7QzVC^uQ<+qX(EG7 zqHogJvQ1oz^kz)hf=JQne15J3?=60;672&pzv^P|8R&f15ZcCF+V3Gg=owUFk1|xJ zkH-@@RC`i4L8QCo!f}<>ZdYiG^P+AUTl}f`uew$@1SszO@dn0Y|_4EBeT3*lmtz|{?XrN=9K7;3U<~wKSkS~U2 znvEl0f~Ra9XpW8sc_#+d@7ufbOgha*rU$3WgeyPutBm8T!yki~PRHX8Cl2!ln^4DJ zg8O8H3a(a~ql-uLFjMN9@;(?v&5q@KrJwO$uRn^P5=j}R2{QjF@%3w0!*@(BoP_2h zruxsNws;-0+>^7TcXOg=Q9CbUlL`0E#*dvEcbu%$;Y%16Q_Duktqf#Qv%Kd0{5=uc zq28lG9frGIC_Vi6uJCvUR0{|5db0Eo8I_xn7PZU;HIl`@LMA{TmfF#2$&l%{%OWn=6OblUZ$b_L#-$GQYoCmZl|)1a|?ovJ`rH?i91Hf6muO*6KUT;9V$ zp%WXUToCx_fjwL!0ZVvVr1#dd+}ph5vi9>k_7FWPSU8xhDWt_ZJRV;l zPndpIcW|Y!S()ozJe>XFccc~huGM^WE^sq^W1Pfrrg41Q^?ST2XB)rZVL}Ou>c_1? z?9ZW3D!}+w2g&w+-#0}#O`b>iItzx&GM}`Em1V@vgKGPPYnCg{Yr+JNE`x1HTqYhc z&tD~QT=nS7CFLo*QAY29cD-A6A0f@pCv;Cj}t|zfSE4II%wM9244DEB4F<5D8 zg3*rJ@|LwG-JG{nQWZvbN-Fa5#Y(?iDq-!Q=lcy}oxn(TA$a@68z;fk?eJixR3ha< z(#!RX<++!4+u$Gn6c5Iy+6vi;0R6F8>`a|+7KiVoX4w@K<kN%g&x`sbe(1zUtXYQh(>IWs7Y08FRPe>Zh8VlMU! zKOD$PU%TBK@cj7m3_cXKKTez|VK|Vk`5Szik5cP#Tbgv+fQK3V<2GkYn|Y=$?%;rs z^qhP*-n;y!h5L5~{ak$f$^_avzdJa*6r;@JzN#Lr9e)2Ac3%#|i2t#6vq{~GdCV&5 zNO?QdXn*QCzgtImL{F#Y{^!2#4QA!ceQVO=$a@U?Hw7qvkEbnfJe`A@aGo$uM~`uq zmo+jYUbf=hXFLXJpQ~t}2WfZJ=`owPP#Ef;&pyD?Ebj=S2+bMyzm;^*PLIb|J)zT9 z&!OYRh29o=s;0|?H&`c&-BwvuLK?jG{FTQwa`Dkg{IzFhcNLSkW#JIEEg%>PqF-k# z>Sc?Wz-l+_ir5*(AtG1)$%$UnheQHJzE0W>1&pJqq+2)4FzxH2(3YZo(po&xFEyfe zos7QRizJ98NziC<%$5uP?7Yoyhgn-0ffQ00$T9A|^dUg*XE!gr%%Ycn@xt{!vn(1* zcv^jH^yY9Eh1(IU132V}E5vt8#(SKJJ4MIa(R$ROSACpaLH9nwsXk+c(&5LB>i&$| zi=5SHWRXs*dX8&YNYe@N_VUF=I=3Z_h!nIm2f!UGT*mz;43mfrV|b)tKrWGpFIpBd z_iY%3RjSuzPb=^`XpvpNrtl?QNRg;|0kb5?^smWFXc#lSA-rpn{Q%UmZ$zfmE*2w;>I zQqXrDk%;%Q5-B`Lc?m=2akpum&bI|#X~rSdcm(vQdBF_&U6>Qt_qCJFg_9e zTZ7toP3fTHEjBNb9d?Z*P&#qgFNA4ow6=b3zAwp}PC)zB z^>q2C(Bbgx9Kc>9qGH z{Jw?Bx*2Nv{jOTH{97uqy+PLS>5oP1!xQEf92rG@xggfZr6xQi+=#2mz_){#p>n^) zMu6);c#ic|tM67KD#x}?@}C_dj`|!XHRC99%}#R%4N?9>s1pj*AV6UA#mMwS08LiE zSs2bunvs^zZ3~SlxBc;_Y??obUXHonlqJpRz4KM{zF~u6kVNx~A)j3R|Tm zgk*2%X*Ay1qitB|+L(Z0c>;m7jLkp0Inchh*g6TU!6NfDR-r9~Q6{rp)TFLIV$P=m zU)S+XQwdG|U|-*N5Mql+Us|wOxpo#mHU1NO*lM(lpk?J{Oj}S`MPkLOq5Y1 zeNB6REWH-l7#hx?#mp+ArB0v^4arAwp8N( z)h#>0{CIj1@Rc+if+Ac9qB0oFv;F7^MmFA+I%k@Qvro&@tOrBHVwIrF2rPPy6J-bX zh}d_(tHM3mtTWn03Gnt5_ETr#t`8*&dx)%5Yn}Om0csN7X&G;=T=c(zFg-r%RGaRf z8mBJ-D?zoM`AYK_F@Lz#^v+7WTX@0vSY55NQf2tXK0}P-sQ_78Simg8 z*J3%(K<-&M15_M`Rsi1@3He6EnPqWq>6y?4 z;5*T<{ccn9%a%97R9?38v{cP`){b{5R0IFDs|;IH=bBZ{Vi{iNhcDL1x~m#YZ+uiK zcMLkP^tJ%l)?_KPOwn^6S!a2Okl!d&^0o}*OsluAehOZOZ|>)`_BcOGuFxNKN%bRt zrG%87Ir>+Y*thm;#;!)35A$s&@%E02*5?E-CarB;31hZ?t{{=cjDW~?r@q~V`F3^3 z1uV<*EdKI@78Zi4!?Bqxes!8~b{bSIlkmJGdL}xZ?bedai|p~&q}e!({4Vo|*kyv# zMCZZ8Kausbh#Stk#~7yly{(3xpQjfUBC~s^x;#u4CZfme3I~q!xZvzLeL*2zpdo*a zNh#2ogS8_>tLVTR&_q?Wg(d>d`udR{uKDg!D99(PH}jw|QzLlCV104I-oD`%k>{MC zj?rYDjxG54!BI(Wbr#llAywXd!j%4ML|~;Q6_#x4fImg@DY9N62|kqjn5j+UzMije z1rixISruq*hK#Ps%=D|RMIN^x2tDyqg-NVhnf}tUR1k8SM~$~6nidyxxhd_v*?7Z{ z@UCm}U@QbXua-=RdsyQ@gd|7Pz#96JxZnXS5yLlp)kCD=Km`zG1bqL+3`{=^aZCTH zTJQd^v!^>FQt*s2sqdMxBbUP??m|#W^xm$8=N9RopM{kuvo)1aQdz^2`-j%%-REJ4 z?@}r2dr$6}j#6wWIE(_w#fvc)6~kW`Tgq`mjP4ig5)|##-1IlcgsX$527`=Cz2yu& z^I82bAbG5{Rqp!DAlA3+W*Y#5&;3I!7Tr_#>)r2Y5^Lb}zD21UJqpv&_cLud3Dec* z!ptt+$XmCL(%GA>SN@wu*MBkq8@grK!DD;=8!90%vFU-}F51_Bz=9Njx%^HgvP>QH;yF3+l zBZn@8!OwE@N99shg1%zUk_lndqn1jMt|ODB^;+AAr7JT#@6;UCxAz+5Ep&AnF+eFE zn+f)$==Z*G#7PSCl|5T`=EwBWTcP>ki%Z@SlR*&_&=L-!TG_rVdcl6W0d{jlOGmXR zH&H*gI(1@G4jTu%=|kO%g$!?T19US;PVBmaiVs*i0MTUly5CNQmzO44L6s7aM5HBd zH~&gQPL{`|J1FH<`P)9m(1B<2J^>=~uv9v#(!p9vRy?>cU+^o9GctlZp3wS&?YK-q zy;y}u5=Qmj##KDww^Ay54Wc!2gR7Mc7fEuix%`Y@s7kvG2?q?Y(7%|%sqW~1RTJr! zW)kWts3>!HmBf-#)x9blvZfkNA_o;vNM7zTeS;Q^GC2_5H$Ev+T4(B&)eO2!_fLt{n?qY2^| zIEdu?@@2ttXNtp4Y^2K|@{vR{$09RWPaI`~7m>`TV3l%pHUBi#?AgX9%+YGSR9tcp zVKk#s@V9HxRNO*Fm$?EiG?|LLr2afSU4k(;a@DrojGQXvf)OB966;XBH0wCeXbtEm znsWXiY4ZfeNRiq|xSGpaG%Qs4vj-ziAtFpyAos2M$AwT_tqT4lM4`N(O3nDT=a@o` zN+u`wkK%@xa>|iw*-$FB*dIFTYXUfAtf{+<69e&MZhSqnwi8>fDi%Si<0~Ts6~(=K zV|5EGG2=jn!cs*t^>4cwfs8V^u8Keo&S8$vy97BwsRNXSh#1F;7Q(4+uSRM#P?)n| zQ?QzVYu>ckg#W@6go@nfLHcLCY#ttN0lmoBwi@bs3_Bcno1Z9X2^6k zfb++EOfi!7*WanO{RADXL+NWk47<@>75emnk>L1N$r`u}miA{g1*G%1{6_d!EbOy1 z{A$5?)bxUXhzrC6#LpT^-ag8ugO!^ifJO##xtAJ)PUrR4ujjo!_${~~$lW7a!b@MW zPuc$>lQmkSg-^&E#^(qU!v^!#&-1Z@a4!)q{ZoIHD}NG!1p!*uWHS`l^EW|~k`Gm%Z;}4 zc(jv{@v|N(D2TOoUcE=xoH~qYnT`AiK`~S%`g?{5Fif;KIjcSj(ZImFz)2PSrgfq& z-8UD1mO|UEr#ZQ3p08_5f&cR?Lty3~Y&iy#|FZKiqvtl#m@;H{Uf_13>onAHJ6Qh^ zJmsjVHWN2on54;mIcWcU)d zxWII~_^+W|R#ue&&G2V+ z0_VzXKGxKO1V|zr>>F>W;`TaLe&q)va6(y$pH6cu?yJBG8_S4s6*5>=XJ#Is2Ua7F z7QW!3j`Q=HB&%xrZt!)CsuGv2UYa=_4iw?iW7Ixr$RP%VwG1g^0Y<&cX!8_}sIm)< zrL8HZ?1)R6!9WVYTyLXr)iHv6Cd_o!#|ydhNMoaU^3PmW{S3AhJkoRgeAV{vhM&Rg=}t;G%#Tulae~P&oJ^8{w~oSN)ZuqGkY=8;zr%gCZ=RR-Oi4bB)IEWdLlvVs|>#(8wmN&%p-F*6pQVu?BL}ua9B{@tp&A z0>VjQrz829iU!9~QT9ZaiI4;GJc*JX!Od7Td{X>a{KV+Y z5XP*@;ctSIekG#YXWUhhq6H7tr$qX#<0sNZp~_xs752JqPrzRlr!=i)B$6&Nbapj( zh+1>WDsYX^C!tx9J#a>5TI1;}Y;3}4)<3Z0xF7_DOeYTOG?PUqWrap@;OU4XJ@8Q; z!l^XEY}_rba-+VKWMneSz>b};l+Nlf8a_*-3wjZ`Ej4HBp{6m$gns>kr?^CC!?;*j z)#@45Urd9~N8VfM)SBZ(PqES;8-6c?j$0vci<$64)mkbu}%t8Bi#Wn@HqRA2208xkwf`n&}a{5j1@MUMld6f5HR|9|y z`VUfirAfhIKW8O#Qdj;{rX$GRUGBo4?(Ah>@prk9>Es_L8?m*jyl?#^X_!A;0yigx zkb7q~4{&k0Ig`~H0ax<-XPMD<^de!FRU+>R%t;N;&owsxnx53IY{$9G-w1CKj=WAy znsvnbM82p5trYgA&Ph^`=2`|F0_K&cgbL~|Ia&CG3<<`KG&sUNlr0k=y!iP1VZWDo zzA3xR2Pca~9e#7SLryqjFwf83JfnL8u#2tp3yF}9kql*ffpuMv^8Se4M2jEFF%(Gj znHTHn{-X9z8_xi!6nXCKxrVt20mMyu%bW~0J)$K4mUHn&c3<9-xXMzm;_4aQI%Q~oAH!?4GQ@>CAvv# zU*IADq^ouWd*wA%-*kTr#n@b%zL77>LZXbaZ;_B8(adk9uCg$+a~Zz;rCREW(x+7J zXTb9Y*7mnomDO$xOKs}y-^6Y6rL1rM ze5L+bqEo$dG~@N6uiGX@@3t!?01Nn(*2U6yi}MNE@fy8it*~v~BtzhaEY<6VzGV$j zSoko*U6&(qKt>vf6lo2&j4z;l4A69G`&+jtGQ|~8Mh(G;iSm#?{#$-@pXvpjHr}hTQZS2 zw6aNzPDL_G04AB5ye)jt1O~r@PGJC_Y=0QBe!XkV)!uZW?CXz5ce4t#T&it*p((Q1 z_>^41g=oBZmD_?oNc;h88L~e9pN*v7=rgPhObLx6+t_hzXCh+}8`IvjhoI8yx zcH`DVB9B6%l|oY2PiI(%Yb|Vc!Dss|F)D>mnSk%nd%3vbhQDoV=Z#4_1flaekxIxB zFlnxq#6eJtSZ!{>8j<-|u0ttzOZB?v@XBW*x9t^bZB9@yj~L4dVych*-K~>gmcJ_U z#fEjXzTNCw^L;-G|7$*8x(J1pauZAf9e=7Q>-1(b_1_Ijua)A+YPKzP zmO%!>8nqwbl{Uj%;9LkWqXm1~9sWz|3p#iOdpTH{S|pONmUH7dReaiN2(U8YFN7%K z3SR)qQ8TnnDht!n;cP}lon$+efe8U+*|xs7DRmO7qz-xzR+;eHra9FNudkttrP^db zC)e^aWHhCmejLi#;`QQKXJwAf8BQR-R9s1$gOA#Qkvv}jNB6I~uHE)K`(C*>lLX~6 zJzK+FLIqxMS&R8KXH;NOQlj2(e!#DBJHa&u2I zIzvu>eR2=zRCNmCu6Jxj{TO^)d-&7$+FSg|u6qy@J+Q#%J$uop&XsE5&6mhG-oJ6w z8eHm;c;a6O#u8n=N?PVD2=oJ)gMJhKaL!X;_a@lT~Hd;DJa=*Ipw^=(RkAamP- z!Wj?vnnpRPt+kpH-FMCtU`OCD@uvveC%j39z!e4_@%|O|&`{V}D#Unee2hr-`fh&D zAYH&j_pjOK^`r9^fyhj~QxzEUjrEqZWhpZmQYd&C$=^} z??^#Nd2&+jeGFX6zzpykLC}&5940i^fAy3(1;YdPU4- z<>G~^@~a3I+TljrY)MJ5=`> zaEr*`$JePCm=RT7$qKsCrD&17@FIN}8Ut}D3`JN6eZeL}AS7IHS=1?9iHLDHUh+jS z^bL)PM3pKU?lhSq+m|s6Ybr2qZG|&U=3xCS@ubvPb+kf+EQfz4+DMIG4846*9hG={92)NUUesxx_j0-T()|ItJ&eX&y4T!8l{5o!>Ppr$BK2gV(+z-2&vqLB2wIk3;Em)5>suD8)CA zA?p5E)D=xgS6@ZB*8fYZ5^=%54d&0fcp(nmKZiE>G5B4EfWQV7E#Qg`9IoFp9`UlFee)tE|QX2;)Jw>i3=CKLe_^X$|juVG1OE>n8wW89tTZ%@?L-R0#p1` zGy$2(Gp2!5hx#Kt)1tATJ)s%3T40Eg%xsdoDzS2st0{}CebRgq)+c({H+sEDmG+85 z**mV&v45P*tqWh>%Xl6wyr|HMS2j{8cw5>`W?A#rBPIqG;ag3%VOYomuc$wprVxhm zDkCbFTC%z;xYib$N8B#8;te@V$bA3QIovUj1bS*CnMVG?Jm4rVXtCB?Dlgm;f8_?_riTpk!TDD32g|W+mE)^^v4%1R526Z?ReYkh zLE_&9unO=Zu(FZOtB)YOHcZt9s%+S|i&(jf4o4 zfCdkihel#EQUCy2{SmzgdbMaYAbmInGB4>!Ud$XYB3szYHc93G;xX{VjQ<}VBj_`g zm-Y{jX&_I2J-|whS}M|;+eAUwyEc>hAb`SZ&Pkzj++ z4~gBI?SZY|wHs@GKFP<$c^nBZW9$(x4`CnS%TT@N6Jq)ih9|oeWkVVxNP{BGCz9mG zv;D0Q6%oObkBCekA;n^S{8SW#-+Hv;@OF_D7)fK$RuDhmP(PQb=ct@Y;a*um9mDy> z(Kej$AZt765%Fp#L=>gnCXiHkv@}IPsCYfuEHN@C2)OqOip{CT))!yrL}r9;q}jHX zO*N>}n9O#SjJb}PiI(q$&81S#C>JK|Y>?-=cPF&jM~pam=ap2Q zS32p~;?J^Rl#LdteZXU6A9i~&?*-*Z)e)7I+@rr3jx1#LjFwi!DM{Z#u7 zWo=yU=^353H}o&tLT4sBhT91C3oAz=Q=^j%%Bpb27H{(TpL0{d3jzT#!gFx7Y2|V<9&!9w+yd=v&*qZ=a-|e)q3!vKf^qwdEKV zGtnTgV4iC;`NRpwt)WkatWp{OOJIt9M&l}Z>Aqh6oFSot`?*p02OLb7 zjV5t|GmHwybkHbrCi`5GX6}FLVe~+<$MSVCq*l+)?ksK`C0SbpwIsc{pRA$Rus>> zTiZ)sRO823nTXzZNJ`2v3)Ph3hw$;bO;e7*A6?110T9ts-AeLGoUIOnc8aa+mzpTJ+$dH=U<%k=b`cR*JMHt14}lX34U^m7 zVl-?{#11V)Vj6))Q;LKVg}{ob)U_Er?|VriGK;nZVSH~rf!N+K)|m65XytXnh~WNg zvpmdK{8zk!NJSVFGO znUic1L6AA9rd)`3O2%}cm$(uo4#+V7z#Ehy2t?Rr_Oz1${dp5Yx!9H+M`$Z@=BJQ5 zh^QIjScVwv;ERWOCkoEFOM0e23HHS2TX^6EF)G1YE{H)AKsnGfJ@B9iRpSixv_k)(qr8mawao$)>Af;}8@(V1`_3eIt=)f1l zxNEcdAQWzJ&KzXX#KZNAlnzLu+;vzw-Sshy?gBd68Xz!o)vbc>y5c1VZpRx6(@>=R zo-aSyI4zKZ4H6Io6Hspdb6Z|<2#oLVXL1qDZjZlxT|P(l~_ zLlsila?Mhgg5WvCkAB~oqZFR(hS0`n`>W^D733;MFHLyF3T$T`VbzM{(Z*HM8DubE z3QOVDB$Tm=lZI?XyQV|I&eI)N#!W_>``qDkOkHGbzYuV7K&%`!oxi3)F5jfv$;BRU z1!7yw?71ce^~tSa`ER4ll+@E%3<}^_A59zZM%A8fzI){vD6~=}ppn-W(5)#M(&1<6 zGy&f#<#0o@t7J6)!gsOdJrHrnBxvRK%xYn(#F+itz}BJmpGO_lxJ9ycxK`#2oW{y-J3d&W|cN zRP{>lSm^s@aRc(S?wzy^>3YlfVI1LUs3Lswg>Y2X% z-A$QEuZPe7L!Y}OxjHUnwL`dvu}faL`>5%fsUD3|UlaIahCK8a8OMK5{w<@(%=D6e z!FGGC7BAL^Vgol&Tais-cX0tge8t9hF9LkKHWOCEi=exg=Z^bIsD3E_ zCyf@uX9ziYP$(t{S(23JGEeA&JeOf|w244dj`4>wW8#Z7X_Gm|i|@i68VQS?F=BIv zimZ{0{H2Z)>0isCAD?4JlD3q*LIsTg8He{=J*ZI8CzWxjgIBq0!L&dU;WlCOimaG) zTuC5NCN?(U0Vp5_Nke!($dM_ahi_S0H_0*zWNP%tiNDnWee*}Q? z170RJviY2w6LCIAnywdlcH)%@`Ik?ClAcMMDU$?(#7TkwBPUdr zoJyvJotRbkNPf)uFwmKKfrvxtl9x3HhkXfQF6W4o_>0Gg>4o|v9WLtJJ=SF84m-qx65rj60{C>(}u z!Z`+E&;(#Gr*UwnWS|2tDkbyypgvTAe|XaKSCTB|O37jro&yJ~>Hic13jYZJOgG;ju^rD}sJ zradH^7$$qN%1T;?F$A+ZuS&bLn3_qSDyeHSl~WR((p9r6`cSiZsOb7~9)Ma~mU{|Y zWtMmsa>}%3JFiCYjh_>#ZCbp%{y8i5j2lCTyyyta`g7DT`ER`?qxp1T}E6 zikgGF(Y6hnhXP`iC+DlH!lsVcg%V11@Y9^E8n&?_rUGySEDN|m;06;QvaK<*u^F?& z){jmyqaMqulDlemYclLdv?wc`I{>(UYXmSe0=$}rVS`JCE3=&n7}_?9qsy(y)w&z$ zk(L%9Yy!5Jo3{j%w6?pn_@sfh$)tt5t)vU8j0cgEk{^)&%OsX7qEDa^1wkIItAQJ< zu+Vz|OEA4mTSY6HuU6ZpkGZ|jH-NpmkIbpMceD`8i#ONymOYfa*Mg(n|su%z-hazi@J^6_^ntg!EAfAPkE{tNDv#Wre})7_DHh@q6ALR zxwHxdRF}g!302ZM!LL?fQmKU*TOmW6jY@1eTPwTbh)MP&x?wcMfSaplc4+Z=!$YjX z1Gb_p`liu2zEoBaTA;$~ipJ6bplZ-&-WtBWkpu7ld$!3mB4CqZ$u&DzN?wRtdH2h~ zG0Mki;gP`$E5z%Re|7{fo4VV9NtP<5MKD&zi@}lH%C)kDMJvHsOT-Flg%7&PevGiU z?8LI=1GFb~7?rrC#{rCFRI6sg;_DF@%zJQRx(k}eYAcSptjRxU#L{sDjzmd~3bN0$ zx~`1O$qaESx1eGyB?h>&I0Pm*7Qj*vpZ+5zM&(&hbf5@`kVHb#L?b!`{qV zgloL=9E#h@G=1R+)9i-__-kRaS)cqUIIP9jcF(Qcx1_hMI(x<_Jg}|#y@>jVb-~8% zXR6$`QjFo4NbJf29XhGva4L<+lX;wT+rJn8eX!8{xRfFXDg9vU%bJ3r1TOKABv-Y& zd|q@6jFWu97pcEX-D{NlA++ota-qTPEWkXy&e#)J=w#`SrjW4b_iX zee5ixSj{Lm0H72Z#^IIGlEBO-yw6Ls%IfNlBV8+a{CSPEfdLX~e|*k@d>4$7125}= ziJ8ns8`hPZb`;ig`1`>=i!Ec*e1o^RBv3h*yVd~9S&R7AC??tBOQcBlyhlvXliHSU zO0gTDN*Umy=*%OLNZ0BDN9F<71og_0Oxlkt8w9Kuygi~fcDz(6l|C)b9UyhQ%bX>! zbb`nrX2k{i9LdY<+d8W&vE|rD{k#JIlAcoQTTv<39B@%?T^!WB*zclA=NHcs-BNZP z0P)n;^lU>`8BW1{UUYfPuK69ysT)QHqM_}=*d|;fc9Yls(Ynrm`Bi#aU}(-#2Dl1jh^ynY+B)Vn>T zFx+6saP3sDC~9n4XWDd# z$TU&RF>d6ceMiYIN`r~to^FBj1*nSd>A{&rsdwd77f5W1um&9@7!@BEG-({31|TL^G~0~HtnIA?*WgQ?> zxMn$svJ>C$eOmE$9qifv69b^#t{wyeHUI9jj^+&Ss@LJ7E_y}V&hlvdjp5#H;ttjh zkn9ketXUv?W+d*qH|Y#t;UmX3rbO=&-_yNCwMS1|H>+c(+3uQ9_GX_5x%>2H|Juk7 zb@{dM0o=hec>}(jpk01|;w23Ywq_i6H9=pXhF$u!WM@)vjo) zZ`NYI=V%t+`c){aRQja<3aRi4o^K1l@A6s34-ln-pt6DL)hSx761EwUV1X9}5hXsP*a5`F5&|3`pxDvl#}gMZI%Gi7 zq>CJIhzuzq(j|lmFk?PAP(p@>3sER=qyk`L1fW0n5D>bc<%tG4E9?x)^yAN^D~d9t zxxq!OMYR^iFnAE5s#mpenX={eAgfiVZgd4J%WcDnaXW?(sr0E_kS|T{wMYcVjusr~ zx&(2+u*SnV6pJvx!a|QVHG1l#tav~REKosYbllXb=aLdNfQB2mgI@*gCga(br8i^iwtTI!-u;Ec$>h&IU{l zsSJD*u(RTplOYEpeDLlj6TCy=hL~dTAp{>12x+j(%2Ut00WtWDJ=742B^e)*knJp7 z#%gVmRdP&=tgrej?Kt9mBJeK44m<9u4p?xoxdCIyAw(ZwAR?tHdtl*)8|3I-a?TIQs)Et-fFDYGE~)DyUi zY7&7^@>-pWF+(9ZFxL}%#S^Mb-RQAKPftB4)V7ZOG+ATq%8SHH@j~uZz5-pcNL#Zt zEU-XliWXDo6dD$+V$I?dS!T0hcHLwvg@~jB!_;=JLdjf^R(a<|bXrDvmG(SN*X=-E zbICRKHFViE*FSinJ#R=q0iM-BTD{fx*J_>p7Oyln8h0$LY`kyTbO~0tS&w{^RNnyW zJ#W`*sr`4}eEpqy#c@p`HDQEBcCFllXO#2D$ZBO-W`6NC8e^t!Zg^WueYF>7pUGAK zm()1bEe2>?fIb=JLnkh*X{W`8u4%Jl<^ZvM+jezR3uM|jD$u@yEo-k4);cz=O@>p{ z*oICzNw?o#8dz(Umb-9mcV#?fx|{k~@4rvQI`FSCM>XD>8%Mgq5fy*j^ReT$INHc1 z2b^z`|0YEf*jdqP^~~wKLqwO4E;`o(kyP7slTr{;QYtiE`ScRUoE2&aFYTB#gyLkq z^0H(o!ip=bC<29IT&Mn&LM{;7xY1MCV0=Rj1RYEK$$F0ZMnl&jBJ2} z3Pul`tdh!>nScf|K!P7<703R_M zWj_>l;R$=<+$+nOL1T8Vm6Ezp3Wxxc@1Wp_Aff>pD#T0N0Y(fV(18aexk|z~Q=kK_ z1rwqv%{u&n2|FX`?4)-`F@e)GE#tr|;TE@aW>jrHG?5GX_?UOrBuXfN0);MMPL00d zn9WosGX?5|gL1NlWUypI8_EWN{!^zpRooVr7e^FXYl)NEjLlrRHWiXkQ;G-~Lv5N0 zA83-34D`WMUFyO_>@=lY72P@;bg`rm&NzVg2g6;e^hLRVZ4lb9sJCm8698s6gn3O&%A!HDJ5tl*WW zTrE!My6V-^(ad58bV%Wpps8ox+j|`@uzy?l%EyiN4D-x^OnH+_4o89Z!#Ja)1 zDm6hXDy+6j_Pw&yVHs9LgBWH@+rMEYuV@V({simU-fr{-EV|QRD<~!ikrj0!c%Ji) zTRYbf12?T>qvi0bG31r@y1d2KQGq1iwv94!v0_{Z%6q9f#Rt7J${Pf;wkCf@&8X|7 zZ^ZgltpIU1snrTiPDqR2y!@9;;tER`+qk;DLDzL>h=q6;+)>`LXO5F<04W`(TQv;V zt1PxKW+;W>3>#Ne1-9I%met#rs#svQ1I5nT4#m+O;=2y8$GMBw6tsmvs{ zp<2~z=BU$P;@xNewpDeOT2PTmmSOZbWO!SIpV<}a66j!`Ahb(@SY;w85Gr|J0)Vnp z4drGt?a{-5cc1)QZF`BCcDTmHw(;iccG1G4RN#XDcd}HXJ0@5~X|3afEYOETzkA+5 zC0)7i?L~VpoYZd!Sf)oMJuLJ4WJ)oj1uPRlIODWm+jS6lMUducV^1^`6f9~x%!LBn(WaOxya5j4fe${E8Koy`p^=v8L+VGY8n_b@V$$6aX zkv~)G{Q?sk%-8`%mh?}5191aTLDc{#Ht0$JM@r|39)oSZr~p&HdfO?a>|z4-5@4`= zzYitzZvTMVmn~sF`5sePpPTTR=e{UUbW`b4{puG27ZR|&_}Aby2QSD(@a4W=N{6ahr6U2{Cz0XyguA4C#075cp1kUu4>KP~yb|8ut1yFd)Y zKoF|ACsR2oz^P;UKo8ug)2kHm3z#}dL4;@;E|8LXD~Y(nK(pBms1qJ#GmToyKpnKe z_#?gbI49s4z=S)e5JZpyDLx!TKqaI!sp*LdQG)PjG^>C=ju?bO34s*2K~;-EjT@45 zV?am4!u;~U7PGo!3n%ajEc6k=zz}=HXeKCPGNCKP! zHv?!S%19a7LmZs&#O$lXMJzs-S-4;^GBL4|^|L$)V36q}i9YCoEEGJMlOQw16zB^A zkD4G*vw$D?4$>0>Gm)cI4OB%3q{Y#g$g}#u+?p8w{DY7q=zxVxLw{VMa)ORtv;l3@fzG4DeW6GV=sjLR zvjGSxFo~FP8WdNQNLi$)u^NGg?80l5iF{mw$^Ys$12zXGbn=RYlL82OSmi( z5bVeAvPvQ{tvh_oGPx%TF(Jk17tCbKJA0IO!jeN9Esr?Jt-K2rAWg#yO%9L&@i9v7 zL`5lxP2TVjBB)FgYCkAyB(!|a+4K@Dgp})K#m1DhVeC%2=>h#T1MKKe!1F;^v5Zo12i?#H2s194|tNwoKOQ8&9$LKF+hSNuuj~gMJzof-=iC%q>w%^I%AVYdaTh> z+<_n!(lb@lF=*5{Sb_mv3|7R$v3pQ>q0gF}QSXyRO7xwf;>}i!Bc-#t0i6LyUDQ)e z(?^Aa>L4t7l$TtvJ}oHDEhW?zJBo3#(bO@z^SrrkoHf)Wi6~)IRZUf5{ec$XC74tm z;?TxfYKi)zIRHh`T7|G&)m1+Y0)749H)M75_qlGs#`K=;U#h%SAqQj0H6@8EHk0nft%3Rc59z${R~Ek z*qM<@%{W;98!gx_DOi@+*NS5sR#J{52v~tFRv-wb>-fHqWPv{nf-H%^;sd^lXq=0b zwhO~nMIodK8B}kDw-CHlVVVMCEmxr(gC5WhhK0;RX-~j#w-Zdz;F>XiswnZ~n8?|q z9oWbd)leRUN8M_%7%&5o9Rnt~f}k~0gJnjf{l+$3qIad$_=HO;wYskTRr45v8{j9K z_>C}yM!9vR8mOoqFoGc+++t+{FtCD=RaUf}Oa3YzmgSJPeb}Io&jP62xqv^=amp@{ zr#GcrV0Bey{6QMHf#YS=(*=d)ZQd{_0%D4kG*lS@6oG|o*{E|H%EjFs|ogaYZ|>^wv&tbs~|j9jY3?6sBu zqNPl`T~6^ONfstqGerWjebg=)w$OFExaorjaM4HELyn~YdIjS2>CumP)_!tB0-lH( zP=X^ENRAp54++_TePSzkVkDg<5`I-bebJ1aRr>=fMJ8k^^uEO);{l$!e&K>w3sq|y zk#me=Mg;;gaDqqDWaQzTQlbD&qO~A%Ykr+FIDay@2w$(*>GeB%+ zh!hDcf`cMp0$C;lG*Hqje#8KX%5&p^47Px6Ts4dBjhKC~A7YYf-)G=4(xrmeyq=l=0VwWIO5z}DhnScDWoz0LzdZquS8wBh8H530g{YcA9h{% zQ~{=xRX2?3FdiJm3}&0Ah}W~)yWQlPE1p1+C6CS!G}K2c(f~rNwX>VIt5CM$Y1^tS z>}?4Xik94|v!Vfwz29|gNBbzdt-MxdPQmmJdCg!?r$6k5H;MmDBV;GyRf-gOSKN4a;OoGZ21BfoT z00?O;{=u3q!?C{K-7e(4R2kwX)F2>OlVWNMtc!RSWf(9?g)JUeT|)|NZ-_Hw{0?5a z1ZQc!x)^akRi;UF1WxnlNHH)1+C{O!Fw6?W!lOltQUXPK zXXyKYC$cD^tcsQ^t5G6w^I_|&6XL0ix49+pd)^Z2{VE?f*c5-{{wcMWJq_tryNKdo z&vDvc0qZ)Pwqu^}V_QfOMMKc+ZB}05uih;a{0Ir$#60zJ$&79PLa?};v^8zEOyw}lS9@Y*Tr8Zcwc;YU3C2ywDI+rMeL5aa(LTR)OpnR&rI$VD zDEHuy8V>cht0JGCX&Xy*_Gam(d~aCi==DZLHYb}XS=*po@B|c(M6z=zo7(G~RTd9k zB{^r(an4;PGBdwtPYVzqfa;CYDpNCRP_{n5a&>S0c4$m*T90*%c>#TmpVsYGGGjTd zB0;;rJ*ewrmn<^EzKhJr>JU$LtEQQDoq!#%_T6rk6yx8mSr~_AHIqqLi!CRLFjNxt?n})<_@;Ui_VrBt|t~y0!Xs1l2^@c@yi$U zOUv{CQET`J^z4KWJt4UGoqY)V1Sk{1!Ao8mCBlb|{z^Hsz@BO%-lu35r3XD2m-U*a6$&Kk z67J}0hq1roM9`rS0pqEJ+ds2o?!evOF*#fQ1boL2m_m3qMU-EXt86o18ffylmOvDb%P^GvK6ZAR)q=RcyepNrOm^C`V6D@_=P5(X?s@ z4Rq?#Er**pX&!I^A?DD$YSAK98bYYsse*(5?i67cibAXkW!y;7;06yWGy;qCP`1n7 z%zZfkpd2`^-=z;m2gR#bbK0adMGtO073YB}iVwO>+0_TwrXeeX+>QG8gPASfdTwcR z?rM}9ERZ(snlE&+bYVWP9&`F^5+{`AAcFfwpR)|cldqu1tODTbl@l-SG5H#*mi?9( z-rl|Sk#n2pk3Qje3$h{fQVaBPKtvBYKt=^zlBn^7f9Xj$A%zuMSRhaMab%!lcgaWJ zY5k?96m=qER1#<<2zcFm$)$jTLoz(b6jaASsNQcb{MA``J?gg~Wjb<5qlrG&2%Cl? z0tm$bp*fjC4|NR@mT|q|m}5#eW`6D-vh~+7+Kdu34r~`#S#FXcOhJmf9 znzSoWnnl`{tE%2rVqtqu6sDxcO4lp4B?OQI55i5moCnUGisPKD`lZ`iSyDSBx)+># zqP4nK#jA@ypyU>`D(IW*W}UKYq+8`0g_fo4y=5s0{3=|YaIgwWFQv~1(XHO5$*fY-~ZqV6$6=U0K%f@<~X{-cfhT+EwM=SBTQKxDr#stCF zb-aB6)-2Z5Rm*g3H!a<^bXD#+Hrtw6{M)1H&Q-JAbJM-4al{U6Hd(7K>GaTFmsWP; zT-QnXbAd0;FT!+N?&ITT;_aEp{>JTE+MXM*tLBVLowosw_D!cv%(Y8d>zmy>>2`M? z9y!6AoBa_6UcXHsi3vnn^u{soo+P44XKwiKM!WvH@KPeH{To+8&S}DW->$o})@|)M z2sEIO?5ZGBkUj5g*lxW4?;}rV_t6##@NKlKk&S?<;+MSY1R!B6^PCC9a0DDkq<&C? z-^8BRF(b)Ed2q-d2HkZgeGyMivuh0p#NdM=M8Z!@HMC7iw$yNsIHumXF2$R4=!NEum!IIxDpD? zh_;gqdJjDqOo0t!I7KBiCXZMwnh%O7M%YQQeQ;r+-z3<^03;GnF_7f&hSjC(Y0O|` zBqb&(_%uFJ>Rr75W8d`#ftyLXCyA#l)+X&j%N_+1Zn>)v2Mh(i>#6ThE{s_gEZpFdLAPYktyoL1bhJ$@!<9{7svFbl=F1DNYM%vY#!g zC{ehH0?av-JUvju4!~$hTJ~};b*O{itkzJ#QO}zWXdX#6aDy25N<54z0UcpT!|LL!Agc32X`_ zSHw>S98%E6iUce>@D6Ed>o$p6$Q8ywX#-f{*S%_j7@M__4VduB956u)qio3%egMjf zaZm+GZBJ{L*({psb|X5X!4aIPMxNql8F=l8E4m6;2e{(0n=8XDtgrzl+yV$tC_w`^ zKt(7pp$RB_Rt%Oossm+6vWP^ik*LrE8yvx%*G)@;B7#+|wY0LwaK#;ldQwwlVFJDd zu2g3Kz=Tgs;R;M3!w#b4Ou-5LRYQNlFatU9qA}4Lr&)tUcdpxo?(;ulSu?T5ZNY|vM%L428gN53Ss2cEg~kw z3=YuWPgLXwS8&1KQCnytVCAcT6wnfBePSN%`_ zrS!UeV7!5y1RGQJ!E(ITBg!khIs#3cmlVZlw_APyhSP?@2q{+aiEn`n7L#G$HNNo` ztZ)M>6d?y!aOMd>c|`=V$u4M$Xt{}$1X*jBltVB93}(=f;+b1BC^fDzit&nN6yvwW z7`F355|@`CNCaRIcnoX+QpT+0Aq0VJ4sfu-4FI8_d!zvpdI;_eh#@l9jGe=we3ok- z!HmXIkOg8MU_Tcv$fqO;aLtQo%fg#zKd>)xNFW9;CSl>yC4mf(K%F9>;VR@N!J5>D zk{j3n0BXma8uH0Tn=(!&HV^|5sb2M4T^;LJ)&wh-;R;r)7v(Gy!(3&czy?Y;et$10 zL(?WMhOJO3?ksYF=9z>TRXgq@!|X8Xx5|jsv%Wk&v~}uRFZAY#7u}Kx z)2KIJy!#*~;@5!(uZ?h+#R-%p9Cp?|)ra z-+;wAhQJOV2q;iu^*IvXgAhWP3l#HBM<8qWSx8+67i0wBTNf55Qw}!}AVYfjafg^v z5w_^!XpyPdntCEurv`)4VR*uh-c3;BctgNYqK5X(WY&vFA{m#DGR`;~je?1=fpJhq z>D^o@0tw!6MBW62YDtF4Txv>Tc^8LN=BS=^BvhDKVQZkNCT#fOcvB$As6gvBOFl}B}$g+$|iS;GD+umG1nLA(kn;z zno~6I`2oTM=gg-^76|2G(N+3qvX1;+*s{w_D_vy2Q6p*d$7NZ~wps=t?JkeqIx1_} z?*7Q?TX;_Ylor})yJ&M%<=%h;AvJug#SU!^lyA~3#~T~ayfvKh!$LdFzzZ7#9{7v8 zY(TZABnEf2u$AZ(@!T*62K1v>IvF(PbKbZsi+O(j9$0IaRpJjDTrE_wDS7Zx-B~2B zyu%yeO?Kt_&YtLoa8&?x?$~FqeePxPFh^M>=pqK7fyUsVZ^pMi{e~e(UVD%9)>|3G znD@b}?tAiF*6D*2B9+#TJ6>^G^_$hrO>UHuSwox`qWj@*Pk!Qo7T#vQgwZMl>Z4uc zCI+#wNpC!=^4tS`6#|bC0Tj3C1!nqSv;n-tc?7K1UM#o11hQ;s&kGvoMhGqnUFJ_6 z=!H-JM%6Bsu;7TuBM?ja0y!tWuue@BTT1%2JsviPi3Qorgpel&B$Po1=Ai-&q)-wY zfJBT*Fo6zefT$#-@du0>5fa3}#%n1-3}Ac<3??N76O<$aY6N44G*`n1;LeI-Vqp|l zf)hW|>j&wX!L&#qh8;8@dMa7h1cp!sMR8J5Nnn@_l#qZ=u0@kGh(SsWR~fz((snyU zq@F-@N%slBC9EU~6p{dkv}iH~I;g<}mX#*p(M6I6xPcAkf`TAS>X%{T!{==zt9Eqe2p9V9q+3!Hs2rfn}Lw55;TPmLI*aw1fsxt=nLMAYibp{5d5(Q@Hk1{3G%qjiSOlUwt z3CvKm5};}aNSGucr_;HEB2-5l%#JvN(58~`QeEjx0ueZnK>-*O393v03X%|!Q9jc= z2{?jbG-*wf3`7e$&5>d3XHagsbU92EObf-vn;a~&Xg3AGFY!pvpxVTkM3@10(s+b* z5k>|x80Gkm7}hcn2c^~&L$h*3#jCn#k<-ab%2YHfV%kPH!>K8Q77BnEK=f`1%4W&9 z1BVz0^itJosb3`&o2=dtlN5VZOeNMX$-tp7NK6_73n`PCRdKVPQ6$ma=fQaY;gD<@ zu$V1B*jLy-2%BY->1}g$Ex_IL6yOT6YRM)z(f?|G8TdE|wiltSRZ*yd8 zOX;4MmIZvT43}%ea1Iu?bdrk$1bb%c58^uY_fT9GixWP4oUVlOiWPw<9#xQbJ1BNiIHSnO9 zpv^FQ&y-yve>f#yLNa(~8zLp-#f^pH8q36--rTO&%KX{pYfBuz)$YXqkG$N0KaXZ( z6vt$s>Wv+QQC74y%l9&6DqhTnnu7`0z>>D5VFXZIWWd0Q%!|TvgMsF`DggS(&E1lv zjT2>>Xe0xLCarM&i{maC>(Rz#Ed-{jSqoFawMg#E76m=pQyWjU&2t|HBrRABCU@5` zbT6>mJFBWL2{)Jav$9`1T2a&FIy`^@qD`9G8K#=FgL!aCXY=Dy>&tUd2nnS@qh{DD zl5;Ohnhj)t0u*FmN>SD}dwbo1k+_+5k`C-hV6BvI78^AEkwb4~sgt_Yq`c4Gz$kgZ zg{|hABxc!S!ji(|M-wTrK$*h-WR|nv3id>{jAul#W?r|g+!q5_L!)`rxMrF`xLa150@ zwpk1uftA|>HSECMp(SI|75ZWrqv`5Z**RD2EwKO-SnB?owZ}!G-{RfC%#gMb#3SBv zE8C~iHRQNv6vj0X_BYL1ANkA~)Pr~yy=f0lI;yuzzmnWfKm?SrW;9Nh&>$+npjT3B zoX(mKMH`7^M*7&Z-FLrJ-R5-feAUt7dGY`_KGSJ2fh}fv4E`weWcYD&?SVmH%$J89vQ%Hl3{eK1|S#& zZ@FQGSV(~|H+FxAe%3O8z*Rp@*mg+xRA;Ds%mElw_)7EVWff9`kCuho7d>(~WM$SR z|CSX6D1KyEb%n=#Dj|kk7J5^M7dRLbN{}qtM_8->;(c03hmrVh|8Z}whkGfKh9Ves zWf&8iI2*b17IhZ@LqJD!6l$GST1O;-Jhe1DGI?I8YOVHqvGs9+D0^B#bDoHN7=meM z0d&=NXQg9(u7hx}Gl}^!i7gg4i&p{OhIW&604c~2w0Dc2c!XOKQ_JCRu~%e)WEl3h zjOkW6s6~man0K&(j(hk8VvHGqeWHVk{D?_VgO4}@Z|5k7+qYHQ zfrIZ>E%-=&Du-pAsD=@FjT-YDC&N=X00T$=ka8z!JHp3-Eb>i>hJ~+KlJtfzEg4#d zr7eB-flg>hFDZigA$S(~e3%9|-9`jomrgXuW!!OyK`C#^IEUAAf0jsJ_#uQuIFYm_ zlTay-Ce~uu=SBXsL}jyr&~jQJ=2S)bI75k-qDFyiID=GTY1Ak&a5t5;gp2jqhgwlc z7&vu z#X$vGHe~4`usAVhhK%Rfk|_zATO|=yWsC8cKm%BqnOBikxiT+c24tWFHgI>Uq7i0E za*#)mTr!ronP+Q8Y@9Rc(D2nY3wzQ+SsF8JPol zHzaA4=m-GIA}44OpEa?5>2{c@xf8D09$NyALB}jKumrGzUWxKt)F~rGSzmF|g$>%5 z^_gvUn3UehpJ_Rqt$~_?k|ob^bj=b2?<6EUcxpZup-r-VIoM%gsd^XcmolJCWJOUE zcqV`ed{IW2Ua5Xu;g991f(FTU?KM<5U`}B+IZqX7FM6A@!J60=iSlv-%ozr8u%%$& z1VzAOyIF~;cLBA6hrs!B=>~fJWhf%SgjW%R%{F>tiG#ASb<~NS7`BB?)S0z)20uUs zS{kTax}`I1EKpNGPXpE{I65SgBdz;!S*hx6+;w}g8c}h%=(pWsAQOWH+!dQN6DkXH(VR=1Hl@u!#W0F&;&rx zbwk;$nJK4#$sv*XkqmN3MyN7~7?R(Y7(~ii>zb?lT7SyYLPP+l!YZ!h3I;krcASZs zj0I`tSOTwO91t2d@EU=`l&Y_Euidd}+DZa=YMD^lt0{>D<4Ul_I;cR%13?S9KZ^!bCYaQsoTFEv8mg`~ zh^yQ7N7H(l^tCFW>x?~VPX8=F2#Or++wVd|r3TZv9e zYzFya6=!Kvo2kVATfB=)w}Rob$~&^8Br&(fx%*jQm}|S(n!BbazuKFF|C+sNae$+n zZ9|5&@MpRYNx3#*2FZ)JWME0%N~P^fTYJezGrFtFs#P(|X*-$`M3TQ5He9ePx79g{ z$a}scD^jn!TY3t?-O|ADJ6N4tx&bt{o4Rt2P!RfSDA~Ci4-3GydBcH`r63#!2mEjw z%T;?ztMP-do*B0ETci6SIT(DahP$dbtey5+1OBl6$mQCc6svEOHfiB&l1Ln-+j+z&QNw^-5Ez=cjP$=~e0M#-k^E&V z9uNdn?8r_4RPbj&lRU|BtDTz6pI=Op+tF(Z+{AnPw;~dnj)GW1f>c#Fn;c*`Gq40H zdRf?}X!Sd6k!NZryqiVz#hNT$GOPt1o1ddc$W0OiHgGW0MyBMur|j9b&kVc*32eGJ z#&bQTVNAzJ;X2-Owu(0en z`HM~Qn~I^^sd_vF*bBJA7t0eY%O;o3+8fRKg|x+7&?w2Lhl+)QW^jKjRiYfFn1lp0 zAOn>D3d9`E&~~iIAYIJWQ*r^lSJ)ZEs2qv23O_uxrdmM6-ps&PJ zhf66cAV3F1dWemB&8m!mwZ$bMXYFR!{Oi4j8^ukM12<{G>9~sfx6|GxU3nNMhdtPt zZH3VshenM{9TI8)X>uAXzIo#UC9+2dorMuL)$5zwsN0O%np!HGvzQEyZ}0)f>K|+D#n?>}1Lj2JD0?|dls=4ZUWQ&#?Uo)xytC)+Mknh@5!6cEORXkITTJJW1i?dB7c!pYnQ_Zo9o`D)zScI=I*BJb4zNH^W)w|P&Iw6 zST1K$7-W`=+SAmX-(It{uJ5-5!RTJyvxzaH)$Z>8(qU||4Dy`BesIvj2lo^tZBFQP z2ItP=%D%i`)6IAI{;4=h;l)kh9w6kN|DMnt zKWrP$0N&R$O0JL6@gFe-2hO=nV=m})z3fQoZhnrL8jsvOy}~sg=Rdy@9^X|%1 zI!=r16yHHg{V3i&_2G`G9!t>C`Sh#SZS`HZ(`2e`&+!*KunK+{&27Uk?+)QQ2LjH`$lgm@OJH}+TdASB!%tbpbZcsMr=p~%V4b_ zJ7_FYMJt0tSsh}@I@Qo(D;p?mFoa04jlcz76pSPp(j*9!AzA=vfS{yFm@yAL5RtON zikA##HpmdeLWmtdQx1hN!KeiZEdi_%@lao^~xi;4mh{u$_tfM7-D5Py#k94w(Bm$ zuDQsj!|yihz(Z?9@rFPlJ{O39!MyHPB%(7Fi6~7Cq5%7Ezr=0|t0EpxA&rY97#gmj zSa6x^6j*$K=7$J#^N7KYK+^Dl?~a;|!wmQOi-YgLJ3%W8MZhex9DKMT1Q=v&PlwG4 z^C1Qfb~?;P9Q&)2fUbJv(MVF9gc89cb>lP8Bk810DCn-#|FTM}2>X&LFXuG0C8R>5 zGo>4(;=wz~6f;b*N$&)8zt|8{VZgbJ8+5r^pj2fzRiSi+!r_uy6s0Z{y*1HACGaa! z%5=q%1eGidAhZu{6;;<#xzh8MRD`2dH$Q`u_E}nGQI@t4Gr;r499erz(mPL3iOWcv z3Rc)~FMKT2WhVm=gVjEQ%c9*1jb$Qi^KB){dn;sS;QJsmc0(-5t#iwCKRB4(DZ_Nw z%6M};RX|slaY!v!A#%`Ff3Xc%+e6VZxZ+(q6}3y26^8gwm`gI|kYTkOD|JDb zAN%aX26Obs5vIs$Yx{mnh9a!E!U`i|V4ixgx2IWAbX}G+c(IK~Ku+1f4}5@w&IsT% zpP|fZ$d>}g#3^b35*PYL#x;)N4hes-LmdwB|A$-rp$vV(pVr=T2mS5uN~L=kx=iLh zca5uiN&tWiOfZ2tkw-of+fIROa01Yj?@4mQpx)dvq$J#;4v@&hHRcfr5GG+(CG40R z*l;o-QfXY3vJeXxCd2O8W@+g{0}N&mgC6`K2OIFg2W()2Bs|~-H$cG!OoT2Scwh({ zP!R+eMxxbe<#f;sl=I$lh&lk`8i8QsHGJ_0WYBId3o@Jnv$(s^5bH1i1YOu#Mg$zV zpiD71&t>K~gd`{g1xfIL5)>klH`eEXGy!8|fETIERfKP{f`%O+u}DTTG7pfj0}h^d zOy#`cin#h-@ft<7E?qz>AVP`ZOgE|l|CR_PX|!RQ&UA(ql|~8lsR3rhKuQ`(0F-yB zBPVNFkb|ftTJof4JrOj8I^-dk`}Bn!!azb2Mh~FRGYH~NGrmmjAy-#{R0m%8PKcUr zCEpvLjA8&mhjD-iYB+)tj=+H==pd8`OedUfkdYZNtzq_LsXdvH&wU2-kxalEJ&SZX z*xjw5Y(tg{Igrg31a&L!RH-d7sY2=qu2LT;6S3;3KvK#F4w=d(QFq!>tg6Kcb^t_7 z83_n~)-um+m9uNmp3Obq5Vh-rm= zA(pIVMQdYQ`fyjp@C$p@+86Acnz^~!OfTqrf`d3-hv5j`PY$T^i`F=gA^y!)AOZn;GA zm=W<`Cd0V3bM*_AXdJ`VkjHmL`4Yv@g;Ym%`EOrFh3!JywVWPUlBB5HnX_mB3L6#2 zP|(5)9$Ks%r*p|X#$Z)CxfVLlg-*TslLE9ziG|v_9 zk~Ff{ttXz%Xh_q~lx~ih{`uH0-f5YRJJu!s@H`*6Z#$=*y>^fT8F4&GmKP z%wnG${D4M)Us~yVm#7e^8}W&+f*Mxw!Uwn3$UNG?X%wdAaP(0bYO%Vz_jYv zz1pj;^^*#QbGM_@Gx!^tt3w&&5AsPN-qZxs{)2X_A+nw8ExAGG` z-g7+DqqIn&z-<8}YpXyW*|_fOJ1JR>pfiDV)4b3jyrN(~!)v=6)2z{}4I(T;BD}R7 ztT3}$LKt$v#-T6mo553%lK}iZ~;*vSk{TXFCmsdqCIOLL(ePlUcrn*`4#L zK(te||5(GnCj=N&k;A9~fs?X7Nj351x}L#Gx1x&i2bBgnj%IK#Fo5f@`X7|X22 z>BT^_MF?yF%#bU{5{(7SkzNd+LUcEAgtof#5K#}kbm#YDds1MnCKmQV*T<|}nV861%$1W=q$ryq)=>Zf_yQPu@#7M+Bt2Swj#U6_~ z|K-UQGg=5`EWyN)A^NI<%s7G>;D9gOJbFRIcN9RXIHkLYpq5EP>61SWX_nXsk(G=! zoH4=X8@NIwrO@-T;o(6okbxHwNO3I3iu;P2+^^xmJ>yZvb^OMvkVJ=rIJns&WEqJ2 zgT@pDB{MjapcG2h`9`o~B`s3C?2*PpBRs3b$d{`wwo(Dk0SFN zSb}s*O2-k+I$_VnDM+4ljfrc+NCVFE(@y@05g9R)IZ8(pc@t`D8^Ws(X0rhqU_XD1 zPwLxE-ZX%Zf|}n9mvLdx?0b_kVW+!Lml$cPp-hPsfISO1P#{XYSxg=UT^vZHNX-&D zInV*;6h-@Nyo+2(7cfvCfTJQH10B^-Gx(vNu+WeE4lSUe%%}nz*n(%%#+5u#yOhWT zRZ$$ufd<&4j4;S6F`0<;5FcpHBp?Gk_|iB412GNLBKV;Kxg&oBp2vct|L$zgMo>#D zWl|aS%$%^#55R#p3Z(#y&>=j=8AX8|_`fC?)G#R2F&$GfU?nwplLUIr?TG;sK!O8> z)7*;D+q_an?9-aWna}ts73c#PKuJwSG^UV16R`mxIMgsz)l~(9AF!j$xUy?A7;MW0 zB!$i;mD9QN%5u4hAu!S&FuE#zQhM}I6{4e5Wz{iIRx$NC*z<|a?2sKG0b6B1c9T^) zojw$7PzQKD3-D12MYayfuoyssRy9;~Wmbh`$cTHWpwb9a%tUvKN|)2tzePmC|50ViQ96RB@>eq? z7lRVIbS2b+Em$DnqfLpllUb#B)r@0lKkKYl4Drp+bj=3kSN7mcm_<8V!!59z0)q`% zRqcTnfmW>m$tjZ&lRP{)gjv2Ih@x>u^U2n*@IU{1qcq!9M-`-1@>!8pRb&8KF;&=& z^_(qI&sMs9oz88L$I9fK)Af-isqGGKzQ71JUJ zIyhn2!PSBksR0DlLws#qsiV+RG+aI!6H0Zt*qhOdQv_24-Z5o@B4C0WXaXQe);MU# zu?0y)Lkjbpfz;K^7fZq3YhLN_$%eE)8KKG1E%l%}vZGU@}-?Gq{2< zB?B`tN(naB36KgvrOgnwm?otyCH_crQVpx^-=q24Hxeb;V_wR%Ui?GNU2_0Bp`HcHkKR;_!UPE-aNE-~vAC zCaDP7ozHkcF$fig&uA2=t&0NjBKGOEOxbwknvAW_sQ>DOHr z`#UOFGiI1UKA`hvjvbo6Nt01N4Hr=YW;E#Y(cYPXoN=_)j@;Cg#A*msX|ly&=_Hm? zY{(@5Wz^{a|1+R&JYCX|swmiKI}IR_=4GK~MX?@L7Mieg4&@r?0Vt>okusBBPJcu@oEwc(2*GDzQz*4RlCP!+ixAXP@3rLEuU{90wyuj z<@=!{fPosWYoo3-UsTU=d}MJp(FI-K|9IAwJ3N3RU=R3!-YZdv7ElO1{%WP5Bh%KS z(I!=wDU}f%>D^}A9m7e*u0{AeDG3mRxN>Tiet`?cM1;*l)}UH&?W`2qNib}7Jy zk&EU7r(tcc3w67YAMKU(D? z?MpyVEb1`^?Z>@N5{H?i&Qj7w$U_8Rg@UUQdDv)OLQ~u7HCQ>^%k77=>m?>(d3)+x zvFvIyC$wee5eACL{KrjxLID8A|M)&f!S1ihl-VF3a;O;16hR|1qTSjq5bmJ1cZx>$ zhFBfnYo#8~aD7YUffUqeK&BGNDP3nm-l*KAC8+GhEm@bO(d!YfptJVVU)~EgAGY()XnJ`qokXD$fhd*tT`W%I?(YxJ(p7thDQ zKIrIXmmTQb7C4|^)pD%+P=rPsrQ6<00m4CSI?8QbE9Y-p7ZxConY-mZIjE1SWlQ)I zbtUvvHT=ZeyI;?ab~*2^|1yRcSNDls25_EKyT(%6WJl&N6vch7bzS9Rvb$GZ`G8>6 z-$xI2U1h9zKaBm90!x3p|Il@cjd&E7JYLm2kqSRIfyx~gy>c#RTRsc{SGEp7@OA?z>EwXfEl^fO67Mw$n+DZPX02JHuQSoTs-}uCJ(1FjXq^St$_fL zWWi&4h7whrzvXlHugSK6>Yb*;r#WLyG+;@nO?lWEu>pf8m51L06Yuft9aoy{k|YQM z8X8M!zf^DhBBYs0|0cXL8Z#*ye(9tsJKD%uPj3g~e z`6%qVxF`m#M&lQEx;kkwMof3-Nh~<(x#z_!--)Ih>^V1cGV7D9irTdpal&Y5tw zoB(Ze+;}Wjdh`UvgCigQ+jRTG%3reH9zQ$&zdVI&k187H3*h~?21Q?$Hv|>6J zo3(XZdp%($S8-GshY^4IX_(#{JCOk4hL#bufnrrmz`=kPN>tv5p?NT!Z!yX^BaJn- zAjJpwfwUZNK%r=%eHn(xVSPgm`C|qOT{a(20-^AN1rt3d#ET84rV~jzs=#AwCstu&X=hqE3F;+jVj_wdpREzZW}(`xx#@g9Y+!`8a}@8-*dFcg zvY__mYZp?(taYegM;vvfS|4il*cw|a5UpAQe6i3+!p30JWJgSJ%0PQqw@Meb?6=W- zyKS+u5+b~6(qunDCEX*Yz;U9iI*7GKX_tNVhBWhiIZPmKzVMF_?q`9tn6K@k=SV{p zGp?F{&adHNV|;AUw(X6w*JUjjw*Yje3%TX_d0D&cvAX_xsI)Wf9KLy*PIAUw9`E1V zu9XX4@xAV>IP4b!j#pD@~&4bHbPF5pB5kV%~h*%!oH?Pz)!5}Qv> zml=@l%2*;Rp$B$Af*layfvXCF1x!E$i2zYv7zmfm@;1Mo0Z@s;QI!ifXhIlB00lTa zLzt9hf(5dGTL=te39SrTU^^O$~wLB%kcOQlp#ZE&!N3~+!0$_%qJ zF=$|b>RHewxw2VUzyd|`8K{NYg`HcAo>3S$!h(KC22y}QI5FwFg?d3|@qFkWM%u-f z(KB%5lnM%Dz&4aBR5i;?r7CaPQgM!eauF>h$r?H}^*u*!-+9AmCo#bfqduvd%n zHGtMxUwl9igQN~oGgNdV3=&&fJEagg!8pb;q;d>lVAUGOaE2zD)`z%+CyoYL$o6~^ zu1s_`Lw=Q!Ixk5s4w!%jCk^CILE{QzK(+y_sH|ii`wAM_fC;t90TaX!%O(6kwZYAx z$Bw%P64U^lq%9~FBl6Vu+-Diji0vp`q20>3;m%75KM(`sbPdORck*%vjZ3)SO%OeUZa>=RFSr}HI#M5{~aJpRa0bP0<17bFj{Pw z88G1!Q@8>X$gqPee8LJu00J^T!Gs}9A;3)dfDCGU1s~+t2gq=$4y(cere%0sL;$I7 z>dG?@ya)yFB`gY+8=w73WyMaJZj7}_<0RbT2UBo@gVo?*Fib(tV`xGgYVe67G~via zu!0Q^fs7(Ff(o)pr~yBt2DV`|GdXDPN>lR?!%Cs7U@mcMmT`P%Nz^i zS1h9##uzxkebY7+*{)l0@Nr0baMS_VK*INW!4Q(L7b+xy4C@BD1fuS1(a<{pC+B!Y zgnL(kWI(O3qJmD|DfJOUHw4@?$}%YXjAv{bzYVIoOa=1;AN+6tNO0f}9Ei?RBeJ79 z09Q|diG&i#NhVvW!LqlE0tZA&a`I&B3^&7yR%N(?u5T}ZW!BpQwX>lpH?Vq9{%!y$ zBmv*8#{q|b$O9ngAPF}e2oOkX!0#kzK@<~WjX=+c;S<03G37u+Xj=T`Gr#%H-;!pv zEPUrrzq*5^Q9u9yA^8La1^{^gEC2ui0IvWr0RRa90P_eONU)&6gB%VjT*z=?mjwt2 zZJ8KFAstH%Giuz(v7^V12p)bMsj$xghJHw@T*(n5%Z3YHcI+`w0fPYo4xp6Dv!~CW zENwCXO0=laqY53wI8ieJ(x*_PszfkEs@1Dl8{WtvAgkA}Rz-pxOSb6HvQRDQ>eQ&$ zBLI&G9%!&(NLRFY^9uB%wig{4eq%fm^rF*?2XvJL(90OF2uE+-_IVV7!`cHI1mVWQqW>JG#*ezDr2|XD$#_^@Dx3=+YiMfd%*Dd){{Y$Wo<) zaT&(c*qk-T5KU=h07RiBRZ)Bz>2h8kkK}*@CRH)`)(%iO!}D;cQ5S`k{~I?*w7;?v=!SU ziit)96oSAMUj|q#kc)jp8oAJ4edQ-1WcBgUz?cVJ7@S5LR6qa%1y#Ai6HsQUWk#}z zCL&xW?Ks>`5jAG}&MtgjruxllnB^ zN@szTKrWREn1U9BVA%*11v1)bn^eI60APT5C?N(628oe`5_0A6gKBvsq!0~(!eK&A zEeM1IObO5tWvR@LDdc;wwwY8-E>J0#o;wa(2{jV6-|jz!*4Ep zD%YfCd=S75G*EGXgBrmAz?d`yp@qI=ri<38Kg@sw4zm45kQf4yn1ByH{EI>m4$X_1 z!JN${Mh<73(W*g9ILd9t0-@2=8Ul$>CdXN&;BE(0$~%w?H7U!g4a6q9qX`?RxuXv_ z%;g(z208-sRlDLF!@ny2+Ok7Qyg@Cae`dY3R6gesLk~Qp@PNiC)QR=f1lcu#w8#d1 zfm4yH5bD-Hn&~QHe>Siqd)M{5<2MUBH@CQvFNp`cS{z6C6f!1mY-I$A_t2O_41{lh8#y2F z0@u6cRc=EK{9?cuwzxHHXOL=eS@e8Ehs7~#OTas!RJede1Dwl0BN30MPZ_EVGLm)NEpCCh9nSyvLAIE9oHCFlM>b|(F~F=9~mj$kp!Emg{KV4 z0N(z_VY~tvZxM2kxv(O2W2e19HS^cL`039qw7suU*vA6&R)z@Q{jY{M42JQ>feZw0 zZ6+OZJd2ohtGKf-LjIG@pF|TU-&Dg4nn2?kceo%O{xH~kIcq9(sd}Ev zi~&vQGl!uFH4GqL3sy+cf`@ZPH3|U!8Z+ybxzecCaEODM*f$6BBl0X`V#B!P&He)Y?yghK>@obh4R>gnxp;fex!}aFj8*WFv8784 zwYP3AICZlrJ+3>Ld$$tE+~qip)i2N5s3X%nxlv`Xdwi^3jQZ7)`Q_}q?Tov`4S@^{2XwyDFedcQMdCsK z=2kpA0=bLbmLb<0}YZv=Xx-{8H|*wBSzI>W9z0z|h8 zQ|K4xZDA$XgC8Kb(fuAk4nS^cN;gTHXhV~%rNHyfvfSW3F`M&{?i?5_yV4KSmdtya zb~z>*YFs_~4RV@XcDg49_wITTMlP-5amvUbt#?cpeU&lAAYv;6-`~EOgC%gi!(=eR z5zd7?v@dfHdKF;NI_?ZrBO;MyIT4U129qIcgIdUK#6@{<12ZKZM?eE~w1GXR zecy&(36(}hD1b5215_}DwewDNMup?2B{EPpN%mzU)mI-;F{w0pe}jZm<#R?TPN6r3 z3;{OWWovVR0z<WfsW)l|R5`cCC>C zFgO{<1c3_- zxsVIFfU#I67UX^qHi|uVXUx?B&m#~Z`3kR45HA^%%7S9-=n)qGB#=o(iZbX&C{r0w zcQYL6iQ*`Z9nb@G_>HZQZ0cA}urqP`(RjI-2=WMwwQw@0pa=&EllC|eJwpp_5SByv zBZK&c0`hdC!<3{p5Xr!mr=XCvU<>x>mIZ+d_xP3uc@<^X5S-*_DzO8OBbC#(lzET} zwqQYS`3j4`l{G<-10k0)=?0xa0^f%MP~Zb^7Armzfko#wryv79kPM57nF(nNSD6PN znF=x)nY7RuZDx`Jf`l*#N-I`m8=wjc@sXr}3m)l`2w8AoIf4ZN137sR8x<_l7d|0) zn|S$_xDX3FqMLE~kpf|uycv=SDUNj0HUm-uS$J`jnS5yf7Yp@RMlk7;GMSzuNhm{w zjB$2rVAPri0h!X-kf>Rn24SC%Ns|f2CopqZ4(4KD8JPoNm<%bI`PrPOxkd?kpsZ7W zq12o+IfYwUlnuI&i?Em#Dxtbrln)A_Ai<%G87z0nkiJ=>H6fyrsgO1aqPygrGg+On zK%Ue|qS9%gE1IMA=z1<%RHtyFAgK^P+Mv~GqC(oCBjAt-!a5U*m-{)S>X`?;Iinh? zqgL7q2O>qTv?onEq%?Y>^J$v3kfEkPpNV;<4%!&&$E7)%q3DU4^%b5ril%gWmzqF? zV8LVa^g8Rdo~^i6E@`F#b|5Ppu?WQaj9b%zTS{}i zHJ1sCw7#hkOrQ~{kP1%=wOra;(E3vmx~*>ttONlF(~zwast|*!b1XCf#(I{kcqRz@ zmT7wsQ(%_^inPA^e;q@%m7_$hbUPlwkU+~2r78owQkd?FpQMVdkCJl0$!?;Rw=by? z+X|VZs-jp6rwyy75D-#YCOuz-op0I@Ao-jf8@a)nu(r@{dO^1R7^kS06>7T?L0X_R z3c5MEpB=kc-+^$sc~%jIwxyX7wjh@ud!M;Ut@35EMDb$(M|N&gv|MA4gPNa&nvk2D zw*0w9h9Ik=B1F^JZ>W{3?ZLdKskOQP$-9f&Ei^D)y;Zy-79ZrO35uDnu?vh)daLj1 zmWi+{NAR~?_7aY?q~utjkC~vv+M9<8rB~WAd!Pb(YIxO^Jc{@?r|_>JE2Lpcr}^59 z$_HzEwgpG)Ar4HH25F{EI=lZn!S5?GQh)*zOSzttrqmW6a=9!~+ie4$pa@P}-^5X$GtfE8wt_T`H=I1x`)&a~! zMW_L}U5cr}o5RWY!)wL8%~ZBqlYP>gm7}Y}Zk#qpfC9jR!2{781>pz`(0mlgJnJ{Z zvTKoT+=)mqQ%fvif07=&rv;V&i>JR6zhsQVScVw9Xs!x{$iq`V2_`>2wz{kfd~Hz2 zF7R2JAp<=@dg*a0nA|(ZMz610dz?#IBmBr7nu`E zd(Z&|mzhi{M!W^rqGCp9+YFXT%65{1eXNtt=9te0GECbn&BVboL4XrD;Fz>~RPAV! zY!FRt7SHktY*(Bp-dZaZjy`pjgw!r22ZAdN*H4H7zd%xV=C#Hn9t zhZJwn(&cDc-D6tNkpn&dBLhQloWsk(kjKI@aWr~HF}dd&X8d{aS26I3$&)%tu<`&} zth^)?cJk$_Jgu?<}R zkL3ebN0Xf2rz~QS)Ld*%0+BE%Oay)%1F~mb*KA44GR$k;li3GtH-H1Nmjfs)dn2MY z#RqQ)p#)1Hs)yZ5CEEr>AS)Wx%P$bx96*p;ag3XNfapvrnH`O1jlvNl1~YKkwpDH! zK+`|;Hm6sz20_rMv)YL59DprcMqp+%<^*Q2YBbQ<+Nay({GUlj&_wBzpQn<(1)APP z+-6o@cJTo|fRvN}4ax;#20NX`o23SOrQVM zC-60J;HTq)XN7~y(ZR^tC4BXr00Jm(8t!2^r*&|E-$^I7&3MTbXo20$htLsQy7+e} z&}-s47PF;0K+N=uarg6>fR4?fh<+T%1G z&5TEqQr+PG* z51s+83~7Y_h*x1g=KiH`S1{&4aMNlI)!orS!2Em%ytPI}JHX?UU+(6I^ zF`(yBMh3w&>5juMh<-tVdD685lxfi3jGkuZkpp_JVMee4@i#^X_HT4S(hrmuK|qiY z0PIg0)GDF}29G3>JAsF%!e=8?wC`*U}&G z11P`*%ti(@&;;(DV<_;~g~m>O_`>3Dh^9En>!Sxe+>`3=AZ2jpQFaIyo&!w4btOYX z<#u2Maf4vUnSGexK!M`fmS5~H<-E=WG_dPV5ZM+llypG?HIM@j>(7&kHstzyKA{9w z&RF^Xg^@qbY>y6dO9czclnul({RAEmQB&Xj!aQbttd|PA_0f-`QcP#u;%0dhAsZ#5L#K zk1c=nQkY-bjRa1>1b)v1Q=oYQ7?0c6ccy~mSf;`v)p{E-$G7%8aqM%nxe&Uuy{feX zGqA5HkANHyd;Rf^8R55o`}10sL2Qj~drA2uNF2Um(7>7Z=mmIUumK}d)kM(O_nN$g zUzSTgJSkc1ev^YgXjlNslkk}AueD2A2#CUz<(aB4$FtsSV=fDEK|IhC@ze{$T{D_;BudXZ)*BTmx=m}$cVqEizjUS&e9aW zFf`yV^Bn)_{e_u~HqDok0{T}8JYh=p1{3WyO;=PswRtAMgs200`;3ZrjK_yD=rFTm zWrNld^#Zb2uBwlVFUH<--)WO88z~eYrI-G)l)xlUwPIib zay(l7U%cH&C)DhPxf?Gk$q^<1HYL*ow`^_M7@NPP_<6tsp9nuk$Ef!XMJT_~-Ji)u zvdlZcch!qlJcH)3doHxsKT&>=CRT8YykaNL)wi*Y)6 zbmW`8Rs=8o=;hT!SrLsDyx-1wkRIL{ArTYfhp{K%SFUrPfMn0}Krdv?cMvG7^^U>7 zbj?lx2-O~9FBO)^(4za+c7XHBF-epydpw*0@YM~Rx*V8$35-Pc|A8j|p}~ruri*@`!^CK;%T|>5IvLLUPOJ!JS+V{*fV0f} zLqhgH=-o$eu@zE~WBd_#BWxb^9;Z2zNU|8-QiVtbNLi4~)^y!X}VDQ52J zCs-+F|6_gW7U}(TO!?G2C)TT`^LUb#GB{DBdk=O)-FM~u*rGfCKGt--8ocj{Uk`+p zKT|@B)!4gc7Z;&w`jih8e@FL4)J$v-*?{-nM*!~a<=g+kh)`D3gEwvhMt`(@;(ezt z6+n4(An29(B2?b~buw4Ec6?XLWnfAE0Z)_rTECKdR$caQFkh`KcKpH?cthbqp}HLF z97EFqP2ba90X|Gjl||R@0|BE3s|>8!D+tw5v6JxgJtkh6_{#pi4fYHw6JH~zupT-Q z{S!RnxA0$TEcH$=4K2hdGvzyxy)gv4(&S&^ItyO>F0b`y!DKD!QKw&5B8_dqfBIkK z`u8OQ0mIJf3lT?m*6FXL`kZLKBX_U(KNU+y6%Y@_IcUaddXJ*lWi=@k6m{ zy>r4uJkMM$a&$%K)&X|(-Fy>+klBYpRs=JC0W&7;Y*NtuH%p1iqwsCUDE^7KmZLFif6(?1gM zji<=E(us^R$ScS#A|R1Fzy*9T5Eh)!aG+-K##05EY+29~0RaFZ`2+DCdj3$3k3vE4wUEs0Aqub zB0;F!Kmw)7mo7zwKw$tw$OQ*B=4zCy3&Ku~bouF2i71^pM&}H*BsA&Kr%<;$2eYo<)JvuDU)!vYQ*;cn@*Y5l4cYtyA^11DGr z_OOzJXu*Pg@*l51hSnfOp(bY~*-*f5mz&k(nppfSYMSk$vio#$J2P zrSw5bEbuoS0w7qo8iEXF$ioIhV9{TDgosDrh$KGNNK4DTkb?~gHn^aJd*u}$cQC02 z;Z5tkwnGIn+`xv1-{tsQfF%}L9(oGO&|{B)WiY`5r+t(mcpX%jpp5iI2iJ=X$`Ats zX+<$5gHRA@F zD)r?nmo-)p<*-zMhAgtHg3!mRT|J@;Q4J}prM2yOOK(mxZOUy2@p@CFKqT|`_drTK8O*PL56Gbpar8l1PJcFTSpz^fK#%wyoxY! zV%)Ycv7Qxs_*~5C0W7GQAs4A?yY7l}aybmUTfz`?Y}e~aa|P@cNt6Cs+k|%AtQTN- zQXOz(Js&D9tR;&x4mso$z4Ejzz!#y@d)%xwpZU6c>C+m2406|K_91V>34{ORH{XIt zYv;__M%`kt~J=3-0Cc7#TrR1vD0bGJh8crlSst@U+^IV zQo6WGg9SIdyRySF+1=fRd432i9D@@ZdXv9T3B~CRlsR1K1lGh811r;%L=3Wb(qSc* zvYiFYYH58ncFlDwHGhrBGt6?__i(Gz_uwKo1G= zec~sOLg%cNfw*nSUz_Wk-u%EmRj8fqG*N__M zz!ANK14U8P0RR`P5Om~o;9`&lh2_2NiOG7zGFAyoG(UU+fDVuNi{$@`5`!7T-X()0LPlw;SsDm4GQ;1g4w$)T8*qUf)>(F-~>nqsxCC4dAlaE^|X0QfQ`#S6rZC88Unhp?qN z;UVrriL;Lm5jmh6?aFg7ROAxD__C>u5{LYgBPYjGN2Y13hA4`qSOQhP8&YvE!;=ym z^~kRtV$z4>YU99GNuXTv1(aCg4H0TEmSq-_2uiSl349Q>9N<8jL_iP-j&KA(?Q3!- zkby~dbdei~*2@PTnKAPsGtNgP_%GExIr1>ih;Sf)u?~$ z7HcF#(vjM9O<Rp#TvN-02uGKkWu1Km#udJxc_vU8_^L4sdJz}KEKvuS$Rg9D6b z#oQ9&sBF-KdIL2VvB*Gf?=2)8Y6XLleu{j463J{)V6`5>K!gG4!PP8!fE7`-cib7K zd5?o3kG>HL>Q(O<cQ}8LUlA{!1-YP#=n&sDPHe7$g{7V~kY%vO%gKBt$K*c_D~lGMT^#`niE4EPR$L z39yv;3gpZhgvS{Zhso8dY>+R)AxQ1E1HKF<2BaW_M$VJ}u3Oe5h`n5yP8nI3YkuA2 z!dfjCr1_1hY2$0g+_5xP(u@eK$eigc89VRxQ~OE6OA)+>KeGq8nFORK??vbXB$?5| zadZfEpic`Np|%3EWKt72I4Ej4)8Ng?qCqWVy1W`ZUb;XG;)LokVH$x0$(R^@3uBC^ zlGX;%LLLP|St^CnHkQUq83hSv0J>2&#|AZuPV~h1in_@%*J9lv4_o8nTIMOZ)g`DRA|;ttaLNwDl-`P_U8*PH_2+rYGjRl5RGzRTtU&FMpM! z1oVAqI`zv*X6lYaX1&U@NW>(~He*lus^*AjsL8$mrjv~#-k?tR8&~9&aUGrXX?1hF zah+NWwZcu{TlVJ9bp2h*cXwwY<5}n!B{W;xy5pUAdE3SuBz0~u&7H$c4nPk%qI*s8 zqObGP=?k{8rNUtnsxcS;F5v-14X(&K5`&bk^2WrSXb9*liv9NRN9UCGT8i#6fhqWz zOv3FS4@L=D_KtySM0aZYWz%EMl=^}>)J+;a<}!y#71ExZfZv>lSU)Amoywww6W*8A zp5n@xNWNJ2dg9XJZ!F2OzOwZ63mB>qa*UQpy~(s!K9 zzRnW@eDGm!bIzNNhO^Z{649yYPVW;A90Cbu3;%L5rO(w}Ae#o|t&` zUDkoSWPk;SaD4I>E&x>A6B8F;5Z`Bb2ygLYGH^SqOdOQhhu~Ejvhnrk5bQR&+kJ zcn*eT)3$~pu@V1PfO`0W2lx`XhlT3@Hx=(j0<+dzDJ2*tfKdF!VGj@+2GR$s_l3X2 zgh42A0>_2U2$zh=-$w z*5-r_^dfnPjEVSncIbsCk&GjFD$ZziDzzIn;DMqfBf|rTH1kM(28woad~sHC$G9L3 zgm95WFmC7?R%mo~m^9I-8N}lONtbtaSAPcrx=B*^%pDHY8xXF22w-c=N=weiRC7GPH1%478QIDB+#gc znYW3uCWpGTkaHk_sM9`_I3^|k5KgAXG5oTT99a`L^GGt%U%{w0;5d-m@)iO&VmW9& zE16)+$YQZb2Q;~8wYW=%!7W@cTqp=W0T+6VryAEmH?G!1EVpj}S%eKJkyFTs?Z}L& zXpRy29|ZzDSZN>gMFV^WcXaWUa+f7#i7P=Vl<;9O+aq;Uv~gGY0Ut zKnB-jRyCHDp4mf;19^anVdOcM{@8WNIU#goLuJ^Cp4OOyGnaF?j#2WOi)dq1=WV0G zoSk?_C{ZZUc0%3*Fz1P&2|AW!27E##TDe1;3Q3={NkY!}1bGM*W(c21N1{i71}2JO zA6jL8iA;Ura}$!HwK15;X<@>cpH8Hhez2OZSbfwPmA3hQk!Y9YR0IZPi{Z#0K}w1- zA(WyyVTy#L7I>hWa+o{Hpb&>2?rD$*iJdl@89ADkPvU!fB?c2nA1|)xW^;3dooJH0$`?iXfYU*$#E5`u>Lt4o1MdYz zmkK??JA00^$f7z=6nXN7`ABK6T-jM@K-~@3H22FslV34q6z)*vE zoNNlOL)NS{@u2J@r7UJF`?^Tr=BtLvjT_sm!RV%s8n9$47Bpb63%jxhtFTP~1nY_` z%KDE+ct%$LBY&dQhzOxIH)wUesG}+NvD_$0p$V+SI-00SvW2Py3EQ$P`?PUD1~H4G zpxS?($(*v3AjZ>C)R>#-Nq$4xW@Ge7*Qz`45gVeFt-<93D(kXPd#>lY1ig5w=6RwK z8*y&)tt*CLciRSliK&PYt^C>~;>fAF6Kr2=1aIrMPzzH=II|f8u3>Vf6x*l(YqO8* zu4YPf*0QUVQa~d)xI_zad7H9u>$IrLxIn-=m)ozUdZ;|fTSa)bJBqbTx}dw0E4j3d zqT8*8%deptBW2LEi(9-wV5;F7T06Y;#hy!^y3~#wGw9z)!onwno4b3%FUi zI|wYfv0J;MQ-NWpfA#{9SOBQAS;1d>!Q9(_0zg(Ayto5=2P4qKQ-ido*{G14rleV( z-}sxRi7_~HmJ^JBa<#oQ3_@kJ17wiH0!+Yez{4A+w2@@AOhdwf3A;{m#JGERNt;|) z=W#0r#Zhc=WmE%2V8xBA7ie2MV=KKS8?4J)$LRaKNja?5(Zu^2#w5w9(d!#CK)iDQ z3i35gJ{ThOdZ2}x;fl%AeYLxOG+)e$D1q0vMj8a#F4uyccMt5 z7s$QAr!U^x095SD0W7zBvCFOZz{DKCth}5D9LrRDX!c9Nm||$wQO%M>1hAjMWm{pCd%=+MQcBQg+$F46 z3tFH7-K=4&tdBO1150%rU}g^Tz9gEgD2$t&6Vovb0%xf`?R&2`&DAmEn;yi>KUt<{ z+{SYPDQduL_H3fw{I2(g&u&du_3B86E7LD+ZL;jT#UscFJk;swcgvBcVcFQjJiAuw z)&wcc9tPKtT2@ z5(H(1m9j#?s|YHPrR69dOp+=uG zE|985&6#ZhLjdB?>)c&VIB8A4U1+ys`ruLbqZ4 z-1!Z$)e~Iu!HbX0tC0ohCS~M2updY84$U{vCj0Hp1e)m|$)XKB?S{SU zXmm|O$Y;7k-521WsPyHMt}7xnUB zdM(xP6ff>c{sFqN8yl_Wc9-h$?Z7i{V*<%j1eQ2Ka91l*@=v_fur|Y)3hN@UOvXI6 zNGX}VD#`U{5rpc5q~=wa94db#C|Ws zdcOeUz1Ef6Jy`q_ET8AQpZ&3L{oMZw+>Z*@1rQe`3`|f^!2*N{6(;Nu0)&VM2MjEv zSn-5IhX^z};Ha=fgBCe*aKQM`NE7E>o?sp5e0#9Pn>8-(w6U3^hpbkKX^~PzYEfgzHd~=OtJpH)np`OgZL4|i zfC*%~ez1^(#)i;rGkOL(l=bJ;b}Qh`8^N#t?Y<=v0Y26Hsz}C&r$&vuSOAS1r-L(P zj+yA|lCS6L#+czr%nd>TxR8-SwRX8H#H$RkHT-S#MC)dr-JW*tEb$Mfp#{tSV;_c< zHfJ1bd23Ujx5_&YHVs+u&^-`;B2UEJ z6p5vlMQX_*nW>sPk-#2oL17gir24PG1L^7v!_6KnQGyCfVyguO;d`J1x01|pBPP}B zkUbKk{A@%`R6#Kn7F}tv72+0C43$-SW93FN4SY*99vAum%^r{Z4kIOtk}Cxg)^O_u zI@7#h#}K8=F{cO#iwHFXMM_1L8u>H-#lIVSSY-wp81>RQ9Od#+Povmu(mN#Igfl$J z^1I;xIrvaP1|n?3696hwkioDQhRBmbDE&0@%-#@##k5s|C}qo2B+WIJ98!cOS4s&? zwm}Q6TXIS@I77+2l%gd`$OPk*3x)u0=wJsFJOEdMSBLmO1_4A;V*@d$n2;nnpS3km zKV3kUDHQKD6Bl8HdnLvH{0$gcK~uOC(*v@_jjJ^|l~&;dg7jcwc$F$v1{zRBfrTSt z@Hj09hJXQtv?SK+Rt(?0_ut2GjK#)D`R!NWft?Eg$WIZLNK=?R<@w|RQph;cJw}u#$qM_AmiSVYtm zZK?yl|LeLqd|TdH@a8gY81lmn60+8p)^z<%Z5fOlaoMIGJFn3JCs6nQI{(^h0VI$% zc4$qq8bQV{jCXF?BR5=eFPf(vPVg&>N{1nLlA<3i-J5tIX*L*iRO%y_f*xMfW*kBR>0PS!O`_S^v=QHMg za4hMwUDfV)FW%*@2v)d)6^al82ey!A!Fgc^V|X_>@Qh;LyW!7tXtul6#)mOOmVF|l zs8S%|4|S-+A;|a#G;nWsU2LKU)#tD$p>8G?!XXdsC_=U6P+qF5VU&K@#hJAz31lSX z8S5YhH7Z75y9uBkn{+#DsfB}Qa|jhtm&4Ox>I812+#R}(U8RdS+15DisdA~^DYmqWpNLSqC-pog{E2HRd5@Eqf)b{YdItd7Fd_Z z;2BR2;?qP?c~SN7cOny=VhYhDWGS1l%o2jGm9A{vEWO!H0~RSG;MTp zs6ocW;De1KeFu$ zlbdj4oDNEpQg4Y21tTeG3_@Uo9q0fn-nl?j4HK@GCXc5(y$=}(O2$%>A%9!tDn-o- zRG?l`bq@_G(vpg_jwPXKxRip@;ME<|ELESgBx_%NPzO&CG_XF1@K!pNQ$Gxs{7vScvOLQVk{%vE9u zs|Q6oqP0OaAq_Cs^Tq=e*e>vj*JX%arUU4*yG!VPoywX3wCf4e*06PrzzZ!1-4pC>>Bx{baA2F63}?uA3(;zPkPIMdNi$9$L~J$p&l zIojJERjO<2CXYmq`8tCVz31Zb=B4xG$%akHYVznp*F4lc-)_R3=HYvvvyM9dR05x~ zO5g7#JKx(B_}TYKb{R1JL2|o;(BVUU#|9}}cTb6o*JKX@81@yk?&<&2;GXt0wi)ar> zlRW9cK zsNnLoOxg*a$iWTRz*W+h)*vm+(w4b%pAA|;2pGO3oHg(JvS{%;F+{8Xv%>Nv-v6QKJzCp^U0Q$8j^6ZrxsIrOvXkqkRrCOYK7 zO{;-YaTK}Prq`P&yNfxR$hSU_K%!Gb7#y}UaX>VbuTRmUNldy*yhE@ciKgnqjv%oZ zOdO*r10vXhN;@#|>61-+i7p@jHH;#!0~I~cyj66>p5QVoY_Hk*3m#AkOiD&&gcCKW z0v9j~T#5moi@XuqJLLEPEKq}SQ2}*HCjMg$ODet^lEW?IjbWTY+fjn}>w%i%BVcQ& z4oa^)i~+X+N4#Sgl!FNzz?i0)0V$XObzuV;NIuJ(GUVzuXN0}~5zsUu(;09{iyA-| z;HpO(%9(P>B^6Xc6ibO45E&atfFtk@3qyey(1BmVM)0Ac2ee2lEI&867LmLgtdKr^ zyv7W~pgy=Ll92)YJ37ZPw*+e^8bE=O`iO4X0dFZnxx+xLR3Oxv4bEt=Ho(Xca>Aqk(7Zq~h|8iul~*x~@qI>@yQZ=man{<{D^@g*vncBfzArOPHIakcp8zA1G&MnhP*nCn9i|0Ojs%# zzLUfu3lRpHNECxA9QXkv0D~r&f)5=7Aozi`fdP?F%kqICND+f9qyb;lI8ubq2fe-+ zozP&iJ_zMb27;<3D1uG+Q4bx1I0yqGB?BdR03txD4@(enfj=Zz&w?~Wu&X5O{19}Z z0TxZZ8D+*PiAodPXp6N$r45XupCg7tWIF0P7*o*;3xqB-N?^) z$Mbp>GXT;i7*inyR3{jzs}e#k!?PoV0*`x4DMd0ZmD3N&iX7m}JH^X^6HL8;xe&zz zP8C!!^-xKL1A+8M4G99OtFo=D(MGj4+$1$e*#VK+x}QWK?PQi5=uj}t)lUV~A{YXw zB-Npa6(8V&BgHfl>rLN;!P2|V{WA=BIf0C6RmAxjZvoL=z1B|+RXCtQ*9m}f`G}!p zm7dW}2tCGT43QXUfrj&}h{R3}6ino>R$ax`F)f2`L`OLhF?!N0lY{~};zVVYJRvZ$ z%p6A$5gMlo0+2k{@?jgpDS;e70(qs^YXyS;b=sJ$YztW#PZ7vI_H;&ME!h2oLf4~- zh_r!|tvUtDPs6O17(jzfz1B|%R6#up(aP8ZOOA}mwV~iWdMQ`gW57}r0C1sHS$R`h zt;nHr*(HcsnhjJdz*eMT8l3Hr*?< zecHK|g9n%aCa~N%NCKt-83NstQPkNzW3WHGORsG~-KqOr!REykbVf+5H_n#(r!DPKIr%Sz5a(`~?nJr@++KdVHJ z)qT_`WDC%0+8-{0AFzQF^&mhTy=l?{I(?daBW1iOTR3J^JMKLam^N-P+lI5^m_Pwp zVPuh|<2TWPRhG&Ro&qNTf->0K0dZvtZjYE#W-cI-U&PJ!v=vpABD=nlrsWi#$sg6M$H4Vp`HOn1CwF2<&WHm$jVLg%$gOifl;BmrWU;cv!{h$Vs` znUx^uT&HRquJvY?okan-=$y`E1b&|Ylenm1T^$o^Lrl_KTHfNT6Qxq-^=zFXFay(I zU_2EYPdmx3BWszSQ5tPcOw~xEZk`w_=5Rp+&nlQDjsZcA(B<7WB`vL1P#f;;zuV1&7FZ>q0-6L+#$LscR;f=0 z6)a_!{jORqTfoN~L>MJ!L53gRHbfObDY)84HS|lRqzeKsHKX6+(wT{I}N3s5~(7vt8kZTH6HVWpFP7n?yI=SuI|mYK+ECH2yWh) z2yc}p-lnM#Tf3Ew5sL8sU0`+YFuN1!w#<0JYx7NKU27xwg>5-?h?0^%Y!ttB`R#>W z!Qn9dLN;P_cF0Q&e9;R+onx%4D7Dvu%JNES$P%&XXw*yVf=`Oz#|z z&!QGwaa^BcJ{%WVsvwvU@ciexG=O=91d_HG$1u|Wv26EGU^#J@xhcYXKu zhyPyx^Ni_J%-qbCzhW14qOvzX8wnyomD2FV3#f5;r*e(op^?4n6nl6cC;^QT@=x#W zW|2c5foC3o>6GGvAav?T4o7|;bvSihIiHIwGXWFTViJ_rY#cVldd#FI<7$k^k-*rf zjJ#0SYci90l^@#^H;Vo|fEh?v5~Z6Cr^pK3D^xWXT@s0zi^zmOjG&S0E$Z6PUUc0i zF^c*1xKHhdNla;1dg!J!2>9ycks+a2r*2$Hm+$7G)$t0FA*h zz+d`zDf70xHtX*^l0T#x$;7Xrs0x(=d&U`C{v-~8uL=WV)f&_LAx zEdT)`fM_5Te1Rst3EcJ74{Nq9$|#~qCU@hm_q|?Ut5(Elee3;7r>s#O^K|~S9pB*_ z5(rk8{z@9pZ2x&t_v*z^J6Yl^YLtb9lS(5nT^e)ZK!{GKCQwr_0ThiIDXO_}LqrY~ zIgm=N8TDw*v}y&gAXwIdPJ#swwuR~z0$H>V);6WOawveeej&!~VBv+X}rW+Ggp9;ac|d7p_hnF!m0#-ovkY9%E4U$Ik#I0J9+X#Jbjwk3foS@T#~FR~#rJ_r4Z>F#PzeGS zmJ&PI5TJAenk0o`60*l&3E0g=S4qQl$N-Bies-0Fd-=8A1_~5WLiQ~4c-+zLr{SeS4QI#{EP77p@R201=)C6+4ap+c6XM6)yR!kSs;(il)l*Lx;HxBonQEG9 zx?>h4Z(nbjYpcQG`gGJ56;8MpsRC+04-?EvX6<`E-)?K0r~_9}875 z;6qbtH$(c7RBq9Xp0q~Tforfi;aYBKlE*n`I@;Lt-mK%gnUi;(^~Jsci%!fY-Y=6CtvXmC|r;=;Wu+I zt;TZCYQWs4|D}BO7B8Q?2}vA50}7)WKRBZ6D}W;75xR^2{!P@^jcFI6Cl#wSE_oRf z!4AS#D$cbHT)taQ@%nN*1)**-<>T0P_%OeZp}+&XOI}ze(7qhxjc-Z`nvxi3nuO8p zb_Kkf34LTZR>|yKu_B;!9OWmqlmG`d2*OCxhM6EtAO|_xkPuH8GvUwzy?r=;RZ7^5d1AHZCtt9x4054DJm{~5TQW} za`3|t`D+Ls?4Sa>H^Bi4&NUaD9h2HPK;a26H(aRF5E@vjHz{pn<9mt<{U(I&iH8jW zoXP7%hDL{c#RYgwBB36G$}}qS0EYyVjy_lcNtuuTGMD6`4$bt!Rh7{PLm)!zIC)DR zZZB(|Yb71k(jIYT5RBlNj}!mopRkZHkk`xEH5C`SY`RQesxylXU~tN4`V0k07-uaT za7A)frD@z;mXnTVAR~6bO4qA_3&KK#ZPs#~jvJ*5j(~zlg72N${3pXOrI$_VQ4G2n zWfTuI1hG66p{z94J2m8iA7r4SoP5AAwI(P7l_-1c5)eDP)0KW9Gnp>xA3Nc4gCh*V zp}=gZZ@Sf>eRTku?nwb0#`4J_CV`*^l?mx$dLa14KnPnm?_HE?H`pd?DRURY98p@E8`S zUKIgWOWPus-nDCW5C$+}3k+c>!xd=CY(afSNU74~c{?2`NsSm8)0#&;KIp8T?DpC^ zl%le%r~`C0F@p1f7J6mP$@JPNQCRtOIeJ_yJ7j0yZ&cNzc%CN!bIJE+J$4bX$+fQY4J?Ft(`3!8t&z?U*O@@Chpr0SI;Y1QUiZ1t2rw12UNN z6?`xSAmpG9EqTpBSQD5MG7&CRES^A-h+IM?K@2~jfocy@nushIJ z$aRxDZiOKL;R@@v0>%$e(<5YvL@=0~_LMwR6DZ+3@qv#Brh1271^2}Q`Wp6?9gkvrkff$qVatq_DO7$FAf7ONO|AOj>ESq4owGDi>d z1CV%;F-3&}5_+2K%~D9Wt&3|=z-zkVEqAirUaoYj3p$T|Sp>f(s2Yd>zsbo!I7%qv zLuXnN6ma1+Wr+I#k`QUKhEGr^ip{XH5krE>Q56n4zg|Eg14qUJwt|=a`!k+V2Vk&w zKu9n*snjronum@EWw19^B;NoT;D9qk5CaV|EQX%E00~O)fk!6t12hnPGS2qwA~BF{ zT#D26#d?uxSwUG=v?6d|TAwjMP|eEExE3o|e$^FQqvXz}3&9d?{f z`5PPs&B-u=0UjU%UQG@h9D*gF13n-G9v~TsSOKJ!Wz|>|1q1*g`2+fFh*r%#iX1Z}}`fQ5yG9}5zophiyyrw%>JNf1Co zM5+NwR&6nWq|63ccaB6+We0)37Sq8#tl<^l@6hBtEQYW2o&X(b(PouoxCI0^KKE?I_P$$==Q65D4Pk7T>G69*de3 zbIw^(qX|v`T!E%BcwAQ!K-=3=v~fnrpW31ZN=Y=f*MXkI7FSpa7myjQRlwdBZ)<)m zD(7K2sB|Q?W?uTMZU1tx+*HYFG4O;Bbo)^fC@|{XoeZ04RCoe}i)x@3!-i!pec)Hg zfOf>ml@^)inC4_8-{p~JZlzqTB}Ak^C!Nb4DF~e<1a^Ux#t{&l0zT`j#uuIR!jQK@ zK5~Ev4xbAaf^Zdky(7V&1aVM1#o|-=@(CHgq?zeYk)0n*VTE@6}*ej1y-vP8(!UB_`x9p zzrLDBd1ZnjR$!%ibv+WOp~vkX0y`1@9(5kh2Zyh@B_`Mh=$03*a+^V!WbSg=$ggF) zu0)h-A|!vncYI*y=wJ)Qw3+n}u-{yVxXxh_S2(-~7yAb~*btWdA1B52zoC45w z?Lh@za;7JUTj$G}D$nVFN*7 zmo8Yovwa8XCrBMUj+fJ1R3p?9@ySGxG1$;mo%MmO3eF}btlmoUvjmAf-cc0?>#Q3V?MX-QW_L8Zxhj^sYEM30OWwRBED&updg$OXB0X20)Bt zH6Wa4q6?x&T92BIcx8OQ)L7^MFxWa_fzEY-9x{P-;q09cD^@}1i8 zY0Bb7Wb-gGQV#U(Bp^^Bpi_FTi8K(;i0hf-u(&4W5_)VF)ruUdfJ)*(TAl+_fFrn@ z;!2k`K}tx14Vsse&Kj0ni;Kd$D!b^t_Gz-W@5@?rO%7lCpYxt|Eu*pOy zyEAr*$kWwr?__=G3*`nNqv)<;_*N;Mc3Tns#mu&N4$CGNc7ZZi=gE8ECu`2T5>*x2 z>DzYCm5U4T1V1T<$hVulQE;~4Cq7z}0q_4dC+kR^;)U1busbpHKM_qrep4sTBZlZs z_=U<}7n;o&xg}6iOW1mTJn57x+9=M6ehV&lyhBRSf1h$`w58V-b)QHzyEdEfsB9ClkJhfpNrW5CtC~C~ZA} z0*^sIJ18vrH9g@1XT7m$)+J33_gOKvX8+YI;+B1x)n@MYf8&%iIq(BTKn5NG1T$a* zL%?=zcRHT&Ohb4S(r0A)R2`^-DMv9kPk3zFHEv;-V{Y_xOJ#*?kOV*w2Ywg^fEb8I z-~(=hXws%CjaON#q&y6_f-e79QEMd@hSqFI!hiErG6E<@HDCl_uo8a=h+>dl4C7jv zcrT8Ub7`V(+17?NVql-82DYUT{u6c|_!LjEJmT{KA1D|xKn6_!27Z_mz?cMMm=WnW zg-K&!wFYJ*vJq2ZSwCTT231{w6nqec?1+gl zwJEYeVATi#XRw99_=y(zi(ybjai9c6;V;406yaEgXK0KA`AiQ~Tf(+eVuoOo0Rt8J zk}wI3CeZ{%pa@TQaVP%)X+zj5UlSPn*EG-+ABy8#N~MdWXM>6H1A!QmObL^Mq&kD} z9CVhFC7E-jXMQ>INZT=PbTMc3@sNju22DAZFR6E>F@gOj9fdb_Sa&UC*k4$wNhvi+ z>$eLk;0U(HgzJcU*$5Y#unCfM2Wh}r?8S}=_!9+aeY%2sZIx)w0z9%&gIREpL0Oq8 z#)9cU?o$13LccUNgjDgl)MhI4!&ZeE9XdpQ|qaFLo> zmL7I)Akue`h>OAUc5F3O(RZ4sc!T{DI7W$j2S67{XaQ1Kcq`d&QyD_JIhMoYccbZl zC#aZt(-mYFeun=TkA--g6ec|r7IV(YkY4mcA~QQV-~^d@ofWwRZP1x+V22d7Evh4) zqIq7y$yTWWnlo4}9DtehS&>(ipPv_aTN5{hHj2_{buyNkN%VVzlrNc6px9P8E;*mq zX#{x_J#SN#K&L{a7)q#FjM6e>C5C#SCN)Tan`21^oVkpWIE(M|b7|F4rLm!KQG?$o zUVW!KJW$1XT@bnkB>O3-5teBELFo!RpNpJ^ScsnuyS9CnX z7OlWp0qA6{83qFagifbgBCCZTDGp#^b~{fKwWx)c-K^?6KW`dawKYq#Mx`6=XPqT zZ_Q?96CfipFsAWx7R#wS{-v%(X?3rvfP(g)!*f-b2LTz^G;gL*51?*_8ar_(wNpoW z64_K20*4C~9w(Ni4}$|7BNu02uvVh7{q_-Ei=~4HVGopf5Azh78jX)}1VmUR)B0c2 zw>mtq1AR+4u_HkexGfBIs@--36RLqQ7JXe|wRkJBtj2(|nU<%!V&K**C}IP51Y-s= zVK;(3Ybm=VnY)53eq*DGCPXeCiyYS1w<4Q60NAgogrucuexAjF+RK~Fx?3encLo1T zHz5aYP`Vzncdb@pOCxaxZA5?{6tFNVl=}Hw38;W%q&k^z{Nf#(7Q1zl?|Fn zO&gLq+bjYEyCwL)*;O|11G-GxrUM*sklP+;S0Ii-1UYpne}_P-IYbVuq?yW6_Pda) zcZw?^KnuD!C$Iy7K|fByrd3!ik(64j@<=(5NE@tUTeELUVW{y6Q&xt#xz$!`Wg*@B zwLKgIO~kMrWxKk2IN2ZDY|3if3JmIyu!O>~7ZR)MznyU!SIJBdD+|7? z3X4$6+2w6t=Xq|2qjAMJg8&P#AjzqG3bo)7q`b;@P|nkQ&ZJz-irQ~jFjQOWFjU}V{Gp^Lu_IBsx~746KRQ6m1ZF(bGSTdMVb=f}EFs<~Oap z!ct?GRDBA=UQr#29?9{wwC6pKdKJXj%IzYx@(P53wsAtU$y%G!ED?KgK z)2h|yt0w>KvaPsUYW&xzJe#$E(CqkwP4Wc+yHJsk-yoj&8_KqHxd@9 zh>1=X8`XPVAc>vZP@TRYsDS;uVA3|h0y)~RFoor0%5OYpW1Dm%P@=K_a+okhQuE=^ zQ!UIgU?DZ*3+~!JO{Ki! zk_9`5^w-aI*=iZ*8{EpXNcn`v22Oq9`WXo z&gPD;bkuXi(t4bu2R?J zBO_?#fc1>-&OG zYe-aFS3H5&UR2L(K0GqaAK+Ed(>xH$Loe6UnOEa z&BxL5{YtY~L9xJ*bcZOl-b(Qr&+^96*_uGr)d}ES@igPU6=Ck%o7MC^KiYV6$}&&} zSHHy>A*9P%*mB#TLmjXXt-lMu&{U13I>GRZ4SuOHI#bb=Y5~$~sF!Jpx)pnE>K@g_ zF7fFc7ju6BJ(!GvU)qLu#4O8ob-loRzxL!l+@?I|9ZyJzj!1POOoJ4o^$KdvR^yAO z^t~1J4VmS57Rdn@3w@21BAZ}hbIPxLM%ce+G)_Y;d zVj^OECT7@&^y!9+ACr!JGp|%zEA1*o>t=8N#ep)kOfZ0YU|4~Ds`w_p+AMFuQb*GS z4M&1Rq`tN64lBHP;tn(67G|-O!2^SKCYKlrb!F`c>G#M8V&le+7z3CFhIq8-^y!6! z3#adJ0RoP$Q;36_J_7GMvp8^JLCI7AkFyOTq-8?AHVa8M%w}>fI)ox(Y%Rs4kiZe( zI!sCf7C0pCLkr|PF@yvUGRmSB^4cJ!2~&Ei2NDd}PP`1l!{~$=FL+Ko$U0IHH3&oy zO05|aWUweHBy$ToH=g1_ryU4l$OFYR?2acCa4>Q>iL{d-$d>#w5JU~vO7W>RjpS{D z3@*AWNA8{~sy*F=6sj%p>;pi89#Am3WeKVWEu)IhbWLE^|d7TAFZAR>kwa4VK5CkrFuh8l!rPPN2xU}^{xP~by} z8-8N8S_e!7vcS_GwTRnpd$6I~aU~PMM=fY5W83L`T8yHy;*vq29FPbP02yg)(b!KX zHQ0p!nk|?{R`V4MjwEQHB7}PT@{!O@2c+nQ6x7hc2pej27-sL@>Z??yu9cRiDGLJF zK**GUcYei5Zf}VQv@>&%p<`!Tqeiq~s`(we%`DnmBCf z>NTlpA@Ct_C6c%^+^bRZ;_2kZ8g9$$m8KA*08 zJzUd=9dJOxiS4aR*f=xKRSn0UU~V95O}BbC zv5*uog~l7!r21tP1p4O&F0f%0?I%UyJH9jqZf zP5KxMDtUu}@dQiA>f9zD7|ZLxNl%??fua-%Nk@XA35RH794t13GgvZl+ zUCB5_tO4%e@Wbo>{49pOL_#qiX@y_jZwY`~Wh-sxqG=T}NIdgovSPN$57>YQ0Vvx- z6u2(FR4kmptRNGRaDyw@um~JTB?=U>mgSWSCU{$lgQE8lDy{H*UFwss4rNFgUGxqI zIKmB>puI-=6BIcJs5pB`(7w#2qVL%t-qL6)YH6-P8xvG^jF==SjZJSd>edLv0D^r! zattEv1xbNv1_|U~YRi;UT1vB@n6Qa+$2r&q7_>FBp$3T)@J+}x*3cN3pa|adXG|#g zi5!~ga1tugng#*`AN;0t)`}ray^2*THKsUq!km?of>5ijVF@${Cl!SW1S`Nmkz|nK z7I`?M@i>D21D}g)a25nPglNsKm&GS*+*CF}K~xb$(ScZl3Q1%{(gsYZ;SBso$%-J9 zKq}ZkE@&{roP{M~YO?Dtd8weDr6`^T4Pvnnz=ssjQcY`kLv!B%gd2Dh2t{DR63`k4 zCoFCV`y&$cuz;d1_y7dARfFV?Qz=uukcI9PkNEcXpDHYlUDw^UdZ%7iFkA`eP{GU8;CN$kv!ZQPbic=?DRw!2oU=YWI}ss z3Tfj1sqjzdi<$xAQ9=(S*Nk%f&k1f%ksuaWIk{R~ge;Bo z0etFcr#oeI(Sw;3e;y3c%9t!UXx!#Ow<@3>+)-*{O9CG0b;5O?ipa43iA|9u>fb>1 z(;iZFq1jSufxs((0rt*YF(&{3^g#!f6ax|Rl%iNyfCAF49q_QUYw9TG#k^ioN`t4X zU3z7`6q_q)IItmmaiP_Apk(j_O>KCa5Iyu1VsMVK>(rEL0WnfwQ{W7=#z=-kfJO}e zMg7MC-~8^7a6^N9!>HmFyXu*P!Ss^t2Bw3`Y0v(i9&IXmGCa=HUU-zUf`{b3hBX8V zhkU}m!TeqnL6%kt&Rn-e@ELjLF`H524w+Xp>y&?1xo<{qp)y+oasPY0sZ`nk=0@zp z5F~G5Ge92Otj_ufJhYVJBSKCfBwTY#$wdk_!khOm(%_({7^wpM!gD6K*2mgO(ii43 zHdAil01E!qlK~NfuDUZPiDv4U+=U#M%!d7SqOzUAMh7hS>`o_&_mf-+fSzl1AarK` z_y;MP#b>y^sRgx(GA}4jZ zoHVgSwhG-Bq7A5Bv>@wbu2-IZfO6Q_qB z{X))e?k0PJxeu2sOH#S%`vbr(rTTU9d}-o}8S`8>Mmu^NlB|l08Hoa5=?c|>l{0V{ zR|z1Ei6*NUGs_DZ|G<>4(inpKIFmaYzltf}5SVRSHH6xkz$&g6YM(p$m5`XW+&iN| z39P1qDWvnG&r_41f*n0^x8jSq;F2{WV-nMosSVsFB8fWzIS>fzk^lLi>kGE02r^Oe zLCOh$qG+HOtR+wi!XuoBVnM#9h=}eouDD}C%3-b(gBIq=6r-5FLE)+YkShog622rf zwD9|wA#5+GB8;oq0;@VC(eo465WxzhLUcPXSJ9oEQ6I$XH%ODXhG@6sqBt}`6I=5@ z=))CE`kUD5z2I^QMT9xvk*!B5y%R_crNW}ph`{`Cx6W}rKm1CWEF;HADF_XIB!RUhya>=^U5h1g&Dj3kWt>GJ6iXn4^p|e50 zo|?v7BD<)=z&=|!Sq#6Oc&K~~n-D@qZp#%K2p%z@DS)geXv;ePU6cS42)cp5CXXY> z*@+Su`>S#h0~>G;>{G@JEIgU{wWkWkZu28L1jHiQfj~JtSS*>2=zvyI7CsBS5-6i1|#0Cuc5AfXtR1jEVL zN-!KYv%E(Xvk^3^4*bYC)7hN@T1oLsOT$Z`z&V?aNR5y2v;07?3!s{|!8iT0OPz#8 z4_L+pTg$rp%8c_qg)>ZkvoHWeyY1Uc7Xl%U5s&hd%$b-HbGn=X)Jeu%wU_eDPAn9W z?72SbN&#V@^Fz%xQ6So?Kqd;o#Vk#R6bgZq&D0DU-%POor6|C>3{G-*#G`lP_4<4MQ7BjC|9=1ju^ zJD-W5Lc1)_p2N5rrBGX34$v$M0^=fP}-FjlsUTU z90e6XW>PfgvBu=62;fVF7--6WZD4Ox~We*R;B2;d*af)fQS$? z0VjO4wF4Mq)mAp$LISg!BLgLLQ3K>LH)82lO|;TjE5_!r(wp+ak;tw1A39M7u-~C0$ZX+}HM^QL|7L zJ9v*0;5o@m*PSb!K-7+A)ywfBw+;18%(S>OdfA;*5XRBW7)zzrF-(nE%ugCgNS(z6 zyhOdEfoS|cv4f0krJdzE3tYm2_cE3MID?B7SQOQOZGpPcI}4Nj!mHK1lsN;JdD_$a zM=2a5`Gg3Eo5Cn_Rj~`&ovpS5`nDAWTkj}E8;e>saT?XjC8=^Dt@P9b%Aym^CbDfq za=Sb+yfLB7rE)XeTBXP%>`#$>FCP$t8MpyS;THSM%-z$Dm6OnH(ojF?fzJTNU<((P zy*N13NQu2LjGax|TM?o#i?fZy6H@^HPz56$NLuuRHWXo^Lft>!^xGAjQyi6znj78vr-n-y}7@&bEe1a1A0qad&10BvVHH#t;lTD?WmD4Q)n!frn z5Vv6xjd(it09=c5R?=XCpqO7IGXS^bLw~74LJJ!mAe<@OmIaQ#hqWB+KvkgtBZ$Za zrHiuC0k8m|KN!G)&{-Ygsw@1Z0HEa}@>DQel}uR~*N+1VpZk^uiAFh?0UaH*w?)VA z60Z-C-o5%gA`&BcK{hPfR6%-Qgph$5uwki70vUiEJSr0wd$Z*0F?B7`g+zj*Ljy55 zU07OIw4kvKLL($V0~yV?T-w?sF)}`*3_#ZGxi4-A9dHEEtFTTf*RWZU86%(Q>jCWS zwWkOO03rDV1qJ|i04x9i006H5FaZDv{{SJdn9yfS7eRaoK|x3*N-hdoEI^TXkir56 zdmJFBqAP_3fd&9f0P&$@h6fils!VyHM~)aoIA9ovk)_Q(opS2*qsvmypO)y%$th?K zPoG~p6&1>~sne%Wqe?XjRZa??y|QY31nN;oH6lSKsPd3NK|W|x!gvsZBA*oz5XeQ~ zp&?4KAxO3ryHWv58Gvir9Nb`O&@W66`%z5Q@ZzbBBTJr4xw7OcArHtQ)QHfRk|I1d zn&=U1g9!=l#+}O=#gQL3WUgkZhp-yGru*uqBEts_!Gu{NhHTk!@#Dyo3o@9xxn>wQ zZuIt1<72}QEe@R4?$_dz@2s)#|KWjRN0-?uUFc?!H}7`a-XF*ak;8g$;mY&t-+z37 za{(>Xa6=3}Bq2j-7rY?A2_^6aTzK6vpx$|KMJO9^x9R24e-TD-(giZ0aAAieRxuoZ zD5jWPME-Fnf^R5@A)QPzVJ2H{974F>V0H1>UV}Lf7Q;Y8e0ZN zKt&Eiz!BS!*g;@p3D+5U4=IC(fy9lOWN!gAD+{aYhYV zaJE?rwY*#C|L|aXI<~jhq$EZdL`;ibil3631`DT?AD*{o4kqf-5mHb{ znktSOiRr<#dO*r1qR7h_xz63AO$7AOIO^;L}FUOVSlyjvQtNf)&&bhFGqZ9yK z^pBFdNhMt(!zPuEU~r@ zVv@5US?MCU9prqiEStLY!Qj*fg#2-kH(M+8&`Pro5yP1an=Y=0YYaH)p1|N9k zf>|-1^ZfTeDY-y$-&$MZ?4yALcF+NsTj2YYN3k_v5cI}+iu{}8A{!fXL=NKB#<;diN>oQ^j+*oq(IaJc@Zqyr%E)A|-izAss^b^wAv z`&783Epo_WHQ)dSw?cvqjEzM@%aRr+XRF4I4@hD)CorGy}7 zTF^q%K!!Fm`Y3=$8raQNQ@g79QBHkuKqDPhL$;F9A zv&TfDa&g2g+8oIQNwYokNU&VyoHD7+I7Z4}z9h>py+t(2S!5;>xXUWN39BH=<%r^3 zp~{?@|EpJBYa^sgCoQp=%Jj7A1KmQHeCaZ2B|$=>Ua7T&Zp{aqP}8- zTIG1Nvk25*J`!K_0%lY?R-kN*GEEB2dR9Qfj)2w5$O6P95v^iIsj-5C6>G&UufFq& zIOXe-*6B!^#>G)?9cqFk+K@j@@;{u7YE2Y`MNzrbNiOZ7XXlENnMqbTBQ$laA<$)xKK?g|9fpL$}v=9X#1-tT3jKlz{n32`BuSE`8 zXVn28h-*w>5h^K-7J?r%WC$}Lk||H4T=u{wB=2o+4R|nvC?#Pn2gtz@wm^d<&;$u> ziBcf3o897AiUT#}!E%wiyewvRycYO?e|H-we(JX&L8vYgnuCP3T^KcMc&>hBP=?Bt zpu^TPVOdN1)B{7#l?^oNNltKDtrp+`NZ4=#cmM?9BI`^!Sb`07@Ph;DH~>YaPj%m; z+#;kGBry1a4qRqOd=?n00x?tx)AtfJ7&mHo%|JEZx&!m>IK8XGReO!l1Bo8F|HEsz z!IJHg11Ct~z9}^T2dLYvrn308h*jtdVBi82_#gqyg_w9DEP^DI#=InRO-tSkmJgsg z24e8Y4ygR$GGwtuFTix50bt21Cr7j<6w+{I5QJdf)|&1WNez~egEjp}(p^9Tm~Q|Z z*bK0@yk^5iK1_o|%ZS%Ql4nCpZR-APu&X;DtfPeeYAu+C#vw6Sd1^b!l7xi_U0&+| z3^t-04k09JsC9KdX60t*hfH!U4Hjc61hg1-n+pUo|Mhi7h_ z3Ur}l1|dJRBLIk?rWhPu&jPnMM)7@er;AVuIyXCv$HMGCyIqM_4|_19>H%;cT05o; zFGlg&(NSwaZS^!C)R&4h+2pk94{N|ennTp>_<+2`1#Lk2zRyqZyFx~)qhn=8;Ek73 z>p{}BjKu;|1m6o{WhXqOY#H?xO#L#4fBWoKrLL9QP(w0W$1mIj2kjXP9qyeNAAnD`h@6vg*R;*&6XMBcZ!_#dQ#P`otV_8XnbsX!B2zByAQ4BIBn4YoR5rGNL= zQ^c272IXfAQx-I_S5$#g13(#hW+Ds3dW6wmGLm2dkXiJ%UY#<7y3ttOMoA%+b`Iqj z>(qZ!^dCOhCR!2|R=88LwMAvq8$4(yK~;KBH&u-iJ(l%i`T}@h5`I;~L>ku^=w=;G z^@Yh4fTOh;`b0-GAZK94Z7=X@d6FvMw{joBb4u7982ERr{{D6zConXi!XeS5n6wkp+SP*c6}GT9ZK<dSMd}$=pUZ3iLVHYDv^bGa*4QTdqJ`m zLvUZC2viQXXaHk*Ue!j(Xm+iW8gLRBl1Gg_SQTdy6;dN~+h{LTM~8EVD<%MPIN%@V z<~9!oVT^Es`A1jgsB$o%twwzbdErDDayDbE@=~J$pCAaP*4dM#WInIxR%z4d-_Fvi8wG2 zs8t12l+TrpT$vzwnT>lXnEYp%_Bff2(tM?jD&xV87(1Y z9B0{#V+Bx9u}MiuDSROc$ zmN*%?Ss3@YY%j-fkrDzlfOcdUm0O7sMuTr8|Jgi3h;i!?i56)9eTgvDxrJ=`mwI`f zIkE#zAY?_@VEwXe_hu&oqh-j4A&{w%2zHyJ^pfzY5fy1C%&Ct~NdlM&lT*ot4iW62QL zp%ld?XD2FBfHL6;Br_(6#blvyI0v)Hkd0xBaIv26p`z~DqOkITl<|pS_D@0f17Mb7 z!zf;nBY6BGL>tPXFGzGAiib=z00hbu^>`3RiG`YpplWGgWCvwZc3kJ?PMalEesWM^ z`Z#=gKJ%7}dGu^+V}Tk-7O{r~eGw9VXl z2uKNvRl<~W&e?=!$Okt9OJkTe#(Ax{v8kkrt=a04dn%;dH`$KG)U+ObGrw3|4FY?OSKkTxFtyhMPR(htG=WQ1XNcwxI$ zHg?`?9pQ_P#tA)HBuVKiTHofiSo8zztH2A4yc1Twdf~hdytAxJIf(;aV;XT42#P{= zS{`gU9Qw0gTftqbxTZP;WU#_Ye7w=tvv=FA@=KKT`?dO8s@v2ihFimLC4jM8x8!N9 zgIcp~A-6WL#4Q}UXdDJfP{I3{xdu$cPdvcYd$bn}tJ)g^Bw%A)+{Pdg#0&MurdWp@ zfCeml#w=_ERkF35|LeqWysPFrzI41nn)_ESwV!R^cm3;aCh4{kNN=BO$e`T9N7tVO zygnJ*$nlG}{iCCp%gNo_u5Saze{8Arn#7@e%Vf}Ig)jp1i?{(hTM*2(seG|nEXE1B z8(W-bx7*5q{D#MT07zWCxNOMpSEw@Bwfu{EPU40&hE^>u8Yog zDJqV9v(sx!%tOzpyoz|7QJNJ@g?P2)na*|Fcq%N-2@M8jw#y7{z4b@4nhVZ0JE%4* zwe?)No8wkF|J=JC9Yj~9%&AdlBfY?HS+(UvyKeK$_8iA3t5L?Rv)WoLgE)3(6u}dF z(;xj@X;TJ0jl5aU!f)@l6)DGgkUnN4g1)v zyu)-W)?!L-hP$%Rif)lB&uT5eHk}$Y@YZqN*nQmAkZp*p@!3Zm%a2&86P*_WQbA|f z9+fPu9MZeijGBm2X3@5KL4pEHu-Hm$1as}xc8z=|J;fKyqoqv2{n;K=*3Z88Hi)hJq?Yma|+Y%t#)2*?BHz0b;EwJXr zc^$}y7#kC0dMjmry%`-M(%fFz+V72%du^`~4BovhIVTWcFo82IBz;Y1jRPS#O#p)%D*m_*@wHlQ?1cm9o7wwod3<@ zC*DqOOw6jh+A@9u*L~$G{oE`W#y}im)t5Z0n9W^nS}2#|A-YX; z|2ig(&EPh|Y;E5|UFIk!jLQ=uHgKmC zK9Zx&78hEa-W_<&yy#QY>HL`h%j;bGntFM$0Yc2`kOdk@5aK;a-K73aQfJUZ+0nCo zMQDDUqu$ooF(7xk>&c_Ziu1#pEaO3b=dm8GUrO)f-$1OpNS%pQfhwBwtOJQ{qh z+IF-5O1;2-M~0RIgU#IVomb%aemge=J8x=AvNPv{u01#05Jk8h^cZeqUo#?=oHM8_+B3}OVu&2 za{Bd)D8HwY4#dL+^Nd~sSm|_lJ?2l(%xs$~-v#GC8}b`%h+XgJ5HG+jP|bOJU<7`O zwdHiS?i|&D?>?`yZg0vH9lx33f+kMOC2o-(pRWm0YYBdeaB%e?yy9-d0#Ua1Y)|=V zPE^khEj3)PX;ndE|FJmhen(&eKNgwq-tNxs^w~|g+oI-2FX+D<0PPgXmTmU8M*=TV zYg(SRcQE`NhXVxiDQoHlwv*)r52764mRPd+j?3mtuFZ@de}tPlI+394Mw^U+Vtzy6^NPui~5zZhi?IE!gL_A@KFf9C`=Xy=4bqgIN3Nza^63@L@x_ zZ$*tw4JTDURtzOE(k$QnIr9&pK--uy54zW2+F-okNIOb90KQ^N2F1{m zPqd&NWIZV>S>-}vhaI|NVEOgjs4GmX0xRa=n3s~m(d!o@16ZO63`(XgQ#W-!49 z0ndBz#ffOx6;y z^i4SpJ91MuiSv*!4ruVSPEzlbQqS8^Bs77#&Jv-(%rKy_t=tZ!ve8HT9|drh8*6MR!Q-gvv$j*(rT?x7qP@*Q9%<-_h1@rO0U;)&;6AVUxhmb zms%FV1(juw?5)!}75M=P8r~>%WNKgi@!EX>gSFdL&qJ8s8h2&b;fHJfjTTLSTejY5 z#pAd!(USamWR2e=Aw$^y4UpxaxXsdA3TuVA(wk(S{~788?=mh3u5rM3;(JY5_iLi% zs|-&+1Gu(n+`3cE=@O#AdR3_t#`S8OLz1axokxx3?=?5f_}*9sFPlv}Sv?iiU}K%J z!j+j$c+WXl?+i7{I|SJJ3%9 zhVa7)4MIT!wAoA!__rJmYj?u|qnpOI!}Ix2E3CYX zkOL7+l_M_7NOSNy<0;BWK4w*{kYp2`8VhE+^|b_Ts*9tGdK1X0waP@fy9>i;2nz>B zOB014We-C+JYk88jTD?@5m%R(q)|>!j>9Ad_U1`a49<`>3>+zBPy{Pn!3sr)LD6_f z90(?21Z!NSE1jtpJ&L4mt0W+dY6+|_|AMk?r9i?V>`(_v{J{=~m_aEvWlS^zEsU3( zmCpiJ$rl|6FqWexXr{?YYkaG+F=$W1*kaF*-PK8Qz>wis1aQ$fwQE?nzCFPMyaC8 z9gXof9YrG!06J2j&H|uzFo8MCCqrbm(ub1J!#kY{&o{m=mTbcvP2ST*^E@F$Ld`u~(@YA4@)DB_Tr6O~~m3S>WD zC1YFVnnPSLfuLz6=^vONSGdyk|FBDK>RsWfs=CqAswsLENks6(YHsj&lZ9(!O^XXM z*Z~lX6{;P`@Hf-WHMWv{XiG0kNinsruK}Q;L7R`|k8|Bld?;vIR)21t+#s`E-xRKeCHG138w&?@CA}U1ut*F26D6kQHC%B8L+3E zM|ht6Xut(O9syx6if~C7$phM$CnJ z#aDJ9Ou-r6>j)9})^<&fOACj1I0$BXkgq_bN8QXJFvbm&xNT?yQvGaH%i+ipoVH+k zQfYYtU@Y}IS+ynXf!3i9(`fwUu|I9EVC`04kwk9_pp9w?%ygDkQ}=DQx4l4l+dNEF zAE|g(!(k(J$kFoj{|pCdgD)SK-c!P>Bux!~Q|onYfUI|Jca`pi^9|fs+u=SBI>;NI zGNGO-;fS(5OLjkK3#o>96K8(^voNvVg*) zS`ffJztb?O^Lo6N$N41i*7pYM(BK>8UB*0a>;&e(1XpwqTe5nqA5Grv->oP6CO$4- z2QkCB>*eVM|CdzoAkg1o2O82a*fgrY4L!hNIi9zpZ@Vw5?)APKdb(6|UAgcnJpaA> zgfDV_#^SFF)BDrZ^6trV6^4+k;Ok$Qblsx-mO8i47lo4{(*r%|i7s^13$pR0!4-Im zxVNyV7HK8hyB+n*JJ%>66?mkK;yz{}z3(GFv&n!#OSB5>wf92^uu!rAj5Yuef%T&a zi*mh~Iv$!UvfXk(2n0PpA*`JPIq*xT5yKA@JifWJq~4G{5tO+XJi+c-!IKM+2h=*c z$%OCWC(`Si10ueSa3V2)f%xGS6I7AR*q%E}0BD;&?Ykzc&^(KfxQjwU545?!^Ax0l z!UPJ9{}7-T+IhVz91w=!3pwz?Dv-O3;yupTK&om%Dd4=DS~?2sIS#17HblA-NG|dV z!t$aW^ouq<6vFFMK*jOH=<64Gvy}r(Lqv3-G~mDcsUr9*Kkje=Es%=0dpS(Z#Ef&r zeygoXd>gHjDFRtTPh`UjyrcITE^K-NQ@o^HAOaN9*inp?gTBk*N~IJ6?%4l+Cn3C+msTTiC@#`v4K&x(vEGJzzR0VO4p(9j>n zluFGgp^q^r;4H~SS9ezE6H;_MitsctN7JJ0bTYhpv46}_4PC)8eay$}kNaU$ zORZEl9fMpo0}?C?U9*uaDT@y1gYjBXz8lreiX8RSD2ANH4!geCK?6LvRb9o^IB?Ss zEivSYB>F77wwp@{TUO%yHVu1B&>+iegHJ5nlKU|OC!khqwO02SMQL&zK+-iuv^eiL z!n%~8^tro8Ike#8K)XzxM=hau#nfw!*M(hJAozefBE<=KM1-qY|8tBDB~sUMm5Vwv zK&$D$_OMbObxpWr*oHM(Fz8K%djREXjXf34IrO6Eq|g9dzXmjy7}x;;Fbvf@*1ANy z=fDs$P}q}2S!`{9`{4oh0*fBl0H1`fJG`(OsH*JSSl9zi3iZ;}I|2YiNQP4#pN*n~ zh1V-!g0XGbhxNuDF&QP39Kmo&L*b>`J zNeWB<$&r^8S#)W}Nx(~w)e*HM63#U*ObngDl7TZA+Rz=`|6F~nAz*^QMO*q*la_q| z|6vazX5-WamA4rQX}g(%QGo<|el!Tp57tpO$gf`qk7{9K_A>b-_FB6E!t6krXf0YWcvmEz0WdgR|1#jvI%1ogvn7_@f)+>uRLoPX zwPG)lMUDMK47M2@ydNJ$$p$9Uiy#u;C1b)>V~}hTCKiIGdPb+k%8B4l80KIcogugs-uAAv(iP89)Ld241Tii+wxJ3hPjBJ;sB?C^)9e%hSQ; z%;Fu?fGD8O>`dl#Y~v~1<3aH-pZv%%2wZr+)S{RSq!5_-`)judaZ>tu|Nj;E{N@(>zG|wPI>2=u`=0Dwz}Dhym<%-Ra>* zrCl3T=8g|ou_Mp{vr}jHjMb$;&5Wizp0>i-{Ue_S3dJkfz?7WRRr*Y7q5^kFie@yXuqR zL0-e=NOavt^5>6^8nPHPLm`pAMgq>P>-YG`bPnuLDTB!HPG+6e?yza#B+MDM>o5lB z7B1`fx@($k31sGM_RRn~4gpSMjw2{B{}&5KBy^(*aBRnxknGJt*V(;85dlrbK-s3I z9-uP+iDA2~ppOjMtXthfvuw~-87%7L42U+Ti`o}ZXuHW+Fdov##t*WfZb7z2|NQKx zXeS&9YHfYL9_$R`s?OB()P4*B)OOx}tpNgWIG+Y*0g9>PmbO=EXB{xlbc~D_07*Iy z?Dk25T1~G$eJ8SX5KygZl17Qu-pkrD5X)J*e|eP&MoY7R!!uC4l&-w>z_RoPia{mK z&0P=PH23GDbxoKy_XDkr#m2&mD zpy^oma&SYsU$(Z`No?aD>+7Nr zlVz5usF2G5PwiGmc19KR|B^Iiiz>$J4Fas>?9|A^mW-n|b_rvYozWy!hllL?HRn4& z_?y`DNbfMNNgG`s(1b_Ivg{zp!yo46AF+@gKH^=f9dXm~jWUZ>N;` zM186%91$+IPy2~AoG=U(X3>Dp%X7!`W#>RKknd6UQ;UveBTos6xS}XpT_RYDhyKs! zrdvTLSLwCkw|B)s;9U=ZT$7i3@GkMPkKu?V0kwnzIP}G?KSO7gbU_DhtNIEfoqIox z>ZR=XdS5SMcVYYN?N?r0YX5V{Kf}K_Sja=mOu+$d)7ibRT+QIt*_ij1i#TG0=rlz$6V zA$R~{7J=|g{dnT$e~!lXZFokEc2F@@HsW@2w{n#X(^+|e5_+hRsq`Z^@jzN%;s(m{ zh>A=Z&-0J_F9wJY7X%Q@5W+va1r8Y=6yb7$NRl#F(5xAHpuN-@~D&(+O={^oCc`}M4IY_K+%i{CN$ax#?9a^yR=*v<6rnt&i zN{E*Sk}}3p8!j7xV3+dl?R&T0p$I`swH$Hl=cLSY+$DYjGx!m#c$6}=}fAo0~8>p0+>_0hqeUUdHNdL75phW%s zXC8dN-B*=q_C07BeHR)p_6TxMPnQ z2Jt}-|3vB)rHe4uRVJC}{peqn9$pEVcuewmU=Lv`Aw^O|u%KZVYB2WJl1-ktC7B_r ziC%yr$ob}Ui_+B|3i}mC1ei!^bfAM8yTe&S zY;eI1APDO#p%m69!LXv`N6@(!db^@;Ixf57R^k5kYc*(Xksp}~sHjmw74kz)YB{pJ?>^u#%%{R!nWCzh$X%uf zi>y?ZQO{}P$&;jLG{T~iiuKYxvu7&OQ_scnO)*PpHP;T6&1`yEH>*{1o~Dgm&UTlp zha^fGDJ+A}!cY$%6&FqL`ljcFo%l>>?(&OHT_Tpt`$g>7pKaNw% z36!pE(owYCb*nF@#yP=^H(qw=wacEk~kNB|At04HlTZrex$iI0T`{X81;?RE>Xab0Zd81jrXCE|9|8 zqYIOGGAPc(1A6cw9mhy0_D!gRaq$7JaG(SRI#QGK1E49d;{r;yO9(!j(kem6hX0{G zY+;YI&c;T07`B}}yBt+oY)U{-V@ z*xTSYW%5CkT8};WL?mgBU;}oN6Ffe+RXQWOyM;zHpO*V#;syrI8enUsENw^+WC{bF zLhh)T#0^lLTFZZO@t|0`7EfE+nv75?hfKYS8m&3SDh{rs>>A((pXOEGbpL<`VcOL^ zaij*Bis1;)ydYJ72vII-^s6k1szH4!hc@sa2RMBbM~xCBv%0N-pcV8`u-n zl&u_s>$0MG#uQ9+eI6A_E9SGA#D)L{B4{E99vV%f#1)yu`k#~(`6<(Jr4TB7)$Z_G+`%|P(t~%&mlCl2meB(=L9&(kOL2+ z6r^~u9gblPO>{4;4KUfQVl2(qR@MZpblcXd`o1-yewK!kc9XD}-T(EF{1c>X`9D z4*ZJW*nkO1$-xxF%iFsw;RknB*_Q=#ku{8$r=A3hLqXYPu{xxoHL!t%`^TswIvE=b zFt3zV;tF6CLoQ~pgB3Qw1Urx+#rg`0wHojOCNv?_5qUL4d+^lp$;Lvf%nE*W=2>~g zDg_G7?_5Hu5fqy=Z_;?idOd9iE0224mMH@hJ~4$W&^iWJ`2U0zdH@7Fe1Zu>m;$Pq z@BtZQ`wBjo0uXXw2U{D=sLIOlwmkOP9*7|ZT)3#CKuHlF6Bu4c90s(tGVKN%pxOms z8@7{Rhab?I2~JQ0t-&w_jE|uSae%`oiqHgg7s1_!2>D1mtEeh)W+%&$!^@9Mr4vwb zjVS<=L+?3Yi3z;I1z*v%bl!j%4heC2;8Bh>mWIvuhBX{|k7_8gSq!n!x8l4sjtRE8426o1VF)v*y1A{;@mgO&787eUd+UpF%-iq{GKs9L#dGz1~r9j5CNr( zT&AhPy_^O_Nmw+k2NWOyiP_bJjnWI0#po5m3_L`?si3yx#|Grw(>(?UAq4(GN!+Db zNpOk{B>@Uz z+F<1&Ba9*`mZB-1;wc6o80O9R7#%7SL_h!lA^8La2LOQpEC2ui0IvWr0RRa900Rje zNU)&6g9r=4als;?gaHC~5ZRF7LBfj|Giuz(F`*wqQ~-QQ*sG(-jRqJvOev#fN(3ik z%ADEpfK4a|U$mgfQy>QbHghIOFwn+XvBbJFU-G$4QsZW_6!`mY9OP0D4`>W$yhenpt^bU96?kF;swA3hGT;kO)B6R z;)DR+L|V6oO_X341bchv>IFy3LB&-Hi>N5P`bI5G4g9QfoNpsStP3vx7br(MS&b>I zSHEyKg25dFb%7(;<3%T|8=U?ut-k+7HDmFGUQCf;^wU9)L8s9T4AyX&e_Ih}l>)m3 zqJ<#!=`s~$5b4)~Vha6s*acBQ2o`q586?OfUl8($F83w1P=^Qw090EAmB3MIvze$B zNL3;9T~;7~h|vHfKtRxR0;p7zk6NMVQCtE&A|6~2G<9TNfkbwKWVk_T*c>4h6d*w_ z3M9sVZXIQ&O(}{A7Hqf$Dd&G5x_M`W=S`ShMj8^-2M6kTKZn*X`lacmV3qLcBaL+bQi%x0jfSM2h2;rF zC9G;?fDDhw5dw3r&ZOn3tx^_VuP3@nh#D`3of&QMMJ3PX5-q0& z7O7=SE9{{H0S;)3>6Vc7mYo4O8HVdgD^S(0yE{&B5ptqg)tYal>SkHJ{Gzr}1Z;p= zU2me&1mFRUB&_hl4Hr5sx;!=jt;K9T;X=kBhgmXPjh(FW$}Deoz@fgze59Ez{|jfL zFOZW0a_T{ zkX}YUB>A6Q#ZlN})>c>Qr;HrY@H3nE9?15Q7*s$mO(r1!bi)!s=zzor=Pr4Y7&+KT z^xbEftW=~3!EDeE0h^XYPK*blxKM88U{vH@f2R44F^J)I=1_X>p5HV5fO@KzK1N`~ zLLLpIzbMIMlUkfRH5CNj((yWK$RXEnwI&)p{KAywJ0gJUCD7vXtm~V1g}mwEp8%Fn z|D2jN;AOB7Y*6rodb`fyz0F(azWw@o!7u;(@Wwn%Ea5Dwd8iWvnXsaT3R2-i(KDZAB51$cpvQuW!Wsa1cD2k&NGujiVBxq@ zfd-z1B27CQ?HodbrFE-<_Uf1Z*kv~tLP!OTdV-Vx7&3t>_6IL+JEQZ=S&0BHi0 z4U%#}2lcH_Z7raZ=2p0sp@_~vE%Z~KG$p~voh*SzGQkg4qp!EXfmUxRA;@%cCje|f z3djpfN(dvogxzQ*N)S%v^vHq_9WY_H>p+c0=EJ)^KwOAyk^>}Hkf_~oD{I&rez>GN zWzl4UCfNeF5W>cbaK||(iG=$BgvJ;!$dAB6`y) zYstkYm5OJ#6k$vnu_&xap(703q;517g#o5YS_c7-F>9m|QDSc@H{e%ayg*LNJn>&b zD$!)zr@y+TYnS;c z>60LWfaJ~|*Gh%r?RpLc7-;|?hn#8BR~xjb6Z2_KDQadfBDG6HSL!ARP$V=%1qe<_dRZ2K`qP%avSuCS z0KtSsB1M{n17qxrm*6-%X=SIYX62cUZgm3oycB~Pc@48VU_ccvu#x48Ou>9|)RR23 zOI{)(X$oo9Hg55(loZNAY3c|lzJvp>dCk~_@|dv-rAc}9fYpH7o6dH&Jpz;BP_m>< z*kz=TS&3mn9MK)28EUjv#LhLzYO}rn=BTnt4D85u8=83ewgZWE92gZ_v{fQ>W6%`n z*Z6=WjGh&-gN$5s>%>XVjuizAy1@>9``3^y^*Mv>pi)LV%`K9EA>Wk>cd1*ayLcc6 zW^h6nnn2$%kO2uX!0C852UxG_OSP^HWffR(xq;vIMkvUHDIDPfp@f5?xM^ml88(-D5nY)*^;2Akro zu`wAh`4O(UqfJ7pn?2#g+#wAta9C)$!dXV{DL)(9^8}C(hm%A&2?icPA^f|z6~m(>nuys1C5f7kpDXF#fP?WH3ZiC@zZ7>p>YkS~< zeW~F@^{ZZQoy?)!z~a9DMgh1DTYZ>8=znP-UzC$UZ2B5`)vfN9wetqR{W52|{@zo4>7eev7Kjs!;?u9` z6)Ba$=1G%Mygw*ug-MUIPKz*1LebuC8famO0EhH5_=$i)X>hMB!45frEX0 zVRipB_14ldVMm0N9$;S3e+n|T;Q2qXAZZ6mD1#A-V1yY2!S{pJw3dIlXE2fo?d9dV zsnSwJG6%kzd0Hv||#VNa6~PL}K9mK0vhCqTig^|{;9d0KCtck6Jt zzXE}8eA5Fply7{+egVZUdQ(vehJX!Ndbk56LMJa+V|xA78($?hFgJb=WPf4wX~AVv zTNHYdhaj85Sy%N!+;kS<6bL1tbc+OJ)J1#&L^xrTg4lOh3z$(IxP1m;OE1@1hjv*_ zvk+jEXvdT-)I?Gw+Q35@HVWKramUvQT;Vz;#gJ5w3 zM}Pz~c!?1wgGusJ3G;tBB7@{cM7gwsvB)VtB|{{Kb3n0+rTBU=hhE0fg0$5#rS&}V z7b0ub0u!@?q=;fV=4O8=5YHDaT-HVC_I-XOSTiSaBlA(3b4SPncpY|G<7a>o*8!(E zBK#LQ8)J@1ba`&IGeD(|fp7$nGf~!pfh^>JBc)TI!G{NEd>uq|Hp47ULXZZ@JPWmq zKy-~e78o+XPKYvEF#rRa_!kajf#~9i+Cqy*1BCcu6|F!D;xqxzctx$C2rFp{G`W(c zkTCB5$T(Z4k^`X%RG|u{z=@4mh*gIOhF~T)fCRMxeX?K*R1phJ8I^>U2t!Gf-gT4{ zf{^~Tk}4^cJ7$$E1Q@VTZ*t+4+D8j4DI28(mS8aew+9Qcpa=m-fHPT>vG9|$P!KeL z05@=~IS`%`I69ySmFWh!S(t|Tl^*wXVJL?& zg+0s2PSkjqwz+z;ftV=+d8uS43iv?Q^F{J!dld1QF}VoFNkmfFlz7N#IG7N;^^*4g zQWn{`Vpt39m@ zo~N0eG76Lh0R#l$lr{3EczQ9!#4LQeGks|gbubV}Pzv!m8h$Ba2vL)Bn3-K!5P2XF ze;^R9P?HCW8{0{x3zs#Yx)Fd7t7n0!kh&7JM)ERDetunDRG7tptHLXoruJ$$!fB*@U z(3Me%5i~ikOv8_FfTs^9UAcx*8}Xqww22dN1U}I>IH#VbdXq~UsevG@2C=g!!LI5B zgA~fP8o>q2X+t`oN305(+u689(UY~>t52G<_$nh$%b)O+5w0kkR?&hazyrvq1rLiV z&>EWtA*`6GQb=ojC5JzkCAhdDp5sLdu12)MnzCYhn_4566cjXvG`OzohpK8dtwOtC zOPFM;3b=r@%9@;dI}kmP6(Q$##8)a436WBvrhodpX?mEiu!7wG85Sr4rb*iu8&Z|% zBCgt+yg5P>%4&-gG%igTxFuM(fTgYL1gX7xdL#*&zcan-6AOz#njUhd+H01>>lPMN zNAd|8k-4T143+=lxb2%-b)_?@`JLM|0v8&Y7m>0~T6q-AL>2VA861mgx|;>8zG17s zF3P>qTOD57iPA!q4d{SZOa0KCQ^6*ycMNmvDxP|Un+ruM920E zW^5O;I8p|m^Fw9~Km)0ECR^@A0R9d;gMTlBD$_Xz`g7=9U`(m6l` zH1LKKiaDgm7c^i4rCc}0?2YF1Y$6Ds%Bqe5Izk+ z7kg-~#^J+3yk9jC5h!}hOq4`fyrK{w5l65DgWYR1#%fuD*a_Ffw)lRSk)GB%GK0Wx zC7@kWw%MFLVL$hXS8Xchma2K$01|O(co1+jrg&85H3=YW7VA|JF< z5Zoc~-f#J($W&C?A`w>V)EL&@yjY7`y=pdbiMK;+$~#~2pfBS(N!a|A?iNC@tl8pO{CHM*l106gv5V6f$#zydaK z1z;WrFhB%0dqKXX6B7UuKyAV{UV}9MP}GEaHD*nL$^AE3UT03g1UTRXL+}ZRM+VQm z1MK`+W0L}a9h&rqn&&%PLKqo8fC7>J+E(xhOwa>G9?_&mfi9#%7i-%j_*>SE1CgHH z4^{+wj?yBo2g8>t<@px}(kO(H(@}EF=A9dd=#7rV zt_ME=>Dj$%MIc|A{Gf1^X?`roK zAL?{}^tf?{Mej&sj-0B`)c0*#8X8Gy8oX(w=n6u_D}kx#*h!%ThH}G*Q^k?rEx|N` z_Xg*fhJG_O6>G8*Js<)HfH>0KPu%Kd&h*Y~ai49F6mV_%n{q*LO|=b{eOzuNxCl*kNz* zu*~BRGcX{IG>xC?pWt%bLo5^UMH%$0&k<2)1cT9jN=yEVUWhdf|7EfCu!|80?c})L zB|+WxJt5LBzo~+@?YNFOB+eEh5ZAe!sHQ~z^n&Z1djvVK<{aJ2e#WILhwHb<)eFZ3 zam_d|4hJ$TjO$?#8JRiJo!<&C9n(0BHS70h0KJE9*h?GdBQv7@@no&{(TsX0OSQCi zI5I?F{}2L4{c07hTwA@uA=lWEtY|t(AJaz?qI|9Uuh*b&J69>d{lgow)(W)*q62m9 zE@?kS6a4x2Q-?ACp^VWVJB+^O1@X`l_($+RKfNE4x);1)8PshLArgxtn`V{$x-fe5 zWPbMY@MHJ0#dL!d^h7B{GlXkE5C6-9MY3Q_CT(C&he zMcMm%_i-~($~6$zj5=2@Z;XUAdYEPqA^Troh>D+8*1JR0c{2vbMA^3Gdu!(_rcIDueO3j_bIN>-P-* zxSlJtj_Y^-@|Hb=>(VU#Yuwkk9x~UWsJ8|G3=DZe(2Hj1PNaB$Q^$}hqjJCuQsU22 zyE7xY10{03`OpI)LL@Tv=Ygu(j8VvRS_=P-I!-Dp_N3+L>gV$<2_f~&QhQN<9+)7c z(GgTdEgGMG0jB6}LW-nFiXI4Ebx0&ChDrTuFc&lgGrrMc0%|h?RbfePTkNrp!q685HY#Gl^T@cLxlyyiI4>}lfa}c11>_FOw1mO+9APjqZ371gMtgp0; z*Z#QLT-1X$)d382Z`bwt+5Nh^^#h!+A4LBWFlNnD%_ze&bTS3-0IYBf`eF^o@Cs53 zo@b)at{en8$kzZl`T5&qGejCxpYX%w5Im4Lpx3~%29T3aZjomoO6ynko)a^V0wzGz z`}My;mAhf@JUC;|NCR{WywOf3WNGhpyb}bp-$|M9`#piuw7;yr6qeuAr}sA&(p6a& zptK+5k~*3*0cnSexQL7Bks7(s8?6yx;1~^h5g`g{8PNk2Q3Dm^QW>je2@m@T28e`| zD;B5N_7@QhBv_5eED%>95KFKFSFrZO2$1>v>1x}5)}Il{*Vmgd3<5z6pC$$8^BzGz zgJ@%RLj7NtPc1W`v}zj?Awk+uWFV!x8Nk3i3$5t)NAv@M2KBZPbn78Xse$?d6dXm` z*#AOwYaOgmzLNwrc1QsKH4syMXPBiCLvZ^BQU%Xm8GDel3o{_Td=LQv03rDV1qT3E z04x9i006H5FaZDv{{SJdn9yfS7eRao$w8QcgasQpa-69`k7G(BuhkM*_wzWY{5CFvDBiFzc6-8xw7TUm@{XFBEYIyIVgxE5vlNIAGW2tkoEjz zutvTSZ43z@fi;IH4-UJK0wTnQzpGV-pmD@E-o%IrG1WYkx%21H9mA|CLP_BpHi-Og zc*24U6$paM|NQ8B@5~P(ZrsQ)p5_Mj$F24bSr<9kAwxpf7f)7l^#1?`n3;L)Nn`^I zM_^Uf2khNd-h;vQ@Lhh>xyKq!^PK>k0^&8a-gX@Fmx6x+mT01L2DKN!R&ME#fecu9 zPy%P)IRu}G_EAw7ad0K(po-|tcVUDPeVC(4P>^`yl1$k){Upco3N=%8LYz()y0_;6%@%gw1NiWY9bg&Gcg5W{RLyr)5_W;Jq_o8c9j zK@wn+|L5a=jrPW9ms{c$5eg)+x>}~227B3+=V`P9L@sfl2OB~(n?Wv}=t77ALd`MO znOv$=sTd}Zx|)m^rupcbfmW#|xxfmmuC?uf*u@Pfq>w?7C*0Nv6ddTH1rd*6^oS)i z)|T6)k&@d2sMv~IsE)hAh%LETtSd2P(`Cd*YYT8DKnL``@P$xkRIAGdT8w<}Yv(R} zlDX6=?5cVd;&{}=5_?txe|@cy!XrG0pv%vX2ohFD`~r;fr3e=s9-xb^G19nep5|+C zNlr%drY{sbHOCBo3^35&jB^Fh(Mo$X!D=$y^3y6q^p)Y{i}7jNVNjKr2)@@c2D;SRCnF zSBA^V$g+K?A{LUZP=AYoRvw%UF#_pYz9en7i`SdbL+f${J6HHE4%u29Wzq!`rtZ9~ zt#Syi>yBc4y9*!gFxSFL>dvGbh7f`<1z;_WuaAAqSeC?CxQAA@p18)AKZW_H@V4ha!(B76Az~XgdmRtTA)GM z8bP|;fDt8Ew3`);W4G4zE;za4Vs!2}L!E()Z$Rrx&|)C8@%-ppS`;6>I2OMiLe6gC z0ihoMVTN0sUgYj}@dM)*dVb#aoz%F7LLgvkcb zAuL4TgD!>u6n>daYr)wK4NGW&9P)-t^}-w1hG{)Gbq|)%;RO~Ec|{i#5|>4(lU_iC zNGT%ib=*W!_((WSBtcU^kdz)ci}k~wu#0uwbR;od=0WDoGDm9BLgmgG|D6;~EtnKM z9Umy71%iSPo^QfiIpNqB=v@ym0_#;unAV7A@)J6B`zN^+rUpM1^rKm`4eRQa&H&Jp zKe>7mL?1wfnZ5F&l*uS0*C{K5ezZH4RFgvQ_suxE>W;P3h$Lb99GTLlmBQKS!EAcd zi1Gz$%XH|Ga%RDw778eNBr0Z%dQZ)T0EcSCnW$!asapKRa`~2)4HAH5rgg;h(t2Ck zQu6~&v?^%_Alm?KZ*^?#!43pUo-9E&f{#q-Sxf2Dl3Mn##ht4qA)o{#m;eX*!>e8k z>Lbk>fTXd55KVm>*z0CByD<%|1L1Jc23cUd4TNKR&->M?W=meiBqh>@8=Sbp_cHQL zDGV%t0v#y9BW0}%etC)!^G;WuY(3nCvlXfR4)ws6!B7QL8ae%m0ZMRC)JshJRs^J0 z!0D}uZ3p4a|7xi-xd3rAvB<6U9KpWkVd_{~jJOoUKs`PfLO6>QuQ7c9W)x)6bW%K% zGuWw8OlNc+qrVA5veW9ot1($bu!*nn(3!6`?^Ss-^-Ca`^)A zo?r+`2&>GEpR(wEBiqp}X}aHbUA_&Gwz<=QP89K7Jf0O1Hm=yb7( zZ2}aaC)qtL!VHpds2etT2IY39fe$Rx6fu(oJ%~sR=-gPr;96M%0W$`X0AybST-`d* zUZrF3ZhQft24gCMZ%Q3bK=;bI*8Z#(Fr1?tB*6q!|6D6mRmt3pl|jiH_PC!BH5wT# zp$2d$0liC5=s(w{=SG%LpV#_USjX}+A4xfNWDpwF;`ZAVf$jr^iq3D$Qao0cves(iAw30ICtE zRQVnNxQG1kh?k095JLC(d`Rg6F(?ZZv7toz6{TmxEZ~KEUZPjc=oC{l=Ij%3^hy*0 zDcI{*>vkgnZ$P!gY?@Lz?^FrzJMR8%d<*Uj5hpe^V1~^6tdV0y0%QL8H%UBE^&-=* zp2-Irgiq@)@F#+j6SW)W@S|0hE%@Y^%ka%-|BSJ4veF79<)08XjgDUiwDf5SVOvs0p z!GXQR!IknP62!d02TPyi&gbQ+_+Mo_>atiHbHP(G%!8Sm{-e4 zULj~*f@LeGCma}vd7F5VDgrE4|A-ggD24)gCK{Q31X)5dpakG`RLHfG1yzt7wCfFn2W*~jJEd_ zfQS+ti5uh*mG4xSb7hw2@m)v&0|1t2NEw$fR#LCW8_-yeW!MxJ0*qN1c|RE`a|x0- zc{FzUk-1l8hsG;P=YL4KJcF4|U6__MIU?DJmu@KmjLDXf)Q^%0muFI$jTvJN)>|aN zNGYh2E15;N>5^On0{^yO#`h61NET6H9ahZ_-X___}Js!Ck31>S*umtBv0}|Jc z12tX{I4_OnRkSIZv`Ctv|B!^3(wu?ljrvGJkvU?pshV1n1o);OxQoj|m?; zxgUtCfKa-ezky-J7n~Aged{NEYgGVxH%FRUCHCd1bqJggYAT`Hg9W7=Du$kxsc5Gf zkfU0M`T3A5BL^ULs}8X-Di>9^+MBNvU}=I}mM9+A8buLyF4$H%Icbmn<8K*ytQm8z z36?gG>RJ(n2zF{h*_uqc+Nro&uQ17-@pz4O#hoZwt6NwTGl;JJsjjPLu)Vt!Q;H8iqRBN=EOIull-3kS7qsghk-mu~#^(WZ0q~NkWrxr>&@$mo;`2c`=(O z0H;+FhCoif|MIOCo2!h3v)G!m^|Lzc*aG&%tH1%QMoY9RHmv@cQ#etwj2g6U5VbaA zO1^V~z=x-`Cq5awNIq+=Jey1#8?sWwut>#95__LW$3FfzEn`bc4$`*oYG!(s1>d%? zg(*s+)d9+8NENH87rV89+p~TPk2XWLM$0N^E4DS*qnrw&jY>aMn|aWx78>!NS80y~ zN_>QSnZdWUUAwJ;3$~xTI)K%3(CD?>C9Qpxw`^duQY3!RnzfzLv_0jsdCIv%>$!t~ zIwN>;Z^0nNC%8IWy3kW*B5R)*>!YsswD6Rvt!lakz>w`ngXf|w;MBKa`+g)Rw8eyO zWB>+D{}2Xo5C>$i1WATE-+`~ftFJ7xvP6rs)5yF~OB-r6i&wFXB!H1As#9QFdDxr1 z+iPS-0KVf}zy++MVivaQ`@da_f?w*sS(vz1N`#$*zxw;B7U+47I%A_tLNV~YV?e+n zEW$=W1oFYb7dyP6tHAWMtHc|@eHFLs*O@H|f6b~`%`>+22!#+I1V{mh6rMo)3 zOnAz`DNMRg%dfptvGDYUHJmM|vya;ATbtItE+7L%5WWWd!(N}!X2Ev zZHp$Y<*Z{#xsf#hmDqjRYPVHN$G58y;96BC(8XTN#Xl?&G7MB-Tf_^zzJJ?rPIGw= z|6;*)0wQtjRx(V1xqGj7b6YH<#eEFKK#T-Av%5klNAsewEKJ4?b+3`gS!jfX^Har; z8@DBOVI^P#nmo%R35)Y48&Ph zCa3I*ftzr?{Jxqv$b@XW2B|aCDt-&1r8kVsGz&&E(9GscXO-Fpwz*I#?8`qp$%}i! zqFcme9Efu(S?cA=TsRmd0DCln2Fz^E1iXVz3`tlkQWOi!hdi<4g2XwTCQyvewTi8u z%ElJ01{f!>!W>=8Z=<}N`h|A` znoAtH0qly4bYuWvDc0Li2E|RT>#;=G)N0+z(h0&-O~7U#E1SyD$eVMm^uV5pmR-Fz zq3oL_$UJlWdlDUoiY(4V_tcqo)6JaIJ?(Z`9j~0V(;%VOdrhwj=Nl2huvaV+`8#@V zl);95*q=!RKoHQhyaWqN(-T>ij|{5DJGG6SBPcCxw{->_)NLM-GZ^{O_cYer9NLYO zN~FibQw;>m#nVAu$xWPcN87g}E!2!^lI=#erM$d{q_Y)m!+I$O#4Xjc|4asV$J*|g zbhEeC4rRzYt9$wB8!^x#7&p(p8IyS&k#scQGA)8Lkif~5dr=Jr-Oa~EpqX_&-q3ua z2rb{$P0yN2-kR6X1^^>OKq?md*$^0ic6HYGeQ`OkLJ5sbN#NE#d~VGc-NW~eh~3mX z-J3Pm%L?tf-2r7^E3iI#9s_tdDylz~l8E$yxW@>eWiV&%CcES8*cVjZ>P6)G?A5v2 zpe!VD!V78iyT&B#f}W8cvCISccF-gB+Hh;l$!y;8Yf?$BxvCAk0heTVdr}BP(OT-O zH^w6^fkP8Izml!mw4^gazK35J&S^=9F)ViLo5pFapQ{U&tQ6k||4!$V7TX&Ygo(4- zuYq%Oj-QVTX69=Y(Rg}9aE@Cidn|k8;*ILTu_wJw zp!W-791IwE~>tM>&ysZmVs~rQoj-@uX04g9CU|rdhW#<$cRbGYT z-u}oAo7}z1bbn3ibPeembY~?_0LtY7B-jH>Eh1x$;j8Ye3^E%4mb2kP@BA$77Zl+e z)FbAu=aBxZZxQZ@Q7I)^?y)ytzRBqxB<6(;LA%n|Q(W=?|2mUi$U*@hKlL--XJ-K% zQubp%ca96E%NQo@L?C;ie5#C{`0E=eI8wJRu3d?NA#2^ z?y#gQ2^!#k|`cv?sy!GEQYR^n^RWT|KUsy+yp!*F$^*tv%wj z;0BouFU@Z4#T51okL@JA1A*>)yX+<~f3`;X@l(g>FW_b{!&g!(wb;S#kbmcr&y+?^ zKX?WsiCp%x57QHk)I<*31T&lAWwvf03)k-kg`n<9|EBT}uldQ|)Cea5fNrs`c=nop z{F1mJLJ}hm~!Kg9X3!zY*SN_z*eMk*2H0hh9WmL zM{FdjV8KzON!Jv#K+|Yas7gDY5E&urfe#{79yG|5Vo|UtFH|idawX2NE{PsoXi|lP z3?7@d8DbLNc!xNq946|!bUoS4DdsV5T?gmA)gSGyG(k{zoC zBg@7g8@pg@!L5q7XvNm;(0E6V9CUa76}%Jn{|^^Kb%%y(khf#5s-rTVidl$N3dxl( zU(x*O+Pe^cOXWNgb>-ZvS!;HvBuI=KZ-UAq--`Cmz_n=k0J?knQQuA-_l}JGF?Be_ zrw-)Kjz?K46G7l*g*yv?m#c2^TspJ2Mi@F&%(n3tPeoQN=xve z;PmqfLFZCLQ96}E0+Bk?2rMv0(MH@r#Eg6pL#Dzu9Hos4%j@8V8;IcWNbL|%@`B(} zP;0*8k_@rL{g$*+MJ!vCjlbufpsceQPjk`6Zcz=a%k{2V{mbI9Nn;UqgCf@}#K#VB znb4G6&3)A6==j4IUSV@6rM5Sn#pT(JH_h`@Y*`DKaS@@=SVEAM23{HVHsLO+H1M%ph!LX;D5)yap_PhpLZaNC}hBxjUAkvAhV}KL%3qs@xE6u zN!PdheK&Z|Uh~c6FTr!_og%HZ_b?)H2eHK|D>R7F@Q4QzslBdGucO(+67j%FL6B>- zrr5+bliQyo0u`LGtO2M#N4ZgSuR4}-o* z=?Q4m%iz}l_MRIwCHvu=|6IWr*|g;}Mb$uFDoqG%_~j(i7!mAkql2zE;xk6im1&PP3^~CiDrYBHgMZ6L=QlFfMH-eSsYM zutYHZa+$VcsY8r;z<&mGpj#zFRjsO1GB_)!UfmfC%Xmf|Dw9e1E2|a^O9fLxM4^6a zYh&-1P`U&b|0VhZ>jS$Q)LQt!uGz?EEZMV5E6z+O4g}>6gBgIrIzqKoK&eu>G{ram z&;T$gt(K(6DsBa<7Q4kP46T6Cjb5XpOu%JDa9HSS;VZ{d)p)0jEl@C#W0d6Aim2?E_t9E2*fM+rMX0uffsg&~Ncj&yU;mos_afA$4m>+ErP zR56?7wK*p)auAQB+$x2DfC^`YKy+(+!E%})2}igk4(Jx1kNO}cYd9j028$^r2p~>; zB%ih9JlZ(N7hxHeX(LOJgdYS!$dV1QlCg8xra(8uwj*k$TF_`2h#*cf5pxW1@B%HdfEDI}H~@hBvUbl+)^L}O`b!<<;KgSctObhY zBt<(_tbl@4r;81{_?jZaZw_OPZLNdFQidwG4eQt{U4Gn|`7dOr0sVA@MVr2Hw zN5gX{e%R028hd|3zEr-v6;EqtJ9(&%HF~e}+@ci<=334)ap4Z%s!hS>a? zF6T(AWNWVYn?L%H65n})&@mpw3$4`~iq^;hEQ^8ULzm?<3oQt^frGB{gBdVtKN}0H z%A&r0d!}^4zLyXWaf2oeT)i`Rys~-@;qVa23jr>$8laoO2mlwj3bBxx!Ab)h4RgW$ zOSc=z!MUp=*Tc2eA|0liJu0w(E5r?aTchb~tN^jUrMR;rgPxN3swkww|GDE6uqYenW4M8yOEaeF6o9JEg~o-V6r*bCwu<^YaOlYTHp7+&vW0z_qlNs z4*+>2N^T1ktWdjkBcr~&38-|+=^te!?Ex(j0B#0ZgP$mj>b$a>`?BAi72%(L^}kEiH?k7`7TCA%hq}bN{v()guKG zP4xg2$cmoa8ZI`-{WY!BCL!k2Buo37GeC&aLjxo!&_#uW4VL15pdKR^8zc>556e@Y zXzXKElV}nvT#`@?-AAyNFlQU4zUr2o;**m$&lwgNGDQrRzg3y|t;Ql$pfSYneM`=A zIq<^+cF;0nVdJ}CL+jb5} zWP(3$@l!J~&~OE-)wC*Cq^Y-qdb_2%aRjh?-7E3HJBNVlbWqA;HSw!8h$rZIIo@n9# z<~Lcjgd;WGt!-T<-WDjV2|nf8!Ta&4)# znq{3G7ew*IX>{4A^0O}T6C*m^VcH+L%TYh2zYl8vJJB};7DM9|n4O%nRZjN2JE54=@`h7CSCwWtR4Xlc)M!L1ir zrS(Y2beZ;0y_fi82Iyr{Ekem^xDgJbm4~c5jr=Q0_)7mk2%qvYEu5R?5r-E)L{nr` z%RNo@J0tkfPhY2giAEPpa@MIrgQP8^9+u$x!)@pv7tIiwE{6;0kOh;UT)+;vE3N2tS@;;dv@ka}5q(aC^p{9}!XcYzsdRF^Vabt)< zANO>LFnBamX(_6FjNYAnV^2ibRPkMi0S5!USb7xI1d54r^$CP-^#&=%zQNB2gl0!0 z8Bsl4K&lSC7FU6j+7Bl}`ud@pPNWmnQ2okh6|8^Mn=y1*86XTSp*p7eY_cfbXPY00 z_$X&562GduQm}nMIGfN6%BYYc&4jXAAY&Iv{ zmdKZFUT4~PYM3DPH=!n8Lu&-LeIiEU1!!N`jFk_K`k|dkqXX78@k;J{=C$=%{?oq& zHM6|!@}M2y8+-|I?X{elcTK$6eCVqSLxx7sCp@rV2a5mePPlx$pf1{w_W5d>`9%G? zt9zYdTlU3|%sl2vn;D=GrS(4P&b-CcUu)oZ7sxyFCUBN@s-B8*`K~_a;=k*s7-Lp$ zI1#LKbFa~8-UGc5E=<5Qj%z*kTv!KJxUeF1zsp%i<5>~nK_50_LocO&*Rx7+SwN1v zZ~F{H@&^CkC<0H(C{n2&o%i3w%K9Tl&wtrQV2poER40VMUt=Xg1h9YwBp1OqsxSmc z0zxGIMpIV&%~;^EdbjUEtEpVuRoaVKlOjeCx1v4ai4CbNXuE!p=s+&d5?W{=j2Um0 zyp->^z0KyhePDRVW~C@vf%;No_csaX&}zwbyaP+_Z<$7#7`EL8$B@nxSsf`hQi343 zqHF5KG9HR132{7!&1<33@A6Dv;@TH&Ic$HGlwgH%6~sX|UK*C!rg;gI#MlWL3B(Lj z(o|VZs+&;=IEg%q;06r-f zIlA33ai2YK$I8mAsiP!(j~@ROqZp=5!;^U618riR1n1M!Msl_>sz$(5Yk0)xH;!$C zq)=nblb=QC_hY134oQ4&N($gurCKqNEqD-=wrK-@ei&*IQ2pzN9A=pE_nmcSk|nbO zi*LmsS~VoZ-z5i;q2_)Z$Eqs^ZChs-=P*-!?n8vGkaB9Ueo#HM`Zv!}V`gw95``~L zm)&FsOm<8lVV;x+pUN}(qS(JV4#TGgx`$mFdj9x4k8!LO2}h(h47P2$@MPIe`=4dq zxx#>nI;kV0Rxb%)p-dd0w@hdF!;&1)Jc7n6HB};0BGgV1I@ook&ulkd9jn2Uz(-1; z`k=)6fJsa!dghzcqpz}g?QPy?l5P^DRq3>Qf9)1-U;j$G&=!W(gmDeNvoq7>K>CHt zO=n@LgOYcI=qJE5M*+ZZH8HgmCpn|x7zdE{4$g2Jm)hx=qigT3NbTA%uUU=8T1d*a zT4nxy$i`3XDqe!ym`x|e`GYR3qr9%OJffXRh3HC*>KD^j)KpT>8gK3E0=f9*G$e+K+%g|#ChkdFOdQhx!B3pS9xX8gv}|t zudBA3oG)0SlJs2XH;mlCr8t2~zT$TptoJvJ?YM$0IR=$2Iyi|IzP=$wFJF0byqqrc z^!V0x@H7)s0^N*yE_h zKv_wCu6?v~)&CW$46t!Q%Mdp&BYm*}U&Y4m_}4@zb1!usC5P0$xBVBxYxA@1C=wPb&}6ZKWV=CN^l;7cz_S5iWYEx*@_ zk6JpR4CkMqo#6)3u!DL zJ=3F7YNs1*lL^91+g(-*UDuePQ?@Rf9rmIS5^Z>f^bnwFC zkX;KacXAQ$AUXbVvj^8Qk3;9XM<0Sfif_A&{HrkUL1r*bR}B}T@%DhVoE_9}!E)1$?Mg#E_B$ll7-)*#65l{K2uenE4LL5c=5> zn@GAoL-GXa<}p3=ef|Su(r>*%y4V;pI5T=~PNrpAO9Ax?SXSw<#IQums z%lgcO7GS(sev}arjbWCq=hF$wci0R>A}K1eva_7&u$gS7=Z@A3K15RhOXzu=%adh@ z#YzgTAaBHp2!*FlvDi+4w5DKCCGMa7>f(%9_A|KKogA{TM+^u5lk ztoO~2sYwzU+CQ^(ir8eV=d?v~Mt3rqab-_`Q$I>j0OcZDqTA09?o()rs`ls23-#4& zNaH&pg|4Q9Gz$E_7J;|SX2%ntQtu|!**Y6L#pItL*dcISUJtZak z)I2Izk1s>9)%Pythk1UudGvmvEW9Wu zn7`9M;|slM^p)XF6_2%Id%oqa5^@&Yo+i|7-l&0iADq0T#JnSqC(b?Vx9hGm&^U`p zLG#eHG1t?9-c%kF*krk?I2+K^t_KB0*zGjz#C>K56N_wnfk&t4l;x*NsLmed{B09D z_L$hd1)Nod-m4h;o@P$OHSeO6StH$9w zW{K}fj}rc9jtS!HCVRg!9mWzSYaw3MR#CR6`5CbXepbfACDaJqz^hWUtmik~Y$?=9 zVoRATj>Z)0D8>7yoZTEh7wutTNgf%XBt14K@`BlRi%t-@Or~qbKY${n`Z+=$P^NX+ zJ^SR4Dg0JG`NWsWd#y|{Ae&(yBEvWM`a49DCMWSi4 z@H5?U*PkY1ZEHJTDd~qtR{}<~3zyC5Ya7UKdDYa`R^bsPOcnebf&KI~)mgN9bQ@8y z@aJlpc!GxIG;XG|*}|Vwa*rzFYgj%I+-hZ7PFLhZF~HvHdbt7eMS6Zn8TjqB>wPd9 z=W3&As@wp=Z%R+t!;wkrwU4QWq`3m*gmbN{*_t9vbH+G?D1PFy8yVzK;AOzn(CE_b>ki7Cshm%9>y)g9b%9;tkfAXZ%P#RL?_DH%_uv`+egi$ zq*^Fg)G91|`MZE2a|v|JB~!Q?WupAF$IhW?gX2asOlgNEwc;!p>pNOt%-A6#qehF9 zHjt=WNb3fYf(PQ^nt|lj1T-&;rYU6);nNH={0$7I#!|y@j0px+_16Fa&vS9UzYWAo zxw{{{o*67Cc?M&5VzNZ(S$5ON-YTm1eCit>cqH~xdTm#W{jE>lO2iuU%ZD!CiC1zwZ(s41g21vPxJU1hFDwf#g+dAXGN zaP;f!Xe**7x#Ec8z#q%-G#^Gt8wMb3w|h8+jq-#@WSkD44Kz99c8V?pgI*H|6_-_3 zthbPc_Atyfd_&Wm=Y71Yh-a0lcvWnuyTW`bo3ojQ@<~aGvFj*7g!2SYYZjk!8;&ig zbqo=*N`HYR!SNj0hbVJkSYl5Ld@buo5LOJIs|JPKAlczf=uL`X+U7E7FuaAl=JM>J z^UJDCY{M&YS<92%TkR*Rw5cZj{O9}(GXb{K1OP(G% z0O7io08T{7l^y?V>@CMnH#{xHNJ0uB@|N(9|6YQ8yzFSR7I2CqMh z2CAYZ?-=M1=iIr-U!sKHkEQ0BL04Ku{1OspdurVCsIAj1bRc6CjVEZ`y*0|HN zkjce%>uj?;rkJkODn8xRlbPXlTZE!@H-tv6So3?ru4md z6w`T6K-{|fDE*W@^{?zFo6apR*}?$-mwf!WdaYEyX(yQ-=#(4^aC$5;P9mU-0Ql{q zZ?O{Ouk6={<;!wlsRLsMpl*;jZICcbTaA&C%($3rilKCJfZ#l(K*~(U$l!nRZkPc7 z|Jxe+3Z)T)#mI7Un8GaBVWB99IhBCsr7RExflyFdPc$(CF+=)hiWPjcD^qC=YAhz3 z%cs+eth5#P!K1k8q$D_53{1>m93q+r#KIxwbY3TULhFcO#ZslN0b1-0Or5@xkPzW4 zUStbyka<4ec(sq7&+tuKjGk(*H=v>;$+O;Z66M)#`AEFPrbU44A0Dp+F3su3%PrNe z!0eA$U67XR+d(}lV|A)9t@QY zlUf`i?{X*If6dc3VV}VlukPi^y{(CPTf;u z&3<~eNlKij(Q$iXIIhYbVOnMsx($ zf9ygR>LXW?LXK8lP|3-!gJ3`sj9AY~c9e{Ypwg;S^m((E6S`u!(T}DuTs8sHq54v^ z3D;ZB?L8!pB%u3XWUt-6untN?rla)RRMS+NbE6eX^isx zK5t#~{C&|ezI&WYB{X@S>-dkn71!rB-m<+ykON*=1pJY;UYOeW=2-pWpCbiF=>FC+@hv8x!6=4DIN(h(Pohftkun$+GzG_{{k=+8W9;MQ$KvpBh?I^%*)mRFP(pNxd zYzb+ls?z39zHqrT5Qs~^C)}`DH0d|v^?WEr)$G^s-OvMqz$iE-pEsl8=^zHRbw+xi zo{&Qgk#$yD;R;J#3=*%5p?Xi`aRrF=TntU@Bgyh z+11J_>#q3MR7CrUit^Lbrj4Na;GJEDXa%I&cVh``);P3C$6mCH;n1JL+JHVJ8g)yz1f+j(P3Ku3>^{kU1ks%zffS(gv18&xKFXTT2g^xXJa>rf zqGDEYsPh@q7ZNyw4eyyvysW!yQv_nr#Ebic1>dz05H~9p7WnzC#XS?E$Pvnefg}jt zE1*| ToEks>wV{67Gz4Iw5qqp`fBMnez(c{FoI4l(--QV+rpR!H+oQaW)cQpk}b zm_X9kxqeYLrFJzjfM?U-eb;A!d?NOPg}DKo)z2|SX0`*%Y*|2QkbC4eDacoF}d^)O2w zkbvi*3L`iPGGn+3D5ZrGsUy+w$0Sa9^u)Pdo#O0V%5@SK@wr?uOo;A}FtD!eY@n=N zG@(EUG<9^OJ6Ju7g5B#XZ00!kKnlVTuR`@nfI(Dh64n_Xt4tOzqPC+%TE@x~R4jQl z_H@^DhSX598$}}jRS)G>y{=>{XBFiNg_ZMo;X>2Y&upEUuE?w2ziH#W=S()UCde|{ zjE&XDz8fe@{RhukZ%i-qbn|L%EhtW@1?(;S`e z!)3ug&&}S@+{+4RA9wlq=z9s7ch1T&6vFbJ82jZ>RWNGXIW*_Y`a6Hn)*3`&y4cTh zU3VRYo!<5H8We&jpaR41NP%82{v#p_jcn8q33BklGKFQeJxRtzRt=>b3Ccg>N&|OS zeM)zAV)w+;XwF9=X;(gB^V0&O{IE~;BhhA6MJE?PPaV}}ufo@VflP{qUR-pvQ$5FN zPNP-G&Lq!(TIFtxXXg55KdZdQ5T(EH=b00d8;Jz(+iWPPcU-ZTL|)nV#Dth`QZPZ% zH5SJ^QAyC@4Us%%P1tgQe-7k%1s5&xSb*E8phNTPSw3Hw$ITgAR{m@^^SguaJUNZZ zKgO*VvnTo(S(et1d3!DDn`aV+8*{>68EHG&U5HnMyPI3L!k=q}bx)NMc8wiQzS?M* zgPZR`ReV0ZF~m6eGUcP&CqCiZ(6)=mtK77KqLog^l>QulDgp_7pv<|Y=}yRPH`r{t}}YOAGX@ZvzO zU~{|yAe>bE%QJzFW`_r90w0*tt}w-*n;no>gh=ESV=sXpG!4 zT{tO57TU->63q|Tf7^5_Kgtt1H_EuuH~zzJNEb&>+08wg(ci~C!eh>Qa}hiK{7xv0 zOqN{4WrZ=i(mHD4mB+&C`@;}2o1o$aI3ii!F2GMtS3|49nmmJTev~=YDJTO&Y^)Mi z40Iup1KT4Z;jAiUt%@`sQ6EHU@fqbeM4uU1zts|?eg$GgPzDS{8d)lu*0<%O2F8N61UEDdXFQQX+gP+SOC+ zV+l^I5w8QXq0iS0^f}8JU#=;CBM;Qm6Od6x&)gANDzl9Z%J7w_7YJ$&f@4o3V*~X> zT2vE#jUr7%6E2TkUvyM81nJBD_DKjh^CR_sM7qohuL?tm(MekC$%T#s3cVn;3H@Yv@ZE?g?aa}SpvXt{FGR8;z zy@?`u`J*L8Qe&%<@r}UWp`b)2Fs5kgC3}3dT0FB^WEYeEc#}SXiPm#UUeQ|}ya|=} zE(u5nPqsZlwrY1jVKw$5h=VRf764K9(u@0&l3o3Zn6XAF4kEte$Y5mlRxXhb3gZQ$+zd7gmg+{Z8XLibq=&|ZD-MKyoXT>}MbL{P6 zbp_(5iNUh6u-T1*3$+)Sa9dp_vQahBgY*b_(d_E5m!R9k4ZAnOYL=3yr2NnV*EeA8 zy#kz?qKcJZC9|Rxc)a^YA$DMPi?^s_m~TkCfgzd7Z`M;75um8isEY3V|i9x#`yW9cih$Hdbu zt1Jb&LcR?GqP)sWv5UqKVKFTUf?g%|5*4_dIv!rY^NHxd&Q#D)uKyz>_V??&4<;NY zZ|S&nvpcaMsGMrMO#@36m7MWppRD(dn<}?$R zgJ=WDwDwAvlQ5+>-7>4*+_%>KQAIroX_OmlmSUcP0c8*BhF*NoYg6E-w)}5ZVaHfy zwjVKhqWEik>lD!7Q;7=uOHChOWY7-{fEl8Y#GoPB6hgpNRWHmb zVjtmQrWve~!V;Zy;Ly_bAe2m`&eF*ISvY#?UU3iJAX!N!l2pXDl{c)Oe6sr9pRux8 z&eZQ`7^{3HoBnGa20h9%nsdg2kL%u{{7{@s;Pghz1vcc{aT^(j6dq*ibn9fb zvn@=wb+hR?(Dut|L>LM(*7-&aRtJ{DWC+hC`|^hDta|XKOvm+k8g70VGyZ^E?K)8Vyp zI{d>d$|35KUO~>(tD_`E!TMF9>@DS%m{Qu;(=zt06}vt?BI<>zc+)NX1(Ar{(Ujzf z$QLcIN2QA(b)!?M@)XU-g;RdK!k6{MTlv&@7q^UW;j>0_{K>q*j(X<&S|)PIZGMKaEEZ&!h#>{>hVXj* zU2Op4n)j}IS?ZvB-h{u{SaS&r+IglMkKzbUFKKp&9$RPLTQ}>a=rG@?>RrCKEtLHu zY??!zt7S;knThKJWf(Uvxv-1YZ4qZsq4`nbp*zdI*e=>VpOiY|$GjBOx#j+BK4+lH z!V)SlZ@k{T9(^YJxK+=3qq?BDMex`>5@>{zw1cxYxT4;>+L^ywmA}z1#TXe}%Y4?K z@8sHOZ7CvKr96vg`x+}|z<9cD8JN5IHUE9Crbdoa&3noJn0;^x^8YJsR7|ROHe=m8 zyVyGl)uKC_CV-567EM$4!BMs}KB!;Dom+|V!imv^k`-*WZp(jL)9hT2|K5g+(868z z08?RXkZbHW!f?5?_g{tB{lcT{>aNPf4<5|35jxwSm0V7g2Dt@sUn>y;cyKE)k4y!Rc%6pjwniwRz{H5|2rRYh^Y3J&_h>RcW8|!&VrDIv zM$^^3)qLmBqYqXl`?*GFSMX70Pr+viKMtNxz2K;Dq@*T;rBF05xwt{S;X=0|V-?R@ zaOz8U7Gb?5^tMV+;=>)r{u*~T_oBFT;}BJYS1?t3u8ilddwa3xL0MlNkMv6;g+NP= zNbZR;-DcXPoIMH6uP*-UW6p@xW_WGVDeE&21mo`*b@_pTL8- zF7FCHecSc%*zbI|Tq?so9%ll#4t%>nwet>anReI^d0r6Jemu8Kbr-?$Z`*tBdzod;_l7 z$wcTzcVp7YT&(ujq}rx|DFaU#j}WQWv#bWE0&+|?|Z{PgPT*}9iiWcVCx4S8ku zZ(=k*)v|Fx%=}?CR;UZtz{t=5Lr9QL0aTIq zGLh=eo&H{0=04aw@pq3DJS)Yx|DAn8{B+-)2mN-Hagp!Khls?i%I<+hcUH38eN3E} zJO%DSnKr>D$CGCN{p-s;dG`=I|MO&yx2^hI_A9CE_*gElyqZtz)n6BV>GiNz54|%# zZFI82bc)ive|Nlpne$47+c;WK$gSqn^bYXi!{d3g&VBFQIYYw_(tnd3|HL^{zk`G4 zFm5)N?OD=F1VsaKqaHuh*%Gp}U4DK3?#dsD%kI!V|Diae>;Aiz90&{0vQ0Sie?LUltn##4Z8A{Ld!lm(^G0M6tIhEmWuXIZ&~XcGUs-J*7B*VtdUiptf>6!;4#> z88HH!%E4BEkaaj9r=k>0OBw>i%HXM zrTCCe^O$7d9xw3~w<%H%)8-D{h43kuXedq7)zBCw%tfv!T%*Zm5bY$)B$VY7kwq*1 zQ=&Il&^Yn~gUi&92mM$G`-@gYMR1csbUMi691>_BML^1DU&m2{Xi%Z>);e$q;cKxD zk1Xa`fT4cpxK1WiE@|^|RqEhO7;&2zPd%s-Q$NSl?77+)il?negjhBF z1mKWPfTi|02BdVuD_(f-O0N5>-G8J#;c40*C*%QP=nCtuASXK;^(To=`eJY+Xc!u8 zu;?Qm7$Pa%Cm6BM)81Sl%WInJ`myE}R9P!9r%y@E-T?H{AIQ6+$k)$8WoyA_Lku81 zqp2e0MjSj&mI6;*P&mEBL@_3|>z)ns--fSpd>b)7fWB>GQck5lNUCaSv~Jm_Y6jCf zg}71eZtIc)Kv;duxERhLh&G&>zZMG-g?iFque%~Co~>J>5o>9HzBt7q07~?ukn1+bbuY!CM(OYRee7>Q z*8)=!BHOzTYFvNVOh^_w(QJwr@=7U`dwV5<`O%F~2SQT?tx0UWoqz5`(Rla5y(NBy z3scBYT}Q@0&sEx%q8_(N{&>r$l5SO(xd(JeCD;USYr9uF$s>FHa+rK!S~J_VG^J5C ze%oXoSEK`q)7VwNx8QnpoY@;a?twu84kWAD-g;s0Jp6AYy(Zz=!|9ZAl!Vq@NEo2=_EODLjSf=6DKlk059ZU6zGu@l)#2R-zJzln*fve;N4 z!sk}qlZlcttrSZezOPyK#%=Yg2|{ajMgR|)rG-riM8-iJ*Lyw#-U6Ed;i-R|;7~bD zF;8lPb0MtuU;`Z7c?>H31W2&VPjdiSFWqT9=a!xsN zbi%Pj6yymh*?|m5HDWIqxKA1rg=?XA2QX3)!-$H|iY;`Xz$hmd=Ww%c-ZyFWf^ZJV zVexP861*Rlv;I30jiOpOpj;POxj=Kj-kid#x#9N#9 zYjuo6L?%J)4^a*|bqNSQ&){NVW3-r&!n~ENpHgec*ukVkbEjG49Aty|j*!hGx3*W6 z++%rT%ZG3sRLgQGId0-cva)X{r%$`@-8~squOZeUBvzpa5Kjr_fa83r0Z${&W1E;DKkC$fV3;Y# zO=TPg@x!FI0N-9i8vIzZ0HueCM%}a z=U?M=p@>FsFbl09jiJwm2v~J#zwhfungs%@L8`;l69kX8+<~kFkytAc{`x{nuv*!^ zUnWBd6%u}EmmB3JaN`1>#b}x(j96o%b86XP21P|LsKH9P2WX`H=|Y3~dy5|__q0Fd zHZV~P3;Bhwu4=38_Y0m{G%xF9uc!~r5TH5vHlGjIFl!4Su_y+SbsS=F!*!E@mw$ZA zs2EWY5glAr$S=C!zQ8nS~SiiPvS+_;;8I%z++S$|KAR-ecA86;D%Clu8kdN2S8P1 z)!PfhHoP%`0;5!1fLcqjjj~<1`{z=cnGZ)jm9qCh=M514pKSd{;`QMtl5FO(* zl)E9v6Y|o{F1H5W*vsO@X9&Hew5xTDuA3ac-W`m(cM<SCC8bx@x;WAJN7_ni>Ex^7Dgs=p7K2JSoiY+W%;|WE{v>85iK@iTdQ8E1tlps z)=ph6&$CEVe>c9#qkg)jkf@wJ;!VeC6DCXV zFhyucPcqEivXcXiSJ-)7PC!=a5iY zrJP93;(HFP3`%6-*~^M|I3e>r7k{wo&C9ap)1Nz z1O9|kWrq=`6n=T?dYt{(=lX!v(nn9koxMgG`1ZvexdHpfbED_Xj93^lZyoLzy(p#t zIGB66k&)!@>QTaUFmP!OW$kIH6LG;;*}Ax{#0%@Bo3|`@OF2m(Z1^vkkk01Z;o>^R z{2~70GFUf-UV*s=tsn#L(I#6Eh?T%zW^|sm;i_9xpPC9N;^8g*#Z164utZp%j46rd z!7RDfg^Hu9of4XY=-?3JM4X)V%XDSBdFP{yl-OM9>1tV z?9#$>aSY3bJELo~b21v3B?T9ey2~`5z&MnY2?n<#lKQ=kcF$boILS^wc0XyBBoq%G z07gC~u5$g?MO6|2iQmm6@0zMwhN*G~P*LVez*7{ei&T?3QL1==d$Z(+&zSj<9J@G8 zYe#gGY(ExX%`Yl^DO6KXD8W!|C~8sCVH=)95=VolEEGeDwpU5l6)@wV1zRN1(+sV& zAQ`+eMXm{-mQRmzLb#0A8GizWC=u!8m*b*`8G2n^*U5R#Z`&_apS|UR%&JP)O+xd( zFwj;dJQYe_;^ivF#)Sg`{X}YSuf~PJV^bTIpZ14peOmLA`twWU=!+6IZKDsUi3PAF z6kCfnvDFge@ZK{6NvH>nZ8I{w1>cEtkU-J;H2Js;(FXhE(`xb9vOt#ge8_M&f|8E@ zXR~eU~PdMLFJN{Rlq2jG9g&j|CA{jpGaIYh|W~UUc!wKu` zqI`=-NHycC&@6MLYRHk7?-pr1UVsL9$Cj~2^MnV{Muy1;G(RE&&PIH#tIv&l^V zF|&(e3|hthwqn2_J?_m1OEsWfH6ONZ`t^Rh(UB-vk+xTmDq?}PzD4IabVzh%u_jJ{ zpCuKlHD@_okc40W#Bu#MlPR-@gv*9L4;iA?)LN@cH@c-7rvfy@kPbY;aPc+J6Lf14srD)0UY(OZ)cZphnUQB_J z!V6B>!)kg1)Sk+W)GytcuBA*uN(c(Yr>Z#bsFL&+i|)`0RWlYq%fYi*I(|%tRDJN; zh2Cr0!;z?dyo4Ho{vk=WjBEz8ye6jRwIhR};2$vHP7w;@Ip+#_)ez5$f$3xDZOrRg z)73N~?QEso6w`$Im6%x*G1{4yA#zv2E^r!u((yv7JR8bmCSGAf>DG94xLFAly)D1q zOVve+At^{q^5fLUR{E_{-#SBUr+k=nuv1m?*%1ZRco4AD) z!9|_G6%E?qPhV(rIQbl3tcD;4Pf}Ma{Y}V~aEB){A!ya?{Hzj^xw2;qSjW0uoJ-IB zw+zl&)AXKoNG;muD>dED(v0%{Ai>^TAaj_ZoFMCcA(185!!i=SQXIA}S}z-O)v1ne zK1-UOJ7hXwiQnU3P!+N@#V)riCR9kWBUrTxVw#Pz*eW6=O=6c{`=Ru>Aq9|A<7C$m z^5J zUSYn{dWrehYMCsyBCzyoMBnj6H=*xKpY`*+KvC*Cg+7FYX6+V56dzZjevHL5;+j}bVtofbm* zx*0~tvcmg#!4AbuZGN|k5nME^Px0d&du>Pfpy7;Zg|YCpo_FW?4YBhg9R?l;b1T-M+KtR;1YH$rV=&jht4@uaE1y--&Og2Hl?`e~*2<1Yy^HB*lSBgw#wx;2ud|AS^7kww zlFS+wV%e)Q6ZE#80srC4V_Hdu+keikVikkJ3$)KjX6^2|w<}}-?q^C}(&RMrsHq=H z3^ID0jlLe{|s^B>w^AW0rA>U{ow!{Pg=SY7Gpvu_UV-jAspQZgAIeqI?dzp{KME}v2x>SU^Gx)1NL@&^! z(FY1XH_XtL8oZ-BrQV&6_1Hvw&!PNi8^_KWwM$CD>T6zM#`~%k&XB_QA6V*^sN6L6 zq^#Oi3(c%(sOosDBZ!hqylvjb7h{OBo%qgYX`MR2tMkR#PdkGp7k1i+D>IK`v9{gc z4jpfab5#Ng@b#DS=)IsYFjoXNZ+cg(dO6%TCXSv#BsI>Hr~l$o(TiusW&z#uPGuq} zf1^;@Z~dt+fnQE$VaZ>jc0ylT#URcZd?!V|AMD~H_}~(bVHxY85kx4aEH;p+q7)`+ z!sn%AJm~-8*8g8{Qqa`7n8hSrT^t9;X9Nqt2-UR`O36Bi#Q^YV51#`JOQc?MICg$l(Hb+Z^R&Kt}*=^~x{-?qW`x8$96wx*C@h(y z4n_sc7%;cKA3G5ddMzt)=nf>D!Cj^O!rH21-Y5d{(Xv)nx`^c|=Fcb_W^FDP`VtQb zcG~n-CYu$)HL&X!mV??{`-OqEBWac?6}9khjiw|qlO#yZgSWX zd+LpxqV`^W!8G-yAFF*mY?H#otm`$vh>7#D@}>FQOwSW;eHQ}z(@pNq;;8P5EP=i-s$f zS!M5q4%kn!TzU~;bw!AGD4=gen2JoD%B3)kAwebQmD_$cb^yJDs+D2jMS6Kg$cs)y zv5K+KNr`C21_+BAo(aJB=`b9{g@>>1$X@rZW`-x`WEyD*vonr)`?dR3y}taSgwA93 ze%zCb@t^9TDeaK>ya}d`vXNEhoA*kut8d=q2sb*CpCC^sD647F`NFL+%~uJ2R;BU23MRLAd_|VL+b0Y9Lpl2v?GZ8b(-FD48xAghfat46!S! zkvG6t>x62-D`*snCi#8d(+kMnU;_<9Y};yY6h(_$E}di`NGCBoVhIsC z!5Y#A*Zlxmg>fQg@V^dgg{I0Xk}L7fGdVgdoL!)x0v7BAI&;5wiAu;=dp)v6Pb_%! zfk%Ua6l5P!J{y|1xS99?x?fgBEzL>p%k$3YehoBmMze51yrxz0bpu*dB1KMN`6N~i zbD019s>fUEAO;beXZx>;K6AnAN zlwLZV6CozsY+7cOX~7(8tKyF+6xR6SkVl>?#SN_bAF)PrTUVKNn_jv&b<`ma-ktEU zg(ZIyO@t4Iv0dw38w38|nF4znl7PB1x+|Wq1%Ku6WzxYy51#8HdOh{j0gmxu@lFz# zA0VeAwi2EXbCNmO6xST~nDF6hGX#?n@UD~q^tHq%JPBPm%8|VJ<&6jP(h+*VMiNNH zs02pi;HSLwnXJ_;B$F|qnC9cX1bK~fs2g5XAZR>r%ujEoi%Bk^6@nuOt8mu)V6p#1 zC?gp(;tV(=NdZ+Trtu|FBY6oxLz0ymt@xoT#_QE1cF;btI88UK^Fgzt+;c>Myluo8qj9t#-TQl$p2; zB~vu2AzU_<9eo$hUZmc0(| zuW-dC1n3yqA_eKDAf&8jJ*YifIhL-ONg|yF0UyyAAgJ-oY+DOU&Nu&!W}=YnU{6b; zOVmO~oEl(kNvw2MuUyTT!Mu-fxA#{_@@8hPbDVfw3RrJGcBj)sOgZDjsSxNDoxy=6 zB%=sWCIw1E+r3l67CF-s(k)EBZ4Oc~=_=cN_p%XH?7`w{O~i_D1J7-bR2OhpM=S@{uRvjSVI0oMOvB_i8^15DlA`gA^K zZj_zo`y?^YU`^k_G8N@0+cy(<#ZEnMhC!883CkhRXMWa?y@D})!T@lBcGIyqC)o*; zx4a9?uAx&*)o(%?Gdq;@2oDnjQ?-i*SSs*+2`k>(hAO(zV=7va3|Ktn^wgC6GUM>c z2l?o!#FcCEJGF+}Uclh6Mg$-mgvJf>?_wO+cbWU# zDxmgo+5GR{CfRZ{xLA7pG;6p<8OC*9czw})J*>jF#{U0=Lb?Nvs0mC@V5LDOax?pJ za*Fz+pC-ANOkQz-(=Fr{5L>`-{i`0QMz$!n`OU#h+fh561SjwLV#b(iZ8w@tHK@v{ zeymp)5Tr>-UwFP-nMswcTAolxxs4A{*Y>vLNdioz3`IZ!zBVrGj4r^^H5I#y&U23b z39H%%|5&OksI&mE80)mhNn$&qNKqj=ucL*6ixnnqKCrLGgOBLGf?>kkZ^+?7(oW`K|vYLga+8p;AI zQyhW(Ug)R(W9|MQ1bozLqTik3X+b{Y)_s;T0|C<@aPnuGk^~v?0~|3OKac}tATT`e z1H!T@Sao{#*E4rCMsAk?0TcvEKx7@|Kof#@dDlQ?Ac9LEObRFfGQfZ?;DF>&221dM zo7OURB^(*GftA5}0Ja05w^R}!XfeZmxkZCBkbV|JG3GaeL_in%g9ca8As+JrH264# zhgwIbI$R(IzKM)256-I(wCS-$hO?D=R zEa7i~*mi#B5=rog7c*GSVu}nwcfG@ly*ODp7mSJYhsDSkRmT@pG6Z|5d2VxkZQ@mA z6^*HAXNMJc*63#TauciQMtGzUn$a4cm@7_XBx|4qQvqnkCO`*gjx6?Kz8G1>MSJYX zeh_nHKPVcdb|ARXDbL4KDR4*3(SytZQ21eGxb}x$wRPZTkOLGV++~oRW?g~^WMvk8 z3DS@>v5jo!M)M>|ag=Rl_i;m@zR1lRC**Lw#a^kd)#>H?x7LFeD zfk257(Dh}(m0K1$6Eu^Va}Z$zFqjkqnsfq_i6LM4S4bJB13Uml4U>I`h<%Z_caw*8 zBWZR=B5^ChlA1Y{+6b6tIVC39mo1T!CwY{nxocQ)d%Y)2>iCcJh9a_=Te{Y4XSY~R z$C;(6lAoXl0bxOMTZ;ykKLu}jw{t?dO9;Z7-MN;9 z`I}mp6bgBqauxz+0ET=5Gi5}M65v6#W|vAvl*4hE3MZeR>5i@?nrjiBx}Jp$~E5EGgML|nxbKMCxUPxRSeU0vDTim zxnT8Vq%k3(Oezy`WTBl|9#cvOACaR`>Xbg0O5NoIMqnx)GEJM~coCMMMp~Ik8ZFoM zRb^_Xnnao)qNDq1sE7Xwa0~|#&l#eYq9kJ&A+ZUP)F_$32w;jLAcP8~x6+^537xu0 zrFNx(qiQ7Kh@?K+fe44AMXI3K6CVQkpw*_Iq`FJN)S;p3o2eS1aoVWx*aldtBdyp- z-erOhg@j?sT<967F|(u@8mz?GTZy#=iaM>qT7SbDj@fmr-DejEx|c0flDwv9(8>Tq zlbJw7me$Fug6M1RdYMZxe-5D;vG}5t$zV^1OLie*3g)L`s%*5^X^>K_Y3gsS6Op^w zBx?x)fM}{^2|o821vOW011Te&G-GcdD*FXssnneGRcK^tm!v#@oWuC5 zhC#9efU!ZguAKjro0T}7aS3V+`lnKKpC~&LoN0_hD?)+kmf$mc9xEpf_n;MEgnb%v z%ocWtm(# zk##pY(HgN%`YL&3EdPRp4EDH*dnpvtlOAbkD5!5q8gUsbZhFF=llwL#f?klt zABS0?+q2Y!w*r8=SqpgTb-S!mPRAIK*V3=+MI}zvU9{_U#VcpgIU3Z-Dc*W^G@B}Z zp`HRryy^dFKG`F^AX~eUtF&uolj_@9*{grw`fNuUz2*zD1dG1Z+dH_mTDjOt5a+tO zwlObMZfhmJ7~39(V!P#wy~Z1|JGQh6JiiZozoJIIvzx#=`9I)lB(ru^{d;H!jKK6; z!Njyc0X)D2e8L6XS_bS{7Tlf@Y+LK=whbJs-O{3^tG3y~js#f3D9pptc_$%E!6Np* zdiVn~PzDy*13nDECd|Zi1i(Oyz}Nf2HmMRsHV_$nb@LX0u&F>n6va%n#69f9OPm8} z-~?gN1Zlj+MqoQaEX1toaAYjTV+_V0Os;ui!{O>C_|;-5wz}-As=W)sBV58_fW~03 z#)|(O2V>xXa}32AVaJk8!E!9XO-#osEXD0BAsy(dW+$+BDYw<@P(LsRjC{(doXCv4 z1SML@u6)Uu?8=1dRUo&0~zDc02(=fXt~p&R{Tt&X&8n8*A(d#3}sBkIZ?j z)l_7-Ir++RsZ&1r+suS)$3RZEf!taCS&f43aK%o)Cink;=) zSb#i~52s;^7RR>FM&aVQ`+$_nsyFUbcF`H+?05E8Q%(jC3LYMzL zDDEMbND$B--O(-hHX&`n{W!nx49y?8$u|~Ydto~+^2Ehe7vv!#qP%Bob-p(J!o^a% z0KL;54FrO+5s7%f7 zC^TT6x^X#)ZM_l_aM12cHpEo}(&#Bot12hr1D>IP zJe*X9(xYa3w&%E6>WCXa(Aus&H}z}O-kQmzQ719X7PXwxFtNQe>(2v+DNX+@+io3e zta{vrRiru1+{WC3X@K0Zt-VcG)b%{B47%B-Em{Ul75i#F^A*VDEz;z@5(n)A=xxmF zLaZ7wyoMXyMashKYtlqr%cQ$mn`M=lW65;N*Z7F8|NW2`Z3H^q+Fb3}2%g}^mE3MQ zXYqp6j~qPCmee(1l}=2AXtbImx8d?#H3B~1K~Uck+`hD}R#yF$)Ro8YX-$LyjbZ$i z)tuV?&Ah4`;V+>BcP-8g2$^sVqh8s|7jE2%cF+iC71ZP4vc1sl<~7`CpR7yaj3#%bI~1V6CcrhLjkfCL*yGsH5?bq?JZW{^yMzZ`HT9TGrHP1lOq z-!gr5v|j6TXaoB6*x79{N$>+W;KnVE;ph6ONbcM~e8H?Sh@XHyw}| z+TP&q=gD5~6X1GeoF%TCC_2mAGE41=*8u!S(M@jZ)LZX%cIz+@>P5NdDyr-t)&e<@ z1kN77WPZM8-tkrf?zPP$*+GayN$hhTl*4^*xiJJ;2XrGl?$ZB>>=obvCF&OaT$e>n z@%v-&V)%gNozRB5wnZfHBl#xl|ze&Dv!&Uo)WZbT2M6XR!GKe^*70&h%atNN@VEPU8I$@vz2^ zjVlKh^Jhpj`O*TYlRx`!7V>(&@H(t$S+CH*7c8}8`t<*X#}8WBLulo;yni*on4I5h z&Y$#aAh*by^FOZeA1m~!$o2Ss<2vV{BNVC7B7#8x5HfN&K(K(|L4*bs2H+qiM2HIl z5=>lJv7!(*4>=rIk+7o&h;T$`1W{7NhCLn`Ebt(K;7AYw25_|CQG-f~77regam2+& znk*Qo`&28u3EF1DdM!fJyAA`L)MfYYlQhcRd7)Oj&%iLn+zW(aFi zqfneJBPe)_b!ov0Me~;B+rmeq8!ZHK9+bekci%915ux_#)ftQy2(A=veN*g*f|(Ury6K!O7*Y`BJPb36etDPsW~ zY_N%e8!qL`l}Ff+A!GLOsn4^U=c^OTG5geE4!P~4e zAwPWcJ?_>t^`@H?3)N3)nf#9jlxD3=)Kz0tv3fz|Iq4vDq!t~8G=tX$$S zWtOa?2u1Z?7C2ba#CKovjy4*S$ZQ~3htzh68)8YgMscN-x5Ec0by!_=<#V?qCX-YW zv^$HeG|xBj)zn~&`}LPwHv~Onqk^;476l)gqm^Nr7nB%c2|ZMk;)_SFt~t*> zMK0mlR877h5vHSiL&h5lVVGoEdkFs`mYEC8THKpEY?Ix1ExnZ3;eP%K-q)lk^=P9{ z?YUoAVv$=BTK?O>2TioCZ&n%12tqO%8x~N_?~vtDwsXZEJ3S<)Ejg~i&^D{+womj~ zX<3+#dy!LOL?!R+Sk+_)8f4ge>jm{*ZQe;uay-ZMfOJ{M5`});u8VOVb?wSSF8kff zP7z-2Q&7+r0?}zygziQKPebg+b?-6p*w-yQ?C4943fapcMgUW{^%9Qzz=h8n>%jD0 zyZk?Ec2srpJRY_##TQ2$ceywdpM1m3zCX(SAp}}VGat-sK!a5r4{Kb4RoqbLyyppP zXw{?OrBH?yun@p|0+h<_!sGuh`C;x<<9m^vK&QP07R-U}d*8NJCppX6Z)fX*j;Q(v zxf@O{ghC3AvXr-o6o&4E(m6#e40SvfD#%jd+R>TnC&M6JjCLE$ow@v%wDEZmca&pa z<~TP*s^IE)Mch~Ok{H2*hwB7*zS1mdopoX1dNfmF%yPCNG78h(qExM%1xfzjxNKE1(=f|@} zwrP#|8WUSU7Rd%!ay0+4qX;v$H})N}UM7@|99}>RTtd)=H4x)co`}jfmIjNoR2u)_ z1%e*%!3B|G<|QpR!h`>9Ab7%aSsI7{1S?#@3PzAYDM)!nLsU?msm$5NC{{bOb%s8+ z(+=LWV1gl7fM`3+6c?Sg!se9%35TddLH|&PLmH7REV96V*wPjpaoLF z?uC-dBWh;CHWH-i0Fe>M?y70cdHPe4G-F^A3JQrlg!$Wa0uC2!tyqMX5@Em^>~K6cBlsMOUv;hl37odFj#V zP6t6lkWx=}1E@koak>;+MaL3MaSgwj66Dfzq}MbtLf z^6X+VgXHB2OEHBy0D`f*Eoc}(Sy|u~(Xy*#T~ah!mo516r)`Z~X!{b#r5X@2OOpcx zv;ZJ_3Kq6`#3XGu`9MuDA-B72>?{h(1hIv3d4Zc55T`^*Af-Tiopmb}s0!Z?k*o(f zFkTr!OO~^4*Q(p{u3^U-3o?v%w_SxqB*@S!%r@$(`J3Qo55U>ZO5l~w-KT(e6krbv zM{Df`ZrpHjgF1MEtGktH9RPPIoR+T^b7NzLX$RBnW^| z;uX3#+10}}w-!d%iAXdXLm?W%yE`uZ4_9JOME;2PKH)!3B>Ch|_TNrWrZffA6I z1|%p^hffTOj{@qV=!~Q|{DdF{7hUCNL%e10F|%Vdx!#A=ceWnhlE6wmdqJMYLkkHH0nX- zyfq@E*~!qYJ`#?Loz@^HTZ0{3H(@deGbAA)sq36uuyw7?TwkVM=bZC^T9g^;gzc#F zdg1>GlpBCzi#dSmo~u-$5+TZ1Ofk&x|eh+R@lC@joNZqV| zbs)pb)pEL#?L-oh4gxHyIKV#@qZKjIb|IHBdppjhFIJl8v$}y80OXTQmus`h1%O-o z5Nw6~uGAn9SQ4dpNiSvvGb?#k=`QH1UcrBZJ z5Cl?ok@9DWszE-V`M&o7#y^Y5+?lOWAch7EWYenID?{8fWdNfv?+YW2BR}8!y=@CV znvu5~;DQaA2%%~h@|dQ8yReHwH~nd*W}-i$kpUQx8Bn9Uj)|WWc^v^9K!7s90~|jE z9I=#%kpmi&6LgOC8-PZ*8!_O3Q^KDLmPp zF1tPQ$OSIkjVv>+MAV{A8PsuuSww!jnPG8`aeUYyF^Gp8gax%OvMH=suBQ@jB~}qnT=dX0%_zrwu+dR!^lH z7`N_Q6@iqej37hEX^n6Uq>C&hC4iYhDF`g!#z~Wq8z2NkQUfB`$zWnQk~|%JQOTvD z43=!kF3PtlLoFQ$4R?|{{Ampus06#xNgM;fh4jkwiy<*%$b6Y2qud$%5XTl=LIdgz zyb_cZ$$=Wk6^TNEuY0^tJ3_py$D;8|zO0w*0*Ri|r#JjE!O@<8dCD4KDx8Z%sQfjJ zQ49mZfyK+P5)8(^yGyTGDavGz z*vK6WDsAhr$!sM=vN3ge77@g^H_$8$_Q3OrUFfh<1sE(&#Mo&SPZ<#_8 zP&Iqe&(n#`O3cw5%}@x5wmb95F-yBnI}W)zP9Jar6FpHBEl@Bhg2!;sz$B(T`IQiu z5gHA)8g)w@Ww?l>5>f0Y+I&tW2{XP#fYLz$5=~MiUDN+1fP>nDidc%MQsDyDEFJoi zC6c*`c@)Fkm`*SC&({n$%S1V|7e}hh!JJnzmvk&A7zsFf~PHoKndcEZy{DD_#2KD*IO|j%`yPA zXoS`Kfgo7dd;FQ@LjbF(fg@mm4Oq+&IRn)q9i(DCZJVR+tJwh90UUrNoJBUktPLyi zSsMU_APCwMb?F(oFoKTVTm$`tCh!|3Z~`P9SO2ih|HT0bkb^A417Ged0DKLU77~ut-L&F$S2NZx9NP>J~T8Ne0GR>?sa^fEPHe(7gT>V9uaNQfA zUnC7-CUwlH*^7-Dfcp~|9%xQ5v{3&k4lVxt%9`M>2B5eLidG-$(TLh!F3#5vc3pg{ zB+qLur#ln(yH6O7;fdwTEr^j6phM`q;>pm6S^K&v@M0zHSZ}E~@gd%z(6OegOEr$p z8Q#$Yj+yY>)||E1M4BO-I|3kB(jsUoFnMH}jR|5~&MH(tX{91lhL8V9szJkHLiRs5 z*^Ssc&R&kHGRov3wU1h!QMa1o9D3sVj6mICz(0eHLl!uVK!GLLfT)$!UJJv5AeSv- ztAu>!LXB2wmRv_x-@|ZSp77-mL%l4Kp79t0c@qO2kY@nOBh8%2e&*zZ)4SDO<1Gti z_*lH2fKD2q0u?}@Xu8zf)U*Es8m%y{RDStqdLa&2#oHWX;zEw$mCQw@QiHXmQA&zs z!{f=<2vVfd0kE6G9+X~qf(ZI@1ZTeGSW4LUU1y4==1SCym{}C!3oRII&`!bU^r46< z_=(h8XeGQ0H3`J|I%mACyO1_$$^1ivo)m??HSWxfh_g}{!nq}=z*IZaf!R*AVwVTJ z>5oR|p}JIdWxng}kX26S*+c;z*xgt3jqlxoh(3|I6c~QSS-`YQxUR;K;=ArKkG34j z;ANw1W;GFIX(#Tw-o!$K^a0c5j#bJ*Eqs8(E)g1PMmu^56PcKNMO=_0}<#)>57pAeDs+5aWvpE{T$3?>pcC9Pq%ChOKdH;NAY-77-Yo zlfczz(TXC0t%QQwZProy<^I9bC6uLATuTaOW0~0hu$uFYhUNc3oRR z+@vyGJ-c%pWpgb2PbE0IXPqE|O>ty1l>&Emj~?mPgA0RoOHK{xXV z9Vug}=jNtZNjE*c#!;K{0jtSg9Om2@zB`(p?=#Z@8|H+x?b?02ik0 z&?df*UiCaVUx=dXUCE+rQOR~LK;FV$o4bPwE6hB|cciA5E4TG%r!6$s*?3!8?{mi$+v)4w(9ODb$Wxg<-B?yej z_?7>chwK5DR-laH*ta4Od2rSjUa#jUsl{X^KoGT;O~%pubsihh>h|IPo@^FzBiZnl z`@mHx0r%Z%q?dWI%%NkF6ZB`dg}r`d@i9CLM%ynBm^}l8LCU$mOHB^zAoI|<0|+bv z_YizyZ~?-E3Ku$Phya0#5G4#8NMMm6#s(KSe2^mIM23nYAv6fE0nWsX89{IeqJzba z94SV!m|*kf3WpJP^6aTHg$tG<9?;CG^C;4vYB~;R5u!%Ys6QE=OnGtYNRt~oN(@O; zidP0=ude*KL&=R70W{WZi&LdfxK)Q1m1?)F*9}n!pMsR|_aorM7rFm3 zU2B2ln_0@)7oCZf$KY;hsutOu zaV~~td(^EtD4`z0`QV{5Mp!186C&1PlNmh8mIkR}5NJXrj7sWohITsEs{yJeA)ao= zC{(BwTFU8`f5Q5ktg}vlsjZXpDyfUiX4)EzmrghBT*JoNps}9%mSA@OvG{9so06*P zx8)9q?X(uEYheeWt@|#!Coq?+1Sx)?tGM7^C&PGW%&VtV$>*h>u!zu z-Y3QkN9Z7v!Bjbn8j>v#yd#L#5-R|`%5u5eAeGX`2X{~;%4!7&XY2n^$G{rvaISk{Khx?e)PO z+>D>XPG_xD#@w+T?AR_8JUNfAg&YM7+(I}26_~ThS?F~irT34QZ+^I=cQ;+GPio-c zLk=*Az5@+8#4v>D0wOMR1g&cg?0KeNXt~yngG+=Afny#63bpgzyM8efDtvb~OP2I# z`QG(hL6)MB!VNg=Ah>rvB$1Z!t=?OC!ItY4w*~Txse*7tO9lV_uS4W8!4UvpgT)0) z2EVHk&4A~hE9I|P!^<24qw=MJNQDMA*Z~OGH?$eufOgcY-T`HXJWV-JX@uJ!|Gr1J z$Ek#8sQaLxPN={IUQA%ClHuoai@gi2ec=L8N$KjFFq6maGS%MO6_aG^l~@N{7Y`>5d3$ zX`iVK*Bd?ZFi&Iz%N%FaF?8*)cz7~UuiOZOB-j8dJLHQ6O(2FU;4zPF%%NP&_{6@L zsZ5?klH#64#TZHMh53Vl3{YSKIlypIm+a#hW9J3S81nyt4H}PU9D)0@VRA=7gwXJp@lQI+eCpQ_g1GV{J zno#6py6g!%${7u3Az&x8CPW0YbugTTt6f8n*gcbBGJ6PpSrp51O;M4+fEOJmRnU^V z9whXmk(5Cz?Q%w=?R1VQq}LFdH@1wta|kxzLeM6vsYa>|WRF7W`zqQ~H1_Cq^s?aE zNVU;-X0=mTjX^;H8ZNO_bO9;#omDLaz4TZMq&fc;RP&PhR&r*MW4yHIPrHc&F~9(< ztXk*hexxXl&ZM0l}t%cS^j)ruUx=pG&%4CCG2*3paqWw3E(pVAVdQ+6dnf{ zYEG6hAcWL>Ep7j&!C?VzcTP>5M3$l$30Q{_I<{(LmC6yAOsQ`sO z4;o}@@non!EoxT7Y0$QAb#-J=gd~Vq%fNeuFf?6?cdP>yJCFl0Bn=oFFafMNm_iaH zw><-t;Rn~f70W*BkS>HSiJ+c|k{16>SC9EDq?)zRGJx@lGHYTTmPYI`ieVWu)WHfH zU_u?p@Pg!qL=9`D0u!d-Tg>Vu22-LbeegRzANzHZ28aO?lCVC`2@1Rhzyv4s;0m9xLJxpY zhfgqJ2vevx6V7|{EBIjNIjF-n73-P%a&CHX058NtS3Ziw_#s4S0{blff+X;3$w;{D z4EE+el4j=zPFUZgO^q9sw|EEhxCe;aU<#Sfn+Zv%!w+`8^AH3a3F z|L{m>Nu2Bh;Q$bDz@5yeU7H>QK^&A87BoQ-?0^;c91{qg z&dGoiAe|J*z|z406D;Kc5nKUf2?rF20m5-$6m}F8@YtR7fVFXe85BVYlAVyOg(_*= zgD_TZ`Opi(pfMzaG(3ZeJwv<+*jODzLq+j`*A3|JEW!wOL z9RU*L$#9WC4v>LiRKad_P!D)T8LFV1K-YfBf(598n7P|KyhAe3;ng5P+5w6l;E$R4 zRF6qr^!U|c9EPj$fbRH>ei4rzWTN&MODQY^E>vRe&6aFg-nG%($w`7LhL$k`88iNt zGiu&4LL(NSVLpWqnn$`V% z|G51D0QbATv0M%=9J%}V@C9!c1Cl5rfYg<6;zoEy8J8L_F38e$>jCE@6cg^~C2|I> zNQGyXZQ!98H3FbzY)W?JV`biR4)PSp_?-lQ}4HhOXEiKnN(0)WCu+ecU>L zE-7$;Fl>{yc3h*>m+nE(7==qE^KGxefZw$YHy}s`JG>ls+)_&&sMTs>t0@S2tBYi#>IN?Oj-LJ9>3vj!oI*ii zHeM7Vb59<%t%RukY}YK6w`+nTU~cNKqK|H&*yQ?n)zCbgz51X(Gd;IXQNJ9nvqp73 z^Lh4m_Va%&G=3Mn!Xp>7^$((3h7w39K@i&zR5HX4Z=0!049>qzyu;U@9&GXauk<9W8>(k!W1Y$#jI|NMp>-^i?oNbF&# z2FS!Ff{%Sk?BS&hk)<6BAy8Gg2&GErz8g+&2=l9gty=J}s^P|jLXr37K%I^hFqK|QBI01!w*j!H|4$9}>o1~OoSRI(@lQ+d>;Jq4id zy0cTBe)Lg6ooI&E*+GHX2}H>=fg@}Q!UYf%syNk%Md`>=g!1aA_zYj`hKRkET3`n> z$Uz8P_|&95^shAyjfyZLG2a2!G!e}zWNsIMm3G07h3y^`VqgLspg;~;R44}gdf3jQ z#5>2s6O<+FA#pX~HupxJ#qho{uM6|r-L|6F zxuo=98@cPz_!js*6pd4LJSAZ{aUj2A4Y6JB2w`w`xWorZ?1hC&#E|yqn*u41EoZz{ z&Z1bjTqUAaRlMSqVs5RnDH4eFTcR5$(x@aYkz{-Pp8LHs0WcQHkOi8lz8SetB*xo= z&pQC@GMUBS4baf6G-V^5t0HH-a$S*JWd6Fw|I1&#&_36^q|3~hte}~un$?(P-X{5^ zabB#S6KYg8;dd^OBqp*JU4s{m)S%sjbejP!-_aFB5IZC^n+0;{oUInZ)q#VkZG2lw z2U;ll9OX(Ht<(0>H^lrZYk>Eh(@_ta%abN>oGJR~yRce&pr!HA2KwpSn)Asa@Rv1Gj~81kS#y(suvq@&&LjCR1ak8N_#sgnq=%Uv)8%I$~Z)G?yq6j%hooJ=G$@{ zQ8LFJ?SLu=MAJ?;wj+B;cfT3l;j>Odlvc+mgJ5|d<|rO-tt5U5k-q-Mb$gc$DA@qF zMC2xR<`|q)hToP79TUNFd0lLi48Xz^|Cf(wRP9Y$6a0(|{@i}i`b=~pC}ca()B$=B zGXBIsK#AJOq4u~n2&4ezDNjx&oBHw~XM3xd1+k}R4%Hb{@&-sC7aE{BgC5v12S31T z)(?b)gI9JkJ@~Hq-tYJ0Ft3IaZAc>_?iQ(4q7L4}iTt zHVAsXHUe-~YSPnmo^`$MEMhq|9i&KD71lkY(E!x&V=_o{3X*_=ChVYq$YuMw7$1ta z6GoHP+nlRmlN-t}zTcgl!7PnH8RhLf37}v3Y-V5tB9y^Ytoi}6c>H#Hag98)_gmCq z&AjHaX9nHNym|aig2QhhrhlhQ{~2QN0$Qp_4uX%6t|?Bq%SZQW7btUs^?Y0GW8msr8)XM&X3!Zj-~;b7fQ>~puJ?L67I{NWt0ViHCp8$;kB z)ep%5_%7!EZx?4EO>FF^%?9oO+p51`b2+LmSh|wVUhA|0Wu~Y zRXAF(e#^F97L#Bv#xP|zRg#xz{uM-$ra=PcUL)5fGX`f3kwt*kK&UksQ+6S&qg@bJ zeIdtCYchS6S8NBhWus<&98^0U52~6mV5>J7k2qr5mZ#|h|&j!m)CMrwI>rOh9>|zh}32=Xl!-&h72Jz+gEU4d2j_8Hb~79>ci0$MJvDOJ zHIXM5hoLBm?}ilP|41spC}=iVkj7JsLq-DZ@`9w~X5sOEi7<)oz_7 zoZYC8gUO59|KXN*xR`K=hvahr$%7daa08eraWln?E{0$gcu|F=ZP@6YM+crBDV~dh zoJQ9tY-5EPB$y2l0*V7$?wOulun_sNj1!ifK4ggMrk|`>lm1DS9jT#;c$OUsUe=Q@ zMDT~Nq)il&CF7APHWHG5RWr_Zi$^H{7RsOgVv~EQlNm{qN+SnU_<$@bn#ARxTL2P6 zsDH%%AH5$_U=X`-C{Xr3>)EV1^L#e)+4cOBHnR1fo+*9c{O25MKC zVU3xg0*R6NxS<-UXKX5nAf#Eib~aKV6~4JTAr@OhC8nSWi@o-76Y`=4K%A>-s1m@V zs!1ts{|To-ftrjKX5<0`s^SArC@VD9m9A!;k=CO8)`=t#rN8)?Q0X{5s+lVGh&D+X zsAiIuHv+H9gFR4LH2|qBF@2r^D@Q1y^%P~!g`uMwo^g6Igo%)e#Wn&8D&s>YBq~Bg z1yDsvg9s;aFxrF-Igg-7s75D$(uYOfnweuVGEgL>d{v1|VnAp0RU(jALm;UOXohP6 znAr+a6k3!#SY>m1tt>jGM+%SU`me6aBmjRvfWJc!Ui}7Q0fG8-yowUZXNE)F5E2kHm zu{0}}>i?-no>`g;7F^S4UZ9wn;03ZS%c~qKvmQIMp;og+i+eC@TSKBY=DGnwdH{TY zu#K`ODQct@YZ;bGS#%k-9ow5n6opv}f5-BGf%=Xciy}!$CrK*-J5X6V0JY+=7UOkG z-a~cwvA27RfG6-FtwJ`VCb)cCxIvUXgTS{oFatn924mm^WUvHBFrtKOxNB6oh>N+G zo4K3YOe#u{dUXRpaxqg;uDhylMw(l^!-3E_hN}CzunW64umq3W1YvNyxceNjl(n79 zJBP!$y&Js1E4(@fw=^)Zw74AP>QvZcGQ^uIId^~^Bzv)oDR)A>dE~gY8wa=x2Hrac zGygEK(p9~md%fmczUZ62)4Mr_3r$9IFQ_6}ns~Z&M7+o|xWk*jmYW3I%e~**zj3ex zl&im*YqB{J$PtcoeI(bE3ZI zJHqJ8yT0qWD2%z6S-ln0m8`QSwaK(MGD}3jM>JeId-;NJPz2rE!5;j-H{b@`m9|fo zA4VK43R^1nVuC~heXa|A9M`;OYg4Te1S1Lq7H|fbTf*s!ykhXfKrF_1&;&-%YD+pk z!bCHpiUfm=rX-kqHwqOr`!<(KVVsOoWKMeEI?qpV;saCtXEX`WA;nH^8e~1 zBAQX+Teh$m0`aG_}*xFQ&}xI@f@;4zyzEE_jK$if`N_V)(U`OBr#LAg(%qje-Zj7z_ zrv}i7yro>1FE+!$48Q~Zy<<1SV2cq7z0Ubsh((NGmZ`-8yUKEBxHOZ{&i{)8mze=c z43_fP10WsJj|*GrESU#N&mz3T>I!|;`_^Gx=^uPtfWoRZfeJq1euY{d)KCi&IP9ka~*X)b^UM*jd!E4!6Yjkw6d zshSr8S9Hz(Hrq`R#vxsRa#|Og?Ac{Xt(`MPjvX8a7=ogAkiv`Imh8@nS4n7CWb6&j zTTRGhFxP+$;JBD)vE4sF>K{a)1ZdLEZLL!o7lCgwx-hlNLz~?cO*4y|;E}5@5KJR? zE!!)e-F_M3Ay5S0y($e00jQ$C=3-?Fd;yD#!~IRPpB>mQThB=)*5%CxYwJ14eXl&Y z-6(Wd6hz|-i{t#$kU5|>dKCou?cy!Dx&4~t0gL2Bg)=1Gw3{=)LNz)<)aAq8$S?`=<+^F<{-f#+*WyX)=vc$)UM^Lj z?&t*juvabWm2T^lzSKqJ>LpuVT>elR&gx`dRdz%b#!c&LejAj0$eE6DMvm*nbj}qe z?9{I0fQ}xT{xJE=uib8!MC7K3PbzVok-sj8Bgxfjg%iiU@Nyp0yvrJ3w z_U+(IUhTjhVL;AOm~O4I8Ov@>?0E~^iTi;824PQ z72*lC(S$x|4G-9Ew(aEd%2%G|__NCE?w8M3F@ey{Xs-h|d097$y2CzNkF5l=#4~4tUH^;oBAsd+SccFRKk5KA*%>JD7SHvT@$EN~t}f^C>TK;5!0?Qn z-*^t;vaboWPeEGW2GXDFVvrdMWQ&3B`&2GwQU9>=UN!ZT5A!BnblNRX48PdGxe7zK z&9OiI?vFiQM;-9q?JJqT21;s)3;q)(|I!Q)2OtP!@u9>83kfGQVAyb=8W3t&JaCx6 zfPsh$+gRjyqEN*EG*F225n#m0jVV=*TA{$@i4Yw!4B)uH=1rV9IYeB;fq~14HFyps zO0%X0pHC<_V9GS(QK(Um%4`90gF%7{UAVAnHKxXz7zepQS@y%nJ7iBLim{`?2DB^X zwzRpSM~{Obf$rVAGp0nk6a{2}_6C!weQ$T5(XN4#s;e2pfDDf&>X&E6;=^bU?xe8Q2ps0QZQi z?~Sd5J4~SgdV&kU`;yvk#uQ6XZ$=nziXo;8IU8`Z3m`)fK@_=CiNOaU%y6w3P&sAE z^32+xG5`)7v98~!bF78=5SuK*Ei14O%%CV!uuA`QN+LBlG$U{#AxyOLAz13{KoL6| zOj114_AEq(k#c}C%7{j?K~UR9O#e|g<6u$|I4U~=K}`1EyNpE~jY{*TA@D-zM;|GY zamY(!u`|y-9qcnhScu3WhSs7SluIc&kG*Z>6y4iyws zATg6uSUqW3Zmui5LIGCqG$gNv3cF3ASO9w!*Vn0l)koy}CyS5XMzh6I=mRRd_X zB+I~6SISqsQg%>nU)TbUwb@HI&8??#>mY6yttFx8ff;fw8<9eC<7&d@k@Yh0t zlST>QHcbwzj`u{TLns06j>z&&>Xbo_0_DL4ChE{UV8~{EUruPLLW(3*!}wXkC;l|rHq2hyKuyl5(A`-Hl|crum6Kv_y2piX z(L@*ET4GBn7I6q#^(*{WoQ3u)+txzH6VDQ2@S#anL{@q{8%*E=Q93jC9Wvi|72aV* z_ZAynmWTL|1|l@A*UBjgCi~tx+4i$(S(9!VhPbGf`ghZ1>Rrwvc^y7tgI!S!#0 zg2Wf|e*U4ccR@UOrWu!^2qvts0tgwD;&uUpf(&d>1`6#cSD0hq1*o8f@yP*G7$R1E zD%FMdMF)MOgTt%fQ2(n8(oaCIkwx`Zk|ZQt;RseUl%I(F#hMBdQF_txjY{^EgcU-<7gz8FB>r%PB*-vTB}haUO@*gb zh@l7htD!-pXOt9lX&_LDpd+e4g3oO*Yecl*mXL=O3-PXf$|)EPGgBBRCg}=)fW#GM zaY!ou0U57(-5XAIDhqMTe02ojmsDgUHukWG&I=pF=t#*eWrhRip+Ov#=q5b@Qe;Yq z1SAfb4Oq_N3Z96B5@_hfN8)mJJWv7=kO)ft_zIIe)FjY4={YR;Ep%0q7rImvgw??9 zl&Dn8Ak@|D?*MOn;3lnhOiyO;Ovn?_ zM&T*8e%1*EGAN)Mc5(_JT)~ywJR~F{L54fI?u6585H1!G&alxZJ`Xg?CQWxtdqzR1 z(&1SpgM}r#eYB6yLEJ|=aHt-TU`-9h#SLc3Qdz1{k5HmvgT9!Eq$(9LGueU`0`LOy znH7l2OlFvvWjv*BO$1?`rgu#7pf2K|dLoG_2L$Q~Ln0EeOpqY!0!Gsf+>{6Li)(?#)N*IsBf8x3k%q#;oQmLppl=flS)3e)1DUO?9OJ{C^Vz0WEtA4eo=S_6B!L4a=zw(pDF&(L ziw9G@k=mu$+fKDUw6htduQC^_;T!3IbhfOJ z<3>Q@9$%zRCfUW5+9UaciiU z9R6j=JrLXuLO=uy9qJ5n=)kMAh*K}exQktW@t3`rm$imv%q7^Q9Ed4_zIAlXbDXDf zpLV0~W%^}!Zh=TT6){Yr#LwhaT1Z1iwir9OL>oJDI*He4AX~c9acXmNxFolT0!Ifh zK*9T@*;FS2nvqPTg|HcBXk$~hMcDxWtbGhmjS2Zy@Rc>1a9l=g3q?55E0wR0m!xC^ z>AbKzoR+tBXiEP|H)rW>v)%bqX-~RvL4`K1>4s<|PpXbI9#3cqP3+B)d)NcScK?_= zcZSe_t&MGDEO0%iY)ofc2%6ru!L@T`C5Btv%NcZ`Z&&dBM7mrVk%*(s%5aD4!ryPP+wLM zXZx0qZDt^|b+xvy{_?~d0jQg}r6W8>B`@ny_a z3dVV3Vch14Gxog>kNCNlSMwt8%gY9nccFg9YiK1fR~7eK2Iv=#pIF*oW1 zi88v*3J%9(JYr4TJ6Q$!mfV;n?vVaAuB;uODgMhu6>#)n&HzB&f&67SB z3B3KY!E|9j5-c|%JS@m7D$t9Y$WuZnJgO`x!z`ddBpbr$;hcl!VY{szyQJ^ zbTFFJgE_=3&-+3yS~oF_7XaKrEzF@w%DfoFEcH<{nWMJxa}@L8C;2mx&cnlN*#S!= zg1cZ7H4D0`Kof@JL5xDfrJ_8^pf*HQM2Db0$G9W>xgXx#P%r0@w&lbT(#seqordU_q!n-Ttz;7gW2hpA|Qh?;Dk5;gL*UqT*Sp3ke(uB zEU0lgNZcCdQ$JKZI+N&$+jF^I;lXjsmEc*YOMAx~z_TC#g8wPl1bo!UjSPb^KmuCS zqdpWpiZVGglb_t1L2*P#=sAnV;uU3czs*3nhipbZtVkcQfqLXfp1jAMGy+}p6b=lI zW;r>tvdN(;Di!#`wOdH~syTSNJ5uDMHLN+#fXS(Z9zYohCujmZ@JX-?OE6f1k?O|+ z$&wFXuW=%$ACLj0^g=QWMqv!1mDDG{vo$yAjeT>hhASTCK>>{P%AORw=0E|!-h0qw)fD7f& zuw;TFu!4;APZ5hM5QU4Ag9DJfifF>iX!F7uZBO>hjTKGFNn}vjOhx!?3jJIH8|_FY zpb#Cs(l`)^BZOVY{&mR*rk1=Ygd`#j?!N|R6lX6wh#1Whar z0#MjfEBH<@C<5lW5cPVC9`m6kOTn0YE4QjmIN3Ny93E|pC?H`2{4`RnfYmvL%ATPL zI3R+H^L8H${kV)$o8APS(TdzD@6S;!c2>|Hw_Xf^;QDS zx6x<|F%VUsoPtki0yE$OCg{%aycQ!l)&Ii*JD->`l44CGQ`1^gHzp-A`NB>U9Xq@% z43RJbiTzKEG=eMWP9W$dY^eZdOvs^|jf5zrZmrgjH5f-^$^;eICY_mF{Xk&_Oojc< zh^xEkTwtl`)669`@v!6?&#q%~WhOpR!pQk-$OEl2XD4gnD$a!sVGwCJQ< zymisOt*4!BNusdGO5ELwL_6ZZ)&J3O!U=G%9UxPKuz_v8TbAs@tV}oP%qf?ANs7C~ zYZ(G{loR0f*wf6U1hB5gUEBIZs@TQXk_}p~jncL=!1bYzk*v7fysY5u*2RnQbxuAITD{dNwzbvd;IS!$6Z4B8cxi;T$b}bpOPydlj)Gkb3|qqa z-;NDmy7(Tr+!Zg$n}5AHscoZZGy*PI&KC8+I;~*zjZ*%7;Zo6H+1$Oj{6``QA1TBR z4~{*uQcHMAjc=)2*KOgROHZNZ_W9GE9Q-t0prZkG1j+i^&pE9dnOOI#r zHrH*GeKnI!t}uNyM;JC@8D5Vr4nz+gqWLL11ZF1pEl~^;1Q-yocKbW=We@u`MlUXx z+q+}{-Y0FnW8BEz$Q`|OwAHG_A+Df}=l#Gwo-bnVm?{ig%zfq1`yotL$PJ6;YsFR^ zcCKt5y&NH85lYWx9^dQrS&Q9f+zn(`oMu!8!hO!?b++ft1wBVz#kbSIBo40Zg;dyW z-+R+CVyVEPOD{*^f&V6EXUTo%>O*F5w%x2F!0bg(3w}*?YQ-CZ(uGsPEV1a{ZA39+ zgHnFViq71Ln^ZimXKTafc$GX1gXpx2t{aKNp#d1W zofg>N(B^8Bx=9X4Mh@fJm0LXQ>M|B;UPQww#y)**0F#`oT$V*3D%!Nmlz|3k%VXlM zreURS7!W`>-2@k00aCP1V-}9W%7r74HqOb!)PuI;jmBzMu3eB7)S)d1I1ma4>MfGC zW%iwxZ;p@ajbFwVX&V7(1f1#UZBUV}=RM{mZEG(oNaek5>T`DK>OkD(z2;UnUD9qn z+B@xXDm424W>`%9-jC8Sj%=w8D{Q$?QWW0@9z;~rB)|u{n%FAXXr*~SG#I( zdGF&+YlW_B`tEMezE9ewY7AWKTZUfijzSO)#<{(2FjZeXKE}Mx@1acYz5d#>JL(;i z?)#N+1Fvt;R_2Q3Y!bg{{Z7xBOuhroYW2GzObhVqw(Sb9iTJhg#BOH!W@vn4m;;~S zY}M7+)$tp5nVB&1V)n2GZ)~5?*&fN`ULA@7r18#Tc%07@#h_@*pLE z9OgNQAIR=4j$~Ljrk`zc`Z{GlUUIsmb%Iu?;t8$fIa%?T-rU^e7c>*AsUK#c;aC8v6xE5f~{8 z@Fgy%RyMSC*Dh%aKXTwJcXQ|QeedQjzcG+ot0toL!&x;6E;6rG@?<`DHouj7Cr1K4 z+5dz88N^L?^adV%&vcUQcTb1sZVy;-|4|$~B~d)peb?q_N64a9`LstqXRmNB zzxty~`Mt0EZcl3XDEr#3`*JqG%j@~R*Lb2=`-lgfq8&TJSIO1GO2vPBviJMkt{1wl z!lw7~-RAJ{j{9JC&c9!J9)9^h*7}=g2)(aezBlSUE`1H({M6_83^)78XL8X8YX8i? zdo*@$-v@d!#{E}3Y@;uFph$VyueXQCz|LpzHa&YZb+g>3{>WVZ=aXmYCvK0b`8rN) z%fIyAr+XFWe6ZJkqP6_*-)N1Fb>oc|AN4S;lV@)5H$vn65^x50S!2kB*{k4 z6ABG8vXm$SB!H0y7__X}vf_aR2q7c@;nSi3ojDz@v`G;t%@s?k-D%dtJpDiCy!8K zN}O#77Dh#?tqI{`sO61HA`C|$aRdrjtktNeWWpEgrIg*ctiK^*f%2IY_XlWYd!wodNIot*JNgJGn;94uEpjdf(FSV5lN+7%0 z1}AS0JDmC}mEj(c@4)V^$Yq%){TrUZ!CAb)y%HBdf(&e8EB_RSS$5_y#15zVES4La z2(TU*drV=$IeN?p&S~f@zzrcNQG>B0U)*u8DXUBy#eCX}@y!H}OCAg;xRAphA7?sr z(+wMabdigO>My!RPEu#q3()*@(QVsq%X7Ypp-PhaE#2OL zW1XkkG!Xlk+g!uSYmr*_{rAO;K}v1nabH+yoHv$TLM_TDlTIqA_`nP{NmU*=>VT&n zp9hml_B!lw%Wk;^mj;b1AL9N*1r#sz{<|E&lU*b6e;SYbl4~eW-M3kHZVdF#tn&^k zRh#}s*p?ksyQ~@t^m^-xw;LC$xC;*ex46bRw@k+$%Ks)2oofEJ?)-|cj4-d1!pi=| zJOfNCy5qL(jZb^lAt3i27rw>?M|}sVLi$YhFjv`6PdOl#4J61F3$ZL>O6eRma3u_5 z$RJq%(?p4IqJ^QXaDHLo7QK4Jq6MnVa3(O(4U$r-7u-M$Cb%KCP(U@E3=sf6{Na~k zP_6^4O*3j3-RKYq7Y;%yc2*3WF@iw~oB_iar)bkVp5Y3IEYAi^hyl;0kOboarwnV< zTT?37td`h7UOSi<4c2ypBRud2KBxf-%pembIN>28_<{V&AcG;upadz{ffx+XgBeso zOBY0=3)hu24<=w4`9q;Aj!}&s+|dWZC`Jl5VE=|ISYZQ9xB?m2wu20GBnCaW02P=p zg?Z^@mH@bA0B+eNP9}i|GzyvoW-x>wa7+$jDAo&p(8v_f;0H(m02~mRlNm^7m`RAi zGo8356tHiKR3VQi1Go@%JVSIFKt&d3h!qu>feD|O!WEd{gdJSr6ISQ}5RmZ+CJX_e z`TT$k?0E$rOaTZvKn4$JD6tsKAZnBGfe}j806v8C1t!2G4RSC8H)%5k8NGp`c(Q{f zyb*CdfPuX7bk3%w6O`^)hnr$>gLo=M61#Fi8JLiSEBrv8`UHV4!LUnxHX#gWxIz({ zzyuByVWIsjLJHU*voz%(31aA-Qi>2hDF1X+3DC3w)r=s6mM)=9Db-0CG@70rgcO<1 z+vLo=Xw!8hLk!;phBTI9m!J}YoBI5O3=Z%EST+F)Ww62&Hn9aDFu@8s7zr|BFoi#q zMWVrB<}pE=0B1r|nlq_u4vbJzB*^V0q0vG7jqB?FZZA@S$+7CDBZSvkbr%q7B`!hE9b6Is+aT47h7T5q4mOelh_F zSIDOfoPdmjCiKBRV8RlJa0PPu$HH+|*}xueP^rXQb??& zMMhMncpZ&2MmP*xxMIKUM4?RZ#)eOchzLEXfmG+E1|x@Mno8C{wK%z{IWBIPnOsPl zgcw_G-5AHZea8QIDw?0}YBfPZ0(!m2qzL#_d|eZQhn2IVT@Bf0pV_J=7Bf2N^N7#D1z0#ZV4woQNRTK~5~4GQrOTHvV|JQJ(~mAoH*;EIIa5%}nw@;c z97;513JWjResEazWCfEU zN0xL8He%71c=PJrxwq0!zJ2`!9!xmz(Gn+caBF)l^6&XCHF^ zZI|1DD0XL7RWAh4hYJv|#hSGINmkV&HR*{0zk?5m*DJF?xi!2&2 zfeT^`k;4rwWI)kuL-q)pj#?fWTac2$0Ej8)q8C(zf(EBL53M^3*9upBVJh&T9FtQ zH&vMWfl8s800?&Is(J|`hoX%(|LP=lA>@Dq5)z!?P?4Sk;j)^y@wUy<xQ}t zP}R59e#xz@$rYTfj2>Q4Z-uES|HCZ4q<)u@qcikeN4OT+FCwV9Gbhf;j35qE+dajlGL7n0( z9P!8wHbMW$!PcO|0-vi`eosNB21zZmxz!DOs7jVV8dhp;DZ>*KnyLU$o}$00!zT5 z1kjT~FJ8C97LdSQPIQfyxb!i-0g6%lGon?h@C7E?k#1>Zfd|DW05+*mETW@bR2sE~ z=gIJA6KjMBW_Ul2=?`!D^Of{2BuGrvafAih7;XCG#3A5-fuqx!BrWoVUYtRP&nqJp zcIZM64st)`iJa~#85=rcGLr{L*&g}D!uH8%TX?%p1TBFApAE|qU~FYBaWuOj3elCc ztV0uz)5uCiyUqzIrCAqPab4en*tMgx0vM2s@!6 zLUJARmC!C(|HA4q6F|;tfja#M66AQvE_WOu=^j}?fy7b-W`qiaV1Sg--Sd$K?GlG_ z^d3k;RD&5MD3W@YP?IG{g9(^SYDD!ihIG?}H4D`X;r1avO;4jJfuK9ngi=n{s0^P( zfzVExnV8D7k@kZn+b|W<=IC^%x^ZPnd|IU;u*OPc!IDUhilL^02?SE@4}G2r)!Q(% zG##Sq0Iqne4Tw$-TIFh2382)EBDHZM6%bj=il}oglaG_!fR)JgRy7v%p!dmZFxzO? zv&uE6B;~7KzIRQJGHn70j8b9U!baR7_JgHEj4U~dA%;k{Fvt5QW8bJp6bwNIAqZv2 zI{R7C|5&SO_*ZKYS(-+wV<0W?N{YZT^ z2FMZ{bijo2uZkB0-J=a~QihFabxTT3A_mHhuYt^4hpNTwumP=)?do=K`Y=KTrNbU( z$=#ZjVjy)em?Z`zhPzPP$F^*~L7rxkf4j~Rk0#3Jo8%OOOrN8)xXgNe@0JfuBUYoFUUrgMS!YIbMM6kps7^1=YTL1tx!B-4|928Y_7RXRw`SZ(SCas?DQmka zhgX5YN_F*&D`g^TG02^tD&sFs}#9feIRSJYaXF{rV{8A9ZdV`_B` zm}%EkR{sdmuRe>g_jDGc9zfQ!o&%F?-DP=}>ZQEiaF7EfC}8_FJIq-QvS-Z}qSkNJ zjXeNsObk1P-PP9)a5by9-RE{cjV%yqGeDmSM;1vl&h*@K$$7FVi%kRP z80MSRxX5R>1RdOp2pU`94=B1C;wE7RHAobjWMl$vHh{QX7>=UAPR$k3vZlA56PWKk zr@d$93`v;K4t~IRZngmN5N!+zu4ra4xGslsLPAU_e@oI~*`qJkJf-2PABS%;^buf; zMPMHQCFEc=q<@$vKTrfV{vZa@769#=u6I0-Hg~(PLaM8e=6k`x2)Fuy|AYV_d*4`% z1Ih0?4}fX}8T4KZ@E<}|lHJ#o60z-poz(6#K)tFTI)^rZ18h-#4R8d<2PMiv2IPV( z`*8!n=XTQ+^ zmSgH@kgU~nq{UoOF^?lsMC#RGmm`t*7>+Sn92%LCz_^cn|5brB7+OH;Ii10+Jy{86{>-0m)STWqt3MSaY|`iGr^S(>}qnQC?vdlY~_Py{mro81OXu_SL#M3?LpDydkO!k46YpP$K;5qg%0c!(=XIRPaCDZ~TB zff|%H0r`e?s|jVD)+g8#WF|VC%BG!7S(8KZnPa!09|ngN2}eZG13Mrk!bV21|5YM{l6_c$himsFcj;dc*9f!*lPF4` zW7&(}Xc>Z`rgwm-C-9h$l0dInA0<(xWkDlhsG$4yd3nl-p%AK?+NU^bmhZWwD*6)i zqnU=9e~4OW1y&h1Fd4^MY}8f)1wm)UYIM;tqBylx@5y3i>7_5As|seTy~?YMvJmwa zR}|)sZ%|}ZTBXSNPlsh?mAW*znVxwkrnb=;W4De(120#}bt{r6N%}!0sYmH3te-R- zwV1CY(=7fIlzBCf>y)0HC8^W6OlpUVHr8fy_^hiJDV|fDbYiesf^>Npt0^O`59_eD z$$uxCvdtx0D2raPLLo1!vVTHgGF!9f{}Qe-3rCN#1VK;+Jur*zNvETvbP73DfLE7r zfwT}yhX-ew4oS1ZifQZwwWrYm_!=6@)N4w6DJFnlHjpS2yHWlcwKm(bGh1h9o3=HZ zv!Y_QWs9@Ka|B1wm5F#hsYRiSHMT%Yu?@vqEV;Ic+OBL$tiT1EWb3v$3%4?WH3G&s zQuB1OsDb0DwkXR5iaB`phhmz0wwya)ATug8<$y*21Y`gNMUaA4bwI*%jtkSeuKQK2 z8@u8IyPpdrgV!eRShEJO5OP_u*7Ca5!Kes0x4=ugvRk}4Fau5y2Tjnt&N~K1AcU$5 zyr5gX)?2&Ri@l#4yH-R5kygDk|GRk&b}CpJOrBd)lL3Dy&;myQVCUPpl>5GvAz&~- z2F!cEVUWM~>jX*gMe;kp{~N&Qn`#5By$^N3tUIIL3%n5MjA>Vck6FMHTq_fNyu~X% zN-zfcyTKgHyr^fvuxq>_Ji;Vg!mI0VDEy?|JHS%Vy7tC!4}6CObixe$1|ST=2TU3D z+rd11ze%vU@EgBD{I9x8xVr^sG5~~80=xX@x z#a{fM5$n5Q9JSDC#N#!=HPX7g8$M+DSZ^Y{&pNnSdUqy(zjl1bc(4h1yac>bw5x@{ zGz>W$8^^H;GiV?#3{!L9{|2(=wv(Oq#?ouUl8nRC3np5O$C#|gd3=C=YypcbyMTOQ zguF&FFf-O$V7tOc7ShLJ8$9H*z6M;$f!tjhT+3VR#hQ!*ZY0EL%dmg8r84Ma{%d9s z^&#N&$;29xdq)HPYsCX$Zhe3}TlfiMz)ATWLzkWHlK z#5`%Z4`%~I@B?M=I^BF%&}?c!kjd5T#Y->(j_gBpYpw9c z5C?bty91~i%p23hh?~LpT+wl01g;s-@>q2K9LN0LF@a+!R5jqv(hQR13qxDc?;2- zxC6Fq)41$&xJngMU(*GlDLKhV~=Yy^%2(s3`zpd(Z3tk z*C&QX6aym-xfGkHGGM=k&BZYNWIuf&rv$d9LdLqKkZhoWK7hH>M#*y=vey9v?xzGh z%D3XC))|2VQEk&@(2i*^aUo4!Qozx%{n%tDyf$C~$(qogEIe37U@C?f#nnrXxm^34 zV@P1wML^Ig|E18(bf8nK(a7zUGGKrd)!a(;y(jEUxVQs;Bc4mkCjpz#h27iJ+6~&Ql!rP4LRIQA3hKSB5|>8#NN>D-s=pdInc%l8sQ@{;II+|Y@Nxlx8JzvZ%R=Vb+pIpxbp}4x4*EZ;ZU; zY;NY1&R#-tyjQo%<_NO`TIWDA$czr)Y@FL_$KlU8=_JZ=u^Gw;3bM{6jj=x5Qf^cD zq0H}ktiwq9gkt|8%saF=KUT;&I~XS4-zI^@Du=zkFDgG z|A^PJ&GDNZ@+mv6rF;ZSJpv|g6^$CD3h(DG-||I?YuR1rx;~9@=<=HrR(KEL)2e@=uo-{2P0d|lTVzx8#l z?Kna!5FG&N-brlV28)phFzp6^-}Y@0DGB7|=&tS5TY)|Y%;QVuQAEC&PWB*$^CFoB zfB(i&Px!L%`Gx;6H1Gm#!l*-^>X*mWr;crp-}eixXXlKGubs_P2=Y+h_CD}Aqw4vf zZ}`4KK9(C^H(&7Ig3w2!V46@7#W?%w=zxvkDL(2DxcN zaKyn2AMO-1NJPev6bvO!q-dbTjvO%#G~l>E!AFoGJpynM!X$@|DLV)}$|~kJrq7K(g$6C@Lc)NcHrK2Xn!&;bH4~&x1sVYAhY}Em4p?ds;X#EH zGvdg)u%cI=J(T3Yu>(NWoNv)Qj_9}GZ&B16W}3`F`JIk)cRyf0;Dot*k`{{-BQDF-G@ zxTsXbf)C6j+E_!2$66!T7QFJdL=c)L+Mt0V&1TWiX9PiFB1gp4tVt?XO!e(-^0C7j zusrj11^9hEx)0tvp>yHBJ#aLB-06u8Y!lG78bsjiAgf@Zr4Zukzn>?Sa3 z2n^ZFPrUJZA__0{D!a_S@_MuEfei5DEwYgu>S2fe{A(;K)pE1(sFiq_tpr74S+Kze z6?sq-8aVKwgdE-oZAd18lwku2Z+MTxkX$p0M-W4_YdzMI8w$Cr02Gl$x!CfdI>uzA z4XPX493jU?Q49eWIrq7xv6$xl=vq>hFlJ~L6#Lk-nZ&=SS-Qn{);rBpl_ zj!>e8P7{q_)K4G$aYs^1sWSybjH<9ADnMo7Ri9*1FV;tg`!WP#yVO-DyXqShfhf)> zP+LxM!g1R8DEM^Jt3WfTgC;eK!3I}Tm55d9aM(@5SHsK_%h(7F&M<)en&ew>RU%Wo zjC$ZI(sn6!x8ixd`YljV`l=UTHg}T*S0veW?fhor&cZWPD zWcOl>2fT60csT|#hzLK>ndF9s2!d65zv9c8RZuut=!7l@c#+l^!zW3_R%(_BPPtH@xrZdEd+mg|>3*pJDEd$|=o6{LTI-*)rgpw0!5*`45-FBt7Y60bj7chp z;NT&7OO`{*XzzeCbIs{}p$aYJQ1@XDCE1&A(@&>@ihp~SzS`LspA%)P7aXDpCakam z2pO((+bkb+Fk|VvgO55Z;`=CGP~>w`J_^#eZvONRGWgo$N-0XQWyR%dB1kxd9qMpE zI~)QD;Hgt+!sG_qxdu^_8X2O7=RQYd&?@muUQKpV|347g>PR+F9S4;Yqr}}ORX_Mc z9UuV+U--fkfA~WZnj{s0&51gEdV?Vfg*Xy{Xfzot9uY^DFz3mS4Q~mdvyy0}9!N=K z=4oQf0z{iyZRQXz%)>0acnwG-5IX6*UJ%-lgSf5kh)C>+1Px=9_7%}{N$emKL8yY~ zn9L|J02zwx7(&TdtZZ3?-9mH_2~TvEvJvzs7(dBnj3MM9LIruW z0Ww4a5{oqFEO-ezaK4U~bDCan@B%P>3gDjngqh8TRn39kPl*RY=;|WnPV&LPG;G0= z59}Zcax#*Ud7y+Hj^@9Oauip{V;O&lX8`vNv2P~*i$6(+$EEhKe=0JjOZ`*=9Xx3R zL-@gcTwnz|cp|5>$ipL<@B+6TOQ=H)*j`Yi%!q_^QLpSL^XN0UdCrxsQf1wnt^=M^ zxH1uH!DJyo7N-ux;1hPB1SBBgi8|Qf{}T6o95vGie--Cdye1dGy;Fi!bA0ueF^&NEEm50T*QAEvN~8$RoLJ5!2#RC!$FX0LMx zxL{J7A|F8N&A5G~>*vI!k{yI^puGbD4SoY6>zb4j zRKC;2i3^hI*^vUJqjijKb?-V&0H7cV_j*Xgh8bQo;s6y~KuwM)q)~(RL6# zBfPHEgK*RWbLChnJwlhiOeL{Jq(EVp<;emzAOcOxdxIJzAp@1`YKE%!;9%kSEbxrp zPx9D2_@d;#AI|LYo+-8x^YzAo|6JMmD%aioflLh86o?Xl7`+q{WRPlWU}b%0;XsOZ z0kSfxJ~4<^{Oxzlk`Qr!`MSx>DFL5+vcXd%<`t#gIe=MK=tlXh!v8 zDP|_(gxgHrmBv@nZ8a_#VYq?sATmwChfrx>`X@&Iz_KWaoa#%}Rt{ktsd3 zkESMcgcO_E{;cIKqZrVR`x2pHRg(a*I@zadVzv|=l-^-rozQlP6SGNL)>Ks}wu1%Oda zZ%gBU`Za~?{cs2Fdbm?VOA^p)j78{wh*pw|7>`#l@im|cieEJKb%-$$1!42 zi|Rnj+}}f=x;BBQaE}XTN?H%1m~#d8ql=x;WS5(({buoLMIE&EfpvK1R`QnCQl$a) zx=Qe#cgVNA>^+P-;^(v3d;L((_7wTKreplomjAbP{2=aFC{+EZS$}G+0bZoDw|v{5Ntb~`;P<7MQIAIt zcd47j(8AX{uw731gvs-ROpiTM<=_Ypdu}n!A6I%RulpLQ(nh^se4yD+pz?Gd>C|_; zx%)faQdv8!L%R-AjOd#_j}ozyyFSGmKiGJvmD|7K!$1F{pW5p`ZdsJ0A~L(X7?lzU zDG0%u`8>OWrup-rG>fXzfwu^3!Gs#MpfisY@g|nw0ULC;Enz_x*uc*s!PCkDm#Dm^ z+dLC&7t9zv$3wy`(ZBZczJ+PA80dkAkbxH|nzP#rVu>T@$v%&8K4u%i=%_C@A~UEW z9MN+-E^LmwKt1n^LI0W|g6d#{i~uk2QUfbA55U_&{OZBMBRuiT0zeEzKy<%g39W!J zLlhh(`jelK>!Cr|J^+#?&Ip`d@d38@fin03@8E$5kpUl|EFW7#W?HVp!8zM=y9#VP z{$mfSA}X7sfH8EA2*eu+G^H@JfH^dQA0UG<00UqAMIgWz2`M2IArBQYoYYgZFI*#% zDvsY!u7?qmSUkBIDUV0Q!EDN=*unu`Yyv#^#$WtJG{A_`7y?N#Mx5Y53<^V4+_+_I zNB`0*{HdGIvp0en!VheiugQU33Hr!T0{^vuKQn}nxHJ?c{K<%XMNR8Ct=u{0#L86cLes#_&kV;yxPq~y0f#t)JR||b ztb!vj10)~<^?T0ML?zx!xw{;cRt&}HL`J;yIq8I-@fu3b{6!`x0xQVPl4P+!39=KJ zqY%)6%DK9nNSD4)&!(cxxrD|9iBGPCF67j<(sQfafRVl=N?=qcBlsQ;l_}iu5RiMG z#1t84v@v zBq;G?%m$Um)+{a=bWkOm&xw3Zk~259n1US*12X7QP{@T3-Appbu1z7)gfP(-s2sPj z(Elp&LYZ{Z7iBKMvPdbNQrYZD;(ANTAS8Cmi2M{tbxHvpU;<=df`KdpOlhd^ynq1s zO{I|%?P|}EAjFC66stQKZiznh%*(f2LFTE%|yzsamM_32HjNlrJU(md^&W4t@Mu*9+a1b;*UfkXl+!jbYrjPpA-0ULr` z7|e^T$+vr>)KWBPBhFH+Q|Y|O5Qw59(9-L4f(>N?LnTNU7=k0gp=R}?BC@UFSc?fA zEu9O#3(Tt-q)pX4oMr>oVC5vE$y z#Og3ez&YD@N!!5Fr}C5#El4A!c#b~=3FNw1oNYfi-C0CbLCUq!f}=vw{MXCV*`vU( z;H(`q69GHQSGtX+BqOCN?JLmL)2^kbh!~ihq$Uh)jzlw~Mu@^(*e8zTS^wlxUFBTe zpR3%z<68Rcn%AY-+oh+T1((~UnKgM<&k@d}eY(A2(#R!V_cY$cY|gIrT6ZiiA%L_! zV9}z2i{$bYq>H0o5d$fdRyTCL$Nk)^wLtDwGVhHyOqJ2+SQH-K2%cceW!5CU;6;o%z^K3C zEg0b7Hp1Mi4olIq4FVNAPpf6n6rLs{X5sJ^-+4q!R8$!prNyJ$!~fkqT7{IWQwrYZ zx!LoT<2fEUq-bGpi8Q_~-}$Fn&|(o3&}I8|Mv`Y~8ZE@g;#WJiN^t zJRZMNzTo4O%1X{)H?ctV$>qZ}qG!d}R^E?amQYc4*W}#;NOoa<^$S_1)y@;Slqm^q z8%1sQDo7h0Ru4Lk zf_oO&?6X;lK4%p!->e*I55ZQ&9L+Op%BZPhx!@#_PCk)F=~~X?Q!eRfBTmQZ!3lzC zAEV}lW>hhLXkXUpoYs$&v0FkGG6TqDg;v|RkBf=hkgmGK}i~ z+hk0h8ds(dy-Q^aW~!vN5bT*>t6UkeMrfrjYv2(h zLA>^Ay6$BgUTfkTqzCF?rj9kfeYW?bNx7EW!meg)4QRfFvqr|pJ!WVyX3f?#WHftH z(6VOG&aCSKztrB?X3pHuZZ~d~G}?~rNT$)t{^|?G#{bdORC2>Uw!UrD#*Nt}>@McW zPrW~WN@c3PSH!+*&n-aC=4~dfY@5F0yU;b+YQvT~luJ&M*h$3b&;pqlw(vIzA!*7b#Uye9%!H94P=hiu;3?)cW9N?}DpW}7wRnALn zp<`_S9)Nunlc|0l89y=;Z;rOWfwoXcehz>;3~LUj*x77voZau}&0opJZA}3Hq-_Bh z1Dg?6R2>O0P3m0areOZ{VBr366H5&d?{UcN?*E|h7%l+LJo&^U$TL=fu@dMNwi%`y ze?}KPa!P4(F+WTYdw>8pbGsDS-Dr9DK z@}?4Wtn5xzg@G#940b&e6p)fz5yLWE<#`4kLO*j>wQAH}2_@HM0eRql;G;Q|?Z;o-pJLzEG+mt8x z&W2o#r}go@cv=(sfGhc>cY2gB`ah5LgU?^4uQi+u4RXnuMZ|5%fo!|PNSAqLYZmB2y!PxtA-}b~W zY5*_%6GUBmrSak3t2NA11Z66qgZsbV@HTno$iMd_)BDO-ts%#GxJP=CKl#U3`{EY3 zkw*ZoH|5oydIALew1@V0Z2gCP{r`q%e7H2~)OUR7mE`MQdob2i-pBgsYc%HG^!TxT za5c`~r*+i_e!27b-oM+MBmTGFS;U7upf7&i&#>eV`JC^5i;w-MH*TYre4XE$^0)re zcYyIgDCkE+rN?Q!4}CBM2oWF#3OHcE!GeTOI3QH$@F7GB8$zfl81W(kj1bj?c;Hb& z!;lR|mXJbGAbH6_^I!#^Vc`lzu%T$orwSfA zwJMWnixPtG5(a!0Xx9~9YyVaxdyylHwi{1U-78t`8owidBCdPaXjuZES&9XHlr!qE zNmrYUY+7+*#wi?Qj(b@l=gPO$rWA>qu4l`kiDK>9pmff{$^$dU%XEVA;j(E@9-cEd zgy_4~@>|?H{{NPb}X0dCJ*$Ka@cuM+>?^@LPH4 z!FFH-2`*qBX)mcK9EA2sXqN~U$Y)=D7w!dFaS?hLA$A&mIARxk5U~Sr1`$}7Xa;UrT_O=;X3LiotveOmIAAx2H%Cli}^ zvhm*$F*d{)nPC#JsG>9CnWv%xEUDU9UM?ufpQnxar~^{?@PQ3CZb=@Qb7tz(ot!dY zqn>+AN-B>IDtK9-g5CgTj<9w`+?A@P7pVo~{Z#2`kJh?f3^|yP0a`}!d1|w>?ujL| zY4r%Kux}L$tXrEJ>zxd6WD%`uTUm;rwCSSyqLm+Bt1g7uqM4|YvTiqQo9$wRLJWGv zSnho1!mI8H)K-hGy9N(@=&_LMiD5EWqV094)~L9}H-g*iyP* zT+K0yfuDw<_y6+BFsD3o!?)$Ig_+FASTn*OPwQH$L60aiP#6&H@^32tS|ZbF^6_-j z>a8U(jwP4u-Lg?&;}Dk>3dnALF|!2m(NX?u_Pd(RmSzjTISsWOP{>^c6oLsL_u6Xe zy?3A9O1ARWSnz<#nTco(Th|r_H#6F0Gp?i0kv~?l)_K2h`P$F2H`2vNqCj1%oBbqe zTUH07j54RAf{Gg@bXf4ogPjd>rs8tzGv7l!0QKQ)(G@3yUhdFC20m>5FlVxxy*%?~ z$Ez4?J?Ey(c5PbFql_b4^xF;!+)cdAVa0>OVu6vL%g8XR5G{@ z91;Hk2>*0jQ;*z6GoG=GQm}#)tVjj|Z=fBm2YVvUx4)7C9>*@`=m!X4`% z1qWh)3hEis1!!QxC#G-(COBaSSNMb#dH@7ue1Zu>n1V5x-~kyR^a?(h0uXY53~C~U zn^uCt^^BqeDWIjCP;h5TVldAf%m9sNw2{{Wa0EUna;UyFa1&w26cc%xP%}ELE*v+BESbF zh(WgHv(Rf<6a#nK07ds24<7$g4W^c29q;gAGn7$B3OzMJTA1n>=6YF+T44;Gl>t|q zV1*$7L9`HULKP5))@tSMJ!T|{gxbDrlJs<_yaLy(F14@IHf(A z$PB^|EIBlx2o8NH6M&FW890HW)8yzweZYhz5a9|u-Dc0gCSsGc7f6~znY&uM^V^Ee zWUy@+hA@m#jAhU`7|B@0DSF^O3$4+96=~Ut;NVrbenrPZv7Z5m%!9J|DkN+Oo~H0Q z#eO~MHZE=pD*{NpV{T1f(M^>9Q;u&X0EVo1UC6Mt#Jr zSh(S&LoMn?BO=o!9yO}@X%HFo)|7Aw2mm4Z1O*2GbpR{?0002505Aan2>$?GY;Xak z;1?*35cYv0LCyyVEaX(tl48yT0|_!V$o1%jfDQvNs6gO=g#vD3SONkc=*W9qtXTpXA9Y9>rm@)#&Eqh9ywArhxS5RO( zIjXt>LqRMED3Sn>B14N090)Ev;4viCwgx zfhm^YpyY>%B21sY1qsowXDtZ{H5$EzG*-`j@2ZI^;x1j+89DPc=@+u?+qePeCOmiZ zfgqV1!nyFU0aXmCQPWobghGYo#-mRT5#lM^=&%pShE8_3_wPc%^Z!1e@kA9LM>g#E zz)+y|@>ZG4pN|~^ToBbCNZ6lUJNemVDInm0Scqrffw@uPnhj3qV1fz5aWH^X$00Z0 zNE)=DVSF5xr9y@T`ZdsfcJ=3QnSqdS1hG^P3dPmym0D!F z14mnQv?;h^RhS}o9>DReTN%n~Z*jabaAbkivdYk;<#9XWxst(2B(Q>HI#V6GJaSV4 z4hM^ouYL)c?Q4M+39zcv_M7Cy`NGO=b?PN?!^VUPvcnt>*Ab664maEh5fjZ>@6Cf| z3W&iCr!!hGjG?x#!5ckA6vh{X< zLbGjPQzruKr@U_Z@B<79AS!0InsU&0Jb%kf#SVCXU6Se3^_)23c{lDjc>jjn<$ce# z#b(X2r}Q>XUbU>X%rQUGh|xH@urcL8C!Tz5uM=%5$^tk2gAAlaUX}62Rl>m#!6y*J zBQYf0@E1Mh9mSY^emQlBDB0M0^9Z^PtG@JauRaGoFnYHZYw+i8NQe;~(_(OQl=b=Vh7Xh>5C86lf*a%lG|M9n>pD?`69A7`C}4oY z;?lKokp+e!;aLsOwk#D%&_K#E5$!ber1UIgENW|jtj3iKO9cgmfeV4eta!!QQ70mK zOCo9x^F{FZkbV`jm~d3zO6Xz-?Ghd;6-deZ<%@VP)Bpj%#vIpW(lP%EK<+-N zz9N2rkXUI-0;L9nl zs)C75c%@PTS~S}^P3IY3@^EN%@gOm4)c=B|><^8l+E28kMbLthC!Pn>WkC^g&pzTs zn4bEkR-{l#LXzN&1?v?v3CGd-g>#nI+vR-h$xRo5bf2-QTL#rYktu=c2^;OGd}0a! zvQZGGHmqkuzo<{o91bcSI6{;Z;?nrgRHj^9U?nM)vtI60f;|o7a9*0fCshxZNWBpI z7zizeIxs|4;A2T`BhOex)Q(fN&jn;KgbdK&qG~Zo8kzOgy3TW3*Gv@q=;^?)J{5j1 zYG?XdlP}}R00uuWsvZ#fufQ0*3!2S@VKb2Ju%wU2UI5(pUII4EnD_zsZ7P9SS z4tI&`TH^vKyc1)C1tfyNNzS#SX>*HS2J2gma;Xm_ZEdIY3eI_jiN7tK$ZX;@+Vz6h zoUBPM9hs!f+8~&|nw{mn92_!?f`*+!P%mlQX}`FQ?F2Se-T%S^;t+3WPlhA0e-!Ho z&B=JhKKp5j^ci4@vX;g*9?WZrj9*iDmsD+5gLpE9m^ znliCPF*-FCMIRbtzp49fc@vl3_C;y4V{_Ya?>jGAj>%GS zj4VCz;IK+KJ>)isdjAl@cM1BnY>%e_`Ap=ko4j9Mo!U5OrW3)F{n&Izpye)4lX09K z*^gsKLQlq5&S!e^)1^4Hchw5eGd|Wk$xo`NPGnpR$!tz;mgxmX8>xi7qvUiqv$dwS zFcBJEq82)g08S1)TO9V4dy(oImo(d_)=3DL`C{1PC~)0H@q-mO=#MGz-mPhXf)u(b zsg|h-azJ_6#UKZ5EoKf{V7Ac8KsuEdDR~gjnBn<$@v`Fa-}&8i-SMeWbt}V$xFCib zAc2IfF|Q4fupcPkfCvIu+CeXOgOe4U^pXBLUh`urEV28&M3 z19NkJ=p+U}uzS~11C5ddK=Xh>7lC?(T(y&B0Y!i1c2m`7eH(OpA@P3Y~JAecq zPy=ZADowZqEH!z=p?#Y1gnuO(cE}r8I2ti=EoSl}832D-1Y?{Bam|;902L>;mQ*Q$ zdCwtA82=#yNl=FP0R@($LCM010pJ4!1Ok;|GO+SycL<94q)tLd6>oM(??H+#qGh4T z7>_xLU?Ih^J^=s<;xuD2{*zi~ZOD%!h-lcO^bY zOI*c`xpX1{=@#Y~8TB!c&3KL((UA)IJbqPQ7&s{xDKZy;6iIgxzg9=zcx96VjMVp! zfB(3V`vsB(nLX{e5ioIeW)gAnCn89IX_a*OJWmLhk`swP-~>ttDjtD~1o06Vp<-qC zZi6{kLqbi5`6+ElV^Zmgis_g=xp9zjQ#KF;qp5CeQBGFaX{|?K!=y*0`2ej6l|GT0 zROy<|sB4VzM+{k<2`3#!a0Bb%joTQOawAMHRZY369c4q97x!Z9@&1Z`4WJbcuA=dDzyUz z*deLaR2Mil0@j;kr)a#nUfwy5kg1a)$(VGpjGw4&BT#BzM}E&Wn2ObVMv^paMxW@$ zI@cwEgBL0j8l3#5nojti-&vQB>7oBcc{d;fQS>Pv!ea%1C^3ms@+nu_8DOl2kvR#V z(|1|Li9H-TqvM&OKY0MHxJjv`O)_ujrxHl`3j11Ru$UWI=@0)3e?a_=&v_4#9;DU)-#rjH4w?f)33D`Apx z#*7q-qZr0uLRfp|_7wCt9B7ehC~8;Nb(0lHEr+z4BFT>9>8PgnQjzLIEU}I$X{b)q zPs~)BPgV#q!go!1ZYZaZx9Fyd+L~`_r7y>-#|a~Xa2f`qb^k+t6A+>V$7@;G2Z0xp zzRFRB`KyW)tfxAxsyaUnc`RsamX6 zX&OglNjOQAM7aY_Q#V9{QMMIb7+Gb8%Bw3x1$wBg<@l5qxR;WKkMTNC5D@}P(=^71 zG6d^mX-2VFH?jG-u+lk_nYn~)Mtv2VWz*@ecZwZ6N&`#5XIAu=BLCNML>77MrD3=^ zaX+FNZosnlS(f)Qon9h03|h2nIkZ4)TvNE57>kLBq;H2*I&%`Q7RHqD1#ryrwD@R~ z*z`yDM@MSqwSY&oFs4E4k+PgO7moJ=?53;D2eK7Yt^@a}!e(aFh_p#tWPWS5f4jFM zBDD75TxWn=jV6eJYDjWYT3e{Ho^%6f;4McGwml0rfP1t~8==b@U`i`CBQrUoJGz5F zx&osFTtG;BODpCik#Y-nx&;SBaG-Zfv`Z^qK`;YGPy|L$22e6aT0}dc8@$8IGouS* z$P2n+^I{n`G9^HHKxMkcp?WeWT_}3H9{MIC@FcMkxG~ne!vA}`C@=#~&;;fi22*gp z=2g7OtGs>tzI^+=;7h#hYd1CUh01HZntEcnGbDtXUaSkgl}kvKC%x=TzsK1mfC4DM zyqZhFFg!*|0Kw;b!w(Dwj?%##+`%zyw&(PXI=UHbH@_Ujep@JkIWog>5hcsT!v}1- z3*5jtY{L*d!AdN$4<=8RdyEN-8g=7^slysv87uRM#I~586@HoD6*X!$9Rz#+S5YP*E{7IbXKw0y^Fds8e+ zYD)_}G$$=Zq>0ry9cEl3Dcodh_qx}a0DBq(M34g`%*N821GQYqluQGk499;URbyJgWR6UOGXoHykqiIM~mEzuH6@W-&}mHWcQ}-jd3HOwQnD zT`d|NCIEb?JIW?4v~-p&CNRw~9S1}B#rpgDwDAT+cJaCd~XY+e3Zfi zUFuvLOVC40NyBslPz}>Ta0e8qCpNg2eY|wQ`?5)?wb6^g)vMAix}%!Pr)w=q!!!hB z5Y-V)2AenuUx}kUOL$n7twpzfdbQP|I@WuDwcns6} zUDM;;-%`iP`5dhRZdVz!d+{A8t+CY^&5bElKn4{2iZtB>H(SY6SzAkxvF6$dj?9eUN#nW@iE9xj7Aah+R zksa;BHf1`Payp}=!LG8Pdtr)h-t;NL@@MX$>E)I_;^AF5RP9N-UhkRh=NlgAfPCcx zl8=uC%F?~(7wzs3nkDce-|Zw0dWCFS%x z^9LXB{93_to-Nf5*fn(q$bCFi-=Qqu@xc7y7Z3BvCg>T{MKxb>Lru@h6ZL`i=wy4F zFc5yneO%1ETsL|20dv6M^_72~#T;+)wE5kso=0R3<5;f|NH^bY_*`@pjJbI8T~D882OZb36gTuhAA;mg`7*pj&v@pqLsEWZY1-K4?iYRC`?A@ViI_Pu>;mwD( ze$|@oY4Jpe7J-=>ReH5)W5+oPVWo^04hR`=KH?pF0U`&!09<}ft0sj3(Kk&q=p6F1 zV$M!a)NM&KvH#8zF+CI>I`eYxiA7nXuDBO6R2zt6x2<7<#`7CIhqrF{n)pwMq%}IF z7!*N6u^wS_b}^fHR@=C9Ck7#%cX_&$f7hnf3aKWYIdTjZTKRqX+?ES3qY^q2LA$hI z1MEBM#1k;Mh+<1`Jryc^z&PM~GcdrV5_v2QtQ0xLzE)y^YKI|cAmG6cor8`$>Z(KQ zK#odl4>ac5W3V*`CFD=S8sekS!U@WIPa^mfQF2MhI;3r@RbD)*KmP&~a=aKPpwY$| z*}{=14#88XEFWRy%m*=!;9|cFh-}l#2qSP{PC2QhWl0ZVN#wr9!eokw9)|d`%AQ(? z$_9ac^#75|1hq^pCn?y<5~7n>+VH0gIRl`IKwUsVC=1;Tj-)zEHI>3QLgUj<{OF>B zP`p^x^dP+uoNa?GH9C#eix!>eHuq3Fq0;kal|juN)Dsn@Cr?d^KjoSnlr=&1n-bQF zb~vI8C6 z?t^c`s+C+@%MCJD>n4>Xu6n_pDcCGSx}hrz*nLX_U?sM9)l{!lYT6x6l;P8WnbiRX z98k8j#)K9A@TG&}B{s%MCLuNAvm|YItSHprp=1LHgLvnjPpyy2D;tZ2#HR{QS+-7% zHvceYnPGxL3jkzQ*I}f2rjvu4#RS@h9Bi=R$U?(ZG+&XES_C^xd)VQ*CQ}xaFgLC*Oo z=(dh|h)~F|10?b=3nX{6A^>ke3QWoMbflcYaZiT}bWH<~=sh|?VQnzj zfYi>&D*$;$gHysmBs}p%C_*t0qKJeJu6D&M(&AV);MT^_=##^UM+B_n0}iz?LDxM{ z2tKr3oVfUaw5g~EM*Ly-e8@hdfguu*fMPcCn1?BbL3nxk5$9HQ$jlLlR;!aq7=K4b z2D%`84y;{Zp70%xd0i{u1Hw7yp+KnqN;!!+_}%2}W?5={8xyC@fn75|zFjoYzF zA5OCc3CO{lhKpn_ciBmU)rwSIKmpp4ut_t`4wA>LoG>$XIS^@p45KWiDNUJ5xZ(4a z^}(i+cDShYq)u=L45vjd*|?mYvy#DzqwK~;Ni=dSnbJCg+Tf6ZB)r52b`S+1{Ao%+ z(9dOYlSNCfnaziON0u|$+5rqWD#+nd4-pMpB`YdXi<&W`hHPK{E>^)A@BmX*@SsVf zxko!N;Z*^1DW1q_uJI>Af(ocj4NCX`h=bsQcP5v)(iJLs5D~g- zS=CbB4IEokr_3C754{@AFwkJ<+w(>;p*_O^526wQF>oX~%m4iW3YZJs6B>eiJ+awF zt3)?G(Tc%h)l6b=NB{$lak1!=ZEVBpFxYB&OWTTy415p+MU*T>0P6vNUn)?RW{`3& z9d3g4gdQxxOfZSP;d{xv)&a%t&}e0JjtaB}TixviXgeA6nCDkMDbYVm0~V&NOyMah z7&tVh32kf3wE=@Q$gk6j27uaVcq!}$Tmdzqw1{WjSnwq=b<&>?yk*v0tpNqOu`PMM zT8y|F(dAqv!fI5-J*--8l+CrgIy+^^AwtwK6}F8Dhhwhw@|Kk&cWh0D+kB(B_A()=rY~9v(Z3%$g zWurA$HE~Lsb#obYgQ?a7dbwk$EgORT72Se9wsneKQ!&5g;{d0+EG0|wgR`%O=LBV@ zx~A})Ybj2XBRkGB1?h`7-DZTYLV1fm^;}-O*(J|VFAtMZ4ljM|9%ng%>z;3-RGcB- zH2~YEnm1{W$#euf+}>T~y(&k1?_}S}u0MTtz#q2JPWNhfQH?FB!=1}Pmn>H6)M~S# z*X1eC`*8U#`M&^q*?o)FzG*pmne!0nesgcCA^+dtv6{IvV9)j!9p2}mV?OpgzmD+T zmF&Gdo#PHsI%7q?EAx_PzNkMUwpX%VT~j{!e}^~)ybt{h*naw2c{|nPu1oHS`$0h5 z*n^!<^r1f5cNVPR>)CtmtNV{qD*?p1F~rNg-s+XJIJPHP7W?bI>ia$+*|qR%KTrWW z34jAY*+8&JCx{E9M?${gfFR+U3pS89pMbT4YCsF)K9CbQTmiO&f)9tIKoNXF_jrhY z$pO0&hz+zBodY}&>;wNB!DVs3EZ991jJnE_q(#HOqKg;t+a2M9kwM^!A&3EgIT4c~ zodeS}gT=1^2b3bzF3$s8F{zE_j;iO-CyqB>RYul1)%RiwY7$Q)cPHX}^ zAjUWd#bX45u1Jy4DhskfwJd}IHu*OO)DG~v#;b}ItHH&|QZrffB$6`=87veYjEXS` z19U{jV+2JoAOlL13|eu<@yY=);6b#(#z6Za04%tySj5PKJnA91DuNT`puI$#KR`*F zbX-SvWXN+QgDvENc>?$+4d&|(%X>C|)JR6Vfs-i$ zV{}ND1Vtm*4|wE7UGgSrv`9D`Nz=1;C zbjTo(vxg&-nhF5P__lEzlV5@)^Si!|L^BursQHUG0qi9#L4h;40hV;imu$$G9D>i; zl9Q;)judJ}31j*hTxod2_Ttvy?;G82E#;0Vf<2*yzlSAqBx!c4|^x#J5oXEb! zvW5W8@C3#2%z*M_OXK_$xlAh%go-M#Bp#u^OOzz0>r1e_PE0f;;!{Df3r#xVoF7=s zW1NB?00k)+P>1xRWI51$QJomT0Y8F*2MjJa^hvWSn{=tr`old8eLnVBnEpV^#Qe`= zWP%VCQS(ekWrRz^_{Rg{fuZq=4wOWBvdzS6(3_z_8;!*+YM;zZAy#f;u z(;^r~Cn(T~BpbdUwyuf_HjO~Ne6+x!P8mv#`6wDn8B1lsQR|ZxEfRr~@c}Uf(klQ0 zGLQi)K-8F=#x`wK3veX0*#aK$FD87@YpYaA?IM3Pm(I-3&ong7Ts;W{M$!aQR3*+U zD9s|UF6qiu4y(!4k&Gj|ty`VB15KJIf#(O#F;ejCiim%)=!p13rvKVmg}FxGGf~f-(?+BAb9G z#mDH}IZM4y-P9?KjWvX%p1biE{TSODh(w}lT3G!ETT+4rtw^iY%eed4DWy;ty}P>o zNG|2Q8W0FUnNxSoE@`FJ8<b1;rP3(`0~v*@aVMU=9Ig0|_|(Is6f zeLGUozyH)V8@WA1oy?Ce-KJhSU{m>#)~tgF~X zML$KPL>a;_IH*IL(hD_Y+MVTH#`RY$^*-H;wcY(X*Ui-ah~2c)mquzkLV_zEz=4e0 zx)S8Y)#X{B-CE5|(%{9`_QJqd<6g$Io*F}2Gg(lICI@yh+5_eLXzp3qwW5 z$~S(+B`&PWZ8c$nKfN@kdp#)~td*&Y|iW0_9Aqd2FUgHh( z(qNTD!%Ak{dR1}WNkT?v2I*SsWl*l|*Q_Oh?c!K|EFB!HA*P$-YD7MOhR`sM$Nv#d z=Vq2?trfJKElUhJw<5-9LKN6@mOnurUUxphpoL|A{bOhDR^Q29*#xy6HaRFJt1yOX z75p)l2I-p{WcOX^hJIb@tBNXZ7n&|(OBL6;%{*2PVj1=0%lzch6W{{2Mf(jo1x)I| zG+;1+nW?5;r?yim#tyBRWO#P1ZcXc&`9hLrHa6JkAhcX;25A@e=O>?dYsVi9JdZm*gMN3CY; z?=9xJrt4j~Xt6Gi)${4oHbMqnrO1w7A)DUI-ec3AZA2Oj)h=kk*zC@pZ2z@;?b{*j z4_4_FmTTKamj_hi)z(zIh7b${?&)adLmY%xu57Vf?%Dt&53O z#^|9$Y*m&5OttJ^j_n9#0eB4W=I)&s9qyLK>B~N9g8S-#Uh3V0ffsNkgP!kFG34qV zZOg##%05UiMr1vP?O)EXmWj;{PQHFi7F@>LbleCGgU8HDGX_ZMo^7q8y`cRi2M?=5#^lfG!{ge3SqsK;w8s;bo)%b9Xr<(e z3YAJOL}TVtu$DIvziHIf?JVK~ZD|49MNBt?3g9ULH%pHFAmYB}V*fK2ZtMmoc41?= z)NNK%TukOc4(LOEF@ek=8oxjhxk?VB!Gjj7r=k5-F^vz4IH35U+jhJ_G$ZI4&-LQwWzF7^U8;9`=enQ8 zWCE9|VQ2StuNU^7+gA4LW-sY%*LHPRaDJ!e1dR2T9#(}HasPDpckL~99{%^T3iv6t z_*klAWC!eWf6l&^{^&tYp(B%}xUd~f)tR(aTccY}}gm!EZ4miedG;hC3T4WY-&k2``l@&NbdPy}O!SKP-VJ~I?kM|~cYBscq_WQh8K3*8@A+|G zb2f+Wq@Usexb;$w=YbY`iMLoamX{tj{G}hc?6}QUo^p^>WO{wp83Hrm={lovukM0a}&ife$;o%43w5NW3xBkjk!+CFe(Kr3O z?|0$vey&IUiKqPm@BR4y{#E1j?QF* zD6zr^fgaRY9LT`IiisX0P?!*4q(TTLIih6ILdu$wDI36ynNdUuDluQCWWxag&yPMm zRty0E=g*=MeZa5*<3mrG1PdN?iNVFgq8>m_y!c?FQI0bUJ{2NXk4_OFq;|Y{5-d%d zYJu)-+7)gHp=jrN#KM5cjT>>_vdusO;a#JDxBs#ju;#2>t6?8!0Hr`$zr=W=FyNpD zDMKWS_orkj2HtM=$@lV2Dl-KWZc3GC)~X6MHV&P-afg~uS*F&R_p+#@yx~RXugl_Ug+lB7m!$+Th z{mIyB0}lrMUMu(b{?ihq-+u$Xhl30>?2uP>@;%30Z6Vo5Aaw#+Fd=^0^(G;K-f=aZ zM+o{bL{#^|QDSowv`~SH8AjL;c{fS+M2j98K;dkKT_|8?EKbLvhMU2$LxPA^SYc3R zRpf$qDsbRXib|f=q=RfgIOC7;#c1UQIqt@za6bRiDA5Zy>~P$R5+D{<3Z==2fRt0g z>0F0dTKQ#rX>s<{nwarcr(;QW80G_f^wmQQXX0j_0QI$r)s=zLDJWbi)`=ukIxZv@ z0sY|xrle_nfI<|A5@w=xj6NzS9F%?v*P8P_t8?U^HDdz2o=OR=BVo@B3;GX4v`>dQ*MrSOR_eN;yS<*Jd@- zY|m@$+i=_L0TB;wZK-s!`t-Nk(k{NT={RR5*tU4z{GgK0?vMitH$*P^ou^~|N-)YO z6U;DjbAbZdjC=kt;K##UxvwdgZaPS8AcZy&I1h2gn!Ab`Qx2teFaQ)~Dz!Zc*@G~A zPdWI7J6*-5x;rrMA9IW{L&Tngh$R1$d}QIEtE|u++AhVhDp8a(jj_RJe>2qR$5&gh?)lwVwVls#jQ?qoV?_zs)2;2Q;Vw>bfuk zB;4-;MMMY^=ktRhEI|%Rc%m5Ww#OU(UzlVJVC;KOV4X22A+G6h6U(G3?+9pRhs?fPf5>4q*!6WP;{KdIcX$0SGxj zMkViwvMZUOdSVdY9&(_qn4m!hM6g>Dfq8%!gn^h!wcb#6fP)vH$^tc@-#hU&QS=bw zqMOpF7zL)klp6|S<8V?3oqA9;X>B2jW{y6nZ!tO&1$wenJeg`vr10NEJN zSVmve_%D?RMNJ-qLtpQwPR4SCu}*#&fBO_;8M}$be6z8tgk&yg@;JfG00tS4q1sa1 zK&fUzkt-D!07w>+&9YR02CR%_$6Prg`n$10f=FIoXqg)~}Y8 zlmY?(A^8La2LN>dEC2ui0IvWr0RRa903$d+&<9GFFHi`{*^HrcFyJVG2Siv(rwOKwApfkgx`f z88&i(WbvVcg$5c&Y7j}1Vn~dB>S*1{wUeWg7%C*hLQqbM2OylL<%7j+6oX)2EL|G+ z>PeJ%^XlEp7pGpoegO9!On5H|jWTB7@Ueu)g%U$Is2KnuY6KN4F4kS3rO_5bobY@%?BK&1;GLU>erPgKc>3*ZsFUwbL-}-&@vS@KV-;(oIy>A4F;expfDBo=Bv-K zV0J!XHS6WkQ$uw@yRPls;KPgm?;RELj~qm9OlIxWa`Wt$O;axo7CQhAP2nK#&VRfA z{GbSY?J;Ix<=m zne7N4g{x&LW_e^@Xr_v3rl|#G%CQ;Y1TZY-(Nh!phNG2s=^{u9k5od4C02#yr-gt9 zD#59Zx>qQ5-zDlQUTgyY8sZ77(U3%OW;GS7g|bc1hb4SG0zeOSVAkmzR7?=tQ-daF znRPCfscMa+w)$$Kt}#kuLqVqJZ9xG8Du_XnXXlWVB}7Q4Fx8>UBQzzzFtE$&*xipJuqT-Y$7NjH3HDlAQoj18 zm@Rk7era6^I~;XG0`K-p@ToY(FbBh1F}!dmM0ED(yoLe76UcAB&w>a5 z3_i$!0)hnr{W3>3(OmPwU$o$p(Bnc^u?QLXTOW}jdQ1S(MUS^6o=FD^M-3_Ckb}-< zVC z;Sh%#oYW8hPlTu<8u5rKnjZqSBm_2CX$b1M97Rm`LlumQQ#Ck&--z`zhJj>jT^oq~ zb_gUTYLI7DL82O6l?!^+aBQZcfen0+g3eG8I#=8X9ga6co0$({6s(~B=vPMQT_}j& zS)&K@0>Tgm3JNHYR23#!fJ$QN3C~MFR+>_^g+1jFb-3f$SU0b_h0lzMTx58tNWLM_ zYD6)x0VL6t5FtJxk5KVLx^PwrUF^UoE?}V{eRshgno>K%BuVU4xffRY5RQfHfrE4~ z1n_NWjMZxd4HXuGnjqwucH5QD!1gGqRS%K-W9ICXgF+1ksWmRx0eV0%$t~1QIwGng zOOEFM#xwe6Z~=sus4%smRH`#K{JdZ5lxCa;8SpD5B4|DdfJXl0k8%~upzS8ANkytM zTFM*O>Mj5S6V_1+lSC(}{v@W}eJG>-6e%X*bI{#rGbro#bxTgdO)RS$a zy60cH+BRbzGpOk_>|B!>)(cGOg(&c8A9jRUwN6Wj9($A+*{(szN9GS8;VVruQQ(SmG+&W^(PkQrjI$4|p1knKr8~!|3mfdQQ^(mA&oN zi@)TT-nMqIp7XV;Wywq4$@uVgsM9Ja0j(VT`&(wm@f|Rmig@&BveL{KvKP5gX zRe8s(tCHDd`+eDsyX2`h6J|KcgmACNmh7z3GMKuJYW5!d zt05e9+S5i#+ys}{fZH{0GTJ>hY(qTeF#qh0_-6Mlg^X?i!)(uv)Xy88!tLFex86RQ zj+z&~GZO>%+5Jv;Wst`L;!@PzQW_CFNg!W1BmChZwUJ#lJj8AzYV1_wX+nL8EHW9kvOnT0B-Uop}?_{?7@|-hi zTB3*A1NpTski|=Y=`5Yas^;~i2gb4vm&^d0jxKMVxE8REN$DtOX34gmYRP%vdkA&} zMCfJhmFlqQ*v@y&IUVnW&f_8* zum=b4vcM63|Fi@Ofc1rc^veGi_}DY5!+J8DxBZElo{rlHVXMLa3^LFM9T*=3K1c!- zS`fnk$RP$Q7KL_ph_+VN^#h852C_5&Pm(Nf@B{b(fxa<( zOK=4KB76qeD8SZlgupYJCoAl<5g|B8BREQ4@&XP7ei@;F4CsI`$W$*d14zIDGcW`o zH3SG)Jvo?xDj^yGHbI?%C_Ff6XkkX5$2g+LeI;Rl!si+dxDj&X5X!|CTmT1V1%W8= z0|xOZP=Ewfm?5l}3tT8*?=nd)k%#5uUO)qFD1m=6H%@8)22|LmTXnX53xG>HKm=id z22mk=K`@0pwo^LbJ$2ZJe3$~ZB}a`lCDJoRO~+oz_Y|#|7uAM={)Q)4re*EcL14&# zJTy2XG9fNUd&KcNZiPmk#ZH(=FPj&Vmx+HPksEreWkFTbWp5brVw2S)I zYpfx4RF#Vw*Hj^wLZtLg0Cz7Q_W-T(Jl04=RTVa|h!?ZSGOkFEadmc3@fm-%9A`Lr zUPChIm@BS_hR)W1>zGy#S!6g!jmOB3G)a*iQw10QMt8|Uk`rT*UuJ59^=+x*aJTo8 z{sFFg-9k7xe_afDC)Udlt>emTPQh-h>hkHPm$sT6gV+_rFi8eSsr2|{KtVAFdIa9R1Ak7hNG5?=pSaO z5=)tu9f?eAnSU)YmD4tt%91jPaRYQ!0l`RO71uEXD0pudF@xyExL9R!t|Z`oiI|BQC9p}0L`0lH zQI!_A9jJH&S42;2AvHgil^kMc4#|^^xB|ofd5y8zVy(HBHTj%38J*J^6)3D?)gHerZ{_d z7+7gb5><@+>5L;r6=NAI`k0>In4l=JZuuw_a0#0{vja)c13AD3?Kpdz6JEZlD(yH~ z<;a)(H=x`26CD$o2EbmmX)rR$EI_KGDmVag(gQ6O79qH9Lr5t5S$D^1H(z-_BD$Qp zRGdMoj|qW@2I`u7DJ?vp7{KR}oSBX^3ZYjurW;5p)yIy;XpuHapl1mIJsKE*^Atil zKVMp)W7tuQNiAkrCOnV>FFKtvT6TH=23(YNb76_0O$wcNny1L)hxpj1$?0AaIijf2 zp=rf5D|ktjC}&^6g5B0ENIFzJ6m}xIc}UshsntVj7EVx@0vd}JXRM~lLBK9K&)=6lD(y@e<^xr z0&47ao`ZUi)G86Y!8)LJHvyV>htoa5afXC8b&@C$*yNo)BCg}ApKfV7%qczSTB81e ztIR1HCnS~`W@&F)88PrcE;>wRcYn_%Q*OsAtKq70`j;xErP1oCObHs&X;!4hv9>34 zd^bjsR0c;tLcqDGqSUB6iI9r_CWZ_<9}xloAn8nisIacVYN^+dIvTGf#!%PVuybi^ zrvq=ZHnUsjc=si4k6K?Kc7dEXv_@MvBX%*{>6xJVnbo1CTYGsvnwfFZm8%H$wz;_mDSNYxXR{p0 zQKETikEpkn3%E&(x9-*yT>FVikhTwCxh6Sd`2%D+8LswPwKv+UUi-I|yRwk(hsbokdtW%4Eh^n@7%dN2+xGCcUdS#9;*0r;nySTds)2q9j zE4!@=P}W-lzb67HpuOAwdjMmRQrh{0efO8jAp_nrp=L|AN87n0R0K{i24GOXKyV(u zYaP`KK%Lva*vr4vE4>1I0`uep8m7OMW3nsf5TGd{f@?i+@HE_GS+iBS;5)!s^Z^Y> z24T!qpogrN=}O5uf;raTiQ*p`xE@=T82+0l+5% zN8rP!x4#GsF#Vet9el({jKoGj1Q?vcL#!4(hPjPf5+ZoJ+OoM+kgujji3{MwO>sFS zYy;RMdnJ6r+pEDwki=>n!a%^pnn%W7%f9$VYn~aU`X)!+^NUcoHu`%?L&?RW>jH>s z0di8qDBQ$vj07P6yvU5)$n^^b?YC->+kt0{yFq(%?l^8Iuswvtn~bw#La4O!;l-d# z%F!Fe(}@D~`^b*m%3xr?h_!vHA;bYZ%Td;za|@>tQ9rtzz-1P<3iZTZn?>#mp)I*2 zWw6GqtjvvZx{Rhe9%#%Z(2G<2o^!+$rP6NZ$ii<6C`8Lr>8HLZ>py1vAw)30uDs0Z zoTz~un1b2OSLy7&!pV1N>6|>qaJU&O)_Tbt8z9MV|#!~h)w zM2E<}xzIb!y=eP!W)#t4kj_SZ)N$;ntqzBZGa&zWiayQU=AkU6gMM-6v+WvlZOO zlmnvw$^v(pG-kcWj6HNu;@T<=Lf9P@a8TRQZNJH=J<^gTybajx``7-eI5%L^r-s_W z&9A8RPS5oQ! zA&pdy8i0;d_;HmArqv%}6oGlIJl&rHiv-SgxC|f;$Lhi?FCyuVdNlw?5Qib2$%X>h z`OUhoE7pFlvA0g)2ji`R(pBzP8q`&sD1L-CkfLDd!E2$q}DeQtbwJ&;}_l+s{68R_)Y5cBQHR!QHBp zx^dpuH!sQ~Px3wf=L)FfD&JHV3XAM6@Ptmzjw|vA^1wS^K`VaU=&tdr&bVa_b?IS# zC%^KeAR@wt=ktfPN&fOp-sr{}_EjqG$;!SgUGja0ZJGOwOd9lBU)bA|0dm3%lWg<^ z|I49H_67+@hAj0^uhqYJT0#;6%GKp4FMyr*!!+mKKIM6!9h^bk^l75-0C{1`t{ZBXOF)4L*x}48=EiQ=C1W?Fh}$!_l!RT z5nISpyx4(5%e)q#)S>E>en?S|-;{@ShMxv=@1lzT`PR=t)Zc`c&bj9Q8$LL#VPr>+ zo4)a9M)SnA`j?;icN=c!=aJWcSsZ`^&YbiXhtn%8$CqJdJ1yk|~&Bz=+#E2jOIi`#pC|Yg^;F@Ot(Zf3h?=D^Y>&D($ zX*w9{)iz|w4hvbxeK7fEh;{!;PjlLIaMKe|$XI?HAqtNyjSC-cGw5fpk^}R$eDZAh z1wCnlhF>3PWta$kT68{8E!581O9&3^?$D^f5qwyw1^xh}D<+R*kZ?Zl)B{Stp4dCj zLFUvL4?g)C^sct&^a{$m!XGV!=5qdU@~{XlYZPYx)Qi%J6dbWuqyVNopy6LL8Jlg$=+u)xpb)Rc716r>z5 zggN`-OU^q1>=QlYh!9muKIdaG0#q*(ZIClyah0^G4&0$FNV7AG1{i24fx9UiOS3c! z2YX=v0lm7g)A*!75xG^Nb9hvR#7a%|F~`7iQ$1KU*|LyQXn}*l8Os&1g>6%S z>`dI0{c%mO62i~5Do<>e1$9T1qX!;Dkd|72pG*b_gAi51W_k+1-7#T-!etc1`}!sc;#LT=8VFHpmW&D8(@(w2a0DlX$NU# z>rNtd$>Mn9=>!ebP9&3+c}b?dYn2FVV?{b!m;EgNO1bPl+Y)CQLZDUWnA8XYWdz;S zm}tQOsG<+7n|8Y|AE`FDKV->^E$2Tg(0gf@uTAbM6-21jNh_;c$v5l32F>imPe7aK z!n9a>*|(FPWRkrJ)~{{yKvXFRzU7ve+<_f4WbjxRr>#pH8dm(ZJkNfdu@oe?{lChK z#5`$|iq*8fFJr*FZ{p`BH4EfJ{*c5ObKt>w#9vnz1vg|6k>%wFV}I$>+Aes({D{vywJPCps8AG>HPJes%3B*0 zL8uuep$>MagD<=&3NDJFa3g7;s|?YTXT`t(LV#2B+GsCMy$K2xwBQ4kxWNtru5(3_ z4D{+&#ra8%er{L;79ZroI^7oTRv(r^dN4t2itOf#ez>2MbcL zSsGj-2lGg+KhESMsnL~(eGH*=P1P0J6y1TxSUWW8l zss_jd9eU&kia4nf+J&eTK-Zz9;1UjIV1gc~;Ah6QZ6)8xLMpS>=mvSR0FPE0IMlW0tc=agC~D5c{;XVXBk|s?`Gti;vH9z z%gZ(*D^<5&9!gx5JKv~8WHk@)FSIh?12`lQS6J>R2E!H6*JXjO2;nQ3?>8v zEO97>8)4BxTG4m3jpG1mHq|Hr2_T4#2n;A)mar`~jU(9@J-fd_CPHgA&ZMcsJi5Jn zHv>X;^jJsQw@s3`qZxilWYr|y7YsoMIb7Ya@>L^JSI5=cOEscvd*~@a*e{EwCo`e2 z!p*Mtqvzc<0UgJ&ADotY0>U;S>6^J&ZiU>s&I)hGVr#4XL`e8T;_V)-K1ol7z1*gB zhh!)3PIp^3Djehgv_#gSH%I1-&YtU2MpMB;SX7iz3E!42o^KBO=)?V{EW9d)<69q$ z;O&Htpv33yIOns>%RHjJ;ncE=6O4BFEDT(@H^jlLP+3I9>&Qud@L9rq;2mDlkvC-| z+o{dvcuM%G6`&@b-|4m-i(Z-;5OkqqXxRoQoTW3{GL(zijkl3ENPx>|X`?bOF^@}N zg4olck&59p30$isI^vvm{p&CfyIS8a;aQ%Yo=Gk@+uKf22N@@SLyI2-u|%EPj_yB1 zE_u4M4#&jvTit>yh~SNV?`$XQC;57L$I}EVt8qT-b00X}z8+Up3%&1InkEq;o`4F* zzUYR}@!`w=K6Q_eU1}>w7S>mvm(W!{?R;N2RTF)c-`~E1%Yyxv*Dm^@N$~GaPC*0`8JFZ#uc2fC~Co@agwO~ zqXn`7qAW_G6w8vt$(+!OK6nY|L82HupIanAo1`=zfykQ_nuY>9lglZj8^8$Q7oZ$V zu?$I(EQ9TMi+?3}d5KPYOOfVpWn%R-V zBmpl;#Nf)HV-!b6luFXTl;qkzid#IAnn{${4jl+g+|13CQ6s9nkF$t!@Q4sVl#i%1NxX<2WX)jo zl`gE1{Bgm$*~`9=jT!JvRQv?%^vwO@&2OVU?*RbeET&qFHOf=3AzDrIgv{sT6pu2v zd0aPOWRd{v0^x~Iz+{5yv;rsS%p`aog>VW_Jc!E@BTkY!P#lf{l}p_LJJoAYxDliW zB_$4>lNflh+-!m=K!Ps-0t@BL?5vcGiKK^1OC6Z5Mqtm*={_J3@Q0RC( z6_rxV!x;%3OC&%rCg@b6+%&P0LDC5-Ef6*o$c5RUG^$+E1gum8^$R#{P~~G)G%-iP zsnX3HODnK~ABfL8O+_F$DcX8Y<@f+Ol$;R2D*n_VP4q@!ggQqBnqFJd76r#it;{&p zL!eNtObtsWI7JTdQzzK8nqkhfh>{8#0;mzv9F#VXLOj-F5P5Y7uQL`}y~2xB%)P5r z@q4$0hyne|&CR@m`W)A4^w9wHEesNa4ahxfd`dyB)|Ujax~oY4V8X~Yz1D(6$V&5w zzjQ{i1cEySf}`{qxxh+1>45Ly4mpegB-pQWnOJS>3E^uBi^bT;QYUOpFI1z{2fNmLRn@zyLub~jwn5EvozqtNF|d}iIvs;xmqNN8E+dC)hL4^2wNjC zf*D8xt|3lh%^OmM7A)%n!#vsV%SjkiE@0YNYXyP1eOI7O*`UZ32}uo)J%dln$ghCM zB%-6(a9giv*8nw0m$6rPy-6j~#UxdgW_?r$oD^2_ScVza%rjh>392Bdfl{RbK>$uB zI>_VP!S91CNmVz;#N4=*kDINW$`~&p3JGI%Gy{6shG9_uBR#svjaE+5JZlAxDAg+@ zg^5CH-jnSfo@>msP|#y#8|fkt|9UGuyh^RDT=PKAOl;NjOr>IUM2p=!cSJoXQkN8f zvRuFc;e>-NfB?LO%I@{vjpDcC_1T||+CiyE!i}K)gQve~KcHMm*=VNv)v!FoO#B^G zNnPGG_1|!04_kFOkeQO{JFql5AP)G?hPz+yt=GzpFISb_NU2-=%N9yu7n*&wU2Mv~ z)dKJcHj%(5fR>wb# z)&31)6jQ$jv_SM&RWD{7Qw3un8`ay|IQ%71DmESe5}x9O3yg5Q79P#MFQ&h#-Ho7e zmjyoK33gEljx|nnnyxG%-q>OeMMB-fDaX^Fh&4Vvc1w7x57>2J^px2UK1<0h7{qB_ z$hj-~o0ISPaAKXzSyU8^u5s~o>f=j}*xqqoWaT_h>bGwu%^5`AT;}Nb(c{XdL&gO$|(0yx?eI`+Cvqa*Hx2I0hRgP<}_UZDt*s&hL zUq%XeCeV^tK3l{R1odWBPUD|`>|M5NSDxs+{_J);*V!3utZrYnQEuD+DAUhYm@>q|W5<1TQjhGxi?ZU^00_#Td-QtI!fZ!1<_ z>3sozs_z63@CTnZ_4et7FkiZEZ-Dk}5le0**q0rcORokRoh7su@9+b7Zw6mSrP`2A zw(Kg#ZJ@-m5o)RJ^Kpfmh0FkXkJN5ZCUaT5+Cn9v`rt2-(fAgc=U$Tnq5>*uL38jytQq zZ27Jd^uFjuUZV{-sU$c6UHQ`1`N`t7OdiseSx#;}r|sG{JyQAbY%}fs2455&^o#(H z2JnGUuX8eS+8aPj0P`=nj^r?x@QkF`@l0BMV^yQ(?~;J)cHRlUV<7Y!0`Rir{El%4 zF>^wAk^LM&E{B67wdPO?@nKBU6yXS_6_dl z@0*}aWe@93FJ=-);{Y%6@pVvwmTEQEV_c_hb_Vxp7kB2qYYeh=YxeXVho*fWc+M{B zf=6r!F894KWrr{2QpRrofmiZwpLZKy?Mdr%RBp|L_g?Rr>PA*=!4~0YclT23^JV|@ z+ZK2epZJR>c#%Ike#dpjKCiwu_n}Vr%>vGFM`Ily#>o8P(PH?YH+Yxd_=;cNlt1`3 z@pgVUXX8gG({IvHV zyhr<%XL$|O?6NQVz#r(yAN-lu_#-xO*3RgE$9ZO-`)t3t1uu5q?szt?_&-SjDX=HYjnRfjt);nYWv3ds%B)5J&aIfhfcgu&n$+vfMf%vcY z`3mg(fS+Rd-+Se6_iPP*XXk%_(1QWNf`SGQB235v1j7vh5-5x)(ZLfeB|5prQZ(7cz=;xv~LI5g~rou*q}iP8V!UvXuCt zq0po(Z`hdOgUHSX!(c4A@(dC^+MoOt82w?K@7*NzH*#;TB_s7e~# zP;lgsM4UNh$*ONzg6A1+j0#v7n7Q>z!hj;}$!)NMVsO}~&l=hl1qM|b#1LX)7%yn) zLh2v{iQZ`?i2V9FSPKV#I@^C{f{?Jjak(Ia3?~K*EoP;Pq->ZF6N_xcpthTCZwjyf z)Wu!v4w~=Av?0ulNGRCgLv(Iw3+Bc1Vl03KX{{`*iiy$rErTK78EDHmk7nhUR-UYv z(>*$?GSuK&fN7MD)kpKk=Q3Advn`@raA64>jPXT}LXo!GY7XM212{ZcL8=7<{H5Rwft$bua5xeq%%DDEn3xt!fC7HW05w0<3I{IdtGXDaic%^D z7B!&>5RyU@)Br{>N^lA!!lVyg${_Og@~^r*uXTm%0t|j|KQ`i#Hba>I;{lK$fmb$h z2`YOf)pNP#RyD63}Lu}gv?5S4VX}$ z8!#aWKnqWTZYeNnfiskX=@=qcxxW4Bpn5!Dr3~qagdWCHS;jHU*UV!8BbtS91r~3Wm+4`l40W)=2AEI>C-gIGYKTDuU%-SZ_;VyX za7d1FH!L%zaeCE)D9m2alO0lF2k(T)OpyQte=6aR;%Y!3J!u^t0QGQk>)pc+vJ7ZO zk`;BRLnI5}iet(keIl9x6FxD8D==XUD7eBWtk44>)Zr6M7{V0)Cdvd4$e^lM@WB*- zkb^q#AZ&J6uN{ z#8Ro@NLCy(5lRrEaj2SvI{YB3Srx%Y!2r^%HX#gWxPlRyaMmKM^$?!`LOwUNAfL^M zqtlF%txO6LCw`Kn&$)mE4_Vw%QEf_(jnz}LsDM%|)w#{(Ukn;YRYJHjtDhKY60YEc zDL|nNR+z#jwm^ofrZWL`h(TGAr@Ix-Pn_cn$t#PR$e##RD{s6}1Rbl$iI~C|#*j&L z(@=`>m4XQK(Fs+nCtB6cz`J9$!WhUa1J*Xd3PS*b6~xg0)g~l%B}e&Zazpc~5|bc> zz`a^ME!efx4OAFRr7SU8!3qv$QGk6S?hnA=(ib$L2r;k%SF<`%4LiZCY)C6teZT}X z5a9}0GnIVfyOEvJYHNc^4bNVj--&SXn9Ep39gNXP1aQFyoIOv+=y?@5!C?wx{cR5# zOOeLty2E zTfiPR3}rnT$P$|m`-BP~5}oW^Q^vT@2KG{;rK5lW001HR1O)~Fe*i210002505Aan z2>$>bETGWGk(Mu12x-{@phSW`Au>Fuf<+4!gaZ>CXt3o`0v7=~Y|Kb9BOy8{Q>t9a zl4YltF#YJVG&3g3mxAWVr1_;&&Xzz~QhXt&piv7G1aSBeKx4@YB^zNOIj5IZP*<;Z za`ZF;6pMQnreN`*!v+u>GH@uk07`_XFVq?ki2$z2pgQyF-OJa~UcY$z`VmZc?}QCU zQ6L7XmV*GNc1zY}urODn%a}1weag6GSvVrfPF4^ZsnQ0cyPhn}x^-aJu=O_N&?86^ zBtTBIa9CC%WDFWg3ullzqlV6sKZkx$-0p^us7wEhO})Bxz6v#N*wN#Im>nOfr2kdJ z{P*zl0=qt0k^D1A^t?xso=<=E_51i+0~ncBPLddNy)f5d@&(7rz2tvo8dKYS_ zBXzkn1({n)$iUGS7a+%+Z^M;nfPxSdnN*4f(%0UM>#5jPi!W03+KycQ)Q5}vwSYqs zHau{GfaIO1WR+5S#->p{ns#HAEu>gr2)(h{rgm65cUhN!5=POIO_DI^0WkDX#SKD| zkS2j(rnV*@g7`$mBb78_i57A~#efQP?zv=Wq9r*Sgg9;)sD^fyhyo2hi2rfH0U|Zl zsi+?@)<-2!ctk`mF0_E@96m+|s-2MGNhJ%BCb-69q1LDBs`xP^>9Hk5M8pogvGApC zsN!mYu9(J<%cdR?(uty-j5RBh;xVyDc731|SAv)%I1Wb;gZ8-IK+aYCtcwg9{B@*XCtF}8WO z-(H>KJWn2M3Ngr_`SeCs0>Ti-GZ4fh=H5I9PDHnDUP$v2KWgj?X0JVL%}dQ+?>Vr| z0JcEDHMz-S>be;KaDV~;+3a-VYmQ?$WW7Au4@vaW-~RM7Jt;L!0z??X5MpqHwd^K- zyE|LNso>5wAQ>}w#zI!BgSm0D(>> zY>=V?WhnQ;vYnYSO(@Vo04Fj$`b>~;lhITsEMS!n@MLMY6o`@Xc01&KLHjzZm6HH10L>{aAcG?)0R@$* zf+4&{7I(_ip(QYpQvxZ0T(;sj;fo2#Hv=e%F_z+vPmHE0e6~O6ej&qN?m;D4iT_TMY1%orOE1GS>sQQIVy~5 zArcb5!jPy9jj!rKm0vAjL`2d`pZS98(aajujsKX1r4fBv4xHLp3OyFJ62c){gZod- zZdOpS+vZwv3zDaiX`L0-9WYVapp(+?vcM$?!(@9jRE7tt%MC%XN)&`T!a!)z-Cbm< zE4#`r%c`Cl&RdULn9fQxTwgt0+2nSFGT49!dM(^Q)|*{>hS$3V9>{#@E6Q6kR6+S2 zA{<;8fJYjO!0c`BPv46y2a-Aj!HJ?&-2u zt!WU8+i?JeKzhH?uC{Y}_uX|jkth%`O`9=2=!_!yj`778xPM)2)Zm(%Yz-}^R%T^q zjd-f6{+fGUyq`Nl6KoAwxT~Ggzhfc=)CB($4{yI^+p4bEIIBZ6SvLOi2{`-NIw85X zS-bJ-p(&>v!)RLv?!hBVNCi7)8&X8>X&*`3l>Q^nkM;fV8l`qhRe$1~B8zjrINg_1 zBJ_PpolqF3HQDRY1G+J+&8shcI$h5zA$C4FNe5X1l$P_^-OjYN&-4<2cc!?Q1^2k; zg#;J_D+bj-S~dF|yz-nZI2%(cv`@G2hR2&9IoWTf&^paV-uab0F4s+BnePdI0Ok$P zaRMLt-8ij+npxiOltvBp5CUN?d(|IzxC~@)+6jozvN-hs z^Jj{!N39`*G=h=u@6G+gXY=*B`tJYibx7|jd z14%%<7}#%s9E>#yLy&z5(0%(uPLc zcqFPvEw&SEq}39gwO}^ZcBcQ-ev4;pj@NQThkA0@0$;c!qqPA@z%7^vAdIwu`F8-n z(-hO!10CojmSJOuD0kR_V3_xFiN+WIHb7=rTP_APuvUDvrX7{&h$&(M(lv?((1ltE zFlzAw1XBZ>K?A!Ng5X0iKOhBbvjv@YC`3VvcE^ZxP;&Mr8`~I*u=b6O*kSy3B9GN) zX`+UMCwbI2Kw`v6T|i|j5>JRnZaqeht=9(I1&&lxcyW>-iWr1m_e}x7baQ8pKy@cd zqK--NTe+qdx|e#mClSWw2jvC<+$cD8VrMLYKLcqZMzc1Z6Bu-dU1<=0jR##SDICA3 zX>YcW@90O>_C41aj>P{oj)m8TBp{A*vWhCZdI$88m9 zkT>~SaxiWw*AhCJlRs&dzG01JHg+dBTntHN#b=Q41#*!Geo^T)7s-(m!IdRx7+w>S z|M+Tz*pEetST1K<=Tk!QSaEJZH%uvdz$KP$7kWbyln#d)+BlaxX?FvOlPa-<9?6P& zS5*du17u(ZQO8@f;(6_9)X+)_L4weGjMNS|hnVjf3fCDOy@&TQS>7IERRYMRWIe-Fi0C~)kLiPnz+=+aov7a9RlMhKl!ik!$ zGaf1!pkVfjkXfM4`4A==JIARPZ9ttV00KP_P#y|Nd?0)7vV;?gp=l|TMMhm9L87c_ zo=M@8Z`Yc=)S`4ilIfWj{ez1kvH{M>dn<`|hca-NwkIfOdM*W`RJxc@K#m(Cn;$8e zt9hjANs#RshGoi>$^`>CpaV3(p?qkONAVSI%A+?joEu7*veTpq`7TB}lqfo&m6@Ph zIUNScA|3w|KrUom24bhzMt(erp&*)?@lkiK<#vVYkIXTWLn@b7xu(yln0X3>HL8(F zgii2DS?yMq3N@I#S(xEjSdiDLDdA{hc%}xhdK?07I0Td~qk^fYn=Q}-Tc}#sQXasp6Zf6-Aq18Ob)~eH zi@B?s$EHXsugFPC+j^n{s-jH#qeh}uG;jn&08(If7`(WiTIWf$T6wk#VT9_b4-2t> zlC9LbqRUy3!j`8x^{>5T136GorUs@gD53L_b?~8* zpK|}EVj!RdHy~0@B(k6fWQ$2Ow6kJ{Ijyt!tx09C8~7w~G^r1!r^)p*<%gHr5j>4?4I8IVi=4s&1&R;JItS zIide~xc*wOi{rPgil3kxw}xwANd>ub`>`T=vqO_mC}NgW3AMUbx~B%Z!2zKRsQ zz3XL$6~M2;D35x;#%lp&>u&i8t&V zY`{r}!Ws;|0W81*yaP87u-wwZYcMZPduwedwx=1cc=!PR2Y~6z!T>zPA7BGy5C=#+ z!XmuHP5?Cpth_`V#qNQ)qf2_(f&(5KP@1a27r;vXGGzZtyg{%)(r3ahth_3$xH>Qf zORU6gyu?5(#Z!#BRh&DDleZL!Up4?Y%qPB7m%aEUweCc|JO%?6SY9byzAOJ+!vf3& zZ2ZQMoWyZZUiK@uxNFIt3%ca%w>m5t%eS-R!osljzx@d=SqgJ$TtU<;#Bz+nK;Xub z3_) z1W9np2NzzVthmhaz0O<`OohH-sTk}>!>z2mM*zzb9n-Wd2G;+BRv0b1aw~kv zHx*La0}0KgEWLH?IAHQN1fZPGok?vt1kEzt)Dj(n5lWa^e98L6&2x6CiOd0v5(JfF zXlFcJm&SG#;sHy*)$aStyZ2@0kpvO#)U!MT9T3$QG)0wcw>f5nEnUu@DAWy2oSK_W zR`Ny-`X3g2nil#qN+8c}y$RJk2oHCv&nk08NX*`Ix|v*raE8i@4A%AozW^w(Q#!$F zbfMnm1B&g|L0~JnTTxi1z3M@89oNpo2dBWNO)R}^Ovra$HL(Bn)4SoN9sNW#U~n?v z1dHv|F@V&Se0shtwuU2=g9A0+3?9YN8_y@i$i{13fWC}Z&}0A2x$s*!E{7iY&^G6)6s7$bRYFDx%g)h62V--n5Lh%3Z8y;!Om8(;(M{ zN`L`F5WPwv#oQxww)e?ksNaB#lxxk#|9#wW?FMduUC!;H2%fOc?blC9+R2RFMzy64 z62p6(ZD&;hRqk_ds?*WAyR+17iPB1a5BJPe|Pt{IoqYwXhY} z%$<0hJQoo$#C|$m3ewxjYT=(Uk#+;aF-&13&f2-nJLMPSlrCQH+M{1CL5D-bNmh}F zSAU@m>Y)y{XuaG>4i`1OwjwR;sG+IVo$1)EWbNx5CZHCt(#>ifz89zFc3tUh670wq zVUXTl=$64yg6t};uxvL{YJdc?qU#X?JxjvO*PF+g+^5^#HW*Ir4u|K1SF|-9#$0}C zi-`jO02&Y4+=QMUXVEG1cIhE*?W*3czNpmhtakeu%0k@a63#PmiaA`p>1c`KBfWbF z4~zoWv*IFTe5>sb@9mMU?;~!_P9Xz6kj0cc@V5V5?R3rQ-4^m-_qTdrvLGj|xDunh zK4|{i*(2}p!^iVrzBrVw<8%)^@X`;H(!KOkbgNxyXP-xso_87#GtMATT&a`Pcbz>GGH?|rWE zVfXYm8{GG@-raWf2rmgjcGYn!5Pg{6O^!cj@!nEz^$4!=MsKM)ZDxwR%qPk6@@{q} zCBuXMqE$RD&Hi7+9{LYX>x<*yVdtIvJ~a$WHlqH0^kQ9;JHOt&RB{^cz%Kiq@A$t6 z+cBo!EAP2Zub*;V-y^{KBCyBtJ^0HvqnH1G_`}xFg4@jlozZ`r^sj!|;q37vkJE~f zlC1A2+>z$y@y*A0^5-na>1F$g^!DHh5G4#Kh(Mu&!Gj4G3{WBB0|o&MBp#SJkpqYp z2^whR_>kiP9!g|{0Pu0+gApbvo`f=i#gT|7D=wr-uww`i7*%e-=`iO{pgwa7WI?nh z0-HiR1aO%lqe2Z1kRFv<)vC(`9XxUvSP-Gt6;^A6u(0!^PMI1#c2p7rMOu__Ro=iM zhR6jHa;eso((|cIt$~9M{?M0e)0z;YVrT(0#mci#XI`bOp>W5tioa6EX>=!AlWS92 z$gzV+OtWUCm>#kr15=eYWk*yBx3K?U!iNVA#k?4-1iz2J8g30z@a>KaTGLe>_85C^4i z5+url&B6lEp#fCdFTs?myY2=Xl!z~`>*Nv-1t6!JZ7=s4a3MFsV!Q0Y1wyp2ME@$} zQLFx(ib@aPT;$O~p9*o~xK7q5#hblTR9f)ks%M(=aenO&Em%2111sRYOga#KJN>LAvx) zUYTu3+!Dvlk-Gpmz;@vOHj9>97DnV(6E9OVm&|8vEj8jz<8^F-EE(WQTfRJ{P7M!) zP+^ZJ`i%_*C~lD8+Etfr+10;J<*)aM@_Ch7G z%dQBXH)E4e!ck?GuXO(zY7qggnJ4FFu9>47&Hxey23;*M>=(k$_c5f4CYr2`t_@ia z!(LN*>CS{KxvG()Hi?Iks?HMCiRBYl=5S~B0TvoSFw^V?Wl(|!E^HL;gts+?0E#}S zSlDmbj&3kblIzuXA|h@mH!{f(-PW^x72e?C8iVj5D;gsOS!T@L&RihQtI$}>g8QB1 z`12rVb}tE!D7)~itwZc;I+`ADA4g{(PUC7TYjPK zQm4K})vB~Ri|UP*l1_d(7>|Y?crQ{i*ns4Ez%Adw%1Ul4OXtj21xMV?eNmG{1qr~u z=e+MIK+?gkp!fehf=R3~ERx&qY$bytFu@8|C;|@z_@EB#KxIidLlAJI9(Sc+V}p@E z`5q`d)1{9lbi+~*m8U@j5CH{nKtZcM_#MQ>C3}L)8WR3s2P|Uo4@lTwf&2uk3QEWY zN`Qb3x)m*9@z4V)fS?1n(2~6g@j`TK-4Q9+wLul{Dpa(U0}@B;=tPl9q;^_Ba|r|wa6SQ;51#R)V-)C@ zn0XozRFw11_fm6#tAQzZBX|K5>;MUZ7IYSbWCCsy7BrW{LZ`=y-kpL{GmBbu02oE0 z-{e_3vu)G?mTBJyl&G>iCiPDSQ|V1_S^_fI!4omvW*$882QttCr5?p8;dE&^-3i4g z8f~L5i;AA3nsN`J%#^?kQo2T|u8UG#saVhDKN#$w3L??U4eUUPKooSFf2e~U(D_lb ze#`$$5hLpkvlW0XTy&U1ovJZ8SwzT+#b8kc>0bFN!j<{;02|l=Ohoj98~Dei+04T$ zv1tb;=rgJw%3jb8_FD`+Whw1+V<{O^M|{cEYNV~J%a|0>v92s9Vpvx*EfuC6T(J(G z;BI68aGJhK4~)Mh9C8tl(6QFa?9GVm~(VGzD- zejdJ5)!dpsaFLihJ`e+PN)y{4;EFrAGNTP>Fssk?>Yvj?GXQ#*=Z>)1!Y?>78;`6v z=+@JwE`X?z>pN#UHEIAc&QSqZ%)vL{AV+d|m>|GCfhJO zrSMzlXe@&;r$GS0Sfwnu5=RvI#6#^3)02Zw7r zmisC?w3rz7tiu-~223_e9F$ebXl>uih?6<59J<|yY6}}TEv#|nA`^B9SvT63G%73U5d zYC8$;^LjDWSrJ9e4aXVBA)4HjuI>>^?YwoT>j&Gv-Z%q-TY{Xok>~jRcERgzcNgI> zqB~3=+KChEv~Q_U3_ZJj1JB!wXBykDp}NP3N@7soUGi|kN-5oy?xJOjW6(1E;q#t& zM)&&gk7j$@9pmQnJ6cmU+fa?{j;;DtTMF*?a%4`&Zo_T8ht! z0Z{*dUDt~1lK*VeX)R;TrG`r3ZtmXw9{Q~{TJ5kZJ@K@Zv}370=Y8ro^Fv2@zKd_6 zqhozeHEwXYkvr|3zq*~R?R2OQ-}D{t_V1}|RP{3ql@pnRI67r&5aCOcnG*~8>#X~` zuRO{>k0Lp#BMaqdyh{T<3hF!g;sXN|sk3;$94tZ6 zL8UGnJ0fBtw*V3`Djr}GLmy(bxG^5+A_&++fEjE(IcqtEYZfXjiWCtXJfs+~&4u|apiIsk;gdo#t~pp_8nG#$LeMro}iC<8QDf?P}j zGwQES;k`*>I(orE;}JmiqZb-Ho#>InTdTt#yuqoeM5)3R7&C(+7=tF*1U%5jF(`tb z8G`QlinqJ5KFEbeXao|HmJ1?A_Y%Pw9L5a691YZ;WTcOA8pbqyLxYfz82AAo$i_I> zMs5rPY&3!-;KwJlK)A~+E;E72v8#=1uVU!o!x5 zvMi7+w*{erYivrVgvzIk10x75@cN0rU^Vf8ARjo&`C!K(!pZB~BzfGJv7Deyu`24I zCZ4OcJG+YUNP?)0OSzoOF=#grYD3|H0yTI%R@@e(JHNqvM3fW5G-{u+8baqYmO)T5 zpR|fl9gavn7}zo!Aj1Fe+Y!Nxzj`FifrB)CG{K;>w$WU> z*9?ocbOOq(P3uI-Kw}W_Iv7q)mGiC%SggY4-K!WQG zgDGGF{G3Y~dW+Vyq|`HjHSrm$aYh3joM3B~oJ7y`gd(vkHxvXtuhfeLnE~3IO9aEv z`-G$z*iB1{2nceN9MH}Wybz=dDf1M$VKc4txHx5misHk)Pcu%hn9&Ml0)Mmu>a5KT zg_pyKmIo4q2RKO23=Mrd(&gJg`6N3j%a8w`jGB@YjV_3RA*fI5w9+pCf-A_-?%+^h z1R4jT0UCON1URwP8=iI)K^1iqpVY`T-8@AFIsur@lC)7I00l?DQ`;m17=VKSIwSsJ zyv_-a7^}*f+&B)=twhC}F7iR6in(}HMZoJFP>D?=n1ULO11kjuOOSy$z*46)gCKPw z47o8-y@16TquV*r!z2=gN=?sN(p6>BCOxjcIMdx@&mvTgAjN@6jmsZ!9wtzsxikT> zSs>^8QWry+?eNP(ED~#Fk|({1wVYN8h}Fs~DiY+aAoYP-z10;G0~-CufLwyG*-PILeulOipq7!a$rpVS5gG)IQ{~R#2%NGt}neA&T)Z2Rlb`=(bbd$vcLRZa4MP(n=;SM9n(4Coi-~%Vwc4x+-GWA8NTYB- z$Pyn;Th`{h35-oHBpspXL_GgEsID3FLpe@*Xlfn#HQ*j3vQgoX`a?f1yj|4`EGYQKF&#OqG1CH` zL;3~4%vIIgtt3H>30VcEd_f6?qTLGni__qa8bDt`mC~*iM*>DpFSubG&S8mQReJ4O zN7W#qok+hU%4qG3uS67~f`cL;fl~_s^?k(YeO3tTN$kyD?Iq0)72Kg|pvdW4Ih-8_ zY6~&wvlO#|3~a~T<*5IAr9x?~;ss`!^^}(v0LA?6NrogQUL1mQG{?MP#|=qi1WmIw z24YmfIl}x|$^sdoAW{0ULG)u_F0JEI5dnvcM&+fAVFhG2hC{*KWGIH@r25*Jxm>>} zjY@K0owKsdP1Umf+xIQt-3i+!v)LB$y05jEvf!grZr}t~ zTn0}|Yb#Nl*@yk(V%E3U`DF;zgIO$1`75{bq)1V^Wl7GLW@hFe$~S06&mm>IhegwC zo|Z+_T3Rli%kgGM<~e{1XVvo*WL~qDxyTaM!gNNWxzS`9Y2#UTR=I*OD?DYh9IGE{ zqn%4;YN{uR`X2w~=LjMY!}681iaaQgP^Uwq*$n%mLNkY%Vg6E*V4) zWXR~{gp^@v4#D{QW(xab$I~cK)?m<#$X1?TV%}h$)#Qy9=$u|Wf}X#;aXg8Q;*A1B zQ&lP+hH0kgWHc6Ln+C!p@v#ct~*g*ux;YK{dNZEIhA{b5ttY_T=~$_wDi-pzmhY`MPb!M@(AHsr-t=DpZv z=#=7_zHI+iPC#UqIerGV+55sML};WgQ7APxux)L9A-WsOTIpWQ(Fwr5n`i6>uv^M# z4qomk?dyZ?Y~TKE8Lo{8KJT-1&Y?-}EA}*7R74kZaUPyZCOs?Vbl4C~IdA31 z&~o(*m2*byO)}#(=(2nI5fu0V2~eF4I0CBS0s%z=;@;Rz8}8!P+x$+(Uju=lQ7heQ z-jsH9W7+|53<(RcfiVKCQ#&*nD`SP0XI?*IRjjWMC}KFCZCCd!aFkq?v7u)gixJgC z92hmj^fC9NUbxn0u$f=f^su{fW;%ct27m>5fI)x_C2EbpLG=MzbRtyb23u*s zEYKZZa*18=6(#nhJJGv|VFaS)R+MwDPB@!vZxYUABn4ucwrZh9&KvJ`5x*~PCQJWh z^to{x^m<2e4t|_o5I*^hXL2vEFqyCB4qo##Px#yhF{eN0r04CHCwYP=Z=6?A zTJHFo*La8j?x?@kb#5|z$NE9mUCe>=d>8tm?-%DaVV~k|I@5VW1Vp}u`=I9f=VN%c z$KSCB=BvNvp?*UUFN`OSTmHgC?^UqgjqQ7i=JLV9V`W9UX=qq~-fBpXijeWHL z`wCQ2SWZV}8bGw~=Kg-xSoZzVI|1H@kI5%$&|>)_|8}+SdSI7d;75AV4|?in)Z@QN zo*!}%L;C1vKq+2)sldvBkLAl@VOAMcDU`R)e@0WRQd zNYLQm0tX5gE))^s;fE9k5i)Ejgh9fL8aHxGxaPyd0TVltENOs)h!zJZR@4LHWd{H& zF;3)w#iYrUGC8)$P~ztX7Z+yYM5uG*ii#E?N@S_jgNLL=OP&A;LL}0uRF6vSioqpQ zqBLDRQDF8g+O%mM236q}16&ppAc&fi8i~L_Vgp5O?F1M=Rc|-@d7Hg85ODz}Cs&EK2gCUwQFG(O-Z$$Ix;Va%bUGC@67+ z4|0vjUyIZ!ch`_8&1GSWY*@#EP;CvQ+l@vQ8J}JjRUqG#C}RJ~We+>ZaFqs0Ug=$y zPDNFk1y!awVPS8E2p)nhnwXqxTN)@^g*;AW1E6K8V5Wa}td!Y<0DefOpPChDV3T(S zm*z9$G3|my!zmtaLCGq^nfc-3VHuh|w0Tusbqq+Oa%I0_(D( zLDVL1~?{M!BY1kJ6fvk_S@pp1#PATdAYG?t23b^0wC#T=6nY z<7;`gh3bq>8o4i}Q`Ja9q63#()VW_iCj$xy_s|=ZW%B>qV7lvV8|!wAe%z&ut$7SH zp)~_nkdHC!aKpuWxQH&A!P2|0M>6lZamOkdN^F@L-0NDQ@*!+O4nc!RP=_sJ_Ab)O zDeV}|VDDk7LCMyu@WbSK#Uik8g1qEj1}_?NuRG%#w%AU`nX|q=&Ffd(BXw~&A5joY z0o*A%O2d5=qXn?eGye@I%20o-?Vx9S{ z@EP(KYp+$ttYJUzTi>azcW)?J0b%Fr25LQPq^JC5leiQ_>{f%jufnWsF$G~LCuqZwdgASB% z6F5k*3rZLQ6x6VUC?LGzYpj3JVEqONtnF;DQ;jjt4&w4-CYx6EYYQ0Er9$6qJyI(WO9> zFR0{L+8D+kJ`07?3x+U&p~`clGLN@nmmmMD5-_i=PcvmeAQtRrgB`*l2|_AEXv%m- z9S|V_Rlu6UhVTRE{VfJJ-~#Pf!?G0eL>bSJ1}pMN3Tha`7@D93IEj{cv78_HVWEmC3 zh%3|q42z}#qp5hq5&VXQGW@{`E?~kR$Z!D>ln?-F@R^C2FomJ6B(DG{W-cWd(%vP( z1Sa?aqkh&D4=e#tGvI7YI{<{Co)&Uh6OS_Os+{|XiG~F`T3?@$M{Ja09qV9)LRgVe zGV0DOGl1+AuD}E*px_FPB?1us@CPOgVG509!Utpk*(>;93P8xgA9!HUq!Ftl(W#zs zcrd0Po^%7!nXl;-%NwZNcfF;wn`oqQjNxj+xX4X_a-Wgc9j4~FN%+GLrZ9%-4nebE zn8F7v9ELMo!3a$NZxP6=-Gcu*W|q(T>f|bS8x_xmw?t^@{;2lA07DcZ1|A?WjIjtn zeUCTK-GV-+`v*lL;R;Te0u*Log(hsG4`hh04%#$i?-Ei=y}NSXU{uF&K7-fW#Qo&*B}BtJ{_0I2uT?OtJoWwQ(;mBm;Fw3T6u zVQiFMY}oG^pyV?Vd{~5c9}rX5WYDIe@*sv*Ry4@|AVD|{yES1PA+i?=uw{SK70mz! zMUSBjRSUksW-wE85RpNdyD{A^8La2LMa} zEC2ui0IvWr0RRa9039q?u*DG-KTrfgF?b;Wp#}ynXsJMj&zA@T6KLG>=!Key8xAlK zn6admIdo8_T*WrpNH_sC^XBI8pPR1Q`Gf2C@bzjRAYXz16%L%lTX+N(sE|f# zC}F}4W#lk{elF;T9f1E?XCZ|c-i2RErDUw@IhcS#Wz_}QREW=QAlH?r(TF5l z9%khuf?zTy#}@+@Y35)nZj^%)P7cA8WkAZPS%Xk%yD z_5w&b9Q6QFEsW@BbDLRY6BLgGYRMMYRgj|wQF6GY2wmnECZL0siYAf%* z4RW6U@MdgOvJhbcTU^=^5xqqC$V}r+nBin|+mFV(Fr4TG!$(sS|395t;8(Q6?+{HWZnbFlq0Jak+io}zWb%60~vFQ}U z91F{|u)^hTq3wo{@);zmTgn;YvKtq<6ak#d=OG*|>@b83H%P`5tr6FTtHTQGB2!Eb zvj8l`Us|>2#4&2;wX{&_Osc#+hxaT4!KpUgeKNGyZqpSjv_aHUQ~k0fOaxnNS)hXd z(C5JHuIIFJJeO^tQ%^)X)pV;7VZ#h!K(H#@h~rg>%uK*schoP0d-fCY@z*!g0_RD2 z;f9-?+_4?=xx*1{vnxlTP4|1#%Tmj9JMO(;l|Wor0uNWvn%eqWn*F`&7wV~hhy0CP z-Y3EhI{csnu9XLj*^!mBhC2g6JQ8lyb7cN3%_IpQVT6psot@t}qsDymzQv#ET0>`m zg3&ZkMtVlFx*r`t^F18wj|4C4oYEG6KCOZ1Qy;3B&<6LwOwEsex}lxL{<9BiS zNP_>g_rE?Y%!DV5!3WIn0o=u;R(io1bqoQd(mCK_HY`z@cF4mX289YY^U)0dceJ46 z)Zhh`DFBDIMIk0gK@W7>f%q7(FkcCxcnxHcdqx+43T6mv=+YtCFz6Wj5sPSi7=jNV z=Ys=Op@ya_(XTkdyUcxo4VH)ked?3F0T}0aW<-GUN;f1j?&fU&TU?h$_5mMMVSzFP zog~ZhgQlWPWr7Vndx&4 z+Jc}R8!W_>)65zyJyp-qS)fq>3nDVpb2@Prvy5TnmUNDjmm@SOX-W|ShM2g}(4lOL zo`mSvR60>HndqVzrCgA>_!Oh{AW2CHfv`-#0;b@X33AQ>L*rYD|NwA)8%5jlfaEWSAyWsZQ04%akb`VQEpV62_g11VOu! zpiYuSQy^t6sa{2eDsKjoq}*z&TLojzqy`HPL-4>3uvbn7K6Gz;O&1uwO1XN5bFhZN zDo7}Mf(0dkok@A@3KDA8*~pMJM7=6j1&diabP=m*eUrF)V9=cZ_6dE&D{bk-RvgOy zm8+L+?WthP*(Ql$4Ug=@y}>yE}`5lO&%1hl=x3B8G5MYy)-M6+hV)Kot zm1qD57%VACI%A#3&U;=aCRnZSWDa%-yBiezhW1dWa#XSeTqS>i*_OP3|n^F??ImjVCKtJ6IR}U(+AykF3l&LD{L7!7^wL^3UqNK4Ty9BA& z@ol94Y}-Csx|2GsY;%|MWlv|;#(v~8h$IacxSslcvDIu2JMC(g=(EjbmbK(4Ltcue z_|`WTwyw3zYgg}B&rZ2;a-dn9;UEjy$y$T5*UL~`fqBv34)_tuyCEt$oskm^k@Sxd10DV`8P9Pq@YE1vWY#Q>$UT>#P) z;31b*a{UE3Ah#}fGuw8z`|B2sA3Op6&Wmz*v~Rb_3Yrn-Hl!2^RiTeGc&rXLDPMb6 z!*UrUJ12L!ea_Q?FNexziMf&mK!x++iG30L8*PX!W{H|~!l5%eWI1GXS3~=cAwYDw zX+8F{?tS7Hm!G@)?&-ppB)ZBTHMJ>yE5q~gwDI;Y<2UY3z?*X}VNc>ykd61MXP)Zl zQ@eo!*VT!Q9e9$~LI6$f?qdh+jr!Im)m4LJt^5A>Byis#T(98a9rVxUoqA^yr6{~0 zO@)Z<==MxC8Tp!qMnR`FUn7+&Z@HzUR%RDsp0G-oaaxjA!Ye7AGF#|y| z16z{>__KdUQ3jNjPP;S!FR*!e=3y;He$ql_ZWMa=wruLQexDTsF4BNMKpaTG18@)n z29+T`Km$lng9wrYu0nZiM}izyF;#(OC8vM@!-5G|W~{e#oRohsKn6Du6&nDAEbs$0 z5CX5#1)OmMK;VNl@FT|MCMhFaJl1N9u__}XKhd*NErotzVp&sRhX>FkP(Xo9VS)VN zfi*yX7*~c-;9#BOhbzK=9)WZPXf~t&VNAqA&|MH2%cvPw4aM}DLOI`AYI(SP|zCdYVync`c&))bPabSVgJf>e6D2LaJ$AGwHfV~3DI^b+ckhQq~( z59w{grIL$rZEyxyPsf0irfTZ{H)I4UU{I)#*d>t$c8(9(kjBU?$TN&VX+L_WPdcR( zq2+i|n3JZreex!UCfOIi*nkj0l!~^F$N?Jilo?gkuijnSh$s5xe*armM}+_VgoTqqXcX+l8?u8Zs1A|NOlK?V-$s8R1q|E78OHD zm+Cl~gP}oVxe{)O9G3`bHl#1W`+zmah4lSafKGc2-Avn}{lx?kQL}v#2Gh znL<{19@zk|a{~m0R1KGIhccw3rDDX#r=pUkz6mjeiV#jJs=7*ynPIAnqL;44WsV9x zH?V0rAOm-KGfnwtX~AEYS7o=VYkxVL!WwdU*_UbxsxA3#1ez=NHfF1OG(876q*fQ( zL#+UGa(9PVR9TfVni9n*BdBv%y-GW5dL$0nlAC#La)_ZvP*->Q0Aa@fS_+LfX{(*O zL>WdpGBSyi=0@Ebs&T4|pD`KwRirsTXUM zU~+srSD*p^C#LDjdTL|@M}P#c`esgPZ5)Je2I*X_X`p36RwL4)0lTrJ5kEa@vyEAC zA~I(WwVE4=go!nv_jr60un=boOuV$G{?%62@qi7a*pBS5c@2c|gLP*x_lr&+g-o3)T@xK#_ei#ul1k{&dv zf=NUIttn|E77myNs`kyvi%R)N=+XAZN|%0W`#KHJhnh zYF7EuwtBX@Ds^Qt=mcR92MgQ;4m<`8vcK^w!R9GvbIZQ<>u4G*y{*v#M^PRW?7pgE zVmb<>tBWKsKmz8`My%_&>I1*;+c!a=zz^KOHq0g$?85px!Q;ol^7_8>+jJ(=vp%~~ zO69{iRd;2HeQcS-9B>0|Bbo%o!yz2P7Ayt~oW(bM!*&|OK5WHumaIaxlR<^S#|d~Y zCS{q3nl|^vAD}PYSOU~CzfQcv=hgv7Fa|Ze$9xtm?sMZd^K!ZO6hd&RaN z6@R}~$m=T|H_**C?8#%mV7KhV_#&xhB&B`@A62j#_S_*KL{&T-%|AM#L+H;{yvfU} z1pKVey?k5(O~9K4sGoOp3Z*ZxOEeWj%^3_`8(O-VrcUB@#}ypN$XhX3%*}fLT+=ko z%fUQd9vyfC-E{kAbqReG?sroF=F-!fsn<**j>7{?jH$TBL^FNUQq2TSu*hg9WKUGU z3|q_+jE{-Me_TtVnk+#MSbA*=OEgfhv^dPH2l~!ZH=70sXqO%4vicI4JpgIMms2eC-}Z1N^n0`8n!r~ zXb8LyNK$5C)2!Xg|5w+83)=wG*W&5i4S2K}n!nW2d>LZPKwYiL!$=1|x9Z>ph-Y z4T|i|A=-CCISMkHCf~i?Q!ucdeVf!(qTfHV1ph77MKIhvoyyQd;L=@uA8t~C*d)%H zqiAf!Wo*LVc!fx#-YW-c{+HYx&NuFgBYOgkrCZM0nJ6Y;hei~`O)bgJg#)c}g*^V- z`TbX7(8)JV21!sudXVGlf~&^6GzqRqmO7_H&f@Ok;zM297XD!ztw;1%z6z|sMNp1o zn{wE@BTAX&!KQ6tt63n;*zv&yJimIlfHM<=L4}D=w2RYmk#1pF14Lb z%052LqrP;s!N|wVuw-$tAgKe*^jQJBE8K| z2auoRCVn?UF21SDZgU`xYP4SEq%Q4lY(`=IfImRg*VF994mOTV9Youw*bGX( zj_V?>QRdF%9sI@e^@ha`$G}e6A4w8+Jwr}i;GTZkM!WBw9qUPD(mf5jVV&s*F9qcZ z@u__4$@%Dhvfa*J*i4zpvh8vKS^4Hu@dNVXz6b07E@*av&aD0vN=)ubY0E_x z?sab9{_49dZ`ZTp@@)NfhyJ#6_B!`>?@P2V>VyMyeoiDm-MTJx=e~3>Z>~2Iq#^2< zB_8w2w2|v8A0RAmgRldz(w*3f^;GQJsAiDa3Yo)WwfjEpwg*aCZ@h_;;$^-DZS=Dr zkMWxY#67RFB7e3kuhos5%v0Y6g^L0?5CUxPf(ar9BAe6;M`+YO-&xb>(){^AKgb|w zBZ))w`mIJZ0N+(v>j?O^6P@Kn+s0uZ;ixzI3H{0nH9V3I`MytLXD(D}J=#TH+>xi< zVUOVxU;8^%b_zdqN!!=?&St$Iga<^*cj8Ed?99ynKL8Z%>clm?vv2Pepy(gg{cy(T z-fsht>ggzq17hI!ZJ%Y|FTJ6jv~>U4vm*8(4-gujtl*#`0*eX>DI8qk;6Z`|8$yUE zVW0s-j2AD!`4I6=n~x(pjvz^rMvfQ)GCtI}vH(I7aAe4!D8Z!yoH=#65HYa>gq95? zcJK+p=uw{)hqgHIkSPWYQ5QM{P~yWx3j=OSUBF=LO*K3}WN3=Og$u7x0FFR$zo$}d zdGu?d6Cpv8j9cy>Nt+>JMIDo zBO*;V4eg7p!u=pvO2CZR;6OX642qEH+mE=L=G9fh+!ZYzi zQPC|mbu}_lM;#SLQ?(*$N9mAak)dW)1JjLG=4t1J8fDG2m^$ku7no%4UysIkYbiFq0oikj-8nc!$cC$+0~P6DhmNhbZ9(Fm zo;xWj9MQaw7pl&1R=!dFv+tU{F#U9beAqZ8unWJ~Y-+P$gg(;K61|WTR96CpO#LPS zclm4(v)>LGe|Bo*t7uwgnimdTVKDW8zV!D7>9kI#~Q?Q%!%{vElYg*|+64LV7THV1gYiXh9|*p-n5@6?;Hpt2z~}hXVO6=C;^CBWFs3)$VMJ05eXd-rH*#YiVs#{ zf+Yy4g#kOtmOS9c10*kyf}A1&5m~!gy+CM;^a0Pzs5KF_4kTfS1SB+>4NP`2j!kG5 z*3#wzGB!|hFC0@@IH$kR|7bxdQlw?07RVM{{_j<0*}x8Vmql(i1c%!4S)?{qL1P|M zlYoFkB$yz|fVoUljv65%1K6q;P)&b)uz>PxC_`Wk(3XDN4)b88f-B7=WPEa@vdV-b zY4(T=k?=$&k*Uc%5RnYDAZZzQQN>s+&ZL7JRzN2p2be+uY!2;a7bg+M8#Yv75M>$_ zP|!Z%Z7_!1tC7#fXoDQ^;RxPR#0~5~iD`ILlR>lt@4j|WiKWzuLfs7XSXoV>__2Tf zi=a9YTB0rrBy5J%lNN6`O^a3pcUDOPOw=O6 zYSlFupr8jv{~~e-N!-$PCJuI3HBOZ*(za9$qAxYxA36z_J+82naa7LRaIE-P2>g@; zG$2BgJAl+9I{tkvFw;Y7&U4L1PSDNSYUaU@db(&s=4W z7@=OcDJ?Cy@aB`)&zy3(vx^`3Gf(>xW;P1)bY{%u@n&h2G+T6|&+4m5W~MQ9t%44Q zpqGpO?jmq#Pi;EA&%u@y)ZYx#pCvqi4$hH<4Suk0P%Ox=mb#GB7AKNpwrls!K0wSz5^ zPv5z~X9+E|u8Yv9mZ{XkF80G*J5-eMPY3D76w#58t2dx1gMY$XCmdG3 z`~B~LAA68x?JP3;nC?+;d|c&TS;tGh+%j~g8u%^;J&$|yoIm@b>0NudMo}_mM*YH3_G8;-j_dhGxx7UaA?KU`JK7epX_@30;Ix~A3>$A7o z*|47@C;nr#M=L(;89*CZnf)`c0%V**>mM>P2wM7|#?U-|Q@~$BK-+>qw(%Ut`z;VW zl|ADxYjUj0NT~GV4}rnESMxdSU^tn{r^rIQb(uR|xxYTc8a5~zCBustco6Quu)T1p z+)_HEJHQk29v5jpY_T_ZOF+vDJBdI)E<`DgGr_zu3c%5U?L{ ztu}NE=oqwI=p3{d3l4lg#E7i>*dQs~K}lphhRB316h(QNxBD=>U&)!sL&6^bf+h%q zIA8)-#71s30{F>+=;D{{v6~H00x>X05Ng0;6f9U#0L=l6fZ_oY$i4KN$2Pn&iLA(_W4aZ= zNR4Em*b+dtfjDZ5041XVRxC*{ILVYm$vBWSGekDG7%a}QfFqEBEzrA<%)`Plx|MUj zF~rIKTaK91yn!azTXkNwmizE zgp9Dn z!=t1+2gI@{Q$hoC$*x3!8VCX>h{b-SOWcIYAn*-uQju#K0>A(<|JXAd7ecvfL$e#a zu)ABrvE(n+EKTBIIoX8E%dF10RLLR>ml8vg+tPw_l&D^l!F5cm!Awp+DTDwI%t-s;oJtX}&~!h{=&dMhrSj~+U+WC)YsLs9yW%oTb%M{z zRLQx-O(d9!-ekNgn1J@60vqtIz>~cRV^GvA5$_tIUmQ(sQP5Ge69=`<3?c(7s7(pw z&Fw6dkwBgpKmta30citJ<=m663sK)A&O0GXc9IGdUC=6tfgzyI+{~aa0D>#H&Va-L zIJi%)Oca=!O#%1~{Njvfx=A{EP9UvEa&yh%WDQrl#0#+q|Jk$w7`;u~L;_H71Sq{u zG9WQL!kqfiPbDBR@`x~Mvz!5~spBiN0uj@*(ho_D%p5R+DX7d00tHKufjD^4I0eTV zh|X>EO+zb37!V)71XCut!wwt}Aq7$K95xF?E0tRiaKwQJoq~IjfmgItY|KhBq8#sV z0a?O5bJXAzoFNz@*N^{i8EFV>D0&9%LCD51?)VY`BpQ4d~ zK212}G>hQ68W?M#9VOG`XhB0|z-~)alVglpbW=!mR2Q(-A}FnN^vDf#!UKRG#=5b{ z3%qh&wa;t15gFE7#6N^;8Nc}{z#vJwBm z>qPnEql-})d?Q6vP0jDpl2v8axRzQu&Wrf*h6fvOE0V8MP=X10fchO5B&xx>jlY1kxydaZh7}c~ z#68Nh7Ua9JS^Y-wHC{%*m}>uooW4K;w%HVh!ObeA`+o;p9v! z$fb(M9oM<3KA6L&z))GU47d-}-uzuy{}NW+64l@HK+>1Pz1lO_uNtAG!zTHO+L}7H zOzhzhY~U1diwHs8(Yvaw?oVX-deUcPFiR_X7MqSu8s zYG&)AcxSb?L$#J^eI`4RR=F)Ew+wq^Y&K*+_Da6|032?D2nB%7LbDuYE}N_KAthKgJ%Zr?Slkh;OP$3kfxT=>u4|7pY@v1#gGTM?E;VQ*()X~K6Gra#3^b+gZ3teB$_DD6rn^;Mi*W@- ztMNl>`sl&_;7q3K<7;mDUL~I<()MJTx zW@XfDa0j<&!b?}EelIJ&xBq^qI<70cu%8MWJzwPI4LtF>jqZ&0?)!NWY&wyvCh=1i z&k1*dY=f>d;6;!5+ZUh-0rw^8Ml>3C?$#~55f2I;ck5vGL>!PQTWb$+^cETT0Vps; z0XVU8Ok5T)gZhpj|Je>iG^a?yc5V?4ZV?Y_9=F1pbLuU^3rZ6K1E$iGa9A!lLFGDv z7tjmO9;FW1PD2izQH|p7#^UaQG~;>hv#lkgezW!t9g zuQvDZt!rgJiVn7GdUo8hBWOC0bXOPH;-%&mr)tT?IB_@D+gCg?$*B# z-{A_eJxIrQ|APl?M+0|lCqY&xK@R2io+K`h?*fnq;)YjFgx78y)?wJpcjw&r7MAp0 zo_K}NyZJ75j0csGN7v?gbd{g^iU0R@9(bCs`G_ZEwSr`48t#QTR+x`@cFbM_6-_*h zXKN?udiTWoAsqX^zHMGNPo4JV zCWlTtS7V>I?0GkpqrdrHH~X`PW5~UGQRR8>o%_`kZ;4-erSH)s?>}>Pe9Q*swg-0~ zR(Ynk`?`Pn$k*t+AMklE@X2@JrO*5fkzcXz{6WI*QM5QFx0X2vd*)I5)<@^f|Mq;W zc-CM1|M}DIHBWa0R!^vhP10uJPpk#OH4sHK9nheDGH<^tWz$k9)cI;9&=d z6%Gcnco0HOlm!YFGHmGZ;Xx5D0vt%7@FB*G3_l>O$N|B{kP$(&plFf7MGP845(G(5 z;)IhdWqNc;^X32+9G}>nDbNClpa)Y_Y+$tI%M%2AGW9vqWYefKLlB9vBSV9ZNL>is ziBp5rs39&C4O_u1fV4x+c7;RqDAJ?`&@z4cm2S!#I82}@kw8z~h*-;}q^m&%Vy12MuAwN&LMh*?kj**BFA2rMHrB*$v2Bf@rb! z0aW(kb^{GZ)G*LTgb6TNd%0D3+y(^p#~5xFrU+q#v;hE|dkC`FqFBuxXci46pwPn} z4s@s;j5liL8bm*;I2B1Wz8GR?Gb-tnjY3AX0}VHHx7u+*{s*8%0+PtndJ%9Y|D}Y0 zvBjigPCi-Sm}D|V#0FgOSU?K~YUZ1r+M)O$m<_dgq(i$s*;YYKUe{-s#1*%vqQvE3 zRSqBO#OP{Wl}H(7drr2gc^EC&D5z>A85W@<#-(PWit6^~kuuoO>3J4#x~d4mk+o$^ zvy~U?rMY@nAPH`=g)4)Wnz|JmYhnk20G-(<0}2@0KvZ)j1?b-$*?QRQny3OgK&Rnh zn<8@*SV*h0&w*$|4mC{MhOCroIUt$w(R=Qw6(le33$DzISN;sq8;LnvXw zyXoeH=dohWCu(=!Zj`T7^9Hu5ti1|sB75~MN93=!YNWBgsnU2Jqkyt3|CMS|_(ogD zA72_}XH@9S2ck%d45~u?((FT(2OPSuZNi#c=ut0QoX`eISN8FQt;HJ>Q7LF~!9-O+ z@j}*N_h{(PW`W#v3>fz8r?E;e{hib*AFL92b)LQAgkXQYGv8@5+;D27;(V6fbjxNl z(-)>~<;iW|dvM%Ktqq^yhwHa=(qZqt_XQBQ3?@}DNWi$V7gt+&;U#C$A|GkHpu#Ay z31zL@CsYRO zwP8GPi$%&2>1;g&QJ?X9#GkziKG1;<-u`WT9HD~}LtIj0ttI+O|M|ckr+zAhuGbhF zh+%%s@<0-hlLQ$+K@CRO%M4_25;E8?0QF0Y31;xO1}1O-d~wbYa*&}LP(gKcnO*I` zM2Zn?peoYCAHTHsKk}Jy0%em55@==;CA13(C4|EdEP{d{Rs;w$Ad48P0|g$w%mzLn z!4W$H0vV7_SmQF=D}uoUWdws5%P7U8b|k^ZD%?9`4R07B zB8VXgbfiKOj8H;J($S7SGy^AjR0T0CVJ}(<0uYjClNucD|5@(~i!z?U1Xl2p6w3fc zGBhD6@---Fm)sw*?)Dikg+*(686^sEki0p%#*``8K^Yc!04*>vYDba54`i9JD)ohS z^}6Lsn81WDYT_BfSm82+k&GZD!Id`Y1N$0?rvGp*asHGWtCXa~XDTEHM*!PjhzNrY zT3`mvIszCf*v)={6QMR)oDY--QvgB^O3OYZ)ewH{Dbqgh(=J-luvh_2r#c@4Svr{_8R-ZD z4GQ^y889IU&7Hy+Iy;28j$sNPpl%q>a0MeYA+<$lZCb0)xY{buVD1~#8?JhkXk`?o zwpFbDu(-~nsFR)6NJlcD5UE}GZ>`FO+gey2<3Q(AV6}sC8GHg}{vRdhBZ%PoS zm99k;6W}rr3D6RWx562YuUU#~j5L66xTbI<|1=0FI)(6oxyb`?7>Ixd0+%+yQ;_R+ zn_z_@0Kp2*O>l=Zi7*crOQT4so=+A^gCvNcyvzG-REVL=LNs8$rcmS;{|8DiBrgm_ zh=CP23*am4*a@heqFJrr112n?2UlQeZP@@jBG+ihQON+3ry@Gb5;?bwUF15KvBfE~ zFmA~@3$3iegYJ&;13Pf<7%Rww#U6RibcPLvJ(9QU!Qcq%qqCnG%LHJ!bJXnA1ceEQ z0rboc31tARi1=D*+mgNqLdYLV8ewg5&m1U@#4n`cNA25_Q72aPsm=}P(ff{2U-X<8l8)D=`B~sPPNRr0qYPS z+=_sWIl*TEwe{W(4Y{}P-@qSl*+7Cam4&VKXz;ul!|mtH`|9TCx-D%G8>xTJKD{sR z;NZiH{|5|!!-Wk!ZXiL^)PfqPP&;deKEM6~sVZD_w_W|ZfCH}GmfL@PQDq=s-;Jl> zf{XED+X*o~3S>w)!~?a#N7a7YEoV_uq-C~Ukw)_8fqwz+NoQSVqG_mL z$OZZWj5*w}5mHv-D4bZBixays!)&s;1MvO z|3Cv%4ZtOkq@0>JS0$JRumdP+WblYiQU;2vkDdxDYJsGhYG|SmShlD~TudN?3GL~3 zEU3ig@>LAESkgyEH4(7|SkbC^<(C=c#e%y+!nZ6{%{r?jwA5+40SDKbfEQd^{K+M! z)o~_=XqnD5)39?S!0-g=+DTus#`;Mnk1Nz`uZt&Q`JZ(b+~5NeG~#<@hC0QNl`e;j z^Ubij4BJCx782a&8b1;kCV-*tTveePw@8J>D#rF>3`58O13}SdcqM@2COqsR@EmeT z%$c$v6ARkf9FlBc-YE8YWLN3)oj?bzAkD`GdfksD$Y3iL+kP!#LM32rHPu$b|D3R0 zBZl}XmF%(xu>=+*{w|SbV+>l_YKsT2n)}kmbq_WmAqER_3C`hOysGh1%X?oPGZo;n zy(7haM%A9<8b=OZ=My*`VC7)$pu`aR9Z-epUTipEC68zY^WMZ`jWuc`YMCFFxU&9f zigm{>J8+YS`Qvpr=y>~YgWn9;@CXWo_#HFz+j=0@^Va2jc6I`LzJT@D zr#Yp%Y1v*2a)2}%OeO#+vKwnMb1L-d00k%j0L)$>8Ar^?bJ@|;$1E4I`Xul({Og}^ z4hO)fdEz`2@2Lw1`oIoUH8G@9zw(h`?W3$IjS4l|1g0ho)qzj zNIW7R7Wl&h!J&uz;(`xQSc4Z-;e&MJQ72}jycqN%g2U1eO$hL`A^EU{u3JrfLYTy$ z@rhG~8^XwDB!DZ@sWu_nLQiPoKA3%h4VKWK0!8vfIIyLJ1KJIXMED!{(P}&FBAE-8 zHkmu>FDvHjV@Dn)F*0uIL1#o`1cdmwHZt;59c&_5{6m8n&_E1UObX?Ms2G>*peJ4= z1P30$yjx+clc0o+qQ?SEWqL85o(wleT;2Vu3|4t9_0dnUYjH|L& zm$z7M4M)(64fyc8^Js9M_gvk(PE@#g^|MR?{SDw0_e=k{AP7*p!3uSBQLmYFkezDg zgR11by#TXAi_9ot2#TUYifsoU*g*>>BZYMK=%*;CO$%Dcl_~+G zb16s&NGK53Q9us74W|WP}OF^<)w{lHQnkD2zZ?jmi|6XjL`P}OS!ga0F31R>dSU>5rN>I{)2b9t^31HQ-n*~+J!09369!R;%rCAG>y1kF- zr2{(LP4yNUXhAOyoUR~iLnk7V&&%|e@LyzOEJ^MM74JmN*>l~fvb*=NBjb3G_ zC4i7fhxMr2rSPR6plLbHxYH93!A3EgV2BU`(x$#`s%7otEE`qMuy*XMvn#mPD8|%y zMckBc#@)$8)6uVnHQ2gPM$WcN4#!4zV1}&hnp&Da#v#%`LmO;n3xU@kcAXxP$?kS5 z5zE8=92BwmyMS3>A<~L=x`jRGaJl=O_}=ne^ed9$64xw=l1t;dT<&RGo16#s9j+nF zyh-o5evDHb!0c$~6_;B;XS_<=sGUXal0@6v|F#YA3NGTwarn*trE&h`nc`+^@I&kV z_bFB0ho=3vnSwTt1xrAgwLA#eld5$~M;&OIM~BlqJGsso32zCrnaUbb2z4urbV23V z;mYC+w6TqHG*^Auo4Gn-oqgZHxmMrh;qHOgWmN94!v2u9{bXtS=Z(^E?=1A7{GLUL=ij)VP(V({(m#Zo%c9|A^H46odKs_K61)yfQw0ExQ!=w6@KJAZUah z1b_rIm_a-JRiZK+0R?Dae*pjkK0pOSummhMBbd`|rIvilHBjy1SQ907Fw%IA2Ytg- zc-VIY0Mb1SF$0TJLxV5`NzfEKKyB((LjXbqNiZBP=YSOFa~||uw$py@_j}b=7dh|) zGOzc|nV-Y@(IYG!X8a6}FXIEynd{T%+bYUJ#M}w1NgS4Y>)(3zz zKn4Zq8b2^CJXnMag?&Jfe}tD8P%;B=f-+Dh2Xc68%;#gd=Pq2sk_-5cx+zO9%i1|3!c=cYcjDWP=fKnHGf>Cv}8jGAw6Eu7Yk+=VmN) z8IM&bbOjYq@)7kn7f_B0005#0!dIIT>yzxFar^^0ke_;bYyj>7UWCQ*e8@? zCYgvR%D56mVvNRTk4HxW`1n5@!aBinZCN&GkEdNn)^y!OXB{>b3^^a~SRGN7jPVE* z+=Pr~=XOVQTyiIFqKJba|G94$LVTweFRZm35UC^d2p|+`Y!1m${+1HWX8?4#iRt%g z5s_r+8e*xIeHN3tp^1Z$kME*1CO`%y=ugA9TfWzab@_S-Bxau^ zc3Oe}U|Dx6!I$a1S|+Xmf=AwG>Wk2hjnS0ut}N3G-?jel7x^( zP014&n42a+jt%jd4Uls#>0foYPl~eyyGT^B)|TKHe5II!S80{Rb}W5K07dDSdC8PV zIhflSfl)Y|hFJnO|1h3M5P6J;Z*5QrVO9Z3=5)ZfYj-qUKlv1yxh0>;n+I`pm?&1l z2^2z7oRmgLNmvG}=s^URT4yCOeAiac*)-3Gc6I`rV3r|f#+mXMoZEQ-`AJzd63Y$N|R)>Y`ltbzmJ}6gwaT z2zf!yh8C5jJu14Q#OI<}IRY~Z0o_ug8H%44*P+Sib`7YMtEPJaGNRjvj!x%y;#H!a zS8PjaEUh_rckrZ^Cz!i6rF)5z8EU0Q@)NNU~2e#IAdFj{4zhjmoR zo9fv#i|U&g>ZmlDommQ=#i*OQmmv^(0PU278B_rZDr60{D6J($SLYhWY;S^E{e%-Z{Ze?(hd6({je31&Rq4})Q z+5k}4uDf|Dw;EjA!UNr^antjg?gs_p=3Y86P&M zl4G+tOVTGVSxSzvWzxE=6}ft}BVlO7si}l^a%2Q1Fay<+SJU?& z2+E+jDqMyNaqyK+5>u_Nb4)8sP=IrPbAfij=d}sSQffA_%d}*_=C!fJjBImVs}ho1 ztEL887iCK+1Us|YqpxkNFA`d~6Z>9r`F?)l0}-;0(zzDV#3}`*bU2H*Jew=Y;jKa2 zQWI*pE*g+>dA0+PwrC2vhkLplh^@a?bR?;`GIx;4dYPO>x+z*Vr^~jud%IgoxM0({ zz0+drNVs2?Y2ntoA8A!dlcqh(L$`7rgX_DwYP-0LadGuF)_c9!%P-t|LfeBK&5E=& z|JJDjyB$d&wKf2z?^#r(8fqwj187hLKu`o|fCD5tHnG{e-J8AoD;v;Dz12HOdpbk; z`!;oSfrC`6SCX%Qx4wntkOLqL z!q9}E9GbOa!d|yS0|U@KFwmpV+rb~)y@^S|6P&{m>;y`{!JbRQHC#v~jK7~tvEr#Y zv$BtGKw;M#5hx6$9Clb=cK@K>l{|Hh?# z5d#+sf=#?)9z|RmDUfjty*(gVJWwI{i@jx>y+l9;g1p0|T*_oX1Z0}V(>r+8`^kig zuG*CYLJGH)6RO?owAJ@|o&3RiH^9*Qkvaed!aU5xT+GD$15n3sy{yE(j60W`kWF_` ztryA6v4*bOiExw02z-A5N+v*H%%vR85ex)6C9u@n&4?^oHK4QyLIkGe11*5c%`;Uj z$`sg}npDQL5!YVnY_{3T1q5`w*Q&2>(aSd=&VUTY7go@EY^wZ>V)d$av5Tfu#6mdJ z%640OgVjoxO=%?49-AZ%*YJW5bee#rP36ew_GOyRt!Pq>^5{P(JI^{L_h;?a*QLH23mc$ zZV6fQ_0vHe)=02qOZB!i&B6k088f}slOPFS!mA2q#^Cg?&2^ibMFTZd-UhU8M(mRm!%n#kqr~)mqT-1G zQ#6CSERr&KKfk1l)|`;t)lY14-NY=j+Ksr~t=gY-+=K%wp}k>d1h>uY+`=`&yHnKA zOxG%c1e`$MaWDgMg5TV&-hv96xeRjfU-31c=3n%-2GtYaOrz^lb!h*aj4S zmn<#Yu@>UOGomJ-z*8*X`5U^xZBj}D06PxL@EymvR|9D9$6;Lr3fx0A4H7f=6;H;$y^ zyNx{v;|U((GLQsCz}pa91WEAJ;ElC472A(z;gK0zZSLj*{{-hgIVgx3H?-U3fm%=_ z`Xu!W-YZ~auQ_{6{^GQILV#Q2H5|GK09QWFC9WjP_Py!$5m(B~&Jmyo3<^m!J28}( z+L2y6h%V8nI-h%@+@H?nA$H4;Zt3?C>+wCloPMsl&JkeZ%B_v738@1&&`vZC?AEqU zk3F5l9^6X~YK48%t*uV)&E~=4?0v{WQ@sFk!~n9qn8+UNGF;``zTd{qRHg1|<1Tnx z+w9bgWYhTr<&2uH-cfug35ZJU=cepdLRe{@k^9cp%aZT2+b_~CXp)ECd;&#R?w+c) z@hcwRA8$s_9>g~Nbl^VC)s>#rh%xfs@<=3FIMt?&9>R@Xba7cYTp-0EZz^lSX`-EHqk3Nn~e1}=Q` zUvsfykk>Fj#ZS-Ho+PNYPUl&2@68*YK*zvY{RG+!j&!0l(~TnOl>y&~l{inVW=xPk z-*OCgUOWxk5cBgL_3O2>l#O!LhPg8#P=GpIds1$_#H*_43?H5@F9b}^2Cl2%h#B@`FMGFctfQU5 zDtgjR-rk!F!o4_1&S=1|_{JhPYTQEO|B1xUZ|mX9*iWRO@-ynPea@nu?p~|$ zwGUsloOy%NR&1aI0X@E3ru53rT^qjhqy!Kl1P(lKp~Qw35gZ^`m|=l}hY?pyY*-Nj z0T+5OXz-wr!bgxH85D#Q;zELp9wky>OrSYp6DrSmMAADes=3+IVmVs8|zL*vfX}LZeYF7?u06vRT3f zm5#pp*sWcZn%hoXdi745JBeSzJ`m%E|BbJq`{tklgGi0Fx>r^W9+tRc5G=r!ekojy z>ds`HKNd0Bv+T>KUwSS3P~gtHotNH#!`HQLz&Di(Kg{$%3Km@vJLU`*yz~H8qjx8q z5$jHq&eI4##iB|}Bq`J&pezoGLX9^ZlDls|m|DQ0w;OVZi#>)QgRX=5LUixG>XsuA zG59zuGy|-3 zZmIt`oUu8-JUH{9Ep1d!+&TqQH)x?ejD{a*h|mRCH}tPdkC;uQL}By9K!9F_Ew0UA$<#_s z6+bB_L>0yz$?5}z3}o1$T7uWZ^GKDv4N$xV6ZSELLj1JhhaYg50pUPBt#ers_f2p@ z>4<~(RWBPp(AtrR2&!O`mE(1_L1#m4D@M}I;SAesAeTMdsGy=iW@2fRE)Y}4ey0(``!Z}#L$2TsB3}a1T{JrvZijD z;no8o$gT@6AYT@o;PEVlF=|aMHn|g45==-5NJQ}uc35Ext#~KKAi@xckpT{d;-iWn zD~I*dPn;e=J_u$mc0tSvbifrj(p3pyhU%ALAR_^)_2gc(F`*~`@y9&)LKKleMxuDP z#T~AJ2OPl37~7{YFTt%Sd2C*{O5;!xPT-T6iinAj)UD<7cMt~0vzO^3g-+W;aVp| zCccLWk$}W1Rhf-EKq3-M5SOl=2?1EB^P3S76m(t?H{iJoqPGmD_{8|et6kDE0)qh? zH2KY!*=0j!8U)fVK!!;8v6|Hc=pe~J3vV7Yp~-V3e~>pVK4?KX=6llliYOf{F06R$ z1ZsoWvWF*70R`D}A4u^A(_QgKo=4Eo32tDAI`q?;keK53B-k{S+)9fBOkYEjL#SU$ z;FmmI)KKe*NsN}}e%D(lF-Ka05G27tjU&`PDRGEE8937IZ9p{Yb4EHRkP-2oi&23IiUk52?!bh0phRm=c!)-}qFjVI zjwshSobTLmoRw{A@j^<$Bf8bIw*_tJI`dhSc(p^4vf<-?0D>>RMha6{tqP|QtXVxR zW8A@Fm87>XDk*5UX`L%NhiJz?p-V`6jLt~?#uMDwW(GabUJ!<`l(Oj{K1BJ8#k7Z9 zBt{2C<)Wug&j((}K%tjtbi{8Be4Pro6}R6RTzV55x!xK_LP1g)65y!^z4Yd2dcmRI z7?Zf{8dt+Ot=CsQvb)VllEDsENTF!V(9a=DE6h`7)PkFm9USnBeUqxnq^egD#|o(w z|0Sh`i5oN)<0!N*#%Wq-471F>(K|OSFFG%hqYplSSU&4P4#WT%8xX4o7i*jt(B&@n zvNNA5PK|-)*Pm^kQO0Zi=+c-B()In>%Ot(5E|)N|u{n+lYDk+rBcL+%;>dawS{fYe zIofBzwaW>_ik11SNdOmB&R@FdpiR6>$LLiHIvBzcU>cxLia{d&4f@Pu{nk%Z&m3NVX3~Nu#1eq&~D1NOE6gqPuHr|ZEL2oYn~3%+>0d^kwo6R)s&5(LDAsz&8=$#w z*}LLkU-{CPrbIdy$l?rrquN>U>9%W^+~A7)-*zomchhTi6~b%Ijb3m=>Ycbq=PcF+ zKXQM^C)kN6_{C4PvB-CT6HOFHTmJLdo`eNzafFT70T7PwGD zKZ|4qm)c3S=ia|v`Vyf+ycCG>b1m8QRFgle^si-?>n>&zxxl-rQjA6_49AQKPch^PmUZGKUyD|0pas8A!7Zn*lUf z0y8j!B(MqFXeYC>y_vDKtuQ|AOSb|uy;7?r8u^$(jDorf#M(;4ECVX5iNhff12ZUs zF=&D?hyzY^f+Cm!E*JtTw7PkDkKxIM9%&}|^BM@$x%ntUj`%2Z^O)y=y*N5MsBy$Z zDyT@*HyYUiy+8sW*hEg$L}JWDBS->Z#EElBK#0j4FY=-rNIn`2J~Q&X9UHFI3lDq4 zMQ$4mK(W6^q?K1xygdm_m7310Z;%|5>xY@cN}nxjqwUMelGb z0brY713o;{MKe^a`^z+ZBbAm+Lg_$(IK;$btVoK?#5gbl->@ZS@d?xLPNzaQi-N>LHxXFpM%849`s;UZ|7$*gBGz3I|bNekwVm(95 z7~+eGzB9*e)D(p}67WjPiTI5hpvjuF$*auC3?f4*@FfOBfouVR97w}k%A+u{yLaia zl9VvgK$)t6$}Z7J-H^#6h)ArwOn5v39*_a~=n2U>07>zIA5bm|EJ|JSMpF|FM0}*q zqdm8LKJ?lwvWS5$!byq5%exeVK^T~HOOzLY4>=G6{~Vyp!9+mY*|`+p#oGg=)f6s| zJ41tbOW;CInM8uToJc0HO{*LV-u#`%kthI&fg=D#mOxIz6UcG|BIfKha1uJdd(HPu znzxh5GQdpg%FfF~g23oaNdt??Doz_P%i}RjkdsaIyhT}wj01$u@VYd|tedB)PWwy( zGOz;eEJoez0lZSsY7w3uKmr>0p#qdS3W7=VLd|$##3Hh_=8QrzT0fnT$t1YWcSM3O z=$~}FNsJ7tlgOF?fS@x7f&dVh`;xX^ObT&KNlV(J6h+F_SWJ^VzH{QroRCQxu*|!h z0we$hN5IjVlp)S!iqGOmCHR@>c`6X>7@uRy|0VrSl{20WWP%?6 z1xt{DFtE^KL<5;L5;5J0;0ch%NzVA>JCQliw|Y1?ElstM(>ZMjv(gJ4$kI5_Q=4D{ zCID1U)Wg@TpbZEfozj8rF*DcHyN3YD^vt$(ldEu~)P!ll=PaU3SWC3~k_>`@JIzx6 zNrD+@0=q#s)Ag$%<4*jZG?zR$sik*+Wf9%#Pv0v^hyaArM9S!cy$K zQw{*tA~2?f43K65frkQs-#nnoTGK%JMhOJM(?mVVL=tUPQsHU?OxdeD|42&G^Gc#Pbx)0gz6=4_>m&mpAOk0u0T@65 zlvT^zS(NfI3KS>;feBEFU4T}+KZ{L3%d^K@EtA^A*5;|y<(WbVF#>V*L^F6c)Y%J_ zWF8A3K`1~pc>r3l^&C^4St4++A2wR`ktb_E&x0+)xr|S5eFbYzcyL!lDYhq3S{KTNsZoX{qzShkS!QCang z56uPD9Ri&y!ytTBuGOq+-9pXXTqJR~?V?yJ`wlzX6qmR;5bYw=VZc;GO7c-@uhl-{Q+~O4z@p z#jKeOa1)+JXatJE-x>4P=*8f&GSQ#qz!=6=yHTHM9bNE2Le&ep5BL=whC!y|(9|qn zHoaTRtzc!F;K+=ni}kE~6+SI8EB^)JI0@ii3dXJfy$+mv&>ak-gmh5=;9E34&BuZr z9)2_MOc8`!jH67rLZnv^1miS~zJJ8maFSo2E5ge1p_VO4H{Rk4hT-JR6>3%EP3|4~ zSR+dILKv;H_kH1-(!lA3*0R!73r1cZq}~-oLA-542*6#{1CLQAFYCSHJ~rcD#;hzU z-WI)FBUa4|Yvn>-K?yu#?lXW<&ST!)m@a-WM(jVSoW-4$;ZFXXZDwZgR8Hec(jRTy zBu!Tu7M<4hF=}~=|7%lzCBPueuL^{|r*@tsiAtXKXgM>>ZB6Fq{pYIgX_9Jd zrq0FQ1RVp0OR*bf7M-1v(6_aY>s^IwSk34FhQngsMKaD+E}I0!UhG8jU>TfeCrx6y zV$KitYsSMT2nA{;tli{fHee3sybDNl9!Hm!>(`Ayjc(z9*6dM1>l+RY@53co6=%8p z#zbbs#;)zs=39>4X#Xa1U3r!2`EAfUcIj%F;nX%Y-X`fcZp^vpXY*8_(BkNLR>*Zr zY!<$1+G=UmwpIXxZW4XeTHCsn#$zr#<=y5irv_@J18d=CNxsJ6uS;dkP3$k;?IP~( z)=rCy0`J&H(8z`eH3k}2qdl*t<;AsV{MO>qZe>6bBX8a?_M>NMrfAtkHxc@Q+K60B zlgony?p4+Ap~h(6ZW1xlF>iK}PYQ4G9yB>B)1km$s7?vN{kGKE9wJz7m@a7ZWaRG7 z1g|-9Po9t!zwJ5;vsiUA3t%-3>6;HAf**i_lqE42c-#vpgM4neZV_!&=5im`YzsTE z^PZ&a1; zGE0INU~{nn7Bx^EgeWN`xPWbOLckj(VJ1-Yi%v@x$gIuAbrSFhpYReV%q2~MR22YY z(vbHe0jX+$tt>)AZ5Yl5XB3@WOIL{b)@DGbaQ`#%I9i|=YAknFZv_WHSw74oRl**x z?Ds}yUYBn5TkjVc?87YfTBY@hray@as)@r|Lp<=Dwp%PgZ`;;xw*7$Y9x7{BUh(B= zLmqUTUUzd>m9X~o%4KV(BVcZSXH9l@9COl&jDUr?^@_ha7o64h;K ze^He#c>jYuc>WG#i?^Z^C<~#I}Y{%<(G#7Q5M|oE6R~H9)od-QJ7Vf-TctLk3z{VqQN9~+% zL^<_u432e7Ch?I!>yNMZ{cB>>K4hj>canE-;{^Gew^Vx5Z!FMhwWs!l4|tOwF2CjO zwn%$vPWhk@!ncpJc3<{gzi^*d`)0@CVP8+i8*;!W`>_xFx>sM7FLAkV{3pQrawl;+ zuI`IIZQ5qdH#Yk6F3hJ_>Ke~_$p4GMZ_ufaz|+orL37=fpp3X=3-VgB5AKaxzdb1W^Sl)ZUmAQf%AbxcA1hugT1<71``lx69h*$nG8vVcx z?PG`jDExQZ75mJ;eumGX*S@oyp0nJ4_fZS>@n3zYNqy4ijJXQw#dmw*_WBVAh!7!C z97tf0fdU5#7Z_+DkO0Go5+_pJ!$P144gm^Q?C8+}93ne*WN?^pAwv!zFtz}25Fr*7 z8a~nlVSyvf2{&Oj==tC!#D*)MlEm z`xohkzDr#=_NYcBS{4m9WMo_TXHU!?IzTS12TsPuCs$a89JjDq!;dw7Hk^Y?5*RYN zc!=t{EkwLEffo!Bxi&&KriF~Yd>8Fdy}xV6mOU7$Wa|`b$lxKRrMDDPsAYEtgC?Da9tK2Blpjw3 zy0>3V(-F6xeer$dUwcr|&;klOL;>Gg2x{110<=B2!CUvaXyIcXdWaui|5eDLjnYv_ z;|?&~z*7lS;WuL&NjmsqN%ln-qF~PDltO9k(bwaLU{ z0HAHyq>~+ZMx%NvVM%6!61>*oXgjjDXNMJ%W@ev(c9=s9MC33Pl6@V?)pM8yRu_zS z$)^yYf?C?9ojw|O=XQWyD(Ig!o%v~?MA*OqbWYvGsA-z%^y&o8i597=zUc_3n4%&# z-lqD^nNz4~Liv#lDBLihqQ)}nqDIjm#Z!W(6b843igc)e~p=~*TC8!2J@mE}OWT+p!Kj?LaWn08Xm zdua)}>RFjeD}LMD1(4FZ@mv>!g)hAa@lgORvZOKQYy++9ZO14|B>yR{FYC*v$Kh(+ zFRd6uup>bue;d(VGm}bjTLKP=NNd=w{2t3L4*+w_!I4LFgg95Zszg0kVF6`wyzsTw zVM?fG$}NxW76x?z$3qOqijC(Q7B_A7LQv05t;=<>;qbtjO8qg|Py{|Q6virXM7npc zw)fsu=Z$k_kb7vZ+kx`B?ZiW$G&NK=bIi29VGnMX+%KCd!H_f$9kk?3)13wE%*f8O zv1#q>o7~?ue4yu%JB_zRLBY{A6@o7u0O_f5x}yz49MQ$^ohyCzC7J^T!$^l(uJFUF z=FB?Qq+UsVxWO;K*%|3~>$jf-La(~`xT`y-VzgaM32GSU^Axy<`os4D)s4u0Nx!}|0hh9q<_ zB4RKC73}24Ce6_xJ2XQNEEoVJE zi4macd_)<9hAMf+WjZ92Q%XVM6bPRfC;@DvEJ!IWu)`gcK@2@OKo#H!OE-p6B5)8= z4&D{RED7yW#dro6HSr8#_|h7{5QYg3C{4#WLTp=0W`ulZ!e)-(Zbua4`>0vYH9XM= za!k_^!cf6<`imnn_yH}SvV#$hsCyKkVo{9Y43d#Tm<_Q8Jz=61;=NI+~z_aCn}4RCq|ufs`i8pl3o% zaR^|vA|YEn#18}{vN9aP3NB#6A;@rn5TF1s9seklW|%Mq{ArXjT>`*2saH1<$k38_ zI$pfm=@@(-Y6-|3=Q{ev<8(rb7+l)3NfA$ z*~wNm4Q;?IG=gxjv6O)cNdRkTLpubyf?*0D$Zj0YaD^f?!K_7y?IDmc%O2@=w^HPn zB${@lNP5UvK4^g$t>|6`R8>%}I7U2~8_#7N;t+*n0j;V_2pfj>5F|mu6`U{yD9peL zO>lx1fWQPR95n&Rh`|*8fH@iMWU*$n7XPqNXaFck?7i$v)D?|kjD{Ry9qU+zMVj#p zeKyfCGhhPYz)J))L|C;Jo&p|ZFy8VG0SFu}>x9qP-huu_nZiZkRm4DpAKcclmn7qq zuG)-3XyOpW=;}LhTv3$#01V{}LlH(xS|$LYtX7bL6OaMg5WMyZv1P&%dT<30p0O)Y zGiTrQSE-l5Kmu^xul|hbmE?+a8CcA0F}jLkN})(Jh+VB}(G$l1$e<*pPJnloDGA+C zIbVs+t@l9GBOf3RWp`7tM_$p4W6bjy)d(Q%{zK?Vug>}&XLSZElxnnzY~-PI1= zsYOGD6|T7UFiD1hUo(d(xS7ZDUPkVEhSL@g?F zt_-E~BuP3DLHY^#^Gna8NF6??a%kDT%Z9% z)RTlEWM0AfaYO?pJd1wJf#t3($07VJ{+2Dgf8?fa81=}TNoq$uh5MeGd z?a+%FsnIu;d?w{)LMaxVd%Q3vR*0#RD=(cH)3g(bXb`SU{CaMSrB{P|6gS8abMz?Ss|7dhieYg|eko8n9=#9)ovy9`sgIzEP^=f|O8KO- zXGs^MLUB5TryR2m#=&)mT4Iuzo%YfThwH(q0(&fIM(Mae5?ma+T#3XZr0}K)!VO}4 zW~T(b`KYaRHn=pOq0AmdmB3{(Y}=tOOq;_FXV9QUpaS%&uC)lz0Wgt9;D7=O0q{%3 z4vwgnZABgUmTa$}&1`Z{f|hD4ybcwVWn4`{g!73xnfj0(Y{>jsk1A-qbWb9pBt_Q^ z`XKQOa-1N+uLN7$Neyr~^s-xrddnE-o~lxLc=av_wcp z_;*s8HDIjMZ-3@qeZf(FPts(Nz0#S;)?#fl(DrOQ0gaZ*@uc^`(3;~$6lPDg`W9hInpVo*% z6DKcJHn0t$g#}`p+^O--w(h&)Lys@`Dh28Y0lkGUo3b+U4^~`|yZUuycow^rtr9@M z!a)HR>M0Pp0w6R7ykuDh^hti^qJbE3Abu5bgz=yxHmL02NzhdrqH5C5+qmh z{)0ljIA%oeGfBLv;y}ZpEGB_*63zdnriK~Rin>N8n2W8-f>PH89%WLr!py{I)YZ&-{}03$d@{cQ`j1MX5@XGmIYP3MK%><erRMUMW;VuN-~hc+~;u?+D|-9;5Se(N(}`e zzYB@3R1&OHLsc{Y9zsMAehH~aM@rI?NJWbhxF^_N1tahAu{FI!r2)Z$%`)yvhk=VB zANje-i7@eUyL#gOPCx|!%<`2la;Y2lXsn(J0z6w_A_H|eA!=PnjeSrg!<5Rh|DIs!hgp$eZI=W&}k$+SGp)(&|x| zddM#Vv5~U6YCA2O7PbGrObd5$z`bZUfMc49RmZE$`a;)JrIdD$wA;WmgSMtmX02}) z3+`8odsVSUHiradE~YT~To@jbx)WI`b~{P0dPy-SnVqh5PYK@Byy+M8@PQ9@Jhh5GBotU~FD)%b6a2DIH5NfZ65{fMt?l3l z0sx>ukYHtm?ganKMY)JcV_T$>9*`>$S|`F(dYrx~5jW6<4+_jc10bxYqd(w*2vC6L zLqWt0-fh&Cy=fA^_!y)h4dH?+jhe?*R0@OZU1quyHLX%5&=?INrj%@0={Z&8Zm0KbP07R;m|!9a+$1eE4Eh-4CpS=`9h(_^j9{$ zVAOh>okaiRYNTiO#oGGsc^*~hSFanOyI`9o@5Af2=Oc(n8C=4it#rWKjbBQ}GE->k z4=zVFD?FvxB0nLRr_X9jIf5HxYJruEv?yLtZ(Qh&*lVVPzB>u&*OC%4q(&cr@U-f* zh;QwB$p3v2@s2&;IeBVVTTIXY8YrrovpU2(Q_~dY)}I=R>j0h(b@A4^sK8Oo3IAko zo%pVTZ>4W0pI1SL`f~!HpZn0g{CEN1=D5|{?75gjboZu7-!*?G=*3Raq|h1iUi6@Y zf^dY_;~jn#G`+~O;`?YGo~c!l_3sZ_d(=)5ayJOV42;kN+^BT|RN(x$1WU-+C$>z9 zN4)>C`*!#FE$^hxg0pq=>)F0x0g*TiI$sl*A3Vpew{NQK8^NzA>$~csQ`aVNmS)5j zW-c}?4s=HZ*AtAS5O+~{=ha+GCSe@~0q^x@gaa!-;ZhG+5!4edXcskt*DOhK0*e$u zgF;5lHA~J1bYlZkuta*UqFic(QlVve=JjVsa|a?FZQ>SpCsi=zQIqw4_);0h zEzN4WrJbSHq!r(h@XAh8ogMMH)ww?58ilHb~vUGmKgepOF8r*d?m&RfjkM;YWg%6kpcUVb_Ef4dghIc!F>< zL7PEz^`w2sf@i5hJNi{nY(ResxLS($8ju5AYlj#XSbV!EI_#$swo)tQR+0Jh9U??+ z1(_5)gOH4vQ!^M&MHhJR(*anqViE}=;D{7FkP@zAPVl&Fu(wSq!&Q|-km&!YFdFg@ zaUc*)z+^&Z7?T2bEIE`22SOjvA1Ij=Fk>u%hD;+VPN4?_IYxFG(uXrteCCpsC}IL* z&;()N5OFY;K3P0FIa!mnl)Ffh?|5)1vWF9?ecMM>S2>UJf&(@YF+vuUS!o!^GL~Tw zn1VT&ftfscMR8~uZt}Nv6_S<{32Xo+ktUQgj;VGfd6o)flD2aKLEr?036`K)m_Eq` zRR(+^Sta(e#)jxtL1=ja*_^NONsfJfZ3a1P?kxOH+IN$r;-vN zl$UGBH?AplCfIjyAd44x6o@&Q@zb2QS##Tg1Axg}Y$Z-Y$(KOcec1mgcm_j!eFUC- zrAf7C=Ap+#JQY}xGOCe zV9~cS@L6;ZIYT!91{4aKDnSDaq*}!(Ut776=Qf@ufm@uIO+6&S1g8S zkmU%eVp*Y@x~ZEgUsh;dQIt$}Dmbj^mbG%Ka;1iC2sURhZE7f-rL#i})sko7T$wjY zMR=wAlr_7NSJ{}5O~qkw10MovoxyjCrLkKAM>%22bynFpZFd}Ncb8V>gd+$q0F*Rj zmufRPiI!xb0rQn-H=S9-fC`l?nQ{iMCZJ||aLYn?@rY8=^PKS+g6xPAW59-Qz*|L$ zaX^Afy7hhx_^w&ESu}91G!q}~Nu&OWoM-2(UuzQv^ZX#`~HKUjG( z)Yf@BSFwj8jg+%ZwBlQJk|PT7n_I8{4ot}t?xAc?Lw8H5vASSb{g`6#5oIzfWxuG^Z}> zOe~NCFfatTXLw<%q2=?KQhTh#yNPHzTL*=}lQpVZn@EcyZz901ncI14a0FsN17gdn zZ@H~+6*(Wvm1%&JXv%}T` zT2xHC+^G_YMr?j68sJ&GzDL9n`&=@sbHo4Yo*y~LWSX}M+^$?~oI(b3`$@SSEI5T+ zsg10(SqcMLY;k5)yN!8ZJi5kI460R0TY_j=yNi51(ySZ&s!gXQl)N5nIjKopS1l~Q z+>1frOL4o@pW{Qpw9H}CtAdyex#*#&sCFS;6Ub`z8|S)Ut7>&WT(nh7zz36$8hFDJ^eoCt{kF)f(MC)g_Z7|3X> zL)rJB%zI*bGq$LuTjGc+$y$MVOj}?2rGCeWb-@^D8pjp6ln9v0ksFsTS0WoLFG>_n zaA&O&j5~TN#(J0_*=(O0ot9`kRk8p4(Qk0mJu7K0i2^M^1U=Bup(B!QY0BYTihTyl z8(OnUHi8Ot%eYCDRBN2CdrOwOD)|?S{MkE5-GOY81GKt3DcPdk%($njqc=T5tkhkn z$#UFujVaBX8P*(CY6LKl&I(}yGyuB(TdQwN6Qz2{l)SH|n-aj20{Sbc)|gswU5X40 z&663oGEkGP#@8&MJ|Jkf2OR||MAa6da~{2rn$y;~iU{tPbBaJRw=>WEX1r*k;>h zYzs$$-9M~R+Jud~Wc$xWNZQ&vqUghD!Gn1VhQzU{xtqH{Y*SEg9MIIOVQ(AKpNiPL zw2N*~-J;rGAovhPV8Kib(Ov&~*WpauvL)UPhgcdmOi7!yx$BxrstImDIFS(FWqMX{ z$2E1$zhrz~9PN&z%*>lO*y^pX=@p0yQ3sv?37+r=k#JLb>7uVW+2oZgoiMFcA$fqEbST)5eUEV3)uh& z0uc#1kd4RfkX(=~{)LWjqel&U%2Nu@GI8HGsF=<8-jZ$9d>{~_00=j38s=uL|J_IxY}_5aOcHr~u8JvArc$^v!k+ zvB0VmXq3pK`xzQs&#C{>1sqiY0zu+NkPSC}IPz)DciL46gN$8+aLap8Ew#%aY$0GS z;pIFKK@fw0kPWB~2#{b0A6ch*d7p4}gV#ZP!zMv$X-Viev=*JMoeS6*H>F~baYq2C zno|dmaO&>NP|!Mz)Oe&mo+87+Mcs?yeVgV0d9$+J>Y-=f&}tDxFwA1w#W4Hp0DI_v zb2Tx@Mb0W+F~cNlB<4zKt8)y*U+0 z9lzxDwm|?JbTjTu{93$gbWgU3?EQ$fU=Td+M(pSMYpqU-O1%L|X5Z!>r zmu#Fnf%?U#I(@5IkoS5YgI*6n{=UQk8i98UXId?+*i25$ES6!2llcE$)4_)26kJnj6jT__j|v^_B?nPH-5xTsB)Cj zmc9mwK=)OM!?U;Vq7f)N8h#Do4G$m=o)8Rql< z>7}Ct5Jm*DXpzBS3503}Hh?gJg+PcA2ZE4T(W1o%5djFO(uWEL0t-Y|Krm7T1&kLf zh8VCg!2yN_NT>wy#^%j69V{>);X=etl>%$VY*^H2#)TkuE`QI8;xkjLpB`lc0 z)d3c?2&4j04p_(wTB1(h*PgFdP^0SC;d-M9qo zwDA9DxRMEPWvoR*mai(#QqWMCN{5;dPkgZ4)-v5ftVQod8rZc3wuz56l~`1SQ#TiA z%XT6AHuQm%S6YPPA^6G25vFFb>REYnHu>{I=ULLgWFy%4?W@$%`z)>1P6JOig21z? z4G0~&3A~Xok}s$OA`$|n;VQh1t+G5gFEy}6yeT0rphBM!tk04V1)&F!m6sR zsz}L1&L}FYg7Y%8P&XbaTyCj|7_{y|zzpcj1pwyj&H;%o>#j)LI>VBzk%+_)L)m_^ zU;{GC#GoLD3VTX5=Af*xr70Cy&Me0~((14+!LxElHEpZ0J}PnBsZBExa!^g;H2eQ9 zKp&aJv(2o|8_i1#_2cu!Kn;_0K>n8EYodgbyp2PZWH5Dy9ddBAj}bFCi^R6_G)$*6 zNgegVAw69~$wGrn6i$JTNTQ4-Ao}6fTRj9*%T}M*BgshQV ziinEh2xAk0#<*%%mcD%Oz&(rXKtsGH;Q-kvf{WnK&KX4kHmutL=VybyuFZ(m7d&SCGq@x(_)pv zAPfilob0TD4<^v+27@cb72_X+lvS{l-BOTfJueu_)p|FMSzN1%@PUXP0=WM-(o5@A zKx-hg9-7O74b+R!!88Q3s({H_BZmjBcC<^l{X5&~L%$C3gZbiqsLJuQldI&s6`;`w zABy;QV1U6$`=T6VaG1H+28uySvVkQO3kM*GiI6#3Ma-f8Fqq;a6#)@Cr8p-JA zlMna+kHG8R=)!;oP5MzUc8UQC4sZk;C=ptXTo(y_l^C>yXpwR`m|c`aNs(A`lFWg@ z4u;6Ta+T!k$n_ma+y(vXXScR($Z*Neqq-2m+x&jm8-O zJ#i#QGwh(B0M|t3a0Z`ff($jG*)BmbrG3)N<%x(Fnlr|yq7uP@N^Ee%@i+&Dn)0Al zc1D+wH8GyXD_>2oh#VWT?r71%3;lfh)7KjtS zmB0%Ys)HfysGFNg9|I4nNWW~eKOK$JAWo2mkoHt;@(iUw!YD=pVaq^vf`Awxpvs{M zsiq{0BA3GQEsAnQk_A8(VC8 z`asZ@^^T0nKngw^oOT@$X$a|v$Bcl6rXlS{_snbTX!|kEj&-t5xePJ=<(Yqs%( z<#s@Xz22mNpy{+h*!*g@)j;%ojnr+IXd<2Ip)a?pW#Nn%YoCZ#>YqX)LK3zhtGMLV zT~U2!b+O4e$^H}$fwNI%oo7Fk^p-*OW=|0hd=+DP~M=}+l9FVHp(&6MF`==vHkardYa-j z@AX*l>6S@C*l;`rq%MvvF~ao}vQSPc%cIR0tYQC>;D>iuEj&pI3zABpeH9WS_>u_` z;!`ps;g+4Dewe^Q*bt?>*BILBOTma;RCtTrAri#dv;ufDf&(JLIp4>m$t`la`Vgu99~_ zJkpHvtEFvp3r+2tIX)Nmz|iZ$iU-V1uYgT3IECM7I>N9EN5Q)|mQFkGLsjd(=%2T# zwY=PH+wI~SzY>+L*ce+9do@R@cG8i_?mIYrA{*LsyN>{L%sMQki)$QqF96)w>2O{X z+mK5xpcidB=`paQvQBodYt}|OuUp#rrgZ;&<&B`ey6}?NW#D0NgUL3c*x&=_=mwlv zV~YFt-qUHJR|S-IvrJNVbK@2NH-;sf;Iy8l-{t>l&$G-~%y>>pSsd^4)XDgjaGx~goi}{wC(Uo2 z*SX@uy8P*>9J)7J_QbKfS!&%Ly?57Jm22y0AIb>&>)*ZjKV5r;jhWVR^kL(PBK-CH z-TiCfH}~PoD<5gV zgMp0VC^$2-o5)iws8b1^!3YaO48AzEG4s5OfDgONlmT%%&~pt*kRL@<8igAZ*C@bv zqL$wCD@9?JA$geh(Tyii!Q7!WK!hHpaWy-$BlEki&j}JMv_WV}L^;}=IeUQ{9GVI= z89+?Di8-#70!Clluw1jfSeNl>Yq`NotEWFr9$m=fNLoG>@L$M;r)HBC} zq&z8rG#p&U(_=^lQW^iym_K=J#K2-ci`>3>OriMj71-#&r|YzI>%iOFCl({V5)vx0 z`!kuN9}MlNEJjAJrq*}CLZMHqZLJy|yIGR`!F zqSdoJ_n5}&^cA4Io1YN9WMRk1TfNvLK$aZOa?~RD5WKb9OLw_7k90WrbR8q$f*P13 z!74a=R7D`$&!x09SyV&_G|+4WLG;WMy<^aFOi2G?0Ogx83YAc5c@Ey=0CN)++Ekwp zK}_#CPsGfrubCk;Ijb~bvz#fsi+aLrT*eZOJ9uOz!+XG*W3;t{M;e{G3x%Q-6U_&O zpPZW_dRZS6ealFCJlOFv8R$dX)Wu!Yr&c03^!u7xe5Udgqt_dY62v$V;}3JAg+h2g zX2d38R6GARN>WdpIDIVAtBf!F>N<`j7Ihs`#YcrxKO9TA3K* zSPP3<&}#Ej(Evc~X-^efCpkc#4b+!EQmcW;(*#9Re5(}{x(XB^6Sbr*>A}S85-a<> zK#-cwcd8Sv=+e%6u+J1x8{H1MIme;nOjy;?e!|Qc#Iu3akS$s?kd#cH8W9uFfdO+M z2aUboXh~wVB3LyxVUYQ57Bt6(uDsX!`OVb{)FIWP%Lsbi7V zoYMcw#H|f1f^dz98Ia61kb%FfNR@a6hzN$~Iy=s+jy0hpe2NTXy}E@}g5`0EjvY5D z5QC~g&+bDtZDcv<2!>|>2BAHMpk;;A2v1?ej=mbwV1<R1 zvv$Kvr!d-yy{z=Ro^oU#L_vWqv{?hV+KO1J&goH9l`#Fhp#lKW#@mXLC{@WyxBj!( zAu-z*_&mnA0k%yw=$ITT96soAg=A=k0?2|=I0j=N1!iakV%X5U3D|0a+FoM_B0woU zQz}p!%-5KKtU{`THAc)bt2J21{Ir`_$jn@<2s5xYzLQaJIg*i7r1T0gM)bgp{6hb7 z^MQzDI0bqJQ)mN$SciPQ4UqkVLM%y<>eNy*z#Q7po?IVkI0jd+P*PZjb=Y1vV1;Bz zhdzX)+3lp5sex*WTWQoy>Z!rJg~rTT24Pr+hA0JrAX(!}r`zC!Dj)-I1iWO0O$Ly` zs8hlN;EK7LWsbL$& z$?<&PYOs(=RN^E-0=0Eme2rbOWXeKJOT#jPS1{UWwKxVTI%~`=;5cJ6b^sJIi?ZhH zu!jo?r^E(1?qcZx#DD+*A^8La2LM+9EC2ui0IvWr0RRa90IvuX7~l((fdLQ-umI)4 zz=u~H^byzr;sS^mGiux@(2}K$bUJbzNfM)vk_uHsxVRCN%U+-a#DB6ATnVF+@oR2Gk5_k>P;Vj1P#a zouig$iire`GTo?xq*b$c6C6M(VPS*69K8DE$RKP0vUoRsY0J1V$GJYUdRU6!uI0;m z_127dHnK_t7zJP9X*OpAu_aoJ#jK#UNXLxlgp3W~riKlkSFmo)`$6WsDF;WiT{*yZXdRv3&ylTl<5rcG9RcwT#X<=KJQe~7TmjV{0~#%$AAc0)6kQ5CVMPFYDn)1+ zQv}dQ5otQ5#G7y)qNW;z6}H%)Y+4ldmsu|WU{(+U*|1e#_t7Mrf1CyQRBwf;v7i(K zo?w^(EV}6AK(o;i<7Ir$OdXAd0drJqmLx8|W2t`r{yQ4CPga97Nb0~8YuxJO+jJ@QZ= zDq--abS5UICX2+WosYf~o(bODp9;##2qwsD}A24)VVi$>p~=-nR5UI53DB%}zygVtVa zUyu(m=$&zDwp1OhqhT5(V8LnF9#ZX6sMLWLeIV!r0BT9>L%M|f0FF0l=N^aK<+~Mw zd3BeOodNTgP^c+rOA={@qND=~F{Ha`jA-6DmPOTW+!R{v83)BZD9Z5AgdWfS60coGv-k9WMcJZ$vZ7)yVAPv;d;S zKNBks`EmxOfyku|)FRCDAoseI{7PpM7@GryausP2P&k4)O#HrdDyO^$JIFgt!G86z zoRDmUKxu^aCikHUA}w*qa*SF3u(mh8farTT%#&=7hANNtEEta zScK!@Bu1nI7;GdZkVD>ZMMi@ysE;-jQ;HP!IZfA2$Oyo@COvJb58jFpp(E0?qq)!7kjGE-4A@0q;~X|G_#gx_J>BtAiI z!AeLB;_2ivxA#O+m=F=@z6#hZGD0Me7i6T$c$hS0MTZc65T+mmVHX6x&z{2TogCC4 zpqf<$IiLE%bB0RPq8jz6NF|_BdKJaf%`rTPf~rE^WJ08Y)PmSd3otojB;e_hB2*wj zW;%w2LY{~)2)b(6_&F8Z743z*q|8;n8cc|uFm#X9jYmsT(QC@id|U-z6bB&2!iKdf zRCroO{VF^38B(hryHr<)bQznT%7!HrS_0q#B(>60Fl&hGPspNE(TEH{BZFRQEUQ6R zwI(%s?5t-eD9_mcMFgc;Q46&!*-~I8#hR3%+7)Np$_@f%w9~0nkoHGHsV>x%uk4vd ziJPK>9q6HOxx(lOgr3%#ay{fRVRmI&)9Mv0DmraQc)7E_rBZg1XC3BvCCME3mUq3{ z-J^KKQZnP-XN(VJ$$SM_-@En_J8wzvQNE@x0DUi(TTQIXp364aQn$GX;3*3m3fIl~ zsGV_@o^Rdr-p%y&!gT4a@HzlMP&NvNzzi*9udsu9^@Wx9svwF}i`nG`tt3Q*9g2Ej zO#r|E1}K4oP8=KW@ws{HKH(`tO+ei=#-LcjC6>m73N3A&?DwnH(g62%Gt) zcM(}U^EhY!Ep&*pY`r|K_EqgmD`{WSn_Gs zDCd0Q4%>pI2+hEBE#yHI5K`k(8Ctiiy#h@~W?-2y4z`e9u@w8;-Hgy+GeoS+k=0!4 zwp77x1DGjuk}Op%d>VZ~Zf~D91sOIl3WyZifIkJIgMXf94i~j^iuMGZ#)>+oXa%H* z)CHTu6tRO1Dl550N^T>P0Ncg$%~uRCQvOAJ!X_q($sO~-CrzgZ5X>ng@>AK|oke0r=@ug%Wmg78aI;^t=S zYBhoEKnGRM9>*r^L{a4!;@z{jtbkt4IG?ILif;MVG1S)MSqcPn)p%v;q-~c!)v8?l zn$9*TJm*9^%&<$`Zx?tyZ^vt_JYEmJ%S8|%Em4VldMT*uUhSujdd)%s(Nctffw(aj ztVT?dVjrTCazY8+hq*De6VDmT%^i$;%4P#hFQR~xolzc~8A&}r&b_zsqmYNwb)cnJ zaVJ2|5Ulv<1x}bDLe@VbgrTCtX7) zI@)9w?WStgcP3VI0+fod6cy>}nvU2=p|1rmk0TlO_C#6(!eM=gDn9@0`i_4F_76Hze8Q-8=icTzy- z@mA>9hTIVV#wcxwL>8_SIm_gE`BF~Kh=F^@Xy&zCEpP)=^j(`I0C+TimIjP; zdxX+WB`A){woKp^OUZ~y$f%3{$UVd4PD(c}Ge(SYF^|RuD3y_Xjj=4-NHO8qbPUOj z#z=RV$AXhLj{3B91EO5B(@X=@X!J5jaJN*Uc1RXOb2@iZ2&8Nq^Fd|*RD#SRC^)%K zIJqmS7H{1)5I^8CWRVeOU_<2SlU;#7O}QW!GfD{+WK7kCQE6He$BIc4a2Td$TlkIK zw2T802WoL7QOS!Vi4vStl@wG)poKGe_;&2og9Gtu(G!-D2bJ6Mk9^rrSSCw?@{~JS zmD>o80#{4vItnIYky=hh`J4?hf|(U@w6sqwU`TpdFA)hkH`$ZR#{xC~@Le2-cO3Z;agd(s zxt?Lro?*~9t!XY!=`)drnX>00IT9iK1ORI(OAUFFH>a6C;f^^F19g^wjQEUt7?n4` zp6)r8?)ji0$rR>DOAEqt@pe;j)jt|)R^4$F_IFxJ;W>{)d!{v?V6~M2Y7t1*l!8f| zF3J(=DG+2i63OXR$jFhZ$Slc-h%G~xSk!wkb_HS}g@5UV1*Lr|36RUUe7!P`ec4_^ zF$PqcoK~8L2&z@nIZZ95pqMl+201>{A~aU`KMS*r;iWtiBLg~uhg)<97MT$aYNd2q zr!$I~bQBrq!f$FSdX)*6OqrI;2_FskLNrimcNRfb_e3TCxS%9aqfbO4GFYZh#e28W zc{Z7rmBfn`x}DL)X6YwQV)Fy@W&<|R0}Yv^y=7CJZM22iM$>o$ja%bRa1V6j8r*`r zCj^3%1a}DT?jGFTJwVU^3GPX7LX6=(GgCFErfR;-Z+NPn>)v~DiACFY93*rE8m}oKiv|Kou!c2&ZMyIuVJ2tY~CS^DNC3I4DqeN z{7Qt4RJGhIvM>5U-$L>*drp4^%*vGq_hjCZgMAp)!0qubB$GAHrXevw+)% zKQLiZ?|PKNflvjDcVohWbk!+LMh(oub#g`pDgcVB&)J3?CHL%dYp}u}%Emu_r9P0D z6EkVemnJD!R3rwX5hwvXh2=q^Y(>_@fu4h?4_LOnlxo>?`?m+ z`$HoH zADet#I1w^KZc{(DA62+$+1gCfby~8-VI?voW|;Vqy1AF~Sn<79rH!N@M($Hzhpf=h zLAyp}NhH`IJmhz%dy$FaYPK7Inta=V^d+D@jCdSFUU1=oqh{E}OXG9~HR5Z_?!in` zWxCeVvf{2{wY~g{(0WbmZ(rDTZ-DGy?F^%JKg@eJHy1X5o?k^R^Z;N+SM(Jjw;LL z&GdzQGWQwdywM7atMS)0X?>TGj6|x8=QWAdl_5Bjo>*W7T#fA5+((H$-z3|F#EQy9 zoD;WPOnijA@JSadk4>(c5jSIz_!5alUOK{MXZoEuc5UDD46#m`&8ZG@z|(!o^@SCS z;|nCCg$Iots}gD!+f@8lXlgTA&fD#*SnjopQb_HC>xQH#pVeQJ>P$3<4V?sK@=?osK4jd?}2#d9IZlYGjO-eTwqNh!!$M^ zHh@*O3#+h2rr2AaPwGT^1!f6dXy%eHA6+^lCBD$q^nU#|C!f$}Q#T`GQNVcIu}G$< z&`?1V)nqJU0r53+k$mXyJ350-JmnFhX||BCLl8Z7 z-WHZ8uio0<^!X}G86>N+#qg$DYf#D2ud$CP(gy#IPK>|ny{|D6QCJBHn7$}&<^ix1 zDh%JVXM4Koalx-`P&k}HAqvOx0$>H6<4pgLy($q2t;!*ehz8sBpAvBk_w{H6=q5f; z6Y>V`;(5j|SFtgvv89~D`;hSCf92YN^XDQhifsMQM(9xZ=AY4(TiFHsb%0%;@$^Ug z7w>t{R&sOO_JG+t&G>Vtd*McYdal?k9tq|4OsSulYab)02D#2L-eEl2)KcJBsD6)L z#a5H=0fC06=f{Yja&ggG6lTdWm^_x&94#`)6Cey9n;t zi4fXW99^KRk3Kh8N}Sqth~0AV^Sa^=pG;jj!m$l{8wlpl(yPgYgjIHKfl>k0hcIKjr0i`QQ2VvR2^VZsD6;x^!*^Vtq`~TWx%I|1@*hmP+OZ zzyH>kMwn^Lqd8{1iv&Y_A^U-wTd;p^C3kD8Sr+|%0|J^SIb2%`=BdumvBR96dQuba za=dvE-YRFK?*NiQLTRwz1`vJ+&4ev%3_=czg1H3QW-NT7R^NiTqG1eTfneA?A!;B9 zBp)reg(`@IGb&@(@M{-`V{qt+YXWr+l;fd!HlYax1L_6nm)PWR!g4|?R#!K+SD{0R zsRoeoYsa~%sc`HyoBj;XZTUP&F~758fxYQO8t!Jd`@wnRbX;qw5PLn#U^D9-a+po< z%)B2Zf&ZOtG>|k1&C?9z3x?1|y{(SlS(o8adsHPt_PM-V00~-QDq6=!fT?!xATQ5K zZ9FP^za8xn?A6-`2wY@kk95Lz%PP9>_rEW13U)3&Wc+Y~e_0cIDO7MMEbZfVn=17N zU(Tv6a)?b_K+@>iS4jSm~@mzH+PHlnKjpDv$qJf$JDT7WHIx9ZXXzgz9OI&v=0 zMvylywEL`BiD;j%GJRKwHu&BDSm(ZQYprg5&2PYtRn}pGTU=pr#A2#H&+lL^PkMO6 z1@hS^C_p_-A6)T2Ketw{oIwmg)`n)!rr-<6)J{3mJX9se`LkF8J`dkFRWAMl~ zC!dO_mUV>W>w}kOvN~S7f`>B$e7_$z&%St_K)pB^LoM3UFLBZDQ zmdkpacGkw(TU0ijT6bGzLc*ZS!eCSXCV~o=Oa=dakYrEc?0$}y^UG4W5&vpr4cX9v zp}B;jWRQvs5>Y`cY~Dikb>ZrdS*g+847cg+Kr@P`?qiw_C;{rqT<47&tV#BgX*MJYWMOT*RA8V7iB4KR0n z=?UF1Hltk;9<8ho!Rf-nH5Uy}JVL!=m_UDzt`LWCX<^7GEKT9!mhk-p zN-0h$duJ>*YWj-VB6Rqyco}-!{Q^HB>vmy+DHkD5m6U9+Q(%qD*9>Nf-U>&k>751& zH+z1653)O@1o##Y>8+K9V#BcrgD+8vo$i^U$5D+b>?BkcNj!<-rYNuzwQwRw=mW7` z27dUXf>sz`=R!}+ax|Wr7wXPJqK8fCRGnARxs&NY+GY-UZIOXoClVEaIvD9*b32M zh~_kKW`Y1$m$ZA>Q|P)fFQ<*vL#W}Pmg+W%=3WQY2smD(g_A_PlwxtAi`Ijw1GTMMoy{LA?>pP%41?h&vVZ_~O`f z02>N^QoFr25tFx($Hr1HP%f=d10!8;3b^T|7AuM558$%D6zNWmRrM^n+>7tZi@ul1 zSji}RzKImaUL{eqPsB6JeJp64Lp^b;X45g;W8mg(aLp@G_a(~`@BMrVk;d3N8;&k6 zN!?cv8Arp@0G|w_Lvg3%$gw>QBcEL6f*B49G z|Mp)Q8HkvK>bC}f5_d^#9wj8Dc$Ydtl)Z9NL$)A8Mld}Y&NBPxl$DqMD_ebdjO-T4 zSeze6kh67dtku?^MP!73ahv3k4syy1Bb4&cxy`26BQ>SOFYQ#g)~kS1l3ab+mW}pl zG@HDHPWzAPCMD%S;jP?DkdCUI^aUd+t^-Bvy7eCBeb`9arWA}5(Y$uFt zG_2~yNl6Z<6CW}yYD*H_{!Miw(x0K@ONQW^4GhgVGMgH^Zx2~~Y>jVD4;FnquYx+{ zwRAZy>bBm1jsE$q=Uw=Byh&wZw;X-`RA56!o`P=&pE*AUEU&oCWoB)%=@9KLIcqRl zhcz~wbLm^sc+WB!*%0gQbLnDJx#QfoaCE#77d<0U-dG;j>YAO%oJX^kuU_ka6Mr|` zg4)gv8vLx6N7SFx{-x&EGVG{Voo$c!<9(XPv*Yk|sL%$eA#DP7wdB-dB1h%?i|N_X zWEQq`ZR=fJXEGmYr0(*Ex=FL@-aC4an=hvB=uLk%(4@BT_27Qa}z$qG0k@E z-quZ-wsNo~Wt144{x07Bn|#{ZNgc1q%IO<6`BkZ0s6y}I>qa1t@O+!u-wo-U&&D8~ z`!sr~UWp#5e5}ajftR9{Is}&;%f06iro9{>V!vNKkAn(+QC8mf>}Z%+{!k}vtHYrz zth(uJFioTJgjWFcyI0snsA*STN*gis1ThV#ixTJilK$wWeXt%u+yJc>?WKlf+fKymAyW{#fE6*U-$Haju zq~s3eKxZcvlkroM24vb*X^Vet%I{Wuh9}$LE+V$RNdVwsL4-l8Lzb8q5-R$hvS&o6 zz@oDz(6Z~zc00?W07H}5<)pa6khI(`iJ8`*VrKWlE7f+r`xah8>=>DrvaYsIzq{bw zunW$v`UC;V?xByn*^)NxACF}*7zTd8vk??sUl|2nuMv#IWN2v%uFmK61xsT?dZ?#` z%9Z7goARDc4^7mIj?NQ4XQ(7(90@H5Ch!2F9r^7UL||f^n%yI=0unOKaRdt@%s^6} zlpZSVW|`1dJ__DVs%{W5=Qu~-7!K|aD!K$mo(hkY4^gPc`<)ZGlzu=|RAEMP5t-BQ z2x^jEi&EZHvfOP?BH;>^CJGWcL2;=elq8u#`05IxSlstw6me2-lt$ib%3I*jp>{^b z2=S2C{7EqiY08q_*5eOdW0}qa{w_dyZGwkb1c2#!%rG|412>mGQL>Sun2HxjrxZ+2 z9!ypbu%Yhd5v-+k=zG%GuQx5DwZ`y$d;&4o!my2xf0{FyJ(#@1N8?atbHd5S#wrLH z^*5sVt3t(YL({z0XUde*W09j}2}IBH?&64FgX9d?q5D`-YPc~@TRhJ3n=OdCw8{wm zpf&t5mg2^E#=J0XvtY7-Ax&yS{q6BnOF_Y$;+TY{xM^!@2I{&C2oVmu#+97h;yqW` zpCNlD*jS7PKH>1dHs!->GFGmvIZm0GPs(U9B8V$W0HnE&&F~N~@$iSyoM}+wwR#Iq zE3g!u7@{&F&X(k;>9HsL@3kT)T3u1Dk7KcMXQOwEa;>p5IP%@I$xr|b|zu95~b-J3=1BVi3wbL z!GxiwD>NK)`jL8O>JGVhuBvz8pLTv)&sn#kV^Y zX-u4WOPVtd3!i^Am$2*fRV|GDmLxQ#J(l}mixJB|fN=U#@qs~eVVCozx|Vr~9(fDe z>rca~;ro}VXxZYA8C?aIlCv*t^eG~#57rBeWu&CvNb$HXZ5E3@b`V@wXdQxA0iSZ| zJcY1~61sHMlo_#K)AK#7&@cN-_IzwyaaDiMZ4niiGKKF7L%w>sZ7TKR~eI8-z*ZMz)9Xv)S-7 zgbVjy#9TOkmT`;vh2+2&YN^R-&S=+FIT{q3pjJwYqBM0g*1m2{Y2{&#as5c~$GO>A z`rwGyortN=SCk(UaMPpa*}J*N{Y_V@M>?xLHU#hMM%5LyN=o=>*2=R@>>0awK=>LU z={}6EG`y+5pJX2xi$AZ)f9?v)>ZfVg{A>IvRbiG}E4)Dfz{xt6icgX(IEL2Ji+lEg z{kdwG5ndRU-H}X_&9uWGL9!WC$eQxvT2zHvjw(pQ5-%liDWv0=gG61|wp7+!Holb6 zd?c7>_qwTpdHQYl z(?r<@=f2*B#Xpa<^{}v#sS-}zS~3!R!X!1tr@mM!*FoR4a#Oi$oZT`afWfIW!2P9Y zX~}Xin=G94^!3N2b#u+#C9SEC+J9GAT*S`54FVdut3g^nyH$TV8WJlQ$5R7xO7SjL zC*VH79WLPq+thWA^vOxFN>5stDk7gA02t44sE^_(&hff_ z0N5+t~_>-@Sh2$yko>j`&K)GsYfL$ zjl{b3y>wJ5d8DO_+N!^l^k$-Nc+WuS4M}Ah)r)_?c{VUtPt?JY=yH@u4_UkHLjpW>)6ovcZ2xtWgUs*=$o&;%39n=#AWU;F&&K(x39>2z43#1Dv?cD_%F*jnSS z)Wq2LCNt2&UefgOxQ#j{ljcHh=S4urq7Jr_XDTT6 zVk(y{HZ&LY+Lj|-kwRsO_|x;uyg^UDAXqy)^9Y_);KR)Z$OIK%$_ovdwL3FrLY&aDNj(K)Qz z=2VlZQ60&HpzckRWYmK5G1>L1OK9&JwRoWNUw)^gE$7`2Kih9yNlu;RqexZIkl!y! zk_-!E#gq^;+{ehGcd_wyqpW!~hJYa7o}{_z(LLv&X96o;fm7(OMV zslc8j6ee<`(2d&f z5&nyTyRM3tNkojv3*cwSd#(L%$8tO~wH_Nmn_FCn0!5?f~`k`cyO>XX7u! zYaX7g2^{{YNSK2yvG#yGWCuM(8zDP!m(W!BJ8@o~H0ud)F*-NS-I3U`Q#~Sjt4#2U z^h2Yey0?+80KU#=_{%Jk++f|f$-xB7r<6L(Wfqx>h$spx6*w^po&0&aO1}*oS<-oG zqFP*8{9Q2{U#a%J-CquadAnh*x|>?JxN4I_l@;cez|zHA6J`9AUS` zz_6`1T zH@|k44-4&IpSFNmSKu93>9V{dD#INm9D;pqUaw2A6yfD1HyeQ%$uU^;sGG`mz9oYH z4{M+RJpdOj00JlmZ~+0Z2SD}zlQs4K1z-~MxWOBW{$q_(x2V?8BWq-%sl_xg{tLh? z3t-R;noQ@lmND5H!~kWAdYo)bG?jnM|IgR0(p)iLtn|p5$>ztNK+R&6T$PrprE0?_ zr_ITh>XrWjFlkgp!YPo8`H&%u6DkEo zgXCh|1in{;d#pMK3Ya(xQToBSN}_~N^e>@8Bqd+y7SaK^rx_ZIMcHhQdp?kEq|O89 zD}0M>dSn615o?zVqd&19hSRtegyUq?UIbC{4)e_g;Rd0H09&@Vxfra$^m_?%q+)x~ zTsDWrxKPT>ugM4wwgh4^xwb+|v|J`K9whWA+KEqRWWt;xUs=ch#JUfOA^VvDNyifF zz#?Mq*8;sy#|s=vbHBX@+mk}(nN#E#Qu6WfBDbso5+!T)`6A7Q74LaA?kaLnxD1t) zF|>q<38Ky0Q0lCpv4MzmqRh&QY)nW+`i5!WEt!tS+g5xI+`Dg$PnHi(7)emU+ zELxE$#iTsYn619Y1#&sEs7zGG<*TVD1Vs0@Zt%N};wewp593PLx0$L=3s?8c4g4LK zfj&m>opoQS5S@7(^@;~IUN0MSbR7}t2FV@2_&MCd$rQ`mx{7TQ1g7*zH-r8w7Z%SJ*>H!mApHQ<~lxP{EI($XNpcQv~X~&2#Xia96~0ito$xn zeNHg+!KxjFvVeba=CioC#V%XZ8WH@2l7Z9VMnJ7e_;76$Y0BEVnw{P1X|AlbQZSR& z2=91;Y`p2HEyG`M&|65~~Ann|>M6(SGUKXmc#rgb*5t zBerNxFmW1hD0P2=8N2f|^FuhSkHewdRu&eFEA^U-jqeD$Oq6fEeADNhdk9tUL{Pi{ z$Y06ZxnL)wusSm28HFC>&wpBCB0trJIc`CpW+a65^Nulu7N`tv=Yqm+(0nNk8nA^R z?A&6-Kng8GH#w3*TA@Db>xu+`F%TyN$;pj(tniw8ku)lhe=?L0Q^#NaELlD#>sss+<}8-dC0O9D%aKy^E>=yz3eY3kmBMAzc;^)DH994LTj(k3ZC6<&@F{b%`@x6R%3?D4`O`u9RL&~Y7yioo)<+yas zFC>hEDHwanO}^eq%@*1mL=bumZfZ=3Ip<%iAC;3%DMez?jt7}YAIVa|(XqWUHP2XY z3uIZUpqw`IvBF4zub8GGakjb7o{)5k@2xZu7lpYZ%ZKYXx1hpJHFKS<`X6%B&G?Oh z5B1>Q&mTVDwzgv+X54mzy;>CtoA0Sz&QsQRDDT?G)$82Tr#246)48PG@#r72sE=tA zTbAF{d9_V#e)qfU+QR$bGp73GGV8AUNd1G~%G8(J&byxTxDNq`s$YM7zU%!t^I^bn zH>t?h63J5k;+?l~_Ey6vC6pfct`>;9<`9guPvGH%?tqWY#)OFLg3HaWus_4VlzdYT zvSn=)*1DGD3O2N|-9IxWDfzkt953iG|1XAN0?Yth8~^|y7{L2K4D0#d43iD_pjF9H z`j25C3SGxx!s4++K$=UuL@6ethi@!J&KB-F~qK1-f)LeLg6t89=xyr7#dOC6WZVV zNBlDwTVkB|MbAwmm2HD;~E6gUPK6@`|s-PE}IN-x51m|Mc5mJY|9R4HE zOO)zYu7l$;jtcH~Aj>=4=LceVs3XNPz6iM-(Ra_1wr);6{h=+iBy4&pdCw zV@%0M(5dw0E>bOuUI+s*pS)+i(KIJ8fVtriuyV}j(3_TiqH~_7N&-95w_$`10MfJF zUxpr;?c+ZHUm7bpaWsom@gDC$1vCY;g6gH3rTJ9z$~SZyO1a= zV|XSJWMTm<&#y@{vIM^gWD?EEhqMy*pAH+!u}bth+ATy@Z60 zVwTwEDVSRvT=_UDS`ZNOg!y8WN`&C{rk%j$QY-1L<5}D~XFTtHsU?nZ>K(hqLi=%3 zYdaZEeWCQqUDYew@#C1hyUTJ+dR$9P5g0jPWMDAl@=1USW8Ca7Rxp)P6x4xDCNyme zEVNf3hc&eVd6R%*RI|i(${NIllY?V@KVXQhqU-<2)shm*;lj=+9e5S^u10u`B;1oC z9`xHev7o$AJ|&sRXZx%{TM4i`a3(@Z2^!oVt!OV(gfqOCxr_b*9S#?ZPrWzwc~c;YKJR2T@u?lS;hQg3K6DpNQfVwp0a`~ z(1aa@>a*!^7bcB=KDe2zXOVft1)GE_FwRD(80Ofo>uA-%mWRO=RhVkF{h}3W6o-w`4t= zi%bTqgZSAJWqIl|*-`)y<(Vq{-hBq2!U3q9k_Bem5=Xj~9u~IqdbH zl7I#zNFk1foh4(=3WPwjdYlMi$umsFV41-wRg{n^Kz<;bd}mYTrx0kG!mB{bz{Lv8 zBJ7+@5*aX##*px4LZJ&5iLrB)>8Z@jTCLUYLC#5P^$Mwk%aKyikU}gT2yWG&s#CWe z3G4OxiyDGu@>%RCd1*6^XSQY#IEPp0Z^bhwFvg^9Kw=a7Y;<0l%_O+sBQ2H2^3=1Z z)WjiNd44o@8Pd;}WkS7Wv5Twc4CJEUHpR3Ebk65M#0>1OJDY zJlXUaLGmaIygmv5AuCAseV&GN#18lj53>y2)jn|6d<-Cedp~hAfMo?(&6jyK95Eb( z;dCoY3=wKi2=IXkDuw>qKHqqk^w$j-5it*^d()U}K<`b_jkYqO7=}|uveAkJ#XON3 zA@LQug+ZuY`xA=|!5M}`tcoyU8$$t#M635jrQV7Os^X;?v6{2?*-3gQav1;-$#D8; z<4#K!Pt&}`R0B3aZ+iHxk)~mmgk=~BCi+~I6257~6r@U6kG9XnMmXukviu2zm{-X2 z!Zl@Z#SN@1+!0!jXr@D0tE5<>yjt|NKCacXea225isPty@<4F ziYNDwTBg(Inn=2AYJk6RGh01c0%0@OCxkomasf}QN*PGWLG$EM;mTc}!*oA>5~}b0 z?PkRyg8Oz=jR#TD!;x)THInIm+F$&Q$GB#F;{`UT%gk{ch~-A`a8QnhkjH$_G5n){ zrU&ur8pM86{`)ZBplhf*> zp%Xp`UfaFqD3Jme-;ithJKC`JSss5^e5ry!1!5hxj6b-1^}Q?|132&ef+u7vhflnM zyL?m!%tB>wZPhF{l9dYn_3zJh)ru1>sot6piQ&HLpzI&oZ^IPnpZk|gYBm2AUj%@A z-G12isUu4CN^Cwa93B#u$*DW+A@lH02fh~Y1H>7#T-r(mCj5g6ZqPzTK1+d6EEYie zjrIOa@`hty637c|0SOg!`z~${!>*&~-DxAke#~rz7k7YC9uklVM3I3J#6#PN3=0hE z9aK1*U^*o{JPes|AP33}F3O7RAD=6LN;nJDS;^7imhH)h4i4_npvOqzjQE6(1zSit0sw3G5ZR0(Oa_|AFt*#2pM_f!i%D5&}hnDAXT z$kXvVib6Dna+yLMk>M7tTB(YfIu_=LynrB|!e2m++wv2M6`A+bQ1f!ZrPDF5n6duP z-zya0`M(tqLfGO0>j*VboS6$&f@OaiF_)o(GVeu92nIRkNzzvEb|92O)(#;zrt#la zs!DBbB56v6+tVmX`O0=Gna?uGWJ1T51P22PnmY#qU=nCR!gUMLHg!+w4+FEFW9sTv zdy1=fk9%$@vKgaa*CUrPFoS^wa`1_k;w&(7je{3pd6@G*TdA%)=2;c*msyaFxS;|RSwhRbg!f-2Z(ZaLVkKjxSje|-&Js?>vbK58fK=iw?_X8EzX1eV8|YP%(tvnkyu z(FiL3`DT@26mVf9sWM@%gUTlPForCCK9>=DGQJy5b?p|~CB3AQuYh+7;+hcxpN>HW z^pQ6a-`--q%#P<<_bdblo2hdi%X8rgO>!Xb6b`VdmkPTHJrPHY5+f8 zP*)V%5mz{czyV*bFvSEl2jPjdGh78WA5*I-;ipA+UvvxV-2%{`a2FrFA{nT<4ZR-HWy@(do|vxN3G2g>c0FNS$&5;_L_No zfN-akoV#Adh)XuGhtg62a1|k!xw{uDBc6`5qlZX zTw5XN0^Dl12|_BKAxZs0$?QDFJaYDkW=~m*NofO3q?>|NluR^25>1f#jf6 z3Ohj)Y4=fh3IT$K|6o{ocNBz{R=Tp2*ldk^2p7{(-(h?f3hh94Ekd%ohG zrvEyghGVfu2u5E5m2v>s!${P);j{Sh<3)w4%b0KP+!}2&JI;A!-bNIDT*_Aq(|Ar zlb)#Ny;4%dH2K2(MqWZIygL8i#z)bC;nwdoK$9FTjf#y9&7U)@ncav=(VnRJ*rZp* z6R(4aUKEfQngC=-xhkKD`HizhPZ)8R&bXJYC?B@eLhIb^VgMo^bHzzYr6-TOgT=GU zC{;b>v~2cq#X(1GiGv$TOaFSF*?wpJ{ z6}_QVczRb!8qmESO!2b-JCZplt(Q`z3%extb=+J<(Q_@GQoYD+7Z@(!ZQ*vplP6;`9mMA1fDr zD^M3SR3d?MC~bZhZtGF6U2!wQh`{iEvV2^r6}?XAS){{fJ)c-`aAXJ(e^KLC>r7W? zjBI>i&}tG)MeK?St%xFvEG7BjyLqEiDeT;nK2r16nksmnA7%_&3wDlRY`zq4r!QHX zbKRUW{OMrHdp4u`F6K9h{^yk1cT+FrJSrQS3-#+_O6vz}vMswUKI$KD*KbJXthv?- zDH02rwlsIhj=Vrfcc4tdV~!=*YirG|PhfF{nwb&*1p9Em(B74)*%FmEj6@aH#~Rn~ zEhpNxYtm}JCSGkP3=zu%vg~&a3eQh$us<~a3UJRDqqY(q;AAN0Bnoe+A&Rq%=nlF` zqJ%roZR&|mSC%&Mwb;`OUUjt0AJYLmjzKc(DIEa$YbTbt84}^G!S}bE>AL=C^q4$8 zZG4TFkg3F*&82e3QMNjMiLo2EUyI&JMemGeKJ}@zy^nv}oW!;AiS!RaZyd3TS0uHg z*r9jaJC#u}=QNmnj`jay{?-=oN}S zFnN1D+UnflR5 z$PYXAdD>Q-&Q$Fpg1d#n%&13wH?ML=e#D@?`An_yWfX{9@nZEu**~J+;q59<`3B(kx`ZhjYlyj?fSPDbwJN+1RRtgv zylpo$uupK42zxsJ{u}kw?(bl=Q{0he!J?;sU6sH5L~(DsDz&3S(;~sthSd-`rTJhE zrttSQN;WS^hTtydK9%6cC9hlChp%`6*4m8QoT>$I+!W0OroH|gB_GWjMuz&2ME95y z?;{gr)orvNXbW9dyk6gVGw^|X7r=*@05nqkNLEL^=;Fh zDexPy23i_eDinZ~0-+ezAU-&&;A5?r2QO7Uq_;4j6eyxx4-PGUM@goeuSKqV=<6^h z6RjvQtf*jO5XglD+iqE#Xlg2+D^Q<j%G6eJm~8INc?{s*tofeUwQ#jd|oijN1W0}0hPp6HS7zfCFP1soDwUU=yM!KUE5UeZBMV>PquP|M&ETq3DWo;mQ}=W zqFcRzk0Zrb@EGg#=HLm@nfo!eX)EsUCK#$+6{r1Y;lw1*36e za=07@t5_m#W~%grgi?n_iwH^u1wFQxV_0$XQ;c;cSDGGr{MAbHdAZZwOPM(Ou&kw0 zE6Uxn*>s}W7nj2ad z8@$FRbtpB;mtdssa!6k=N;1w&s8i0L@9?_I%)S(Jt+N3g?SaXk=Xa1M|7-DmFK_W~ zRAN@%BbeWf_M`w)^L<=vLcV^C0kp8?Flz_{46*^oITq7Zy=E*4FVcE#?Nwx2Sg|>^QONY3-E=``C&!ZqlBlCL2ZtB~*Ix{GxUgXNhnsQ}feu zd}z*V#srD0K=_rIuETwipIy+uTv)>kCMf{6;)MiaDL9!G{7E6d!t`Uq?W;zBFN>fW zM4GDZX@$1Mvm@nEt(6`m@q>l&t-(pbo|(_8c!(a;YUa(b*DCJzbKJIt|3+o?+dKYL zt{m&g#1Tq;_qp2t!0E|Ob*osFnp0I@Y3X=$9?$|T#;fV+q#y0A?zW;gyUexhl-x-F z@!eBRp*>IBAim% zIz<1TSjsL~b5TTb2wC(+TZwE5Ga9=%D>}^T%E^T}zC0`!%e1$+kox!Q1Hj*n{h_o< zXd&&DnB%c>HSL1mOy~arb3ly0ur_xz>~^i>7nM5avOlD((&~6QTP;1SW746sMwXPp zDU--~c_#WZ0z_Ea)&Z8YPR$i!P?@xYqgPNWEj`P6u4k(zE1p%WwOjJEal4;hi)=VM z0cjCOsXRp-9U;;W!*N@Ec^{1c_S)Ht>fx6;V`Mw{)Af#YttyQcg>gxte=> z%*Qm%GZsdgbRaUiH2EI4<9e^!kvFS;MGyzB3kI(n24GMG6*#$(Yq^-~Zo0d ztG(^wDv^>hy{o;Udrf_dwMa`|IO`|sn_H9%zLWvHGa$Rwo4+!YySPig;VZtIyS?Zu z7QEpDj#9rTv%53Kv1B8nQEMYg@Bm7rePG(X0?fTn2)p^a!Aan`p9{bs+`Uz1WWQx` zlEVQS`WOlvWeC@HxCND$%fEf7eY}CeB3!xP8w1mezdYQ-)O!PhW5eEibsl2E*#*6V zlv_5?8$E!)k~p`(8z~vEn>v?! z#>XK8ClomqJba5NWv;ZR#uCTg+r<}b#p%fdi7Uo{9LO3>2K|X6JNkGbe8J8CNT9m( z0XFzvZpjf0LdUT>CnUwa7d*lNyRiU}1A_d?KCGi@;I1WnTKxN^Pivr>#TMiN#FBEt z1xC0WwLNA+x-H|gu+dCdT4KCx#1xwWN?^SkJj|QW1o-E0T5CE@hsZVHtnRC~JrK|fr>#IjUrSlXdW^Y3$j}p;vf8nzZOw~v1ms-Mf-DA;bI8oe&i5?1Jp0Yz>jMMze#{)g_`J#REF&EMU<3=7$O5%iMypT@(8ngkR_Cf=I))Z}YrT}s3lP8Z!O}x8ijQ2zd@{VK zdOZO%QR4iHM18Nxf`w1tAPYyEy!d% z&r7RWQkj1;%}2`&T`uq{0GCfT%wxp2bZ~$z4h_f6(VWRbninDiP5{z@Ovqi8&S@Rm zjbm>A*+FXUlJ9W@8IS|r=|?GtzA?Q~&UMjcyVd-)F~Q8)VjL@;Kiad~!Gi_p<$=A9K24wuC%?x;SnwT^8v|%=m zZw-DOQ0+JcJHUN}srsk{tddlYe&ieQ<51q`K|NiS4zKAt-4)5^wR!1Q9?@g_SVY_` zN-%p!(7}to;IF<pm9-!!xuB$pdS-_6!Vcx#+ z-Lj=_>BxSQr)=Ae$;$3G1oTDXysp=yQtcJu-Nl$N``+L_gq`F3YnVpM?eSj8 z$;;s5bn&`$>Rb(dhg-YwO@k(I-{n=oLJQ~kZt{^xANf4k--&0!9=Iq+#g~Fia4hO) zVBD$uvbc)L%nrj!yU8kz!w*046+Y}04>)ck1Ic)dTwnp^UZ9)$+B=`A4FB+JweBWu z^r^$@;#lxzwR7arHXkotN)!a9PW1sV^#y63A#aba9v9`k_>>mwGBrPA0SZIKDPO z?KRCs9kVX?^>b35Sp!_^Sd7vFDZcp{vijlweEiN&;t1z-h_6O(LE$iOGR(edKpj~_ zfCDjr0@@EGu%ZKHFY~bO#NA&VJDM521rQlj42+;+!9fNI6*^$Ju)%=@DnO`-f`#A% z3l%7Ac_4SJ93Q}a^zLGMJI&x zX_KYR95-}mwdrt07Q8TElHCfl?^35@nJ(t5)@*>VYy}Se8@X~{%LX8F=x||xfTNL< zrp2&!Asam?xi*cv(l6BPl2&;j`g|pT*N*2OeLfkiZk5IlmyWDrM=_FLmEH+Zzm$02U8fe4t0WYUch;IL6e7oil9 zyeXxCaYG&Pr0vcIQ*dDj8FJeHNKEa-`>w$!N4#zXN-G`nfE{i~Qp-6XilIFiGLWsj zEH#q=Ks}j~%15veELGAa^V|+ZH^p$107kWIi_En+Bg<7%(G)96DLa*}(6CaFu7gNZ zJ!-+>K1+kjER~D3RbSOa7Oxj>aKOe~shXA7Xg4^i*v$;&2?ZiD?9_%I$~a<)y97;2 ziu;;%R?iawHLgsMc#=z4V<9@y+eQr8N?WJIAYY9O&g2VlUKFCkh>Kbjj*F~Xm?vJIa66}eVyd@1-IXJH{;||gSw=^ z)f+IcOu6=Z*yTD0EKRwQYaQu2JOid>|&kFFecwmMBs^FnDZ z^1K+L(7JDyOGEo~!Y^=Ypan^g0SGIyF9PEt10#JYg{6ig(Q62?C>3&PxR-{J4feXNG z0O~sx$~b7H{g?<@shd+0KM;gC6;WNH)1BZJqJ#lX(Sb+ugtpFRa5aTxf^n-Jyj3x!u&{ zr#i~?#Fa+-o%GDd!K^$Jgi92r4tb)ibp8@XfFr^Y9+iX}sI8b3Wnmqdzz2Y~CZ%(% zV;@-)m60lveVj9%@Q4Vh>dDGWF74$8(PW>W1tE#L3C|7&IMJ^LFo(Vbp~=AIC?=xt zUmt)%HkG;s(;*ORRh=hYf~q!x74Mtq?82mmw4@AV$_F$AK@tjEuNq82k5lm2=@@5L zahlA8K+c!`<+3}no94ihckQXGpaR@kY+HI5o0G;$zo3xvO z2~IgxfSOFBjv?z)N|XVm{t&YlWU;~FT;8Q36 zPJk`L$=rl;$F47CaEVB&!Qie*zQ%)Kj@Smfs zx-ms?$B@KK7WZVo#)1TtQ~)9{WR7eQzP`#@_>wP+2z=u2}>)g)0PP)ZgNV`o#I z4i2i)?it?@?tv=%n&V_=iQv`jRU-=XEO8x8I)9~z(t7?+<1AeOfL~bH$=cHYv!PTv z>QMMbl89@y5zVM4lgXdz+VrTWd|5=&NVx&$c%*Bc5%P^pZajiC8bv+oH}^``C%^Zq zTlDQzX1UTD-x`@Z?r}R+a$+RIomcCWGcxBJp+@_Wr z!&H`Xu4i21Z$aMXeb)2`r!RFrvkCT-uT1!<`mM(~ztZ79iE|pE(YnCXv9}^4(r_5D z1B`RSw;}oy|J$&F38=tvGcPMZ9}^nzsJ{G(nftrB;9Ile8!hzHF}j(A)oZ`mOPB}b zz>`Uo_ZR|>L8ygGqpQKbT-X91Y^Dv|EdDT~7Ho*kBMZP$L8igG|1&u9(ZCq=n-Ou3 z7vT&cNk7$-C7}74p^Lax625jjBJ^n(Ynv1$G(JYNKU4w1xhS9iAjB;x(3Bkz10a|J zJG8?h2p{iK!}F2@xUnsk7%}ZDyT$vaF|;sgVL!f;Hz{KnW^%(Llpf(T6X=t#H$j3s z1cNcq#5iaIJ4}MS(K|?lr6cgeEeMi9)IPH@Bvrg5ARHV<^qk;$p5}9kklMBj6oMcb zgDK!dU+lz9oB}fVl;g9qqZykjpn>!Qy>ZikRs6V8!;{15!pVCOX349#vyo>RK&Y6q zD0C2*@WdwgMRMds|5_OC+kyvp0k%@94dFbQi8BJ^r!!12)JVk=(8lb*r*(@(u7C+A z2m^rx#&RS`Cs>0VSd}M{4oA?ZBWa+o`w2rsL;!e1m_oh(OB#f3gQ|$^kuNg3MfApS zq905gNP{d$O$5bJS;!J-tM9OZ4RDiAMGvEPuoZT2z~szL{6)`99;BQI41xjwF&LG_X`aN3xVT(Rr=m-2@w!fd z%Dmh#8hRAl)Xh#jgkH?ePP`$|EX-{B6!b{Qvunj1lT6f;z7%p9=&VGkqO+bLG3%TH zBbWjv*v((uo9^_+mdqw18=H4yn7S)O$Hd5b6iMEg8QCPn_RK!Fs2?BrOM{$(9~c5A zs84d-7$q{3eKZl@$ptpR0f)+gEn+aw`$@SBix;d%`74e4C^_D!z#KV&*w}$O)J`Tq z0#M)qE67e@EQ0#UPhu&Zw^9O(F##KZf}vy2npnd!%t_gaHORcn)i0D>womaDr2fgJGOe6tSyCZ6!q7f*e2snN-fX+c~SlHCi-7@`}?pgQAqP zr|7H!(BT3I704?fgJHCSfFuLg37u(kRkAsxeS(47f`aeix`GHN#={TEs+P_eP>D3D zy>yv!WsV?m9UAykfdm2|sLy0Ag8jNJRQWlQP%k9t1J`jSXra=d*b{$kwyv~1kTX$^ zGSNeMlm41RGSJe1Gy@{70Uu}+6lFvI=>a$O86On$j29df!;r^l6j%d&PF@XIVMVv2 zkXYKuDgTO>C6E{0H~`S`fv`!thiTLYGMd-gCJI?bu1wC5)i7z3FN5{Ar}Q`^`;>{z zqL~%X=Qu>J{1Egy8oe+ABE3lC?6mc>Rq;c&y7JY7_1Vc{3iq%tH%Z#V z*?rxfVYU**onpk)28{uug2d>u-Q?{iYCPHTO%AawM7^C%01i0`KHPl#NGEi?Ry|-^ zBD({9me*9?0M*+1lgl+s6*BxfSG&HYqLM6n;KwZ50W)6BxJDQLUh}-l2^Kj4SwIy& zwzUFTsBuS!IGokg;N|36QPRQtr7t=yVJEiJMC4(dCA;Fi8Co-{X%wcMTfw5$Uy;3G zs*Kz+J-CZa;VF(_VR}pdg`nG-ok^obKpW#pE(T+{yIW67;|lhT9yVay!P>^DxC5!- zb5*DGoJ}JZ;h}A`iK}82u{vzRAS9(MxnSg)`@hH>LE1QE^TpdF)@1cNulxlp`fwZ2 zXgNw=Fism}D3)BEyieJQ?6&6Bjyt|3!aD=efDGK zv`Sq|M1R&>Pu}GJFN5b2?ID6T40*0dFFM3oeBy3oQr;r9C6>r7j${15XeVtEH#^wr0X>(4iPo8K+Zr+j(VNn^+XtQQ)`No+DX*kW(4W?(NuGr^gW@*+- z@D=N`-d}6P>W;jyq;}F$Dr$$eynlW~OonT`-dY9SYRX&dw?>h;)@vq#VYV$Vn37`~ z?pU_A=5@~KA#MybTjj96QiQIO1Ucmf3-js}a_&U!x7^^IYEAcDzf~IyQA)5SC%bID#Iyf!<_Csa+gpVbeEx zoxy^}z;@+Q_GujrYLqGH!*Kx%g4a*b?+YV-g zA`(jvaH758PT#E2e&LV>Vlbz4*8E^U?^;nOJV`%p<1+3Z6LhVeRQ|>7Uaz2?4s}Eh zbE3ud=Z+ovwd+{Vw_j)8hE ze!pjH2l0Q0W3|RcfnRrr58+o1_+5VCa6jUOck4ONTaNGecL#Zt6ZvxY@IFWClQ(c; ze{n=Vp3xjP)X|>yx@~8GaA1G~8w>~p zE=Z_wA;X3a4}8$G0^!4iAwXahaUcK#1r^nVpm2~P$%+XAln|lPLKKrO8~UJuf)ADs z8&BelnDOR_Ha;P;XdtvCLNy*I9(7TW0MesQpF-^@l_5x?O_65Ah%>6fsw1y*b$C%q z(6DB?%8)^$1tXhVPwLbv;O#)R5{6D?O5z034HBQ64V<^@-@sWl&Nb=()vDkNW9`0d zd;>*{9a-EC$UHZ0NVXYDfL7`vG2YL9l{!qR0x;dkXBWHV%yKZ*&Ws~JZt42vjT}w@Vq6Z4fCC9`eAf z&v};C48P}u?-rJl-_8B{(+(=-(zcLww|OU4cvuve-)|4Zpu-M35ejx?5SW(}BNf*LG%T5cUCHCq=j*nl1Y2Fyo=2O?%LBVE#Uc#(W8ZYM&H zAf`Z}kP@=SnsOGV_#t~5YUUn+vB9_AL(5f|LSH~;3FJp35{P5}P6naa+zDMmnHUva zm`E6!7=8o+lxm^3L6BLoIb{T3b=N0e5y5Gnp6%JGTY(sqNgR`VstE-PMrk1j6fe-U zrj~i$rpJnbl0>G9Ar5ha3}0F~7>c;P2Ukcn=69l%WvX!MbIJKQsjZc+8EQ;6AlPPX zo6d?Ttg#N8YC>w|z=dV0iAf!!BKf)1nXLBeDzPqH+a!Qm-YV&&88rLjS2gT_!w0_k z`fG*RdI~LhqUup;RN)dir~v-W)^4%++B*mb+)}FJeDvbw9Sv~UP^hy90ZU`LAU;T$ z!q_#;>9fw6siK|jK3t?x7v9*yw;=xqDMxaiywDIwL@22Lhid?8FOeYVphOVVHc+w< zdPytnzQ!$@6C5Z%Oc4x8D51k4m7;5ffyUv zFw;#g#E?Tw{5mUTt91mUj55KfLLU)3q!pH;>~ak9Tl?iV!;@m5z`+c;{xE+Z!+ zMw{k`)Rj@gTSOp@ZU~8I*0}{p`~brXk|$7w<{$EaL`)=H1tG7xlP6-)3^nu2Fr?H0 z{xHHA_(}~OW6jF?5gijOC5QgjOaExY@VnI#eL!{g!y6)spW-S^`{3=2N z6I?1;ml6T-4&XnbARz@PpkI2NcR9expoU-RjSmtqgp`ercCM*|F`Q8V1~3sA<~v=o zzSa~QFd+tf$N>|m2B5NFVF`_MpKIXoFBKl~1u{Gd3Y0KI{^g*C{L{f0v}U;!&1eWh zbQlPF0HF`yOkGurOdW)gK~pf%d`wiv8Mt7fla!$jR@eX&>Oh9y6wXGK2?`UYkj9Pd zU^J5hz$m>iuQSRFX(m7*%64$Q1Q;$xNI1j)O~%N9t2Ll<(zC(lGSkSB(I^8l@gocC zMX@iw#Dg6yMIACICu1aI6*KrG0LoCwDO`aGWI(|cBuNAy9HI_PkiiuGkj*v7ppsYc z!4!aS17r;HDn3$SO^%4O5Ihix{22m2AxJXw(2|}4p3ZvF-+kD7Y#!Vu26&~OtJ{;JOna|&<8S3V4f{pSjckM7o7>LMrFerDp{&T z!4%S&2|Y+5Q2`C7;l&J0=!4)WT89`I?g~zr0_UvI1Wr_e3{0>B(~uE^a-uJN6;xq~ z6yvs!q%9@-)Xz;LV+<)iftk&GqBEfXd5RIhfLIKe!B7!2QI3{DspE9&6q+CdkAidv zK%lB5nTpaIB}t(C>1w9%6c#9?#di|47nV@^5DzM&5Sj?aT2DueIIfasKLA6Xng9fD zc2k??w1NzrfQ)md^9t)^!V-vZ1+%?$t1Bf87zJ6=hM)j;CPW3=S8xV6lyTTJ_SGWaV2-IRr*P9k0g5O2~wo!h9P!u7HJLVGCQ# zSXtOGhdYb_z?3gNG^|1SEW6@Qc6& z7%$}Nbl^b51RyhtoUp~u96Bgds$9u(Wv4oII#rUXD<++qFHg!$Npq&4lP!Y+Z4>}x z2OB(O{Kx>I1Qi!0I5?OZQpH7)L=j+&G6$5`USGdZ$iRdD6i&RjLfjvW*q|XMhn9$O z%T{Qed-Mes5O`C+jW+~{?+*aK|8A|DJ89p=)2m+(JgtO~RdOJ?LF7Rn>zlQ1xL$gD z?f2N_x1DrVefJ$@+9^<-c?!bE-h&XPM;2^y1ppBaVi57d2UK`O00mQx_QZe#*+wCN zAX23wgRjvBLV^p9ciwLi)@UO_C}symQ7I@PMF}=o(85zrtzedGB<{x|fh6{&hIigo z2xD9yEtvp%H)i=@hq%4KSpzhn5JZqEbbz0XNQwjiRA`FVWPi7bV4y@+QrRX}G-|15 za67u0f@oBFki!l<0Q#I%1A?ZcUuzL^oSPVw2qSWGzBs8-0_>J%Z+Y(NX<;$SCIXO0 z%oo^wnr>uHOC4K0B8MQl^w6)D3MTt)8);lnshLpi=de{#m3QY>vZjmfuc<1#tQt0$V1^EO z^?9PI>^d52Or2~S>jB%=k$}NT`UP?5UF`@_d4sV*c>M4ija!3(G)*ydUIX0IJ%h%CyQaA;!JtTX#pNUt@zu`ijr1J>z4{7uW9j zV)y9r*}=2RBu15hAj8{_JP<@LNc*0@rW2$1S#2aVqYf2r*1ia722v zeow$49da=%l>tBpD2M?GJcu?&P#}GTGvEQkgTm5s zf}O8l{?Z%@|JG23HK@#kQghAflxPSxumNTT^cIqq$G$3B@ro=t)|sT`#2;lUgfEI* z4;9#n8o)t_0DQo<_M;0yq$r9^G~ditNE#T%a6Rvt)MHf(%YmrU*g}gD)gR%61US7_`v^1AG(tGPy-1DsEDIup<^@ zsJ`RfvNLeV!3{P*7e}ztUI$Z4$}IPY51>qB)B)xm2N}2)WI%AuY(qyz4KIcJCj&mH@`sjH_bf%DG#uH5qwiz#fwlGn9z$myH8PR$H z)P-G;rY!lit9Zt-XR&#J+5Xtgm$fLI8m*-PJiyT?P0XM-EsaP=8X1Se4@s+Zl4fFn z0}B*HXU>eNQuR_(5lCrrm()eM1IYdjsW++ySE-^M)HET{sG*zmCs$Lj-mynp^gClHnha)iQFOw+KTHdv- zp;M?#`|4N8?6o7VGf`)Vih~;Luu2%bYGWNMBgjHEs+6tlN#>>4g~`P>-YIG}kNUT} z|E998>@1K?FZt0r&QrDR$t|322^%x%00v?(gAF=xD7uPPtSB_?Z5w1;>QE85kO8bw z+B&44)nGGg!A}Bli=2m+Rhbwi7IrO5*WsF$mxv|bb4M%F+Nn^AbzLt>@iN}+Mk#P0 z*B2QF#E1pChOKDAp9Fz`(Uxyp!jC4A zq?mhZyE4mhXF*0OU@n?vjeT=?krhB{#cWSsMyM?^gS9UfZz0@M) z@D>=>v4*jm4@T-*SI$D0*6mwZh^bc7Ma{rgYKI?bXqeuXDaF>Yw$mzr_ta|1yplqu zo2?nA2$|W@j_C&03AuK2$!>3^wXt#3U>>LXyph@wBHGOmA}jLhf?G1A^CE4rlp*x-2I4Vzw% z-fKNHSB`VwC6{bQz6J%DA;LZ-5<3wfS5)&E!VhkLgU3NXKxdoi|F1=l_VOD?=SS~6 z+p7cs7e8>}V^xuuB+`Q<$YloZ1i%c=0D>Keq1^HU0o`{7`v+S;0AdsZX2WNGUPECj z<`J&tA-lGGaA$WI0e#(9fGQP1KOh4g;D7HH8r`=9W$+rMVgo(!TG$q5##R(_Ct-48 z9jQWrf`llUmoXT)1i)t-_$L>-^npt7c~gM`V}OAw*ncwsG(ut_EO%EFc(Xm^n?)hX2sSaiz15ZvUe#!hsQ>61!g?8qbZp&h?X)oai>m=;~4=M z0Ai8@t%Dst-~+p;H?IXe10X$Nf`FZ<61bs)hmiYe6*)F=T;!iq?>cJh@e zyk>In=X`Nz7k=|hg*P~1vyAhEVl9DFLbnoqfPQ!AQXqkftEGzeSZPGcZ5DqN@>jTajc%1EkynrUcp~pOX3w}^{nd|@G7$nsA)fSfDraP5mn4xC z7}tf5Pc|A8sdov<67Lr>EQx;q5?u6Hda{;ctQJUM|A%0~=5uD(Y<5&l4A}ruc#lOA zl;Q-BYQtnQ*+O~~l7rMqsyJPXCzZI;RH%lK4Y?8~8IAlwe%+Rh5lJ}EIErCIhp2Rs zHGqsCrbIfk0qxdbnzxf3DUuIZlJppqL-}n*`I70_j?K7$K7}H!haqGjJ7_{va^(;s zka|(+kuLNwfl_xe1~HT;hcx1jCz+LG85+fQmM)o@5J_h*s6PIei*+`5;FXw)nKdxw zbgoz?kQQm5B#)bUJ$$K|>;;xcS&ey_M|pW-ibo(t00WGeJ?7?*8i!swX&ze^a6mVH zc1dw5i4qRwjG-wR4=I#-h&7X@l5!4mYjGaHS@UwW9gk| zN1+3dpFSCuRH$Aj2T}kUgTV=SAcugG1!Zzsh^zOUd7^?2u%Ap}nGl9G7-|;xiE!pI zqbUVNLx4lRCrFL9Y2lTa;n7ZegA+Qso5^$3y z^p=aYHEBv77|A*nmsEd|lG}Ky;0k%Fu`ck@A<8JNt4W1OdYU}2Pla`wjM7r(d5Cwh zu=VAXRmpQ$Qk|%H9GVtLR1lcW|F>5%D64-;OF#lw^Z}RONHBPqF@IKge^`9+mp1Nr zlO(EF$HHg14}RltQ!W5ySheDAIvJZ zHpVbCmb{MNV!2k1-q*RP4T}0oWG2NyBu%>72E_C{Jh(Q zO}%2m_)EhyhPT>LL9*z48drS!#hmB zOE3sEoVy!bF5}^DQD{}eE3a|ldP`x$*$TloHlT|6uxl4o>nlPg@Vovi$3G0j-q8c9 z`^7q3$b{?!G2pQ!|N5@%)W=#pyUhwwdaA_eH@*s!k&K0De*DKfFmTx$#DDxSIPAsG zYr$l~cp3M{S**%L%CH&yV?Fc3IjX<%YGBVL#j6~zTdc@{Wdes>%Jpl1i;1)?B5rVO zx=2d4B%)0e)xfb#ZQGkZDHq8LBCk78oNL*>Y&&M$FX)iTH1uqNxaG&Ez3s$&H)|0Vjw!&e9&A*x5^A7B!IQX+mTBA z!Kgg1qctS5|K}O8ThMufCNbc=AK=6se2V zSZ#l@vCX_}(mNBoA$-%=IAKZ$$Ol=`P7St7(8)-gykGj&F>H=TK?ZbP%37URZ-Ccb zeL%X}QKkD%T!qOC~uzanu~tIVIbi3!-ZU z2Nq-lIp8Bw6T*Pq%8Am$7qE@NdAdUF7fQg>u1!G+Gsm`_*H=iew%x1d(b6q^1BF76 z*}>E^{|s;4U2PaO112zxpvNT8?XWZe+06aCg-M0$cG1xdThslKg2}Sp5<3>O10iZg z{%px4Q@1Wa1RC9K=xpB~lHB7F14zK$tV;$-Xgha3+tH2R$Nj&s);Ol=LhyXn1xX!U zx{K$H-miHFydfrKU<5^A1Ro>SIWplCjy^@}zDMh69is#~n9T`5d-!WBPfa2)90D!8 z$W(c4Jb6}0>YjR_SYxZaHSTECJL4%nZgdI*B(9kTLDd~lvwQ8p?Rjpm-QLI&dj`HY55 z|BK)icnUt#ESFA( z`pjw`MKE*J*TMxbu-cyvfdx#=nLMbZ4(W3a(R|KeC;aDst-*wjsqyqjHBbgy&gD{> zWK?6>tTzdz{?oNSZA{MLtG=f&O_?&*#dn~&7g z40};x-~+`S1mAVw)t=rGP2DHG>qt)NmHzAIJ{9DvwJ%-YSOson(cAML+C@I@0x52c zF5BpS-T;qLxa*?-Hzi66uOQ@=LAm=f10QF19J%SfE449^UNN|EkV0 z3{S&s@lx*bF&@t<-z&>Ljx=wyw!1blzu0Ha@u80I3y`e`rL#N#L>a~1jJE->UXKM$`#Kk3Ad>kN1CTUt7LFUNU4_L5&_KlM+% z4Se9u3>Y7baFyt)F6iDJ>{5?q)?IL*n$VdaZkxa0h%Mfg4p-M6`JD>F03Y(L)bb9G zFv5QMw!Y>cY4)1VUu>I#4`006l-PCK_%#p8WaaS2tXQ;8^hplidI0sy|NrL49~vQa zd$ryWM6jbG&hn-&*z)}5t8H`8j$Yee=Q~gFQl9Wp25(WI__8f+h4=TDPTKCn1YGb9HQ79zq_Qxay4A3k7USRpfJmW4cEz}RsCKv9!dvszSY zG(kl*6fv%KIPqb@5mZ3o~re#tAzh z$SOldN5EH6Y`!prAYaF!1(Z-b&};*?sa0Y|y87f_sw~OoTuM1{|Lxit)VR={_psl> zb8kZ^idV1P$F3bu=9?pj4mPxHgT}f%#ttHpGc&|H^mJ;rDV93K&D}fo?SjuANIU+m zaO96~VzvtTDEb_p(=Xpj!v=~0$`cEYi@XABFz{wm@3`sA`wG4N+7lo^nkIs%FTE^` zFE9#j`Y1Sr?8_>o8@2+mLD3xR0R_e;gfOPkQfi?)jllCLG6@B=h(ZA&l<`D~qWcXc zhzN6v!8~G~ zgbztD4WfulHwz+S2OmJd?#L9Y%8G^_0)@lHKD(^((9}|3|1P2>yEO1c965OOG%?|` zi^vFmMAD}<>Ue{|*E;IAYh^6shobWymu9$jnTtJO`z;M_FzBYSAhyx>3hlUsQ8H6nsbmg(E;McD1{D z4K7r-=tRs7cu9**-LZh3(%Ak@qyo$gBHDz?#LJcB!Du;=E_|=GAn|M41 zLCQ0SJF|=V&kSPNn9h9>HF;eN?^0`0Ze4xX;vw<%|B+eUY}OjC;iP7IYWCA>fR)k`&J?|zq&zKLRDq= zLAa~cs|qdT#@6l->)cx~tHs(3ha4mWdqbR&>no>j5vMVw>y%I!b1)-MI#D?&uUtHs z)y`bx?>6^hXe?{ULG!Mal?_9zATsYW30OjWs zr-+PXZ5avzxi>nyHE?{Hk`DOrR=nJ;$u5Z@PkEByK|4@F6qK+-BzT5D7{EVw1!4g$Ki+ z0z67WD8^dJ8r*=vgWVA$jgi9xv@ny(|GDgyMcg3<9yp*Dnm`1&lVy3_C$ZGg1PV+5 zrZ9i;&OrD=6p>(p9(l<-v{5ueE5M0dgy z5FP|V3s%EBx#ZJ?W{eR5ubF__eH5UM6VXPWRKn2sg>W?33@#NaHX<^Je>B)h5JGi> zCe|UM6a66LDz?i{mDHqHtU;VeAU7%?P&^wfUxf0wKryOxp&j|5A`J#O-$}`vWq2Ap z?NEnl0Ad1rlP2klcv?HQ@Q`kK-T9)$xl zQ`rBO8G}zW@vDmc#AS5%lZ+5a|FXz49f6)o8b>&yDBSCVHWgyCFP@Wh1FTgL4`;04!2!HIOx!0ur4#1!+}hsJlw5WFcnGr&*K(H{@(o35r&3qEoa`^(=A& ziKknd;0Q9{iuKS^q6L&uIx@h)43yB7(hd}v8_^ClFBDwf5I3`P!)xJ+ry$mx_NQJH z=upK-)r0=P1p?uM43N+?JcaI*1;D~R6$n(h8 zi(SgwQZ%Lmg#j>QYG9!lDv$&VB!Rj#xB&));=L~pG^Oyh$qA35AoX@}mZalQWPh7W zr!tr|KRAo^kkFMCZa@rp|FS{IGQfu!CC*zyGT)4oTVrbBc$EbZI0K^bBKWh6dDvyx}*S+bg5iI<(T{ z_v$W$rbAQPW~7zz|GW9Z?&Zv8y_#L`a?fHxVq-Yk$?kVDBU|3n&3fXJ%yl9M4(^EY zx^ty52!#I}WdaJ1f zCc4DWWKWo18eq8s=we_h-b0S>t}?a_&wV|a68ya3RF8P(t{h*<5%A&X1^H8MZC@}J zZ)^Lky0u5{=giV|3oq?@!e=u@rKy^0@6$Id5x!}mGjA za;*CK9y@IUgChN0DgS7D(Rn%b2Cn(E+3w=A-+1q%>-O#4KIMmuvvwU(y!iIal3}C% z%I3|?y&5X8zk?n_lO;UVpMUs=%M}7$J~v)FT4qzn#QRU}92VPsa7i?b{KJVq>dwDg z1fjj83N+R`2!|mmeuKCE11#6OzKF}e_!Ev;@-3IizGK0?CqXZ{;w*o1fT2K=(5Q@>0Q+%OS{O0|(5#XOqC4fS(#H zBo}zXMUHW3^_t5OX5gB7QXzi}hCm|8%fz`zX5i#(#7K$4pYsDh#R!1mHU z2HQ9kYL5y;4gaCaj2DAAd6^xQxVWK8i> zGSs@nvO_mj46{n{Ev#F`W79$xSR5E|0w$P(G3do{oB}2w10sksAknjv0K-Om0cOla z!D~VdNW}URvzEC>24F{P9Id^AgXYu2X%vh+`GIouMTGoCUu1$G2$%4xLlK#)2@6Fl zL^YAfC;!bOL2kK6WWhxStVM@IFpjJx8z_P>Xo8bWNR^y|BEXWonYU|tfhHprKU}Nh z!L@uVzyqsENMtqPB8_-slpO3FZ$tu=Ov#m0$ud9zq4~pOi%FVN0&#*QAJV3^Fu|Hj z#nm&ZSkgzx(m1Tdwu|Br>^LZLRLG=MNvUYOMI!-K8bcXC1GCv9Li)%yL8(-GMoiSm zD0{oUi>VyBzw5yvPAmhoJjk>}NFHED^olDB*fJDIf*C-8N|e7M)V{4mwiE%mugk>6 zNH_jdkFVnaGC~0|I7*dFO|)c!Q)CjjQm`uE43`8=U%5=b(@SU!vT5m#y75d+JVWZ3 zBLB6jB_ap{q*Tr0Ovsk30bBVar$Zo+kpVHZv|&M{mm{a#grJ~Ai&*?fA-uQlv$&dI z$__Bd`af&?8z4F$@{ap8F?D=G|KZFP?cQF z&zLuln!DJ_0Gisf!~s6coX`6lGoqxQmi~}b4gv1&_j=`G6)iGQo4e~MA1RokxJw&6G(}M^ga57LjUui zQVZQC&jw1OMxg(Dc!^gILbvbBcLqVpQHY7zkMda{#y!819T z4nwUqoJD(z)Z_ZjELFZYHGuq>AoDy-J_Q9`Py#?jOEf?mIU!T8Nxa$#lw{n2BXdO> zHMH3?imaKTSv-^tn;QPyRgmie5xarYJWSS96eAc>#B5FCP*J7Z4WRodDByx0Sk%94 z)7N}CrSU@=>de6NioX0ot+dqf6cijtPKKO<95}~=Bm=HW751Ppm0;D|K{FQm0PVUM zNXa`a1kX>~4L8M6Zgr}#lnEAzmQOv&5uE}g_yKkG#fH4s0l-bOK%fsug8$gefkx=8 zkEqE!q(cbBN2knG<*HT=gB3u5fr`+9vmD3MG=fhU)>68Ye+z(1e3vj8z4eN-Mqr$D zu~me4AdDQ?8T~_%9obq%!ht-1Ju1$$$bltTS#u-Xw+{)a$^noPm{wO) zITkcPf7?`$eMPS{TCydmq>Wgk*?}NP8#Q>2B`5+TFoPucu5d9L2aQsk$vVywm!*u) z8RVSG(z~GzlA^`XwJq7cX^0;94^BJ@IAE4L`H#PG8&KoC$N5|7^e!T}CfWqrBRyRC zTio@bwmQYbMJo~5(vlK!q_T0>6T!$iVWt$6+-SW44=^z*cvl#`TK~fhLQUP(zAz4m zL)!kt%oYMgvA5vV9=IRVSLwjNYf%~V^Vou%7-rO%`f^Vt`+43_w$ z-E;~-;S|91(=3576&83~C=#jN9Np8~On^LFzRS3*WB}B)vf$OYa#N?lbVCO_5isN) z|03Vs7C z>$&Ehtmus`Oxb7{n&H5VUF5uoJX;LI%z?qi)q8f%N; z-I%px+~RB+K15cNu+`qS)5kG3WA3Bk#^GT?jf;Oo8MfjL`_$w`LX_{dP8ch+QpQqL zc0;Q1RT}X$Sp`mlVAf?j-V;(q8v;tWg5#6A)cgJAyu9V@h&}K-VPLiZP-|jLB#DqZ zU=WVQjbo2mwlg9A;uFM2@pNQv*$9^5x?&zmT0P_6=%EGyWn1Y^2e8w!ZO*b)rkrGF zp@e5-Ge%V%TMG?8de-Hrab}7WVpAsB8&u|8o)v4BAN3l0i?OWdHwVd0%*9etm7ra_SGWJOMkfQ05``)H?H z;*qviu@2~5!ByEwA&aw?MrP=-*1~6|=#e(-v)1WlHD9jo>$Q6rS(fX$mSVf6;3|b_ z%}i!(M&}URSiZLB!Olv5$!q)*>a)hXQkGCt+hffBF-Kn9F6e9tP2OGW=e*V&nPzOT z1TK+|Y*xF8!ZvI#R_$oER>98AX?(dm=8=pp>;JU6?X(@Us2()T*kIab-12>FS?yS| zW^IVZ;CwFRjizklCSCUcZn{VoCcSR2%p&X7PI3-7sx$yd_2oRiXzf(!FDi{7*n&qo zi?SO)1G-W7{qA0NXz+m~3C2zHUg6=c72dFcBLEqPFsq*SFqR^LA!y&=W^4feZOVQb z@o>x4DJ{(gWA#oCC7=T837()S8WUKU%lJ?cK&XiQug3K2B-TG%o5Tz!!EriJ{+{sB zlV^^m;2MB}mSRv2pxSiI61QcUaM_qM1!QtF@*@UUREFe&xp1Y%aM|XO#UU~x7oPt> zn-C+CH0wx4+$%39kUH$@oSU{=9P^=Wl>cQ*Yf=X8*XGc|Vo3p-C!ynHz}gZwR69<{qs84%^MX9Q!vWzF7k&IZCgMb^c!;vO-aR)B|6+MeZ?3=SrbU?cSAQHeYj!%X5`xb?9F58lCj$ zu5?Q`B)RtWtD$sS{cfqIx2g40FF-{}?U~5)_1^U}S9WPP^zn`%MTc)^U+5S$ z?cw!j;I;Pd{W=_eZe|Z}D4$hapKkD;Wwn0EZFO=uy=q$r?{~NEW2bH>&GvvAb#Q8P zbszU?Zqsic_^_aG#Fp&;PVPD`l>eY*=9RFr&9LS1S>xXxg@@egkj|gc7d3Xn2%bxjwGx<$N?u}pdDcxVX z)=m6ec_7UBx;|>BPr)HJ`lE;Js`qVZ4&Rc$^XQg(ej0ijwfcLNnrHg1*8`1* zHV9|=_=0-bCi(UL`Ll0(r$;HZFI|X6?`IG8dM10d(Rw{@5w~xN9&KStTyaxR_Pf{g zxu<%=NP4?dbJw1vGj=&a?_rpyV=`WP!gu_|kL}QhCSt#Mu_yYkWGei2c|XyJviDud zZ#!!5`>%Hw6fP)vKRVV&!~ejq``K6e+8-Gk2mWz>ac{?TyYG{ozjcB4&#Bk!%&h!0 z;om8AcgTnR{1yGdN2PAx$Jp=fqib-m8~!e2;VR62aW}$KNgwWC9(i14@wXT!RkvQ1 z#q>8M3!MArrwl~_2ozcttRUzhK!y+sL3l{fAOXY!3=pVMU@#)ai6AVfz~J%YMg$Wx zlDy-BLx&G487>szl8q3S6)n;{XwzUz5fVq%yjUXS&7c>D`ea#>C()!shvd+KB56*C z4|fh|*mEkz4^%|nJgMQyQIa`V%2boGBg&aqg_aFlw4>0tN(H23=yopN8#!VSfhrRK z)`(W`o&Y>_Lx`_P*Z&F*Oqc^$#$DSkJ`5Bu=DL^fVvdL+$PpK7DUWDV`p$t44>+sl z>RQSM*OF(ug(-V3S)BqpD~wEg_Cl(he>1T0Kn9G_e}$Wd%=&g!5uz)1uD(V{^%S`+ z?9S|*xMZWuvol8F1IG7@q)#`8;Fzsk=>y)Ar@mTc_7g8RhfgopdvD{_hm=Y;4B=OB zB~3>kP8C!ppM3*frQd%OE=OB{5~^pH0nllf!VN^g;Dc`?wZ%~hDc02j3G<=0Qws@s z6&HseMwpr&74{TW1Rm~`;fE*T=c0`@?O=lpGQ1@dY$~QWfqNckHszD<(b$@RMbgEe zQfVbfq+cZ#r2nIZiGf+98cgMILzRM&l_iuN!s($NT!P1&ows=j;hAp@7X_dM$eC4* zXvWrq4M>_00CU?JR>+HkvS;OLm5y0com%2G<8Up-hNq;~p%~*r3u+jpmB=+U9+M2h zRo$fr#YCy5JLc&Hu95MGp??m7G@}N=Ucdse9jib?7E5G&}^QHbvdrDK}i`WtYrEbs%)gTwSlnW zy7__}Q1D^!!3lT4FM;AQ?4w(KAOtUqt`bKtSK(T#uB8w!iI%XyGLY>`TOnNV$yFpI z!w%fd3I80rwEhaPw*q5y1ZWg*`zOZr?whX6HG>@Tx5AlBFv1r^wKGXR=%B=i8(U}8 z&_ef|#>+dzASh90#mw{7uW>nZ)jn4U$8-xH%_xk!*49@Jk4pIU%V{hVOdWMNQ^!p< zu*sOGFrPNof~8aON2Ezp=c%yTf$)By}IbtHp|CZ)OC z<(riIS|!nj<6E@FVfXOE4>UN$!@E%!$j1gqBvHGiNmS~CZZOR7yKyeqo&X9v$W82Z zpMtG9pMN&<%rK<5qWv(TladC@mv_CL=JyKvPLZqp2q^>xq>*p*T65I;C1Mi7R@ zf&at(O1_{(4p4M}7bL-XWq^aEZs3F39jIgVq1#-FfxQA~;u*rw9yOlf3{8Ayc_K+z z1wdvdk|eEhW^=}>wt_R3?xkRRAEh!pcgn!WuFJ&ff?2m)EnL|4m@;9^QIEV$GN71 zG{_x9C7QWHE`wVc72PsQLCZHXp%F;1fHps|H6&bt3{8N-46M)uPE>&mO#iS#K9Lav zbB56-v$Cg66evAo-NZZre3V+4^$-xODMUewl^RM|H`EOYR*D2m-m2P)W;7EPN@#^^ zs`m#E93Uq^YhPBgqTV7~4Go$i0z)94(Abbfv;1-j8mhJ*w+77Kl1)R=%>`?JRw_$@073o%)$SVAr!+w;f5fd`rwqi(sm_aS+2frOq$H^6|x1q0Mb5{4WWX=GsvB9Ms= z4n?3}1~{G|f(Wz8#Rmq{g_j-yHqHp%3R-d(rI+3<^uUin(x?%UN4Ci!7HD|@f*23* zu#}WiFo>g>4umLUfCz#XrkXp7hoWfLfmdBr>(x-;Z}7P(X?@#)s6_~3+;E$oQFc&K z1Cj{|Xas_e#ugz80Z`$W35sgyl(&)pDM1b}*r4gEq(wUEuE==_7XTZqQQHI^3@bqj zZH=mInK%jZ0%H`R_1&~xibgHC`iK^#~EmV zGDJo1yCaHElZG&m-HH^P*5VTX1uWh!^QBWcH4eT027?&{<)<6 zP551aS?yQJj$Ec~z_0c||sIcF48FE%lc zG~4LIJ(`~q16()O91!7A-0#`EJ*A);zO3LZ5+4i5*C*>_q!J*I0oxuBgkGpkX)tkL z`TP>Bbj>eNd%2&BNV2#69SLKp%Z}|_kN{7KFF67b6RQwFht(`l2L~g8^Xjs~!U;`v zILaQN>?buy`Obqlt4iqqIH$4@fj~tkMBeN+_A#YduMBHwTPNVerPoXagKRM1vbwMr zAK)(wU<@M_I;g)gnlW4s+M*au#D+G4<^vBX9_j)V!cNox4(W@510N8R5Zz>U{reLR z(*>0ch%PH4kio6AL`EQLsBR%V+?XttMDm3YUW$|AO+au3DxNHmwcC@g5LG8B^vj2i zEK-`5V>yV4aszdV<@h9Kqc7Bp2Qpcp3a-!#4*}A9BsmxFD%3GFG4hA0luv28;J<+# zNYJ@BF)aS6su?^t8Aw%N-khh z0`z?VF&HCa3P)1^#8tW`6LhKO1`mi#bMo(f8|+z(-1!tsVy6#3lwI_)vrjALFmD+l zQRdXhx-%M7kdXrv^)iDjM+gvp)EX3_=;%*2!fKeb9O6J1X3+RZFr_*(R@WACQWXwV zr4t+^99!9!9vC%^C}*?Bb-kW^iu(~6oA$1101x7N~JCpNiYrOQ%%TF zcnY+JK&6gvD%Y(XXh#i1XjxLfdK?sbQk_l87YQv^$rPO>q-njOD|=`zrR3+XGo@=? z%}Sas=HLh$ZI2x1cf~JOwMCV!3R}O|g->=>vBZ&UJWHcHAE03g6p9Nh8CoiorqxB6 z9V|w>Iaja$g7zdbtriq&C4)oCah4E^?Q5wi)QSp^qa3vDZBz2jLyANWwK8TysPfx} zR%*1vZRSYBN-W$di>AwkjA$wQogp*_31jeL35~*6X&Nd?!_7z`=WBrhZnmY6oGk#< zLI~xCw{=v}jA{V~*B)FCnDRW~ROYMS%lfB+=dxNlAB;OcH3Gc<9S#bc84?+oKnA@{ zqY>rePDB;byYc;3gQjJ*CMi^~YJC8PGYpyTiOMnuOYMM9m>lmN&%r>3=S6>mRQmdf zgeLLmZJ&nV0NnryNKnEWY>4C&@Kk*4Y;uZox?%x2_liIXGmS&*SG)qV${dNN)U>?i z+>~Jd$k-8X@Mb*b$XqQ@O0Yo?;J9PZ6fd?DZnK-=j8_z^$iH>QEpbPZmkl)fYH`7G zzKSg98l{Y|6ut9{>MQ0%_lj#jwh$aLcgHM=ZjNK)Zl&*=Y2zZO)1G$NyGrKS0HGiV zUc}anV)-|Qw6?*4Wi^eQ`?m(bI@XH*8N1}X0~@I4N5_I6FHj9!Hdp%6I&3vUkBw{( z&5^4md~ytu0PO~#^kQUvfy}JE>MmnpaC~^!q|x~dc>Yzo!dScaBqMO zonm1VbxR50HnKOO7FijE2#pH$RSYN9Xu~(VET*p;twLMx#M68IRkFxO?vnF>FkzVg z+CdD2^&e0|rFi)bGG+m5Lw9FvQ7QFV2||wO|L)Vqcpi1kJ|t4Q2r#HX)dS73-C5e= zv{fglH_2=IFrXvI1T>(*5CrAg)tYo&s@4(*u!}BCJDuJvxUjv&8{<_S3<5uv_Ey^q z_JPNj&uDe2+4%{`0)f2eiKaAylu`oBY(!uop!>I%F81j**5+srUhv?xb~`)%>Uvi1 zdaYR9s2~3B-kcodlO7VvS01cH|4R(^ zBoLuCIUqj{9)1I4;UKOlcyjpF8hze(sLYa-0Q@(fysv*9K%OUiRs>I(l0rzp7f1mm zGJpiwq6D{cYg!NlN}wDwFm&eeclOtN#I|pQr)$3V0a5jTZ6|>Ka|AS?Do9W@P$UA6 z6)J*qYbXFkcq4<11yLD@65Ycuq{IVy!2<;LYh{IWaRxX_0A+rbf_+heAJBpZ5`!~P z2JMl4nUZ~nHhnxN9E*l1L!bjnL_G)+X~aRv~EpVu`jg>Vr6(gS6{aBL_C zA7BQVK?FbG87T08CXhm?1P8!;8t)E1WDkFelj8waRXu?8DfBI=C_Dhvl6RO5Xcca&$x<=7#Ls$ zKdOijptOzI2xEu0bw;Ky-%(aRW^q;(D93kxcmf(Ff>07LO?7g90B9c7NG_b#ND{GA z(%;A#gvnDK~slEJ72Jo2NwhwOz9nIs9Rmf61N)fSBpIc>yY*>lqX`Ws#X-ffk7^ z@n$UyrbaS3I^{u?WcMh6>6_JYpc_e^np1@>p`M6|jYoNrq?31^(lSs$Yk37p4t1Lr z8bWABDrh#2W5g0a`JT8zpe=Dz2kHkK79@0*5<>VYLNJwxXpbs#W-pd|nTe!#c$O$N zb~y)F#d#KD*$B8-px42ZU|6DFWp&DeRk}q(etCSBbB&srqBZI?=@=U(^tPQu2hRpqEUDqm^AqX}oH$Elbn8mW)k1}65Ypt_gR zIjSuRllbLjIyhkbd8E4WrJ=AA^G2F?3ZSrRnys2#Dv<`BIzUGnGef1H0;Fz|XK8}u zVB2Xfhx%9OnXIbGanA~?-dIbBIi9!`qXnd*c(O_%1#@=AZuqH?d$$1C<)3Nbp36$7 z$m*;F3!-Nca%oau-KDTHiLF9tul~}o1h-Z-*;IeZs;lU#IVzI(p{~d&AwAlzTM#V< zlv(&%tlY7!qD79ubO&JpCW`F}?%J&u@k%_p<9CRzOjx6xR) zGue81=}%qvwYynJ5k|QZ*06&Rsv!Y_fD2rtvIl>PT=He6hB_)_XPNyuV%cd(FVtf^Rox~StrTVp_BtLWWdPwBCT9$3tLAs^unwC4fOIe3`wgXfmyFTl1ELx~Hxw@)5 zV9G1GZ`LGJ1$TELOGKMG634chdvm$}+K6XK72^g3U~s1S=Q2;20|{r=9DxGOzhH z6NA4PoWU1-p^6A!XGVr`Hm`hnL+*0yv&@iNc&X44%aoO9GSMvpl5MWaIuLhw*ylKzx50|HVkjC);Ks~M(k;9Mlw8I2 z^-=&FE6=pNUdFVM83HB$^2gl^%rG6o_DReSy~lKX1SS2*C=G6f5}6of%X$pW63w4f zqDUYn8XF9yAk91Dyut4r$2Snv=?sP33C6*EkueHk^I2hI`?YSF12TNe7Av$*Rn4tb zB_ACE%3RO}eZEH^v1SXzY~9up4A1e?0E9QR#fsC$dcUVCVw_C9NnF?Ii~`nH!aMz< zkS*57EXf*NKFO;)F>nD>fFwD?K1_O=E*h>5y;2hBnYJEQl&`?6d`|H1A zJv6)ATa-Q6am~>vJC#Wt!TTB#OK{q#oxTmM)?6jTU(MQO?Y)}oZ#J#mdR;iAJb7u(!zYC%JTV=dqj`3p4xEdV|J(c)_|)EQ2TZP142-K?F{{N3LPx8QSLyIW2~P=16tPE}n68Ugylo=n@*< zVrS+Z)&oBMKi*n)`c3GcWGwSWdaR-cNeXNpMj>(j=pvMx*JI>jtK%ZHyo|a|N=@jF zR%#QP=iq(oN1b&uph2N7NW31-Fdo|~hs=Y{oYk)AIM5tN{^Uap>bR~Hr~2E^*C|Ck zd{GnWZGd-jnY;(S=?*z+h~4H9-H-}SK{T)wm%c`rCFuJOTV|fT?XK=pd2UZSv73Hi zSmzOgOdAFs&3Wh113hZ{7i<7t<_2f*f37BPfRqT|>DjF&T{HyOvr2aC)g{j=&S`?< zv_<{@P9jPQhn^-DULH=ooaAlg?#=0aBC$xYy&{vg^ck3pZ~gMOD(f5p3P?U}CiIKSw)vNK4} z+yx`LXG!S{-y+?P^`@>_Y|rX$Z}GPn;~Kz)&GBU?Lg8bNV=F%1JA47-#*|i{<$Z5a zYrpe?AMa@|FmGk0ZeX3vL>B_humJvaG&1u#X2f^vXy$(IQSKVXE-Q*0tOJ5r3xMjh zf5tmAjI|=(`Th3{s_Y~WXj>QIXCM0?{@7Q&ckl`JoVoQPq!*WN`obSfwepJ?3d)=R z7zAAI-WaaAdaU{VOv^zY{pg?c7O)iJkx{QDBItQKK5XxS@m03`Y|}#gJ9& z%%l{-V)2pb2AmKjZZ>5R668|@aUTlZ0C7VVxhLbQ!E%x8kQ)HXb_^R7Db$fz{TB9H z6YkfgQY9n)&^Cij!U{mB6>0hF;-5ax=0Guog9p7}E3A%yP@oH=V-uV)L3*wKPs~+q zB-zQDv0U^9aE4LQpI->_USNtD2T0VL;BZ3ynY2 zh)ZY#je3YpzU?SfusHiH1Z_n9j(SciuR2QWK=d%$P`1zDBkv%zOmrc+7OOj9#q^|u zDzN)hf^8)Wd}cafJ9Vf`N)4_@Lp*l|memF|?-wG8OtRLJn8jDKH|sz_T?y_Y5mg4zdb!%Kv6u$jj=4Oq9<`gKU7+M=xtI%^q__ zV7WKk@by<)MP&4af?^UCIAlQ`RMtsRC6!7L5Zw&XPqk7t(M%G=u0cp~{g78ottw4P zSC8`HTrr}pHdOqabyq5*hFlfXYR61*O9LEyXgqGe+|jsidF^u}(r&10RVKGG^VmJv zolnqHsXTa9N40!a;e`v+mtT&x-8kS=4d$tbqLk9|v;-}NHOvR8RkVgwPn!%v8@Wtj z%YOG*Qe)K0>sZ?a8q}59l6W}cPI*lpLC0wiUHRItZl0Aw=O7OMF=-ZLcKXFz`RkHi zJW2BT=bk2DR94Pzh9igfCUP6=x8ZL0RD98V*6Mei#qltp*^+y{>&_#aK!a`!xFRVu zvZ2!;4F~P(da>}5M+hUf9B&jE1lK>eFTSI5ggxJ{?-u+uJx9XR!@5*}FP;SICwBz2 z@v1SOOaLhQ(Bf>iV)V4!nRr)Oy>89R*t*8cQ~j#Zft7OS-(=^J>bx;ONRBFWX9{}J zL3c{cgn!dO53o@WAA(>lDn2D4m?uo;MX851;etK#3gkr2%q<&3^c6O90>p9qj2YdwnP!z9N_Zu)f9aZw0Je2v-ol!11a@ zG5~@Vu3&{Cw2gZTw43!@hN>^UV1xVPAOL6RzYhUrVnJ-u`OL?q?San$9#W!VkZ_1d zL@|noKmsoqXv7-E4~G@RT?F$qvuN#5gWdb!5`S1k0yeRE>sw;Qh?9g{*uf50pragb zAqFdMXmjrxAC}Fg~LvEx7-AZ68BjC6m70;0ip+XoUAi$ z5ItCxtLcsf>})^}A8O1p{Z1vj>jIlbLqlgSZC^*!r3EM_wFq2+43VeliBTA0ZXic& z{$i4HOse-ZRxCI9PDC(Eiw}7!$Z-lSjb$8SX^_gM7|clkG0+en`qG@InzESnb4~^T zI!8%v^`ON16~oda1{2so2?l!KDzCH0*U&WokPiqX|14y}GOi5;Ox^5gh;W0L7|Dx4 zb7Nj7bioP6;1g1;LmlM!31hWNV@6eD2Ycs{ojOp17Dc2FP0NNIK*30GFu@LxN>&I2 z7mZ}hkYc8reMW6dXbkM?Y%dU+yML!p2~hzx*s1 z6-vps)X8?ASv-+hJvrXB`Tzxs3xN#?3%t)zW>y#2AZ05nU<^AJnkc4k%8-{+x=`-6 zxI^DhIcchsYIu3-RS*o6DMR(W>5J3<3S;&T;9y6nOu{8)pRM@I+#Fw7kG1QoLgE!< zA!|l#h8-1E5$rn^Q)hoquB>ls$~~G^xtK@9a?T7lBM*riv%IDC~z));(I9jpa8KZ zzyXW32Wn@wQjrp@2_D<)gUjSuttiF~pKG@P9Ta0Q42?7Lk*Ml46 zLVwAA^m=EVPtyQuCzj?3^$NY#(vA(-kR!6LexO+11TVo$UXcypumvrUM%osxDWC(L zscV0z3rWI&2sk_9TxP%oLvZ*1TJT!0Nnk)&;w~Dahizd%WxEhylF6~)XSNT>U<(&8 zu?FW?lQ17<-C#iH1b#noJ9< zAhrnrvD&=wcb=J9G$v{U<2r-(!~o?eXebGK;B)064#a5`6OD7OV^~*YkYU!jkcd(f zBi8^(PR4Qp-2TOpXGXEAmO)FVeuSeMS;RjOuE9R7V4CMO@LnJHuESmtk8TRa?kkLn zli;1ekie&h8}QrNSN8W^N(o3Ua1Zc40~UNo37Ss&k5B*#L<=Zi;sQ%4q(r7 z8I0|$N99GhQt_{Cax>|2K@tXV;MMv3`^t|1r6g7Etz1i#;)Z|pcW{4lhVE%47y=PS z9Fqs*wTrqu@tc{W2?8K_JsVrUKx3Jw0=uk}s?uASm>`XDQMwOFGk=q-0K~npu(2|; zp`X$y1OFv#N+e-s>&sE08oaJP8Dx9QiCU zAdNRXpES!p?VC2$={~L_3F`AgIr}p(tGw~4HX{@Q%dj^ml*9lU0(-J2xOqe2xI!Kn zlom@eKui`tk(MF!Glt@#R~bC`!>bfBJY+IN^iVZ-Qx^;*sW_Crc^acXdqEGhLjr7_ z!cj&LiA0paF)GBxa$~^fgD_MoFr6czR74F*lfH=wuMS$hEEzCt6bqb-HTGLZYgDgG z!$!<%v?6(c%_<*MT$bB#Fg{qsJ`BMG6CR`s!{uwj#&bB$ftW>tzD!{?B=`XxkfGA~ zm{EKT+uNZ3JF~cXY(})9mWjN$3@el$gcVYPtZDoR6)QvWQAe4nyQZnaTw|FMuqP!* z0vv!hM<7IN6Eq0?NRS-K=rE7$3OQvV5Dv>opB%JwBsqfcKT4~+wJa}MvMqJ8EcBTyNy=zHIV5tWOJ-vddb(QGlJlN?`R1lAOj~L10aBjxI(fG zJGAgHF@j^&Uni|6uQiqEgf`%Cb*v&ZT&D~@I zAdt-ezq5}NAcPi(winYzed3r*3{1#i!^ecQPy9?#y11Z=0=hZ^y39@Axl*GKs`m;-ski&uNaUL?^PG|@6sK$=Lxl^h%Y zHO;s6Py?Feg#5fx{G7@6(MKXkER%CKXFE0`Js$Ohr#5B514ShRWk~XR43a?sB-jKx zom1bm4XIj|rZkOo5zP=CMrDkcvCOQG8&pkQjhi#mHfqq5^S32%R7ic)BmghsY0-ix zKayz~>`}>cG`l7h(1u~W=kc5f+)sj}HMvNrvN(fOwNhjNPaE}3BnYtS7!Kk}f^*{u zFy*QBY%UH>(z&sg)+9UtKrC&AJGua^Auxk0WdbWu);Vof#&QVh$&B4PHuO4^Ta;2I z3=6xOLUA>;G8Mxd=oAlV4=8WuK$AjMJ)QtQAZbTkIaHq@7$4Bg{3HV==mZ&H0*1v;sY_4U2_5}u znTd6vI4PwlnUxuoFVQjq&Om~Ok{`}^(q77n|MOA8jHc#<1OMZIV_nux00knbS!O*s z9#vVh8K#TORL_YLfdjbNxRINs$*jRbHJ|~Lgbue{u?8r(sExmG``43mS?-JjGMIub z@BOS^hJ&^vInSL<^o$I>a4nBUHpt)BuH1kMZlKW8`m=%r6~b1 z(k;g=TYH7Jd9on2FbXP&+8&+Trw!Ku*fi0FHltDkAn050Ojj~6gQ+`5p4j#Fj%4-D`gtMw~Z^RlgsTaf+aY&&k|0ex!oZOB^-er z)I^NPZM#OfSB)emMN}@)8BpFB1e7fV{?mw^=(_euL@e~+WBMciAk3g+YhhZ2IBQWB zd$nNw7C-!sJpy$}7Gv0=?2<7i|q{K5*R<1^LP@(=?J=_*~_ zgSax19Qad+;#7>gzZh7>0yeT7Fy2$-EAh1viHe8??t?e+C0JfA=PeEJ$XA4WxdbFL z)Z*E%@H`MmM3eFkN3p&OGGN%?M;)SIC_uh;RSt|LRcY=Xl%w6D{FJk!#?0}ZoFFl{ zq-HjY$ry&N3qYy})&iIrJ1uk*z|hM!y60%FV|-S)B*=;X7j-Vi_k@D-!cd z%u{xO;Y(8*py;a`Vh$+aEtu$kJqurk>6j)nk%_Iy*+FYoQtMmOn`z&OJc3iM9S)#9 z&-J&uo2Mk%VYlLf0;XX!Wh-7ji4Z{R_ZqDgBr#jo>ZMe#7$`0_acR9dNm_NKH`YqL zm_ug}$0%gp!oJcFgEzy{s0-YzlP)7iElpRkduUwW^b36N!xN9zxoj zZ|Oz~1|RWbnl!**LlFV6vKZZw#ls87@C1iOH~k~{Rzf46V*MQxXcI_(g^5kJ=k#{Q z#uo4)Z|tLFZ0_^SNWpR*`#H_-w-1PLUEOB?7Z>tKMo=mCj}z+sy%*5uUVh&bKlLBz5X2HFdYP^ExR?)I3ko1D&RvZ@AGvXWB zUUWu3WKK7kJQqrQ?6<+`nmJqZTds38zjK(DJyu`z>h|orxu0iI+%(_UbpiBSPbXge zbSp8;pA2@b5pGjO%ZFxC@MG~;zhzz@?`uo&H|-@y&zA=KLk}ukckI_l-pXzOgBcA{#_7$f6Q0Pa1Fo4d6|`*Z z^m&&cv!`;A$BIyKkK02&003qGlq9N%XY^ZK7=6O8fTwf_og3qa>x}jzZnyo|kMztx z(WvrDFRSh7-E}X{_+0n$FGTG$eSX2L@!^j&HwXCZKcn{K{LX)xohDdBC&Np=udcMh zlz;ahBKe(P{;jVf0*06Bmq%$O+$xBziM0nV5pKJMH=#bi#5B77DsYIJ1|8!;>xpqTL~ z)Qu%4^!xxK012lkw<73*!#8A6OVGc2} z!>wMmd{MrU8+fMRvM<;Fyg{5;aNeLSIaKBFVk%~hk@rTOxrPW0GfDtg>}=ZeRI7|P zAC~Mo@QJo>U(>Grnze1pa_hFvAe%G7m^WzLFrlMF>C?(Z5H_6kFTuwsKI3V2m> zs+Gv0h#r2pQhoGQH6v73f!E&<5uQ<hQan_s;zT*H;3b(1A~xb#N#01JV@-PI zfqiRgwHFE-A6srJKorP1Beb}fsU|D+UhNTCyLC3P2;?rvC8T2ewlQcAj0x{MbT5E0$uH|NZm`Tm7x=9#&FbKlo>Ilcxp=1mnE zHA1x$N^`ib4Nx)6gK)^(N_>oG_?Vgc22!XNqaMG*_s+X;7P5H;ke_Jz)ch4e##ICP z;C2>TT&M#N|Ko}L(hC#||K@zB90MYlqrR&l4K6i*34k^d+;o(}Chm(oe9 zDt4a!j&WMb$o8RTg!K2RCC);=nKVnTjy&P6IGSC+utz(8|Bu3w}W(wfBlW`Ni7uCWHBA3d?N(gRN+c z4L*ZABg0@xlwHVB9+_~XwkSvWDEgJxHHZ?i;@r5K`SaFqD-2~zTh>oV7PN2-d}L`v z(blSQP{I}wy*6B-IOyBXlb3R5Kw8)Fd2`Ns))PW{Fik#078;(ctiaaZbA0VVee zK^P_i93;@J7WVE^i{wZ26I_O@|Gng)SYGJ!m7VGl;NwiU2E~XKQxnt&)wN>qQWoWj zN?>|x;q=prrXrL%u=of=ZESWGf6~Xf=jpxp-nAM-`Cp&Jcu_dcMu3$E_IZ@~!%}Og zC5m)V3S}c;_q1PBLpQGf`Tz%L!32s!D+NsenJ2z5QtWg~te1-MGj(et!HB zPsR5Wl!?7hfxZE~%iwXnu13Y=)X9V6$nX_H4;&%OU!T^iJ8oFa%p5QKdg5@qtIEW6Gk zHX5v@)ipAvd*{Y?GpHsIa%4>>efAiy=fk|#4~Pj81#LW#%kp#HLl43CHrYxa$C9gU(>)JstxxYGp% z2bzg6)mjvKP*8VMfC*+SvJDm&*AeCQHC{>oj>DIK`VHcF*4hb_TqU~!4r#|V)de*j zGGDF&tnIL4EK2QX;`cbdkEv{rXipOj5HEAGo)>sheT?F0qV_XjFwGzi6pr@b6fa3F z@e(Wb!!>G&Y8w@9uzJp0zz)aAi6TG$EOlI}K!4>H3gIV$Nl9mZzp1K5b5%7?EdtGa z(DhYSQ~5Me?-H{)%|kwj5@7Hrt!`=SEa>}o+p=wAGkxB*U0n3S=*c5ife*>X(Aw1% zd9KD1p0ByM_y3^z8UG3b59-{Apsk@E$Je$FYL;R;$!^ZUnUeX+L`oxQj(q(9j1}nB zr_tz9PeX{tCBU6%qR%b}?!#u-gtFjx|Fcm%O{@J}zD}-<$=;=)Bw{c0hDz+Ij1lW} zz5rHV*ALg;IhSfusnv1HmyrLBmQ-E{S2tfdC-w4ei4r-k>fRNsv5M!z zV2f?PynxC}WLbofQqV-vP*@l;wn~7SQ{Tdo+zua?Y0v}pxFwlfI$43|^?1H;#s?AI zR`HUz>-~5W!hk7zTxaqBVRJ@En)gnb0Q;~q`(ap(ZxTOT7Ef2{19$fznr$6G=Y95V z*M^~v=>ZV@M^B94E*!~pw#Qv=r%N_J58``J`lxJoN@x({@~WJs%P1h=*~#a`f_cmC zuQ4L7u7haKZAW}v-{Dr3%ftW4olK{y5Gxv@xrEEXYTe4!8HQ*efhyo4;{>scwTJ9l z{ls(IrK*#V@}hwcN&7x8k##=PV0W)`)U5<}E(8%)0x<`$ccb{g6ma2h zPOp^BA9sW33IQ>67UlTGwII5D`kFz)lCjbIBgM1WfDp zeuz@MWod>5al@k*Skr+NffvyZ6#E1}ciqL$vw_mjY>VyQBWd^OrUopx07U*_QvD9G z!JGM6Uprs6J9GagDB0|%GCBeb2k(7gzQ#a|m9Dj5@|)mUWBnX~djI4s^brVIre8Ni zlnL9ZbKeDN!4pY0OF}CGsdB5w|5Zb=Csb)v-`@Bt@cy_FqA$KrmJ<187(SueFU#|% zMCaYjgGD><_n5$trbd1~Iqhe`4t~tOL+;)rCs3Mh7Zi{gqa;YkE&%`4XbTD@2dnQP zFQ4L=VQ{tguntBJw)XGcLBJ?l>i>uIKmf1)H_}5Ujk$bnKO|^yPqcnnzJQ|PAkr3x z?!~ZE(iq7XPqbE!r@>Vc89fY=P;sOQlzrteG(bj3^fI9UiHa?PDiMf7J&!;HI9z6Q zQ^KkcD1FcgT(oLWJ=364yM(XR6~x11unj=4kKj?83iu*xYfzR%1f@q0cUdaSC_-sP z6N-aqTd?<=6ANw5LF0NP7*El@Gn$zG-y`bE^O7IkMlq^>r`02R9K~q0+!(e9x5DIc zmqrj(T%V+d5Id^!c6WMZR)W39A`k&j$C*7Bi@kfKfUy=99D9swVzURMz-&o{!9#Zv z9_MUYVa6cD<2UU(C0RNz@Gca*Vb~tTa18XF7rLxFanR4b#5ZfiR^;(>(^J>y^Kg9J zcehwY2d)pHh(CtI{%1R!ag3DlN+m8#`y56Q`XyY2FM^oT&7aCJQY{h!V$aB!q5@en z=(W7zDkQud7BsF@t|tr{J-mYjHaQt+dwki2RYq%rc%CYKtB6Z5(M5^5c@&4z6;cay zm%Exmx$kaCNMn}otO;u|NGDe`!K-2kAo6fUyRqgE;wxHJWn^bhN*Ac+QdT8V=Sqvi zUh>>*pfV|>xkpH>Mv+Ga@t~UROa{im6Bb_!I9C~8ZA+Y9F!MY3r8f8ad`6Q*(S!=M~RyL!UGSe8<=U8PYDl}l=@u7$5AET zQn?BZOt{5X_~uV1+uBIoJCRS50=MX*uS9f)7i$Ouxg?2zAM$TfGouVeCx2Db!x-# zI%}@vzp{iP&5Eio%*I@6CRgKB6q48*zFe>^NS{^^et%;cxweo=w(nNkn8`NoA5SO& zTQ@N6=5Y0t$6m#7!nIXrRZA;i9V3t5#65+`5VeBGG?Ji$UXkg&ttFC69QHY*7|L_&xVH0=7*byjVBjT7aL^#qrw`)vdeD`jupr`GWwxo3e_49kCp#rYb}ywhvKZXZ~>&36NV6b1)`(> z%*_0j{RJ=-G<~|B{ldAmm^D-ym5>}L0YpH*z=~%xZ}w~hjwctDo^_7a9si7YM88n? z_eNPWn{Ja3OJQ2@SVRNV95tv(FVdw^%Wo^VH3Bo*p?|5NVk2s| z?Z02uB{0QJq=_On3050&hJpE7G9mv(6(mBdahXR=e|Dh9#AXS(0N(8O=``%8fJrjO zA=(IzBXzJQfAXtt8v-1y9P$#FB;Ifuvvs@ZdZRj&Hr4N=iH2N3Typ2i0p--?dj&B2lqi(1t{@ z-Gs?N^qKBj4c{zct_n4_a@k_a)il-Mkw*?X_k0*28h zR!qHS!^{#jb}3&RuT~jI_W-3r9?Kf{80~7aTQARZy_kCVnhfS!Cb^+yV6fAZ=hz^A zfG1qXO@G?*qg5=d$rh#@=w$i2c*sIUx{xD_4kD4>)8Cht zM3v9ne^O7U7OX13M=mpM+o;TZxh)aOA)k@Mr{>*Y$=8k7Yg=sYJp69svF11Umz0Dz zd%n>u9RK=t3~!#1PH8RWd`woZj<>ZAC$DMJGNSOXozgsMWwV7pC7x}xghPwi5}zbo zs3nvxzukPUtW8|(!Q)e>`RNbINwv>Pqq%sE#{J+5>JJkQvW|B@q&Flsw!NuqcUkiy zmmp<3+>0^#!M|@g_CgW*^%|78kht247TRehEB_jhTP)gMYLp|#j5I47ngC7mAKm^utJ{; zT~~r#Fdl6$a!4cUD*3;XQHHn*Hv=nUv;$l^6LRN3aEXZS-S8}kpUs#66281kCoh#{AD09ub?12X8>3l2X8U3vfR{) zIEQd=>yas~j4pu@m<>MkMrP$(%O7ITRy%Hvux}Zg&y5X~GiSeemhC|D)iRoq37fOW zCsRd@z8p9}d?s=PBsCqqB$pMa2#bDV{XCk5mj8#xqcGl)+0BGKBUAQ@z9X;2_;Lp9 z-OCO6?N>S5qr=_RHvS0}gZB;piW4}CoqFX3%ZV{|9pTU-(n z*n8;j0uZM}7}}ndl0f12f4wD8jTXgLB;m*FoMvDtE4Kx}Bj3Ql#SoJrcxUy~H`MH& zEkNnG7n;X1=Q*BxH;#s)y0j7q(1ab?p+DQOtKpiH;hw7}jCniQm1>XH_QUg2aixn< z6h94x=_M}wgv`KSPg$8w&|HF@>{S&w@Rj6qB8i|EqtQGa)Ad>!mHy(^PJ;jOdT&F(g zNn0Bd-j$|Z5=r&Ju;Y&@&{Q}RDNEN>dl?QpwYa-c`s@6VM&M}q(9#;4EqXJdnU@Zo zmf20dNCHK`X(p&-H9yaI|A>gy3>OWqfliM?ESJN*v#UMYjK(yUHJ57|^+@}a60bu> zV1nB7m~THwS`(OYZDywzB3PRhG3+4XRc^Z~og}Sns_&oZ%I360<6x8(SUB#XBTm(9 zsy-yDB5)oM8;!n$l7T1{i*aH}j{;O)hku~q)P{yaHMKcFoDD8HX$#r<(5z6Db2l_f z>efCIC-2|K9(U6M9z694h{q>m^kQ{`q14?IGdBrg$|>-90NE_k z2GbT;{Re#HJz<|5qaHa z+A?9Pek~J`30yjQk}Bh^-NO<;snFHq$^VbnARR- zsyUSKN*K-On*zEcneGxd>rB5HB5l6|6{)CwzQ_OJPHq|E)}ktu$9=vVR3dd+dW8?6 z4J%ihSGHq|-JvPTQ^RCtYO{Nm+)T2E@am(gn9b?R-)l-g+n^PkblT6-lT5S_cx}QC z3GhhgL+s)FS5U4@5BVPIJ?#$X4y(BTF7(&3;=az585PMTTOBZwR<#l-IEEpjtEjKe zO3aBadI3ggS2@d8Icq~`heDsQ8h=2zt@UuEU5jP6^ZT|48d;GAo;}sgt$wdn*>a1q z0f))im(y6)##-S>Aj<-+UI$})Ip*6S=@+#+1SVFpM!pvj&o@ho;{C+iB34GKwQ|y9 zE91uFamWp8^pN#2o**OH*F4pad_&p9jb5*`^CKk6Jw+*_mR``tR_#JHj3i6eJnE9` zIe3&Huj}il=ppg+4e*89JnhPbdu}nSMs+fNYg7Y6Hf)j7+z?gLt=*U<+u zT)HNo$BXp<%X$kg{n+D9KH|5wHmqmOOb^o9NN3sZ@hI)C~QN zSA@hfo~LrQbYVWkFm-1gNM_2J(TEB=U%J(Gd>03Y$2_5LF`^gDBzW`A2vXPE=vvrP z48ubxIbNJ6!>uZau=h188}vHA@D^IFPRc3h+CaH%N>D-qxOnD83rDUC02ZrW^f7fVwbm=yNP%*LD}@Pr>u5AxNrMpQsww zY)Qf?x00k<&64~0+VaZzsRcixrAA{MT7urpb?ybaVqS|%c=!S?-lX$v?SssHGo4C$I*EMH^jnBb@N?4-S-XY2MW zTTY6}CajlW1*>Cv>F&YTDk*We^zHO+rE)n~KM)`2iTFI_Cw8aUf`mk~LGf@A#TFd& zzrVo#`Rz5t@OIRvyY%C9iFVJUPlsU776qQc_{}R@Z!0|lk4#}2P)987Q;uwD`Q!|I z@uEr}B=%MTP1aM3!@}#`9mmgmvo`E!$olziTlu`*ZKB?L_+zO@n!ZYFPm4R0 zVux*elErCj$FWD#{`@$0YKD&8iHw?v21dnZ0o>n^nK$L*d(iQvyvgF|NhXG=_9I*Q z?Yaay+8(QvwC<_0Vd< z_3U8LyO>qi)88p$nz4l=AihXdn*@y0xw`TVGw(YyL$Z5lbmWG=Cd8 z47=V_9_#1)6A`{t5TB{{ijbTsB4t0QEd@Pj*%+zJyAWNAqX-0VtKoEPEHzW29by-B z?%ck~PTy?3_NZTRkna?EAt;%QN~4~&8uQ<31nE~+9)J0#e;Ob-?j*^~(6nTh@?ME( zoIOjLD~Yc@x6rjZ#O=_UBHLMVY#4A-81qm7DR=AM`_1{_xMesy)>LqbAi?}8Jevf1 zh7Z)xy7~R}3Z6jP2O@f3s#2u+_$x@cK>xJQ^+xB9cE1-q4ciecg?gsb;DUactj*Ql z-%~-$DVWbl!=N-Cab|uIgd$TZNT73|f6$j8LW;|i;+#DRpVr_{nnjKN%a3F1SZXjG zapLB1@OhHf>}h@@x&6HAj43fZ&LKR%Gii|wCoS?3PyNUN{nlTo319!DQA_7(T?D$H zJdhh8p1zLZnIBBrb0dDWw4eOj%_7`nhiaV4A=;!-aQJJvv7v9}BPw=rI3%q}Z%Lu@ zp!Q9?0){3NUwZYD@IV)FBXy|;CX)e#gtv~WX`P;G`1gl8kgkLfgNecYU7e4ER4+Z{D^9H zWm`2Xx{O8EaK!lN_DO1Xc4+@rsJB_>bg0Cp)O5t!Nz>O8o380r z1*LKMk1nq^i=|7%0XrzU#OWLj*U!O6)hChX37`O?wiq|Mr4pTPl*vUg-3RzVm#NV7i{H za?5JFesBM`&ySPEDa>4lALj0qM_c$NZI8dfhF%Qlt5RAb+ozNDKE1Ye5iOGHN@!qI zGpH1+Z=Z}v)J;pHFGYl1Zc?X>kW=kn>|DIE$HQJXy(c`9)Xl$f{}KOKFASUXnS(57 z4}TL*5M+=qq}zQVqjhy~5!k#lkg%z6kG+__AGaNPC|__m``H zD|xm&ChP~Sj)ITqP5w~qxLQx(q@!Kd_B zP2~i_Guay3jAmG|MEsc}-|dkIq4PijI9E6M0RT;Hz@OeipZ1_M)3r$G!3!Ee&p~J$ zVRNyQXz{@*HtvXIu!ca}>~KSy^~F1e+7|4jba6$8`$tjUDA8!?^7{P=9Nhft1)hi> zPcZDG6{y6TWzQB4n4*yr_^)Pi=G0>{XNh-3is_hzCJ=3Vow3w0pOGkDt?;`V0`eyW zbPrMXRkev;x)^9tU`N}L@LlIvvwINhC}3So#MFxOcS;kbWcPm@j!x*xM}rs(BSLK_ zh17BzYYJYVV@x%*NPvp3pQ0mJQCB!{Y3yfOac{)hs=4V_Lk)l{-D1y-)jt!$;4iI| zAox^Qdq$_n(TRs|t&&!oTW{U)Ffdw;Rhlu-!duIy)!$;95lax#VQyaImMdy>skcMEkE1XAV*SMTLk& zoBGizLBW}U948Vv(PmE=)@+n*!-VM7@qgDL(R+b{;~Ln^PO?}-bsVVG|{sLA$_*YSW#za z1qN=QWTr&w)o+kVI%@h-yIG4MV_T3Q`7VscxlxW6No{i>8Y%`nQ)uW484Sv!9g8-^w3efl7^*u z)oysJC6Ss_1jPvsTAU6&F6X$!Mx0N}3K+!Kqa<8xJo_OM&*5N(fAu``CmyVnoyc=OevFR;ELLx7~x3L z7~pdmj7%MwDFqi~VlVNE>WRv&k|%lXWA)=d|5j<^F~gm^gF~E*k_Fm%3rr)M?YoMO z&j)zlaCgQ*Nh$IxgyJ$|BHQ&`!gWNS_DqML@aEUDIv{pIPdLUfaM~m0scaWk&;nT@ zz64hk_2$H^?+-hl_H|-r<){}KS4dg0d6;Dt1+L@165|R>kJ;dy`M^gUCDF5fZO)p; zA%0zyNTE>pCO2oZQk}R9@wz^aLQJnVFo0Z>^x9y?r!bY2?uS8|`ndK&!C0!AzsFnV zC20ZSl}E~kLn&g;7Y32l}#)@bwFvlFo1#m7pDPK6_(b>`+k7!AZsTt|H z06x7;S6HwOw%PVZ<(ljw6rc*^I3dejDNr5)|~= z#e>APK#J4QoZ<&9o0r)ZZ09OM3w1^^w$n(1_*i4Vwp{m;ik&9saQdXZJ;=X65e277 z?Yo2Ej9%5vRgSiW6Wexv{LG{|Wx0vglV-E4k6H}dTU)2fYmYR}z(j+lLZ!Iv4x7g- zKB#rni0IcAuT39&!iPDrUB4pJDU;X%CsX60uC|emi6wjPnrt4^dIm+FNVd@Bj9AhR zU+8n2=UY18^>uZ}T)Yp0_vm0utx=QV-}?OxqZq`aWbbD3o@QCqo2+s)bB&NxL*><} z7;xT=VXb)a6YQfn#T^KYeU!;UIFw!vrygwLBQFFs^fd`Kh)>hlA3bUYpr|ZF2}d6_#&8R})|Kn;8L^4dXx% znCnl=6M4>s8H9wX`zwxB_0!{YX4=9FM4x_Uo_%>MT+bW;VF&{Jo*l%`uL(lrEA>%6 z3YtzU0cK%3rB7OWU3SQCO)D08NO8-d9jV}U!ALJ6?GO%Go(U2k-Yzz(aJS8x)m9nb zXr_3F)mfk5o|zK$gWb=Q;qCZ+2Ijgx<6AX9gc=<)B9pJZ0MYq+B7BHtm`9f`y~ zIJJn#A#J`y$H8cBJcVQOPxqv&=knC2yzM`eo6tX|#dz~a#TWv&rBc+n`4>}Wq)bnM zsV>n8r#p*r_MkOh#ppMhZ<`2iKN;II?@i5{f5!4DCXcg_}y(~b?flK4(;7>GFsurBDkT@8^6V_%<_ zG!wV7X^2M4B#Tbj{o!|p^;3X^aTj0P;EM>q(~VKGAb4Q#{?9*8ySX1>-X8PaGJEf< zf-y+8e+Z!f+cZ8uX)PIgu_PZ^{qi#lbsJP^brzx~ln;vx_)YTbs&s^a%W{7p6%LQP z5b&C+gz%A)4#5QzfE?ZUm{hRUZxi0Mo`Y52HfSA8o?FmId zY3bgtn6gqYAy(hKGlOIrgI+UGLvI3cTv%H}c~*TU;O8&SlY3^BinNx>oMbH|EhdY@ zFt;X40UywXkVbN7_WY}hyby`vRf^TB6ca}d+EB33sY;mF<+^J@>(2zRdP6P3tS#v7 z!FcIn_6TN<7hR&P|fn?2$i-)@)E-1; z58{g+ozE{eC|3Of=6cW~N`(ut?z6tPYFG2>m0uQYZB@STYMnwhvN_7N@uZPMdp_-}$f@hIR7yi{*mh8h4w%c~w9I-jhZO5N#k9kkWk zgE{7HI2F?_E4^LNe4sHe46h` zp;E{5u#boWl1sYx8$vHXqGoF;sPcP>wX|kCruDpZv3o`gg5L*gtV$@lm1{Z1jw3X0 z>y##nE2x~<2*u;)ktq#^(dxpQ3HN&F9s(Bo=$FOg@%#BiP#p;;g^8_p=>%FSf1n65 zxx5k?sorRGaf*nSRdou^f4tdCq|`wvGDODV&7Mr4HlNV`wv(5=D*J2tFLNLrg2DJBPiMEgI2T4$%>K+ZXh3i zbddJ-cK+7S=*eyuQEprp)BukeHO@T;3R9ieV&^Dz6z?>sp;N2-i9$#Y7UXd5V8)S2 z2l`(xOH4qz78R4ffH;??o-}SP)@>1<<#WJ4xL(9*%T@}~a;&UV(o<93%=uJEpf4_+ z)W_ZXul^foOcXLVgPQr0zpUa^udkZ&c%M@yiaYGwSYVH65T-23Nt)}t46$MARBqYv z&j1;VA>U1e8Z*$XXNLB*(Ib_Yx~W%xoBlFn<1FfGtKh;K{M+C~lfjqpT7Wc1=_H^f zZ9Sf!V3F1CDpS2?QF^^9qcZP{!pNuVsx{5zP}rfh z8g{E?DYKsknI z?Ap()w;zTzZBV31W0XGpONxTl@2ITP5X)w$#pPc7TU}Af3K=Ip8fg=Jd0qaR&v~`S zIYFEW`kZ}0oJ!=gC+#LXJl|hqYc!|6|Jt6EXn!fP>4GL}$)ARGSmA`=lhN*`n%W#O zEQRiDA2%{kWX+_B2wf~^$v#XjhuZBsp=t|ObW>*Mj0SP1gqhVW0EEENsIBK@(oRF; zI1@epVI*%27m_V06zWNVxj4OlEQ4I+MD+0AH%^O&Z&T?l=@2ho2}5mci@sH%I_`?O ztpRY`iQjj7j0r|J)ut-!tvk=&sX6UI-m1(Bn#a%<8a62j4u8Z8pg%l{T3K#m-C|X? zZZc2&)E}|4&oq`+Vd)`wa75hsN-T{?9xg3mS6kTf*J?=-l?(&hR8u+%4r~JJcA9hK z6azCGU?PW87$Z<)xSkNURLgw5!S1(?1H#khg>0*ym9nvz%GPo71cjRP>iCBnqpP8X zmV-@s*8IXu-P1dg~^l2F|4aQRosVfydb`z9*bCV-{d!SyrR0vHuPjX@N$=^rPeT=vH$Zua$w=4E{qnH_UM{uzK z?=}qn^Itk>ed_=djQQzp?EoeWY@RB=%m}ff0{_)Tno$!tR&*qJ z)IyN|33_I|HB5Gu)@tk_pEdJ0#mDHf`W;I?Z+qg0puiAYeEPbIVR9(ki^9Lg*eJjv zZ@bA2AI*$<%`l@}wX8J0&c zFGeO?XAlx&4{nmo{y10~dbQtLuj{vBr>ubtJXSsB#r!-kW)XEp?p*De8B~H=9hT80 zpAL<_sTH+m$f(I#ibmWdpWAhIGm*OwtGv@%Y2|F0K19g=6Ti4jl_#@_Se$#?y0>4n zTvJVFsA0a{=g@U-qr-u!P=5@FR#O8hT!KNHT z#pz-yj6D_{^JM)d#^k(r;vaM~6h0J1(Diw2AU6WywxW-8zF}$|&VKA@V0u(jJ8d9b z>h~;4+`!*PipCEL&v)KABg*HyUaxljjGj^dX}>#MA~R*ixs~A{hfyoZ7TM&wzd|!tlBFRYxl4D}l}%+h&K) zTCuJz@g~x6cu>MP{S?aIq99jQxX4Y=PuaQR^IA|j(Ap~#WgEcFnO1Ym{nU@}iii;) z|7Ft2< zeR{$8l~!{zG2}%E58dJg4S-iMN4va<5A2wwHoU-C+hhE3f&9|0)gk%oqsbPZ zL+BUBY~b&%Hf-~b!qn{< z{`hJ0Q4D;qhUib4HXZy;md?NR-W!}empnq6eW>$#1HAF8%|4p{O_ljDQZ4BO#SW9) z0@wGTgXJ{&YJ0qA{+@taJ^At>;W4{MKH~+&4^}V#`5wFDRqlqXv=}5i+AASRSYdp=Eo^KP@yzoR=`efMC|r?DxSxYRCk~j^k1^xN zAv`-;NZQ*V>q;Y&@d=}4sC4bTzcMW%tbiJ$B!68xKS&miYrMgqLsidAd_1Kv zjxNF~~kT>){gC zZ&RmvEhLD%!v|6(MrU(*)3L9BUm{!6<;8!*^9Yz7r!%1v|G}oE)ehi8Kt5@pyuc^b zQ8mW?7a(kwSopK0BtYD&i--_Usk|>qL znE~(%#Q~)L1%seCM7r-kIkB%V8F4@YLIq#FB<|@;7M}4khfidegG@yBxpZ!bb>C=O zkqT)9T3UV2&_i7Ec-=&>?~*;vRF=!~iKU&^7)W0fGHfVyn)JzN3ib65U*uy7*NEJMwm8kC?#n6a45g(8AU_K$C7NTD%fmr9Q zId`=65?gIs%qUP$#aO)f^8t<_m_o;{noSw9L=|@Pmr=L-(!M~BzhwD*-1qQN8k1Zu z`~Ej1Ej)lIWB&k{&Bv*vdW6hTHtV##HA-Kq4O+8lb_geq07Na|y$ztC8nRZ!CpJR4 zQTZUDMnoNYkerWwzx+?pTi=*{k@2Kt!k%s|0EcK>LKbx}_DOTsk7uBInlJDsz|F58 zEK2CR-GQh-zbRvplodG-s}u9MJbOs=&KQdP$`&~sRDMHkNB9r@%zUM$=T=}RdS^!e zV%fBojNylZ#iw|SJ2f=9q`m4vA_qWoFG*NdeGT6&eu2qYf9w=P4;aiT3m2ddVNECU zf32L#wjyDJ>p9V-9*4S_2UF2u0M7P8A8K8aL+J*cs8rxXF`B;Uv#RH1p%M=1oCU9U zazsB?uVz;Bo^xay?)paKRJG>Weug8T7Wb zef~BUZF=O=PID3B8o|+W%w0@n}nfB*H zdOM@e!_~7TSrC1kY`EDZOw#sqhh-l5_E!RtFZ;U?SkQLu3`!yt?54H!p?&V#?o`YC z_nmOyfTF0*L1)eirKa?iyVp+@+h;*GMcGl<@wyfv7E$#G-pNcV3pm0jI`rcn+HoY2ckux=hIr87Ob(3>0rlS z<7DFEw#0-S99o@Ieog#HTCJ$2oGTKJ$9pPJvV%A-a^K`1OW=4RSO=90T&2{=oTaUH zO!2jmj@RK{JlmT++@#Wh#kpZ` znfGDA$uEOg4LsxKkR|OJqe`)Qmz?-NL{Sk?Y7N zmrv=D-T;qx8D*9Ol!sHh=tD*#dmT@bClw;uzcp2AM-%volJ&X1wjUx01N1U}|8v41 zRyU{~xjVuR4DKibq?Fa(K}@bfb8Na8&&>UJR{^ZEwE?pHcO<`}Y-9NwY@N6WkssuF zc60KyIZbW3<7aATJ>)1pr<&YtayG~Q5Pv2}nTfMCTbKLUWrm#N3$t$qc-p|kCE*BC)7 zwtCjOG?ycRZD;;kD1F|rgQt^0P`EL)cF#{wtn+K)*-4hbe&eviqUF1U&)?&` zFQXMC-qcr{?0i1ZwimSiIr~RXG^mZ?r0iOPmDdOPB3{YUBKU(}rMFuxSn#Z)8dBQw zmvv-d+`_BF4%zvhDXee}d5aBta{>*^rqKLfi_{|!VJ>AqOY7d$S z$cF}>c9qxPx5#F++hP?vjO94ADv4xpT}dPtq8_M&pWLrEz7;Q4k#M|Sx3c^?dy^49 z?@k{W`s~+l_YiVDkGJ$|>$?zdg0GSPeT~`-Ft2nZ32cb9z_;mxrAQ5*PF=<_xOUYk zekJj?2QhV6G*e=G?%dbEID|TdHr+$l4;rBl7h|7{9z(H&=ld!ypDu?VE+dP29Bi`XZfUs9S;_3!lyWLK@u>G_+j6w{+W zKJ*vx{>O`*Rb$An9#!Hc9>pq#l-3 z;9%S1R&n*kaWuf`!v%}Cy!`s}W!w!|%{Qz{B}6CPwbLzpVaR~)1*14JH0nlYQ2eEa zl#>>mT!)NI28NRj44-!6Tv*j}F_7Re4^;=E4y#`g<2~Ax60&#GiMV~jp3h*>ZpXb2 zdc9`OAPkm*fyK@!>(ta5yM)9rtS-W^JPj0@DwIB7q+3dh&Jp-oL|bIlN2UA4?!l7{ z5eo?=|7vb}b`7u*K>ueKSa|uxmw-Uoc*EueA$Ony{%Rymi`z+7s7Fj}%q=rTdGL=8 zmp9ldt(nY!GE><19FbO2+T}L;Qfk0kRs|))Nb*4~x|;i1P(wjNK`AJ|`mkUl6O`5_ zZ6R}(GQFNgSDQfsOa-5lcabR+@}!?zkju9~#wd74$W`fclk5G1d8zzc+(VW_f=;j* z8T<%q?e>%$!vuf_Lsxe~x=Q-vAEG1fnbtR~qVRB4j8W|O%-F8%=6II$XcSGh-*!%x z`*Dov{!_*ceWe2O8PVLp%T)DAYalNjG$B(7fb$g3I41K&4H~rr@vc{wU8uG`W@Wrq zwQDR&kOp6>nH_n$g7C+n4 zp5o&={K|-_OJVNGhkJ;*CM0FQaHfMrra+&20n%1(lgSgZdJUD{#C!7@Szp8!4#a1_ zwk&krfIVMJa!&A5*UEn73RZ(d!u;h2@jTX7ixwtan~jhKu_df)?c|UGmA9 z;ytyPnOhOBL3|OuKNEYFmkNZWvciZy|&6U2eP`Z zN-isq)<}$RUnz4-AVbq(KJ*mA*f9hv`CYHejVsM83-mCSWE*Q02KD){pLs}2%}|*j z5wR+GeI*~T#_HZAz94(?{{U@3lE2}ji5Yw_R&>{86lrQ+0>+t|Nq(ILO)>vkk1=Vb zb7!Xm8lrW|rG#pde(IAvf``wLMxF5DG&pwSmjI&$|5!Tnn{_XTl%4`nxOrN0H<+|*=M;W2NGWc40~}ciNqKsc;P=ui1pHL*XZyd6UHYPBx}#fs_XQ zIj$^$e*_z$09&r|NU&E*BDSKJBnYlJB|KY5P#-k`OB!mVdI1&-ZwvpmeZsh`tU<2j zR;7I8W1$Erj<^xD%9VC$rYuxl3Inke^ju}PZLNr*rp8&f$gyA+dgd4#t|4|*re>=+ zZ)^HzJLRxmJ2Lsgsajb{QTtaVc%g0)vpw=p8>fQAh<2-L zb^)+D5C)YSolgmvGzy5CyLr>0~6w=oC~`9S%#?? zEsxu|!wZIF`>4I@tF4Qq1=p!It5gtbV>?g;yKA}I%e`aJj%@!*pM`t0GU>O(YnOip zSsQ1ac{jVjleWSdi#NNKp9^CpKm*-oOv3n^!~Cnk`m219`@t_vCSMH3V@$@yM#OJ`##;yHb(#K$9)XQe+)%QfX9+tMUGs_ zF?`8je7whts6MP9L_jYzqq-A{q5NdYkBi2bT*ifXyIb7K8tenr3%?RN%g80m%mc~~ zgA}7P!)Ri*T{N=`y0(;ZlCz8klI+S&fQsB|V-WnNq8g{+Yh2r=lHDmvtV>)~*KM@t zt&58nt!T`5jLck|B63PwIkG5c@Wg*irN8n#^l}4FF;8b)CJ#Ebz|5I~%*c)0!$_dT z$E?4we8#G5!m8}dI>nb}Rbx&!yzPrI-+ z5W6(yOY)HvD3D+0TvV_dbjHOh`r6Ihj5IMYxf%bB%tb(|GsB$^jFoGL(D{1M^I;t; zC{ND>(JTF%s7k%D95M9FOJyL=t*isk{D@8B)8ktir(3>19g#!D8%Jb6XiQYgoEu85 z)i&4$81%(fd;_>!(;2+SX5G=>rOtSyI)XsVX7rfYv{R5fXnXt{KO7f%yjMUt{ zPwQ%-WW@r4h|j(~%I+o7^P6OlDJ=kkE{(6tmm~gFBn(jvLIj(ETY5cpp#0G{TjW~)#xZ?xz+6#j%(4adpg1lX zO3;2`&EED%*h8LIPlDm7D&iA4y}C;uR_%(y>fdg<6K8iosG@jX>&TJr zh`s?&+3W9a%WigVPNB;WJ?ykgKK&$J`o7;DfPg7UQNi=r-TmykP8)>hcpUCrMP2TU zp6BuW@DM+!^QrP0lW4UW@aq4?$c&9L2+M>6yw(0J6ovY{UDBE3zy?LvLBV|H%higtB+QUe7J zi_MPUXAY>u(|sQ==38UrGiXT>&hmCc-Dcw#4kXsUJv6{4aoNHtV%A-J6*hb zvU5@&+cu7prby18-&^1c=z}C|l78(-zv@;@`mDb=3x4U{G9PI_@*wTz*~vk^Su=3Z zcuL^uqhRrkU;3yo#A5${S!d7A+lO%I%jI9ifJq<*_g5d(xrY0`5xkQ9IbPX7Ov^R8 z>a+XX?XNeD_u5ns5EdX<0HLP>fdvi}CS=$!1Q8-Co-CA*fP=sU84Y-#0i#C%jVl^v zAvw}v2$Tl|gf!W*1Im;G8_d*L5T;F>D_t@`z|aE~pBfIG%M(FYZCfT(kUy6vCHp5MvHcP-&fbfHX zkP_8q7)w}dT&Y}cAhCf$1&E$eDNG*9mcfR)G9w4QiZE>D2WM|^EG$y3X_F`3>O_2U zwN?&r+~&<`SB?MS!>L_>&YhOT!yz@)q|o3&Fjd|GO3*Ehx~GjBIgX>=y}2vnACmhz zNBp|COS+jg&&HdVZ$aGO2dr=HJ2v5h>{)cKN?EPpTW%sNqB;QTyly8o=_eHS*+pa>^KMJLci`_t6^3OX2NX=8!P=7Ib?q-^o2_lGXlVl=OfC)NaYuO1 zTr^#R3wFWQabb$V+>S6U6;1)`jA4jm4@}VFKm)Bdqan48O4r%mt2Zt^G&FcuUd6IZ z)5&J5(@1l@gc#jfsg&2Ji!sbtV=+Uz@jruw^|(9ZzBRf9s>EFxNLjs-U=2jMoq4lB z3>yF0sAap%cW2_FK0wHQuO6>Mmd9=R=z{AjRJ*4q?(ST69q0WSMZNlq^_(lb|AnvD}2RCkY} z3%J>4>P`iG>)f%&SGL%x-*#$IqgNYwp<`562;iSGUc%;4)OymeP0c=IoepO8jrC1` z-r^s}2T|z#A%a?{!^}kr2#Z7{P)|5}(cbQ-J!w%v3w^K%tcJ2Hu??+z{CnO1gq8m; zfmzO0!ysWWnxPC^kV0@0WF7?Phm#gaP!3h-gQEo39`c2+a3cfRj9!AJfek|#+^~Wu zM8S<@6hjr7m>xs;;HDql?S(0Opi?Gz#Tu@zZZ}-nPj<*T=JijEUsOoi#@Crtsj5S- z*oG1QV24P=F%o|;LNJ!W#9+CocqPl7(x_lReWePEG#s2%0@kH2`b&`q2xAV%m?*f_ z>}PHuMKRD22s_jP654>o8v`)|CE~F|p5vnwX~Q_cAWM~403=>wNJuO`ph3l2ptd%M zE+SCDVGzI^8DRq&Sv6{s%V@?S>>!FjBuss&v(JlMkGX$2YO~hq<|1bB($;5 zeztIVn>(l;yR{n%PGAeL^rqHU!XKruVPQ4E6BM=pgEc5cQ5N-O4u7Z>RuqE?cJPEq zo%#zvcp?%^Kxru_1H~}{3w7$@Lm)dqf(ce=hA(I-LKotJ9qd3LYLG!&IWjS>Kw$&y zT4?Do8koO1&X6e@VAwLGiePZ!n1HBfJ+qOAl5#^Cx6~sS=XMir$uR$HgzT4D(xR zD^p#S)vPFx4QC~00saJsmK>woXq^L2nWTr5Qaqs*SSwFJK%x$IutF%&`I(6Z53)2d z=oKp`-0;1GvnW7|8X>SyB(c+fw)CK)aJPnj*1{Oi_(U8j@n1NKB8e*eE?ZFW0~oj~ zjTw|5ZeCDcf(ig?>vS&34rN*zI0nAT(kSg7*%M?*(}7uXR8o_{1Wd;94@?+v9>3TF zHL+m9n=#LHPc>Ep5VW8@qYS|`r?mHG%CVzkn};nZV(b~_i4*@JW-x>S4I@B97$`JF zQ6&(Oc1h=l=k#lQfdwBN&y;nY?2<;531ZB2!4C7|t-EGHM~pHsra& z>@9%_cyI(TI=7Wz4r@Wfy1!8Q*vd6!u9{c%!23$~%`T=SEk+>U3X_FROp<`5$_L3W z-^S1n&~XMCmFY!WSSD*ClNul`(8}7i$TM^Ge4R@JC7`5DpWfo{;`0~t8d?h#qmmiV z{LRr-int;$LvUX0wM6AsP6QO$tQT28A^S2XZ~y>JBaBfqPCC_VNtKQ~r6C>ovz;F9 zWd~3FHzBm{u5H0!e78y#XAR=Pg{EwhjGa|fzpsmIvY-DAY>)&ZoW<2x;vA~m{m52( zXx$Y~a5-0r03Q2r!kAja0k*(`Z?E#*7d!ixgObVZzvu>ocT(k>YQ+B4`QwxGLr z5HnZX+7@*|lVUE1d0+3>TF5d3#9YCLeKX(*5rJp>Be$;TU-&< zl+y+Ym_Y+{zy+(b04)=L!ed+zV#PDw@fn}DTDAXfB(jc;Xx-`q3Nl=PTo^Q0;x-UN zb0a_5l)(fzP{Ia|a4;Ld!Qj;gx(zlDhrCWa@ebELqtYhpp!YD)0aGb__}->N6A#gA znb7tabOeg2UJ6Z7j^B>2^W)hTuUop}C_nR492^p(7$}kGu%`S;jrNlPgzE^&nz;F! zm;1_#9S{SpLyjW@obVf;%UL`t3p=rEJe2tkqk@Ran~KA;7t~@GE;xdox-DLt9=-vK z9w4)=%9Z`IkODEmOe-GTBcB6|8hQJ$;ApEB#H&SWzYLk2i8(qayg})?!Uf1c@ma2m zS~w1KK<9cX3;Z{5>mTD|65wNr_OY;`3xfY5(18S?A&0s*N0SRQ;Xjc}KrynPFRVkK z;l24{z7u?!3~;MFY%Z`95rPN;BESI|Ff=fE9=dCZE+fFpVVb_O!LF+;v!M_Xx*%J# zIW+V@0^q?!96HJ(DAj4aUPCCx(nA1bzgHX#`anQn5=2J=fsWWU|F}GXi4Pc%1L>d> zNTj`)m_)4M!mlH;smR1bLJ)x)h~V->rm>uW^OUqwyHeD~uxKIE`zg#o0aXmaRuD*~n&mzHUOYD{;nWG!9d9wa0qNdPAiIB)IDXGGBBYm0XW)Y6O)quMeY$ zP}xE@95f2Mkb>N~5VA*K(?YpH#_x);8(6oZ>_(J;f&}XbF35nEWFIq&3`N_Ccl5(w z0u(wdEifE0MO-VXG@7sLwH!bK9gx1s;SN)TxIJnfQo@LX1jV(qNYau^Q@a$EX*0;O z#o&T9W5gKc0-{>0yTVL?H8BhBi@!p(RLF3FHKsrfH1fZkxo$wpXfLuHd(4~l6&k5QHm|Or{488HJi63k!>p2h% zO3j>k#sw@(%}W|t^u`jX0vJdFCD;Kmdx3ZxPUWOe4tmIL38?)PL*>a&cxgIz@vOaD zf-(3|xZ4ZnYo!4|%Xb+hIS?M3S-z%(P*qb8Q+Z6+@kS6fDJ^@VBDq>y+E#007Yv{7ljg$+)8^y$r)uZ?zvGcNH`Brf*);yFbLBR zWr8r6!6|40BTy>~OwRv05eTMGK3K#!GK|s}^&uGrMU9L~&Y?USm;o^0Q8E3~H~>-< z_)#Djgis8bt`Pte08AQsrM;xFZ>c?Q9JlHr$77t(IK9$@6iYB+m$MK9KpoUL5Y$o) z(;N8FC16HRjigU8fi&{G3p~P+lg}zWGekX))O5(_1_Q zAYHw7BGH$i0_pGweiO(`gp^yXL^`#@etA4A#Zzj<%nk4Xr~3h9J=RkNgDC(48ejq= z&`!c!jgIR!1KqV9o6-Y38(O>7NOcjoa0_UQ(_D>5VksUW5e-=af^#+3gpC6x$N?wd z1QQ`1{OZlo@Tvb8gVXNNlp(dYJOr&wMI{W?Lli&*POP0xxf2d>*iGPsa#h$rwSg(X z0b8*G4YXlmI2#PGTiwp~FbuYEygU@mRG{l04eL4VSso+_F${ReUcuA3 zmmO7OWr86H1Js)}MST<+Tnu`}Sh*+`NvftJz_p1=quXO7nauz{n+b%IN)SMl@(d`% zd>7+;2)LxhnUN^R7(5_d*p@w29bJOOnauuaNF|lmMIGCs`U-YYgN8XlEY2}etMI@R(;P^aFkK=j)?>8->P=lE zn7(VGk^U>u5D~I+-XH@X%vr z0ySWQ|4mpkpuvP;QDLK?3IrZhVqnjG%rNO-fL*;t3`}pztsQ7z)1U!k1p+1@1P(Ca zz%|vgy-!Ts5}}AUIb2+Vs<-pHEu56i>lxi^l8Pa~zjPe3?s0(~INBWz)FB219w5^r z1_S@BJ=#_+U{;g@J`lEjdEy83m@3Xz`$S8}ii)XQUmYH@-uRTEP}x!?118`DI^cpL zm|kPe%wJ3&i4Zk82CJPFH&(^t711A1oLW=sMLe_%(~SZZ@KP`}WFYu~C9ncyl^nWr z*89K$ZjzyxI!3#owO@6`JJ!Ph@CtG2RF_zSKdxmTV6Tj_0scJ%Fztc=1=1o=gQ0C! zl@fsI_?8x4sIlrM^+}$N-PaZU*48M?9tf}cER~+xJ8@Qv|Gcmhhyf%30x~FqDJTOg zm;y4j-k6L9hwpdh1IEevEAzr8*iP6~N8jK6kSi=AB zTi-HR0w#E81T%sI#X4f+&heX$SRRph{g>L*W9Dy(VDm?A5KWaIcGostHWXdmY(4~%AECv!ztJtXi*ce#r2{31~;ELhZyba9&g?0g8 zHXy_4+$<$Z#x05#CWwte>y-W)Z%#UhV3KUplST~Kan6V#z`m>g0FVjeqkWejFsJQf z#t4xjDPA>7)`@B!HsNGCrEcg5oouEZMS&fO^uz#S_*`&%f3!VmuTf( z`#uSY)bY{MvMGY3nY#1jlfx1bgt`6bTejU?W{9T_t{FolEu+CcIAK5_afn*G?vAalt(;l@zAJO7O zM3b1hi%3InQnr+(YVmR__jc{^9F@xCTnyLaS3fPDo=+P@Y)b5k>n3u!;Ov}TY22;s z@Ydz$I~By8b@M3eG0RgB@|QIPJKk*HUd|vS+3uIIrrL2jcK^o?c?^CJx~k%XgP`@CA5)5BP)T=I?HK51TjpyZGGDlFD=)aPQ7|zhtYx zRI^(7)ZzH0tuTAHVpo|W7fLCBs#`10@1F;vaszgo3)!^3A4y;Jq+dKJgxztM`ZV+U zv$_osFhqDaik_y;v>w6Egq4aZ^p$R*)eLl0=Oy%P_uL+OqAzf;_a0Mvb84qC;@)s- zs`^=MmT-=9piO)G;#NylN!|{4e{)9YnfthiG@TB6 zkeD>t=`Q&K!h406`=yRiqo19Rzlqx=n!nGJ?}Pn@uVw%8`+UOZe8$XEPsMEDk9=jv znTqCdxh6oZQv9#)Zi~b;aP|G>O|LbfM|?j0`z0BmPy6ExagU8s=|?vFX?|Q8ecadk z(k#Q)r+L(OO6WIu*XMTgmygS5Ahh@8*fwhFZ~XKD2rPT}bSY?n0m1|d7cOX+kf8t$ zAXprD=EI^Llr}N)44|gv zg8>k75-n=9r$d%hgbHkGPyte?Q3tqy6H?<;oeE2MWXZLo0IgCldR^0DCQP(6cZy|u z^e4#%B9GF|n)GAXu?Y4)acWnihztR+>Ma~pYt{djQp&z;;aCIY3PCx391`Nd#Iz_S z^Ho`Lty`mTFB4v2`ZQ|8sw=1X>zZLz!F6A67D|~VoZPw-kA&IA<+9^5^0eyX$sivC| zS}0Fwp4g_GrJ9NXqm-tGCwgmM2c&XO=H#PV;Q94bYbkEzDyUl`N-BajsyY>Z_#q1G zl#r4T>6yZ+7U;7H#Te~Pi3Z#0u!gCDgcvrMaOk7Rg2~vjm(uoWuhN1WtXG(hify(; z_3>p3xhk3MMD3b;uCwV*Fzu-NUK=k`D6|km5<0x$XrbsWTHUGpJ`1qF9_{g~!0!?a zCJhVF@EZ(wHk>cS63a-Mzjs}HGKl}RzU6_e3fcgJ2^Zv$1H<>iSYXB`CmV6EdguXf zb|9jB-AdHHnnQgxFst)}JeTbA&u*rfD$AnQmGs6tTMRVR>Lvgz)mZ)HGN@Ry+Yybk z!AW$TL(mC!*#DkIcG-ZnUGdQI3f=OiTl3m=LwxjL!VNOuT(_EITS~Wp4yUYgiA4jh zY6(pLW-sAb>~O=)1~b01-RSDNs?wcGJ~;zw2W%&$GUxz04|8>{LJqTYp8BP6mAS!r z_Q|%OORQ(vH+Fw(t>+6v_^@2e$}t z0GFJd%Lc`%o?zaGkmRW7JV*+j8q6~{b9t|RN=Y6E>n4RD_y7j|lG3C!s3W-5Z&G{` z*<_7%Zd}2>x5Cb;q4|0*ikqp(Sz36nuj%9?SS)RzB zFFwSLFaX^M7sNj@ZpV5_j1|j3XvC?AuSo~Fq`M$M$kYr{k2|}W+|J~!A2_XlV)WD9 z9*LR2fvsMcbj}O2)0qERN|G{Ixa$~}7;7pxNGGgpI)h1IXsKA{~pzRFQ&04rcov}d)G+^OErKE)&fWQ&^%%(rF z1kO`7&Y+X%p*#tK!`EQ(3=i$6ieyIvrk!vE!7L`^&KWV&akMn6TN_PP;=II}@h?~; z!b&k(r5v>JJ&ZZ$2f3#=e!^6!B+QHnp=TFqN`aO4`l&mw_Rt$p;de-lp*cMiCmaT} zrZxeINB?6*)r9}{R0k+vgFK^&0>>Wc6~R!3GJTt?vtn$qJ#3^0X+Z~O{t2qOn4Rh-a*z=SU6fC*x-Cmf9M0W>(l5sU>T zDd}_4{1ovBa~)4DgN+>#7iwh7_WeeDFR__PglDb z3@-og29^*AD{z1bfdIk_@`FcdvXKc)u*@N8C(Rhtzz1#Q01;SAoZeP0Y%M}|irjhV zkzRzaBMwRtiU84wB=UxQDn^)*LyABIf)sKwg)vs~&?GF!x=UcfC#G-(COBaSSNMb# zb^wG!d}7sB7&j9@2l6WD6B+|!#*Mk$qW1pR$H34uTY$w}S;CfIxm9k4$mG%l6AUH^t$o4FqP&3=h@te(7tPTRJ`~)H*DgA)2*s=3ie?z2 zg@}`;ug$;&gM=LnHDJ9H-rf2p$lwY^Xo3}n00h~iT=fKm?hd>ft`N~fRfO#LiSfyW z8I(bnT^|)hA4d=$DJ6l6G@AAelkOqKG8}_46oMw;gEX{)D?pqy#6obn!H@g~5`aOj zG(i#cfEAn^$^F3<uZN&-7 zNox@weVtQIVaNGI;Z1l8r!1ihBw^?sfeAQZWU*9_7y*I}MzM9!<7~$(1i~?t*)ary zm=%H|?1_14k+6UmbRar1oC>n1qvIy)|d?=F%}~uc$yky*AQUZFqWbKEF*i&0QwA{3^W00cndtm zNGu*BH$K1)bt5>2V>r^HI111Z@K!(o03rDV1qT3u04x9i006H5FaZDv{{SQGSwQ81 zi#b#XRZ*D1#g+~%5>yEwXG0$lAxa>i5TQ>eJ`Og%$nhctj3E;m93aTDrG$iY=*XN& zv*yfBmU33YsmoH&pE_~g+(|U1&7(+-YI&JJB^4hMXw=}b0b@8+S+gHYK&+r5ND`6&4rrNJ&_dm~eMmqQkx?XqyA-IPxDn&V2D>gox>O+2Pg0|h zBkLR*Q>f!gk0oo~92vsO7$Tb9AiU#33#SbYu=o%`#R7pYb2XYxySCbu3x>!*fnts4 z-&<4ScG@9?al4HD5)kR3MpX_~S1fM%B{OI1*sp7koD20391UCW|CRv#1J@G)CZN}H ze!5oSs#ivDO4UN)_`?(Df3VefX!nX)@EcdCxmVqG2qviDg6XAaUJplz2L}Y^RmhhM zTtUHJSO7NV;e1Wm@PiFRoE9Jh1h|HuVr;a?nsUi076VfzcBsXH3+AX}jwuiafrdFG zK|}x;`FCMxedN_uj2#LPo`(&{(OV2dN*7>;R=%c!Bzkl?P?n43ki!mLsAwaOJEo~7 zcM~Bd(Oo?rY2=Go@W;W4C`u3!aJNB89}Q$a!Q=vW!l;H2T`rmDbUn~;0|OZ}`4XCI zR+^>&^0ffPd*1n{-jM~(#Ri^!s?=wxgC%hU4~v-z8v|V?{|aN6JLJIOnU?0d#%n3 zsljQfa~8SYTuXJU%a6L`(1|WYeDR1SB!GI;yW52WvMRi=R}bf` zS;p%58gRvHvCDIm^d9<16(3vB%SCA^M_8Q&7J8z(PnzrD4lqC^Db6}~9h1KTmg?uQ z#QrF>28kg(#7-Z#-HR?FKrwO@R{B61*kMcDD$Ehx|8}aNM2H!7lMQ>V^L}CzS2kT3 z=OuB{4fGVqyjAOjV2T)X3 zxh|6jqQ&h!ywJ1_uKwCNsK6z@dG9t)_wDK7whM6LO}UPo&`JstKn!DzoIB-iAC0mH zh6aae>wH^X@Mv_F{%&^6GZ-J|&<|j-1z0xT2L^Q9{>b*+_mqKb(m{e@1O*@Yu`U5{ zC|~?0#49k}j8g5hl&|1du$H8Yeh#7DQsCv2c;PM(Jh2=cwtzVyAPg{C(c9yl@b>TzHT?UuaXLZn!#A5$}m7K$!U!Q#&hOaWhI1 zUkm4#8v9{vV=SngU}EqCK6nrzet;SU3${pdx#)&CBnd{wSHUb;(vml_qb4_*l%WOh zl9wc#e%P=O4I1DJ9@t&Ha`D3(Y$0A)_?Y#$Wy2Mw4|=_!9}31*$!=AVlQi^X%y3A& zHE75Y_Tzv@js~wHR<27;OI|JWqd@4jzy>*hL6x59tvgB(KTgb6kxcf#Qa0{RJ0XI- zD)F|W8IhLJdzO>N>9Z-S&zIh;R1!@U|3h(3(lnadp?*XruOGsJ3ZMYN0qUh3=*Y7H zON<_{Xaq+G;tH7F^jRAh^TtRCR3mcfglu|2G@O9MTIC7PEgfl|VfK<{FP+Xh^Qk6Y zl4n*H^pC$Xgv`dpOj$(9qD3dB77heUSQP4_%zC-em==zvJ0dDhwNyT}_;F~up1QSMz1nIE9b_?Ltl4 zSk>a3Wp$ND14^?@&e;G;*6P_W|Kg^Nqm?U>=s8ClcGZdVkpl!*8&yc2CCI@jPN{!1A2m@Rhi9Kp|T3)ZM%l3cB!XS#GII%zr+yw<^R8 zc=bt9sA(xAwi?0@#L!aseQ}9f)GbGO+o8KoN43M9Z;tZCRm;DJ*@h(7~5(6oK&m}GDR82~h%(9KGXx0+jlMcSIlD^#Vw3)Q@& zKn}tr)dxg0Kyq5er!F4#*0eeRQ+wH(4%O>@v%ac1r=D zoyIHeAa6K)-Ildh-2HBb=y5te=s}hh?YMH1>t+1zw{>&PEv*U%eorO%&YBW$cBddn zj;b*UA&TeLVnE;h|Mm-#QEfgpAAr@CZIiJcK2;EiX}JbgW)<*_G4=jBus5e*4}6?J zh#dO1qpZ=PKP@$lYbSM3_ITDrl;#z;OXoeGrlj05ni=Sa21)S2401565y8OgE5Rm_ z%HYtj-vD@fif_hYPWQ(^9YykffMK#(b-UCSV;9D2=|bKGAyGjMWhjXZyl!(HltjhY zYylc(+k+&0W!p`!dp=3n@tP+Z^gcfpCA;XKln8oQwu;nqk^ zNQoTQa{oq)Q-g^QfQCy9lU zch+c2=9gNp(rgKkabMVtM!_fk_%+NmDZ>~NCPIX}h+x|{XdHz=|HFMjW`>xhI$Bt5 z800sORW|R1j{sAU_Z5&Oq!J(*Ge<#;D}j)}*pdC0F(|hf$u|Qt&^y6~ENXC7n1zb3 z|FtN8IB_2(;q25n7IMd>&I zhWT>6n3!o`g_2G|rYz-jguj8ye%=;a{TWn(vlnHWZ5T>+H(sG6Q}lp!ga1*wZe{~3b6 z^qDY$oY<*4U{@nt1#8qZijV|kco$%p%>m`qukCPM=KmmZ{( zj{=Yc(l;6f79F_OhxaufSyoMtc~5t8pKO_*DFC3LDWLqBkXlikgNdF9`kLb*O&W2A zB{78%nu^(JUg;KXf9L?#mLZ<$m#6um|9Fnv871aOA)QI045pE?=4!*9IF_(VIBB zpH+Gko4BPv3Q~xep_U1N6w0RVxhd#!arZcl6XjCIrJEywp~EQ<99o`l|H_!0Bb=B+ zb4Q7vfP{f03=rnrIrTYy=VjoCvY^dLZK1t;YJTkdZvA{}xvluoi!5Gb?8% zNc33}(Xk}^GA6rgE}CpAv6{k%BFqx61~)w|J4*nYul^a3NV#3v__S_xd(YaWL+Ddq zQDrkaw#}-SwCHmx`=U(e6nX}oUzVm3k!O8+Ku${=F*cKfn4a=ev|5!+VT*=&Dp9gJ zR8odPV)|P#nr^gc49yO((DxF{=Ho|chR(;Sa=9vNAiUdddv38)n+s$O-iDUwQadlepAoftWxDdjSw zTdf9213=C+eSQ&)0Az_B~P*DJe;%LVTn z1`hnds~f?q`vaM|zYM0m+pE9VDYO@yv(t5rISk@Z`?C_HfmtS)ns0}U*} zO%TH}Ji|6%z$uKl)tkZhi@`e_e;72l9SOe2M3Zd#gH7sOW;FntjA}Z z#C9BKuv^LJ+h_6!A9BVLX6r`OHoc+uL`Lw)ava4#@VfMi$yUt5m%PTDY{>+i0V~*3 z%gATgmB*dDl`{%X&CANrTg=96%z=Wigsi(A+yb?0$9QbRF?yS$C(6AVQ(QK{e0<57 zTmnQu25}tD5{z@q9H^#j&Rk`~261Kuyt!usPPxdee7Tz@%*C}V%OJ1=!yL){48h2= zyTfC~0)4=StfoIRflcImV`#<&i@c=srG6Qs&Z*1+y}gem1N+?1{7eQ4htCxwFtbd{ zz*mc6Gp?TUgRDq3LmXOxTecIOtS}wZcR(>_|9V46pwSvlefTT5WJ|fPOvI1-Qu8Cb zS|hxl!dnsbBJ`-nqfERF@dk@kUWI%BK7iBVj02`TFhi>+Ids1tt5!r^#nYlpx7rs# zUBa&=(exY7-3(BD`P0yW(W^Yyn?MHSET~QWxUVyDTWO*5Lua2i7y#go>paw~le;*z z$N9^?LLF8IRMp}f$^3Q7dfQdYJk`;PeI(6P1Qsj=hyowDbLw2USo&O_4*eRa%_0!peNP>N5oCI)d-%R5pm=0?RP3(I{Mvag+Xt?UC^-!#Qxpn69TtqO1YZd<4eBT?#+`r z-rtJzx=8FUEA<@ih2xr)Kss)IV42#wYvS0wvnh_-cU!JANF@}GS2bSPZr2CWw#EGb1U zQOouLrLoO!KE}_z<{8fAOzy7OIk~wi1zv6Ho8F+C9@kk)%SyzTFQV5d4jY7I130kI zfi7dWV%dd$=%tU88#4^^ljHK%} zuHbmx><#hkV2;Mc?Zbb4C_RnmduM~Ur{J&7=ic5SCZGiS($axdv?n{T z;3e&EWIp1i&MiJ50w^ZpDWugt4XW38M179Vnv?K3N#y=cTB1uW+604mtlRQo?8htU zv?K*Vpm4QT@`$#+M9v}2|1n+JfG>TeR>J{)Vi8!nG4|b6 z&!nmT2K6^2qYZG`PUAg&0|G=M6FuE*-s78t0asY_>pE0>9Qgg-zb@7rGXC-Vt>>XL z$Quk;;G^~zSNED51yS_!$s6ffR`^*y>qkZ5jt_AXzw0nvRI{rDI|u`m@7C~0<(YeP z{j{V$z#IRZypZDg%MM$hzv!LbS<1WY?F#u<4<-mx15go`KZ(9Cu1z7H%(zJP=d9KT z=IV?5`w!>Xpu3S7|1lbO?c-`L+b!|z&-jxcB4RIY)&&p?C`52Tu%JMM5%{POpRZ;LyYV| zHG2mMmq;)QG@l#ECZrs^AF$<%S6;RW=~{asUhuHe7r-Sv2TV3sHTZ zXsFZR$|E$8h#3MACjpN))tI2+BZbpZX~Pa}X;SFWgfm@S#o3T*OqwZ;uJE8&K}d=j zSO9(Nckf#t8xps02|y~;3z1oLWa$uYm!&;G9G(j}ERh|99iu(`v2D}K2<6g!xdE@- z5{19=DJ@y{|83F%a?nr$BL{}f4vIyV^F>HDjRGN2R~qMzUk`Yh&AeR=pl-~_+!vN93W)tgQ`q~NyEbwT+lS(9!$?C zr#h%CMmQWi07dyQEXug{utJfxl}tmSxteMdFuW9JtP4m48FDc%7!8OKH77MH;e@3g ztFg1GAaJd<+MvXc1`n@P?ZF{r$SAcHgDX&_?>5v6MH{Ewh(V@QOpXH^Y0PcQ_{`f9 zEFWv^|C6;Lj=Zn0^Q0*2IvG#A5l$wL8+6K-jf9P(p@H6>n@uMaXuwElCkbZNTM4B2 z|J6Nl@6wausde61O-!Hl`Dez`^_p9>x0C4x84|l8Nsff*!YYbEI6Gzdwq19?s};U_ zV(Gp{YvnB0b$4uyaaK|=24FD3!bQ7f_EYTk4ZGj~WoDEt2;(;z4gg)y*pGq2`~Idzd7v@_n{>w^Y%|ouK)wZiJG14Bbs|#wnWmv z_jPsE@?BfoTh3k2lCb2FWy|-{ap&SAHa_j&#i!Z%W+wr&d)i-4S-96`%2D_ALFayP zFToc);`-kk{$t!^FGKyy0-XLfBelgZcP8mT`f>z30UY4 zv^V-~Ds8k{8;b}e?#)Cm{0I@QbFBxA(vvvM*Z!1=8d59+mgq3TA0lzhYybYi z2-QGk83&fPNOrD|x_f~Z%ozabkPL#+L0uG8a|0J>feUsK!X)r_Px+kdQfeVZFudUn zXxzdMlz>D*DPf0OKm(Po z+;k+ioxy|~TxQN{C_A9EP%T_Ur8Py72b|_15TdZdA^zEnQ*?}yx$9Z+=0+?9S!tsj z^=0p{9kO{jvK&=@EnvXPBIWCIX^uqHGTxrkfp z;YB6<+@m7;rYdN3sTL9DQz>GDwq?LS`9T2(0ILEe5Md#(DyQ)zflrr~&;O#e9F8=- z5r{~5!mMdMDfIKq==r z4gAfQ$`&RshMKB+HevZK;)_-oC?o)ZQx8YN3WFSROM~gcT>hl7P5;qoYKKoeLml2&#wCZ+uo_otoMPI5ivyN`?nXHxQ;f3S_NN{k zpO&KVGKD|UA&e;qG@DFF20DOIWFvCS1pnbeL*aIwEFS17=48P}nfcw|+Rm4gZgwCB>yR{4S@UBbCF5pGOAB7Z!Zg)n>Rq8m@qL^mX2;D^9H~Hw$+-G8*3O%Ztcq!Z}etA>vgxcw*wo{HU^%Cqt^f+!rqy3 zkf|P{Dq8Iw7$jiPI)IAB=4dl(vl!b<6@X>xLT6t4noBIuLH|x}fCLK+RlEL8;xJWV z3y9Yu7P52$vk$WawjIF&NC_83J~_#49m)|}z|P1iU9l3!IMGy7j$8PeA1>K|ESf>e zo_F0Z_dXbHIlN@W5ux*zav=#A(fHsx$)|j$0M~hKpalV*=Dz^!XdbwM#;sFudj22- zNw|yHAQn1`rF_>Jxm3kTxwsB?P-Wk;fL=|q)OT|Tj{!#w5q!WLmH{OOJ}|=>3Z8@^ z;9xg@>;VzP0D*sDzQe7Tr;hjI+~blcBb=L_Wuq~kr6Xo^%>IA(Oda}?Ec1d zPaq6l^@9T>@Aavd!ESb=gIYPtaGl(0=yP8|<%3jUW9dQFv4{Y*XX@D*;J3+V7K>_LGsHR(*d(tis>>OA#3zvf!rdTrGJG+yxJv6es72G`syE6nislq#eIG$<6;hBrcz?=E# zj5qU(2*SjWvj8P%8bBPmyu+Z>dOA(C!~e;77JsBja-_BdT*x?-fU3j0d~8P~vVkHv zJojs+jtfOS&_^R1K2%(bMwB61TRvoDxMdW;e@VNqlbF&Hy$y%~5OUD;u074pod2?1O=j;YN>Q6b*8T9B8V9L&_E7$iacKg8aT4 zJE5{OfI@^Zs6!aD$x0J@pMwNJZrOwGS*@Tn02|l>8t8zwK}(?wrItKIY2%z}Q_P9^ zm>Z%>an#G?1GRxvMn_~yk87GAID#Wktddlcz{G(KFirn3xns0Uu&g&4TgtXXw-eb) z;;}W0(M*dZ9{rQOH3Z53sjfBJzyBXd0wfp$A8g9G#Z6V4GWIlh>PtAibGepCnU?Tt( z6NySV0Q1JDkbwuRycFaMJ}iN7D~q?`B@&E)Dw|LW4Im4ho-K))NqfJyoFBFsbQ$OXKVY14o zxl0ZOx~2%yH=USQtgRpH7&<*s5e>J9G$#b36FX#5u`tvPsh6-6yLf5TR-2zFb(N|T zgCYn6Fi1(>Ocos4QlaPrSAl?Qd`AD-OkdPAkcvyTyh}4-K$q!Mo7jy;F#{kV17lT! z<#2*2AcNv$Gg5IX^)VB}^AP)l$s)1UTWy~|=~aWwrzKoDaQZmb8`ddkf;d3cb7cZ2 zkhyX#g2IAL2Z&ZVk;JlbzY^smOnoZ;tQpFbJE^GD?G(Fj#kk)a1A{eJbUoK)MS+7| zo=)wYJ2ZhAAPY^TwEqD#LjqLNY^9U5`&O|d(Wt`KQ)D8$%Yh>ygM?Msa|Hu1DAyZ6 zSs;+L7D+k_FhM2A1s99SI1*Va{hk_i&5!*^Zna1a@yg$rfs{>JmNnNKIM*b&GfC6L zsvEqH!opom9G{)T;feyPbJ&?xlc8Nwj|14JgT}Stfwy_trB&IrRaqdg0d;i~!HL>F zfEC`j$N(@)vBggU=#9rYDiw>s6o|JMPzo$`z)!l*00lO&9bDJTQtQDOJmd%@P};U_ zTa=uFAYj4(?ZOEVz2g`|EF?p|mA^v#A0@zo7_i&7nK{p-nWixdr5M6o`Ou&p9^Qh* zVysT9^nn`q4gV21)yo}Tm5l)=FoV@>LYKLyAbGWw(M8`R$emRH+xr2n$iIw3TcxNu z*sYd4v$>!All+ks0{9Pb``o(xT8X&75MWq5SXs-3- zl->k!$QA%Yj5~wEbUq}}joq+2Wa3rZ1X_3visiUFr+Ko0*s4ZZupBs8;+0>8O#&lu z0$CHrmnqCXXut~$L?JERrcluwv5o+cf%Qwgfsg^nrIFK0)U)%C1W1#(LnBTViZ)T2 z4US(AURom%gC-aPNBkAU69Xl1j^pz@`RqMIBv6;)(LoJSPSw7T0xkz7N(7JrWtHDg zDAx`y0{<8o1D3KPs?aAkurvvX(EQ}nUG>HjyJNr83^`j7EV1E`0f7*fUnZ~uG(O_D z1p*kPA^ZiEz1k&RWZ@X)UH{$H3N8yc*j?oe*`f$zO-h2KWr6{)0(IqJBvyjdMaBu+ zMc2r-H_I!MTN1|oQwv6?O1|CMqbke;9*-SjU@2mR1p_8{1Q8(R;hk8y<<3TiANJE* zSk~Ke%vT7y<=gcQ9-K*zB_=80VTq{RU>@dPkO3wr<+at_C|TwN={)1R;b@*@MHxr2 zwJKU=OijIkN*rS#NLVJYgi6SPGWY~?KG!uEK@LG@Jkl$PRA*Ln&c==0a16p3;7b{6 z&;OS&$~+VRA28)5*l0rz<|&wgcTJR49@BU-xvDj3(V%KIt%RXLlBmmcH77)Vj6_U)}`} z!zxU8HURSKi#&;e89>=3U;;51XLMbH!F$#T`qf=j%13_Y^NCDNUTGDC;M*;{zt!Oo zIhq&Q9f+8q_i7l@qjYaE{OUO$dNQNyqi%^xO>!`lkYN3HV?c;$E zJk6#7-x><9wB|_!9Q-2-z_zVfPLOEK*a3a(c$CQGwPRY=R=uu)r~Qv3e5%m!V*k#x z=jLGG8i1SKw2sfT;dc`-Nq8xLduFEV9n2fkr@m|`V_??|F=UZ(c1{9MmZ9wVjF9ak9 zqyZyf40)_KJxi_rc}xJXG#`wejJ-)b@t`=@RhThSsELAzW`s>;J2o>*qL* zyK_|Zn(`lApQ(iK*UH&$mBD?{ps4ZPFJ(QeUeYMQ!xH)P{;rqvZnY{vExdD%I49u) zu?~PC0;Ei*TmaU&_8wr>bE@PK|29Gk=7C%Qw+^sDYqb<81xE6wHzdFa7irAURhkbl zJu#L^_QdOKbJY92+q&ZeOM*mn5-yJr8*mlWl?j zuIdTUY97!!>GMf7doe*RCa$;uj;m$c64slxZ(8@^F~<&iimT}1fd3azPr}0pc?xgc zGA8lM4p8-;m)vswBgt~NiM}rO{3CaRL~gIUN38iYahl~iC!vnAJ^|kN?W@q8^W$A^ z+z$u>DnRXoq&r@06U~tLT7HW+58DJ1LI-#5rIKM-HS?hfz_S=e_QJQ0Z}`TsUMLuM z)?^@U=VQ*6(G^P1AtbvJaQfFebac9Lr`jH`5u#eWhmbNpo*8CL5mT0!)}YwcSnO6?K+lE88=OUqoGXuwcI&Y^I*VvvfPO zt{~3tqRA+J>+y*s6ju*Qzn9ne=H!u22#ws>bMxNHwn+iSk z`b=N8G{vxKeD9a){*-(s{ocmIY1^&|NZNUxSKPe?2qFS=$lx$xzySveS1f4Aa3KU1 z6edQ1sNkYQ0cu2m=;#8#!3P!}k}R3vBua-III;wRAmhk{DQ9AAFtZ~~0TNDlR8yiN z%%DPTx&VguD_g`>i-O37rf`l*cw51$S+X5ko=EGLEMk>xFvqlZryEH48yFpE~I+^|{s z?is5Tz+B2OQEZqym_$UwRTBfQnQ$#jxOG`)R-r=l?6j8yuY@CIcWaqE>AL<*#X=6) zMD_-_5c2P8xzRssZl0UAVm;We6BVJFa&L|wWs?^k!a42BpOP{rx9dao4R?Aa3Ec zm6~kB35a1&g;}?tg!Mh=VoGeScp-)qTIL;y>4_NC0Uw6Q7IVb42;-26$(SRJ(oNPO zlTGS|BW6w}C0S{{ZDwJV0`6GYi$$6=p_E`*3I9@pUz!^yn zEG`K^3b5&!pO;BiI9{24!lc3^Q)>7lcWnYW=SCdRS!GzurLY5ufu2dEVPaJ(s9MG; zn&_t`nAYf`DXNjf4nvT3Mh3lo6hjIVZ8(5$Lv(hhl+_{0X=sKrc;2pXo`hwDbcsr8 zM=|(DkPJ1*;2>#E3ADkqEl?^FX(vtzsgRs1<&vj50{f=0T7D3$dCHyCL$V+AU;(8v z2(;Y0u-!$$s*Nq?L8Fhhs#TZX))p?J=)##*guVhf(-3&o5P%E}?BHs|ZXJbJz5F6u zDr|LPdf`?CAByWjZkGG4ifA4S+Y7Vxg#RB8L)coewpNt}>4+NK24<26ip(Lo=;)^XV*g;msXg z`Adf*%@LVlN}&M(caO9|4Jlt*kqe*?t$I=>R^BV-4rqSkktA=;y66hUkX#RVS!y%X zxEpQoukm3X_vVW4C%ouN;9x@#JS>jbwEz9<-OH_2`@EttVX46fTHpc)c8~+?d8;w$^Oa(Z zS2ztI?|YoHo|^mwy(1*x2G=Sdd1i+npyiGvZ;+ti>SnvEFh)G6vETkmIGG^~#vpy- zlu?A^uNeBtYHM4Y2%V%c7h+Ig;IkhR4F@I0T`p9yqoDGn20%=yA%HYG6%Ega9byS5 zf1(-S6F;}Y(Y26pd_$G0yoj9}zyJjVshJU*ND~kIu0{`(+sKUOm>{{x1~+&k9Jhn2 z9MHg4AdFyH3?j6GjWLh7nS>%SxJMpMC;|oH|hwkKiez$GYMJBESGS zTI0>`-gU^;Eyb6VOPJswxy4DkO)$yv7o2Pk}_OC4P%*2$B~hnjeLt4;lza- zWRaKUCxT2Q+|zE#LVmz2!4TSQ%Bn`stctK65EiJQF0{ zc{(4k(FQG(p$wiEzix_Bi0sT96|uKZYZCOI7~P{wgL2Rum_T|8ZIT}e*{z0(k};l< zj}}X&PT4KdYpV?A-c}0Gm`>Db_uFRO-N# zq;}z`A!SGxKvtBI0{=`Y3wK(hqYiOy?Bl5%c5=}Rd2$9G9b37AC>5>lijG-j>e^-{ zw6QMLta70$^ia^&z$|dGZl&nC__-;iz72L3G#D_w)zO5qR4NyI4Mg2^5Mu##BANXT zXZ43zi-@(b9A%^LZaNg1X>zE6!?TJ&rF^ztrA=7IepC*ZBoz)0hIuQAkd() zAnXAf|G3DX6~a=-Vmce@DqW?;AkOWjI_lgUAmSqW+1MAioyqGdE)gHWG6fZ=9%{nImngTBx!|4^l zP)0L?QQa9sm1N9gXmTY=z~*L$#{?#Y+N=N z1R{8kXGxK75`G|ALuVuy&satlH1P~!kRk`efJQR9TWN-D0Vq{CP7jm-njf$!Ky27a z`>^aFI2d@t`jrxBQk3XkSNaU|sxiT0K!icwR{^dthBFFK09K5d6*owRGS)$g^<~5c zOn_AmnExOK5)feq1w;cBmTdqum^%rLQg)AecfeHrw0u4ks^3gSSK==1Z=tQ8eEeOu zzGNWQdxhXKNPQ7kr~??K2muYAjf;Q}rvzoVg%v!&gj z4BE!t?OVA08g9NT4pF53OINIo4&Xi{aKP>SZxeXh{AQd3tBOV%pLWAU*0BznCIK4I z2u4iGz=Tgs;R;M3!w#;1j4R|I3|qHC3^s0cW={PRG?>B|Y;cGg&|8fOZfCb7Lxs81 zeeO6b%nS0acL)KfWjX9S;QP*PY~r8@ARankfjx|)SHKiXxAq!rkq)TW#5raV_bq;K zb^j(bK?Z1V!ndse2F{1z6GmV{#*1);BOC%5K#;>3LhSb0!xLC_zrBABefQj>hW8}I z3GM@L;~OkNjQ35rG=LfiZSUZD=>RpZq@D{T902W~pfnP$K!zzaVg^@ef)gA81k~f; zB*=)t6#noQ-!{8P9PmAoe3GI)448l)2?>3{OV=FK5kwEQ z0LurN52wXQ5deWmDHv@K!!amB=yXH!8N#47gDjAgd>{cB90wLOK@s$T6=>bn{r|xg zP@ofR9TS9r44~c>zyK2%0TFQBopBNk96?iPk{?k4A)JR zfsZ*#^W}*eIvF4NiJtY2gxp-u?Hn;Y1GK$@kpaUy3>u}?TSXjABniYBOhE&p&7NtJ z?^M`!2-slJ8WL!g7$l+?Y#I)rfeFmoaj=0J))4;ufEp+PkvUWhZjIG!&!f%9E0o!& z9m6^(1DY8Ew*lOn9Rw20z_8^9iLr(cXqrtagokm^NpvCvqyTj#L?@O3X$a$4P-ChT zMHlqI4BX-HykeD6)E%(`ps~UbAW&NQnm+kYsI{Xzz9S>VV>_PXhjEAyyf@xLI3pE| zVG4Yb473|$oWK%%;Wzn55_X|HN*e_rf|ezuLp~%#){PJlokBvSMb^yF?aulI1OOrV z1O)~FfdDK30002505Aan2>$>VIH1r+O8`23hUBOuD8&In5MES)C?|!V1_?4kfD=Gh z28{?p3LF_gh72eqEIbfNvZbIobYjY!NvD&go0V+pvb3`&PMb1y=6p%BsL`WGa|M9F z6ypvUC`{N$@ZqCG18T7F1jV(N*RGwaL>S8wiqZr~(_@F`rY=Cj#mj~b1}q8&4~(MlZ(!ksiCSLHyt(t|F!f?&JAj1} z4=_S}3{b_O8kHOJZvSSXd${?QL~Mw$fwFpA2`W_b)kB{G%N6JC$4E>1zVOJ<6&B!t z&CxYM4nCBiMh#FM5Z*@*2Jjtx4TOhLdB~-J!Vog#K!tqN|MP2PvrMv z3^$;F0*Xkk5Tk%KhB@GeA>ycoSVEi$eId~*;Oby{f4kl6QpLpka(A!-V zfXL;1ffkA+fMO;(V;^-{(4Jcdc$;Ki3|T?l5@ zC1i@WI$&ma!T%-e1*1k;>7y*1Mo4S3GMQfxH}F_xetd#tYq7B@2;qf2$grfZ!fnB- ztJE^bXmzBzhZ~StS@2_!raAVAE+mZm1!kY(<{=Hzl_vs*ZfY9Xyfw%`;fwehKnR%C zRvQ%poffOu1 zWUekdiT^VWIDA_|$hds~O*V#6uNRVLkbDCH)%i@DtgJL!9=u|d|Tp2o}hhya^zI{)`5^i&N!s=z4ckL(=9g8$3~y;<2^k6dM=Y! zFDCk9404Z(H{#4q7Ovy9n54v10?{k zH(w)3*wSVJB{K0sf6^EQxrDt{@#~Iw%wu6X=)^4e@sC)EV-FKXz^W+-1_0z5x_kww zx;4sm8Q@s+9)Lx->9LBH=~(jA$SrJX0fc-QLLxs`g@uKsPgO}@=C;=+$Vt(WQ%nvf z@2AN*Mv{4WDM-Y4QUw#bOcx$F9x5*oMUQE&DaBM?mtZu@8yc&RS!`XY&a{Qn&0z-& z1I2>8fOoGGIwJwFK`Ioyj_|IF78lWEI-W=1viyW~O* z}vtYWDXphSF!X|Apa+1{H5>4fvs3}yW3pJ2Q9cZD6Ug`xe)BrkF;7^euC#I`2 zCkBM7#OhGbf+Ho+JC6#*X{t0%8=IInJz%JGl0-oVbD!#Bc{rR#buv0NDgtf^0xHpM zb617rP=(M{uhzv!EhVc8HJXv9o;6JT58DuX-)#0P6SG z0bT2IYHj0>H2EEnPBc`Hb-*{5Dkz7x&!L!2rd4EA*&3ltgUH#>w`wX_pZ}goVv^kx zS4m6Lx-O3+nXSwE0@Dbnw)R!R-INNHpab>r;GDL-l(BjXqWWNzslDB(RuxNtsUlG& z`!efsFA|#p2sT3>!xSYUkQ>!V6t~nJh#oYs%zJfmyH0c^lrnPD@iG*%U1ch}Y*5Bn zG0?N!xu}_xO4Q%*C7nop<%196U)RF1g}i;91$01#8-y&k?)@yl21;Kh73oBIz3ZET zOUF-%$G8=K4sMdk+`oKAeSx`ZYg|`VfsA%fMvX8)8%$lHQ8vZ}Qs&A6Qv-*X6Jdvi zT3(A<-=N)>#o%=7k&(Qdw4L|58ha}TbgW*@Ds9Ddg3^_-JYguX7XQXvzRW(GcvK%K znamyV77P2h#wwqUJQ9AU+4>6SI8z29E8(GDVUQpgV7RY8rDh9+v}X=x^lgEpl*+_9 zRYfP%(91cCS(NOe4fp^mQ{ikyLTp|@qq7I4g@VtL=FMPfv2}M+;fG^DCNkbYXOs>p zs4as&@8I}64&ecTA-R!Ns|EnO1uzGP@ERzfAxlB{f!jcUge=Wq2tmrh45E^RrMv(M zdBK625`cmvV97XT?eDNNh_e)zgadclfu3^vfk^XA0@o90SE29&Qz0QlJ_rIz)`FuM zw0A}4=8U$fbOaBn(#Y}#b$e1n>W&Rz2RXo81|q%S3%`yJW&hZZ541f18rWF?H@NW( z${QCs{2&KTcrKMCGXe8O1|m4;tWKEgQiVga*kn zdMPds&&=Br_a$uU=AqI85~zLlHxC=FkVbliwDcEGZiWg4nNa5OKGf);y9Me=NyUgT zgp@C+z~Tl`!3Q9NC6I?dttXM@(?0at=g}ZimwbBsqP)86S<cK-_M4*Wnz#K{=af}fy>tD)t$ z=;aM|p&w6_r`daFzYfB>4QeKd%3h%Fv{wxzDa|uwGu8l~Mt@xCQ@h?VYA!KxM z{Bu=T1WVmjWfCA{Z8jWHa~$(GgyW?dm4t6^XL&=yYHTEd6Szu^lxF<5L5Lzhn8$%N zrCK2HJeHGz&gN4LHb#iE5*8sA1Uc;VT36UwSr|Dy2X;PJQU+iatae_}hFbC! zekAs1-X(c9MKUrtS&%0%3RQd*b!Z#tDsN~dIsXs?E?@#1Vqbc~YE_VD42XiaCPygv zT@|uga<)Q7VRuGH8KPJe^adx^vWOkHNpGhE$dWCQMv96Sbx$ZZWe9+zwjJV;fYDJw zp?G&k5pPaIjB@r`te8niw*goZKLA!vofTd7<$j&mLAfX|rb1*z;%RBv$QbSd8kE zjsOXcd&N$JSdNp?P24q3H)aAsBX<)Z5z_c*)tDlM<9uMu|#@@U>4GS8UHyFcoSxQ7<~Gujs!VQi71dcG?X$yiib#! zEZIa1S&WggX(d1ewze~B5R1{}9cSl}fSBXPTGGt@Pm17}J@P(0{$ay<#^XpVgX5%2U&UziK&|Mk&FnjoQimNQ)C9~ zp#;chk13#IZL}GbriTFaC;m8O!vEPl#R;9yxo46|QbS^p&FPv~wJX4585;b~V0(~TXYk|{%otT~*@sFujNnD8l`pMnBK5CXiAIoWxiF1Ug@$yWDg zem7X47Gai#n4r63L1)20Zn+(@$rwln2W3=w!!@Bz$BWREkt#SR_6C?6N)yr%A5vcTjpk>gBY>7U$^gU(q&wP>;dp4q zI1`asXjdvdQIet9ase-zmEMVgQW{I~WhI!%q3%gcTdJk0$(#{!pm8at42nwp38!>N zCATG5PWYWsc%iQmry~i9cK_<3Jqo0bVq6h=l9pkA8ES!F6*Jv2nj?Txh{~Ot6{A`? zgRxPb>nW#>x^{Dlcaj<~7(r}=iDG}6MPsHKYa$wL(5JmQtDkC_toVfKnU)Hgst=K% z71^qkikzP5gX+kan23{WN;HQmg+RAhcK`sX39KS|r9XNZ=SX2SG^S0dN_zT6?s7$p`e zJDs+XY(}qzxoLK|1tF!IA~`Mf2Cj?BUqafJ%0Y^Ic7zT)o<&NF7`BZaDSnvRpC}b8 zmgbuU^;q937Z#bO_5a$h=J|`j*bv9oMVqvVMj9L>_Ffe^ek!I#;)JwGBxX&8X*#G? zxn)akv>@d618MR&6!}0kOR*f6vpjnqMB#uZc2Ql)t6^!0WfpWpvqO`@GMY0}fBBCr zOOfJ624iryaR3HR00c)c8*nSH>LaQHDhHkwULMJI^ZJ!!%B${(wyq{}Q#-Y6JGqpL zvQ5ii%hHo=AObVs1YwZ3dKDr};(Z{(_CI1nY4w&uDLrt7rhS1FFfm9~{D zK!u$dF*R>%xsm&4ZQDA+>$^B614YmTp!>O^tGr~uF0pz}1QoL~dr;gdd^fq34lug} zIFogxQV4j7y8lZRFk4Wy!jHj=y1xs&Kyn7dYZpBL1j(zs@hiUxqM2o?xdNBI#A{}q zr?^|$kNE7+zc+Tn47`ag?7|1k#eB$Q?s}`*B~Z6(79bp)v~tB}>_G}7 zu{VIX%l|9I$y)|?tiVl-x^-;B=!?e?^2HJLS(}%MNYuvxi4`5#;m!T&Di*?k?bSG%*e!?%A8C=fU(M~T*s1&&X;?_&(_1i zxowX1tZ7W6u0uhIT+HCS2~BWt<~Pqv9Dc{*%)yMsZZvnF1!zxjuF=$Ea{QN(3(Who zEKO>+_zce1LB~79snJW&DZ94Z%di)g&X7DQa0P+ZEPR;k&7>&s5-ehVzPgLcovT+D-4UkXdk z%3Lc@ioLbV(~k&NxoE4=JgQ~f%cKdXAz6S>e9AIS!B1<}hfL1tI>Kbk!g%Fj%`$0N zeanJI0GI>7b4{8^3`1?4&w3jK%PJU6t)XxA27&#PSSrbt0*ULz$GLM`Y#I`Im}zKM z)_~24uj8O%$dm(5bP&Do6PnedbzVlV?%+uWD42J;Hu03O(5 zE5b}v$@dteL409BfF-Hc!gP2oM=tN)8E z;Vt79ZYVRlWC3l*m)#+Z=ftX;pOfOx6VAlb&EnO?vyQ|OK2ycKTjjf3SU8Q$oGpFK7?LTxnI{>T{mx4X~pBvgO77=)5Hfcdmyl9ji*Ek-kny;BR&85u4af-6Gun>*<2Yrj^n$2dA`-jp4u|G-Tb6tK`XbAK1o2e?r@&bsNSZTI%{~1?i9br-v17#9uI^_;1?Fh zXZ}v-9FQmXP7;vV1I^_cS?;d|-|rXS0`E4+Fkj`nY~gvAZlch#p<#p`^Qf-PEgL0dS4NDt*VCTlf&p)Qz}aNS7D3?H{hsSO z$?`5@CuH>Ue*GTZlDa0QpGJMt9L(`VO$3w8<;1PtrcL%Mo)=ki?oDrLZWETOQsg?s z2MFS5R$cL>l^(yg_(n~aiofRztBJ9msZfCSE!^$G$+~pk)-q6W?Vh;)&G#MFGx`Rx zPK)|j+xpUE`}p$e@6%iYZ~B=^T4DbHKl2%U{%D-4kA6X)b^qRA^&!WPxC6Z3=pNZR zOKkDd11QZ-(8_=C!CC!0;Ig85eRt9M!VPZJTNY}8^F|C13kYlw5yBvV1PK)iWZ1Bw z!Gj7AIBPTg z)gXl|g{(?TrY##q1)L!wWEM5c_lZ*)Hf#_H(0A0^iV$0nsGAt#hqxf&V0`RVP2;gz z4S(#gab`xOPc6JW8QFA#j2=b%Wf&x-2@D`L$ZcqYhyU7|PHAU$p_nmdt(^;AJ}q!+ zZ_9KuFE5^&L)C?Pb=Fi(6K-?QR*7r}t9klvrzm{D=&%}m)RDe{FI7)AZDp+HnU5vt z0(WVX0ytEkkbwng>jLZxx&LGfVuu~NOX@k0V#uMT^&V<(y)_iO&OPUni;yHNiXyNs z%FL>YxY#Zn5G|;psX3 zGt0-ws6gRK0h$BJNuZLX@w}dF%x*LKZsbciw0acs5;DI$i?aO~G*L;O^pK9GqcV~S zr!|RuGcp^0LI^w$Mv`GMHnG%ixWYCZ&Pw-sLy~B}EF2_1FQaj;`uhCMWnp9O>m((MxI3u;sqD$X$jz$^X zI|Sc4AwSf%`qe+ubk^UN;TT4S6_iGE6tfk5bed?kZmX>6#n9r zLXFU!Z(1(jQ`D+a-HXy$lClFgTnOYnt-?Wkbzuh{-1XvH*2Ggwi$)vsvc^U0wO2zR zK~#`Zm-^J;UnJ+;6iY1&xyV4I6T3ic&1@+LGf}fkf`!AsIsP*=>9N zv7mqfmb1T++0^oe6J+e6hrJY17m84K<^QfY##G&38~tc;)+iMQ&Cy9B{^!G=|*}}wWY4}!uy_PIt`Hw|90iA z`!1YGsXYSR+H&*7@ZF&&J6u4*2Nb%_2Xhc(M%v0{1U*dYr+KBQMKd6Hj&lG5hR5(m zHHtwBL)}bT9t7M2gx5QP2`dU``(5-*2tM>N&JbgB*DI7^jAKMm9WzwNGrSSQW~jnk z`{ULIXO=l0e$YH=>Y@&*E5F>M-#tG=)0ALy*zf{m4ff*5qEsWw7VF*KXphJqEJVzGy zc9<+pEHyRIUKsx-CIBRHG$#lkZL$V71aSZWD?*ulQX+$)z{FB*v=!r$<}Kz8LK@6y1 zgM)=i0I91%1tgh*6)_Kp)>M+Fl82i(C87;aDTM>;hz@83!VZ+shA*^12|EM=8lsG# zF>c5V0_-6Lh2mA37J4X#dawk5I?gHO^0B2+Ep_CKK?_3KE^NuOMgYu@-T~8QR*n1uZ~fP8}S?wW6cRoy6=#`|eQF^?Jj&D)yOk^;L=lKU;87izE%1PaiA~p9%rfPYLv%gN zME;JjTOdYc(uk_g4eabD1z7|X@%Rio)Bz9-o`o;?nT|RhLm6@f+Ykke;fY2LJ_AT` z0Pg$Y?TWa+y#KM?2AQncR+X+ew-TWq5&HVk@0YVy` z6xX$tIQf+-T!>(F2!jcKfG~ukDb{L|4Yh`)Z=oI0hngJui~e2o1)Us`n29PS8M3S1 zKJ%tRDKmmotf4TVVFYOS`Okn}DVttE9JvL#Q-6d^Y3C(o3xjF^bXdO9PKX*%MmR`r z05&y9r~i0pK#(2?=HM8Wf@jA(U!4KaEH0&D#oy}XHu5sLgafll`@JX?;v2sgD6G2p zod7K$;We=w!uVi7gC%%C2}D3c24-#o8$Id=0QfRTLnj)v)?IDC0i**PnE(niU|O@1kb;||-33V?0#f`9ZyU%V z29O*o(UhG+k;a7-4(urnrASa*>~R;$%}=qou=eIUDu7to`l%aW<`8XtUV=obz*lni zgL43*Vt_yrP+$Td7=fID`JUTcWGrG<%K}0@UHghr?n?_J7{d^J>OXIS9cbRoXx5cp z{Qpz$k>}Uh$8)tqv`GVt;sBVpdF1WoCWFCmYg+65Do`GTy6Obb_Clqgb3fT@hL>{0;$x$MQJZ>dG62k* z4Oq3HDvxndKL%+({hE!d0Kj|MI3nn%G1<6}Q#7x-q}1~nlOvs8Au%n?KzsKoWb4A0#FoTpS_n7#+O6gOdXp;U3irn-zqB{K_}sla?M#tpBRZ zmIkbx0qVj@QlAez0whp^GH9phsHGL_lb6_ntQ$TX3=ojPjzV-p7FfT#tHT4tLah>@ zAQT@s?7{s&nKR&wXln~0xQHrPku5;O2vn6wjHej1rR%~KU3$Yx1R4<7uW3^~paVi! z%(y5B3>Y8`?z%$byNT%v0oSkq_dB-Ma+U((JyAQwSz47^RFXUSLQ^anrfb8g$h%T} zm+JF9l0%s!m;u5-wGz~>HbKF&Nt-Pspu7vfO4L4jYR2-Zzn?I_K2*Z3dl0>V4M%vb zcTq-h3>sF$mSb8)h{LWL)UI_rrgn_Q06ViGpu2f2wa{9Lc5y%CxkhvZr2m4fK{m5K zW30YZG>M4vq3M&vM{FB~bC|smNUI1Fh^hh~NSK*}E)USak)*<@D;dtp$yXYqNsvIo zlSPG$mD2bjAmqABL?bst4L@W_4(J0D@VwO-#UwmA!!o3v{K%j4zoGO+qY<#{!;W(D zfo16;mDCx}Z~-mwx7T0_1$4(K{7Ts26j{2;atz0~3@ti|G@6V?uByu(Kmmt*s&rfs zrqlu-K$shNLPDIvyA(Cq05Jg+v$FKBBgq;9G$fzIO5-p><;zG6u*fHv1mEcZE#Ltl zSOTWdI+9#OcBD#4u{w@y#G9DK9sH2P*-OwAwSSvT7vVqzaIY=FsQ>X$Or=~+C2LH^ zgw4W{{mhSXTw((D~I3#BboW|QdY{Rz7i_edIB%9MfmYFxpJOVuIMk0{PzLW_5 z#L({0A4s&ESsc*h8qGLrv-uFLW*JDtlFu`2!XuNVMwHRQ5FKSRDhk0-Nui}2Z8X+g z&%-$bmH2_EyEa2yQl`YZA`Lex4b#b^O)W7L&>B$hkvuICQU4fRvlLq!WLyB_(j3C7 zf)Ma9BPGS~+|!G^8{yaxnJ}1dQd3q6(l!lIz3hxlgwO^MftNc%80fH(`%WZX&q19V zyE9YVP$h4RQ$GT*LRbg^71Axit8tpgNi@Aw71QO^FhD($-=k5qvCB_=BR0(n?Cb#? z*i{{nnNd8%ld4W6)zGKd(SPJZh>}$j0y57O$sur%2O%dNj8Rfe5-03VN!5=z%+u9k zq$q@f2K_4_$<#E<%12~5DK(X;dQ)9B0w?$ZKD^ayI*30p0ejWX_j3zs^}*|)Rvb{7 zhHK_z8CfgE#pA3$nV0*#80fjMOg;dWKx)5wOIK!9#AQ6v z)nd{F07fE!0TlRIp+#D^wb&bQ0x+-vrj^9LaY?Nq+3DF=B>;d2If9D}- zMXk!H%yiWl0VyZgDoK(dlw73SGH6@N4ca&$S`=skC*W8fg_epL0x>89Bg9vRoLaF^ zf}dEYm*b_Bpn;w9TiDgSfJ;1Vn1Ud9NK!4< zPsCE>d%wg(*i~)AW1Y0zjK4RO5tZNpp(ERLsg=}GgB&Pdi8bH0Wdb75ST^MyEdb1T zd_oqGg9BxllC7ME4WW^VM>z0-$Kpg>m9h@o;B&RZn!RI)gc(+Id= z48B=265anHR=!yXG-8SpFoFX%;Sy$o0$yJPIu!r?OEDS2uY@zQD3*%PWDqL`&&Ac? z)w9pe|R+3)8-2y^@-ZT42{ahaZykoJAz91khR&|O) zB2gbQgE2@;F7yrDz{QnVEB1`SwmK? z*%mXKU>7|X@C-3f#bdu!U6kD6uHyrR%@6++2m!1@02}CLBmjk8SObdvXQ8d;)*R?H zL$m-u%jjwmd3DW8bweT$11dO~`Gx4XfVu~;!zvU@x{27goq?wS113O*%pG1P@H}LE zjPIDINp%Vr93wKU;%m<24V>oynY&b>>i>hcgWTr71e+nqXQH(N9Uuc>mgn-x88uC3 zksCRStm7%nIRLhfCt(Tv8_4BgI0W%v!?I|ZE{wGu>MJ;6f9Bkv{nxF|4K@Cug4SDD zrkO;CWAfXU9eo}74X2O97dF* z$a2=@asN>jLcO~m0AOj;<0x?M27i^ovHXbIV z$Tgf&A(`dHvt8;Tm(RrQu~<-X;_W7_fxa!n$%VRHuDccKj6A%7B`CS;wY7j0zI=Ru zrnb&T^iASON4pU-mS_NW=>hA-j0~{PnI54~VVA&2kdphQUIl?XjO2=ZZunemsa=qX^2{L71aIMbzJdS4Gui?jo%2MOH*G-*&Iu?mQn#MUh+~rk{}rgg>bm&} zC1`Hoc#vWVCcH`V2Uudx6AfxtGY?cu?37B21 z222Y;%2vS-9w3j&;5?Ku)w2!VdM;@yn3-2*Y~mZ3!3?DAg>12azUM&YgdTu7e@QMU z_3%E`TTh{YHcxkg2qMc_I)7!7I|=!Qzd+*8N^kaK-|r2_S}^^QCmD66^<2qpyLDzy zSz8t(h@OFtuNT2U2pq;U3&AyM>nrzDju=Z$FA83=4OX%rGZiPdYz{6^9S0Ha#MMB) zx{LvKHVUo+5`g#51(*L5OX?LL!Eu#19CnDbz2pvF;Rx}im%iwzUc{k75YasjyDEX9 z*tQ#A;TS-Rd=z!N=A0P^%6?JOU*8ci*aE=-Tt5FV*WL4sZ;G@<+@s>ylv&q%{^N(Y zcrzrV`sMDhmFgTo0w3t!YyUF-OF%JCJ&4I}nm^N=h)4cCcMjMNgFuzMm^;-{n}q+v z7T0i1=5FN7;UoxgFIUCw_>+mO;P`v5&1yIe9W1Lddlp#VBu4^)!*?DZmy~*Y&Up1S z>-VaPY@$F5KhJt-W<0TPPN&UveA`9{UY5gr8mI|)j3gDbR*o&QY(M&W1mJ@wX}K&M z`Rf5P+9qjHl<)uOH8_Dw5a5-zv-GQ+pX!7jEb(A`zZWupF)F|xGWS*M`|5$bI`v7~ z^v0jJ)q7H$hkfr**7+Ph%8$;ZJBbW zLa9M5X4DAffzFRLT|O;4w&cnORvmVXiF8HMvkWD!m23AV2N@wy_!yERO4GPi;r28s zF$CfcX5as+ZTxg4VuD+|Zdel)0prD*_e8AA(_>-`m<7v4Op^539jblMC?S?-=GcK{ z&rNJ}f@j)>wNk;DqV3@jU9gPathsaUp1~`UE$-Z*X{@NvmY@;j01+PqVGr)^9cWal z#&x3&{S{7dfy2K}$BBHr0T;_bHh&J_rHj+3bKD?$BL_v?%|_mU?%5`j1j!Lt9!pV$ zR$zNbd8D9$=)EQ&bR1w9mkT#!P#Fs`$WWhX-?4BaZYBn0+lC98b)aq0*%u*Q6joTH zekxtqo*F?^27-qqmgu62Qm~jKk!67f;|CGmg&B_U-I$+%JEFGI4m6;b!$Tl>31N~` z1|a`slIaEK%c;4bqce$@qGN;Zwy30p$r+Srkf~Z* zi>fZ^7KLU~iQ<=FP8t`ke@Z%u2LvFH>8$q&%4o9q=^EB{P>G5vwXKpGS)8s~dskXd z%=j&^yEbbeh>*p|WNv-O#>?aot>sXIhSFhy zAh^FW7y_QDZfjt^>k&7xx6ipIF2540!K{!m^0k8!ds&bJohVS@BTe`6nS;rD0OtRq zRtXyXuup|{`V++m@0;;KQ(dVQfB^J`f(I;%;2{hg7|n7;9-c@9!uj@TCCxPxTW_;| z@|*#~wH9_@ics?>0}2;#c|#8*XL&(KGW-_>4I^qWx3A!hS~bKDU=8YSNRCT&QU|_Z z7!~>X1)zu{^NHZV0P3MBT?`D2Elwfn*+=y(@w3-Bt%lG4o zfgUC#-Wp@fH?3~+{KV=JhkoYIFN0L6>4C4VmFAmkd-Fu|hI{Jmxx>6%&cegaA`qLVxRzN7B9a^h&C$tAP7VFA@$fU zfI2E4zl0Dx^Jz_bS&N#J_;V(BJlU_Pz=Z@PZ`d91kCu6C~gu25*Cp1LK!4 z|G_YaCd?oZG3Y`e+C()d2$}*t=)f6u3ojg;-=}U@6G;^7XOa6$uF6P7k(AB^EnDLZ zOS8h#e34Tvycr(HLdJ?A?~FDgR>IhLO%VVaPAink^ltsjATXPRirX4|K!Q5bt6}=0 z(SV$XL`$_(oRfTuy6SWt6yh?KHsBJ^fJwM0{>y)xf#*ksU_n2U2c0H(06MD`!=doO zm7r9TOAAKL(Qt2}p=_T^7eFj2#%2g6AW96TM;fRdp{V3sq&$HVQxd`Js84)M5C!R~ zoj#N?AHZQAwPm4=<+PeQODdlTnpBS-s+-9yVR1B-RjN8wH$(r>Cmsg|(yYGfBOn!N zt~v%+PoYbp;<+1b*g8|3{pX@+gyRinaKs%FQ#oSA5MUeCQ6HWQG+h;J9ksLrjQ&p` za$~IChFKqkg!8VIG9g8bX<0lDPa=mU>^Tj4)0-rghy?X!krJhoX|9E=bY0?UNy*jG z8Rd#WWe;Knf<=E?t%C@iYh)=n9N}KmCQyLMXQe8b9dG~#DP?YRXVLrHlIXCmpfC;m;3f@LKSer#MNp zm45ddpZ=z4oO|WZe_-I%G|2=GoMrIWWI5NDZn&E8lb`=XBTV5i1;GYMAi`6%3F4lr zQNmz!pMRrEm?5|g25+>ncwTUk0t2}MnHX-inA+I%skN&NZEHTwixZ>SQcox_f(d5e zMxo9!zE?`11B`^v6sp+5d0=gbbT+o_h~!WmX>wddZf57q&UQj9_q#1Mul3}^!;Xa@&O z&~kS8WP<^yZ3#cf0KrKH@XVzpUcY{Dg|FT1!bR@UG=PB(;s!@TX<)NBelx@m=>v5v z{2{C`1}+j3wK4?43LIcUAe_L@pk)|pQ)t3~{c-@3y@1brw%@Bo*jkfgD~V7y@2mn*`z+9q)=wFj@QEp0feB>j!4*DXg&qLm5T9TI z52jFb#LGbMSMb3UfRF=Z@PNyKYzz9VhamqDO8Z&x%N~@sH#R*#(Hh4fMQqnG_k;W# z-P|z)6Os^!ANbwxA7H}Mr{DoAjN$1+_(Tz!VDut9-ta{j97Po!O^QLGE6r~y%Y#FO z0%HL5ohkXrT>!$m)gU`ZAiW8f0r4}aAqJ{^aVm3 z!B^yfmL&mafei9Z)C(kmBO;lSQ=HtCfM&M`r8ya+kF{X6@5_E=XSO+@hO*Eo~7?=SUh}x{|SYHHzEw}sI;9c|+@r_+fD%YR*DOI9Kp!Ktq)UDk zMaEqRPVt0Zv#*&|u4>7Z^i$7)js>0)Zz{qTFEv z2OA11W2*Ech>lG zE$z}Q-rQD$fxH5}DrNLQ(Sw0|(|n3A-_O54Ws1&`038Z65Fv(Z7tHnocjnoZpnWjy zl>gc1EIv7YzGvcz?=5tce=N3W97q^N=a3IX41r)~FPw!P zNE>!{o_7Ns!9tCDtgzRP=p}H1Z6TbNp+vg5S4AHi#L(Vw3N+&4mR$Z<7kWyxz@7~@ z)NomI9hlc6kPe2(5)wz$2jY_@CAkKZNtSqJduogrFIN90{7B~fF4Kas$QaZL5?Kc|9}Hknu;n& zLj|pADW?mlfT5mBk{Z>ccnRBPOcSDjYO1U@`=V@L#`Xaf956{@E??-P%K=zb^3|mw zmKWQux~|uxv4OD>!>K5?y8sk|Ix8<7q$!xExd7xOgHAo@Lggct08lBW#}W)cgFqro zn-uFA3a$Y)xW>nv?g~^zyz@5ut%tQSNkvVMaNvvWz+GmaHFX2ZU??Anq=bJBrJ z2+{1^}B_U@|3yJz=RVQWG5IE(pg%T8xfd0-qa|cto=NL=F*L zh%P=*I}T>3ki^@IwIm5MriBt%1cW4uNC~d}-6>mw*nv-oU_uaNMT?x08?T0wIUdIF zPcZ>ZMMjfDRq{t?Q4HqGv?R7l)S!A^iKBatD9v;+Y>KtXOw&-tonm^^n9m}WuZTCw z2x;jsTliMW?xRclQF3aIwB3VF0~&BfQiHwWU0SBZ|4$tSlUI@$r%61?p(Vx>jScFX zJqxv~clKyB{bba6wkNq$NzssTEayRw#1We<)I|bIpEYU7yvz4L~Pn%BtOsmup0kc?faSEk$c*4HXE!Mg_H# zI>I8^3|Bj4IssP-b9e)-6G0pGn#6pwsmN*0FN>wk!C4inBe-K&chk~S21ku^-6G3U zU{-~qH8OC8Y8o@RMu=Wj3q?hwG8=hF|5Y=piX}l`{rcA``bYpXEss7CXjqg^@~7;2 z?67zzQpiebBdM(HF>@*t?S)iY1~{xwKdV)t{~lDM(oF12J*wK(Vx$ClHIWEr@BP96TVDhZDt6W%-CHqDHo#QR{D;s{(3@woSPGrK>Pv zJS_HBylc{px(<+o&8XF0;098f*DkW3)D(M62{|8Xz|v{$vMlx z5NJjWKJ{}GQ0`M71qCGJ7?=ZDf_Pdov01%lH64J%55#LI90P%(1MmTyhj8dfF*U`i zg%KXb#J~OSbH)pUS{aToo$(bR2*gF8rK|E6DI|f@909@)a9{!uN+-!)hQO&Qi``tP z=)R?`PKG0e-~8%KBN8Pu8;xaW8QA&K62rlwh8qA9>kJ6MnZXby*#I=p)0E7%GHr6U z9nQ%o2i@h^TOHBWNb$7JzR9c^HiGQ>Cdddp5Qz?K5CDTG`rA2xIBBS65a?joZB^{PVcI{89O2_i|KKxieDHt-F+4aZNWz}?*MO6UNjP%oa#bcQhMupX zs8z+danNVSt|F7Aq2i&!KJY55rsuK}4JkG+>%FLhm6fl}-k*hTS@sUAl+p=8mx2D} z+1BRT294oVnHXlTdFTWJVN*`EwIZy)6Vp#!o zWuhT2z4!G$HH zHGdSi5&D5XnUPw|aV8R|L;F`~aKIA9)^Y>Gbos?}SoU1EC4UGAdux!5pl}}4VTU2LA*inad_yQM46XaJ+MTZd&h!m>khmhegZn13l zgnXr;8auFVpOPj{|0r7pD22tx7qdrv*fEI;Vt-wz6n%IAKzL}8@fvOfgbY{5Bbjjp7hlSBKCHWsQNm+)1O&lP0t0;^cGGmy*kDhl;mZLwsq6J(C z7U@WDnP`$LBZfbjW#fo4M7eS9GDI<;VQplUGe(2AC{t^PPvo^vc{m4HwS^yfiJwRp zcUdV^d5#BpWr!#+vLbVG)n^u&mV*ghb^}jtIX+y85J_T?cBzvH5s16Q0WmjXZ)6|o^i~xlc=Okmhv!Zu_h;o98v&XCdzlm$s-c3SUpM)m0E!&w zHz(DxXBQcrpZTEnIgYIne*Q3yAXl7^Y)dxJ_aA?F^HN`8&Xql>B^3rUiy ziKTWbnH%XuXZjg?cRKaxePV(^N@FgcN{elZcbR8Hl#*NkaDUE6po;39GrFen(utDF zqs&Q(t=2B4W~*zE2B6Xg>bU@(>RP~b?G^7-tQ*vsZ=#zR_jEu@& zIvQ8YSX-C6BW$RaB-g2)`l)*tuH$Mg=CY5u2!6nNVljsVW?%-z6%j~^OvibiNB67( zB$Q&QCJsf0jt7+dnlJ+Uua&bjUL~>vTdePfuu5WNPA~>83kERj1UTl81}i{H|MrME z%Ap#PAuF=2ZZJ>&wz12?cLxNa7PLsWk+dQkurp+`BU`H8_Ofvhvs4SD>8CyT^QS(P zj)Js_`}wn*sSFLRMr??TSzWS|9i?oAasdthlJ5U5+khfF2w|on; zWL8>jr8i|tXGB;(0wGYhQk`N+oi;nLhzcRE1{Z7UccAjIW3@3&3pUdG zyXYFSpwqI(JG#l6w~{uuy-TUPYPzgDzgcUr_nWa2P=OSqfXCu=-5VFYD=H=XwvU3c z9IIGKu)fIKzJ1$k;|s84XTNL7Mlq#3DciqyQ>YT)iigF$t$42Co3H5Wt2JxBM&Q8g zE4tcNvT_TzvHQB^d%n@TgZK$kN(x&urcHu%w8c`BGAzEG%P~7Z1`T|~M_dF$FuX1- z#4wy}p1V0Ti;L5g!-%%M!Uu(VMJ)w8!zFqLg%DRx{I544wPuXORa*lEY`~!!w{9E3 zt6Qr1tG@-qo8uCuA6&FYhc)m!HL^Q+>v|_%7OpU`!Ycf-=tiux{|d*)=f-0!!4ur0 z{<|IQn#YTlq|!BBtT#6fxyfi~!w38@IiS9W?7&J4#IO6vLtMga{CT@dfp#1lI19od zOfJ2YoiPk}kX#!^Y{)A-aN7EYks8E|T(?jA#&C>zysAHy3>BC6bx|e0kNd?~6J6|= zziO}qXuQo$AO_g%ya_zatSrr{i_E*sG7UQ=u@=t@lNyREBy<9yMk zOO1w-&N28>O}l~&J-dTj7DwRAqq{EDwYD8C&`kU(%Cpf({~NH;D5lX#L4<|Mo@BI; zl>sxL(o{_z;YLG1`?I9Tq?pCe8GIJ$Ztyn zoM|hgv2;@?&0~GmY70O}R@X5L1THaJaQz{2ozWqUuuI}$TWoyVV=gp6U#8-#PKdfM zYQc?d)wPw>q2vP5Cv&T4pGjxd_!)4Xd&wCrEyuUett~3Iv4m8Iw8=VA$D-J}+0*b0 zqZPSR@JEN8Nq+$5GgeHY3{XyOn_-DZ+Gs1qK&Q}q|E$`kn%c^JV(v%VVU2hLUBh}4 z%hlvqMV%}$*v{GA#pbQrfQ?UuX4$fPuvGP;1mn}h?5C_7nt%q6Fun zQ`I5329FlObI9ID&3*0x13I9_m0nQ1J(k}XH~5{~ZjR~o$Z@=6#T*{f%6{AmPM<0e zc9Q5aq@L)7PM^F1k1(L*xentM<5lhiLyNrN=<(s&&aJFo1H~l+q*l?0UYfJm+Q8#E zAgGUv$=*wHa^Qj5oww-G4Bo&~=DkUCoSv{T2Od(!8?GVZtZ1FWrRzFnlnA;m5uxfW zikI7oXd@S#TK1~|N+E()dCcpyE|F}`NJn#g60po%237_Wmz2fg89=<#13g7bs z(K$6hn{U_>D9|UYO->xYn@lY((NWm&4!I=F=oG3Nv0c%+9PYsS7v|^np^iVn>IKj> z$)^N2{D))^Y~}5^*m<&qz$3jj4CP|w=F&z0Gv9%~LW9D*SgR(qrZFG*-fzM??|&}< zuWbU#ve(@0)?gLwMq93zo?|V4P2ROnZ!^DNBKFur?J?1NE{5xOf0Qi20~K%fqB-<#sq2U$ z1?WrR%^&M_zRpe#@nra%Iwvky|GkLXj`r2g{PF~4pAY&z45;y*>@bzfZT{1ZA6)8c zAght0hzXTgUxmJ3kL&Wne+du>1R6L{a3Fyw0#&%^pk@Pv0R$63r09UbfQBt1PS9xK z!@~*`L|P=t@dStt4JJxlpg>{_8a8-5IoQ%g%?JQ;^iavNrAwecg#r~(6okQ*L5B`S z8RDbTpbQ^QZCVxSQVT4ymf*V3t5ghFdydWdaqC$YPeYC@Ik72OtVD9qjH)884H!E% zLKQ0%j?o3(7=I?c*>C<-4YhOCe*bO(wZ z9ZQQf%7H{u&!rQG6{|)>|BI7}74Kbb(6!*+D%oH*`L%@xA)4EcLNr+Y|4o) zpmMkYI{{)dY$)i)18=p$YHR2(^wLvsL5M)g55n<`t4|H}mRsxrkz$Ym#44~5aloa9 z7(~VQ24W~WxHxo>G!b)aZ8zs|^syujH=L|F`aG@H$VDyVR4s0-x zxA$~>(8kCJn@|ef%Ion*GJg|tK@V;V$;b@agaEfO-+V*O&RB>chMN)slCT@9)POn+ zZ31jd4A<~3$-2I*{}9PQ8vqf}?b0lgP0P+~5Tq9jybcPek|Xl~1G58^%LECP@Wvc< zT$Ir>5%8eYR`a8*(vFV2AiyMVRn!I0Kyk z#-eDo7A;8GJMT6bcmg&^m$dMqjJ%|b@z4vyLlwv!S2ZE&O6-TIg50e`4rut2lZIwg)d09ElHW?Zq(BDlUr$t zb963gpGooC6k1?GMC$^|K3i?WmlarNw;XEM-NqSbTH02#M#{Flvz#>BK_~}G7F=E_ zrWw+!Aw3yoUhzBerMl=2Vb&c*+c%_Z|4ZfpJ=YUR)LsZI0i&h9JH)W?y*g?faZ#oj zV7zg@`E#B*rkY_?Y2$jbgNrb23scAtW!tNL4O~c55ZFvUEWdLC0K_-|>NFd@yK3W^ zBYzlUggIyb=exd?=2pLUbw(E+VkjJ@UJ;ws5xy=r`m6{S52o6y? zPWsQ-pcg8^Zd&x)Q}Hmzn9=pmh0oxIC|t>nXH>&^ zD>OzeV0Z~MF_L(%TVOB4x0{iD&xw$7k#sCaJidt1VV|~PI% z|Ng-U=+L6+ToJadeadwuyWFlMshCT(tvY?=nW5-qHI;1$4&>7wJXs_@QsB>!(71&i zM4=5|XhRfsxCJ!0Da|c1qJYg(TRMOFP<6gr=(x$I0^n4_!X&c664pXN9bP$Qiq&W=qOmFDMkG8j*`?;e z6OpJZ3f*y6&1PapUlH0P2^SFn+;OWZkV6%;panC%RyV1g;kU~8#hq4FRW-z_Y^9gN zbl8CsfWYl608s}!qyw|I2w_fT2*%oJ1PadW!*kbZMz=i-tPAQ~ay12oIO?iR(mkiM zlp(z=T0y*kAZZ?aK?yrpL6+St1TcLxN^o?mHw2nsR+~>%MpYQlFajEIY)E4a1AEcJ z@Vlr$;EnWweI9;p@UpA8FeUj1El>gsK8XU+_yE>CkPBW;R2A%4X}~gt8BAH_&H@s( zf6&8pHxW5e2{js83#7;f>^ol%J1t9Lynz^Yzy+8LLC-k|LJbIQp#NMa2YJ2&4DdoC zZzb1*MHZh>UctN^V-|YTJ2qJ*2Lmy*albzalUqtq-whA>1-g0=VL@L0k?KGv}?KID#(O%}NbdNjw~X#ju>N#+imAkWrsi^5m}|JcAJ zBbH9D%mbhN0@hWNkn`PK#+MQrLxn5+ZB&av)m?l%DWWparE2xr%&c5hqHS)nibdZ^ z7J0yHp>uLm?rWBuz~nV}UzZ4Owxg z4sfg&E0_aQXr)y^@UfD=a7X~*fUAmOEiSz@wK_vow`OTkO7q;|FFi^gYc?f&6B8w?A*f~ z$H&uR!0MSVqYGcR;*lGgJnO}G;LLrUV#=wqhA+DT0G`x4w0&8hzZ7Xl44Fz~{JQm+ znaAK!`)2uFO)x5ZI{mx!aVD%=!kYfU8PC9;9!X8)334GH?@;Lj`9%36NvRWH^A~hoI{);djNrhGP%(xX6iZfJBtAnzyO>+ z`!GS+1HtpNh!_YoJ5xD{sJ{o1l*)h(XuG-_R_iw zs5NZsIvgA)&Tt4gi$H+eHv>GmE2Jde@Cw#zywrn2|78Oz<=eF98;($+z={w%;rqfC zSV2elFw8rvB^;$in>wE=K=^7yDYzCrY9Kk(zS3g2bQ_ENV+?WvuqZh~!9zBUG9?$R zIGph{W{HnAd_qxdt;3)Pv$~ayI>RNZwl|VEG&B{SvyeXEHWAnYtOKza?7zZF!%}23 z3$(Z(u@_D(zdZ^nPT_$A0X^X$xMLA4XFCuRSOOTx#eKn@PTav}BnzHnyPi6~+}k=; zjF~{x#wwAu4|uZn$U|t%h1)RzC-XyoYr_g;L@2B-(bLA!qY7ixMxq#^BcOp03C2W8 z#G8VIT$a3E_bxWK0KeCbIO;L7iZiMhx#jj zv&pd9i4Z^{!oV()n8lQEfj&qwAIJqLwN?vrieUnNclR{lt47bcl=AeNeuz@N= zzqAwxyF88;paCNwO5`)kehkcH`?1+LN>CKXU3&|c+{GTc6Rq@(*b|}A(~F%*L5GaY zvkaPsOqH3WBwO*UeIzBtT!7FJ1NW0e|7BT-;kyAs2mw*U8s|bih!haOVlb@(mrWd74X2JqSLk<$Xr}HofOjJpRsY>Qk0uZslOH8J zHLZqNGe@z(G|@vOiwXTp&d=$;HHwl0aU%`dJQUNlBq`NfPqLANUb2SjQCS5 zgwapUQ(byOO~DQ&D1tF)0(zZ-DFA{A^%n75RVeF$jH%Hd#XTrpjr7@r=JP*^{8imk zI@;(K_~AeWc|GC4RTDu2|0f6oFo*+;)mVCMOne>D)g;qFQK0{tz&PAa5%p2j3Nd?G z10q+`t6DRi`k5jLq4N-Ps}tf+h$e%~XL(d;lx$Fwi8Al*Q6^%`h(YlTUlN z_2f4#K@C^SfHK%wtmRmZH3OdorNkqr6o8UqQc2Gf}0Z}-d7zA-L&HP4zaLnuw z0ePKQz0F&W9fB$77ga@x4yu_OxYkl*#@ZNI&Qu`AZCnhxk1L5tF9{N!%plFpTCHUQ z9B|gJMNCdP5cjdh|4}+y9_3buY1*d4sh&(+bmc+(tN|pjUFg+X8gPOhRnjE|o=m|D z^pwrPK-|P_9h!~XIh`OFh}&j+v{!_(%gtQ&%~>X>fuCjA?Lkc(kO9E+MwCriVFl8x zkb~YMU)Z(C!J{CP0|GpV-u8W8C(u!q1y2^RU*uy{#Xa2s9*q6v-d% zAY;6J-xcdrqc9o9Ovsdk0HbBtPOab;ykOPCNe)PYkJ#esA_+dgjWINEp*Hf){YC$t}#?bhWjA7LC!e2IxQkW#gk3@GRUPJSRsY&wfb0#xn= z126(6Kn7NB0yL=FS#1!fSTjDfuP#JgX(^KLE6XYrCSKM6C@=vFvQvhI5S}noQ<1fs zK>!&z<&9+mGw9qP#@hEKSB)emZ85zRIl}#%)w-aY-1t*94Av=3ltJUZ0*wHf`y^eB z6MyxA|C`tVAGp|!MFx5ngL~%KC6G&&5t-OLiX==z21#eg)a8iK9lqn6)O(|DOQUdR z*(10%arH~dkhL6G(M*zO%q8S25M(Eii-uWQhx~y1WdR~15QW%52fm!5K33t=HJLDx zU*W~h>pU=$HIsCT8(4yiz1S&09WVl}Hs%IyG&Z0DwjMGo?$*I1Ql&)D)|r5vwl%$8*s{4w z|C!iAn$C+v!w!E%%^Uy?KSQGQgFRoBD4#T%*Ote)HeVb(=)Mqv{~+0&UfmXf+UiwY zgk((ADDKmowIr^;M7C*c^pf!0M% zt_1yNH5Ca`dvDl|+#Pkv9_wvAX23>NUWP!l{@7~*`43LM06HB)71<;|!$3Lk31`tc z4H>_JI6W6{471t`^<?uxTTR+~8Puh;IM#zZCaQ zF0{7MuGt8c1aR-ZY-|}uT>~AyLGME4MTsOx&2vfZ8#GvpvUjbTi#$8Y|1@%hu1Gn) zjBA+q0e&iKw0)PP2ykj;{g41opo z+L5o|?LwIk8C_-6_wgp`-y__AXHSrIE!B>29oC-Nmt699V1eN=|$V!)T$M&8pn&v4hUxh8KvG(VuxR9LZF@nU)B|498{8V{>arPjS( z*Jcsipf7Tycdvfaz^Sj%Q+HyIJdG`9`q(zsiZY+2FE}R=0dAlDvnQkJI%`Hz<54?4 zBIArZ>0#g}-iW9A z`O#;Dpb&<#;3>4D$dN5|0&VKlCuIV3;EQXek)8Kod6<;z+yKZC}5D182oK_^{#ECDkx2k%CIn+!!%aq<#7_@63-mw^r*H zPSztff)LS*`nl@Wy|qS_4f}e7tsfw0hy0m0Te84|{{)L%jd|k=)?4JGf_e!VHK35l z%z3AD>=jey7Ox*WTe?xF6?+B#WFUg!`G+8b4H|fr6lgJJmUr9zH4}8?F_;*E5_o7` zY$3wdU4_MAaUzPxS-7BvNa^N638uyM7Kv@C_aS~Q29_6#|FLM^fI;rpMT$=x2-I#p z>Nt@?B{mczjun<=8kIRNDO_Yq`siPcLP}O-1xaeT|72Z=wa{dMLFNV{j`y{BrFhf@ z0OFQsy%!;jcnRTwjtkugCzDhCh?RgJZ~XpeU92wT>l^%Rzl_wiQ^tsrWS5`OV zf==qWft%wwsG^Bsd!tnyQ9n z#wsgl!%cYWi)?b5-(bF)3amtXrX~qq$R4XpC+eF-lh)Y#&4)2 zVtVs!al)+V%+u+i0Rb&@dxFk82lpM$KzF9!${wfrGSea^{aM$=8XC3K$$|?hwzd5l z;v~f0Oy|TZhn@5QHE)ad+JMq48NY(wOxcldKNa`GUH>b1!9hE!n%|2Cn=Gy_C+;wS z9TGM-uvF{#>e-Helr`hHhHx*%3nPB{d3@T8B<82L%QEadhm|*+Z3kZPw^ z`Z~yP_wWcePqXjr>khf)zP+J{~_HAs4Z6Y&UCnERfH{+;#i&#RW{&B&na!= z7wsYdK3>7$1_lU%7=qxOE#;3e+FRiKw#OHLO%HEA5})Lxvo~PnfCwLu2@Hnjy)~4K za%PjCxAtH|6s}85yi$P<#Lxp5m>`8SyHf+JHZICgN`wni;IRyr0E<9$zr_2A&WM1y zi$VtWsC`|ne{utr{cvU-)5Qvaca!3Oc!(}F;D81;u;9psw8YNQt!Gnopa@q~#@}Qr zdP=MxwDMA__emrM>$4)kILAE3-H42Rq@$81h&I9zh6vD8P7EOVB^3DJdCiI7)Mj@_ z*|-f=I3(TLES5$!R+5wQ$pI=gl!IBeaQ~E{#E~r@*2v)D%T^lGVs=zVxk&M=X!fIl z1#?hCLb3z~Nr0vIKBq?;9teu;v11=IX22}&C1=C5S`TH2!w8|Eh4aZ}z1#;WCQ^o% zB+(orVWuWqvJy5!a3{}p@H}G{Pn7bz$_U0d%~QGrptPanB)y5R7<3Yjz~mb&Y2w5< z!lZiyoem=5#36cCk#;_)K?`m`pN!%R3HOYp%5z`1Bf(6w0Y8!~laja40%| zG8Y>hlA58j=%SW+(H=?ikN$+;EQw$NGq&gqT;PHaS}ME6)sCq{?bJYxN<4}{K?E|` zfmLOxPcFnyZ(yYASAfcqqW%t^F#k;(8`N5$xu8IwXFX*OHqgnenl-1Zd(hGr=~EM~ z5|E=BLJW5BQ1a{(gx?fwbQb5xXbv)=Wu-_C-pI*`s)hzSKms(Sn$D(`khBp=?382_ zJ5>%=YLz`~M`OhUYYrBSh~?*1XJZIjWPusj=wN}CU_lu!MyUSUpckKj#8DDcrjubP z3~q8!47 z%1}lyUV+;Mh@rbE2m%b08iXN4wZBSj!4atNJe=0?s10kbI!A@fyz0=gEXx5B01RGD zw$^`8(?l_n0gMp?Lm2tJ#Q$##*#jT+AP5wufdM{>0s@2O2mhT5Ge7pyz=>|h5s`s2 z9n33b*5C&;_#{Pj*NkUKLldNsMJcQ?V*U|{2QED14G3(>uUg=ROmo3-E!C*D{1UR` z2}x;roV%B(VZ{vQ6(*CgKMQ*VIl~afGFm|jVF;rXq*#VAiqQt^K!hiSUJHkM+50AO@bPYy&1_G6zi10V*|C zh8Y|htz7D|0G)+R0z!C99)M+3{YnuYkT;Wb_Q(x>U;=2YgBWgL38_WRicq_(47ad? z8klekAdtW=Vj(tIssF%)DM+_7Lrj5E1(0q&Haap1#K60)hcRD^#wK&-6_7n($?(Rv z0TwjII#}^!Qn=$8rszp2sNJzLFd-0AxWW|3&;u(3!U{wn!yy8}1Q|@>+EZwA!>{0j zi01$qLJg;=1XuwTP=H)d0_Xs7vIb6m)XZV5R%VZI?+)+hztAwaZ&|U9fEQ-k!H}F8 zUVV!nM4Sm@@W8mk@NuV4Aq+eSL=l>R?IMUg<3(U}CZUJ91<>!HiJ>1{h}!*hXz1UNkqO8vnV#xR8{n86BFhXNUxUQGLJBWNCQflG*GrNs-X#Nl!EU;X$CN! zj39qaVsdk2{O2X5x`)DApl|W6<@rt8f$=Z^WX&nID;ogTDKLIHz?30 zGDzzq0+fiJ^ZQ*nyjdPV^*6=!G0gmuSWJUVl!6*2o_#l(Op0JIS?{6-3KD>UUSL5J z6v4z@fyOz(wJo0$AOpmOfDA~U$T7hZ5Wy7~TNLcTGuZ%qDM2R1fEZX`2L0FI^+XVS z-BA3%y%@m_c+v@gU`mw1QxL=i&`|G{9~IDGzNFuwn4X7p5@$KqP661d2}7v8!Y~-a zGt|PfQRErSIRFV+5)Vwl#;rvU^wjjR#39WViYNgVCIANvo)9sHb)85Oq?->Efd*}W z3bH^74Bj050D%<|>PS@V5XtCO!9>}B6C?ptRbRgq$ZX$Z#v0E-R!=wi5GLjwyCJ`PAw1B3`E7_d-?-~fRF3@}@; zY+0qx4jC{P=-jDui$b5B<~*{bi%!v?bA*1O!!+noK}nfPol3Q;)vH*ucIpMHt5>g< z62{;lBtyzv2QpS6@nR%Hwhy6*Oq-xCU6K>-hTIUsqzD0dXEJ!%GG><@Ic~5}!LzXf zEnA}GT3X3cWu;Ls`=Pv|J`Sknv^OKg_+cuFHJ0y`^V=}qm9UBO~#@JxyG3a1Rxjo=pY$o;R z-cJ9eN7#lNLZO*{AchDX6~2vx6B62;aRU+M?E#+}l1w55Y~roJVPncU#@+=Df>dI0 ziWO8}V_I}3;*m&3Rh?ctz>tFt+bN+1i5I@7feK_vQR917y5JaJegXDlVZ}kwMXLTHv{M(ViJ>m!q0%w&^H!Z`rj2 zR5qnx!$%k7HszRPcDd-429oKej$vYSp<*qt0Vty%KI-adXa)aPq*R?G5Z0)1QOW6# zV3rr^mU9&F}lKJuQoecgOhC}Lnm6qKy3<^;8wx};~`oXj2fzEQF!7K zYG{wdQSm_#C85yZjT}1X?7UJP`p_eAnF3cI=`s{i8f(1499Z^Q@UaIYI-9U8ScovOds5LV#je^b$X{G(49+;; zbc~#|A{RWYm?rP&@P)jk3vU$@!|dop<~>4U$KZrxM>ybgtT7$EDytJ;;WFw1!>)y@ z@|b$=>KGwPS8QP;R%3bBHkQ zBW{mF4mopQEl90BYkd-z$_gDANaWfkHs(erUHFlkVoH=y9a{oU)oq`~M_H?ODtp6w z8(;y-V_#$zg`a~S`sj|LTM6S<$AAMSi)&mrTc09aHoW!WPTtDC8{LS!z>|L48~_mU zMaMBHh63@ZWjp=mM!%*~?YyV#Ez6jnXIoa;h>wUSgh0tI z3kW0?g5Fo4E3ITb+d4p7RN^x1(eHv7%%BDZfv&-v1_N90SSOAkfz-*s5nsSU7lhB)3F9)Wm>8TA)NsJ0%FoPR7DJR8If*4?60wiFhs!WwZ zcxG^fs*2>ODHsA8_VNQ7z<>rE2`U8W`BO;wY@>OqrWmz=gB|EZsZls!ZkNHDxbD>L~p&^wz^eRy83_zLojO;20+yz z>>xr65tF)-$BD1_A#E=h>{0C;QDz-LIEa*h0eK8Y%HY_>u+1mYUuA&>X@L zv<)zAnmp1TiT)~ww99M=ZfHxBBG)d99JFYZNgq4)pv*b;Xa+7RMoJgb(w^g#K4W-k z1lu_Q*GsdeLE{!0%Fa&gasdf5`~ZHk@P>lSq^h_1E^Tg4*0aux59uf=94N*ICUy``>^Wlz~$a_#@7;%lz%D?j?#el(kf?UuQOW@vE7e(!M)7lZ(Bq50g7l7WqoV+mmV zvS(@+MMes)pva`LnS2xF9P#sp;mcE*JuDJb36wgT|;}d zS0bBdN*+`dV9-g=#n6fK0&}3Xid`gE->EwZ0V~3R2 zigq!J+(TcuXi{RRiMn`fw1$n(frWFS1Z+42z%m}_wv3S|i7E$+9`S`?Sd9-+it;0h z+New3goaVkAIz92IA8;4Re3t(YoXMNuJMZMSP1Ue5M4+f!6<+6c#!e-i4GDSIc08I zRc^c%0&w_ng2QT)NQvu6iwp@9a=?qjv5BaNiTB8j5UF{_^&4imZHfYNCKz8B>1(UV zSI_?#Nb~h`11M|>*=yOzZ5W4wHw2GlNR$ZXa{M7~fMGnwgM9F%jOkP;I9X}9@lHI6 zdA?JU@wb$DkxL7hlnxn`4T+SM=xu$NlgY7mtED>$V^Z*@iohf+8}%nz2|+yAO+ylv z9yI`en1q9PlukI0@+X$1fsc5o1PYccP-v5TH68~tO;!1XJK2+&!y~%n5J6{_NM{wt z_Yu-qiy%do*7#oT#!?@*U-sf9s<>A(gkiiRnVa>NTG)&sxI1^?As~5@q_7IlunWqzbc2ZWiDet3`-WI>De8{S4?wqrJ? z2Vnk&c2b#c@B}y!Dxn7=oiy@NLN%GpbbUn$pk-*7*z=1n_$*f!emQ{xTowbsb$BgW zI!T&7G^!+u~6l?oxmA)2-c+@dX{U(IkV>iML=FCV39vIWe=Jf z1Y=7eI2_R#p9}+=^eLa}_k$ylq2g9lhq#La8j2u#m^?yz*&$jj5-RSwf+hb2FWCm8 zF)EvpI*B^ATr`!YdHSMRig3diqP*v$!8t&}=msrRo7h&4YtaZ+A$ZD+RXC;d zDW$JDn`s~crUwL000waY24r9cG*AMuB`_j5l7l*&a5<)TpmtdB1|2DhQYn&6x^EQn zoOoj$b6Tq>bEm<90!AOaXR_)81KR`zd$0$quvjWX)QPP_X`Z@SFNOb5u{djc6ZNk? zSCbGy7Ac@-tva-=cTC<0pLE(ec}SVyfdW9FvMU?4QA-9QcWQ+?Zn43P4%d~Mq;>d1 zaUW5EQ5S%2v|$~GuaZfJk2kU}c^f|tR#Z>hFeE2(2w7dw!$;tID?+hX!rxR5C;bE=lIW1=sqA+TD2sWt!( zXO3`M5|@)vw0U_1#I1c}0^mxyvfBhmu&w)wu4T%nOj%HwlAmYmk7Roz!b&9$=aQ%U zthIK4b~(7D8o0soq(v~hlRLf2xlNObyBA4$)Y*fXo1xViTb2K5c`o2}{m~W~D=Hu> zfNFGpvzZ%+>nmjOw9-4h;W`#c3$XV)nGNKxw(GmgMW%Q8BH$6S;`@kGqPGuHtry!% z-&;t3@v?9rx$`@{8F;;MYQg#oWG1V(PWQV4Y-=wx0IaD}F3LB^YnAIHw%aSgaXY&i zn7kV-ske*00PJt#fp2#gOiSBbOf#Y-0;R!QohXcA3!DP%DIW4mze+5wYAS#V{HnAn zqepyc(P^tfOl+Vya@2NQz$Usw{ITb&7iG}GvAe`TprZ3?9W&g&Y-?z}6UNEm#X_l! z4^hM762nyZ#SRt3xtxMo3#LEnZ3)sDm-yooickyhw4j93{A@aRLxS1 zTp5|9-rR^#E!8t221=01{A|^!rX|q2)vWx`VZE?&@~8nE)tLgtcp4Wx%*DaHMj$-I zJ(xP{q)^u2Q%ov;d zH-(KzCVQte@E@{z)(@@21xY47&{z*pwKo4fcq=g@0o4V@hLiDWbvpurAXft7$Zf>- zO4r@musE~=W0Ct@*`IrtIYHBYtsphM(Bf=P>Bj*(HF~(S1$Kws;GLC!5k>8c-_obl zvQ*X7%6{y--}x)w?`hP*l+o1f)5mmN^t?B{%XozW&@doV`OLeWj7Cco*BnyZ^sSY2 z$pb6MWy*2;eo!^ zjzKUSeBpN)+h#LI&#F-%N4GOHUk#p>8+`=B-P1(bX$y^^!wto^=oz9rX5Sp>X zx*fU=;1mUoJedMfrYLyGP!|g5F7YIl-ZD0LsVxr1GM+98P39pnEZITpv_0Q@(pV|} z=RwsuR>>l8U{|L78{)$*te)AbZ0*6!9-zg`7LB28)Fe{1TBiEB*uG9YZUW&RgCJ)E zp~c(oZtxh3%3re`)eF&;-0l#6*{3Ay|Eu92o1Dlp>=Z6lL;wdt(%3Qn-Ihrh&kfC0 zI0)TN;n1FWQhJ?`H+fbXwg>3$MdA$Q4HJ#Okpk z<~*Zi=%1vTn)-q7PIVL?A2$GAKETUs+T2=S>!MsT5Z)=vj!i(X+%@Vz*^!)$JBdjotHp1%btpPb~JBnE^mbi$R6DAjsioOQb?8t~t2k=Fpik zP$Ym;)S$@&PE}HbxK$}ojsq`X_*i13S&<f>py>y~ZUxIHd>?EG&p@f!4Fzl5E>j9h8%#2_!dU9L+2A zMh+UQPgV|^k){7&%Y=)LMl4Xx3lVp#8jS39A!XW0GoJiBwz=u8m>s*J{`gFe=@@&j zq?uf)^bRTf=Ke~Ycj3+-LP8!m-Z%me?*X^ptl4>I&J*k#hif!3;~cs`>?aI#LaZ(y z?%Iwv4~FxJy!nblOso!wvk(N)B-0Q+`4q~K1GP}vZ^ZjDJg>s4K-vMjAUs>9q^s!u->j|8ef{w(x?G1eIJ@30L9fl#LKYWRlGn1%1;w0OZ)rg&XMHkwy=Rn1PE<3FxyhH7x~^ASE&S zlf59_6vC$SD$^r0I4hNOFpt{Y^a#di2(VF#P>8{UUJ*JqiV_M{)mc~JLX=EK2b5@t zDMb_lt6g@092@Ilr>LXbs#D%mGZ}S{bVXpMZH|HFD%rp$tEiJ zFyIAaGaHr#5WPLqsbp)7C{`**&}8B^D%NDxMf+3?V!RyH(Lxgs#g}8RXpq2Unmiz4 zDw<>nAqEIyP>ll{NTSwZG~4P(;fboW(}7cBStb~wgGr^BVvgRj0H!7G*jC$=mDgvI z*P8zpNEgc@N&_Dr=qa|99|$6beFYHD2M~t!dEtzu+*#pBB{L=IW`MEV8@#Kr8y8ZX zUfR2xp=LGYk*j`N+}Lag;mVa!kb*9;hkybO$kk4j?U%AUQ9ZMP8pau6?!Nn+bB-~+ znqc_$J2`r#))?A1e@yg2SzVqSjzC{1l~336#o18p#O3XTxJkjK?qf>N8}HJeNgnlJ z`d-~*u3)DgRl{Kgxou+6?S4DXc@9~_!!=N;K@LJPzHYrwAKmWf@ouJ=S1e|5@Tc<+ zQ!EpSmv+ptjBi;zx?YDGc0h&POI@ijhWp@Wy5yD4fqILc{c>bIaQ$f`-O7OWwkQ9u z0Vc+Gm?KNL9;UNIgvJ)ZXkYx8M>+_;kaVb{SOGDB!5sPKa+fJwK{hDB5Pocgzf+F* zrUQ}+jf92FdmlQsfx7m|kaW$cpWur3ItL-iQxxhUTZS0Kr|r;yEe{yy zsD?1eU1V;0*q zhc@hhjB4zXm&2&eGNqHVK;;LC?+PUV)48q;b_+sl3t+4CXV122rgMelZl3SEO=55 z$knMN-ZZK?C0+xam%QXLArdNOX-j<(2_{JJs>h(IB+NQdic-}&_(~*bFvM0IBt#4s zC|C_Lu(BU)KxQ}S;0<d_DNRFp`tK@yJ8f*G8l1wjyj4&X3@7KlLxNXUQ^hG5&O47D*Pc)%ML z>)E0x1AdQv>?$Zb*;(Wvl6J@}1UD-?^a1x()BS9^R2d@b79|M<*>24?5Cj?{Z~Pp)hV-Oj4% ziWl&$erkYNSp8r{wDs<8cd&%o(g4FgfE-Ep2@)exKSzQffC~X&`#>kb3C!0Zr z@q-P>=)ARnmL7B3RvJ=FGr8AsLb3s$vN&FA|%DkiJMq4cdZ{cGXX;^LBqP=MD}s zDCKNO%$O>8v`_`onxTxkjrr{4l!ek;0y#10z`N_zfD~@}L*CuXhY9KFw6j8OeP%sO zQXbT~+ykg1ZOz__4|=o~R6?|z!WOuw1uBqU#f1y6-miJh1Zvjp^f2B4GFM-H`XC-C z1i;oX&r5%zOL#g-S@b}hy&>-uZt_9CEUiFh+im}kl$Mu31~bwqvo?@%u@m^;siHTn zRbOq^7qIXxufN0CX z*aN?N!<^CEw1*J65fqABnLe=lwd*P&-eJL7L4ocvsva}H07O3yyg_uLzz_5ct#OwU z#6lk8!SHiB2i%b>F$3^QGa0lpyW6`1(82!{s5(b@ivtX~cLBhDJHh+G4?R@6uM5NB z*#HjvjZXuL_9Kt~>8(tWH?wgBD|ELHgc{Zp!Fqc8*SW1ZVZcG{5DmbMicWw+k=h2 zdVu3AKiUJguq%O#!hsrKL{p5!UL+s{+?4D>s{v~cmsmmmJCPfJ0T>La%RoL}S;Of# zy$`^F0J%Zf(>?Ed$ZniS8vMt%(7XR0%16W6!*T4zDp`^6*aCGlNQtA664-((v4I(Y z0jtx#F(Sv;!Nh36A7ms(T`NY9oRmBJykv4l%aBIV`UxM9fj7GWIG{IWlE@HhM*+IK zn%qa9sKaZ6Nh7iWVev_-fJIl?wmb=fBPc}y@IaTWN1YR+Z}A_GW5xWK7JdXHHK2=? z83OQ8Lt#oS0ceaIls%awA;W7yDHIu{oF|T?j;rA|cXM-n+AVUjw_)D0+WI!;WgfLlij0f1$kgA^cw zPKm?NETX{c5V?y1cr*bMKpFoV$OR3IK^n=3S~N?G+!WK?HWK^GJ`n?zT*ZcfPMC-q zTttFVF@&4zNfh+Ax(Knxahwkrst<6&-2@n)J0H-2hE&8kG>NHz0T;x9rrU@bkO}fcO^&%Kk_4QdQ?Lo$&%fA#ALz{W^pOmb zMk*K)JzlV zv_lfXk+gtP6g;aPO+=}1!zS&SY)neFe9=Jdx8PqB z0Sx3*E)-PKv?m_u8tM$c2x(HOc#R==upIypBi$8Ig^$5GmN!g4zk5?vwIWMZlAf3W zBFIfy6`XqUBXiU+Cm4e`7=x93%=J3U)MQ7_fsNoiEg+@OK-*J3<)26u%)pZh`#{hV z1s*{vRofgsB$!re#RGd~f+mp8B7iDF(a{hIRt{K=JMBRxBv>75*LDk_y%;LqQjllG zqMS1pZ>3j?1%v;3Z2}o60v(7-UNgo?=%k&*0n^%(SesN;l~OWQ67p+|(xbEG3r3!> zizKjEnyuC;2m_mK0w%ZtjUCiD3)YI$!D95sVhxj$WgTK{#*N{yFZGVPV+omqOCP9M zoUPiNt=1d>0^&o{2mnf-mW))YOY=FH=0UM}S%C*|NodO(K zNj_v%46W1d6jFl?-Ge>Xq0lx16)~vm%T-M#r{b$JXac;o+`Ekf^lU3%HCGaFoSTz3 z=#$W*ZI=I3eOr`h-3RCzgmo1E(>}N)0y2*qwsxCDsCSfodCqng~~_RNYW?J!r(!Z`6$g zpbI6~t4wuPgCt*=K>_G}-u9*0eSJBPZ3+?40#W&a9|(aieMwYY3H}AP!F5s#7@O|` z!d;WO+#s6-ZeTF@1SX(byNv;I897$%gPD-nc?95`WKO8XicS5PetgWuB}lhCB@`Bb z8lcy!#n%>AVIUv^>-AtyyABhu!9D5S^Tj%5?U|Pa#qtPThuc^S6%syxTk=3)jwpiJ zWdi>LxLFsTf+G0T!bJ(E9Elu68Q*eSS5KV;QS+<}`@f}g0iUX=_=ra(1y6_~SC&#Mc$ykZ-{PjD04 z2>lk-s0j<0*XM=ZM(zU>00LyFsxYZTcqf9IX(8m<7YQ#-qvA)!u8 zZqn<^5fr9pA0XKSTnud4OnaN=2FY3mW??np~ zv%AnMxl1w9%%2q47#o0K6IJGnh=G8fRv=)4GJs@?m6^RnGc^Oefd%2l1?4~EMd}&8 zQVwJ9-HT-{1X}FAp*QO+>6_YVHn?C>GTW=tsdd+ z!?rrLt>|M8xnm66dAd{vf`Yc-fXr2D2E$y7k`78gI&m|Y-U^D2jw6cHi*C0o3E^Ni z*az!G1`F);fy}Nv$4r^U9GC&=4CKwN#Ipq0B%`#`V`k(Nsg}q5wW5ie4JQ4`Mm^dA;sKaX3X%` z@T6%O#G&S%oH)idiQ=r15@pmJP|jRX7_dqqt_-G?8NiipM8=l8&;jYhxU{TZqafk< zNbkoe+9muST~oj}=xa_ZPragN+r00;cmXB2fOE#t!4Qu#yx@mDZ0op25=QNS;U;^IEP@w;44k9(^uFe)R zG_({ro5lDR%}U8uq97H>h78-K>@Yt7ob2s;3m*cfMkLQ_AFr*S3hn{sw;IQek4{ld zjJY<&L@n6eM6@(Q?B5hmfZ2OEt_E#2-~k*EF+*mMziQh=XC1j+Q32Jv(0kVP06dJ6 zYq#BW4i@qcX66pw;5sn?*qGDL9*w_R$kJ{z9MR?T=G~xu>!!8!FU-J>PFqS1f~3;w zb`3AztS#8m^Uw=Qj?(Rcxj``}b9-57logyB*A0p7j!ZDw%dm@VSJG92J$EGXMC{i> zhs2*V;iaq^(Os35gz_rg;3O!lcLU7eO>dF3Cr|#s={EOIKkxq{!!}^q3@ovAn8_)# z2!NTm^pv3O8%FU6KX*=t&nOS3bpHzz_|Vo)buc>dA4?G!)?E{)b#Ya766TUD4rP+R zaFs;T9%yVZWl^>~u!9-)9H?!OS8qVS9%&EsbE315oL`z8SMB}BOg)+mjdlOFk`P_*a(oJl!`N04QxMC%RWZH ziFhENdco*e+3G|PFMD^Nd+FZ#zI`XBzFru%fT2u1#}7F!Ue*6BHvQ!A%9o+7T)pyAC(C08 zE@!OtHVdrB4B=s+zsH}#H0OQ1V|01R?va3vkg)ENw~f(E!Y+pZI4nTL7*8jr-+?ER z&5m|9WP8F0tPZI9;%|Kx2N_L&#^}mQWv4c)1c)3&a-eX4f*>CU5mqR~;t;`;Jp>j& ze0T!HgaZjSa-`_-Bgl{pGzPHnA%qAHEkK+w&`~5zI3j+?$UtMqgA^He@@!bqXHNLfxm5c*;e=2_mW_w2IZC{RVe@6mAbJoAQw-98D(lJB-r419~kGNhHOeH zCtNRvX_T4i#aY}yYU*jHM@JC`qk~kHVBVmF@|jegYlf*;qBuS#hj?l=YUia2)@bNa zabh48T6@}uRELu8$swzMY8oS+syf=hiad@NDUfUk;lZf0a%sS2Gty})hGe$tDz9uk zxGAA6zIp3~pX$MDuePz79+tAMYUQ!I>hYRJ7cmPixZ;{dE`DZ4sH_Lmy4$Xs#8QT> zkiXiCF0#mGTJN~~o|~z<&tev8an(wSs$}=dJJOQyO6y-EH#34j_r^LcmjNY+x zYAoiM3k$r5!zy^&?j$L*Tf)Z_Z`}W~eDA8^+lN)&S0%wJWosd-7mK{ILnv!dfzT;S z0kpNgZkQ^@9@m_#mQvwtVz@p3JhDP2PfNknP{YdTze?w1bJ!KvIw-tR-;8pl7hc`w zPbKdviPtf^E%ryt3LLW93hDYYoHh>jw!c25%>db{m5sMsdN)1sQ-2fg<$($lz9dlY z4)txZh%3cZ<)uQ1?#rICy))8RPra1Egm0)Lcg}{LIOrzFyKd5^-@Z4~mhb91!m#aV z`NC(nj`Kud*JbYLf=yN4qIZ)nMC;_r9G|_vPyPn?hZ5g6zORy+R_qPuDBY$Rp#JRm zkHeh#`ts5{c;wX=UmD~@OM?IVg3Y;XD;u^&IX&49Z-Ud-{r;sq1nll5;zLmU3dg&d zsR}pk1D^z42RG8Cj)48zT3OsjB)Sa`a5_K&5o$mLpJ}in>QhaOwnRG*=C4Q*{ME^1 z*QL5)P$Y5~!auOt3`YO)*M!Y}5HzXhQ+&hGuFLLlO?+G~u)O z@`;L0oU>wo-bKHAi2(mQet}^RT~odq!jd?5%v%Z9Hb-*V<%J!4r4{KmH$9;MMOySq z7@^03G`6sREEAjK!e~usosn;o;ecOCAdpTbC5CGe z>BNH6fCr+R=|?F>!Ofu)o{wy5xhgtM$dMp71F3;e%cW9n22=_Yb*g2q**vF4^{B6r z*;JoMof}Yre`Nn%00)wQ1Jc}dSO|n_7V^r7z4A3AG+=`b2n0tPNT{WCUD|09ltZzC z#|Jx@Sz4VqO&%h(0|zB$V0S=}4h)D8e;p+$!w1jB>hUfl8i);?6h<5TUjY zD9j|5O`7$<4TjKx8wB;QI09Si)2S~Ugk z>uk!?fDv~puzR7>8oSa1)a(<>>OAq-$tqru5YMJvE#MuW1(P11B^JY#!3Y7$rmL+Ge%lh^|q zlmV-;1z`UHQj8%5+rky3Fhwb>!QeJvLrY%OZg4IfAwr>5`%H?ZtJ z&&Zl$2!k3CeugkuK?)f|cukub@W9%`yk!0uJYYfOl?NPN9gKIt+0~dafU(EZ#fle4Ojvt}(YY-i>aYO~nP#lvbOE1Ie40AsADz zIYO*31}=nDhFe%c4NSNN5OnfeHN-%*OqjxlUG&%#5P`ZJ&5kh*YF*fM8NVff>8nG0 z(ZIUa2OJh?Fnbk@b-Y3r6L`fsh`nYtkIoEC_{0>hzyvb%zzUzR0ug|Kj88CO2vgwn z6x9D9gJ)mC2U7q-4v+x{1=0t$mC3RO^qW(^#h?PdPUmZG(gHWSRiauN2Anlvie$6G z3kq-rFqnNVG%z6vxA?&noG|SVoO%r5wt~gOz=KZ|p$VNXLb>h0alk<6l5Hi?h>nD- zRxXaWUGa0G7s&t<93cpoeJe-s`U*@Nyc7f<)y^gD&oVF}7q6Z6Csz1_E0AFdawvlp zB3=bDFu@9VP5?4u@a;r*s(B~p!_|(+3%-CCqg#T(=Kp8Ny)pHijYaU_3(_Ybn7D#sJ$U6oClV=C%_! z-FPQ#JKW>Gb`Y$92H%&#C1M!j5~wo+0+Hd~f!#<#3(1t{2gn2}FBP1EUA!QCGS@f{ zPVT0>;9)n7u=9Q-;JxJjcy1k(L=UfRoF|h|^RuZ(;2K>ONNWp7`-VzuA zWE=r@q<{?^8P3Fj4p;yZh}GA*TdWk2ps~wseIMh*Km;~Z`nAC_G{Z4K+4_-!ib=)> zvIY{&0152af}qgl{lN2uivdD}406p6m{S#8p8)s(Y3P=?$Q5BpgyI~PjwNge4d4I{ zs$QdL77F;^kRjNMvEUuhnEZ``7fytE%~GKeg$pPFASDYQBtZ`nfCua#1N7hg!-o(fN_-eX1RD)|94J_z zaiW|)C}dRNNU~(EM!6=cT*Q9AKV&ve_;e*$k9GD8U+7d+51P~%W{u6i9qLX5k@jUx6bM>soFllgQzfYY+nx)anj8j$UuY7V^#L3`M9*{ zmkr9~*xK+Y+=!E6Hx~GSXabgfPV3$c@kT=wIvmD55RoZn!M4$^?7_Qv^D{qa4;^0o zXx$P64Ljd{IziJ80_9NuhiD!7=ap;&Wst(XJxe-`0=@d0;K`a5*9Tl zzz!n)(}E2^EUqA8L3}MZ%1ziKrWB0p$0{kCx~{ksz130F*_ zpbiZIBStM%F|hyb8rR~w=&peW=+h*~nlLVFk}$wWv!cH2u| z+}p6d!m*%+nfGNWQ7@hBlu)+2k|$Sp^I=MbB_^L-Ra#EAN!yg_3E)u4t$9hJBe}7( zk)wk#wVQMUG2E=r_9i!30dqWZh98y4&`SyrIdT!lXG%L<$Od0nU3v{vp)A%^#Rpo- zwLSEO8ZhtwNksuF?7_4n)N-)y+vF)(U3GdAO*c?<^rzg`wWXlNhr)S4!Mc_giFX^-3V-|5l;$O77SRxaTT8{W;30_QSRB90i^Ic>^5%D zqowqcIgkrXf6fsb21eneSXtPh&)~1CHXd_EfmE8!3eWg{Ti(QeCw*;x7`-` zXl3yGTH1H^*G5jYE-b{eo&msO2>rB4cuxo!Pa1^*(b0}Fs!EPf z$_K0tau9(agh1j92&T4BBx1$;9|m0$gUAqpJiy!DscM2Py{OPF_500P5J&LPNFY318hhSh9wXk+@LRwOwtP`pazG)QFii? z0}k-UgG%CyUYN8C^X?a@mY5+3M<5Kt;+6y?hye&a7+$o*aHm-YFA&b$VryhT$Rw0N zc)6?#Nm_}wYr3S24d{TRTJr)i#IX!K5XcUa(4QJuQw>Upmc)L*P9@MFXr3wOEwefQ zo4>tCm|`pn;pBv!l$jF(F_^)PI)F|g!lsW2C}$iqu!Qfl<_CxoS_t{6O(K}GA|X^6 z_aLGbf#krLIIsb%gmZ%-s89ylEQ4e!!3{lNL;3Nh zN{YzA&?&Hk2Ov}S@V6&yQVt3{6KhaY5QGqTGzb|LDZ-BWzQqm3gdQV7tn|896YxNh z8G2s%20N#W{A_CB!)iEZdHa8u#}xoRPru**z7q&Ctc;yp&L&qJA1sBsrY*_- zoF}j)0E|GrHRQU9UCOUF795yR`v^GI1?ydgG97xM^&aofO&&Grm82s z?V*5;dqNw{R=j0fsh%K%QxK-LC(MJI!H#91wqo~aVjVz1N~Fe$W$v_2O*>nRH-_2aB+kfURc@qYYFG3gYRgHMlB*a1Tc| zlJ6J_6tv+H5V&<=|R7X+G~d2)vtAZm|S$5}0Tv{}9Op z+LqhHVF#vpqa>!JrG)caz4h#;+=7V-e$dnfYL$1e8SsDff+-A+H+&6nEeuPWT_{9^ z&9QtBl^E9F9r$3WPhG>I5dnax+;C*_MPbA=kliAZ;CMGyOw;t{lcMF~#~^}Ft}i*Y zFE`VM(Ta-NqO!mOx*2;s1a5q3TtxT&P@9C<^{$TwUFSGe28$d*nJbsO7a+AK*K_XO zsA3lCYBGIDrZIv9qienK`6H$o%AQ>bWz{_iD#G?ly|WyYvv4&^VjlAWqOF_AJ-FI} zadmY>VC+-90MYt;AIoUeuXO(`Nk;TvRR|&7gh(4izw#=e%NFgCn^xg9{|!PCgeU4G zJ3<8)siVit6Fw@8c`o+ltwg%z>VYHNr!ASoQpd{yZEN_(-$q|-oJelwnuop`w@S{@ zQgUera@(yQI2&7{gBj33B+4W2`DT4Gpb3=MY?=|8W7X%@NLoepbM@P^E^`?dN3)L` z_uPSfKqtBV(qtn!idTeBE3*+-%Nk^f1z6zZ$(81z08#6HK4N$G$sv~$cmO)1|P_p?HJBCb+B?k`)&gh`qe)5?yz~0|552`v{3fW{B9UQ zA#fdeP*+Oe6L}blKTZcGw<~TzkEP)(1qUU}fPiy#U%7&8WHx&r@Ju|mdZ?xzi&Y;S z7f@fdcZ!C2=XPm71AOiUGCA-1j zL|b;pd=#RGjq+uwbA8+6D;Q@1o>6rOCtL2ZY`BqZayA)||5Qtir+}kVdR(P@Tlj^P zh=Om%XT^hW)~8K7(r^}l0x*D4L)V2=H*c{Oe0=C-Ue<+Vg^0iva%zwP;#VS_C>~~q zfonE(S*RXBU<6bYh_&TVBnDQwzz3u=iHt^E3@0puAr#;@i|I!jC8&Qx(=ZQ{ehY># z)I|fkNJ^HDUbj70AV?2Ds*eGW^Cqo2O8y>gcvx76%_Mx09`f|ffOZQQB}vb zTI%tcLM9&|l#w!E1dz#=w;2Xx5NBdHW+%xbVJDYCHwU>eZr!&T0U(u*L|LmzX3ocu z{c?>V=Pfpno7TCOGms|^);jrhD-x%FBqKTL|JQhQp*&3EfwuyJdl;9Q*p7;clCik~ zO8^E95eM~|me-knUSedL1|nUz)7l>TF+^IyT^+Dc@(=desYweiKRJ}M44$I9d8hzoTQj%nVTyC zl1Ly|8!Cnk@stQ@ODH&CvM8dkHFj4AF>;W6PsBet_LhieM^j~z05zSQqy*M^qaj&Q z?-_olM{!{IU28-w4!JN>nxaffge!!2aCIl%r!&7|0vE~>I4Yz3>6#1#qCsULWh#aK zi5(|;q~ymDJ3Kt5pdLDYrHUP#L7*;iXk#j#X}Um}B_L=K ztin13MR}W83I;ilsON}>6fupX$(@Du7=W6lFsGfyBCG&}1RP;C0S40FU zAfTh%L|L=>hHfSRWS5*z8K}qMF29&|*lGZ$`VyNUnPli1+!<xI^{}$AiAK7=#BAsFb0DpY_vefy%CXV)ejW~U7GnhwGwK^G(J&LvD z0dLB7EipJ33~OR{0Rk~VNZ=?Eai?z;L>XDxRUNc7&G@z4=bo167w5{3N(PW1rihNQ zN{nlaj|Q>3h>d%Zd;?godYgxLMwU@Ch3aaUBJ&wZAXB#Jt(e=X8YQnyCNs0H z??*d*aX?gypoyuFy4r&e|4MTz6Saf5q-&Eqb+(an+hmA)VC02oO=}ekWr>eFf`Uku zdT6M;)T6KN;+<{x19=@x=j*pU$_B_v|N5#7C^hdp?g_1 zwE;HJ12CXArc=5Yyb>{YT9vU@3dxYhfv5pBVPhf!I3a>IFhuZGesnhy+|>hIfEd?B zs8p3f{c6EOio*V;i6-2m)!UM=_>AnRxS02f$g*~XdBXnrd9bu3$Jeh^T!}-7S+Z+0 zh33Mf600b%pRk%>(O0myn<^9Nsa1n&Q&p%#dKc-t#Wmb6a8Q`dOOUmDJsE&)PFFcz zF+$f^Dz)*xxfKy*|L}F%hQ0KAyG)lkG1qGZY$HrHk-xEJ2;_A7gKC9pUbrJK!QbP9$u^6#Dt4q| zMi(HI>)C;VnqDe;yOE*4viie%+`tA5Y%3!s9c346yIKl4Iprn-$Q-M?*Nw2JKtxbR zXJEtlvY1@Uat8c?i#VlC*Ce2Zve^0+R=CUz2|&kN16*)Vze~$FHG!650`WwQ)|NTI z8(Y2ntfoN)Efs4C_-Ld^R8V}f9Jp_F;u<0tn4x@rr?JCJ6p8*xW0T@v+?7*KOlQk; zIvTv19>#le|JV@DB#Frdw~(mIPQxM3m_#C?7J$)JBji%eI;ab|8KkSzImk`TyjD>p z18`8%nz9jhCw63l97HS_q|5;0g>6r;75plgCXF>uSrMZ|TyI4)_A9FkXt|&KXf|;; zA>GgKTraYvNT)Q&SG|b?o45@v#bOeIct>>m>7=ikwg6BpL#)PMnb>DqjPe@4YqQHJ zIl3r!vK(7Mxjp9OBU`Z z*QpK3Pb6^syvsP-s^Obfbd8xT;JJU;)1hq@Yv7Ux#HXT+yUz-$B;43uwYk~()PyRA zK#kj+|GZnG?WMe3J50z)@|?f06~(nx9A!M*mDg{J9V5%hghxH87fj!(tq~br-jnv$|}Jc+%X)~ zGem+7rXow8&y>qSBr+t7(bozWkKC7J?X~)o(3br!qLJbXz9WSiV;?TSDgz#0%s6t= z1_3GsaF7Gp%qkv01fXXs-> zd~MT^I}sfW0{3Kkkuo*EjoZmR%(mNkWIdq<%~fS2zh@5T4vd^rTdu85khAHOBa}KB z|FTEc6X+$59+Yd@2zE;VxysEba}Pj=pRHOg$;1zBD^-F&IJrG{QYFH|1+(qdnS-Jm z2o@)1ZB7Q|Ev}4LrLYe-tliOtLoiA<9(obvr2ZY$`mK@Nfk?xJ+_L^`Zyqh|)#F}( zM~cu2rx5MZP7ARx2rkO(I*RI3)8?-#0N8fntFED4@iDG9LZo{MM_~%fpbXAX4esvl z&Cm?MpbV#=e)hiF)^@A!)f_6Y6dh77*p{rrNKO{;!8tWw5B}UTX<4}Q3c;WZ!0_(g zF!AUB496f0!7vQ6065*|>fKxCN*#u_LIWXSUH#Hv`{-@7eFIBn}RN(lpY;~M^He|a#ZU^K8QHrL*RImVCQkHz zn9NP#@a}#NS#S5=5D}5@4b89&UEl0IUhbt);Gk%;Dlq#!8ugKH_YKhv4UzR#PxX^; z)n#28g-tg;?9YU*uyJ4Wy+831Aq;sh@u^Vn=nmq3U$qsYAV$Sn5Ni>j|G)eZzYP!Z z2M%Eb=urN7pZcqx1q;`A;={VkU8i3zqv3^u8bMXv&-_!51h-HJo&XTO1bPZo&|o!h z39AJoRiJ=DgHZ-RESSJzgNPI(3P@o=<42GbGh7@n0YpfYDJwPzaWYVg3lk)${3uf- zgo|)uEkmdf-Opx+3g($r^jg6~%?kEZ_-aI!2MacmQ1fBx0TNlGdem5g!&jOqTSCmq z0YJzE23ypGaPz|0mo~$0w7^0p&Jq(=irC3i;kH0_0uhC1PGe7W%}k}~h-K;r4=XEz z{RqPHT(K?F(p}jACs~Z0OJW^OI>6q%r{k(d3BdJh*rqv}Jh4HV|4*MNeJx#j?A$S9 zslFP52)U)pf_#;SG>(~hjhJ=Gh7f&rWeTztcUaUyO z=m3 zmO5pzI5RDQ+r$X+|Mc6-vpkZW-DG3jz!%ErAvb zk&7g9+m$G`7T1$^URo`^X$|l!0!;uJuCkybB3y7S(wP8dl7Wgkqp8U?Vhu(iR8jR& zn_ECiD8E)6SRn$uB#4U0G{UP60gV?hcPj#!+n@m|py+5g$OhdP;hO@uw&R=*h=Ge6 zQqW8!jRt_MB+PPJi6@8=`UnkSwn3-2q*ZxJ0gV$b|BkhhOLoA(7a*!a4XmJ4BxsJe zo_RBN1!(x>V2>;?P+-e__@~5{N;+bwdt$W}tt+U&>efsad~gOfKGaZ<)Fw$l5rBTF zrj$yg7T7;q1MuB8kiM9=K!A}GH*xRil>*Y$Zv1hw30GYW7HdoCBIfj}T;&cto*gX} zr0@W9QijuCe4D@CAo*MQ*0Pr<&wpHKD;M%KTp26G0vJ0|UtABlC(oHEw8NGpz zIKFO^R>l_Nk4HNL8ghu4Et2CWoC65&8ldIrwV&(y5bn~yvRbu47QXArLA-IQh$%)B z0#qMaY+!;QKub{mQr!YBldpeOfqIh(RM84Y|1%@W1WBIx-}K7nH(NBr7%NN_s(fQN zWdtK*X)_yH0!E&*nM^J7GM87h&-fT8lLL{yR152#HDS`pM7LqR^&5)r} zwsOT41WgAz2trA`k{-xGNIl;<5Cr<5g%0McK-hD^@{;&QvZ=xr#dx9$SxCj=EyfL4 zEE(Ve;e+Z}ON1**j?1WEE{YH>gkFJTBky&JIlclHsVK%W(AN-I?2(Usgop_?;3$1r z3ubJH+nJJw#M%6b4UI&={xYxuNP2H4nA}Az?J_#8p@su8sGZrKP{Zkw5-y*qh!Amj zL{!pGB)Ws6;7DmbSkj^cu&_(&pwhR={|pCKee2%=n5WFWu)rWy=mXgt*~5FWu9<%m zr3TzN66~1}n-%c^3}Qe-S#czBm5Pf9NN~m=W@I(2d=lyi;DSl0K#|E@*gF-zXG8H6xfVyuoM7Vo*)F{+@%E4LtR18_y7z7vxEsUSST&$$Nk~XZyMmBMr(G> zUTG(h>w^{i5<0ZHw9FA2l*12yxH5LV(~&_dV(t{`%KmL{rcBHw{5V!C4=sTUFl`>y zygIJSjYK0w1tJBPD#oV14WTP*C{;S9@#K zXW-tqsRLDSre>uHLOav}C^+JlR{d&UvzZGR*q|UZ7^)ny)6kWE;I_fk32awdI_?!% zy*HIz7e_}G4GDFx9&RZVq~TtOZhLIW(=eXiMvI(N!A zDWL#UCf&l#4r^c~uCt((|7r1`UKtZj*~()}e8M7M=i_~PN?=KccRScZwNpB{*%ocE3M#Q8DP!Z9ys;|deen@NNHx&- zO+n^a(6vjqWfgDa!Nz()hR)~~U2FKyjwG!9%)W(`H?Lo>4)VuPRg67!^BZ=M>7(j)gOX9MvJ!=)u&Gp&i5^2RFz;4|=I=lwtVm z*;EbyP*8&uG~B)HCTqr=M-@Q!Nn zK6zn@BN#t1aDw$)Ks;!`1!Mvo_yI@}p(EQLqoOW1QzOp$AVOg`?>mB9Q3HD_9Pb+= z^dPYuI06M^z%Xb*7d$@*`~d;%x%~nlm`brj(?D>$uwePJKT(ZA06`Hlwq-&=B3MBd zJU=Bg2qw@F0HiVf8zY?PgAkAbEAcG_K?x}XEgp=Jt*9KbvzN*NDH}ooGWmfxD2OCX zLxWJl|2V)i()%*`8W!$@KS;@i4CJu*@i&_zG0KuH)BBj9X}rcmLiB?OH)KF2pn)Wi z0lJez#zDEu^DTID8Q`j!MB2T#fq}Z1!@qi;;#j;5ID#fXzcoz6L^Q)btBky80Y*fE z2nwS6%O4E%lRSK*@Gya2lM5U>y_<-EA-E?rM8#4(MHuuDx>Gp;nX=!4gGCd#$%-}f zfVy>p2*$G=FzmP`V}Q_e#2IivL@Y*Qw1FIeLa|^s8AyU3_yG_YyG+QU&?+J?`l1ei zua%OL?D4)rX}eyD0V1#xGdM*iFvd8T0*u-wynqtr8L1rjHIu?PsltFF3ZVScA34K3 z|B9-`?XkzC+5sz^fNy-k1w;lbFhyeg0oXIgGxH)UiW5;iIHnvEbSxFi{wnlqPTo`q2hd%A&VoGlQliSfuU zYYE13Bmf&AM#FrB3?PG~WI!Syf}(>ubt|K1$;;%)$f^{a%1j*6`?M^3lvx=p|1z7m zz_CrbvX&e0NTDkNacn{6lYu5+f-7iFl08-L6J<;ejuXhAi!0xKwjBrwYRG({rFDCoN)A=xRT(mSJ) z!_T5EsG1;FY?qqof}QcSOOYVw(#>z8Ggm@EzVLznT)&cJfdXUGyNGVZ0NA3=J7f|1c;5{!Fm( zQ_xKkJX%AeLpo5V%uOuq(JSjJ9wix9yaCxEH#6m(ecO)Q+kn>-1K7jA@}dE9Gyyaa zgXEmSxBIdJJtkRe3^T&QR(iOek37#;-y?Q=ay<$-7+wjv0E z#ml#>dx8^8JNMn)9HCi@k- zAi;BcuPPHmVU;mYfhyxVm;Zr38{p2lpaK{WRK=5303cGubG^jtuuKbpIDEFT>I2rg z(xfWX@3KcHITw`qQ6~Ap;t0~JnAhOa0vu3OB{+i8gbj0i6zICO|Jh_VCHjhZqX^&1 zQb1KVTqC*)VlotkJ4rB4*#N`j-~u7>8D89;F3=hH`y{cmSmZgDG7vqjP{u#349Vo! zL()AxB^{enk?06PcOjw>vH>Enry2+X^(2i}?Vkzhx=WRv3LRCc?5A{_4l3{(7NA7z zbg8PdF1{c(HZ!@hU8F`7QyPGcL_GtLF+3-&2r=L#7YGyj1T~nu3QBa1T0^6*i#<}! zMgS|6imf^?_(3cn0yGF16W~;}VwN31JtNC0dSb0n96!GGC^>Af-tsLz3%&wFrGg1q z`ZL@i5CeUDCC9TdP7PL}EvANHpNs;qW&FcVq&tlzGUOp6|04=s1z0De-AcBj+SZLW z)(y|l0)a%?fa9F8?@Q4y^j!@?E{J0#dMw&}TqF*7pcoBW%Jj>EE7l>>+|lj7Lb54Z z%wA12z2hLlMDnL#jV&UD6nP7!dd!PVoIde1NrCkIBDYDT1l>Dxy5P$qwpZKP*m^K$O&%qn0$^i2 z$wgo-*titou7f)e%{u@}{8^NBU+Tj}HQCYr^1Ht}BpNV+?NCm5EETh|d#e!UiVOG<|Bz^by@g%-kxQ?tv-4adYJ8)Y zVc^O|;80!0ju|Di(lG%D%>#i=&YeEPX-b8w$u&aVH*&l%DH3BUV<1l3kzkv8R1X_k z1K1SB4DkxrBaNLzvJxCa_82rU)R>q1wGGK)NuFd;Yn`0)w%Zin!{bB?2+af#zZVEz z0KQG1%RyxITnK_OgX)MQelEZP8-#-8vr8!#%{(rsTsS;0K9GoDRx+4Lkg_1u@nYI# z&em22VjBkGp*@`RjpXE6t3yfJLw?^7j0vH!P7i`unGEL&x-Wjr%B@>7^8E+_73I{j z5AS*?y}rZP3J0}u?&Q~ ziY~Mp=mW3J)qtiAL!*~EHk~1=(W6$0jcpB&1f;6gRU;-Nk$wv>>RAHYYK4qSv8fiw z>g9O0+Ae;vA)abND>FDk5-4C`b0(uQMd@cXp+Ba||AD)6vTL$d*+8={ipo>~ZqKc@ zN`DbIEp+J(1jWH#xf4bt2$pQI&`^%PO25i1BZ;b|+A={RuFSw>y);wOP9oPK+4aD= zD4Fa<7AC}o?QrV=W-eu-bCR=?(qsau|FvQ!+7@dd6Y2M@FMm^k`JHXD4o;zygdvU> zvA8TUW~f(Y#TrAVX4W{E+@X0fJ7i<*5?UzgE@F^69WV5<-8PwTrVS!F$1bkMp2myc zE;hgB!B5p413=#tzUL0iF(s>NNDSio)-UEZuo^H=Y~eZ7RoV-K?SPZ8b4u{+l5fS` zIn9W@^x{`!7Vx7^szXyAXoO#?)qwCqTJI)Y8=g!Jr|IC%Z#o4r#&s*k6s8JZXL5be zD|PMQPA3QXpqXxBX^g{_ZtjG7j;LrWncH#Gv*)7OH@tG}`e~|>l|Ch(oOt?Dfc9dH z2G#NPKf-14F0b+i@yrby@Z`qE|Dx`%Kiy-@6my73x(i3*k4`vLJMktrk`t3+gVk04 zR_zp?$qCMGmB<~16VnV>%$GHg=T*D8J{XaeV7`m@(dIoXVQP9pA@{Gu;F54jctT?Q{5`<}4QO zcrQHp4SWDf#evx&mwX$7RAMpg8{cak?+(7<0A<|o^$MI|c`p}j%z|6d+-wI|o4@Ru z*^$5*M52phuJ+*wM1j=aW1EUTwVG%jWp;LnJKElix@@nW6BxfnIGcR0pMd{}UG4#` z_Ie9^aqbm*1FEK!MV< z_Aq(dE(AoRm*aKI)3^+;_dI1lu`g-e?nUCxi!Xdh$hM58FrqCZcKfip99up`;4)Sw za?#@jL-s_*+!-luLx2QhMNY~ z*+jELnyBHR#Vl*#DIqGr=j_yvd5v&|WC$Hpd4;eD^xO28G6*(b>a+JYUb-LBhHQU5 zZmg8yLy7>1Wq|^;Xn=#GbnV(fQrQi4%JX0!Xkjj0}Ahq$Y=p# zgAyYV4Db-*Aqj{wDXx@h^Ckj^M+W}zk%Gm|ph9tCi15%=D}(CRk;*dEVH2A@9?Ez+ zkjH?EGJj@O=;A_$3?4MN&?5roQxp_nJW*iO>eCB3dTfAeS7?iY%Y`01&B_fehGTl~Q+VOebA~4fypQ8#ie19$w2uN7(@G5%d;H-4ydzF(c^*21HXi zM8+TRWwgW%8KoEDNH91QgIGUQD4rZtq|ils06_3$XP~8);tJ^PL?Th1VyJ_K>b5R-urlSwiX)ES~&b!pLqlfGx-0WZXG!=TLM6x3fxnUYiiBQSfB z1#E0^(V5xe6`cu5{GbO*e26iFl6$;Lz#a@B(dThUWCX(!I*1`dSpsy&NVf38npW`0002505Aan2>$>#q)5% zav9jt=K#S82?-?xAV`A40RbR(Y9Qi*00Ij_isbmfLW7eA5_|v=0*)Gt3`WWvN#sV3 z4+R_XsrW?;rU-%}9`Mu2&zz%0byX^Ql#bJ=x7RrRQF&D6L!Q$w|9JRBJIV8}H; zbot%b!3yJIF@s*tyt(t|bB_3EO?$P)*Vy5@(4!*C>kSzqX#cpKR|Mejs)-ZupoYi} z4c65MunN7t{rhujSC=2RfB%&&Ah(+u-4SMh#qe&ot2$T zEADZFcl)W=NMe$kD5^(bOT7&#*bX%05Ccpd(&yxuMvYdXAet$5Wsf;7 zPy&c-5?5kIU~2i-8YD<5lN@J~>8EA7^pXo!J}Fh1LgjJbSDYzoXQG`GmZ&JC<(Z_X zU`+n$XQ0CMA_EkU5E80nbp}bPkAp1Q=9^fa1Yn)2R{wgcNPTKLCRPc^(2G%m>H>wX zoxJefU3gVsY>uqXN>i2}hCp7d8BN-zPh#47-y>P25NI!@&7qVfB~9mQ2bNM`u7L8b zscZl%u~e>p9S}S0y46~1-y;_cvF#(^US+1u_JY){g5sN?n`n%Ih1He4X$t zqj}Y8?~K{*n@2n2fD@=wN`)tej@-2=lN2ujK~Ep`@TZDG!Qd;bN_-(u%{HUi_NY%&W)Pc5F}vCT_@^?nYZ58R>ZdtIOGz`zEzw-$KV#UonzvRH`=h|36J!nM`;yQg|Jp*E~Bpy zY<|N^e1B1bPVu$0ma=Id?H86IK)d$2zkP@j%~#vLH`k$}V8IUpV5?N18|@+>>N02H z<|I*yZ@%gWCjXf6{^f?(<@Lrd|NK&gy0!0?a4~40eGpNh(Fb#1m6}IB#vCnu>l@yQ z2Dq{jm4trMbI#4UwJ&UWWo(rI;J9FwuGuW_H^?hVkA%cPSv6ou5!}?SWMGNDyzOgwxoa6%QcpWoZfCgeH zgAI027BPT8K|vrT6@DNF8`vNR2@DAmOke|6@*yN*NP-fOK(`ObV3xYP2=)w+gCwkl z12b^tk@Q5xOWsF@1`wkLM-+q34W|o9s6hp=fCKBL;0GeW0)a#*5?&go40oyKKww}3 z@F?L1vomE$ez1XGy6=^FdKu&<<^MxxIw_M2vy%r6*Hs$)8P%)x?H0P#xToHa`HS5mXsdCE!4s zOGv^DjKD}5_+TJIkY`2}m=+|=Aee9|<_`>pM!2{UrS*}6N;%j*m7IW}3Iu1Kl%UWb z?2(UfnL!5NfKG={bS)As0Ymi?RvUcNo3LvE5*VqPlu-++GIHP1HUlVcr0EQ#06Tq;Bm>p)F-XoC-!ga#T- z!4Z~tIbR8^y;P-tQMkPxg1jxZC+Xuws4P{Qa%&q+%hRSaW9QY+;Um0El{9Ue}T zu=DPWY3!W)qF69E9-}k~)7${M492gMFMWy386lw;JF6=n<93|7Ex#DbKypWjAn3Up; z1Zh!P!hnt}DOY@w&a8F{ZUCB8o48d8pB7Pm0d3n$XXi$gzH$PpT)QDt znIZEfO9r60vJ%kJ1w?S`UK#YN_f|Sm)D0-}?40T25mzeusW4~f%~>y=Bq*7EcC)qY zI+wVZ(NBheX7fGabDNY&+RiSWt57v|uS{Z1ymhZ5tzO$~JILcsT9Xfbl;H(=;n5{_ zwuRh!1IFZb(gEkevvWEXE$G{ZWnm?WfKZ&vV)I4%-JsfZ_D>W^fe!V zSpBq&L1J|^SlK)|+g*946{`bR8gkT57I}{$uJ1Kg8rGFW_=u9Obl9M@EfulNhArCz z7<_c4Ko5GvN5t((@6#bLA8!gcjwXf|i|^K^ca0CA1v=*V=q2!JSXhd(iLV&MHfEW^ z;e9Z_1fC92PYYG5yAZ(tiB7gwcV4U~g2gLuFM7!J2U8y6DX~1zH7|SR`7{-eYrgib zxxAldNBGQ>R5b=ugG1TM;3qzq;-}1HaUzxyJ(ULm26%ukkQ2IhVfWX1pkzx95m(dIFoQOAUiM}Z7H1QXDTcRM zn?X9(*KrN#dDtgrGy;9NmI5w-S{CJZKQc}mm_9gYbgwah>4#sU;e5`ABJcMUp;v@X zv2?8g1)Fz9f+u@Nw?n59TnCn9(T8IprHzNtB zC0x=2b)!-(Qv-AICP4Ck1c!ddCwbPlhIb`<1D1F1lYn8?hf2q15m+ywH$ZezFvC=E z7yox9F7ZT?6IwPBHSv-qC+BhtWHAReeMVS;50HXsXDL*0hR`KPOhSaraS>;BFsQ); zG$1T1XL1t|har@MR;VuK$Aj_pfG2Wr)&_%}S0k80f-TsD98CXm=(_=jQA_7=W4dtx|t^v8Y4VT_aWjR_!g%W*b`Hvm@GUCg*aFvEcWvTc{> zgQ_=l2>qDh>Af~NRxVh1gP7;ntscTyMx#Ux5^s4$pz0oT|nC18u~wT%z6kdX6! zz6W@r_khASe<#?0CP;aGF@ew5fCvTx*)&=LM;*(RBnJ6-2m~Hjcy8UMaswBJ2miQf zxJMmGhyQ57?eV3 zc~fR)EM)^@1p@$ecroHh9{4@!Mvv8~C~_Hz@q%?l`6gGUkv|!bVhNP|*p+5zUm*D# zpd?QMW|7Qhch;eU zV^qljl$eWkL4Lioof0U7_!*LACXl-c5x*&QClN@*qyv)qYIb>#;|GEnh@3jOjkaiw z&N-et1q4N41W3?WCJ8IHS%waHdGEMte>skyfhdP(0%V{|!pW3%MUe&CfA7g%bv2j% zc3$qupfb4z7DWbO00vl^rCjy1F{0VwiA~Y0wyB?bVk0~N zr%b0N*;{@uuu%hZwr*?(z`it`Va>xjrx<{taxgK&zi|IkI z+p1zvHmGY5es_XA>H4SZin4@>uy(g7HQi9EgZ|X*;e3hJmc6tQSmSLo|b=tF;c4-pB7et`2V9T(himA-` zvPLRuzK4-llw5j zy17GZ1SE@PlG2=?>$}e~j{tbICy9K|t2hyuwUWZK$N&4fl!64Bo4F{PO^DmEpIf-; zE4M>Oy5fYo%$GVVn!e#%xu2B-v&*n#fC8Y4YAJS$=6bG&>yVR#w!Et{so5}fDiDea z8xPB|_d70`8X`s@xI{}&eQR;?N?wG^vZ0%_rrEm+d>l?1um&tU&>L`fLbu2Jq?Dq+ z-gZI^>F08Y^d&Gkg1hN~pWFRh&OT3O5m%yvTDEhyNv_k?s ztu*(NM<>7SLz5)>0&$4LGm!%q9JXknO0@{7jQ>hC@@R!#I=~CM#dQ0zw{;hWn&%y184vQR+_o9TB{C8!X>=Qsr))D`^Zz-$k`~#r71g(Aj_6oESp@D zT#`zk>|ZEg6N^-E&eDI2_H~q6mowS9$+^C_$hbROk+#etW-DS*TffmH&k#%n@SMZkCVFG+&zbgEDw&?G=z3^dK;yj8EZGr)?6~c9wc{ed z2Yu1gna6v~!s3{R_Pdh8#V)C`yNg`HS^wxZtc)}=38u<2S#hn_0nohpLIrQ)SDP+;!$$lM1|4dlbfd9Mw$v&rs~t9qp^{ zNY2Ep(#9F3=E}pfrx+<Ds|2irAR|7WTdnp~Mx;)e8QqB;)$j%10QBB8Wtj;`~ zmJvcWHcYt{NozMisw-@|Fk>!3OxQ4dhb!r_i0!(w>CCF!ds>h-ewK+_cK|~GA?|E^ zgMHJO4X32m%?qi}##63y61{|{7?%t_sNEs;ASWF6SP{oYe-B{yxw$*aA0GM?M!!~<-}9`xSU9aPTvr3=l^+P&QCh$x*f4| z5>VTL@v22v$K?%`)LWL3TyB2!-vLc%P=J(Npe%^Q;!BOQ@UqV2VXhFCczUfCxTwe1 z3&fLI&O;vImVLLFHc))fa}AjS#Y9m@zBoFaK1=}{5)O)ne)hN;)IN?f`Cu)7^{*0U~9tB?|ZXGfNH{b({q+1FuAym-J z#_M77%MuR)$W{#6PcYmEG{Um}-?i>Md1=-H5X=F9THU&Obg5(@*fg;g7VDgRxz=VU zN5DBfsI2UL8g4*_5slI2-6z`8rw;4x%>Y^57Z3wT7ryO#i<-Y~xQji@>plc+hsyDO zsxtoTH#_NvL(5}z8vDA4G=A4WuJBP1GijUgGrjH`0FB$6x>JsvO7M(uW$`6j#_k=+ z8J8-KKH1I2?>bU<4gZg<=N|Bb{n&%ibMSs%M-?mbTRb zo}_cGc>A8j;jQc~4v*fN`_C@5joWVs`r4Hp=2LkZx<_6B(Wt4hs@0JJ**AHsf+dZy-q4TH_OF73h ziBIq4?)jgO!^v|KFM-hGp6K)q`4vv7ip&A4h3$jU_+86Rh+OYmi2FjX``(7W$^QFY zkNRRg{H+|Wl>c7^hvCWiEg_QBt!f5GVI7fma^xsGNXdF3$~=zvK}@M$zWP8;=~a? zbcWG_NdJZ$RdTxs=_7`RAum6O$PkfngxHId11;{71BeVVB(#L7Vxr$1Hjt7AoY1Uc z<)Fb5x4Cu028=sCJeK?Vx$5_{H*iMLC5Mb0`QfOCu|p1*;94+ix#Pk^Zo2ZCvp_u# z8j#F5yBOI6A*$TqZ7}Y-Q^TVGM$2$K1} zfj;NpQjI{h3?#4zjE=BDFE2joKoe3*N#ipYjzFR_3^PRSH357S@hl6N64A2OT8oRy z^YBho4|GWi5VS!2|Eq*bkvm`rJbx6){4F+aqZ^(7I z8ivco#aD?Zj`gRAzWgu)n%w(Zdn+)Tejulv>Rxb>w}1ej%Wjz z%{lD9`8HNxY0;LKM@#)Q=JA!EX1Q*b-!AtRq0|-D;;r-Ddt$M~2%*+1U5Sb0Q$6zy_VMKlsKYImXasavP-XZ#-U2`*L7e^UFy3=v3v)1o8~oq{J~+aCYA^&czGY4Q zF!ckg0MIq8o8wLbR}0EHuNla&10=37 z3tV19kcY5bFK3mm5-N)!7c$%x+1Em6`KvH4(3hTq@RlU(;0PSqq#CN3A07Wtn1e9_F0f~-*0b&;TK30($`t7JM zRO(V=#)(Kk;;FdI10>?PGP|yfSC?YLB=iu#?#)%PUuCTMfJU*uIkx|flWk1*5VRNv z@&qhJ3@k97VFyZ>6snZ4!$+5DT4M~hu^C;hP2;*c$>M8Y%sHDJVLFnxMi5viaz+&M zct|VQK@{uct0?SX1goV3D819y`=qwFy0rn*`-#lUTyAkp{r3HZt*m-<;_lNTgBY!)<|I~hTIGm#bgLF z5)1yr6p~Ti-`;JygpujI?yD(y1up?&t&CbzL>dq4Ed+<#QFnV(EK|TPVdOf;9y6E+ zBOoCe?~Ntq#sVgQ#x@{r$!w(J)8f=>Sn;XGfa$n_ESNVXk7 zW)UPf9<%l*ds$?M-E$`bh=-Lr=5Tm~APE!8Yqra%l?9vZjkxX6oHmXPO?zi$z=iL^ z`wj5~{#(Ee)eN#WDIT5BEZ~Ib0XC!{hUKPeL^#X&&CP&vgaWY7DsE-Z%(?OIQX-NJ z_g7j|_Q||jIzdw*8G?*tK2pDBmeQ&Vn@?L;;IOB| z6C2Qtr&BcB*|1jFw7n7o8l-Q0W98gFzx{7VcpCsC0)YRCE)~}7a;7F1KRd(@2N^`m(A+_Qb;l zUwRj#o*HkIe?4`NOME0uxpkUAeB z5PK9u8YH1MEJQaX5dyq;X(0hGF#6HcjqQmvGoMZ;@xw!=C-jxz>Z)j)vX^bOtI49v zJ&IA9@(ov^>nyV=$f{)rD1nm$pzSA*>+tw%=eHk75_acTppjfBy^k;!v2aD70`C;< z4p0X;h)EEl@|*?AJttIPV~(h>1vyMW4wL7+<=Ougb@b6)w`a~fssK&!jNkTn%XE`6 z-%VkiB{upSK=}dMUPHM1-pgN*$If83U5KG>eQddOja} zI<487-D5lTyP*R_z%60ALNm1fGP|Sci3pTHY?=43vX(3fw$*XKwMjv*JHf@_fUq+IBFHfq%(O3afo{va$3?wxI9H0N9qrB9!!XvA$IZ-)WdkpLfJqyggINX-= zI4gnTwLO%q z6(UeZC~%Q7jHGt)l1_s~oT)_%!6*|6!YV92OMH$pBuFeGx42^!q3MI{U_Ya~L7b7f zj9H^0sR>p3Lb*^wkmSiWz{osgLum9zme>I#P=fk+AV>O}5~zY12|MchxB2Twb>y9A zbQShUME%-HsSGzx%sYulOA@fA5`z#^83@vbr>=-IUG%~fxLA3K5x=bDkNURXq zN~^@hFv5WzfPiHT99!J20Q{6B5F2W!kt>h z;DkT;i>}AK#^JN@oG>Y}7_1go z)J}m!rT=rzA}p-I>;rg2C?ZHq2MEJ;T+r+c&*J<^dxT7EY{kmF#0!Xy)f2-e{1*W& zK_yrMGN~{WvvR*rtzzo11D8T*z#rlK|29-mbd{BZ|6DSBJ zF1%4fj43GtIsm0L76O1DI#9xd!!(pb&*@Coq%x&2tGlQV%393?#IwpW${~0uJj@dz zRZkLlNVmug5{N=l)4%^5RYc^oyr%28X+lHG!%uWP1CeY={FtH48OV z8=cbZgcikf)XB;Z7RU$^^)cym5vxdoG1vq!0M>5pRwf|S8OV$2h|z|C2oY7uSlvz> z)t(*vM~yH;i4-0kJy&kY4^1qCZ*77w@YXok)+r!^8(65HFjtDn0WsiHD2zNxZPQ7S z(iG)U?Bjs!kjVc&)liQyneP*^H7U;$(AItJSCQRUPc4E!<&h4plJW7Ol%%{PZPr91 zvy^+yN|j1X>Vcx5SM99Sjor&KT0$BK*^w36Dfj_17*7*xj{pcGJ{`*x$USg$Rqf=n zFxAf>YR&ZEf^HJka_gM(WPPY5D5JGRP}Iy=YoS?%pr|0sj{D$)x5dRIWkfdN4G{nW{~cK?umaF6 z+8Kxe14fpyNyrd56ZK^`FoROztC^QP0~T?Jq$sQW+}YPPlQM`;AIt$oQG>7r-foS7 zEBIjGRRSb1UYfg@$Q(E^FxmqZxM76Su0-6a&j!|E)U;EVNCA;FrQt9`$VEUHkO67x*!@I+q&TSH z1qCz~VW9;9)^pnw3XwB#3o(!Z18i6E(B$@2Lz?8OzLnM&d`udKCio2GzS&NX7(&0ma)SyM; zenkOc71~ci9Selx4rz@tJh?JzVJkkC4*fAb#)7mWf+XOiWlqE|tys9QUldvcc9w!4 z0A5)J0~;7t0d7g=5W?QsnnN+UBj^xt!&qcCHaIRn$Q8O{#$yZ!C5co(e!GuMI-~!2 z7F{4<0x@u8|E-X+8?*iCuNTqA9P+j*_D4?EVM&}Ldu>rK#-ziY-m|+~6qQI{U1NSd z;$Qt$yy!w|Jd7YoRSt~WzByL*m6N!C}=v_5o5&_xp^;I$eg5_Mf z)f~=(lOtt4WhX^x2s~-Mg&^r%==SA;43OW27J*HTrpO?;8bE>~_<<-6%Q6gA6$Of+ ztBGLbz(dA~22s$1X#k7RJfs9>&>0fed_>1UXvuyMjns>&$HzmIk(%sfN!fZ3jnx`gg4&4;x07` zwDyegMA#mPp+(`jati`^?xg>tJ>m$05{6v_>FegG!2s}PtnlUVj#6H9;`(fN zZuFo&|GV&&xV}&vMZ*5(0n%9t3g)Fgwot83)^t{!%~?4h$xV5Y!CjpS-yy@@zY3T_ zqkCdR%kk1MR~u4mW4%AWFHa!Ukb-2G&x>{O$i&6w>WPZ2P3Z z2O;R0v#2)O#qq}O`%{CGv%ZA{A}NLPW4TqWf#_c@ZC&|< zHJS|9sXfQd0gqj-Ich2S2JFnebk5Aii& z69HI*4mX*lc#%Qor<$tu;<1sVv(DqzyGzdsGDh$9A0Ya3#k8N*WutW@O%pnfp_46 zi11n5rvRjm?apxAi}!(d)<(VeU!QmoqgeC^=!|bx`L?gdOGlMt-E{A5Z>O%#(O&*B z;kVGmuz2j@i!L4;0M1}rX>q%ur1C${c_bGeWb2rOtw2L=H%)tc1h6-EC3N1U(L zmG-k%Ic71y0fg$|QW|s9Wcr^Ai$QyrC4Vw*k#DS zbr8dG7&c09pAzDTCcf27&G$0Hn0ZKFpc&~5AjXgVXpR4>;QPGk+1NLD&+Fnu8xM|C z?N#?l#i0_S4Y1{^GC==Q_AuyJ(sD`D=H7+JVsCj`V&WRKeh|C#*LCBaY zHMX!|l7&y3DM=2fsHIPprz9{EL6KvJ4-f#l{N(v$r&kI(E3Rz%@hsY&BFlo+xbVVD z5kiF;MJgd_SFvjE;`JzZsN23rIc|W1@j=O`QlbC$fukeFjT|X?s)!O+t=zYR_i}z1 z*KEj&g;z@X3s`C0yq)>lTuZve*3E4Pk7k;H@nRx8dO)xt*+b+Zs(Z3cyP9(c5q3M1 zrfYomW#|uvpA;Hfw)BllXUf67SPKyw0vKfFaD$416?<(z2ihLFn!uquHfLGm#0Kp1 zv(GF-_Fi<;dW54 zIAmEp43WbSyw%tu2PH0T-eQN03iC~si)Rjm6X=9jfA_?aQ5L5x^e{G@wzy&c}C|_}ca@pyk z9t|2(p01fznVMs+#G{svrUjT`bCD`TWHb77qo)<(>Z2Y+a_1w2vZ`RFtAqiW8lOxK zqg_=$9!9DoL*-zR5;@WOWPbbVj0eAGyUsTA!@1ZE&6mw(i+s zm&s<^s;TJ?=+~y&?FjCK@3~;wwdw}dEW6BRh5`=^E4Qn$%i()(pB@M?ZVDB9plEV* z>ZcN`_9EFXkqP5h!d1RO{84@xv^4+mddZHf@4@g9Dx{JIEBh~*Zy-!pv=)@-Xs)4x z)GN09f*c@-lN|@8y8&#-w9Y10x}ncmYi)s5Fsz{*)gn`zZKF6^tSD==S=_F*XjhH& zXFaoBmsTZLr7OG?td^3uH(iO_}wMRvWDF>;O2T(_uWu~y`|HK zyA-u%ZtwefTK#EIcAe|`?BlcLJ0f1S?blc=98mJ(ej9yyz+D2cAkFX zk6OR@)a38m- zMZ)jF;dd$Y$ctw3ydUan4F!`PewcT&)D7%sFXL94e58T}Qf_v6Nm0MbWiTidL_ALJBtQ_g2al5 z&&&Coh2zf zHM4rU(gr_3!A)?wCgEg2qn8>fP)GV1s77^7Q1BO`D7w^0*^i1;mC%$5V=I(~>ONfX z+C=*~$dalxg^~Z#-%pb^Rp5>AIakGs3dpf^V{# z*+ZUyu%Trn2N+7h1q{}l7;S)4V~|&HGAgWgWan=`tBPPWqq(QJVH;$-PR=65r?=az zAWIiNzqAMiC9y3HlmOe*+P18h?Gq`SAq-$tqrJ&U1u5J>R6Qw{mbsm)Z&fO=8`wai z#AOJrcF+PG{5MIP+)p!}VGCE7!W5;*1AC*3&--=jZha$?M@5BK<583#VrXrF`8D6Y z6+;+#h_C-JOiT(0!*?@IqR3N7h#vX95LNem==KPZK{4Kd4L7KxZ8a(bQ-&CC?E{f3 zk`asoM1;Ms7)2|HAq-Q*)do!9YYwKMgADVb3`wAo#C*qx_!TCxT-mW|kC241689xB zNWu>sQDhO*7;wu_aCBb*jAJ}`4-m$MmdbDoD{z1bw*Z2M1pERu#6ZzZn1Vc zgex$C3_Y;IC#=u|ARyxtOpw7820aBe$RO8OfI+WwfQ*|iBtYnSaRA0FH|d_sHz1~N zs8IjHUoq4`uhq1jne9B~g~U46=}EG!JBRBe+~NmQa6+%w@MtGM+6rK}_YkgNgeEY- z1x2`m5)OfkB3u<;QyIjNg{WIhxwyxAfT^l)3xN;A=G5gimqq^s@AR~r%28hTI?=!c zLLealz5axye{h93Tp0*6A43p;zyvFN`2dHo@-0MKgjmABzbG)m5lmo%nIxf(MEJp= z+7_)Jn1I@@g|1(7FoW@aoEcCS*F8gHiuR@f8xPLIG78{|W&k6;i&FWEd(8we)L;g@ z?)Mm`Fa>EFVdq0QcoKrW@|&2U2pK8*Ry5kqr99mLNf6E=TQ1e14y1Tf6F2}Stz6^xy1WE|TG#b!c(cWwn-qd^8R=gCo# zAO{~9o!moc;(&3WgvDIjC51e_<@=KZF^FNIn^&A9)FfqK6k{2-D26eFA$sMO5PvP} zfo|epg)hqGkv=GcMh1cd$cw=)EnhR@4RG`z9H9sFBZ3n|S_)v>j159b9N^Un*3xm? z^?gnBc~%=NLxMd61sX%zLE!wL%?}74f6dslgpte40HVx*StLPz%m5A;T@XkB^0h?E z)ma!NhygN#>g_<#z~N~f6+{b*IIxn1gg$`(*T2LeS51VQAz;1CGkPna_x1;oG@ zAe7<_iV2JzkD^AsLoo5SpO_L02uA;cgj6KmY(C`2+6#O9IfW?Ol z02lkVwHZ!3&==9Xx2!fkjLUBH(Ns&>-Z3 zr%jOA}C5g!0S{hR6%nxYu?Pcv**vCLyI2Wxnl&v6b^%Q ztYWG}7l<9|jR5tbPRbu&sNQ{8kV^%zQ}Yga;e=#~agQQUL1ROJ4pac7P4Lk{A3vnC zYv0cOBM8S&5%d4PI6>pa?;qB{M1aMGU;#H6%FkQT_xSr_=UBArB0T<>>1DuH4+Wu6 zNE)~)RtX*dH5k!?mUJQ^gL(-8o`XRt*T4oGO-Gq!)_s8)cO;fL8brMm^oS*2VCZ0F z3dHz?8m$QhVr(wD_(do6<=7x?Psqrg2kZ$6+-w5)*kCUKK(vJ}RnRp73m9Oaq=rEj zDUehyL2)H-`l$$oF1?g#NiPeoScyld4RzX=zZt258bwCsl6`RgwGveZrPwEvF<=K# zMlF0;!FmDO7*?X*fro*kZq=5jl5&t)rZ|71v{VvL@n;#L{b{g*Sn2UpT?KP)nWd3J zPWm5|W0wEsEuOJc!>>hR273yK&a?5R~a>|JA zeJuES1q@;|!ULHjMY`5{$c6wyVJqaTuWIkgMO?T{Ww7wS!%ZOTBRSmAL9t=Mh*XCW zOME2Bzny9UQfcwU@pzUBlEVc*h=iJ0CX3))7C;A`a-&jkgfE>#rO@Kcy%i*bR|i<4 z#FK57Oc|jW-$*pRAL7Y0&6bkM;v;-~(M7UW{3j!$R${nC2Ht$l4i{T&j}poE>m{nmkX{; zj((9ul;8D$? zM`RqgTN|(+pWxg35%RL8usvuXCohpgdjz5|`O#(u47|b%USI{H^ z0Syl$!9}7_rC<#}c!vw%m!=buF8qK9Q+mh?OF*QyNCXLzk%9d7BZlhz5k%Qj;gt-1DQ4 zqKnjqk&#I-X+Nj|`(hxSBvd7WPHcf)eDFUaaL@%hz@o+`V-O_J@p~8{qQthO#w8Bq zVI24X3dA6tjgdeJbQ}qt7*iG#Js1@&G^3;}sm}FzO7@jE(SGBY%_v zE~cjkWQ3Rr_Q$3sqD2XlQ3Iz4xytiw00)RM0hN#g#UEraeCzXcln&ViYEVw8lvu% z^8jY*64t;WfF3 zK*ydKC0wCS<*?VW1pzOmfMX&mso+5KqI^rKN?jQnDr`fdGmrCn82x&Ba1?>5CZVUt5;ooKpzH6F@qc- z2sB_;>-1U|vq;Y^nW3y-N-#jpKGv#GSdeHrr}pvH zpBvnOjA5M2XbugQrS{GS|2cPzp)Gdnl|L_q_Ei z#v$o=2AvG39fdF&l0KwNuv;7n#AFlY7>yYM8z_`+3?gJgAglkus-fGKs~Meu>Lmt9 z$$?twdY_hpm3gl0TqD#aqLR)TtZ-hUm#>E!3tDcFW)a|474{&r<%`YuO7sd}T*lZy zk(5m`CVpDUHI3`QfJ2KLspn9}{_UV3!53TmqXq1Q;@6ouV~kjQ zXr67M*p$8x9jqm;xjy86z=R+FTuPW~qXs=!;jPJB$r&x=tJlRQbET)*MY<_w%E}g} zJI%PVh?t-!nk>wKl?%?R#l>iSi;D1eN9^uN$s#Ofw(qV)AsJctpWb|r=u+3_16KeofSlVX9eJp@uVt_`56H0~@Yly_4x_tjWnV%W^GLup`vZ`z9RYn@q zeqG1c&b^b16Alp;W7*Y?yeWTM;K!V)?loN0qS|}%))jOMA4xuQ zoR20qdUmv9`!!L&o|c^p6^$`WmIbGP^{(Tp8c%K@C_lgtc^)9bHo*d6?wmF^oaAshXAcaN7G#^4dFnE@Kiu$YmkGwcOy3bDj>fB}3*Han zW{alQFUwCI(%5}&bdT_WfAYuSVvcHp!IQ}qF{zc zJbndVwI_F}Cl!uBVB6If*wH=Tqg(iL298DpmBdYD(L!FMSND`0l@v*Y=XUoLdUO{6 zizgx>NPM;xXC8t(Zs7y7^KwN2chT`w*mg~7CPMqsU){%YN%vjbB3voZ2aDHy`oaei zb{MMHatk;cDBuGgpl)XMFw_QO)!}mHv^E>1hEw=G_Q!k0;eP?3gTz>H2%1WHg9?B;LcCvlR+ce7Jm>f$Z7$a^^81o)F#+{YB! z_)yRBUBmK;YUfxR(uC?*KTgn$VBn1O2n7FQgITi^jx}h^cYLbWa}sE0B?EFhzy%=? z1KBoSV6|qYw-|(25krM-Wgw4XK#}wq22K!d8N(rl@qJn6bNU95ASrC>cN8{t17tuX ztHyHyHUjZCDAFZs61fQ#S(7$-lVktD1VSmuXs2vRxU#671*H@zEUCl z*KthqXrKopOo0M&Nu0%bk!Szl5`!37%Sm4O$WG)kdE|B*7qCSWaexW)RMZI|W(Y71 zRYrg_5IJC+;5m;#FbEL|Qf}p%!$+Gn)|K@nTtx9Q9nzV1NrHiyiTFVkC*^$66e=hX zo{dSI$Vr;+IF20|SY9X>*%*gK_!f~SYpwTp=_H|j$VtQDR^z0Xtu>qw;hz?11Wkc- z<@uQ#MpweqUgn99W(8>KL~+Si03#p~Q+I9LI3AvoG|uNX6JVMhs-t+&jFj{_4mY0+ zR|9Qnn8|i+E`XjV#)uc8q*ThJm0>FT5pO*@9xRX)UuPsqprss|n*SqhdT5A;m>%m0 zJs3tqiGrqGG;f6QbOiqdb2bE#usLflvRMYO17z@@sksC^K&INlPw|VhCvt%1GAcj@OAJLwBYu8fPZ)UmG*2%3>rSUpo5{JNI|UX8x2l^Z14fXgsyPEZpa^R~A8vQ1>LgG$G!!xjrVuHsuNhcx z2V#!UuKEa(>e(&dvP^t7nes9NQ|Sc5d744s23SL>YO!`R6`N786F_<_fM%cg1bziL zi!5iOZ?TC~uzR%%b2)$pm&&1JFav^gPMbxV77|imrmhKvn4U^i^rfb?Xlo|xsDO1C zJ5Yx5IbSM(OI82$L^L2sCsS+TBXqlmDrq@WyXU9M8lsVTLVjkYFV>9&n45ECs49q{ zReDoR`miEuMr6ey{3NL8c`aKrq2+N+eHA!yMV=_rPRIpW$KnI^$CIQsU$v()|C)wy zn`CU)R41AdE*B9Ehooz`lS`XG*2riN2@{)odx2F%V>dv-DmYV^c+nZEC1w}f$yKl6 zR5heEy#-=7!^bnH)DX?QnwctE_tOKP8ElNTc+CghI~7@BZ(thCk|mfZLGFd6&u>l5W{EDmh-P zd#6B)G9~|uq?X5sFA0&^q))FKyU7b)XULGax?g>>aE$9P2bi+(H@w8#S7UJk3DOrS zTCr*fsU-RUl8Kd}h9UUa17hj}24cUX=(6~mzbY_^XJwYE`=f30Fe~f6v=jlY0X!Z8 zF3}soYO21A;xpdLFlSh=xTAGz5OyV=3BtRx46vGO3y1^T)RT>X>ja2 zy8!=`!9|-;Jp3<@OFculkkLA{PHdr^XuAhS1EVWc4)_=Nls3dTFJ*`VJ>Vw8SSl|} zU}2X~16m`9f>;0yBnA10c<8$O3oL!ZQEq`AHoyZk`~u1O0rLA_UrIbk`WhU?6k|e zQ~-?vL(tErMPR_v12=F;lVWBK4Yaj2X&SJ7GRlnraEToO$-L+xo#&PZn^E(8nA`tZ zC4a#O2d!k>=XdhaP-<+Z=mOGR1+){~%Nn&C$eOF6C>ITP&NCxlwJN5^Je0*@8cg{& zLUEo5rU%u#Yb=Bq$5f^ap_YlOe}RDmhg31H(#Qqf17R2$vP{*zsJdnF`b1p#|DZbUu+#3af%h z3bFM(MLnPzzGnGU;FxXH+ENd!ZXOO?aFJXIvi+meUjdot12K)j|}AX3+(D_$$H zN4-yL=v!wSb0WB3o;_hd{&_JG1L)n91B2KI#7hv+(E#4!iLBvLi^o`y2~-d=D$Owh z8swHc68+p9o+$!C4h2W>JTc`i*5fM{ZNs?jA3&QWYdw0N3IIEBGcW(wQzc#z4D4jL zsFRCIy>q(fZIZ-XfLZlY3Z{SyuCNTRKniXU>VRZOW4>u=9NOqBh&7M_oXyv!tY;Zx z+kchS5zUQW=#r!$4b7ko!Qc$d5DdeB3#hOP3QXR=x!)j_1*m z3mUo2>OHEE3cLR6)zIy~-s{Sc3a+5(jWpq?PRUvOwnJI%bi1aw0Peu>5Y12!yDkj8 zjtdGX$5S3u)>*~kJZap!&nT=4#qjG9G4Brn497t4wQvfp@bFDrp;|$qilNY21%Dqb z@U%ei&EV}F@9iMp?FvutzwYoZIdCJkmD2;%Ddo~I#^D_Q@ge_T4ckx+79sM@VDf*5 zA?@+T8lUL>%{J7x&x^q8GT-gOK=KA*^9fJ$H2>+XGO2@F*A_2NH%PA)zX-vg493v) zOi%9zukbQI_T$b7wuhgi=iZkqs9a`%1@0Z%?&}}l^&~Iy1>p_H5bsUz4b318nqc;Z z>lXxF?o;ep3>w67U-LA-^mcy*z;F(E&-h0l44_^vo2x{_)9yi`_OWx_tAPr<9`XtQ z>)j9xOK%W0-|^d!`nb>r?S{iS3@6Fyx$LuqG}L}>J7rmc*LqIiUmYp6!1XgP`W2!0 z9xwB)9}+J?)_D#f0K`}jYuo#kI;KPR* z5*VNe(c%bzHU}OU_@Tr> z5J80s4KPy#9H0kp3{=9y29XOsh?qd}aOp!E5IL|Im_w%;H9IfvbffWrfDIi#w%lg1 zj<1<^2D)6^tQxK~40P_T*#N?Xy?${TsG%H z0R&*aJotbCLttE8XyNf?t4JbVc&H_a3>#o2PqxVT_~=APQ3*TN9+-R7+91x#Mt_#C zNO-!5o36u_zAHN%p+(h28SwvIfx=4a3Tt!d%-yiNgyGpiK-pBAw zpavawI)VuCKGUo`ts4AbJ@;Y+W+1utn(-mjP)p^M+yuO-Ip=)zQN=43aDV|MlT6^E z0x6Ut0U~^`VS<7rpl|~o1S4y(nOsP5jTVnOW03S1%o@=ireqMRn>^G}@wrHBP8i6bk~2_}rdQCc5h(t-#pG!Q9UUP_Im zD?G7CSsX{zwA4hxRCQVb3oJ-gUvN>HG@V#UOIK{S6(?&48cH~jX}3E_ z^o73QfbOTz%KIyE%(_%OdRRddVgc8$pPUw4C}U-F!BMl&5wzXC0zefSpH)(TCoHJI zZ4W4p>TVLc=_&6CuY#QZ_-Fq;aA81%ZU|uQMAaV61p_aH+lZ2Oa27{(;AYFY9+RHd zllMua502oWBQR(`0bFc)A>vN~Uc40mZBdMl04y2a<6Y+{*rb_&#{gU?LHdZ|yXdt}gBRH$8ATH;F%t1% zjS>PNM|eo{o#KqCNX0OU@kj--&~pu_2@Z51u_I7&J0}Rzf<_3MH%7>hKFT8gVy3fS z`45o*loKmlDM?CUky~DR4C>1Gx_JQyEWBaSC}$W*KVk59`qF?3jH$l7C<FO5ZvG~H&I{eQb`3KQbY?E z+QK}yNk*Ja6IBpPqD`KcEkkA@3%`6w65tk~A~nvPhMXrnvuPopd=o8^Gl1a^c|mQZ zfICGhUov;11~AfZAX-QO7aMAz2Wb+Yi@KR8yTqa7{W4KVq|=c;fVvr&K?WK*oh_Y4 zK`%ieo+FJXNbkwb(7_R@4FEw8N^^sdY7H$qtmZtmaK!#$b&zqZ32F4_B0?q7qJ(r{ zK7*CG09f^!R)rd((CW>twn|lEszGVOI#v`Yp)^6%5}@ex0<~7*s(U@FkalW;AuQwo zL~v@oYIeh#!j1oRV!CVEkc5>X_|A1f6>MPVi7_E1AqO@{0#sraLl5xGtqCoSMIVw` z3kavL9y8379;#B-#w!TrqX8S3@=TGo2x$<^Kq8CVxLpcU1T;_rRD~$bsU6p$JS6Hh zGXk#=Ovj+4JHvN6qepo;b9tLRCUS`rQJGP2ED-|f+=h|>9p<33(|s-}wb-JazCbE8 zSdoAxyV}DU(|CsRQhK90AYFbe1O^i7XoHx|KAgaA_eI_wY?^}?P6=54C2+3zStzeg zF1cH+=uhiA%RLQ&eAV?0aXA*40BJP3OAG77!dj>gtGF;RjnoWx;FXVEU<0HG2XS>NQMrV=(F&GpIL>K~Fi(EtWt<<5l zN_GN{pBQbCBsj_kVY!*ad@7(Sz+nSZNk}yZ(Z5L3c6i8xai9Dt<+g^fu+00>KxVK` z=q4$s!Q}!7P{08q40YD>LNskfSjyKW8_%(3otYb5ElWo`&n4J_4ubGTYxxABJ0_G8 z(13;>RAHfTo)$>4fNW)RaM}ko>v#?)Q(#J{T^MSTVek}e0BnHo zw(|d6g^2BVb1W%_Lb%726KvASVcdTFCkHD%aC2HDEA`?~!zArL1H{iSiZN1-VNCAp79NDQOC%&>p11W`|I@a^}`|zydAMZfuLx8EZ=2bO1X=flXXoSmG zN6wf(8RV|E+PdNULL7$YeI!F zW7WecLK*bo2x0$#W1<|d1(QXcGH5#)!oY+nH~|UZ@j<-{MXN)qPh~5FP2a^Eg=%<1MsT)Xwhll~3sR95Kro^DJ2Dkww$Sc1(E$A^ag$M!< z(18eiLHC=2BDjGbs36-DieB*z<)fF}Xd8So92r0}R-+jl@*f&N0iiQICm4f=a6bra zy(y4C71%u+5|dApFQgK|$uYsP3aI46f+Ki8=o`bewtjP)}buuO;d_g8y!aj^b#o`KX z%PTWbzZUSaQiL`m@s8tCJ{oKq$7&QK;g!u(J`qa2_hW)XNW9e(L%$0r(P0&bQUhE| zMEdK+EkeVmpsO^LL=-Rs68Js*lL#Y-Mlg5?CIA8^h{ZlE!DXvP0a!4(N<_gr00Q(S z45*eJ^b#)kLdS_0Ia0Ze>!t;eiYJ=^G9*JINP%}$NBC2x4sx$55W4?gLxG3#EjX+h z(YvzW0t*;Gfi#ereT#tvq`3~^ff}R%i5$Zs00kF_$cAJBDIiH|L^3E4fhf^|ynDlr zw3tf6Flk0J(0UX!@m1L}i7y@Q&J{bgsN9chmfJb%gfy0`|z6dgHBB}$h zCj{U|tC0dF*otfGzSvm~s)>Qd`#ld(Mlj^V=re*G@B=Ggf=>v8C)9!J5GNmzfsvv^ zd~}3uG0XHJH6nP9Ps0|^$Sc;tNhC`EZ$tnhNJqQm%N#H~&5TCEBO(dXmfjM#@N*6= z;H0ut%uRwRdZR)YO9CH|!$?#~DmlU)H~|!xO4hT2B4C0Wu!8^Q1I`e+yKl)28qkm; z{K!RgOX5hufIFN4_%$5ZKR8>gyo$`vRKjl{ zu%6o$C!4y8d@G2+f!+$m$UDMsjDaNJO)_}GBDgi2^q(D*JP3=a4YSD61fhwku=vEd z`AjtPp(C50Jy}%vD*Rg!~y@Y6R;_LDWoH)8HJdlE3xw{ zrFszngF=DQB0t?y8XYjV``L=xssRKHqxIyzjhdn0C`F{`q=dqn3S7^cvb7T|H|AP8 zfXloD9DuZh8qnI4mUFs9tk7Oe!3U+f0D}SXV-$)huClW(@kA*Qc~9mH(-DHFh8eaj z>^dy9w}&}{5|F=&pcWJ%lQN~d3F*Np1hfA;&<5xuf>;5?q#n|%O>DW;Ib{m>93og- zFMuiyMeQXYN<#W3OrM#8wRpNMeg&sq9S`eVDwOKdCzGQ9yO95v0;#Q7ukI*-Y@!K=sIXi8As9l6 zUL913Xv`bolX|&jE!mOlNZ-)9L1V#bfdc0Gfiobiy-E=R z*`yvKODn28h6Pv)7_qrqHEmUuQNw|rK#GHCraLma%W_plSv&ZWCDvR-?C645t&9de zK|7O(o;pfHi&H$ZxUrqPrSr7KdA7F_wXYb6$Eu@S39KMPNFbeC40<5zJ6y~Yq#t6@ zqAd`Mr~(6!xK0xx!WCJZhz#a>G&z7yRUIY9*oq&!nU0;@b*)?)yQb`Lfk5nn{{fdp zl#CkyFNhGVek;DAELFtq90<>VD*2KFPQ#5V8ohwA9QLBwDz~jo+IcDn#?sUqPU6SB zQj;r;;_b8@eptB+3`FyBeX6f!u=>{oj zaChnM?rtQdySp0{5ReuS6qQ##=YBJH=H5T!dFFS{5fPfT>7bN@p?uWg9P0wg_`P}n z$;jcB0kX*m%*rqtP@uA=7^~wmY)M;QTR|tufNP=DP9aBO3LDa8x zXUjb6?l-nX<|V&BVG&zN7ww`+u1v2(KQn%9FQoYJThhxp+vbx&n2<&AIGdN>2Gu{0 zU|x&1L!q52Pc5z_+WptRHpR}UEpek;FYT|t-s=hH?qaB#Eo^!@#RuRpg%I=Qi^9i2 zMbl2Xp<5&i!$jZDZ~+I^YJ1O-#z_UAU*nZ3=~;$grhgY>OU5IT4eqfW?bC}(=#@P4 zo9~FIPfJR242{|ur9Qy~wB{_7#a>F@L8pvWxPv3{h(j~B>(#}5Urh=0%aF zAQW8kDX+Aip)2&n@2`*gKdqep%1QxWPAF!2KVMW;y@B)^?)~Suupq&q!1s}+9yiNv zgw(LnlAQ@N&Ms^B)zMXfAqUY7_DfaNwHT*c*aNM{NAY(Z^5z(K!EnQ3cn&v#zQTp@{&O`T!wRkK+ugX>W$v~d9eq3N(Ze= zc@B*rV&>g;Wty$6+1vNx+j3Xm@+gkxG2R+h2}-wI(_A_NUwJ6SnoSP?g0Ou?XnN-cn_qKm2ein5vlQxjUD05POu_mG`8q zyBf>%<{ZYWi-MluP|MZc7{s-0Q?J<^<$3PkUb{BtEL*()TdX|1Drw{{S)?wR=I z)I(u=j>G?~(8(@6`}KzZ?}!=Ms-4c4Lot1be!hK5Kds-6G-zpsLvZ# z50x#n((Pkt-ETyzoEVsB8ZO7k8z0-Y8h-QJB-iUIQAbd8CD^~ZY11`)Be1oo`S>|~R0DG(D=56H1(D{uRZIHx=hcFZ-^{++)d~iM~R-8)) zl~JWPm-h*3?EYR-&8%c^d|wcX=C5RU%z7xQa_41=e>l4b6dJ#is`**(_q{1fK;>1} zZ({BXsdM~;MJ9ly;zS8~^SOwsIC8n}O*!&eR?Ft0`^)d6XO_Dnh*-L%LB-G_y3rhc z4l=V@g(-jEGs_n9lZR*|8QpAJ=FtQsW_*l4=|>yVVGyashMa%wUc$x;cUq16ye3UC z5;Uze+tJ5$rG9vfQs2>m)YPqVTFbp%Aso`?K10xI|MSzv`S7a%A#Ju%@5H*}iU7#y zty#t94u*h?OpRw{dmIL3(A=wX9-Wq@e7^bsw+^q&@#JqT#D4~&WB9C)%w4u-;UHRi z10k+6qpz>AAD=jl(W1KTjyxh^oXv=SO2Kos@K`5|QR!jYp`<2V3%;$|u+u++aQVHr zA>Go<$y}|7ts=*ODEqfn`H2vwoWQWGM$#PMNB4GgcCgMXLMG*>Z)R)qv$k56y}Lq` zdI8LSN#CbL>|&-kA1X*5zJ}8~@%K3bu$%4!-v`y|3`6;27v#+ z(^MjLPZ@h$5@~G=>N)!%kQ|#Su_2I7c?1y!`g4|6jy4t*PcB~50w9bSLSuVX^hC!X z9|L5yo$+lh0nwBBqTDV2VzxmMBj}(r=KZPw7As7TNJDK+5u;2k}U(1A1nbO-yE7kP_M}XhLDxBIPAI`jVb_HT2lG7oXTxO zU=}wK84BssxR(8FcCpLPPs+pCKoeH?6!e|n$;@H?Ssa(ppjH4;_BaCzk{yoM%oTKL)emYl z$b(9$ceW{AHIg_8!1BiDn$;m!ATj5>_B(xEm7%tT>=dM=?}cuZF-1|#2_6VkK8v8# zuDh%~?hvSRF{t{<0;1Z&;Q2=TU&DeKTFdto5qLV*`iDz^kF01gwiPPjZRSzcC+gIE!bYtxv*mV zLm;nYbG>(dl|*H7aGqFI7wxP*_pIP2Y}fvS1hBHWz~=6(;y2uqrr{wET-Ge*c=O|B zQI5;;ZKre&qE&64%#rbaI1!%cb@TUoQt>`ds8u@YOE6!n#LHaiHh0Fee@eutJOqx@ z=1#k3A&I(hOcvg;d=xrrf0caZ{rs-ebTswogDlbSYJa7Zm7I^?#CY;}I)~>YaZTN{ zf9(e?5_@kPpx(UgMy=--31Pnd55^eXQ)I1|C0`_mBi??{iuxK>b$K(od-A8#mJE&K z8@<-cP>XEAS!*CL z&<6F>EW^oQasDGaRCn_JA_zF9Hlh6f&kLK9W8CJDqSEY>1~hh~J32?}c+4MB4lEx| zYQ@^fH~iYa$Uww!h~=Ay${MPmrq}bn6PMeWFE+#gX)g_M?-3qqB*uV`R|;QktMzWH zO)T_57UCE%X4b?eakV#urc?q9E~5kU-NA8RK#aKN#1%9(1WMGPFX6Wg;k+9FCVO=N ziFZl2*b1E~d%^Teh0}nl06^EZi$XgrD)JF(jV{L<51lvz(_YbI@hXD|O3+I=V~5d_ z<}?WZ#-K>`*r6?Q${{m`CaIWYm@5;2w9#y(tBqIT5gD4gL-#3*weu3nRx3={V6YG= z5q6Po65%}>K!f4mZ^u)cP@f0|diENPZ;6pJRvRrI1Ar<5ndt#dllh+zT2fLfpQn`% zTH!_Fi*22v}H-1(i?H@R4Waq$O zzT0s|ULQOE*BQ2}52RBs4lcpckr+hbqtRvE%=VVlx~!=&BKPw@TB5%!{O!v{U_;}z zOt8yt8p@*&oAj&~Bo|^>g3NzYRUyk%7n`%D%CEc=)zY*R2CXVqZx+saqerj(>VhrQ zOO4*EtC}K&jO2a>`N!mp5-ZB4RN{bO-H-i^kd@tOEJF^Sy~kI+NhhK!GMgWNn_U&w zPYSIpHECdr5C_Xe z2&p4G*<2SQX(9XSd0jPiZQ!2T{6A9aJ~p#jEdHc+M;k_qdFri-;|7gVy&B{gf^*ec z$P#Co%jIln69yb@pb6wxS`ge?;zr{gehwLg20LJ@)jzfvWsIJ&i$?8H<{cJMUdg!T z@VtsyBfV9zx39JbSKgRFR1ap7xdRs~S2EsExdZLH#oZ2gnio@)2BvUsvbyFv2dWv$ z3jn!ItIw&+8{+PPo!SkWJmww&-Q?jcC7)B#3}}P$;A-_LXpSYcOX>`xxIU&|Xcyj* z*@95rvG2FwFL>{M!E7Y;d=izLlVAbm<}@*JojZ*mMX8+om7AwaIheHkOgc5LH^=@= z1&Dne}<-_tj$pJpK;(I_R2M!< zjdTvk4!WhWE*>`Vhej(EtpluHAJog_m#0s){uuGy zO*jo1dY*UEB@rk%8oayNg!qz?asU;cvj}_8nKw|~4vtM}SKg0i8KT&F<||pE$Eah_ z1*Mg_@(H=9uEK-#Nn{bo?JDoabj>j%ulErKLj=JmBdlLo!_dO%=)PJpq$A5aksME9 zDGqPH=?AeoA~sm8gbq{@nZ9Z({J8*Pvl zX}T3itprV?i#ogD}x!*Kg2W3{l4+)p)c!hru;b(r&K0tYzw zyatlQz~hag$cN*7K`|4$arj%o*j8RGsoHEXFbC3UdRXnzK%gENKb>RNG8vpR9Ogb5 z?G+F;dq=MN4?S1%b@7TSK)g#6CaQ>(NrNb}8-=5`hD&TEoK3||6TVx0^4tMQqkF~_ zL*M^CqlKCf+mj{aJ4KY;NrD3jm2XwH*X$z+N%GO)Sd)>B9}{?fCZJ_P{?@pvziiR& zpT4yjNrXNG=Y{hy{Xh{_()7py<1wceF>2Ce8@!)PAz&wzGLGdjab`GY>1au{dy3yb zOZ?ZfW%%izZf8nZlJT?6OHYL|?JUV4P#$YCPCPIj=ho-aKNEK|LYF>e`;5wzpJXLmc;&);Q@3XV%P6PbAWzuCOKX1D7 zJLg21@KK?MSt?r1O(K4^WMK+(i8+Pd*dzwSlg-Fe@@q4B1v6%uEibi@xGHLuuw7Omk8&X%Mus(;ZwW$diIhzBUcuIvaw$+cX4=Wb z&r;VpSc^RNste2yDE0Cz7ZEG9gM$?U388h_70Nka&(OSDGC()^2T`b_ozmNLPtZ&m zuN|M%7lPAsG)iL{6jRHpUvWImUa z2Bvv`$x777GF7`Poofj-J?o<5>eOKMZJk7IDr$yzb;bly5k^T?#3)53S*=f2oI&}hn;9vq zU_+6y&d!#?oz#7MJf+2(WOh;PAUQL!CG*`uN`%A~ zOofubMuoA0oFCQiNAuQaK7jtYgd%``gsrA(t;eP)awR3&FnOl8Yc#H$oaP{I!=-Ro(Y_Uz4iN>nb)sd4%lsd}`i$jelF#LZ(J?m;#% z{qfRT|1_{b$|OEBpjvGbo|l*2Y((u*`5nx+YRjbyiz z#-S1`;D|-z7**SwNXZ=TW=+vGPwP~gqOvj&hUupdPYRHATvH11UZfD36g6K?09?b2 z(IcW~IU}>>*T;-L2hus#1%eneA+i3=23|^BZi(c`5ViKxUlTHW=B5zxs@m$obSEDQ zz_7E7=6c5mFqsA3Le+&lG4)g-ZG6OkYKGG>N?{M zY(~jj(Ndi9hAp3zbxCu19ub1AUaITZaQaRYq}xN5A-E%QQ>*aS6$Y%t7tR^_MAGzz zX&OSUfG++p$`zXVWsK^)JATb8S7$7BO}B233w5|V5S2YET1U||tB$w-(06ZjL2GJS zD`vyZeA%TwdRDoldkATY`u7XmI5pku(sw^!#aZZ>PgR>eEeLr@3LtBV6y9)m!LtF2Bo4-{g zzJQBZ#3IkIz*tSjWPJ!-PLE-)V+LAPbV;YoK2Kn?$c%^6zkUJ?J7-zN$7ql2zlBaa1r&x|04 zCV$NckI>ZV-u^8|_1;B24flfes@-YSfPux}3!IV}r6K|AZH2IB!w>cseaoXL+3P3% zXn}2&(A_-(Z|e&4VZ9K}q9&Jo-#O>1){*o}jqO3CV=&ntg}lU}XWfpzBjG#ajG)A8 z9N23Az~Z6c)V~}`#I<$08_lzRHNY}Y-EuKb7~WkqL+kF_?6`{lV>c`nMZM?4J>Df| z@(>NMLjnMl`gCGB@cHZXxw7x!cQ>myc1`E9nr=-f@t+R2i@rs(Cp~CVMP`l?4)%8t z^DKP&Mr^fT@)E2=_jvmP?5acs7d+hb){Qda)3M!4eE)CnTygsR&pj`GSDppgs0Mf~ z$SlKz63r6TdcjwwDIuhQ%R6!q;`{amCFCEv(~o8k{w0R9Uof@b`@KuRj8@ z^2y?Xm5U>x;9)n;%ysF(`lpT5HAO|`d#1sU^%_q*H`L$T?yBS;vYZ~W@Vk>+{Iz2;(`bw z$D;@zo~B=}Pi?ul=u*yHq;3X}Cf7VJjEXM)T<-@imozK2znM+I9WhEdp6Op_>|lP# z)a(zzgHUkbBmjm>P$C#vJeAi{bNUaZX^j! zDnPq*nGv8Q=*A}^qPk%>oTt1@V;5`%g!AO4 zR>+J+xsSmYjhmGkn^$SBo0v!yRBPIpS3Zdsi>vDN_x58rIz6%ehyTosQC&%S_a~C5 z4d-7hd*0FRX~@BTLdb-i9=NxASeJ-ilTniO5D9(3Wv?iMsjqe4@#6?Tc(&LogQ(x| z8x;o7m7{;jq%`8$^#c$bvQ-eWMAmO`ntilec3D@&Bp{u!oog=A?Dgp0XdvR{j-t8c zfuY8$;>ULj<<(>Dh1AnW5)$uT!+u~KPc>}rQ0fQ?(exhRMe4J&KyCB9944%EF{_~Z zGbO+*N!bEz(6p1>?S~5i4o?uRZwU{0nB`B4$b>HZULFJXklKx_Zayo-@mt(J$I33D zCC_0hLnp^EP306#qjl+8W!1FKbLtEHK4o~gsujj}SrnnSuwK;bJp@~~neTqKB!2Nx zC+~D_&x2MjFD_>Ou1KFMAZ@_Z##41#Q6Z2Ue^}X5tt8|Y#FErc{XOEgM$Ye?VUVL7 zUt5W*IuFiV8-?_)u1$FVUaG`MpM9sDYo4Z|ZIvwWu%tk0GGXwVy5ol_6rrQ2;}|EZ zK(C|n@J`c`llte{QAS6jvRX3rI}?X$Cf|mD-I#GjmwHr|4cEl&Y(;)n`_p+bHOi8` z3>*~V4>Nu?!m|FU7G0K(%iO*M_I8PxI8(dH-fV%8-xx`j>5@BhxC0a6FIkNIJKRiR4<&G0_ognO`6*Jh1HLsd@Wg zU$0Tu#)i;|!qrmblwiC5Nk6p$=Cn2`kP0wx< zN2Tc>lEncv3l?UZs#ChO6lU2a{nzw_K;E>fnbiHhr!g|aLT^%$Hkw&_ROA=>K=BuX(S1O*6oo}b!^ykX5?h6yb>z91094{*#uO(LVmPKcuDvRmX!-sYZ_7C73zWx)Un=eaweE5%79t&PzL zWq9z1uF@a1ZYHp&d@mq+jHJGWOc{(2F^>gd;?BM+8pGg!?WaB;D;8~2+;sYifiO2_!sxmf2E z)4En(KEuE5|M;53qO4~JU_uOSEq`SQuWSme^_>n&Tmt-3En>l`@vD8^?f%hSW4vCE zm5DC*hNxKmfwG;?5axN*4 zBhQM{0DC((@y+xTis<(mP4N)f%;25#c1OU?S z+lX_?L$&*%ziy_L2JOq5PZ5su=7F}NdV6=D zH!zW?kNaiR*(US-u+OGv;iRN1vwEzHYaEwmFIX|X&R*Rn+c*%zFK6m7iAg*w%3gvh z?#($mDj>SH%J=0cSuIh0ndARhM2Uqe#;%ft*FN!UchftHMHZj+nf^`#TT9+4-ig*L zenA*i1)ToHg@&_!^`HKQ%VchQ(=;L5MTAZxoHJ`Op1_;O13hJBO(^Y~>UiS)I*n5R?1%2h2Nh3OolHQ~X{pbC*bLZU9vNIQ-^3Z`Yt{8K*`MV{8WA zQKo9iH3RG%Ev7~hUGNO`l6tAw#*hz?*PIG&5dWG_05PVAsy!mxWqfOaU z!tZS*I539K!96o(!(G34{g$atgJE0YiHc?-GCH+fe4r_|2=WW!sWxIQ#K0JT4;xH! z+YG>-Q;bWFvPk#uZXRR-i-5t+mEy85pTcFZo(Dvz@EUIMIL1Cg`(j3Y2onJ^Y$5=j zJ=nG$p+lOmq{&c#Y{yPHA$*i$2b;UswBrv#4s%X!^%tC(U{rih^p&sJj*1wT#rM;c1SqCc1d@Hgl$~JE-|JVL9bl(=}A!jxSi-wR=aOl zRUMy48HuwEgtS&@R`m6ljwRPAFu94CNlfVL0r#MwIbIpH5ajK7M%j0nR7ydD3>go3 z1l<#kAd>`MLvK)?{7~*>N{^zO01xp&0gX2M%d8A*V5}Dt!s~&_M~?y-P2ATI_21D!;&=_$x*$Yd&5UPoW%&U^54P#MW+6N@?p;7oYRv77}PWvYS7Rs6+5@Obh5i zmY0w;a4b;_z=Z1{cr1zUdt!`T8^&$xCx)1u@H@W+5|=3u6XYwiP02{?&0h6du6~&rKP8;LW|{#|lUgtJA*Anlmo3j* zw#t0e;+K>S!Q5N}BIH?YbZj)Tw~C1iA%(#^XDrQzp-9yrZ%!<{IHSHGKMgTaRX3p( zNJAJM&vN#$@~#TXVF{fw4+ma-M!Ptsy;-2M8!|88M#ii> z(daoa_*;!UK|?}C>qh|`X{we-wa|Az4GM6euB<8hGG@cl;s zCSY+zRyf_)XI!Z_>I_U@5)rJ#bCdu{&!*#0^e=p7b1PPe;R&%@2%L4H^LVC3UMOBO zL+Vpo#h*d1L*Q#R5HoOfDnt{eu@J8|_9;ZyA(rVDkb;eB*cOxW6qrEEhUCpbzBWeA z87ui@D5brAtp@_6+p7KdtOacwxy@HsJz+i!N|=Xf%|uY$2gX5fflpS3ywGrechJ9? zwznYue)^(lqteUD$e7QHkGzx!wtj!R#NhAVh=)zBlf-IBEPW0lAaYZ~$uL%uQ6qBY z<&*MzW_^?pR8)M$Gsq`GpX-rXiK2N>rjg7XSN`+b`} zuG-&AXb+u$U(;7_-NblEjOuMzD2&s1?30eUVl6Y`qHx1=6OCgNjldl%SrQ8-8krkZ z$fCK(Gl|Wgj7!@4#XP?aYz1*txML`v5*(0QHSWmT%55kw=nK7+8TPzgyROLNT6%%> zs4^0F3g=BmL0c#}eQMP{3P>|%x3kfNA6_iaxj`bCQarZRm@wl^P2#bqN$Uh?(lD+3 zPe6EmdEDK60yUgn1l&W7k;0AfyM5ESZW{9%+}OIs-@muNZ6@i9C9s0kA5iu3U!U-w zT3JpP8m5$;)yUnv#7*`R1m9DV=02geipDnxFsx%_aAaRsv_(k(C!BA&gE@92)1b=i zN&!x%-(DO=3b~k& zahi==e15bC{jfh6M@4${S=fmGE8u`+ZWo{mW>};%bCt1#C5WY6hF{SBgK?ox=14)l z;bKTHYLz<|q8!#3@Y01&h5GYW8*;vG}%5^b$40%*DT(y%4>Zj2O-&_B|O zB?m}ebm*UHRo|FRQaFR&b>O9M@{N6pCrgpAoTy)UlT5@q(=!fZKlLT9k#fu)j>8sS zV-K=0MzR%|updu~gji_pAT8{wLPw3N^w(Gk%?NOloG#4yrLgZY5^r$jI34a#%SY-fZjfm!fbW8Km1IJpH|(M&i3}|2`ab&0|se;kqZyA&fnDrf~8sTWvZN z)v80m0n>f)>=tE>z)@K7v(EK8ocl!CwGj>jTQI~jQ5|StL-*)q7>WKOP9n`%no-c6 zfGkfa=zhDFebPj!s;{x*xpRsY&xZLNhSa50WQ*o|*A@n9Xuo9OuahHLK02^CePZwW z$|Az}%&4-?2^_laWE2Unf0om(#5guHF}BDKU$g8@{fzwE`@(Fuc#cs>nR4>j58|@| z5$7O1{0#ZDr`{J$Y5f5}jisf84#(0#>3cKttyH>I%bB4kgduUrQxTEcH~`)rnICAp z5JX-CD)T_jS*>h8iO}@J2s{+dMpe94-(*obdNny$;?huxEZ_WxtsG~_3`6838YQBE zQWZ^nXTMN7V5j|<<_5qcr3hcKq;;e^7hVz63nlz}ka}bwKNKb3bujcXBZ*88T6jPP z@9eqV$=9A$m`F^y?RB5NKq?0=^LQ^mgeP-oV}WQ88@_SBWI&8C;QPyqm?i9(X6YNb z=`yP;sn8y~@KT!&^;7em7@E&TPdy4%6}MDHj(Nf_ne-HZ|zo->p1Bq-zn#00##ftWjkuH-CsixKF#4XD}{0Pw`1(w z>Q>O_-ehY+1P(MBlP;@#bf%mXgv0h1ry0I|G(X?3)=FBQ@GE$wsA+xk)+5NZl**$` za(DG0Ntn9pof{nQ=m?ms`6%VNqksEL{%!nNQ?{zZJr^!GS2m0f$Q*+NC@%BM z5e{#hc(}(DT^6)Y%>Qkjml8TM5ge<^)!C1yrK5LKAAUTbv}sTy+FXBOvST&%Bw#N- zb(qEnr2N)dkVse}x!JrM)%z>S?`m@$rZ@It_Fz`30Xus>px<+`#jP0<1Tr~!L6uUd z=}BAnnR^LuAqSh`XyaU^9<<}$r<}e1qSkmRz^hY+5u^`#Ny>MT9W3dX5y}sQCjEHt zeS=AK1~TuLD!sSyEJfLH1vQoX4c547S>O`2$-Q_9?%vve@3hwUku6d_`&tZm=7Qd| zcagqZfJBEQJOK{d7W3RdENqBWj@R)B-Z`HsYnM}W3P!S*rqYLlGjol(iGgk8f5QwE z#{0^dDFhZj@ZI{$77$PO5Jh*h2^2TI|0NwOj%2(0$=jc4%t8Ylw zuUev=T-{#pt`s2nA7pn2ghz1A1R}ubZ^aU*P#lgmgrMG9`$9u4^CqtpwFkUQ_3iH& zsFOYmgw7)Jj;TmXSRzjS7&WJb=C}ed$92|5V!s;Z2?u3X54xZWR80ce;N}DzGM?^F z1t+gap|)Ss32_x$-i3X4{wY${iJ3Na+w0^2VLQU_+|^_}hu&_5q3iTD{LxMhJjL+7 z4^*|n-?0_0vIri^GEO7&Jf#--I{wc=LHq85;~1Te&$ZQW&BM3Sk_+sc(tR+d@E8^V z!Bzh!P$PHu;k%y!gL|J5_ut)OUmA+kXfn;$UfDrPpO>TopUlltJ+Ttm^fUcjr52_4 z_7-_J>Wmx%u-N%|H$$fetuqE2Y<83uO7QR=_pr$V2<*NexOZ{*ii66j62^Tm@wFhX zQz=+&ws8nZ3KR6;t|!qQ9&?M3L!zPLGnkj~9*#ue(bA;Q9Yw%na6}`fY8=8N0pu_^ zj;QBQL=rP|&e%|yEDAanFyv3kLa!G9^hmgLLf?KERy!`Qb<;| zkTp=DcbQ8SBj1?Idsl{Nlu|%;i19Pex9ZQANz8sf9V*cHFw${w#5q+MdgD;jI;@Bd z5Pd2dt`p>l$wZM9D}=r}vO*{2te+1k4E zSHj|Qp?2Xl+xl)j3+eXLp!$I_xmWmR^k3VJe`%*(rD%x_HWtrOq4FlBv?3Cp*uY$A zn#SDSjRfTGh(^17r#aU9-jarA;2tnZpNuW7;@|rH>w?c-$uMw`f=g1$mw;CPQzNUT zcc^t0r8ce14?_h#5-2Sd5eIrPJo!Y>G}P3|de}n#;NNRm>H!YIC;0u*A^_E)!qUJk zFv0}Wx}~}d{>nw(1SyPWkHJ9hF=ZXCrs7MS%9b@*Zb(G&Q&&zPOPDc1c|)Ea&chMA zoGj|SyJv}5KPa~W=NBttFzhaF}fm%?%Rv{Ald#iC8hXt9vHxE6YL9XMsW9V@3Hbv1j= zis3@_SB>aZB_~bvFkX2*KB~(7#&eZkn$C}P^szJ@9{Cd(?%I^s`4iK%*B{-ddoEFh zOAPgMO*|r)%g^&z$9l!)b@WZ54F`iz64eBW^Bv zOLnd&lz^8JQWJ^$#&nkidIE{76bf30i8$|(Zx$i+GP#-(z8TN~x9c{_Rc1%Lkf)UN zDQ7Vg**Yw-cw6Ph4ho9l7PXTY!w{?+}8Ns}h^Q=l7TkK%Nr(yz9B)2_*86hlR8$XfBIFjaM-R!2r>BzsT+wm1T#=xL_p1!#&5`0q=AINKjaqub!)kfo?uuAi^WD9;A9BC% zK7=~l0pHx}kD_hEyw-!)W9_1VhjI z1^t79;(^zl9J~RluZNOB{m3TMHa8)%P3sRiq1(I;86s=uM9E z+Prz#cf?obrSu{*-z=MH*k6ucsx3WS2P%NjBQxwFka%&15vm3@VMks8-gM{P@#Xf| zHNDM#MHt8aZo3(|(G;5!F%Olgeg2`&-X`~Hf3mtG$0rV>K++^?^=+NRg^lDuinf-fSd=#*{ zeL~h(X)!vK3K=0Xcs3T*j5-H=6=~nzGpwsinJstw5&o!)MxNbgDkV>jvFstAW*xdQ*j_q+HI% zo?o-}`PfS>q;TSS$i(Y9AdVFVBS{qMwR<4H;8Wpn^1t2@?lV?o2ZIB;@{){Yb*!aC zk~;ZfN))HEHI^R+u>c9J5(y%hKgtZj7rI)__f zcj4r+U>0J2biJiv;S<9srYpDL`8uyr^G*e=z$6Fujv9Q~_D#Ha)mDs+4ZesL9P*Bz zB;Rcm_&lu#$@fOEsH{e~;Y*Fw<_Akd5hKJ^bi2tBby(xfGhhKb2VCFIcoD{L?-|+G zDV7eI*lGk) z1#x0AU)wOc9VUjSfbE8WhV$pE;H!);J0U|TVqe(da3V#F~w#3_3)%wNC;b2U9SDga8;JZJ0ve(` z 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

Gzl(wggk@yOUt8m2w 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 kIZN6VIQ!YpMz*x4ecJg!+lr#qfXz>% diff --git a/platform/ios/docs/img/user-interaction/quickzoom.gif b/platform/ios/docs/img/user-interaction/quickzoom.gif deleted file mode 100644 index ce4515825c43eec4c00f5774c1841da03c06e98d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 793787 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

rQkQdFe~h6g@6+Tw2Yo(*moG1BmXcUL1pH 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%0DyDjCAelD1BVFx6$c?#1d04qG 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

    =q=)&#^hRwOe#zu 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 tF|mltT*VX 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�WWyk(Im-q*kExu%N=Va$C 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

    e3OnI0xQZ+{pSYoo0L{$cOCd**I+ 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

    xb)a3tf2@&~dmnGtz_3?y4NH%K2IQa~z`;*@ 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%0Dx|I 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 G5CA)#mP@Sw diff --git a/platform/ios/docs/pod-README.md b/platform/ios/docs/pod-README.md deleted file mode 100644 index 8a3080055d7..00000000000 --- a/platform/ios/docs/pod-README.md +++ /dev/null @@ -1,99 +0,0 @@ -# [Mapbox Maps SDK for iOS](https://www.mapbox.com/ios-sdk/) - -The Mapbox Maps SDK for iOS is an open-source framework for embedding interactive map views with scalable, customizable vector maps into Cocoa Touch applications on iOS 9.0 and above using Objective-C, Swift, or Interface Builder. It takes stylesheets that conform to the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/), applies them to vector tiles that conform to the [Mapbox Vector Tile Specification](https://www.mapbox.com/developers/vector-tiles/), and renders them using OpenGL. - -For more information, check out the [Mapbox Maps SDK for iOS homepage](https://www.mapbox.com/ios-sdk/) and the [full changelog](https://github.com/mapbox/mapbox-gl-native/blob/master/platform/ios/CHANGELOG.md) online. - -[![](https://raw.githubusercontent.com/mapbox/mapbox-gl-native/master/platform/ios/docs/img/screenshot.png)]() - -## Installation - -The Mapbox Maps SDK for iOS may be installed as either a dynamic framework or a static framework. (To reduce the download size, the static framework is omitted from some distributions; you may need to download the full package from the [release page](https://github.com/mapbox/mapbox-gl-native/releases/).) - -Integrating the Mapbox Maps SDK for iOS requires Xcode 8.0 or higher. - -{{DYNAMIC}} - -### Dynamic framework - -This is the recommended workflow for manually integrating the SDK into an application: - -1. Open the project editor, select your application target, then go to the General tab. Drag Mapbox.framework from the `dynamic` folder into the “Embedded Binaries” section. (Don’t drag it into the “Linked Frameworks and Libraries” section; Xcode will add it there automatically.) In the sheet that appears, make sure “Copy items if needed” is checked, then click Finish. - -1. In the Build Phases tab, click the + button at the top and select “New Run Script Phase”. Enter the following code into the script text field: - -```bash -bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Mapbox.framework/strip-frameworks.sh" -``` - -(The last step, courtesy of [Realm](https://github.com/realm/realm-cocoa/), is required for working around an [iOS App Store bug](http://www.openradar.me/radar?id=6409498411401216) when archiving universal binaries.) - -{{/DYNAMIC}} -{{STATIC}} - -### Static framework - -You can alternatively install the SDK as a static framework: - -1. Drag Mapbox.bundle and Mapbox.framework from the `static` folder into the Project navigator. In the sheet that appears, make sure “Copy items if needed” is checked, then click Finish. Open the project editor and select your application target to verify that the following changes occurred automatically: - - - In the General tab, Mapbox.framework is listed in the “Linked Frameworks and Libraries” section. - - In the Build Settings tab, the “Framework Search Paths” (`FRAMEWORK_SEARCH_PATHS`) build setting includes the directory that contains Mapbox.framework. For most projects, the default value of `$(inherited) $(PROJECT_DIR)` should be sufficient. - - In the Build Phases tab, Mapbox.bundle is listed in the “Copy Bundle Resources” build phase. - -1. Add the following Cocoa Touch frameworks and libraries to the “Linked Frameworks and Libraries” section: - - - GLKit.framework - - ImageIO.framework - - MobileCoreServices.framework - - QuartzCore.framework - - SystemConfiguration.framework - - libc++.tbd - - libsqlite3.tbd - - libz.tbd - -1. In the Build Settings tab, find the Other Linker Flags setting and add `-ObjC`. - -{{/STATIC}} - -## Configuration - -1. Mapbox vector tiles require a Mapbox account and API access token. In the project editor, select the application target, then go to the Info tab. Under the “Custom iOS Target Properties” section, set `MGLMapboxAccessToken` to your access token. You can obtain an access token from the [Mapbox account page](https://www.mapbox.com/studio/account/tokens/). - -1. In order to show the user’s current location on the map, the SDK must ask for the user’s permission to access Location Services. Go to the Info tab of the project editor. If your application supports iOS 7, set the `NSLocationUsageDescription` key to a message that explains to the user what their location is used for. If your application supports iOS 8 and above, set the `NSLocationAlwaysUsageDescription` and/or `NSLocationWhenInUseUsageDescription` key to this message instead. - -1. _(Optional)_ Mapbox Telemetry is a [powerful location analytics platform](https://www.mapbox.com/telemetry/) included in this SDK. By default, anonymized location and usage data is sent to Mapbox whenever the host application causes it to be gathered. This SDK provides users with a way to individually opt out of Mapbox Telemetry. You can also add this opt-out setting to your application’s Settings screen using a Settings bundle. An example Settings.bundle is provided with this SDK; drag it into the Project navigator, checking “Copy items if needed” when prompted. In the project editor, verify that the following change occurred automatically: - - - In the General tab, Settings.bundle is listed in the “Copy Bundle Resources” build phase. - -## Usage - -In a storyboard or XIB, add a view to your view controller. (Drag View from the Object library to the View Controller scene on the Interface Builder canvas.) In the Identity inspector, set the view’s custom class to `MGLMapView`. If you need to manipulate the map view programmatically: - -1. Switch to the Assistant Editor. -1. Import the `Mapbox` module. -1. Connect the map view to a new outlet in your view controller class. (Control-drag from the map view in Interface Builder to a valid location in your view controller implementation.) The resulting outlet declaration should look something like this: - -```objc -// ViewController.m -@import Mapbox; - -@interface ViewController : UIViewController - -@property (strong) IBOutlet MGLMapView *mapView; - -@end -``` - -```swift -// ViewController.swift -import Mapbox - -class ViewController: UIViewController { - @IBOutlet var mapView: MGLMapView! -} -``` - -Full API documentation is included in this package, within the `documentation` folder. For more details, read “[First steps with the Mapbox Maps SDK for iOS](https://www.mapbox.com/help/first-steps-ios-sdk/)” and consult the [online examples](https://www.mapbox.com/ios-sdk/examples/). - -If you have any questions, please see [our help page](https://www.mapbox.com/help/). We welcome your [bug reports, feature requests, and contributions](https://github.com/mapbox/mapbox-gl-native/issues/). diff --git a/platform/ios/framework/Info-static.plist b/platform/ios/framework/Info-static.plist deleted file mode 100644 index b42a23322db..00000000000 --- a/platform/ios/framework/Info-static.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundleShortVersionString - $(CURRENT_SHORT_VERSION) - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - MGLCommitHash - $(CURRENT_COMMIT_HASH) - MGLSemanticVersionString - $(CURRENT_SEMANTIC_VERSION) - NSPrincipalClass - - - diff --git a/platform/ios/framework/Info.plist b/platform/ios/framework/Info.plist deleted file mode 100644 index d8962c53ab3..00000000000 --- a/platform/ios/framework/Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - $(CURRENT_SHORT_VERSION) - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - MGLCommitHash - $(CURRENT_COMMIT_HASH) - MGLSemanticVersionString - $(CURRENT_SEMANTIC_VERSION) - NSPrincipalClass - - - diff --git a/platform/ios/framework/Mapbox-static.h b/platform/ios/framework/Mapbox-static.h deleted file mode 100644 index 864a3fd5b64..00000000000 --- a/platform/ios/framework/Mapbox-static.h +++ /dev/null @@ -1,5 +0,0 @@ -#import -#import -#import -#import -#import diff --git a/platform/ios/framework/modulemap b/platform/ios/framework/modulemap deleted file mode 100644 index 122db0c2b10..00000000000 --- a/platform/ios/framework/modulemap +++ /dev/null @@ -1,8 +0,0 @@ -framework module Mapbox { - umbrella header "Mapbox.h" - export * - module * { export * } - link "c++" - link "sqlite3" - link "z" -} diff --git a/platform/ios/framework/strip-frameworks.sh b/platform/ios/framework/strip-frameworks.sh deleted file mode 100755 index 686541566ac..00000000000 --- a/platform/ios/framework/strip-frameworks.sh +++ /dev/null @@ -1,73 +0,0 @@ -################################################################################ -# -# Copyright 2015 Realm Inc. -# -# 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. -# -################################################################################ - -# This script strips all non-valid architectures from dynamic libraries in -# the application's `Frameworks` directory. -# -# The following environment variables are required: -# -# BUILT_PRODUCTS_DIR -# FRAMEWORKS_FOLDER_PATH -# VALID_ARCHS -# EXPANDED_CODE_SIGN_IDENTITY - - -# Signs a framework with the provided identity -code_sign() { - # Use the current code_sign_identitiy - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements $1" - /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1" -} - -# Set working directory to product’s embedded frameworks -cd "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -if [ "$ACTION" = "install" ]; then - echo "Copy .bcsymbolmap files to .xcarchive" - find . -name '*.bcsymbolmap' -type f -exec mv {} "${CONFIGURATION_BUILD_DIR}" \; -else - # Delete *.bcsymbolmap files from framework bundle unless archiving - find . -name '*.bcsymbolmap' -type f -exec rm -rf "{}" +\; -fi - -echo "Stripping frameworks" - -for file in $(find . -type f -perm +111); do - # Skip non-dynamic libraries - if ! [[ "$(file "$file")" == *"dynamically linked shared library"* ]]; then - continue - fi - # Get architectures for current file - archs="$(lipo -info "${file}" | rev | cut -d ':' -f1 | rev)" - stripped="" - for arch in $archs; do - if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$file" "$file" || exit 1 - stripped="$stripped $arch" - fi - done - if [[ "$stripped" != "" ]]; then - echo "Stripped $file of architectures:$stripped" - if [ "${CODE_SIGNING_REQUIRED}" == "YES" ]; then - code_sign "${file}" - fi - fi -done - diff --git a/platform/ios/ios.cmake b/platform/ios/ios.cmake index a662cac13f6..c4cfa10e8c4 100644 --- a/platform/ios/ios.cmake +++ b/platform/ios/ios.cmake @@ -40,7 +40,6 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/darwin/src/native_apple_interface.m ${PROJECT_SOURCE_DIR}/platform/darwin/src/nsthread.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/number_format.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/reachability.m ${PROJECT_SOURCE_DIR}/platform/darwin/src/run_loop.cpp ${PROJECT_SOURCE_DIR}/platform/darwin/src/string_nsstring.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/timer.cpp diff --git a/platform/ios/ios.xcodeproj/project.pbxproj b/platform/ios/ios.xcodeproj/project.pbxproj deleted file mode 100644 index 4db9409081b..00000000000 --- a/platform/ios/ios.xcodeproj/project.pbxproj +++ /dev/null @@ -1,4768 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 071BBAFF1EE7613E001FB02A /* MGLImageSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 071BBAFD1EE75CD4001FB02A /* MGLImageSource.mm */; }; - 071BBB001EE7613F001FB02A /* MGLImageSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 071BBAFD1EE75CD4001FB02A /* MGLImageSource.mm */; }; - 071BBB031EE76146001FB02A /* MGLImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 071BBAFC1EE75CD4001FB02A /* MGLImageSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 071BBB041EE76147001FB02A /* MGLImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 071BBAFC1EE75CD4001FB02A /* MGLImageSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 071BBB071EE77631001FB02A /* MGLImageSourceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 071BBB051EE7761A001FB02A /* MGLImageSourceTests.m */; }; - 075AF842227B6762008D7A4C /* MBXState.m in Sources */ = {isa = PBXBuildFile; fileRef = 075AF841227B6762008D7A4C /* MBXState.m */; }; - 075AF845227B67C6008D7A4C /* MBXStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 075AF844227B67C6008D7A4C /* MBXStateManager.m */; }; - 076171C32139C70900668A35 /* MGLMapViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 076171C22139C70900668A35 /* MGLMapViewTests.m */; }; - 076171C72141A91700668A35 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 076171C62141A91700668A35 /* Settings.bundle */; }; - 077061DA215DA00E000FEF62 /* MGLTestLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 077061D9215DA00E000FEF62 /* MGLTestLocationManager.m */; }; - 0778DD431F67556700A73B34 /* MGLComputedShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0778DD401F67555F00A73B34 /* MGLComputedShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0778DD441F67556C00A73B34 /* MGLComputedShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0778DD411F67555F00A73B34 /* MGLComputedShapeSource.mm */; }; - 07D8C6FB1F67560100381808 /* MGLComputedShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0778DD411F67555F00A73B34 /* MGLComputedShapeSource.mm */; }; - 07D8C6FF1F67562C00381808 /* MGLComputedShapeSourceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07D8C6FD1F67562800381808 /* MGLComputedShapeSourceTests.m */; }; - 07D947531F67488E00E37934 /* MGLComputedShapeSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D9474E1F67487E00E37934 /* MGLComputedShapeSource_Private.h */; }; - 16376B0A1FFD9DAF0000563E /* MBGLIntegrationTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 16376B091FFD9DAF0000563E /* MBGLIntegrationTests.mm */; }; - 16376B331FFDB4B40000563E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 16376B321FFDB4B40000563E /* AppDelegate.m */; }; - 16376B3B1FFDB4B40000563E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 16376B3A1FFDB4B40000563E /* Assets.xcassets */; }; - 16376B3E1FFDB4B40000563E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 16376B3C1FFDB4B40000563E /* LaunchScreen.storyboard */; }; - 16376B411FFDB4B40000563E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 16376B401FFDB4B40000563E /* main.m */; }; - 16376B471FFDB92B0000563E /* one-liner.json in Resources */ = {isa = PBXBuildFile; fileRef = DA35D0871E1A6309007DED41 /* one-liner.json */; }; - 16376B491FFEED010000563E /* MGLMapViewLayoutTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 16376B481FFEED010000563E /* MGLMapViewLayoutTests.m */; }; - 170C437C2029D96F00863DF0 /* MGLHeatmapColorTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 170C43782028D49800863DF0 /* MGLHeatmapColorTests.mm */; }; - 170C437D2029D97900863DF0 /* MGLHeatmapStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 170C43792028D49800863DF0 /* MGLHeatmapStyleLayerTests.mm */; }; - 1753ED421E53CE6F00A9FD90 /* MGLConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 1753ED411E53CE6F00A9FD90 /* MGLConversion.h */; }; - 1753ED431E53CE6F00A9FD90 /* MGLConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 1753ED411E53CE6F00A9FD90 /* MGLConversion.h */; }; - 1F0196AA23174B0700F5C819 /* MGLMapViewContentInsetTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F0196A923174B0700F5C819 /* MGLMapViewContentInsetTests.m */; }; - 1F06668A1EC64F8E001C16D7 /* MGLLight.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F0666881EC64F8E001C16D7 /* MGLLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F06668D1EC64F8E001C16D7 /* MGLLight.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F0666891EC64F8E001C16D7 /* MGLLight.mm */; }; - 1F26B6C120E189C9007BCC21 /* MBXCustomLocationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F26B6C020E189C9007BCC21 /* MBXCustomLocationViewController.m */; }; - 1F26B6C320E1A351007BCC21 /* simple_route.json in Resources */ = {isa = PBXBuildFile; fileRef = 1F26B6C220E1A351007BCC21 /* simple_route.json */; }; - 1F2B94C0221636D900210640 /* MGLNetworkConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F2B94BF221636D800210640 /* MGLNetworkConfiguration_Private.h */; }; - 1F2B94C1221636D900210640 /* MGLNetworkConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F2B94BF221636D800210640 /* MGLNetworkConfiguration_Private.h */; }; - 1F6A82A221360F9D00BA5B41 /* MGLLoggingConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F6A82A021360F9C00BA5B41 /* MGLLoggingConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F6A82A321360F9D00BA5B41 /* MGLLoggingConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F6A82A021360F9C00BA5B41 /* MGLLoggingConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F6A82A82138871900BA5B41 /* MGLLoggingConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F6A82A62138871900BA5B41 /* MGLLoggingConfiguration_Private.h */; }; - 1F6A82A92138871900BA5B41 /* MGLLoggingConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F6A82A62138871900BA5B41 /* MGLLoggingConfiguration_Private.h */; }; - 1F7454921ECBB42C00021D39 /* MGLLight.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F0666891EC64F8E001C16D7 /* MGLLight.mm */; }; - 1F7454931ECBB43F00021D39 /* MGLLight.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F0666881EC64F8E001C16D7 /* MGLLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F7454961ECD450D00021D39 /* MGLLight_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F7454941ECD450D00021D39 /* MGLLight_Private.h */; }; - 1F7454971ECD450D00021D39 /* MGLLight_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F7454941ECD450D00021D39 /* MGLLight_Private.h */; }; - 1F7454A91ED08AB400021D39 /* MGLLightTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F7454A61ED08AB400021D39 /* MGLLightTest.mm */; }; - 1F8A59F72165326D004DFE75 /* sideload_sat.db in Resources */ = {isa = PBXBuildFile; fileRef = 1F8A59F62165326C004DFE75 /* sideload_sat.db */; }; - 1F8A59F821653275004DFE75 /* sideload_sat.db in Resources */ = {isa = PBXBuildFile; fileRef = 1F8A59F62165326C004DFE75 /* sideload_sat.db */; }; - 1F8E8A81233A9FD9009B51ED /* MGLMapViewGestureRecognizerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F8E8A80233A9FD9009B51ED /* MGLMapViewGestureRecognizerTests.mm */; }; - 1F95931D1E6DE2E900D5B294 /* MGLNSDateAdditionsTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F95931C1E6DE2E900D5B294 /* MGLNSDateAdditionsTests.mm */; }; - 1FC4817D2098CBC0000D09B4 /* NSPredicate+MGLPrivateAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FC4817B2098CBC0000D09B4 /* NSPredicate+MGLPrivateAdditions.h */; }; - 1FC4817F2098CD80000D09B4 /* NSPredicate+MGLPrivateAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FC4817B2098CBC0000D09B4 /* NSPredicate+MGLPrivateAdditions.h */; }; - 1FCAE2A220B872A400C577DD /* MGLLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCAE2A020B872A400C577DD /* MGLLocationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FCAE2A320B872A400C577DD /* MGLLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCAE2A020B872A400C577DD /* MGLLocationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FCAE2A420B872A400C577DD /* MGLLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCAE2A120B872A400C577DD /* MGLLocationManager.m */; }; - 1FCAE2A520B872A400C577DD /* MGLLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCAE2A120B872A400C577DD /* MGLLocationManager.m */; }; - 1FCAE2A820B88B3800C577DD /* MGLLocationManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCAE2A620B88B3800C577DD /* MGLLocationManager_Private.h */; }; - 1FCAE2A920B88B3800C577DD /* MGLLocationManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCAE2A620B88B3800C577DD /* MGLLocationManager_Private.h */; }; - 1FCCEC34222605C400302E3B /* MGLSDKMetricsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCCEC32222605C400302E3B /* MGLSDKMetricsManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FCCEC35222605C400302E3B /* MGLSDKMetricsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCCEC32222605C400302E3B /* MGLSDKMetricsManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FCCEC36222605C400302E3B /* MGLSDKMetricsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCCEC33222605C400302E3B /* MGLSDKMetricsManager.m */; }; - 1FCCEC37222605C400302E3B /* MGLSDKMetricsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCCEC33222605C400302E3B /* MGLSDKMetricsManager.m */; }; - 1FCCEC3A222607A500302E3B /* MGLSDKMetricsManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCCEC38222607A500302E3B /* MGLSDKMetricsManager_Private.h */; }; - 1FCCEC3B222607A500302E3B /* MGLSDKMetricsManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCCEC38222607A500302E3B /* MGLSDKMetricsManager_Private.h */; }; - 1FF48587223710BE00F19727 /* MGLAttributedExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF48585223710BE00F19727 /* MGLAttributedExpression.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FF48588223710BE00F19727 /* MGLAttributedExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF48585223710BE00F19727 /* MGLAttributedExpression.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FF48589223710BE00F19727 /* MGLAttributedExpression.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF48586223710BE00F19727 /* MGLAttributedExpression.m */; }; - 1FF4858A223710BE00F19727 /* MGLAttributedExpression.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF48586223710BE00F19727 /* MGLAttributedExpression.m */; }; - 30E578171DAA85520050F07E /* UIImage+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E578111DAA7D690050F07E /* UIImage+MGLAdditions.h */; }; - 30E578181DAA85520050F07E /* UIImage+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E578111DAA7D690050F07E /* UIImage+MGLAdditions.h */; }; - 30E578191DAA855E0050F07E /* UIImage+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 30E578121DAA7D690050F07E /* UIImage+MGLAdditions.mm */; }; - 30E5781A1DAA855E0050F07E /* UIImage+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 30E578121DAA7D690050F07E /* UIImage+MGLAdditions.mm */; }; - 350098BB1D480108004B2AF0 /* MGLVectorTileSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 350098B91D480108004B2AF0 /* MGLVectorTileSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 350098BC1D480108004B2AF0 /* MGLVectorTileSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 350098B91D480108004B2AF0 /* MGLVectorTileSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 350098BD1D480108004B2AF0 /* MGLVectorTileSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 350098BA1D480108004B2AF0 /* MGLVectorTileSource.mm */; }; - 350098BE1D480108004B2AF0 /* MGLVectorTileSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 350098BA1D480108004B2AF0 /* MGLVectorTileSource.mm */; }; - 350098DC1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 350098DA1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.h */; }; - 350098DD1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 350098DA1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.h */; }; - 350098DE1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 350098DB1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.mm */; }; - 350098DF1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 350098DB1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.mm */; }; - 3502D6CC22AE88D5006BDFCE /* MGLAccountManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3502D6CB22AE88D5006BDFCE /* MGLAccountManagerTests.m */; }; - 3510FFEA1D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3510FFE81D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.h */; }; - 3510FFEB1D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3510FFE81D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.h */; }; - 3510FFEC1D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3510FFE91D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.mm */; }; - 3510FFED1D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3510FFE91D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.mm */; }; - 3510FFF01D6D9D8C00F413B2 /* NSExpression+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3510FFEE1D6D9D8C00F413B2 /* NSExpression+MGLAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3510FFF21D6D9D8C00F413B2 /* NSExpression+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3510FFEF1D6D9D8C00F413B2 /* NSExpression+MGLAdditions.mm */; }; - 3510FFF31D6D9D8C00F413B2 /* NSExpression+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3510FFEF1D6D9D8C00F413B2 /* NSExpression+MGLAdditions.mm */; }; - 3510FFF91D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3510FFF71D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.h */; }; - 3510FFFA1D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3510FFF71D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.h */; }; - 3510FFFB1D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3510FFF81D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.mm */; }; - 3510FFFC1D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3510FFF81D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.mm */; }; - 35136D391D42271A00C20EFD /* MGLBackgroundStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35136D381D42271A00C20EFD /* MGLBackgroundStyleLayer.mm */; }; - 35136D3A1D42271A00C20EFD /* MGLBackgroundStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35136D381D42271A00C20EFD /* MGLBackgroundStyleLayer.mm */; }; - 35136D3C1D42272500C20EFD /* MGLCircleStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35136D3B1D42272500C20EFD /* MGLCircleStyleLayer.mm */; }; - 35136D3D1D42272500C20EFD /* MGLCircleStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35136D3B1D42272500C20EFD /* MGLCircleStyleLayer.mm */; }; - 35136D3F1D42273000C20EFD /* MGLLineStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35136D3E1D42273000C20EFD /* MGLLineStyleLayer.mm */; }; - 35136D401D42273000C20EFD /* MGLLineStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35136D3E1D42273000C20EFD /* MGLLineStyleLayer.mm */; }; - 35136D421D42274500C20EFD /* MGLRasterStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35136D411D42274500C20EFD /* MGLRasterStyleLayer.mm */; }; - 35136D431D42274500C20EFD /* MGLRasterStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35136D411D42274500C20EFD /* MGLRasterStyleLayer.mm */; }; - 35136D451D42275100C20EFD /* MGLSymbolStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35136D441D42275100C20EFD /* MGLSymbolStyleLayer.mm */; }; - 35136D461D42275100C20EFD /* MGLSymbolStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35136D441D42275100C20EFD /* MGLSymbolStyleLayer.mm */; }; - 35136D4C1D4277FC00C20EFD /* MGLSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 35136D4A1D4277FC00C20EFD /* MGLSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35136D4D1D4277FC00C20EFD /* MGLSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 35136D4A1D4277FC00C20EFD /* MGLSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35136D4E1D4277FC00C20EFD /* MGLSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35136D4B1D4277FC00C20EFD /* MGLSource.mm */; }; - 35136D4F1D4277FC00C20EFD /* MGLSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35136D4B1D4277FC00C20EFD /* MGLSource.mm */; }; - 3538AA1D1D542239008EC33D /* MGLForegroundStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3538AA1B1D542239008EC33D /* MGLForegroundStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3538AA1E1D542239008EC33D /* MGLForegroundStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3538AA1B1D542239008EC33D /* MGLForegroundStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3538AA1F1D542239008EC33D /* MGLForegroundStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3538AA1C1D542239008EC33D /* MGLForegroundStyleLayer.mm */; }; - 3538AA201D542239008EC33D /* MGLForegroundStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3538AA1C1D542239008EC33D /* MGLForegroundStyleLayer.mm */; }; - 353933F21D3FB753003F57D7 /* MGLCircleStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 353933F11D3FB753003F57D7 /* MGLCircleStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 353933F31D3FB753003F57D7 /* MGLCircleStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 353933F11D3FB753003F57D7 /* MGLCircleStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 353933F51D3FB785003F57D7 /* MGLBackgroundStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 353933F41D3FB785003F57D7 /* MGLBackgroundStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 353933F61D3FB785003F57D7 /* MGLBackgroundStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 353933F41D3FB785003F57D7 /* MGLBackgroundStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 353933F81D3FB79F003F57D7 /* MGLLineStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 353933F71D3FB79F003F57D7 /* MGLLineStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 353933F91D3FB79F003F57D7 /* MGLLineStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 353933F71D3FB79F003F57D7 /* MGLLineStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 353933FB1D3FB7C0003F57D7 /* MGLRasterStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 353933FA1D3FB7C0003F57D7 /* MGLRasterStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 353933FC1D3FB7C0003F57D7 /* MGLRasterStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 353933FA1D3FB7C0003F57D7 /* MGLRasterStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 353933FE1D3FB7DD003F57D7 /* MGLSymbolStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 353933FD1D3FB7DD003F57D7 /* MGLSymbolStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 353933FF1D3FB7DD003F57D7 /* MGLSymbolStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 353933FD1D3FB7DD003F57D7 /* MGLSymbolStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 353AFA141D65AB17005A69F4 /* NSDate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 353AFA121D65AB17005A69F4 /* NSDate+MGLAdditions.h */; }; - 353AFA151D65AB17005A69F4 /* NSDate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 353AFA121D65AB17005A69F4 /* NSDate+MGLAdditions.h */; }; - 353AFA161D65AB17005A69F4 /* NSDate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 353AFA131D65AB17005A69F4 /* NSDate+MGLAdditions.mm */; }; - 353AFA171D65AB17005A69F4 /* NSDate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 353AFA131D65AB17005A69F4 /* NSDate+MGLAdditions.mm */; }; - 353BAEF61D646370009A8DA9 /* amsterdam.geojson in Resources */ = {isa = PBXBuildFile; fileRef = 353BAEF51D646370009A8DA9 /* amsterdam.geojson */; }; - 353BAEF71D646370009A8DA9 /* amsterdam.geojson in Resources */ = {isa = PBXBuildFile; fileRef = 353BAEF51D646370009A8DA9 /* amsterdam.geojson */; }; - 353D23961D0B0DFE002BE09D /* MGLAnnotationViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 353D23951D0B0DFE002BE09D /* MGLAnnotationViewTests.m */; }; - 354B83961D2E873E005D9406 /* MGLUserLocationAnnotationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 354B83941D2E873E005D9406 /* MGLUserLocationAnnotationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 354B83971D2E873E005D9406 /* MGLUserLocationAnnotationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 354B83941D2E873E005D9406 /* MGLUserLocationAnnotationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 354B83981D2E873E005D9406 /* MGLUserLocationAnnotationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 354B83951D2E873E005D9406 /* MGLUserLocationAnnotationView.m */; }; - 354B83991D2E873E005D9406 /* MGLUserLocationAnnotationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 354B83951D2E873E005D9406 /* MGLUserLocationAnnotationView.m */; }; - 354B839C1D2E9B48005D9406 /* MBXUserLocationAnnotationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 354B839B1D2E9B48005D9406 /* MBXUserLocationAnnotationView.m */; }; - 3557F7B01E1D27D300CCA5E6 /* MGLDistanceFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3557F7AE1E1D27D300CCA5E6 /* MGLDistanceFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3557F7B21E1D27D300CCA5E6 /* MGLDistanceFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3557F7AF1E1D27D300CCA5E6 /* MGLDistanceFormatter.m */; }; - 35599DED1D46F14E0048254D /* MGLStyleValue.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35599DEA1D46F14E0048254D /* MGLStyleValue.mm */; }; - 35599DEE1D46F14E0048254D /* MGLStyleValue.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35599DEA1D46F14E0048254D /* MGLStyleValue.mm */; }; - 355AE0011E9281DA00F3939D /* MGLScaleBar.mm in Sources */ = {isa = PBXBuildFile; fileRef = 355ADFFC1E9281DA00F3939D /* MGLScaleBar.mm */; }; - 355AE0021E9281DA00F3939D /* MGLScaleBar.mm in Sources */ = {isa = PBXBuildFile; fileRef = 355ADFFC1E9281DA00F3939D /* MGLScaleBar.mm */; }; - 3566C7661D4A77BA008152BC /* MGLShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3566C7641D4A77BA008152BC /* MGLShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3566C7671D4A77BA008152BC /* MGLShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3566C7641D4A77BA008152BC /* MGLShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3566C7681D4A77BA008152BC /* MGLShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3566C7651D4A77BA008152BC /* MGLShapeSource.mm */; }; - 3566C7691D4A77BA008152BC /* MGLShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3566C7651D4A77BA008152BC /* MGLShapeSource.mm */; }; - 3566C76C1D4A8DFA008152BC /* MGLRasterTileSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3566C76A1D4A8DFA008152BC /* MGLRasterTileSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3566C76D1D4A8DFA008152BC /* MGLRasterTileSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3566C76A1D4A8DFA008152BC /* MGLRasterTileSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3566C76E1D4A8DFA008152BC /* MGLRasterTileSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3566C76B1D4A8DFA008152BC /* MGLRasterTileSource.mm */; }; - 3566C76F1D4A8DFA008152BC /* MGLRasterTileSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3566C76B1D4A8DFA008152BC /* MGLRasterTileSource.mm */; }; - 3566C7711D4A9198008152BC /* MGLSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3566C7701D4A9198008152BC /* MGLSource_Private.h */; }; - 3566C7721D4A9198008152BC /* MGLSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3566C7701D4A9198008152BC /* MGLSource_Private.h */; }; - 357579801D501E09000B822E /* MGLFillStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3575797F1D501E09000B822E /* MGLFillStyleLayerTests.mm */; }; - 357579831D502AE6000B822E /* MGLRasterStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 357579821D502AE6000B822E /* MGLRasterStyleLayerTests.mm */; }; - 357579851D502AF5000B822E /* MGLSymbolStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 357579841D502AF5000B822E /* MGLSymbolStyleLayerTests.mm */; }; - 357579871D502AFE000B822E /* MGLLineStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 357579861D502AFE000B822E /* MGLLineStyleLayerTests.mm */; }; - 357579891D502B06000B822E /* MGLCircleStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 357579881D502B06000B822E /* MGLCircleStyleLayerTests.mm */; }; - 3575798B1D502B0C000B822E /* MGLBackgroundStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3575798A1D502B0C000B822E /* MGLBackgroundStyleLayerTests.mm */; }; - 357FE2DD1E02D2B20068B753 /* NSCoder+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 357FE2DB1E02D2B20068B753 /* NSCoder+MGLAdditions.h */; }; - 357FE2DE1E02D2B20068B753 /* NSCoder+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 357FE2DB1E02D2B20068B753 /* NSCoder+MGLAdditions.h */; }; - 357FE2DF1E02D2B20068B753 /* NSCoder+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 357FE2DC1E02D2B20068B753 /* NSCoder+MGLAdditions.mm */; }; - 357FE2E01E02D2B20068B753 /* NSCoder+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 357FE2DC1E02D2B20068B753 /* NSCoder+MGLAdditions.mm */; }; - 3598544D1E1D38AA00B29F84 /* MGLDistanceFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3598544C1E1D38AA00B29F84 /* MGLDistanceFormatterTests.m */; }; - 359F57461D2FDDA6005217F1 /* MGLUserLocationAnnotationView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 359F57451D2FDBD5005217F1 /* MGLUserLocationAnnotationView_Private.h */; }; - 35B82BF81D6C5F8400B1B721 /* NSPredicate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35B82BF61D6C5F8400B1B721 /* NSPredicate+MGLAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35B82BF91D6C5F8400B1B721 /* NSPredicate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35B82BF61D6C5F8400B1B721 /* NSPredicate+MGLAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35B82BFA1D6C5F8400B1B721 /* NSPredicate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35B82BF71D6C5F8400B1B721 /* NSPredicate+MGLAdditions.mm */; }; - 35B82BFB1D6C5F8400B1B721 /* NSPredicate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35B82BF71D6C5F8400B1B721 /* NSPredicate+MGLAdditions.mm */; }; - 35B8E08C1D6C8B5100E768D2 /* MGLPredicateTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35B8E08B1D6C8B5100E768D2 /* MGLPredicateTests.mm */; }; - 35CE61821D4165D9004F2359 /* UIColor+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35CE61801D4165D9004F2359 /* UIColor+MGLAdditions.h */; }; - 35CE61831D4165D9004F2359 /* UIColor+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35CE61801D4165D9004F2359 /* UIColor+MGLAdditions.h */; }; - 35CE61841D4165D9004F2359 /* UIColor+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35CE61811D4165D9004F2359 /* UIColor+MGLAdditions.mm */; }; - 35CE61851D4165D9004F2359 /* UIColor+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35CE61811D4165D9004F2359 /* UIColor+MGLAdditions.mm */; }; - 35D13AB71D3D15E300AFB4E0 /* MGLStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 35D13AB51D3D15E300AFB4E0 /* MGLStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35D13AB81D3D15E300AFB4E0 /* MGLStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 35D13AB51D3D15E300AFB4E0 /* MGLStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35D13AB91D3D15E300AFB4E0 /* MGLStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35D13AB61D3D15E300AFB4E0 /* MGLStyleLayer.mm */; }; - 35D13ABA1D3D15E300AFB4E0 /* MGLStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35D13AB61D3D15E300AFB4E0 /* MGLStyleLayer.mm */; }; - 35D13AC31D3D19DD00AFB4E0 /* MGLFillStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 35D13AC11D3D19DD00AFB4E0 /* MGLFillStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35D13AC41D3D19DD00AFB4E0 /* MGLFillStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 35D13AC11D3D19DD00AFB4E0 /* MGLFillStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35D13AC51D3D19DD00AFB4E0 /* MGLFillStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35D13AC21D3D19DD00AFB4E0 /* MGLFillStyleLayer.mm */; }; - 35D13AC61D3D19DD00AFB4E0 /* MGLFillStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35D13AC21D3D19DD00AFB4E0 /* MGLFillStyleLayer.mm */; }; - 35D3A1E61E9BE7EB002B38EE /* MGLScaleBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 355ADFFB1E9281DA00F3939D /* MGLScaleBar.h */; }; - 35D3A1E71E9BE7EC002B38EE /* MGLScaleBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 355ADFFB1E9281DA00F3939D /* MGLScaleBar.h */; }; - 35D9DDE21DA25EEC00DAAD69 /* MGLCodingTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35D9DDE11DA25EEC00DAAD69 /* MGLCodingTests.mm */; }; - 35E0CFE61D3E501500188327 /* MGLStyle_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E0CFE51D3E501500188327 /* MGLStyle_Private.h */; }; - 35E0CFE71D3E501500188327 /* MGLStyle_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E0CFE51D3E501500188327 /* MGLStyle_Private.h */; }; - 35E1A4D81D74336F007AA97F /* MGLValueEvaluator.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E1A4D71D74336F007AA97F /* MGLValueEvaluator.h */; }; - 35E1A4D91D74336F007AA97F /* MGLValueEvaluator.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E1A4D71D74336F007AA97F /* MGLValueEvaluator.h */; }; - 35E79F201D41266300957B9E /* MGLStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E79F1F1D41266300957B9E /* MGLStyleLayer_Private.h */; }; - 35E79F211D41266300957B9E /* MGLStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E79F1F1D41266300957B9E /* MGLStyleLayer_Private.h */; }; - 3E6465D62065767A00685536 /* LimeGreenStyleLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E6465D42065767A00685536 /* LimeGreenStyleLayer.m */; }; - 3E8770612074297100B7E842 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 554180411D2E97DE00012372 /* OpenGLES.framework */; }; - 3EA93369F61CF70AFA50465D /* MGLRendererConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3EA931BC4F087E166D538F21 /* MGLRendererConfiguration.mm */; }; - 3EA934623AD0000B7D99C3FB /* MGLRendererConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EA9337830C7738BF7F5493C /* MGLRendererConfiguration.h */; }; - 3EA9363147E77DD29FA06063 /* MGLRendererConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EA9337830C7738BF7F5493C /* MGLRendererConfiguration.h */; }; - 3EA9366247780E4F252652A8 /* MGLRendererConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3EA931BC4F087E166D538F21 /* MGLRendererConfiguration.mm */; }; - 400533011DB0862B0069F638 /* NSArray+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 400532FF1DB0862B0069F638 /* NSArray+MGLAdditions.h */; }; - 400533021DB0862B0069F638 /* NSArray+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 400533001DB0862B0069F638 /* NSArray+MGLAdditions.mm */; }; - 400533031DB086490069F638 /* NSArray+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 400533001DB0862B0069F638 /* NSArray+MGLAdditions.mm */; }; - 4018B1C81CDC287F00F666AF /* MGLAnnotationView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4018B1C41CDC277F00F666AF /* MGLAnnotationView.mm */; }; - 4018B1C91CDC288A00F666AF /* MGLAnnotationView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4018B1C31CDC277F00F666AF /* MGLAnnotationView_Private.h */; }; - 4018B1CA1CDC288E00F666AF /* MGLAnnotationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4018B1C51CDC277F00F666AF /* MGLAnnotationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4018B1CB1CDC288E00F666AF /* MGLAnnotationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4018B1C51CDC277F00F666AF /* MGLAnnotationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4031ACFF1E9FD29F00A3EA26 /* MGLSDKTestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4031ACFE1E9FD29F00A3EA26 /* MGLSDKTestHelpers.swift */; }; - 404326891D5B9B27007111BD /* MGLAnnotationContainerView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 404326881D5B9B1A007111BD /* MGLAnnotationContainerView_Private.h */; }; - 4049C29D1DB6CD6C00B3F799 /* MGLPointCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 4049C29B1DB6CD6C00B3F799 /* MGLPointCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4049C29E1DB6CD6C00B3F799 /* MGLPointCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 4049C29B1DB6CD6C00B3F799 /* MGLPointCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4049C29F1DB6CD6C00B3F799 /* MGLPointCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4049C29C1DB6CD6C00B3F799 /* MGLPointCollection.mm */; }; - 4049C2A01DB6CD6C00B3F799 /* MGLPointCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4049C29C1DB6CD6C00B3F799 /* MGLPointCollection.mm */; }; - 4049C2AC1DB6E05500B3F799 /* MGLPointCollection_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4049C2AB1DB6E05500B3F799 /* MGLPointCollection_Private.h */; }; - 404C26E21D89B877000AA13D /* MGLTileSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 404C26E01D89B877000AA13D /* MGLTileSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 404C26E31D89B877000AA13D /* MGLTileSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 404C26E01D89B877000AA13D /* MGLTileSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 404C26E41D89B877000AA13D /* MGLTileSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 404C26E11D89B877000AA13D /* MGLTileSource.mm */; }; - 404C26E51D89B877000AA13D /* MGLTileSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 404C26E11D89B877000AA13D /* MGLTileSource.mm */; }; - 404C26E71D89C55D000AA13D /* MGLTileSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 404C26E61D89C515000AA13D /* MGLTileSource_Private.h */; }; - 404C26E81D89C55D000AA13D /* MGLTileSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 404C26E61D89C515000AA13D /* MGLTileSource_Private.h */; }; - 406E99B91FFEFF1B00D9FFCC /* MMEEventLogReportViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 406E99B11FFEFED500D9FFCC /* MMEEventLogReportViewController.m */; }; - 406E99BA1FFEFF1B00D9FFCC /* MMEEventLogReportViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 406E99B11FFEFED500D9FFCC /* MMEEventLogReportViewController.m */; }; - 406E99BB1FFF006C00D9FFCC /* MMEUINavigation.m in Sources */ = {isa = PBXBuildFile; fileRef = 406E99B21FFEFED500D9FFCC /* MMEUINavigation.m */; }; - 406E99BC1FFF006D00D9FFCC /* MMEUINavigation.m in Sources */ = {isa = PBXBuildFile; fileRef = 406E99B21FFEFED500D9FFCC /* MMEUINavigation.m */; }; - 40834BE71FE05E1800C1BD0D /* MMEAPIClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BA51FE05D6B00C1BD0D /* MMEAPIClient.m */; }; - 40834BE91FE05E1800C1BD0D /* MMECommonEventData.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BCE1FE05D7100C1BD0D /* MMECommonEventData.m */; }; - 40834BEA1FE05E1800C1BD0D /* MMEConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BC01FE05D6E00C1BD0D /* MMEConstants.m */; }; - 40834BEB1FE05E1800C1BD0D /* MMEDependencyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BB41FE05D6D00C1BD0D /* MMEDependencyManager.m */; }; - 40834BEC1FE05E1800C1BD0D /* MMEEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BC71FE05D7000C1BD0D /* MMEEvent.m */; }; - 40834BED1FE05E1800C1BD0D /* MMEEventLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BB71FE05D6D00C1BD0D /* MMEEventLogger.m */; }; - 40834BEE1FE05E1800C1BD0D /* MMEEventsConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BB21FE05D6D00C1BD0D /* MMEEventsConfiguration.m */; }; - 40834BEF1FE05E1800C1BD0D /* MMEEventsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BA41FE05D6B00C1BD0D /* MMEEventsManager.m */; }; - 40834BF01FE05E1800C1BD0D /* MMELocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BB81FE05D6D00C1BD0D /* MMELocationManager.m */; }; - 40834BF21FE05E1800C1BD0D /* MMENSURLSessionWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BC61FE05D7000C1BD0D /* MMENSURLSessionWrapper.m */; }; - 40834BF31FE05E1800C1BD0D /* MMETimerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BB91FE05D6E00C1BD0D /* MMETimerManager.m */; }; - 40834BF61FE05E1800C1BD0D /* MMEUIApplicationWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BCA1FE05D7000C1BD0D /* MMEUIApplicationWrapper.m */; }; - 40834BF71FE05E1800C1BD0D /* MMEUniqueIdentifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BAD1FE05D6C00C1BD0D /* MMEUniqueIdentifier.m */; }; - 40834BF91FE05E1800C1BD0D /* MMEReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BCD1FE05D7100C1BD0D /* MMEReachability.m */; }; - 40834BFB1FE05E1800C1BD0D /* MMEAPIClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BA51FE05D6B00C1BD0D /* MMEAPIClient.m */; }; - 40834BFD1FE05E1800C1BD0D /* MMECommonEventData.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BCE1FE05D7100C1BD0D /* MMECommonEventData.m */; }; - 40834BFE1FE05E1800C1BD0D /* MMEConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BC01FE05D6E00C1BD0D /* MMEConstants.m */; }; - 40834BFF1FE05E1800C1BD0D /* MMEDependencyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BB41FE05D6D00C1BD0D /* MMEDependencyManager.m */; }; - 40834C001FE05E1800C1BD0D /* MMEEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BC71FE05D7000C1BD0D /* MMEEvent.m */; }; - 40834C011FE05E1800C1BD0D /* MMEEventLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BB71FE05D6D00C1BD0D /* MMEEventLogger.m */; }; - 40834C021FE05E1800C1BD0D /* MMEEventsConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BB21FE05D6D00C1BD0D /* MMEEventsConfiguration.m */; }; - 40834C031FE05E1800C1BD0D /* MMEEventsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BA41FE05D6B00C1BD0D /* MMEEventsManager.m */; }; - 40834C041FE05E1800C1BD0D /* MMELocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BB81FE05D6D00C1BD0D /* MMELocationManager.m */; }; - 40834C051FE05E1800C1BD0D /* MMEDate.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BBC1FE05D6E00C1BD0D /* MMEDate.m */; }; - 40834C061FE05E1800C1BD0D /* MMENSURLSessionWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BC61FE05D7000C1BD0D /* MMENSURLSessionWrapper.m */; }; - 40834C071FE05E1800C1BD0D /* MMETimerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BB91FE05D6E00C1BD0D /* MMETimerManager.m */; }; - 40834C0A1FE05E1800C1BD0D /* MMEUIApplicationWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BCA1FE05D7000C1BD0D /* MMEUIApplicationWrapper.m */; }; - 40834C0B1FE05E1800C1BD0D /* MMEUniqueIdentifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BAD1FE05D6C00C1BD0D /* MMEUniqueIdentifier.m */; }; - 40834C0D1FE05E1800C1BD0D /* MMEReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BCD1FE05D7100C1BD0D /* MMEReachability.m */; }; - 4085AF091D933DEA00F11B22 /* MGLTileSetTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4085AF081D933DEA00F11B22 /* MGLTileSetTests.mm */; }; - 408AA8571DAEDA1700022900 /* NSDictionary+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 408AA8551DAEDA0800022900 /* NSDictionary+MGLAdditions.h */; }; - 408AA8581DAEDA1E00022900 /* NSDictionary+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 408AA8561DAEDA0800022900 /* NSDictionary+MGLAdditions.mm */; }; - 408AA8591DAEDA1E00022900 /* NSDictionary+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 408AA8561DAEDA0800022900 /* NSDictionary+MGLAdditions.mm */; }; - 409D0A0D1ED614CE00C95D0C /* MGLAnnotationViewIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 409D0A0C1ED614CE00C95D0C /* MGLAnnotationViewIntegrationTests.swift */; }; - 409F43FD1E9E781C0048729D /* MGLMapViewDelegateIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 409F43FC1E9E781C0048729D /* MGLMapViewDelegateIntegrationTests.swift */; }; - 40CF6DBB1DAC3C6600A4D18B /* MGLShape_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 40CF6DBA1DAC3C1800A4D18B /* MGLShape_Private.h */; }; - 40CFA6511D7875BB008103BD /* MGLShapeSourceTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 40CFA6501D787579008103BD /* MGLShapeSourceTests.mm */; }; - 40EDA1C01CFE0E0200D9EA68 /* MGLAnnotationContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 40EDA1BD1CFE0D4A00D9EA68 /* MGLAnnotationContainerView.h */; }; - 40EDA1C11CFE0E0500D9EA68 /* MGLAnnotationContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 40EDA1BE1CFE0D4A00D9EA68 /* MGLAnnotationContainerView.m */; }; - 40EDA1C21CFE0E0500D9EA68 /* MGLAnnotationContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 40EDA1BE1CFE0D4A00D9EA68 /* MGLAnnotationContainerView.m */; }; - 40F887701D7A1E58008ECB67 /* MGLShapeSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 40F8876F1D7A1DB8008ECB67 /* MGLShapeSource_Private.h */; }; - 40F887711D7A1E59008ECB67 /* MGLShapeSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 40F8876F1D7A1DB8008ECB67 /* MGLShapeSource_Private.h */; }; - 40FDA76B1CCAAA6800442548 /* MBXAnnotationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 40FDA76A1CCAAA6800442548 /* MBXAnnotationView.m */; }; - 550570C622958FB400228ECF /* MGLMapView+Impl.mm in Sources */ = {isa = PBXBuildFile; fileRef = 550570C422958FB300228ECF /* MGLMapView+Impl.mm */; }; - 550570C722958FB400228ECF /* MGLMapView+Impl.mm in Sources */ = {isa = PBXBuildFile; fileRef = 550570C422958FB300228ECF /* MGLMapView+Impl.mm */; }; - 550570C822958FB400228ECF /* MGLMapView+Impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 550570C522958FB400228ECF /* MGLMapView+Impl.h */; }; - 550570C922958FB400228ECF /* MGLMapView+Impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 550570C522958FB400228ECF /* MGLMapView+Impl.h */; }; - 550570D22296E96E00228ECF /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA27C24D1CBB3811000B0ECD /* GLKit.framework */; }; - 556660CA1E1BF3A900E2C41B /* MGLFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 556660C91E1BF3A900E2C41B /* MGLFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 556660D81E1D085500E2C41B /* MGLVersionNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 556660D71E1D085500E2C41B /* MGLVersionNumber.m */; }; - 556660DB1E1D8E8D00E2C41B /* MGLFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 556660C91E1BF3A900E2C41B /* MGLFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5580B45B229570A10091291B /* MGLMapView+OpenGL.h in Headers */ = {isa = PBXBuildFile; fileRef = 5580B459229570A00091291B /* MGLMapView+OpenGL.h */; }; - 5580B45C229570A10091291B /* MGLMapView+OpenGL.h in Headers */ = {isa = PBXBuildFile; fileRef = 5580B459229570A00091291B /* MGLMapView+OpenGL.h */; }; - 5580B45D229570A10091291B /* MGLMapView+OpenGL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5580B45A229570A10091291B /* MGLMapView+OpenGL.mm */; }; - 5580B45E229570A10091291B /* MGLMapView+OpenGL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5580B45A229570A10091291B /* MGLMapView+OpenGL.mm */; }; - 558DE7A01E5615E400C7916D /* MGLFoundation_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 558DE79E1E5615E400C7916D /* MGLFoundation_Private.h */; }; - 558DE7A11E5615E400C7916D /* MGLFoundation_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 558DE79E1E5615E400C7916D /* MGLFoundation_Private.h */; }; - 558DE7A21E5615E400C7916D /* MGLFoundation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 558DE79F1E5615E400C7916D /* MGLFoundation.mm */; }; - 558DE7A31E5615E400C7916D /* MGLFoundation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 558DE79F1E5615E400C7916D /* MGLFoundation.mm */; }; - 55CF752F213ED92000ED86C4 /* libmbgl-vendor-icu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55CF752E213ED92000ED86C4 /* libmbgl-vendor-icu.a */; }; - 55CF7531213ED92A00ED86C4 /* libmbgl-vendor-icu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55CF7530213ED92A00ED86C4 /* libmbgl-vendor-icu.a */; }; - 55D120A61F791007004B6D81 /* libmbgl-loop-darwin.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55D120A71F791007004B6D81 /* libmbgl-loop-darwin.a */; }; - 55D120A81F79100C004B6D81 /* libmbgl-filesource.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55D120A91F79100C004B6D81 /* libmbgl-filesource.a */; }; - 55E2AD131E5B125400E8C587 /* MGLOfflineStorageTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55E2AD121E5B125400E8C587 /* MGLOfflineStorageTests.mm */; }; - 55E5665121C2A1C20008B8B5 /* MMEReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BCC1FE05D7100C1BD0D /* MMEReachability.h */; }; - 55E5665221C2A2080008B8B5 /* MMENamespacedDependencies.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BC81FE05D7000C1BD0D /* MMENamespacedDependencies.h */; }; - 55E5665321C2A2080008B8B5 /* MapboxMobileEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BAC1FE05D6C00C1BD0D /* MapboxMobileEvents.h */; }; - 55E5665521C2A2080008B8B5 /* MMEAPIClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BAB1FE05D6C00C1BD0D /* MMEAPIClient.h */; }; - 55E5665721C2A2080008B8B5 /* MMECommonEventData.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BAE1FE05D6C00C1BD0D /* MMECommonEventData.h */; }; - 55E5665821C2A2080008B8B5 /* MMEConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BB01FE05D6C00C1BD0D /* MMEConstants.h */; }; - 55E5665921C2A2080008B8B5 /* MMEDependencyManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BB11FE05D6D00C1BD0D /* MMEDependencyManager.h */; }; - 55E5665A21C2A2080008B8B5 /* MMEEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BBA1FE05D6E00C1BD0D /* MMEEvent.h */; }; - 55E5665B21C2A2080008B8B5 /* MMEEventLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BA61FE05D6B00C1BD0D /* MMEEventLogger.h */; }; - 55E5665C21C2A2080008B8B5 /* MMEEventLogReportViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 406E99B51FFEFED600D9FFCC /* MMEEventLogReportViewController.h */; }; - 55E5665D21C2A2080008B8B5 /* MMEEventsConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BBB1FE05D6E00C1BD0D /* MMEEventsConfiguration.h */; }; - 55E5666021C2A2080008B8B5 /* MMEConfigurator.h in Headers */ = {isa = PBXBuildFile; fileRef = ACA65F4F214066E200537748 /* MMEConfigurator.h */; }; - 55E5666121C2A2080008B8B5 /* MMEEventsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BA31FE05D6B00C1BD0D /* MMEEventsManager.h */; }; - 55E5666221C2A2080008B8B5 /* MMELocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BB31FE05D6D00C1BD0D /* MMELocationManager.h */; }; - 55E5666321C2A2080008B8B5 /* MMEMetrics.h in Headers */ = {isa = PBXBuildFile; fileRef = ACD024552187EAAF00D8C8A7 /* MMEMetrics.h */; }; - 55E5666421C2A2080008B8B5 /* MMEMetricsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ACD024562187EAAF00D8C8A7 /* MMEMetricsManager.h */; }; - 55E5666621C2A2080008B8B5 /* MMENSURLSessionWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BAA1FE05D6C00C1BD0D /* MMENSURLSessionWrapper.h */; }; - 55E5666721C2A2080008B8B5 /* MMETimerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BC91FE05D7000C1BD0D /* MMETimerManager.h */; }; - 55E5666821C2A2080008B8B5 /* MMETypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BB61FE05D6D00C1BD0D /* MMETypes.h */; }; - 55E5666921C2A2080008B8B5 /* MMEUIApplicationWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BBE1FE05D6E00C1BD0D /* MMEUIApplicationWrapper.h */; }; - 55E5666A21C2A2080008B8B5 /* MMEUINavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 406E99B31FFEFED600D9FFCC /* MMEUINavigation.h */; }; - 55E5666B21C2A2080008B8B5 /* MMEUniqueIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BBF1FE05D6E00C1BD0D /* MMEUniqueIdentifier.h */; }; - 55E5666C21C2A2080008B8B5 /* MMEDispatchManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ACA65F552140696B00537748 /* MMEDispatchManager.h */; }; - 632281DF1E6F855900D75A5D /* MBXEmbeddedMapViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 632281DE1E6F855900D75A5D /* MBXEmbeddedMapViewController.m */; }; - 6407D6701E0085FD00F6A9C3 /* MGLDocumentationExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6407D66F1E0085FD00F6A9C3 /* MGLDocumentationExampleTests.swift */; }; - 6F018BAE220031B8003E7269 /* UIView+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FAFA29B220023840088709E /* UIView+MGLAdditions.m */; }; - 6F018BAF220031BF003E7269 /* UIView+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FAFA29A220023840088709E /* UIView+MGLAdditions.h */; }; - 6F018BB0220031BF003E7269 /* UIView+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FAFA29A220023840088709E /* UIView+MGLAdditions.h */; }; - 6F018BB1220031C1003E7269 /* UIView+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FAFA29B220023840088709E /* UIView+MGLAdditions.m */; }; - 6FA9341721EF372100AA9CA8 /* MBXOrnamentsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FA9341521EF372100AA9CA8 /* MBXOrnamentsViewController.m */; }; - 74CB5EB1219B252C00102936 /* MGLStyleLayerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EAF219B252C00102936 /* MGLStyleLayerManager.h */; }; - 74CB5EB2219B252C00102936 /* MGLStyleLayerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EAF219B252C00102936 /* MGLStyleLayerManager.h */; }; - 74CB5EB3219B252C00102936 /* MGLStyleLayerManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 74CB5EB0219B252C00102936 /* MGLStyleLayerManager.mm */; }; - 74CB5EB4219B252C00102936 /* MGLStyleLayerManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 74CB5EB0219B252C00102936 /* MGLStyleLayerManager.mm */; }; - 74CB5EB9219B280400102936 /* MGLHillshadeStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EB5219B280300102936 /* MGLHillshadeStyleLayer_Private.h */; }; - 74CB5EBA219B280400102936 /* MGLHillshadeStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EB5219B280300102936 /* MGLHillshadeStyleLayer_Private.h */; }; - 74CB5EBB219B280400102936 /* MGLFillExtrusionStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EB6219B280300102936 /* MGLFillExtrusionStyleLayer_Private.h */; }; - 74CB5EBC219B280400102936 /* MGLFillExtrusionStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EB6219B280300102936 /* MGLFillExtrusionStyleLayer_Private.h */; }; - 74CB5EBD219B280400102936 /* MGLFillStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EB7219B280300102936 /* MGLFillStyleLayer_Private.h */; }; - 74CB5EBE219B280400102936 /* MGLFillStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EB7219B280300102936 /* MGLFillStyleLayer_Private.h */; }; - 74CB5EBF219B280400102936 /* MGLHeatmapStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EB8219B280300102936 /* MGLHeatmapStyleLayer_Private.h */; }; - 74CB5EC0219B280400102936 /* MGLHeatmapStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EB8219B280300102936 /* MGLHeatmapStyleLayer_Private.h */; }; - 74CB5EC3219B282500102936 /* MGLCircleStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EC1219B282500102936 /* MGLCircleStyleLayer_Private.h */; }; - 74CB5EC4219B282500102936 /* MGLCircleStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EC1219B282500102936 /* MGLCircleStyleLayer_Private.h */; }; - 74CB5EC5219B282500102936 /* MGLBackgroundStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EC2219B282500102936 /* MGLBackgroundStyleLayer_Private.h */; }; - 74CB5EC6219B282500102936 /* MGLBackgroundStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EC2219B282500102936 /* MGLBackgroundStyleLayer_Private.h */; }; - 74CB5ECA219B285000102936 /* MGLLineStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EC7219B285000102936 /* MGLLineStyleLayer_Private.h */; }; - 74CB5ECB219B285000102936 /* MGLLineStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EC7219B285000102936 /* MGLLineStyleLayer_Private.h */; }; - 74CB5ECC219B285000102936 /* MGLOpenGLStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EC8219B285000102936 /* MGLOpenGLStyleLayer_Private.h */; }; - 74CB5ECD219B285000102936 /* MGLOpenGLStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EC8219B285000102936 /* MGLOpenGLStyleLayer_Private.h */; }; - 74CB5ECE219B285000102936 /* MGLRasterStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EC9219B285000102936 /* MGLRasterStyleLayer_Private.h */; }; - 74CB5ECF219B285000102936 /* MGLRasterStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5EC9219B285000102936 /* MGLRasterStyleLayer_Private.h */; }; - 74CB5ED1219B286400102936 /* MGLSymbolStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5ED0219B286400102936 /* MGLSymbolStyleLayer_Private.h */; }; - 74CB5ED2219B286400102936 /* MGLSymbolStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 74CB5ED0219B286400102936 /* MGLSymbolStyleLayer_Private.h */; }; - 8989B17C201A48EB0081CF59 /* MGLHeatmapStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8989B17A201A48EA0081CF59 /* MGLHeatmapStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8989B17D201A48EB0081CF59 /* MGLHeatmapStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8989B17A201A48EA0081CF59 /* MGLHeatmapStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8989B17E201A48EB0081CF59 /* MGLHeatmapStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8989B17B201A48EA0081CF59 /* MGLHeatmapStyleLayer.mm */; }; - 8989B17F201A48EB0081CF59 /* MGLHeatmapStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8989B17B201A48EA0081CF59 /* MGLHeatmapStyleLayer.mm */; }; - 920A3E5D1E6F995200C16EFC /* MGLSourceQueryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 920A3E5C1E6F995200C16EFC /* MGLSourceQueryTests.m */; }; - 9221BAAD2069843A0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9221BAAC2069843A0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h */; }; - 9221BAB020699F8A0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9221BAAC2069843A0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h */; }; - 927FBCFC1F4DAA8300F8BF1F /* MBXSnapshotsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 927FBCFB1F4DAA8300F8BF1F /* MBXSnapshotsViewController.m */; }; - 927FBCFF1F4DB05500F8BF1F /* MGLMapSnapshotter.h in Headers */ = {isa = PBXBuildFile; fileRef = 927FBCFD1F4DB05500F8BF1F /* MGLMapSnapshotter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 927FBD001F4DB05500F8BF1F /* MGLMapSnapshotter.h in Headers */ = {isa = PBXBuildFile; fileRef = 927FBCFD1F4DB05500F8BF1F /* MGLMapSnapshotter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 927FBD011F4DB05500F8BF1F /* MGLMapSnapshotter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 927FBCFE1F4DB05500F8BF1F /* MGLMapSnapshotter.mm */; }; - 927FBD021F4DB05500F8BF1F /* MGLMapSnapshotter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 927FBCFE1F4DB05500F8BF1F /* MGLMapSnapshotter.mm */; }; - 929EFFAB1F56DCD4003A77D5 /* MGLAnnotationView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4018B1C41CDC277F00F666AF /* MGLAnnotationView.mm */; }; - 92F2C3ED1F0E3C3A00268EC0 /* MGLRendererFrontend.h in Headers */ = {isa = PBXBuildFile; fileRef = 92F2C3EC1F0E3C3A00268EC0 /* MGLRendererFrontend.h */; }; - 92FC0AEA207CEE16007B6B54 /* MGLShapeOfflineRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = 92FC0AE7207CEE16007B6B54 /* MGLShapeOfflineRegion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 92FC0AEB207CEE16007B6B54 /* MGLShapeOfflineRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = 92FC0AE7207CEE16007B6B54 /* MGLShapeOfflineRegion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 92FC0AEC207CEE16007B6B54 /* MGLShapeOfflineRegion_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 92FC0AE8207CEE16007B6B54 /* MGLShapeOfflineRegion_Private.h */; }; - 92FC0AED207CEE16007B6B54 /* MGLShapeOfflineRegion_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 92FC0AE8207CEE16007B6B54 /* MGLShapeOfflineRegion_Private.h */; }; - 92FC0AEE207CEE16007B6B54 /* MGLShapeOfflineRegion.mm in Sources */ = {isa = PBXBuildFile; fileRef = 92FC0AE9207CEE16007B6B54 /* MGLShapeOfflineRegion.mm */; }; - 92FC0AEF207CEE16007B6B54 /* MGLShapeOfflineRegion.mm in Sources */ = {isa = PBXBuildFile; fileRef = 92FC0AE9207CEE16007B6B54 /* MGLShapeOfflineRegion.mm */; }; - 96036A01200565C700510F3D /* NSOrthography+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 960369FF200565C700510F3D /* NSOrthography+MGLAdditions.h */; }; - 96036A02200565C700510F3D /* NSOrthography+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 960369FF200565C700510F3D /* NSOrthography+MGLAdditions.h */; }; - 96036A03200565C700510F3D /* NSOrthography+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 96036A00200565C700510F3D /* NSOrthography+MGLAdditions.m */; }; - 96036A04200565C700510F3D /* NSOrthography+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 96036A00200565C700510F3D /* NSOrthography+MGLAdditions.m */; }; - 96036A0620059BBA00510F3D /* MGLNSOrthographyAdditionsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96036A0520059BBA00510F3D /* MGLNSOrthographyAdditionsTests.m */; }; - 960D0C361ECF5AAF008E151F /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 960D0C351ECF5AAF008E151F /* Images.xcassets */; }; - 960D0C371ECF5AAF008E151F /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 960D0C351ECF5AAF008E151F /* Images.xcassets */; }; - 9620BB381E69FE1700705A1D /* MGLSDKUpdateChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 9620BB361E69FE1700705A1D /* MGLSDKUpdateChecker.h */; }; - 9620BB391E69FE1700705A1D /* MGLSDKUpdateChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 9620BB361E69FE1700705A1D /* MGLSDKUpdateChecker.h */; }; - 9620BB3A1E69FE1700705A1D /* MGLSDKUpdateChecker.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9620BB371E69FE1700705A1D /* MGLSDKUpdateChecker.mm */; }; - 9620BB3B1E69FE1700705A1D /* MGLSDKUpdateChecker.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9620BB371E69FE1700705A1D /* MGLSDKUpdateChecker.mm */; }; - 9621F2502091020E005B3800 /* NSExpression+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3510FFEE1D6D9D8C00F413B2 /* NSExpression+MGLAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96381C0222C6F3950053497D /* MGLMapViewPitchTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96381C0122C6F3950053497D /* MGLMapViewPitchTests.m */; }; - 9641771F22D546DA00332422 /* MGLCompassButton_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9641771E22D546DA00332422 /* MGLCompassButton_Private.h */; }; - 9641772022D546DA00332422 /* MGLCompassButton_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9641771E22D546DA00332422 /* MGLCompassButton_Private.h */; }; - 9654C1261FFC1AB900DB6A19 /* MGLPolyline_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9654C1251FFC1AB900DB6A19 /* MGLPolyline_Private.h */; }; - 9654C1291FFC1CCD00DB6A19 /* MGLPolygon_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9654C1271FFC1CC000DB6A19 /* MGLPolygon_Private.h */; }; - 9658C155204761FC00D8A674 /* MGLMapViewScaleBarTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9658C154204761FC00D8A674 /* MGLMapViewScaleBarTests.m */; }; - 965DF51120F9430500438AAC /* MBXFrameTimeGraphView.m in Sources */ = {isa = PBXBuildFile; fileRef = 965DF51020F9430500438AAC /* MBXFrameTimeGraphView.m */; }; - 966FCF4C1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 966FCF4A1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.h */; }; - 966FCF4E1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 966FCF4B1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.m */; }; - 966FCF4F1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 966FCF4B1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.m */; }; - 966FCF531F3C322400F2B6DE /* MGLUserLocationHeadingArrowLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 966FCF501F3C321000F2B6DE /* MGLUserLocationHeadingArrowLayer.h */; }; - 966FCF541F3C323300F2B6DE /* MGLUserLocationHeadingArrowLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 966FCF511F3C321000F2B6DE /* MGLUserLocationHeadingArrowLayer.m */; }; - 966FCF551F3C323500F2B6DE /* MGLUserLocationHeadingArrowLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 966FCF511F3C321000F2B6DE /* MGLUserLocationHeadingArrowLayer.m */; }; - 967C864B210A9D3C004DF794 /* UIDevice+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 967C8649210A9D3C004DF794 /* UIDevice+MGLAdditions.h */; }; - 967C864C210A9D3C004DF794 /* UIDevice+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 967C8649210A9D3C004DF794 /* UIDevice+MGLAdditions.h */; }; - 967C864D210A9D3C004DF794 /* UIDevice+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 967C864A210A9D3C004DF794 /* UIDevice+MGLAdditions.m */; }; - 967C864E210A9D3C004DF794 /* UIDevice+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 967C864A210A9D3C004DF794 /* UIDevice+MGLAdditions.m */; }; - 9680273F22653B84006BA4A1 /* MBXSKUToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 9680273E22653B84006BA4A1 /* MBXSKUToken.h */; }; - 9680274022653B84006BA4A1 /* MBXSKUToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 9680273E22653B84006BA4A1 /* MBXSKUToken.h */; }; - 9680276422655696006BA4A1 /* libmbxaccounts.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9680274122653C3E006BA4A1 /* libmbxaccounts.a */; }; - 96802766226556C5006BA4A1 /* libmbxaccounts.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9680274122653C3E006BA4A1 /* libmbxaccounts.a */; }; - 9686D1BD22D9357700194EA0 /* MGLMapViewZoomTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9686D1BC22D9357700194EA0 /* MGLMapViewZoomTests.mm */; }; - 968F36B51E4D128D003A5522 /* MGLDistanceFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3557F7AE1E1D27D300CCA5E6 /* MGLDistanceFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96E027231E57C76E004B8E66 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 96E027251E57C76E004B8E66 /* Localizable.strings */; }; - 96E516DC2000547000A02306 /* MGLPolyline_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9654C1251FFC1AB900DB6A19 /* MGLPolyline_Private.h */; }; - 96E516DD200054F200A02306 /* MGLPolygon_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9654C1271FFC1CC000DB6A19 /* MGLPolygon_Private.h */; }; - 96E516DE200054F700A02306 /* MGLGeometry_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848011CBAFA6200AB86E3 /* MGLGeometry_Private.h */; }; - 96E516DF200054FB00A02306 /* MGLShape_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 40CF6DBA1DAC3C1800A4D18B /* MGLShape_Private.h */; }; - 96E516E02000550C00A02306 /* MGLFeature_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD1656A1CF41981001FF4B9 /* MGLFeature_Private.h */; }; - 96E516E12000551100A02306 /* MGLMultiPoint_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848041CBAFA6200AB86E3 /* MGLMultiPoint_Private.h */; }; - 96E516E22000551900A02306 /* MGLPointCollection_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4049C2AB1DB6E05500B3F799 /* MGLPointCollection_Private.h */; }; - 96E516E32000552A00A02306 /* MGLAccountManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847FF1CBAFA6200AB86E3 /* MGLAccountManager_Private.h */; }; - 96E516E42000560B00A02306 /* MGLComputedShapeSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D9474E1F67487E00E37934 /* MGLComputedShapeSource_Private.h */; }; - 96E516E52000560B00A02306 /* MGLOfflinePack_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848061CBAFA6200AB86E3 /* MGLOfflinePack_Private.h */; }; - 96E516E62000560B00A02306 /* MGLOfflineRegion_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848081CBAFA6200AB86E3 /* MGLOfflineRegion_Private.h */; }; - 96E516E72000560B00A02306 /* MGLOfflineStorage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848091CBAFA6200AB86E3 /* MGLOfflineStorage_Private.h */; }; - 96E516E82000560B00A02306 /* MGLAnnotationContainerView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 404326881D5B9B1A007111BD /* MGLAnnotationContainerView_Private.h */; }; - 96E516E92000560B00A02306 /* MGLAnnotationImage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848401CBAFB9800AB86E3 /* MGLAnnotationImage_Private.h */; }; - 96E516EA2000560B00A02306 /* MGLAnnotationView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4018B1C31CDC277F00F666AF /* MGLAnnotationView_Private.h */; }; - 96E516EB2000560B00A02306 /* MGLUserLocation_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA88484B1CBAFB9800AB86E3 /* MGLUserLocation_Private.h */; }; - 96E516EC2000560B00A02306 /* MGLUserLocationAnnotationView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 359F57451D2FDBD5005217F1 /* MGLUserLocationAnnotationView_Private.h */; }; - 96E516ED200058A200A02306 /* MGLComputedShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0778DD401F67555F00A73B34 /* MGLComputedShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96E516EF2000594F00A02306 /* NSArray+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 400532FF1DB0862B0069F638 /* NSArray+MGLAdditions.h */; }; - 96E516F02000595800A02306 /* NSBundle+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848121CBAFA6200AB86E3 /* NSBundle+MGLAdditions.h */; }; - 96E516F12000596800A02306 /* NSString+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848171CBAFA6200AB86E3 /* NSString+MGLAdditions.h */; }; - 96E516F22000596D00A02306 /* NSException+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848141CBAFA6200AB86E3 /* NSException+MGLAdditions.h */; }; - 96E516F32000597100A02306 /* NSDictionary+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 408AA8551DAEDA0800022900 /* NSDictionary+MGLAdditions.h */; }; - 96E516F5200059B100A02306 /* MGLNetworkConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DD0902A41DB18F1B00C5BDCE /* MGLNetworkConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96E516F6200059EC00A02306 /* MGLRendererFrontend.h in Headers */ = {isa = PBXBuildFile; fileRef = 92F2C3EC1F0E3C3A00268EC0 /* MGLRendererFrontend.h */; }; - 96E516F720005A2700A02306 /* MGLAnnotationContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 40EDA1BD1CFE0D4A00D9EA68 /* MGLAnnotationContainerView.h */; }; - 96E516F820005A3000A02306 /* MGLCompactCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848441CBAFB9800AB86E3 /* MGLCompactCalloutView.h */; }; - 96E516F920005A3500A02306 /* MGLFaux3DUserLocationAnnotationView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA88484D1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.h */; }; - 96E516FA20005A3D00A02306 /* MGLUserLocationHeadingArrowLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 966FCF501F3C321000F2B6DE /* MGLUserLocationHeadingArrowLayer.h */; }; - 96E516FB20005A4000A02306 /* MGLUserLocationHeadingBeamLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 966FCF4A1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.h */; }; - 96E516FC20005A4400A02306 /* MGLUserLocationHeadingIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 96F3F73B1F5711F1003E2D2C /* MGLUserLocationHeadingIndicator.h */; }; - 96E5170420005A6B00A02306 /* SMCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848891CBB037E00AB86E3 /* SMCalloutView.h */; }; - 96E6145622CC135200109F14 /* MGLMapViewCompassViewTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 96E6145522CC135200109F14 /* MGLMapViewCompassViewTests.mm */; }; - 96E6145922CC169000109F14 /* MGLCompassButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E6145722CC169000109F14 /* MGLCompassButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96E6145A22CC169000109F14 /* MGLCompassButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E6145722CC169000109F14 /* MGLCompassButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96E6145B22CC169000109F14 /* MGLCompassButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = 96E6145822CC169000109F14 /* MGLCompassButton.mm */; }; - 96E6145C22CC169000109F14 /* MGLCompassButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = 96E6145822CC169000109F14 /* MGLCompassButton.mm */; }; - 96ED34DE22374C0900E9FCA9 /* MGLMapViewDirectionTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 96ED34DD22374C0900E9FCA9 /* MGLMapViewDirectionTests.mm */; }; - 96F3F73C1F57124B003E2D2C /* MGLUserLocationHeadingIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 96F3F73B1F5711F1003E2D2C /* MGLUserLocationHeadingIndicator.h */; }; - 9C188C4F2242C95A0022FA55 /* MMEDate.m in Sources */ = {isa = PBXBuildFile; fileRef = 40834BBC1FE05D6E00C1BD0D /* MMEDate.m */; }; - 9C188C502242C96F0022FA55 /* MMEDate.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BC51FE05D6F00C1BD0D /* MMEDate.h */; }; - 9C6E281322A97FDC0056B7BE /* MMECategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E280922A97FDB0056B7BE /* MMECategoryLoader.m */; }; - 9C6E281422A97FDC0056B7BE /* UIKit+MMEMobileEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E280A22A97FDB0056B7BE /* UIKit+MMEMobileEvents.h */; }; - 9C6E281522A97FDC0056B7BE /* CLLocation+MMEMobileEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E280B22A97FDB0056B7BE /* CLLocation+MMEMobileEvents.h */; }; - 9C6E281622A97FDC0056B7BE /* NSData+MMEGZIP.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E280C22A97FDB0056B7BE /* NSData+MMEGZIP.h */; }; - 9C6E281722A97FDC0056B7BE /* NSData+MMEGZIP.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E280D22A97FDB0056B7BE /* NSData+MMEGZIP.m */; }; - 9C6E281822A97FDC0056B7BE /* CLLocation+MMEMobileEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E280E22A97FDB0056B7BE /* CLLocation+MMEMobileEvents.m */; }; - 9C6E281922A97FDC0056B7BE /* UIKit+MMEMobileEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E280F22A97FDB0056B7BE /* UIKit+MMEMobileEvents.m */; }; - 9C6E281A22A97FDC0056B7BE /* CLLocationManager+MMEMobileEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E281022A97FDB0056B7BE /* CLLocationManager+MMEMobileEvents.h */; }; - 9C6E281B22A97FDC0056B7BE /* MMECategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E281122A97FDB0056B7BE /* MMECategoryLoader.h */; }; - 9C6E281C22A97FDC0056B7BE /* CLLocationManager+MMEMobileEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E281222A97FDB0056B7BE /* CLLocationManager+MMEMobileEvents.m */; }; - 9C6E281E22A980AC0056B7BE /* CLLocation+MMEMobileEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E280B22A97FDB0056B7BE /* CLLocation+MMEMobileEvents.h */; }; - 9C6E281F22A980AC0056B7BE /* CLLocation+MMEMobileEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E280E22A97FDB0056B7BE /* CLLocation+MMEMobileEvents.m */; }; - 9C6E282022A980AC0056B7BE /* CLLocationManager+MMEMobileEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E281022A97FDB0056B7BE /* CLLocationManager+MMEMobileEvents.h */; }; - 9C6E282122A980AC0056B7BE /* CLLocationManager+MMEMobileEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E281222A97FDB0056B7BE /* CLLocationManager+MMEMobileEvents.m */; }; - 9C6E282222A980AC0056B7BE /* MMECategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E281122A97FDB0056B7BE /* MMECategoryLoader.h */; }; - 9C6E282322A980AC0056B7BE /* MMECategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E280922A97FDB0056B7BE /* MMECategoryLoader.m */; }; - 9C6E282422A980AC0056B7BE /* NSData+MMEGZIP.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E280C22A97FDB0056B7BE /* NSData+MMEGZIP.h */; }; - 9C6E282522A980AC0056B7BE /* NSData+MMEGZIP.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E280D22A97FDB0056B7BE /* NSData+MMEGZIP.m */; }; - 9C6E282622A980AC0056B7BE /* UIKit+MMEMobileEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E280A22A97FDB0056B7BE /* UIKit+MMEMobileEvents.h */; }; - 9C6E282722A980AC0056B7BE /* UIKit+MMEMobileEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E280F22A97FDB0056B7BE /* UIKit+MMEMobileEvents.m */; }; - 9C6E282822A980B40056B7BE /* MMEReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BCC1FE05D7100C1BD0D /* MMEReachability.h */; }; - 9C6E282B22A981570056B7BE /* MGLMapboxEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E282A22A980E50056B7BE /* MGLMapboxEvents.m */; }; - 9C6E282C22A981580056B7BE /* MGLMapboxEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E282A22A980E50056B7BE /* MGLMapboxEvents.m */; }; - 9C6E282D22A9815D0056B7BE /* MGLMapboxEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E282922A980E50056B7BE /* MGLMapboxEvents.h */; }; - 9C6E282F22A9824B0056B7BE /* MGLTelemetryConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = AC518DFD201BB55A00EBC820 /* MGLTelemetryConfig.h */; }; - 9C6E283022A9824F0056B7BE /* MGLMapboxEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C6E282922A980E50056B7BE /* MGLMapboxEvents.h */; }; - 9C6E283122A982530056B7BE /* MapboxMobileEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BAC1FE05D6C00C1BD0D /* MapboxMobileEvents.h */; }; - 9C6E283222A982570056B7BE /* MMENamespacedDependencies.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BC81FE05D7000C1BD0D /* MMENamespacedDependencies.h */; }; - 9C6E283322A982670056B7BE /* MMEAPIClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BAB1FE05D6C00C1BD0D /* MMEAPIClient.h */; }; - 9C6E283422A982670056B7BE /* MMECommonEventData.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BAE1FE05D6C00C1BD0D /* MMECommonEventData.h */; }; - 9C6E283522A982670056B7BE /* MMEConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BB01FE05D6C00C1BD0D /* MMEConstants.h */; }; - 9C6E283622A982670056B7BE /* MMEDependencyManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BB11FE05D6D00C1BD0D /* MMEDependencyManager.h */; }; - 9C6E283722A982670056B7BE /* MMEEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BBA1FE05D6E00C1BD0D /* MMEEvent.h */; }; - 9C6E283822A982670056B7BE /* MMEEventLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BA61FE05D6B00C1BD0D /* MMEEventLogger.h */; }; - 9C6E283922A982670056B7BE /* MMEEventLogReportViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 406E99B51FFEFED600D9FFCC /* MMEEventLogReportViewController.h */; }; - 9C6E283A22A982670056B7BE /* MMEEventsConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BBB1FE05D6E00C1BD0D /* MMEEventsConfiguration.h */; }; - 9C6E283B22A982670056B7BE /* MMEConfigurator.h in Headers */ = {isa = PBXBuildFile; fileRef = ACA65F4F214066E200537748 /* MMEConfigurator.h */; }; - 9C6E283C22A982670056B7BE /* MMEEventsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BA31FE05D6B00C1BD0D /* MMEEventsManager.h */; }; - 9C6E283D22A982670056B7BE /* MMELocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BB31FE05D6D00C1BD0D /* MMELocationManager.h */; }; - 9C6E283E22A982670056B7BE /* MMEMetrics.h in Headers */ = {isa = PBXBuildFile; fileRef = ACD024552187EAAF00D8C8A7 /* MMEMetrics.h */; }; - 9C6E283F22A982670056B7BE /* MMEMetricsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ACD024562187EAAF00D8C8A7 /* MMEMetricsManager.h */; }; - 9C6E284022A982670056B7BE /* MMEDate.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BC51FE05D6F00C1BD0D /* MMEDate.h */; }; - 9C6E284122A982670056B7BE /* MMENSURLSessionWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BAA1FE05D6C00C1BD0D /* MMENSURLSessionWrapper.h */; }; - 9C6E284222A982670056B7BE /* MMETimerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BC91FE05D7000C1BD0D /* MMETimerManager.h */; }; - 9C6E284322A982670056B7BE /* MMETypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BB61FE05D6D00C1BD0D /* MMETypes.h */; }; - 9C6E284422A982670056B7BE /* MMEUIApplicationWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BBE1FE05D6E00C1BD0D /* MMEUIApplicationWrapper.h */; }; - 9C6E284522A982670056B7BE /* MMEUINavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 406E99B31FFEFED600D9FFCC /* MMEUINavigation.h */; }; - 9C6E284622A982670056B7BE /* MMEUniqueIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 40834BBF1FE05D6E00C1BD0D /* MMEUniqueIdentifier.h */; }; - 9C6E284722A982670056B7BE /* MMEDispatchManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ACA65F552140696B00537748 /* MMEDispatchManager.h */; }; - A4DE3DCB23038C98005B3473 /* MGLMockGestureRecognizers.h in Sources */ = {isa = PBXBuildFile; fileRef = A4DE3DCA23038A7F005B3473 /* MGLMockGestureRecognizers.h */; }; - A4DE3DCC23038CCA005B3473 /* MGLMockGestureRecognizers.m in Sources */ = {isa = PBXBuildFile; fileRef = A4DE3DC823038A07005B3473 /* MGLMockGestureRecognizers.m */; }; - A4F3FB1D2254865900A30170 /* missing_icon.json in Resources */ = {isa = PBXBuildFile; fileRef = A4F3FB1C2254865900A30170 /* missing_icon.json */; }; - AC46EB59225E600A0039C013 /* MMECertPin.h in Headers */ = {isa = PBXBuildFile; fileRef = AC46EB57225E60090039C013 /* MMECertPin.h */; }; - AC46EB5A225E600A0039C013 /* MMECertPin.h in Headers */ = {isa = PBXBuildFile; fileRef = AC46EB57225E60090039C013 /* MMECertPin.h */; }; - AC46EB5B225E600A0039C013 /* MMECertPin.m in Sources */ = {isa = PBXBuildFile; fileRef = AC46EB58225E60090039C013 /* MMECertPin.m */; }; - AC46EB5C225E600A0039C013 /* MMECertPin.m in Sources */ = {isa = PBXBuildFile; fileRef = AC46EB58225E60090039C013 /* MMECertPin.m */; }; - AC46EB5F225E60510039C013 /* MMEPinningConfigurationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = AC46EB5D225E60510039C013 /* MMEPinningConfigurationProvider.m */; }; - AC46EB60225E60510039C013 /* MMEPinningConfigurationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = AC46EB5D225E60510039C013 /* MMEPinningConfigurationProvider.m */; }; - AC46EB61225E60510039C013 /* MMEPinningConfigurationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = AC46EB5E225E60510039C013 /* MMEPinningConfigurationProvider.h */; }; - AC46EB62225E60510039C013 /* MMEPinningConfigurationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = AC46EB5E225E60510039C013 /* MMEPinningConfigurationProvider.h */; }; - AC518DFF201BB55A00EBC820 /* MGLTelemetryConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = AC518DFD201BB55A00EBC820 /* MGLTelemetryConfig.h */; }; - AC518E03201BB56000EBC820 /* MGLTelemetryConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = AC518DFE201BB55A00EBC820 /* MGLTelemetryConfig.m */; }; - AC518E04201BB56100EBC820 /* MGLTelemetryConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = AC518DFE201BB55A00EBC820 /* MGLTelemetryConfig.m */; }; - ACA65F53214066E600537748 /* MMEConfigurator.m in Sources */ = {isa = PBXBuildFile; fileRef = ACA65F50214066E600537748 /* MMEConfigurator.m */; }; - ACA65F54214066E600537748 /* MMEConfigurator.m in Sources */ = {isa = PBXBuildFile; fileRef = ACA65F50214066E600537748 /* MMEConfigurator.m */; }; - ACA65F592140697200537748 /* MMEDispatchManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ACA65F562140697100537748 /* MMEDispatchManager.m */; }; - ACA65F5A2140697200537748 /* MMEDispatchManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ACA65F562140697100537748 /* MMEDispatchManager.m */; }; - ACD0245A2187EABA00D8C8A7 /* MMEMetricsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ACD024542187EAAF00D8C8A7 /* MMEMetricsManager.m */; }; - ACD0245B2187EABA00D8C8A7 /* MMEMetricsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ACD024542187EAAF00D8C8A7 /* MMEMetricsManager.m */; }; - ACD0245E2187EACB00D8C8A7 /* MMEMetrics.m in Sources */ = {isa = PBXBuildFile; fileRef = ACD024572187EAAF00D8C8A7 /* MMEMetrics.m */; }; - ACD0245F2187EACB00D8C8A7 /* MMEMetrics.m in Sources */ = {isa = PBXBuildFile; fileRef = ACD024572187EAAF00D8C8A7 /* MMEMetrics.m */; }; - CA0B3C022329DE9A00E4B493 /* MGLTestAssertionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = CAAA65D82321BBA900F08A39 /* MGLTestAssertionHandler.m */; }; - CA0C27922076C804001CE5B7 /* MGLShapeSourceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA0C27912076C804001CE5B7 /* MGLShapeSourceTests.m */; }; - CA0C27942076CA19001CE5B7 /* MGLMapViewIntegrationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = CA0C27932076CA19001CE5B7 /* MGLMapViewIntegrationTest.m */; }; - CA1B4A512099FB2200EDD491 /* MGLMapSnapshotterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1B4A502099FB2200EDD491 /* MGLMapSnapshotterTest.m */; }; - CA4C54FE2324948100A81659 /* MGLSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA4C54FD2324948100A81659 /* MGLSourceTests.swift */; }; - CA4EB8C720863487006AB465 /* MGLStyleLayerIntegrationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA4EB8C620863487006AB465 /* MGLStyleLayerIntegrationTests.m */; }; - CA4F3BDE230F74C3008BAFEA /* MGLMapViewPendingBlockTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA4F3BDD230F74C3008BAFEA /* MGLMapViewPendingBlockTests.m */; }; - CA4F3BE223107793008BAFEA /* MGLCameraTransitionTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = CA4F3BE123107793008BAFEA /* MGLCameraTransitionTests.mm */; }; - CA4F3BE4231077B9008BAFEA /* MGLCameraTransitionFinishTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = CA4F3BE3231077B9008BAFEA /* MGLCameraTransitionFinishTests.mm */; }; - CA55CD41202C16AA00CE7095 /* MGLCameraChangeReason.h in Headers */ = {isa = PBXBuildFile; fileRef = CA55CD3E202C16AA00CE7095 /* MGLCameraChangeReason.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA55CD42202C16AA00CE7095 /* MGLCameraChangeReason.h in Headers */ = {isa = PBXBuildFile; fileRef = CA55CD3E202C16AA00CE7095 /* MGLCameraChangeReason.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA65C4F821E9BB080068B0D4 /* MGLCluster.h in Headers */ = {isa = PBXBuildFile; fileRef = CA65C4F721E9BB080068B0D4 /* MGLCluster.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA65C4F921E9BB080068B0D4 /* MGLCluster.h in Headers */ = {isa = PBXBuildFile; fileRef = CA65C4F721E9BB080068B0D4 /* MGLCluster.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA6914B520E67F50002DB0EE /* MGLAnnotationViewIntegrationTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = CA6914B420E67F50002DB0EE /* MGLAnnotationViewIntegrationTests.mm */; }; - CA7766832229C10E0008DE9E /* MGLCompactCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848451CBAFB9800AB86E3 /* MGLCompactCalloutView.m */; }; - CA7766842229C11A0008DE9E /* SMCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = DA88488A1CBB037E00AB86E3 /* SMCalloutView.m */; }; - CA86FF0E22D8D5A0009EB14A /* MGLNetworkConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA86FF0D22D8D5A0009EB14A /* MGLNetworkConfigurationTests.m */; }; - CA88DC3021C85D900059ED5A /* MGLStyleURLIntegrationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = CA88DC2F21C85D900059ED5A /* MGLStyleURLIntegrationTest.m */; }; - CA8FBC0921A47BB100D1203C /* MGLRendererConfigurationTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = CA8FBC0821A47BB100D1203C /* MGLRendererConfigurationTests.mm */; }; - CAA69DA4206DCD0E007279CD /* Mapbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA4A26961CB6E795000B7809 /* Mapbox.framework */; }; - CAA69DA5206DCD0E007279CD /* Mapbox.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DA4A26961CB6E795000B7809 /* Mapbox.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - CAAA65D92321BBA900F08A39 /* MGLTestAssertionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = CAAA65D82321BBA900F08A39 /* MGLTestAssertionHandler.m */; }; - CABE5DAD2072FAB40003AF3C /* Mapbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8847D21CBAF91600AB86E3 /* Mapbox.framework */; }; - CAD9D0AA22A86D6F001B25EE /* MGLResourceTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = CAD9D0A922A86D6F001B25EE /* MGLResourceTests.mm */; }; - CAE7AD5520F46EF5003B6782 /* MGLMapSnapshotterSwiftTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAE7AD5420F46EF5003B6782 /* MGLMapSnapshotterSwiftTests.swift */; }; - CAFB3C14234505D500399265 /* MGLMapSnapshotter_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CAFB3C13234505D500399265 /* MGLMapSnapshotter_Private.h */; }; - CAFB3C15234505D500399265 /* MGLMapSnapshotter_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CAFB3C13234505D500399265 /* MGLMapSnapshotter_Private.h */; }; - CF75A91522D85E860058A5C4 /* MGLLoggingConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = CF75A91422D85E860058A5C4 /* MGLLoggingConfiguration.mm */; }; - CF75A91622D85E860058A5C4 /* MGLLoggingConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = CF75A91422D85E860058A5C4 /* MGLLoggingConfiguration.mm */; }; - CFF9F98623A24BF500B0DE92 /* MGLNetworkIntegrationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF9F98423A24BF400B0DE92 /* MGLNetworkIntegrationManager.h */; }; - CFF9F98723A24BF500B0DE92 /* MGLNetworkIntegrationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF9F98423A24BF400B0DE92 /* MGLNetworkIntegrationManager.h */; }; - CFF9F98823A24BF500B0DE92 /* MGLNetworkIntegrationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CFF9F98523A24BF400B0DE92 /* MGLNetworkIntegrationManager.m */; }; - CFF9F98923A24BF500B0DE92 /* MGLNetworkIntegrationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CFF9F98523A24BF400B0DE92 /* MGLNetworkIntegrationManager.m */; }; - DA00FC8E1D5EEB0D009AABC8 /* MGLAttributionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DA00FC8C1D5EEB0D009AABC8 /* MGLAttributionInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA00FC8F1D5EEB0D009AABC8 /* MGLAttributionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DA00FC8C1D5EEB0D009AABC8 /* MGLAttributionInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA00FC901D5EEB0D009AABC8 /* MGLAttributionInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA00FC8D1D5EEB0D009AABC8 /* MGLAttributionInfo.mm */; }; - DA00FC911D5EEB0D009AABC8 /* MGLAttributionInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA00FC8D1D5EEB0D009AABC8 /* MGLAttributionInfo.mm */; }; - DA0CD5901CF56F6A00A5F5A5 /* MGLFeatureTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA0CD58F1CF56F6A00A5F5A5 /* MGLFeatureTests.mm */; }; - DA17BE301CC4BAC300402C41 /* MGLMapView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA17BE2F1CC4BAC300402C41 /* MGLMapView_Private.h */; }; - DA17BE311CC4BDAA00402C41 /* MGLMapView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA17BE2F1CC4BAC300402C41 /* MGLMapView_Private.h */; }; - DA1DC96A1CB6C6B7006E619F /* MBXCustomCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = DA1DC9671CB6C6B7006E619F /* MBXCustomCalloutView.m */; }; - DA1DC96B1CB6C6B7006E619F /* MBXOfflinePacksTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA1DC9691CB6C6B7006E619F /* MBXOfflinePacksTableViewController.m */; }; - DA1DC9701CB6C6CE006E619F /* points.geojson in Resources */ = {isa = PBXBuildFile; fileRef = DA1DC96C1CB6C6CE006E619F /* points.geojson */; }; - DA1DC9711CB6C6CE006E619F /* polyline.geojson in Resources */ = {isa = PBXBuildFile; fileRef = DA1DC96D1CB6C6CE006E619F /* polyline.geojson */; }; - DA1DC9731CB6C6CE006E619F /* threestates.geojson in Resources */ = {isa = PBXBuildFile; fileRef = DA1DC96F1CB6C6CE006E619F /* threestates.geojson */; }; - DA1DC9971CB6E046006E619F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DA1DC9961CB6E046006E619F /* main.m */; }; - DA1DC9991CB6E054006E619F /* MBXAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DA1DC9981CB6E054006E619F /* MBXAppDelegate.m */; }; - DA1DC99B1CB6E064006E619F /* MBXViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA1DC99A1CB6E064006E619F /* MBXViewController.m */; }; - DA1DC99F1CB6E088006E619F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DA1DC99E1CB6E088006E619F /* Assets.xcassets */; }; - DA1F8F3D1EBD287B00367E42 /* MGLDocumentationGuideTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA1F8F3C1EBD287B00367E42 /* MGLDocumentationGuideTests.swift */; }; - DA2784FC1DF02FF4001D5B8D /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DA2784FB1DF02FF4001D5B8D /* Media.xcassets */; }; - DA27C24E1CBB3811000B0ECD /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA27C24D1CBB3811000B0ECD /* GLKit.framework */; }; - DA27C24F1CBB4C11000B0ECD /* MGLAccountManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847FF1CBAFA6200AB86E3 /* MGLAccountManager_Private.h */; }; - DA2DBBCE1D51E80400D38FF9 /* MGLStyleLayerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2DBBCD1D51E80400D38FF9 /* MGLStyleLayerTests.m */; }; - DA2E88561CC036F400F24E7B /* Mapbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8847D21CBAF91600AB86E3 /* Mapbox.framework */; }; - DA2E88611CC0382C00F24E7B /* MGLGeometryTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA2E885C1CC0382C00F24E7B /* MGLGeometryTests.mm */; }; - DA2E88621CC0382C00F24E7B /* MGLOfflinePackTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA2E885D1CC0382C00F24E7B /* MGLOfflinePackTests.mm */; }; - DA2E88631CC0382C00F24E7B /* MGLOfflineRegionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2E885E1CC0382C00F24E7B /* MGLOfflineRegionTests.m */; }; - DA2E88651CC0382C00F24E7B /* MGLStyleTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA2E88601CC0382C00F24E7B /* MGLStyleTests.mm */; }; - DA35A29E1CC9E94C00E826B2 /* MGLCoordinateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A29D1CC9E94C00E826B2 /* MGLCoordinateFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA35A29F1CC9E94C00E826B2 /* MGLCoordinateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A29D1CC9E94C00E826B2 /* MGLCoordinateFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA35A2A11CC9E95F00E826B2 /* MGLCoordinateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2A01CC9E95F00E826B2 /* MGLCoordinateFormatter.m */; }; - DA35A2A21CC9E95F00E826B2 /* MGLCoordinateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2A01CC9E95F00E826B2 /* MGLCoordinateFormatter.m */; }; - DA35A2AA1CCA058D00E826B2 /* MGLCoordinateFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2A91CCA058D00E826B2 /* MGLCoordinateFormatterTests.m */; }; - DA35A2B11CCA141D00E826B2 /* MGLCompassDirectionFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2AF1CCA141D00E826B2 /* MGLCompassDirectionFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA35A2B21CCA141D00E826B2 /* MGLCompassDirectionFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2AF1CCA141D00E826B2 /* MGLCompassDirectionFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA35A2B31CCA141D00E826B2 /* MGLCompassDirectionFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2B01CCA141D00E826B2 /* MGLCompassDirectionFormatter.m */; }; - DA35A2B41CCA141D00E826B2 /* MGLCompassDirectionFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2B01CCA141D00E826B2 /* MGLCompassDirectionFormatter.m */; }; - DA35A2B81CCA9A5D00E826B2 /* MGLClockDirectionFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2B71CCA9A5D00E826B2 /* MGLClockDirectionFormatter.m */; }; - DA35A2B91CCA9A5D00E826B2 /* MGLClockDirectionFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2B71CCA9A5D00E826B2 /* MGLClockDirectionFormatter.m */; }; - DA35A2BB1CCA9A6900E826B2 /* MGLClockDirectionFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2BA1CCA9A6900E826B2 /* MGLClockDirectionFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA35A2BC1CCA9A6900E826B2 /* MGLClockDirectionFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2BA1CCA9A6900E826B2 /* MGLClockDirectionFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA35A2C51CCA9F8300E826B2 /* MGLClockDirectionFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2C31CCA9F8300E826B2 /* MGLClockDirectionFormatterTests.m */; }; - DA35A2C61CCA9F8300E826B2 /* MGLCompassDirectionFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2C41CCA9F8300E826B2 /* MGLCompassDirectionFormatterTests.m */; }; - DA35A2C91CCAAAD200E826B2 /* NSValue+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2C71CCAAAD200E826B2 /* NSValue+MGLAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA35A2CA1CCAAAD200E826B2 /* NSValue+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2C71CCAAAD200E826B2 /* NSValue+MGLAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA35A2CB1CCAAAD200E826B2 /* NSValue+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2C81CCAAAD200E826B2 /* NSValue+MGLAdditions.m */; }; - DA35A2CC1CCAAAD200E826B2 /* NSValue+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2C81CCAAAD200E826B2 /* NSValue+MGLAdditions.m */; }; - DA35D0881E1A6309007DED41 /* one-liner.json in Resources */ = {isa = PBXBuildFile; fileRef = DA35D0871E1A6309007DED41 /* one-liner.json */; }; - DA5DB12A1FABF1EE001C2326 /* MGLMapAccessibilityElementTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5DB1291FABF1EE001C2326 /* MGLMapAccessibilityElementTests.m */; }; - DA6408DB1DA4E7D300908C90 /* MGLVectorStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA6408D91DA4E7D300908C90 /* MGLVectorStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA6408DC1DA4E7D300908C90 /* MGLVectorStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA6408D91DA4E7D300908C90 /* MGLVectorStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA6408DD1DA4E7D300908C90 /* MGLVectorStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA6408DA1DA4E7D300908C90 /* MGLVectorStyleLayer.mm */; }; - DA6408DE1DA4E7D300908C90 /* MGLVectorStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA6408DA1DA4E7D300908C90 /* MGLVectorStyleLayer.mm */; }; - DA695426215B1E76002041A4 /* MGLMapCameraTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA695425215B1E75002041A4 /* MGLMapCameraTests.m */; }; - DA704CC21F65A475004B3F28 /* MGLMapAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = DA704CC01F65A475004B3F28 /* MGLMapAccessibilityElement.h */; }; - DA704CC31F65A475004B3F28 /* MGLMapAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = DA704CC01F65A475004B3F28 /* MGLMapAccessibilityElement.h */; }; - DA704CC41F65A475004B3F28 /* MGLMapAccessibilityElement.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA704CC11F65A475004B3F28 /* MGLMapAccessibilityElement.mm */; }; - DA704CC51F65A475004B3F28 /* MGLMapAccessibilityElement.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA704CC11F65A475004B3F28 /* MGLMapAccessibilityElement.mm */; }; - DA72620B1DEEE3480043BB89 /* MGLOpenGLStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7262091DEEE3480043BB89 /* MGLOpenGLStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA72620C1DEEE3480043BB89 /* MGLOpenGLStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7262091DEEE3480043BB89 /* MGLOpenGLStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA72620D1DEEE3480043BB89 /* MGLOpenGLStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA72620A1DEEE3480043BB89 /* MGLOpenGLStyleLayer.mm */; }; - DA72620E1DEEE3480043BB89 /* MGLOpenGLStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA72620A1DEEE3480043BB89 /* MGLOpenGLStyleLayer.mm */; }; - DA737EE11D056A4E005BDA16 /* MGLMapViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DA737EE01D056A4E005BDA16 /* MGLMapViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA737EE21D056A4E005BDA16 /* MGLMapViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DA737EE01D056A4E005BDA16 /* MGLMapViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA821D061CCC6D59007508D4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA821D041CCC6D59007508D4 /* LaunchScreen.storyboard */; }; - DA821D071CCC6D59007508D4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA821D051CCC6D59007508D4 /* Main.storyboard */; }; - DA8847D91CBAF91600AB86E3 /* Mapbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8847D21CBAF91600AB86E3 /* Mapbox.framework */; }; - DA8847DA1CBAF91600AB86E3 /* Mapbox.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DA8847D21CBAF91600AB86E3 /* Mapbox.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - DA8847EF1CBAFA5100AB86E3 /* MGLAccountManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847DF1CBAFA5100AB86E3 /* MGLAccountManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847F01CBAFA5100AB86E3 /* MGLAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E01CBAFA5100AB86E3 /* MGLAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847F11CBAFA5100AB86E3 /* MGLGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E11CBAFA5100AB86E3 /* MGLGeometry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847F21CBAFA5100AB86E3 /* MGLMapCamera.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E21CBAFA5100AB86E3 /* MGLMapCamera.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847F31CBAFA5100AB86E3 /* MGLMultiPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E31CBAFA5100AB86E3 /* MGLMultiPoint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847F41CBAFA5100AB86E3 /* MGLOfflinePack.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E41CBAFA5100AB86E3 /* MGLOfflinePack.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847F51CBAFA5100AB86E3 /* MGLOfflineRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E51CBAFA5100AB86E3 /* MGLOfflineRegion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847F61CBAFA5100AB86E3 /* MGLOfflineStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E61CBAFA5100AB86E3 /* MGLOfflineStorage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847F71CBAFA5100AB86E3 /* MGLOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E71CBAFA5100AB86E3 /* MGLOverlay.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847F81CBAFA5100AB86E3 /* MGLPointAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E81CBAFA5100AB86E3 /* MGLPointAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847F91CBAFA5100AB86E3 /* MGLPolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E91CBAFA5100AB86E3 /* MGLPolygon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847FA1CBAFA5100AB86E3 /* MGLPolyline.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847EA1CBAFA5100AB86E3 /* MGLPolyline.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847FB1CBAFA5100AB86E3 /* MGLShape.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847EB1CBAFA5100AB86E3 /* MGLShape.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847FC1CBAFA5100AB86E3 /* MGLStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847EC1CBAFA5100AB86E3 /* MGLStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847FD1CBAFA5100AB86E3 /* MGLTilePyramidOfflineRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847ED1CBAFA5100AB86E3 /* MGLTilePyramidOfflineRegion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8847FE1CBAFA5100AB86E3 /* MGLTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847EE1CBAFA5100AB86E3 /* MGLTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA88481A1CBAFA6200AB86E3 /* MGLAccountManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848001CBAFA6200AB86E3 /* MGLAccountManager.m */; }; - DA88481B1CBAFA6200AB86E3 /* MGLGeometry_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848011CBAFA6200AB86E3 /* MGLGeometry_Private.h */; }; - DA88481C1CBAFA6200AB86E3 /* MGLGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8848021CBAFA6200AB86E3 /* MGLGeometry.mm */; }; - DA88481D1CBAFA6200AB86E3 /* MGLMapCamera.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8848031CBAFA6200AB86E3 /* MGLMapCamera.mm */; }; - DA88481E1CBAFA6200AB86E3 /* MGLMultiPoint_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848041CBAFA6200AB86E3 /* MGLMultiPoint_Private.h */; }; - DA88481F1CBAFA6200AB86E3 /* MGLMultiPoint.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8848051CBAFA6200AB86E3 /* MGLMultiPoint.mm */; }; - DA8848201CBAFA6200AB86E3 /* MGLOfflinePack_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848061CBAFA6200AB86E3 /* MGLOfflinePack_Private.h */; }; - DA8848211CBAFA6200AB86E3 /* MGLOfflinePack.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8848071CBAFA6200AB86E3 /* MGLOfflinePack.mm */; }; - DA8848221CBAFA6200AB86E3 /* MGLOfflineRegion_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848081CBAFA6200AB86E3 /* MGLOfflineRegion_Private.h */; }; - DA8848231CBAFA6200AB86E3 /* MGLOfflineStorage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848091CBAFA6200AB86E3 /* MGLOfflineStorage_Private.h */; }; - DA8848241CBAFA6200AB86E3 /* MGLOfflineStorage.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88480A1CBAFA6200AB86E3 /* MGLOfflineStorage.mm */; }; - DA8848251CBAFA6200AB86E3 /* MGLPointAnnotation.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88480B1CBAFA6200AB86E3 /* MGLPointAnnotation.mm */; }; - DA8848261CBAFA6200AB86E3 /* MGLPolygon.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88480C1CBAFA6200AB86E3 /* MGLPolygon.mm */; }; - DA8848271CBAFA6200AB86E3 /* MGLPolyline.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88480D1CBAFA6200AB86E3 /* MGLPolyline.mm */; }; - DA8848281CBAFA6200AB86E3 /* MGLShape.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88480E1CBAFA6200AB86E3 /* MGLShape.mm */; }; - DA8848291CBAFA6200AB86E3 /* MGLStyle.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88480F1CBAFA6200AB86E3 /* MGLStyle.mm */; }; - DA88482A1CBAFA6200AB86E3 /* MGLTilePyramidOfflineRegion.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8848101CBAFA6200AB86E3 /* MGLTilePyramidOfflineRegion.mm */; }; - DA88482B1CBAFA6200AB86E3 /* MGLTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848111CBAFA6200AB86E3 /* MGLTypes.m */; }; - DA88482C1CBAFA6200AB86E3 /* NSBundle+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848121CBAFA6200AB86E3 /* NSBundle+MGLAdditions.h */; }; - DA88482D1CBAFA6200AB86E3 /* NSBundle+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848131CBAFA6200AB86E3 /* NSBundle+MGLAdditions.m */; }; - DA88482E1CBAFA6200AB86E3 /* NSException+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848141CBAFA6200AB86E3 /* NSException+MGLAdditions.h */; }; - DA8848311CBAFA6200AB86E3 /* NSString+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848171CBAFA6200AB86E3 /* NSString+MGLAdditions.h */; }; - DA8848321CBAFA6200AB86E3 /* NSString+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848181CBAFA6200AB86E3 /* NSString+MGLAdditions.m */; }; - DA88483A1CBAFB8500AB86E3 /* MGLAnnotationImage.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848341CBAFB8500AB86E3 /* MGLAnnotationImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA88483B1CBAFB8500AB86E3 /* MGLCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848351CBAFB8500AB86E3 /* MGLCalloutView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA88483C1CBAFB8500AB86E3 /* MGLMapView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848361CBAFB8500AB86E3 /* MGLMapView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA88483D1CBAFB8500AB86E3 /* MGLMapView+IBAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848371CBAFB8500AB86E3 /* MGLMapView+IBAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA88483F1CBAFB8500AB86E3 /* MGLUserLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848391CBAFB8500AB86E3 /* MGLUserLocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA88484F1CBAFB9800AB86E3 /* MGLAnnotationImage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848401CBAFB9800AB86E3 /* MGLAnnotationImage_Private.h */; }; - DA8848501CBAFB9800AB86E3 /* MGLAnnotationImage.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848411CBAFB9800AB86E3 /* MGLAnnotationImage.m */; }; - DA8848531CBAFB9800AB86E3 /* MGLCompactCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848441CBAFB9800AB86E3 /* MGLCompactCalloutView.h */; }; - DA8848541CBAFB9800AB86E3 /* MGLCompactCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848451CBAFB9800AB86E3 /* MGLCompactCalloutView.m */; }; - DA8848591CBAFB9800AB86E3 /* MGLMapView.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88484A1CBAFB9800AB86E3 /* MGLMapView.mm */; }; - DA88485A1CBAFB9800AB86E3 /* MGLUserLocation_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA88484B1CBAFB9800AB86E3 /* MGLUserLocation_Private.h */; }; - DA88485B1CBAFB9800AB86E3 /* MGLUserLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = DA88484C1CBAFB9800AB86E3 /* MGLUserLocation.m */; }; - DA88485C1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA88484D1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.h */; }; - DA88485D1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.m in Sources */ = {isa = PBXBuildFile; fileRef = DA88484E1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.m */; }; - DA8848601CBAFC2E00AB86E3 /* Mapbox.h in Headers */ = {isa = PBXBuildFile; fileRef = DA88485E1CBAFC2E00AB86E3 /* Mapbox.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA88488B1CBB037E00AB86E3 /* SMCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848891CBB037E00AB86E3 /* SMCalloutView.h */; }; - DA88488C1CBB037E00AB86E3 /* SMCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = DA88488A1CBB037E00AB86E3 /* SMCalloutView.m */; }; - DA8933A31CCC95B000E68420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA89339F1CCC951200E68420 /* Localizable.strings */; }; - DA8933BC1CCD2CA100E68420 /* Foundation.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA8933BA1CCD2CA100E68420 /* Foundation.strings */; }; - DA8933BF1CCD2CAD00E68420 /* Foundation.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = DA8933BD1CCD2CAD00E68420 /* Foundation.stringsdict */; }; - DA8933DB1CCD31D400E68420 /* Foundation.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA8933BA1CCD2CA100E68420 /* Foundation.strings */; }; - DA8933DC1CCD31D400E68420 /* Foundation.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = DA8933BD1CCD2CAD00E68420 /* Foundation.stringsdict */; }; - DA8933E01CCD31DF00E68420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA89339F1CCC951200E68420 /* Localizable.strings */; }; - DA8933F01CCD387900E68420 /* strip-frameworks.sh in Resources */ = {isa = PBXBuildFile; fileRef = DA8933EF1CCD387900E68420 /* strip-frameworks.sh */; }; - DA8963371CC549A100684375 /* glyphs in Resources */ = {isa = PBXBuildFile; fileRef = DA8963331CC549A100684375 /* glyphs */; }; - DA8963381CC549A100684375 /* sprites in Resources */ = {isa = PBXBuildFile; fileRef = DA8963341CC549A100684375 /* sprites */; }; - DA8963391CC549A100684375 /* styles in Resources */ = {isa = PBXBuildFile; fileRef = DA8963351CC549A100684375 /* styles */; }; - DA89633A1CC549A100684375 /* tiles in Resources */ = {isa = PBXBuildFile; fileRef = DA8963361CC549A100684375 /* tiles */; }; - DAA32CC31E4C6B65006F8D24 /* MGLDistanceFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3557F7AF1E1D27D300CCA5E6 /* MGLDistanceFormatter.m */; }; - DAA4E4081CBB6C9500178DFB /* Mapbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA8847D21CBAF91600AB86E3 /* Mapbox.framework */; }; - DAA4E4091CBB6C9500178DFB /* Mapbox.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DA8847D21CBAF91600AB86E3 /* Mapbox.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - DAA4E41C1CBB730400178DFB /* MGLAccountManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848001CBAFA6200AB86E3 /* MGLAccountManager.m */; }; - DAA4E41D1CBB730400178DFB /* MGLGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8848021CBAFA6200AB86E3 /* MGLGeometry.mm */; }; - DAA4E41E1CBB730400178DFB /* MGLMapCamera.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8848031CBAFA6200AB86E3 /* MGLMapCamera.mm */; }; - DAA4E41F1CBB730400178DFB /* MGLMultiPoint.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8848051CBAFA6200AB86E3 /* MGLMultiPoint.mm */; }; - DAA4E4201CBB730400178DFB /* MGLOfflinePack.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8848071CBAFA6200AB86E3 /* MGLOfflinePack.mm */; }; - DAA4E4211CBB730400178DFB /* MGLOfflineStorage.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88480A1CBAFA6200AB86E3 /* MGLOfflineStorage.mm */; }; - DAA4E4221CBB730400178DFB /* MGLPointAnnotation.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88480B1CBAFA6200AB86E3 /* MGLPointAnnotation.mm */; }; - DAA4E4231CBB730400178DFB /* MGLPolygon.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88480C1CBAFA6200AB86E3 /* MGLPolygon.mm */; }; - DAA4E4241CBB730400178DFB /* MGLPolyline.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88480D1CBAFA6200AB86E3 /* MGLPolyline.mm */; }; - DAA4E4251CBB730400178DFB /* MGLShape.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88480E1CBAFA6200AB86E3 /* MGLShape.mm */; }; - DAA4E4261CBB730400178DFB /* MGLStyle.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88480F1CBAFA6200AB86E3 /* MGLStyle.mm */; }; - DAA4E4271CBB730400178DFB /* MGLTilePyramidOfflineRegion.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8848101CBAFA6200AB86E3 /* MGLTilePyramidOfflineRegion.mm */; }; - DAA4E4281CBB730400178DFB /* MGLTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848111CBAFA6200AB86E3 /* MGLTypes.m */; }; - DAA4E4291CBB730400178DFB /* NSBundle+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848131CBAFA6200AB86E3 /* NSBundle+MGLAdditions.m */; }; - DAA4E42B1CBB730400178DFB /* NSString+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848181CBAFA6200AB86E3 /* NSString+MGLAdditions.m */; }; - DAA4E42D1CBB730400178DFB /* MGLAnnotationImage.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848411CBAFB9800AB86E3 /* MGLAnnotationImage.m */; }; - DAA4E42F1CBB730400178DFB /* MGLCompactCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8848451CBAFB9800AB86E3 /* MGLCompactCalloutView.m */; }; - DAA4E4321CBB730400178DFB /* MGLMapView.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA88484A1CBAFB9800AB86E3 /* MGLMapView.mm */; }; - DAA4E4331CBB730400178DFB /* MGLUserLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = DA88484C1CBAFB9800AB86E3 /* MGLUserLocation.m */; }; - DAA4E4341CBB730400178DFB /* MGLFaux3DUserLocationAnnotationView.m in Sources */ = {isa = PBXBuildFile; fileRef = DA88484E1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.m */; }; - DAA4E4351CBB730400178DFB /* SMCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = DA88488A1CBB037E00AB86E3 /* SMCalloutView.m */; }; - DAABF73D1CBC59BB005B1825 /* libmbgl-core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAABF73B1CBC59BB005B1825 /* libmbgl-core.a */; }; - DAAE5F8720F046E60089D85B /* libmbgl-core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAABF73B1CBC59BB005B1825 /* libmbgl-core.a */; }; - DAAE5F8820F046FE0089D85B /* libmbgl-core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAABF73B1CBC59BB005B1825 /* libmbgl-core.a */; }; - DAAE5F8920F047240089D85B /* libmbgl-filesource.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55D120A91F79100C004B6D81 /* libmbgl-filesource.a */; }; - DAAE5F8A20F0472E0089D85B /* libmbgl-loop-darwin.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55D120A71F791007004B6D81 /* libmbgl-loop-darwin.a */; }; - DAAF722B1DA903C700312FA4 /* MGLStyleValue.h in Headers */ = {isa = PBXBuildFile; fileRef = DAAF72291DA903C700312FA4 /* MGLStyleValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAAF722C1DA903C700312FA4 /* MGLStyleValue.h in Headers */ = {isa = PBXBuildFile; fileRef = DAAF72291DA903C700312FA4 /* MGLStyleValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAAF722D1DA903C700312FA4 /* MGLStyleValue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAAF722A1DA903C700312FA4 /* MGLStyleValue_Private.h */; }; - DAAF722E1DA903C700312FA4 /* MGLStyleValue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAAF722A1DA903C700312FA4 /* MGLStyleValue_Private.h */; }; - DABCABAC1CB80692000A7C39 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DABCABAB1CB80692000A7C39 /* main.m */; }; - DABCABAF1CB80692000A7C39 /* MBXBenchAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DABCABAE1CB80692000A7C39 /* MBXBenchAppDelegate.m */; }; - DABCABB21CB80692000A7C39 /* MBXBenchViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = DABCABB11CB80692000A7C39 /* MBXBenchViewController.mm */; }; - DABCABB71CB80692000A7C39 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DABCABB61CB80692000A7C39 /* Assets.xcassets */; }; - DABCABBA1CB80692000A7C39 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DABCABB81CB80692000A7C39 /* LaunchScreen.storyboard */; }; - DABCABC21CB8071D000A7C39 /* locations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DABCABBF1CB80717000A7C39 /* locations.cpp */; }; - DABFB85D1CBE99E500D62B32 /* MGLAccountManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847DF1CBAFA5100AB86E3 /* MGLAccountManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB85E1CBE99E500D62B32 /* MGLAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E01CBAFA5100AB86E3 /* MGLAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB85F1CBE99E500D62B32 /* MGLGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E11CBAFA5100AB86E3 /* MGLGeometry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8601CBE99E500D62B32 /* MGLMapCamera.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E21CBAFA5100AB86E3 /* MGLMapCamera.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8611CBE99E500D62B32 /* MGLMultiPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E31CBAFA5100AB86E3 /* MGLMultiPoint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8621CBE99E500D62B32 /* MGLOfflinePack.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E41CBAFA5100AB86E3 /* MGLOfflinePack.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8631CBE99E500D62B32 /* MGLOfflineRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E51CBAFA5100AB86E3 /* MGLOfflineRegion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8641CBE99E500D62B32 /* MGLOfflineStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E61CBAFA5100AB86E3 /* MGLOfflineStorage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8651CBE99E500D62B32 /* MGLOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E71CBAFA5100AB86E3 /* MGLOverlay.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8661CBE99E500D62B32 /* MGLPointAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E81CBAFA5100AB86E3 /* MGLPointAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8671CBE99E500D62B32 /* MGLPolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847E91CBAFA5100AB86E3 /* MGLPolygon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8681CBE99E500D62B32 /* MGLPolyline.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847EA1CBAFA5100AB86E3 /* MGLPolyline.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8691CBE99E500D62B32 /* MGLShape.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847EB1CBAFA5100AB86E3 /* MGLShape.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB86A1CBE99E500D62B32 /* MGLStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847EC1CBAFA5100AB86E3 /* MGLStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB86B1CBE99E500D62B32 /* MGLTilePyramidOfflineRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847ED1CBAFA5100AB86E3 /* MGLTilePyramidOfflineRegion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB86C1CBE99E500D62B32 /* MGLTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8847EE1CBAFA5100AB86E3 /* MGLTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB86D1CBE9A0F00D62B32 /* MGLAnnotationImage.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848341CBAFB8500AB86E3 /* MGLAnnotationImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB86E1CBE9A0F00D62B32 /* MGLCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848351CBAFB8500AB86E3 /* MGLCalloutView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB86F1CBE9A0F00D62B32 /* MGLMapView.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848361CBAFB8500AB86E3 /* MGLMapView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8701CBE9A0F00D62B32 /* MGLMapView+IBAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848371CBAFB8500AB86E3 /* MGLMapView+IBAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8721CBE9A0F00D62B32 /* MGLUserLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8848391CBAFB8500AB86E3 /* MGLUserLocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DABFB8731CBE9A9900D62B32 /* Mapbox.h in Headers */ = {isa = PBXBuildFile; fileRef = DA88485E1CBAFC2E00AB86E3 /* Mapbox.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAC25FCC200FD83F009BE98E /* NSExpression+MGLPrivateAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC25FCB200FD83E009BE98E /* NSExpression+MGLPrivateAdditions.h */; }; - DAC25FCD200FD83F009BE98E /* NSExpression+MGLPrivateAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC25FCB200FD83E009BE98E /* NSExpression+MGLPrivateAdditions.h */; }; - DAC49C5C1CD02BC9009E1AA3 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = DAC49C5F1CD02BC9009E1AA3 /* Localizable.stringsdict */; }; - DAC49C5D1CD02BC9009E1AA3 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = DAC49C5F1CD02BC9009E1AA3 /* Localizable.stringsdict */; }; - DACA86262019218600E9693A /* MGLRasterDEMSource.h in Headers */ = {isa = PBXBuildFile; fileRef = DACA86242019218500E9693A /* MGLRasterDEMSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DACA86272019218600E9693A /* MGLRasterDEMSource.h in Headers */ = {isa = PBXBuildFile; fileRef = DACA86242019218500E9693A /* MGLRasterDEMSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DACA86282019218600E9693A /* MGLRasterDEMSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = DACA86252019218500E9693A /* MGLRasterDEMSource.mm */; }; - DACA86292019218600E9693A /* MGLRasterDEMSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = DACA86252019218500E9693A /* MGLRasterDEMSource.mm */; }; - DAD1656C1CF41981001FF4B9 /* MGLFeature.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD165691CF41981001FF4B9 /* MGLFeature.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAD1656D1CF41981001FF4B9 /* MGLFeature.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD165691CF41981001FF4B9 /* MGLFeature.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAD1656E1CF41981001FF4B9 /* MGLFeature_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD1656A1CF41981001FF4B9 /* MGLFeature_Private.h */; }; - DAD165701CF41981001FF4B9 /* MGLFeature.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAD1656B1CF41981001FF4B9 /* MGLFeature.mm */; }; - DAD165711CF41981001FF4B9 /* MGLFeature.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAD1656B1CF41981001FF4B9 /* MGLFeature.mm */; }; - DAD165781CF4CDFF001FF4B9 /* MGLShapeCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD165761CF4CDFF001FF4B9 /* MGLShapeCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAD165791CF4CDFF001FF4B9 /* MGLShapeCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD165761CF4CDFF001FF4B9 /* MGLShapeCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAD1657A1CF4CDFF001FF4B9 /* MGLShapeCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAD165771CF4CDFF001FF4B9 /* MGLShapeCollection.mm */; }; - DAD1657B1CF4CDFF001FF4B9 /* MGLShapeCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAD165771CF4CDFF001FF4B9 /* MGLShapeCollection.mm */; }; - DAE7DEC21E245455007505A6 /* MGLNSStringAdditionsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE7DEC11E245455007505A6 /* MGLNSStringAdditionsTests.m */; }; - DAED38631D62D0FC00D7640F /* NSURL+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED38611D62D0FC00D7640F /* NSURL+MGLAdditions.h */; }; - DAED38641D62D0FC00D7640F /* NSURL+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED38611D62D0FC00D7640F /* NSURL+MGLAdditions.h */; }; - DAED38651D62D0FC00D7640F /* NSURL+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DAED38621D62D0FC00D7640F /* NSURL+MGLAdditions.m */; }; - DAED38661D62D0FC00D7640F /* NSURL+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DAED38621D62D0FC00D7640F /* NSURL+MGLAdditions.m */; }; - DAEDC4341D603417000224FF /* MGLAttributionInfoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DAEDC4331D603417000224FF /* MGLAttributionInfoTests.m */; }; - DAF0D8101DFE0EA000B28378 /* MGLRasterTileSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF0D80F1DFE0EA000B28378 /* MGLRasterTileSource_Private.h */; }; - DAF0D8111DFE0EA000B28378 /* MGLRasterTileSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF0D80F1DFE0EA000B28378 /* MGLRasterTileSource_Private.h */; }; - DAF0D8131DFE0EC500B28378 /* MGLVectorTileSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF0D8121DFE0EC500B28378 /* MGLVectorTileSource_Private.h */; }; - DAF0D8141DFE0EC500B28378 /* MGLVectorTileSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF0D8121DFE0EC500B28378 /* MGLVectorTileSource_Private.h */; }; - DAF0D8181DFE6B2800B28378 /* MGLAttributionInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF0D8171DFE6B2800B28378 /* MGLAttributionInfo_Private.h */; }; - DAF0D8191DFE6B2800B28378 /* MGLAttributionInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF0D8171DFE6B2800B28378 /* MGLAttributionInfo_Private.h */; }; - DAF25719201901E200367EF5 /* MGLHillshadeStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAF25717201901E100367EF5 /* MGLHillshadeStyleLayer.mm */; }; - DAF2571A201901E200367EF5 /* MGLHillshadeStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAF25717201901E100367EF5 /* MGLHillshadeStyleLayer.mm */; }; - DAF2571B201901E200367EF5 /* MGLHillshadeStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF25718201901E200367EF5 /* MGLHillshadeStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAF2571C201901E200367EF5 /* MGLHillshadeStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF25718201901E200367EF5 /* MGLHillshadeStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAF25720201902BC00367EF5 /* MGLHillshadeStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAF2571F201902BB00367EF5 /* MGLHillshadeStyleLayerTests.mm */; }; - DD0902A91DB1929D00C5BDCE /* MGLNetworkConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DD0902A21DB18DE700C5BDCE /* MGLNetworkConfiguration.m */; }; - DD0902AA1DB1929D00C5BDCE /* MGLNetworkConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DD0902A21DB18DE700C5BDCE /* MGLNetworkConfiguration.m */; }; - DD0902AB1DB192A800C5BDCE /* MGLNetworkConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DD0902A41DB18F1B00C5BDCE /* MGLNetworkConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD4823751D94AE6C00EB71B7 /* fill_filter_style.json in Resources */ = {isa = PBXBuildFile; fileRef = DD4823721D94AE6C00EB71B7 /* fill_filter_style.json */; }; - DD4823761D94AE6C00EB71B7 /* line_filter_style.json in Resources */ = {isa = PBXBuildFile; fileRef = DD4823731D94AE6C00EB71B7 /* line_filter_style.json */; }; - DD4823771D94AE6C00EB71B7 /* numeric_filter_style.json in Resources */ = {isa = PBXBuildFile; fileRef = DD4823741D94AE6C00EB71B7 /* numeric_filter_style.json */; }; - DD58A4C61D822BD000E1F038 /* MGLExpressionTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD58A4C51D822BD000E1F038 /* MGLExpressionTests.mm */; }; - DD9BE4F71EB263C50079A3AF /* UIViewController+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DD9BE4F51EB263C50079A3AF /* UIViewController+MGLAdditions.h */; }; - DD9BE4F81EB263C50079A3AF /* UIViewController+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DD9BE4F61EB263C50079A3AF /* UIViewController+MGLAdditions.m */; }; - DD9BE4F91EB263D20079A3AF /* UIViewController+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DD9BE4F51EB263C50079A3AF /* UIViewController+MGLAdditions.h */; }; - DD9BE4FA1EB263F40079A3AF /* UIViewController+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DD9BE4F61EB263C50079A3AF /* UIViewController+MGLAdditions.m */; }; - FA68F14A1E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA68F1481E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA68F14B1E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA68F1481E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA68F14D1E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = FA68F1491E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.mm */; }; - FA68F14E1E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = FA68F1491E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.mm */; }; - FAE1CDCB1E9D79CB00C40B5B /* MGLFillExtrusionStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = FAE1CDC81E9D79C600C40B5B /* MGLFillExtrusionStyleLayerTests.mm */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 165D0CE520005351009A3C66 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DA1DC9421CB6C1C2006E619F /* Project object */; - proxyType = 1; - remoteGlobalIDString = DA8847D11CBAF91600AB86E3; - remoteInfo = dynamic; - }; - CABE5DAB2072FA660003AF3C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DA1DC9421CB6C1C2006E619F /* Project object */; - proxyType = 1; - remoteGlobalIDString = 16376B2E1FFDB4B40000563E; - remoteInfo = "Integration Test Harness"; - }; - DA25D5C91CCDA0CC00607828 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DA1DC9421CB6C1C2006E619F /* Project object */; - proxyType = 1; - remoteGlobalIDString = DA8933D41CCD306400E68420; - remoteInfo = bundle; - }; - DA2E88571CC036F400F24E7B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DA1DC9421CB6C1C2006E619F /* Project object */; - proxyType = 1; - remoteGlobalIDString = DA8847D11CBAF91600AB86E3; - remoteInfo = dynamic; - }; - DA8847D71CBAF91600AB86E3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DA1DC9421CB6C1C2006E619F /* Project object */; - proxyType = 1; - remoteGlobalIDString = DA8847D11CBAF91600AB86E3; - remoteInfo = framework; - }; - DAA4E40A1CBB6C9500178DFB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DA1DC9421CB6C1C2006E619F /* Project object */; - proxyType = 1; - remoteGlobalIDString = DA8847D11CBAF91600AB86E3; - remoteInfo = framework; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - CAA69DA6206DCD0E007279CD /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - CAA69DA5206DCD0E007279CD /* Mapbox.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - DA4A269A1CB6F5D3000B7809 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - DA8847DA1CBAF91600AB86E3 /* Mapbox.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - DAA4E40C1CBB6C9600178DFB /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - DAA4E4091CBB6C9500178DFB /* Mapbox.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - DAA4E4111CBB71D400178DFB /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 071BBAFC1EE75CD4001FB02A /* MGLImageSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLImageSource.h; sourceTree = ""; }; - 071BBAFD1EE75CD4001FB02A /* MGLImageSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLImageSource.mm; sourceTree = ""; }; - 071BBB051EE7761A001FB02A /* MGLImageSourceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLImageSourceTests.m; path = ../../darwin/test/MGLImageSourceTests.m; sourceTree = ""; }; - 074A7F0C2277C093001A62D1 /* insert_access_token.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = insert_access_token.sh; sourceTree = ""; }; - 075AF840227B6762008D7A4C /* MBXState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBXState.h; sourceTree = ""; }; - 075AF841227B6762008D7A4C /* MBXState.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBXState.m; sourceTree = ""; }; - 075AF843227B67C5008D7A4C /* MBXStateManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBXStateManager.h; sourceTree = ""; }; - 075AF844227B67C6008D7A4C /* MBXStateManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBXStateManager.m; sourceTree = ""; }; - 076171C22139C70900668A35 /* MGLMapViewTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MGLMapViewTests.m; path = ../../darwin/test/MGLMapViewTests.m; sourceTree = ""; }; - 076171C62141A91700668A35 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = Settings.bundle; path = app/Settings.bundle; sourceTree = SOURCE_ROOT; }; - 077061D9215DA00E000FEF62 /* MGLTestLocationManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLTestLocationManager.m; sourceTree = ""; }; - 077061DB215DA11F000FEF62 /* MGLTestLocationManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLTestLocationManager.h; sourceTree = ""; }; - 0778DD401F67555F00A73B34 /* MGLComputedShapeSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLComputedShapeSource.h; sourceTree = ""; }; - 0778DD411F67555F00A73B34 /* MGLComputedShapeSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLComputedShapeSource.mm; sourceTree = ""; }; - 07D8C6FD1F67562800381808 /* MGLComputedShapeSourceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLComputedShapeSourceTests.m; path = ../../darwin/test/MGLComputedShapeSourceTests.m; sourceTree = ""; }; - 07D9474E1F67487E00E37934 /* MGLComputedShapeSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLComputedShapeSource_Private.h; sourceTree = ""; }; - 16376B071FFD9DAF0000563E /* integration.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = integration.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 16376B091FFD9DAF0000563E /* MBGLIntegrationTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MBGLIntegrationTests.mm; sourceTree = ""; }; - 16376B0B1FFD9DAF0000563E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 16376B2F1FFDB4B40000563E /* Integration Test Harness.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Integration Test Harness.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 16376B311FFDB4B40000563E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 16376B321FFDB4B40000563E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 16376B3A1FFDB4B40000563E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 16376B3D1FFDB4B40000563E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 16376B3F1FFDB4B40000563E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 16376B401FFDB4B40000563E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 16376B481FFEED010000563E /* MGLMapViewLayoutTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLMapViewLayoutTests.m; sourceTree = ""; }; - 170C43782028D49800863DF0 /* MGLHeatmapColorTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLHeatmapColorTests.mm; path = ../../darwin/test/MGLHeatmapColorTests.mm; sourceTree = ""; }; - 170C43792028D49800863DF0 /* MGLHeatmapStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLHeatmapStyleLayerTests.mm; path = ../../darwin/test/MGLHeatmapStyleLayerTests.mm; sourceTree = ""; }; - 1753ED411E53CE6F00A9FD90 /* MGLConversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLConversion.h; sourceTree = ""; }; - 1F0196A923174B0700F5C819 /* MGLMapViewContentInsetTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLMapViewContentInsetTests.m; sourceTree = ""; }; - 1F0666881EC64F8E001C16D7 /* MGLLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLight.h; sourceTree = ""; }; - 1F0666891EC64F8E001C16D7 /* MGLLight.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLight.mm; sourceTree = ""; }; - 1F26B6BF20E189C9007BCC21 /* MBXCustomLocationViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBXCustomLocationViewController.h; sourceTree = ""; }; - 1F26B6C020E189C9007BCC21 /* MBXCustomLocationViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBXCustomLocationViewController.m; sourceTree = ""; }; - 1F26B6C220E1A351007BCC21 /* simple_route.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = simple_route.json; sourceTree = ""; }; - 1F2B94BF221636D800210640 /* MGLNetworkConfiguration_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLNetworkConfiguration_Private.h; sourceTree = ""; }; - 1F6A82A021360F9C00BA5B41 /* MGLLoggingConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLLoggingConfiguration.h; sourceTree = ""; }; - 1F6A82A62138871900BA5B41 /* MGLLoggingConfiguration_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLLoggingConfiguration_Private.h; sourceTree = ""; }; - 1F7454941ECD450D00021D39 /* MGLLight_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLight_Private.h; sourceTree = ""; }; - 1F7454A61ED08AB400021D39 /* MGLLightTest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLLightTest.mm; path = ../../darwin/test/MGLLightTest.mm; sourceTree = ""; }; - 1F8A59F62165326C004DFE75 /* sideload_sat.db */ = {isa = PBXFileReference; lastKnownFileType = file; name = sideload_sat.db; path = ../../../test/fixtures/offline_database/sideload_sat.db; sourceTree = ""; }; - 1F8E8A80233A9FD9009B51ED /* MGLMapViewGestureRecognizerTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapViewGestureRecognizerTests.mm; sourceTree = ""; }; - 1F95931C1E6DE2E900D5B294 /* MGLNSDateAdditionsTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLNSDateAdditionsTests.mm; path = ../../darwin/test/MGLNSDateAdditionsTests.mm; sourceTree = ""; }; - 1FC4817B2098CBC0000D09B4 /* NSPredicate+MGLPrivateAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSPredicate+MGLPrivateAdditions.h"; sourceTree = ""; }; - 1FCAE2A020B872A400C577DD /* MGLLocationManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLLocationManager.h; sourceTree = ""; }; - 1FCAE2A120B872A400C577DD /* MGLLocationManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLLocationManager.m; sourceTree = ""; }; - 1FCAE2A620B88B3800C577DD /* MGLLocationManager_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLLocationManager_Private.h; sourceTree = ""; }; - 1FCCEC32222605C400302E3B /* MGLSDKMetricsManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLSDKMetricsManager.h; sourceTree = ""; }; - 1FCCEC33222605C400302E3B /* MGLSDKMetricsManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLSDKMetricsManager.m; sourceTree = ""; }; - 1FCCEC38222607A500302E3B /* MGLSDKMetricsManager_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLSDKMetricsManager_Private.h; sourceTree = ""; }; - 1FDB00C721F8F14E00D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; - 1FDB00C821F8F14F00D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Foundation.strings; sourceTree = ""; }; - 1FDB00C921F8F15000D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = cs; path = cs.lproj/Foundation.stringsdict; sourceTree = ""; }; - 1FDB00CA21F8F15100D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; - 1FDB00CB21F8F15300D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = cs; path = cs.lproj/Localizable.stringsdict; sourceTree = ""; }; - 1FF48585223710BE00F19727 /* MGLAttributedExpression.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLAttributedExpression.h; sourceTree = ""; }; - 1FF48586223710BE00F19727 /* MGLAttributedExpression.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLAttributedExpression.m; sourceTree = ""; }; - 20DABE861DF78148007AC5FF /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Foundation.strings"; sourceTree = ""; }; - 20DABE881DF78148007AC5FF /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - 30E578111DAA7D690050F07E /* UIImage+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIImage+MGLAdditions.h"; path = "src/UIImage+MGLAdditions.h"; sourceTree = SOURCE_ROOT; }; - 30E578121DAA7D690050F07E /* UIImage+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "UIImage+MGLAdditions.mm"; path = "src/UIImage+MGLAdditions.mm"; sourceTree = SOURCE_ROOT; }; - 350098B91D480108004B2AF0 /* MGLVectorTileSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLVectorTileSource.h; sourceTree = ""; }; - 350098BA1D480108004B2AF0 /* MGLVectorTileSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLVectorTileSource.mm; sourceTree = ""; }; - 350098DA1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSValue+MGLStyleAttributeAdditions.h"; sourceTree = ""; }; - 350098DB1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSValue+MGLStyleAttributeAdditions.mm"; sourceTree = ""; }; - 3502D6CB22AE88D5006BDFCE /* MGLAccountManagerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLAccountManagerTests.m; sourceTree = ""; }; - 3510FFE81D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSComparisonPredicate+MGLAdditions.h"; sourceTree = ""; }; - 3510FFE91D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSComparisonPredicate+MGLAdditions.mm"; sourceTree = ""; }; - 3510FFEE1D6D9D8C00F413B2 /* NSExpression+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSExpression+MGLAdditions.h"; sourceTree = ""; }; - 3510FFEF1D6D9D8C00F413B2 /* NSExpression+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSExpression+MGLAdditions.mm"; sourceTree = ""; }; - 3510FFF71D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSCompoundPredicate+MGLAdditions.h"; sourceTree = ""; }; - 3510FFF81D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSCompoundPredicate+MGLAdditions.mm"; sourceTree = ""; }; - 35136D381D42271A00C20EFD /* MGLBackgroundStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLBackgroundStyleLayer.mm; sourceTree = ""; }; - 35136D3B1D42272500C20EFD /* MGLCircleStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLCircleStyleLayer.mm; sourceTree = ""; }; - 35136D3E1D42273000C20EFD /* MGLLineStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLineStyleLayer.mm; sourceTree = ""; }; - 35136D411D42274500C20EFD /* MGLRasterStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRasterStyleLayer.mm; sourceTree = ""; }; - 35136D441D42275100C20EFD /* MGLSymbolStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLSymbolStyleLayer.mm; sourceTree = ""; }; - 35136D4A1D4277FC00C20EFD /* MGLSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSource.h; sourceTree = ""; }; - 35136D4B1D4277FC00C20EFD /* MGLSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLSource.mm; sourceTree = ""; }; - 3538AA1B1D542239008EC33D /* MGLForegroundStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLForegroundStyleLayer.h; sourceTree = ""; }; - 3538AA1C1D542239008EC33D /* MGLForegroundStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLForegroundStyleLayer.mm; sourceTree = ""; }; - 353933F11D3FB753003F57D7 /* MGLCircleStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCircleStyleLayer.h; sourceTree = ""; }; - 353933F41D3FB785003F57D7 /* MGLBackgroundStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLBackgroundStyleLayer.h; sourceTree = ""; }; - 353933F71D3FB79F003F57D7 /* MGLLineStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLineStyleLayer.h; sourceTree = ""; }; - 353933FA1D3FB7C0003F57D7 /* MGLRasterStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterStyleLayer.h; sourceTree = ""; }; - 353933FD1D3FB7DD003F57D7 /* MGLSymbolStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSymbolStyleLayer.h; sourceTree = ""; }; - 353AFA121D65AB17005A69F4 /* NSDate+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate+MGLAdditions.h"; sourceTree = ""; }; - 353AFA131D65AB17005A69F4 /* NSDate+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSDate+MGLAdditions.mm"; sourceTree = ""; }; - 353BAEF51D646370009A8DA9 /* amsterdam.geojson */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = amsterdam.geojson; path = ../../darwin/test/amsterdam.geojson; sourceTree = ""; }; - 353D23951D0B0DFE002BE09D /* MGLAnnotationViewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAnnotationViewTests.m; sourceTree = ""; }; - 354B83941D2E873E005D9406 /* MGLUserLocationAnnotationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLUserLocationAnnotationView.h; sourceTree = ""; }; - 354B83951D2E873E005D9406 /* MGLUserLocationAnnotationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLUserLocationAnnotationView.m; sourceTree = ""; }; - 354B839A1D2E9B48005D9406 /* MBXUserLocationAnnotationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBXUserLocationAnnotationView.h; sourceTree = ""; }; - 354B839B1D2E9B48005D9406 /* MBXUserLocationAnnotationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBXUserLocationAnnotationView.m; sourceTree = ""; }; - 3557F7AE1E1D27D300CCA5E6 /* MGLDistanceFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLDistanceFormatter.h; sourceTree = ""; }; - 3557F7AF1E1D27D300CCA5E6 /* MGLDistanceFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLDistanceFormatter.m; sourceTree = ""; }; - 35599DEA1D46F14E0048254D /* MGLStyleValue.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLStyleValue.mm; sourceTree = ""; }; - 355ADFFB1E9281DA00F3939D /* MGLScaleBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLScaleBar.h; sourceTree = ""; }; - 355ADFFC1E9281DA00F3939D /* MGLScaleBar.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLScaleBar.mm; sourceTree = ""; }; - 3566C7641D4A77BA008152BC /* MGLShapeSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeSource.h; sourceTree = ""; }; - 3566C7651D4A77BA008152BC /* MGLShapeSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShapeSource.mm; sourceTree = ""; }; - 3566C76A1D4A8DFA008152BC /* MGLRasterTileSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterTileSource.h; sourceTree = ""; }; - 3566C76B1D4A8DFA008152BC /* MGLRasterTileSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRasterTileSource.mm; sourceTree = ""; }; - 3566C7701D4A9198008152BC /* MGLSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSource_Private.h; sourceTree = ""; }; - 3575797F1D501E09000B822E /* MGLFillStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLFillStyleLayerTests.mm; path = ../../darwin/test/MGLFillStyleLayerTests.mm; sourceTree = ""; }; - 357579821D502AE6000B822E /* MGLRasterStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLRasterStyleLayerTests.mm; path = ../../darwin/test/MGLRasterStyleLayerTests.mm; sourceTree = ""; }; - 357579841D502AF5000B822E /* MGLSymbolStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLSymbolStyleLayerTests.mm; path = ../../darwin/test/MGLSymbolStyleLayerTests.mm; sourceTree = ""; }; - 357579861D502AFE000B822E /* MGLLineStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLLineStyleLayerTests.mm; path = ../../darwin/test/MGLLineStyleLayerTests.mm; sourceTree = ""; }; - 357579881D502B06000B822E /* MGLCircleStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLCircleStyleLayerTests.mm; path = ../../darwin/test/MGLCircleStyleLayerTests.mm; sourceTree = ""; }; - 3575798A1D502B0C000B822E /* MGLBackgroundStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLBackgroundStyleLayerTests.mm; path = ../../darwin/test/MGLBackgroundStyleLayerTests.mm; sourceTree = ""; }; - 357FE2DB1E02D2B20068B753 /* NSCoder+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSCoder+MGLAdditions.h"; path = "../../darwin/src/NSCoder+MGLAdditions.h"; sourceTree = ""; }; - 357FE2DC1E02D2B20068B753 /* NSCoder+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "NSCoder+MGLAdditions.mm"; path = "../../darwin/src/NSCoder+MGLAdditions.mm"; sourceTree = ""; }; - 3598544C1E1D38AA00B29F84 /* MGLDistanceFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLDistanceFormatterTests.m; path = ../../darwin/test/MGLDistanceFormatterTests.m; sourceTree = ""; }; - 359F57451D2FDBD5005217F1 /* MGLUserLocationAnnotationView_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLUserLocationAnnotationView_Private.h; sourceTree = ""; }; - 35B82BF61D6C5F8400B1B721 /* NSPredicate+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSPredicate+MGLAdditions.h"; sourceTree = ""; }; - 35B82BF71D6C5F8400B1B721 /* NSPredicate+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSPredicate+MGLAdditions.mm"; sourceTree = ""; }; - 35B8E08B1D6C8B5100E768D2 /* MGLPredicateTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLPredicateTests.mm; path = ../../darwin/test/MGLPredicateTests.mm; sourceTree = ""; }; - 35CE61801D4165D9004F2359 /* UIColor+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+MGLAdditions.h"; sourceTree = ""; }; - 35CE61811D4165D9004F2359 /* UIColor+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "UIColor+MGLAdditions.mm"; sourceTree = ""; }; - 35D13AB51D3D15E300AFB4E0 /* MGLStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleLayer.h; sourceTree = ""; }; - 35D13AB61D3D15E300AFB4E0 /* MGLStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLStyleLayer.mm; sourceTree = ""; }; - 35D13AC11D3D19DD00AFB4E0 /* MGLFillStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillStyleLayer.h; sourceTree = ""; }; - 35D13AC21D3D19DD00AFB4E0 /* MGLFillStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFillStyleLayer.mm; sourceTree = ""; }; - 35D9DDE11DA25EEC00DAAD69 /* MGLCodingTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLCodingTests.mm; path = ../../darwin/test/MGLCodingTests.mm; sourceTree = ""; }; - 35DE35531EB7CBA8004917C5 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = sv; path = sv.lproj/Localizable.stringsdict; sourceTree = ""; }; - 35E0CFE51D3E501500188327 /* MGLStyle_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyle_Private.h; sourceTree = ""; }; - 35E1A4D71D74336F007AA97F /* MGLValueEvaluator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLValueEvaluator.h; sourceTree = ""; }; - 35E79F1F1D41266300957B9E /* MGLStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleLayer_Private.h; sourceTree = ""; }; - 36F1153C1D46080700878E1A /* libmbgl-platform-ios.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libmbgl-platform-ios.a"; path = "build/Debug-iphoneos/libmbgl-platform-ios.a"; sourceTree = ""; }; - 3E6465D42065767A00685536 /* LimeGreenStyleLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LimeGreenStyleLayer.m; path = ../../darwin/app/LimeGreenStyleLayer.m; sourceTree = ""; }; - 3E6465D52065767A00685536 /* LimeGreenStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LimeGreenStyleLayer.h; path = ../../darwin/app/LimeGreenStyleLayer.h; sourceTree = ""; }; - 3EA931BC4F087E166D538F21 /* MGLRendererConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRendererConfiguration.mm; sourceTree = ""; }; - 3EA9337830C7738BF7F5493C /* MGLRendererConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRendererConfiguration.h; sourceTree = ""; }; - 400532FF1DB0862B0069F638 /* NSArray+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MGLAdditions.h"; sourceTree = ""; }; - 400533001DB0862B0069F638 /* NSArray+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSArray+MGLAdditions.mm"; sourceTree = ""; }; - 4018B1C31CDC277F00F666AF /* MGLAnnotationView_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationView_Private.h; sourceTree = ""; }; - 4018B1C41CDC277F00F666AF /* MGLAnnotationView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLAnnotationView.mm; sourceTree = ""; }; - 4018B1C51CDC277F00F666AF /* MGLAnnotationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationView.h; sourceTree = ""; }; - 402E9DE01CD2C76200FD4519 /* Mapbox.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = Mapbox.playground; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 4031ACFE1E9FD29F00A3EA26 /* MGLSDKTestHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MGLSDKTestHelpers.swift; path = ../../darwin/test/MGLSDKTestHelpers.swift; sourceTree = ""; }; - 404326881D5B9B1A007111BD /* MGLAnnotationContainerView_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationContainerView_Private.h; sourceTree = ""; }; - 4049C29B1DB6CD6C00B3F799 /* MGLPointCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPointCollection.h; sourceTree = ""; }; - 4049C29C1DB6CD6C00B3F799 /* MGLPointCollection.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLPointCollection.mm; sourceTree = ""; }; - 4049C2AB1DB6E05500B3F799 /* MGLPointCollection_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPointCollection_Private.h; sourceTree = ""; }; - 404C26E01D89B877000AA13D /* MGLTileSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTileSource.h; sourceTree = ""; }; - 404C26E11D89B877000AA13D /* MGLTileSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLTileSource.mm; sourceTree = ""; }; - 404C26E61D89C515000AA13D /* MGLTileSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTileSource_Private.h; sourceTree = ""; }; - 406E99B11FFEFED500D9FFCC /* MMEEventLogReportViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEEventLogReportViewController.m; sourceTree = ""; }; - 406E99B21FFEFED500D9FFCC /* MMEUINavigation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEUINavigation.m; sourceTree = ""; }; - 406E99B31FFEFED600D9FFCC /* MMEUINavigation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEUINavigation.h; sourceTree = ""; }; - 406E99B51FFEFED600D9FFCC /* MMEEventLogReportViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEEventLogReportViewController.h; sourceTree = ""; }; - 40834AEF1FDF4F0100C1BD0D /* Mapbox-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "Mapbox-Prefix.pch"; path = "src/Mapbox-Prefix.pch"; sourceTree = SOURCE_ROOT; }; - 40834BA31FE05D6B00C1BD0D /* MMEEventsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEEventsManager.h; sourceTree = ""; }; - 40834BA41FE05D6B00C1BD0D /* MMEEventsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEEventsManager.m; sourceTree = ""; }; - 40834BA51FE05D6B00C1BD0D /* MMEAPIClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEAPIClient.m; sourceTree = ""; }; - 40834BA61FE05D6B00C1BD0D /* MMEEventLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEEventLogger.h; sourceTree = ""; }; - 40834BAA1FE05D6C00C1BD0D /* MMENSURLSessionWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMENSURLSessionWrapper.h; sourceTree = ""; }; - 40834BAB1FE05D6C00C1BD0D /* MMEAPIClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEAPIClient.h; sourceTree = ""; }; - 40834BAC1FE05D6C00C1BD0D /* MapboxMobileEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapboxMobileEvents.h; sourceTree = ""; }; - 40834BAD1FE05D6C00C1BD0D /* MMEUniqueIdentifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEUniqueIdentifier.m; sourceTree = ""; }; - 40834BAE1FE05D6C00C1BD0D /* MMECommonEventData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMECommonEventData.h; sourceTree = ""; }; - 40834BB01FE05D6C00C1BD0D /* MMEConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEConstants.h; sourceTree = ""; }; - 40834BB11FE05D6D00C1BD0D /* MMEDependencyManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEDependencyManager.h; sourceTree = ""; }; - 40834BB21FE05D6D00C1BD0D /* MMEEventsConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEEventsConfiguration.m; sourceTree = ""; }; - 40834BB31FE05D6D00C1BD0D /* MMELocationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMELocationManager.h; sourceTree = ""; }; - 40834BB41FE05D6D00C1BD0D /* MMEDependencyManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEDependencyManager.m; sourceTree = ""; }; - 40834BB61FE05D6D00C1BD0D /* MMETypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMETypes.h; sourceTree = ""; }; - 40834BB71FE05D6D00C1BD0D /* MMEEventLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEEventLogger.m; sourceTree = ""; }; - 40834BB81FE05D6D00C1BD0D /* MMELocationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMELocationManager.m; sourceTree = ""; }; - 40834BB91FE05D6E00C1BD0D /* MMETimerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMETimerManager.m; sourceTree = ""; }; - 40834BBA1FE05D6E00C1BD0D /* MMEEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEEvent.h; sourceTree = ""; }; - 40834BBB1FE05D6E00C1BD0D /* MMEEventsConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEEventsConfiguration.h; sourceTree = ""; }; - 40834BBC1FE05D6E00C1BD0D /* MMEDate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEDate.m; sourceTree = ""; }; - 40834BBE1FE05D6E00C1BD0D /* MMEUIApplicationWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEUIApplicationWrapper.h; sourceTree = ""; }; - 40834BBF1FE05D6E00C1BD0D /* MMEUniqueIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEUniqueIdentifier.h; sourceTree = ""; }; - 40834BC01FE05D6E00C1BD0D /* MMEConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEConstants.m; sourceTree = ""; }; - 40834BC51FE05D6F00C1BD0D /* MMEDate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEDate.h; sourceTree = ""; }; - 40834BC61FE05D7000C1BD0D /* MMENSURLSessionWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMENSURLSessionWrapper.m; sourceTree = ""; }; - 40834BC71FE05D7000C1BD0D /* MMEEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEEvent.m; sourceTree = ""; }; - 40834BC81FE05D7000C1BD0D /* MMENamespacedDependencies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMENamespacedDependencies.h; sourceTree = ""; }; - 40834BC91FE05D7000C1BD0D /* MMETimerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMETimerManager.h; sourceTree = ""; }; - 40834BCA1FE05D7000C1BD0D /* MMEUIApplicationWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEUIApplicationWrapper.m; sourceTree = ""; }; - 40834BCC1FE05D7100C1BD0D /* MMEReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEReachability.h; sourceTree = ""; }; - 40834BCD1FE05D7100C1BD0D /* MMEReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEReachability.m; sourceTree = ""; }; - 40834BCE1FE05D7100C1BD0D /* MMECommonEventData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMECommonEventData.m; sourceTree = ""; }; - 4085AF081D933DEA00F11B22 /* MGLTileSetTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLTileSetTests.mm; path = ../../darwin/test/MGLTileSetTests.mm; sourceTree = ""; }; - 408AA8551DAEDA0800022900 /* NSDictionary+MGLAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+MGLAdditions.h"; sourceTree = ""; }; - 408AA8561DAEDA0800022900 /* NSDictionary+MGLAdditions.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSDictionary+MGLAdditions.mm"; sourceTree = ""; }; - 409D0A0C1ED614CE00C95D0C /* MGLAnnotationViewIntegrationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MGLAnnotationViewIntegrationTests.swift; sourceTree = ""; }; - 409F43FC1E9E781C0048729D /* MGLMapViewDelegateIntegrationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MGLMapViewDelegateIntegrationTests.swift; sourceTree = ""; }; - 40CF6DBA1DAC3C1800A4D18B /* MGLShape_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShape_Private.h; sourceTree = ""; }; - 40CFA6501D787579008103BD /* MGLShapeSourceTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLShapeSourceTests.mm; path = ../../darwin/test/MGLShapeSourceTests.mm; sourceTree = ""; }; - 40EDA1BD1CFE0D4A00D9EA68 /* MGLAnnotationContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationContainerView.h; sourceTree = ""; }; - 40EDA1BE1CFE0D4A00D9EA68 /* MGLAnnotationContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAnnotationContainerView.m; sourceTree = ""; }; - 40F8876F1D7A1DB8008ECB67 /* MGLShapeSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeSource_Private.h; sourceTree = ""; }; - 40FDA7691CCAAA6800442548 /* MBXAnnotationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBXAnnotationView.h; sourceTree = ""; }; - 40FDA76A1CCAAA6800442548 /* MBXAnnotationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBXAnnotationView.m; sourceTree = ""; }; - 550570C422958FB300228ECF /* MGLMapView+Impl.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "MGLMapView+Impl.mm"; sourceTree = ""; }; - 550570C522958FB400228ECF /* MGLMapView+Impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MGLMapView+Impl.h"; sourceTree = ""; }; - 554180411D2E97DE00012372 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; - 556660C91E1BF3A900E2C41B /* MGLFoundation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLFoundation.h; sourceTree = ""; wrapsLines = 0; }; - 556660D71E1D085500E2C41B /* MGLVersionNumber.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MGLVersionNumber.m; path = ../../darwin/test/MGLVersionNumber.m; sourceTree = ""; }; - 5580B459229570A00091291B /* MGLMapView+OpenGL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MGLMapView+OpenGL.h"; sourceTree = ""; }; - 5580B45A229570A10091291B /* MGLMapView+OpenGL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "MGLMapView+OpenGL.mm"; sourceTree = ""; }; - 558DE79E1E5615E400C7916D /* MGLFoundation_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFoundation_Private.h; sourceTree = ""; }; - 558DE79F1E5615E400C7916D /* MGLFoundation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFoundation.mm; sourceTree = ""; }; - 55CF752E213ED92000ED86C4 /* libmbgl-vendor-icu.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-vendor-icu.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 55CF7530213ED92A00ED86C4 /* libmbgl-vendor-icu.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-vendor-icu.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 55D120A71F791007004B6D81 /* libmbgl-loop-darwin.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-loop-darwin.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 55D120A91F79100C004B6D81 /* libmbgl-filesource.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-filesource.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 55D8C9941D0F133500F42F10 /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = config.xcconfig; path = ../../build/ios/config.xcconfig; sourceTree = ""; }; - 55D8C9951D0F18CE00F42F10 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; - 55E2AD121E5B125400E8C587 /* MGLOfflineStorageTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLOfflineStorageTests.mm; path = ../../darwin/test/MGLOfflineStorageTests.mm; sourceTree = ""; }; - 632281DD1E6F855900D75A5D /* MBXEmbeddedMapViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBXEmbeddedMapViewController.h; sourceTree = ""; }; - 632281DE1E6F855900D75A5D /* MBXEmbeddedMapViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBXEmbeddedMapViewController.m; sourceTree = ""; }; - 6407D66F1E0085FD00F6A9C3 /* MGLDocumentationExampleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MGLDocumentationExampleTests.swift; path = ../../darwin/test/MGLDocumentationExampleTests.swift; sourceTree = ""; }; - 6FA9341521EF372100AA9CA8 /* MBXOrnamentsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBXOrnamentsViewController.m; sourceTree = ""; }; - 6FA9341621EF372100AA9CA8 /* MBXOrnamentsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBXOrnamentsViewController.h; sourceTree = ""; }; - 6FAFA29A220023840088709E /* UIView+MGLAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+MGLAdditions.h"; sourceTree = ""; }; - 6FAFA29B220023840088709E /* UIView+MGLAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+MGLAdditions.m"; sourceTree = ""; }; - 74CB5EAF219B252C00102936 /* MGLStyleLayerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleLayerManager.h; sourceTree = ""; }; - 74CB5EB0219B252C00102936 /* MGLStyleLayerManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLStyleLayerManager.mm; sourceTree = ""; }; - 74CB5EB5219B280300102936 /* MGLHillshadeStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLHillshadeStyleLayer_Private.h; sourceTree = ""; }; - 74CB5EB6219B280300102936 /* MGLFillExtrusionStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillExtrusionStyleLayer_Private.h; sourceTree = ""; }; - 74CB5EB7219B280300102936 /* MGLFillStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillStyleLayer_Private.h; sourceTree = ""; }; - 74CB5EB8219B280300102936 /* MGLHeatmapStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLHeatmapStyleLayer_Private.h; sourceTree = ""; }; - 74CB5EC1219B282500102936 /* MGLCircleStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCircleStyleLayer_Private.h; sourceTree = ""; }; - 74CB5EC2219B282500102936 /* MGLBackgroundStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLBackgroundStyleLayer_Private.h; sourceTree = ""; }; - 74CB5EC7219B285000102936 /* MGLLineStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLineStyleLayer_Private.h; sourceTree = ""; }; - 74CB5EC8219B285000102936 /* MGLOpenGLStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOpenGLStyleLayer_Private.h; sourceTree = ""; }; - 74CB5EC9219B285000102936 /* MGLRasterStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterStyleLayer_Private.h; sourceTree = ""; }; - 74CB5ED0219B286400102936 /* MGLSymbolStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSymbolStyleLayer_Private.h; sourceTree = ""; }; - 8989B17A201A48EA0081CF59 /* MGLHeatmapStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLHeatmapStyleLayer.h; sourceTree = ""; }; - 8989B17B201A48EA0081CF59 /* MGLHeatmapStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHeatmapStyleLayer.mm; sourceTree = ""; }; - 920A3E5C1E6F995200C16EFC /* MGLSourceQueryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLSourceQueryTests.m; path = ../../darwin/test/MGLSourceQueryTests.m; sourceTree = ""; }; - 9221BAAC2069843A0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTilePyramidOfflineRegion_Private.h; sourceTree = ""; }; - 927FBCFA1F4DAA8300F8BF1F /* MBXSnapshotsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBXSnapshotsViewController.h; sourceTree = ""; }; - 927FBCFB1F4DAA8300F8BF1F /* MBXSnapshotsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBXSnapshotsViewController.m; sourceTree = ""; }; - 927FBCFD1F4DB05500F8BF1F /* MGLMapSnapshotter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapSnapshotter.h; sourceTree = ""; }; - 927FBCFE1F4DB05500F8BF1F /* MGLMapSnapshotter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapSnapshotter.mm; sourceTree = ""; wrapsLines = 0; }; - 92F2C3EC1F0E3C3A00268EC0 /* MGLRendererFrontend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRendererFrontend.h; sourceTree = ""; }; - 92FC0AE7207CEE16007B6B54 /* MGLShapeOfflineRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeOfflineRegion.h; sourceTree = ""; }; - 92FC0AE8207CEE16007B6B54 /* MGLShapeOfflineRegion_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeOfflineRegion_Private.h; sourceTree = ""; }; - 92FC0AE9207CEE16007B6B54 /* MGLShapeOfflineRegion.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShapeOfflineRegion.mm; sourceTree = ""; }; - 960369FF200565C700510F3D /* NSOrthography+MGLAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSOrthography+MGLAdditions.h"; sourceTree = ""; }; - 96036A00200565C700510F3D /* NSOrthography+MGLAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSOrthography+MGLAdditions.m"; sourceTree = ""; }; - 96036A0520059BBA00510F3D /* MGLNSOrthographyAdditionsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLNSOrthographyAdditionsTests.m; sourceTree = ""; }; - 960D0C351ECF5AAF008E151F /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 9620BB361E69FE1700705A1D /* MGLSDKUpdateChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSDKUpdateChecker.h; sourceTree = ""; }; - 9620BB371E69FE1700705A1D /* MGLSDKUpdateChecker.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = MGLSDKUpdateChecker.mm; sourceTree = ""; }; - 96381C0122C6F3950053497D /* MGLMapViewPitchTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLMapViewPitchTests.m; sourceTree = ""; }; - 9641771E22D546DA00332422 /* MGLCompassButton_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLCompassButton_Private.h; sourceTree = ""; }; - 9654C1251FFC1AB900DB6A19 /* MGLPolyline_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPolyline_Private.h; sourceTree = ""; }; - 9654C1271FFC1CC000DB6A19 /* MGLPolygon_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPolygon_Private.h; sourceTree = ""; }; - 9658C154204761FC00D8A674 /* MGLMapViewScaleBarTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLMapViewScaleBarTests.m; sourceTree = ""; }; - 965DF50F20F9430500438AAC /* MBXFrameTimeGraphView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBXFrameTimeGraphView.h; sourceTree = ""; }; - 965DF51020F9430500438AAC /* MBXFrameTimeGraphView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBXFrameTimeGraphView.m; sourceTree = ""; }; - 9660916B1E5BBFD700A9A03B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - 9660916C1E5BBFD900A9A03B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - 9660916D1E5BBFDB00A9A03B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - 9660916E1E5BBFDC00A9A03B /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = ""; }; - 9660916F1E5BBFDE00A9A03B /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Localizable.strings; sourceTree = ""; }; - 966FCF4A1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLUserLocationHeadingBeamLayer.h; sourceTree = ""; }; - 966FCF4B1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLUserLocationHeadingBeamLayer.m; sourceTree = ""; }; - 966FCF501F3C321000F2B6DE /* MGLUserLocationHeadingArrowLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLUserLocationHeadingArrowLayer.h; sourceTree = ""; }; - 966FCF511F3C321000F2B6DE /* MGLUserLocationHeadingArrowLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLUserLocationHeadingArrowLayer.m; sourceTree = ""; }; - 967C8649210A9D3C004DF794 /* UIDevice+MGLAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIDevice+MGLAdditions.h"; sourceTree = ""; }; - 967C864A210A9D3C004DF794 /* UIDevice+MGLAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+MGLAdditions.m"; sourceTree = ""; }; - 9680273E22653B84006BA4A1 /* MBXSKUToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MBXSKUToken.h; path = "../vendor/mapbox-accounts-ios/MBXSKUToken.h"; sourceTree = ""; }; - 9680274122653C3E006BA4A1 /* libmbxaccounts.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmbxaccounts.a; path = "vendor/mapbox-accounts-ios/libmbxaccounts.a"; sourceTree = SOURCE_ROOT; }; - 9686D1BC22D9357700194EA0 /* MGLMapViewZoomTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapViewZoomTests.mm; sourceTree = ""; }; - 968F36B41E4D0FC6003A5522 /* ja */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - 96E027241E57C76E004B8E66 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; - 96E027271E57C77A004B8E66 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - 96E027281E57C7DB004B8E66 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - 96E027291E57C7DE004B8E66 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; - 96E0272A1E57C7DF004B8E66 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - 96E0272B1E57C7E3004B8E66 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - 96E0272C1E57C7E5004B8E66 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - 96E0272D1E57C7E6004B8E66 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - 96E0272E1E57C7E7004B8E66 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - 96E6145522CC135200109F14 /* MGLMapViewCompassViewTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapViewCompassViewTests.mm; sourceTree = ""; }; - 96E6145722CC169000109F14 /* MGLCompassButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLCompassButton.h; sourceTree = ""; }; - 96E6145822CC169000109F14 /* MGLCompassButton.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLCompassButton.mm; sourceTree = ""; }; - 96ED34DD22374C0900E9FCA9 /* MGLMapViewDirectionTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapViewDirectionTests.mm; sourceTree = ""; }; - 96F017292118FBAE00892778 /* MGLMapView_Experimental.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapView_Experimental.h; sourceTree = ""; }; - 96F3F73B1F5711F1003E2D2C /* MGLUserLocationHeadingIndicator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLUserLocationHeadingIndicator.h; sourceTree = ""; }; - 9C6E280922A97FDB0056B7BE /* MMECategoryLoader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMECategoryLoader.m; sourceTree = ""; }; - 9C6E280A22A97FDB0056B7BE /* UIKit+MMEMobileEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIKit+MMEMobileEvents.h"; sourceTree = ""; }; - 9C6E280B22A97FDB0056B7BE /* CLLocation+MMEMobileEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CLLocation+MMEMobileEvents.h"; sourceTree = ""; }; - 9C6E280C22A97FDB0056B7BE /* NSData+MMEGZIP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+MMEGZIP.h"; sourceTree = ""; }; - 9C6E280D22A97FDB0056B7BE /* NSData+MMEGZIP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+MMEGZIP.m"; sourceTree = ""; }; - 9C6E280E22A97FDB0056B7BE /* CLLocation+MMEMobileEvents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CLLocation+MMEMobileEvents.m"; sourceTree = ""; }; - 9C6E280F22A97FDB0056B7BE /* UIKit+MMEMobileEvents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIKit+MMEMobileEvents.m"; sourceTree = ""; }; - 9C6E281022A97FDB0056B7BE /* CLLocationManager+MMEMobileEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CLLocationManager+MMEMobileEvents.h"; sourceTree = ""; }; - 9C6E281122A97FDB0056B7BE /* MMECategoryLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMECategoryLoader.h; sourceTree = ""; }; - 9C6E281222A97FDB0056B7BE /* CLLocationManager+MMEMobileEvents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CLLocationManager+MMEMobileEvents.m"; sourceTree = ""; }; - 9C6E282922A980E50056B7BE /* MGLMapboxEvents.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MGLMapboxEvents.h; path = src/MGLMapboxEvents.h; sourceTree = SOURCE_ROOT; }; - 9C6E282A22A980E50056B7BE /* MGLMapboxEvents.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MGLMapboxEvents.m; path = src/MGLMapboxEvents.m; sourceTree = SOURCE_ROOT; }; - 9C6E284822A984120056B7BE /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; name = Makefile; path = ../../Makefile; sourceTree = ""; }; - 9C6E285A22A9849E0056B7BE /* install-packaging-dependencies.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "install-packaging-dependencies.sh"; sourceTree = ""; }; - 9C6E285B22A9849E0056B7BE /* ios-code-coverage.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "ios-code-coverage.sh"; sourceTree = ""; }; - 9C6E285C22A9849E0056B7BE /* release-notes-github.md.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; path = "release-notes-github.md.ejs"; sourceTree = ""; }; - 9C6E285D22A9849E0056B7BE /* document.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = document.sh; sourceTree = ""; }; - 9C6E285E22A9849E0056B7BE /* check-events-symbols.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "check-events-symbols.sh"; sourceTree = ""; }; - 9C6E285F22A9849E0056B7BE /* deploy-packages.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "deploy-packages.sh"; sourceTree = ""; }; - 9C6E286022A9849E0056B7BE /* publish.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = publish.sh; sourceTree = ""; }; - 9C6E286122A9849E0056B7BE /* validate-framework-zip.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "validate-framework-zip.sh"; sourceTree = ""; }; - 9C6E286222A9849E0056B7BE /* metrics.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = metrics.sh; sourceTree = ""; }; - 9C6E286322A9849E0056B7BE /* package.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = package.sh; sourceTree = ""; }; - 9C6E286422A9849E0056B7BE /* trigger-external-deploy-steps.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "trigger-external-deploy-steps.sh"; sourceTree = ""; }; - 9C6E286522A9849E0056B7BE /* release-notes-jazzy.md.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; path = "release-notes-jazzy.md.ejs"; sourceTree = ""; }; - 9C6E286622A9849E0056B7BE /* deploy-snapshot.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "deploy-snapshot.sh"; sourceTree = ""; }; - 9C6E286722A9849E0056B7BE /* release-notes.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = "release-notes.js"; sourceTree = ""; }; - A4DE3DC823038A07005B3473 /* MGLMockGestureRecognizers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLMockGestureRecognizers.m; sourceTree = ""; }; - A4DE3DCA23038A7F005B3473 /* MGLMockGestureRecognizers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMockGestureRecognizers.h; sourceTree = ""; }; - A4F3FB1C2254865900A30170 /* missing_icon.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = missing_icon.json; sourceTree = ""; }; - AC46EB57225E60090039C013 /* MMECertPin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMECertPin.h; sourceTree = ""; }; - AC46EB58225E60090039C013 /* MMECertPin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMECertPin.m; sourceTree = ""; }; - AC46EB5D225E60510039C013 /* MMEPinningConfigurationProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEPinningConfigurationProvider.m; sourceTree = ""; }; - AC46EB5E225E60510039C013 /* MMEPinningConfigurationProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEPinningConfigurationProvider.h; sourceTree = ""; }; - AC518DFD201BB55A00EBC820 /* MGLTelemetryConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLTelemetryConfig.h; sourceTree = ""; }; - AC518DFE201BB55A00EBC820 /* MGLTelemetryConfig.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLTelemetryConfig.m; sourceTree = ""; }; - ACA65F4F214066E200537748 /* MMEConfigurator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEConfigurator.h; sourceTree = ""; }; - ACA65F50214066E600537748 /* MMEConfigurator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEConfigurator.m; sourceTree = ""; }; - ACA65F552140696B00537748 /* MMEDispatchManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEDispatchManager.h; sourceTree = ""; }; - ACA65F562140697100537748 /* MMEDispatchManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEDispatchManager.m; sourceTree = ""; }; - ACD024542187EAAF00D8C8A7 /* MMEMetricsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEMetricsManager.m; sourceTree = ""; }; - ACD024552187EAAF00D8C8A7 /* MMEMetrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEMetrics.h; sourceTree = ""; }; - ACD024562187EAAF00D8C8A7 /* MMEMetricsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMEMetricsManager.h; sourceTree = ""; }; - ACD024572187EAAF00D8C8A7 /* MMEMetrics.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMEMetrics.m; sourceTree = ""; }; - CA0C27912076C804001CE5B7 /* MGLShapeSourceTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLShapeSourceTests.m; sourceTree = ""; }; - CA0C27932076CA19001CE5B7 /* MGLMapViewIntegrationTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLMapViewIntegrationTest.m; sourceTree = ""; wrapsLines = 0; }; - CA0C27952076CA50001CE5B7 /* MGLMapViewIntegrationTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLMapViewIntegrationTest.h; sourceTree = ""; }; - CA1B4A502099FB2200EDD491 /* MGLMapSnapshotterTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLMapSnapshotterTest.m; sourceTree = ""; }; - CA4C54FD2324948100A81659 /* MGLSourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MGLSourceTests.swift; sourceTree = ""; }; - CA4EB8C620863487006AB465 /* MGLStyleLayerIntegrationTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLStyleLayerIntegrationTests.m; sourceTree = ""; }; - CA4F3BDD230F74C3008BAFEA /* MGLMapViewPendingBlockTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLMapViewPendingBlockTests.m; sourceTree = ""; }; - CA4F3BE123107793008BAFEA /* MGLCameraTransitionTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLCameraTransitionTests.mm; sourceTree = ""; }; - CA4F3BE3231077B9008BAFEA /* MGLCameraTransitionFinishTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLCameraTransitionFinishTests.mm; sourceTree = ""; }; - CA55CD3E202C16AA00CE7095 /* MGLCameraChangeReason.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCameraChangeReason.h; sourceTree = ""; }; - CA5E5042209BDC5F001A8A81 /* MGLTestUtility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MGLTestUtility.h; path = ../../darwin/test/MGLTestUtility.h; sourceTree = ""; }; - CA65C4F721E9BB080068B0D4 /* MGLCluster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCluster.h; sourceTree = ""; }; - CA6914B420E67F50002DB0EE /* MGLAnnotationViewIntegrationTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLAnnotationViewIntegrationTests.mm; path = "Annotation Tests/MGLAnnotationViewIntegrationTests.mm"; sourceTree = ""; }; - CA86FF0D22D8D5A0009EB14A /* MGLNetworkConfigurationTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLNetworkConfigurationTests.m; sourceTree = ""; }; - CA88DC2F21C85D900059ED5A /* MGLStyleURLIntegrationTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLStyleURLIntegrationTest.m; sourceTree = ""; }; - CA8FBC0821A47BB100D1203C /* MGLRendererConfigurationTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLRendererConfigurationTests.mm; path = ../../darwin/test/MGLRendererConfigurationTests.mm; sourceTree = ""; }; - CAAA65D72321BBA900F08A39 /* MGLTestAssertionHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MGLTestAssertionHandler.h; path = ../../darwin/test/MGLTestAssertionHandler.h; sourceTree = ""; }; - CAAA65D82321BBA900F08A39 /* MGLTestAssertionHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MGLTestAssertionHandler.m; path = ../../darwin/test/MGLTestAssertionHandler.m; sourceTree = ""; }; - CAD9D0A922A86D6F001B25EE /* MGLResourceTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLResourceTests.mm; path = ../../darwin/test/MGLResourceTests.mm; sourceTree = ""; }; - CAE7AD5320F46EF5003B6782 /* integration-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "integration-Bridging-Header.h"; sourceTree = ""; }; - CAE7AD5420F46EF5003B6782 /* MGLMapSnapshotterSwiftTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MGLMapSnapshotterSwiftTests.swift; sourceTree = ""; }; - CAFB3C13234505D500399265 /* MGLMapSnapshotter_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLMapSnapshotter_Private.h; sourceTree = ""; }; - CF75A91422D85E860058A5C4 /* MGLLoggingConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLoggingConfiguration.mm; sourceTree = ""; }; - CFF9F98423A24BF400B0DE92 /* MGLNetworkIntegrationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MGLNetworkIntegrationManager.h; path = ../../darwin/src/MGLNetworkIntegrationManager.h; sourceTree = ""; }; - CFF9F98523A24BF400B0DE92 /* MGLNetworkIntegrationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLNetworkIntegrationManager.m; path = ../../darwin/src/MGLNetworkIntegrationManager.m; sourceTree = ""; }; - DA00FC8C1D5EEB0D009AABC8 /* MGLAttributionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAttributionInfo.h; sourceTree = ""; }; - DA00FC8D1D5EEB0D009AABC8 /* MGLAttributionInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLAttributionInfo.mm; sourceTree = ""; }; - DA0CD58F1CF56F6A00A5F5A5 /* MGLFeatureTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLFeatureTests.mm; path = ../../darwin/test/MGLFeatureTests.mm; sourceTree = ""; }; - DA17BE2F1CC4BAC300402C41 /* MGLMapView_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapView_Private.h; sourceTree = ""; }; - DA1AC01B1E5B8774006DF1D6 /* lt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Localizable.strings; sourceTree = ""; }; - DA1AC0201E5B8917006DF1D6 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = uk; path = uk.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA1DC94A1CB6C1C2006E619F /* Mapbox GL.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Mapbox GL.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - DA1DC9501CB6C1C2006E619F /* MBXAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBXAppDelegate.h; sourceTree = ""; }; - DA1DC9531CB6C1C2006E619F /* MBXViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBXViewController.h; sourceTree = ""; }; - DA1DC95E1CB6C1C2006E619F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DA1DC9661CB6C6B7006E619F /* MBXCustomCalloutView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBXCustomCalloutView.h; sourceTree = ""; }; - DA1DC9671CB6C6B7006E619F /* MBXCustomCalloutView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBXCustomCalloutView.m; sourceTree = ""; }; - DA1DC9681CB6C6B7006E619F /* MBXOfflinePacksTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBXOfflinePacksTableViewController.h; sourceTree = ""; }; - DA1DC9691CB6C6B7006E619F /* MBXOfflinePacksTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBXOfflinePacksTableViewController.m; sourceTree = ""; }; - DA1DC96C1CB6C6CE006E619F /* points.geojson */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = points.geojson; sourceTree = ""; }; - DA1DC96D1CB6C6CE006E619F /* polyline.geojson */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = polyline.geojson; sourceTree = ""; }; - DA1DC96F1CB6C6CE006E619F /* threestates.geojson */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = threestates.geojson; sourceTree = ""; }; - DA1DC9961CB6E046006E619F /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - DA1DC9981CB6E054006E619F /* MBXAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBXAppDelegate.m; sourceTree = ""; }; - DA1DC99A1CB6E064006E619F /* MBXViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBXViewController.m; sourceTree = ""; }; - DA1DC99E1CB6E088006E619F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - DA1F8F3C1EBD287B00367E42 /* MGLDocumentationGuideTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MGLDocumentationGuideTests.swift; path = ../../darwin/test/MGLDocumentationGuideTests.swift; sourceTree = ""; }; - DA2784FB1DF02FF4001D5B8D /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Media.xcassets; path = ../../darwin/test/Media.xcassets; sourceTree = ""; }; - DA27C24D1CBB3811000B0ECD /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; }; - DA2DBBCC1D51E80400D38FF9 /* MGLStyleLayerTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MGLStyleLayerTests.h; path = ../../darwin/test/MGLStyleLayerTests.h; sourceTree = ""; }; - DA2DBBCD1D51E80400D38FF9 /* MGLStyleLayerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLStyleLayerTests.m; path = ../../darwin/test/MGLStyleLayerTests.m; sourceTree = ""; }; - DA2E88511CC036F400F24E7B /* test.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = test.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - DA2E88551CC036F400F24E7B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DA2E885C1CC0382C00F24E7B /* MGLGeometryTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLGeometryTests.mm; path = ../../darwin/test/MGLGeometryTests.mm; sourceTree = ""; }; - DA2E885D1CC0382C00F24E7B /* MGLOfflinePackTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLOfflinePackTests.mm; path = ../../darwin/test/MGLOfflinePackTests.mm; sourceTree = ""; }; - DA2E885E1CC0382C00F24E7B /* MGLOfflineRegionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLOfflineRegionTests.m; path = ../../darwin/test/MGLOfflineRegionTests.m; sourceTree = ""; }; - DA2E88601CC0382C00F24E7B /* MGLStyleTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLStyleTests.mm; path = ../../darwin/test/MGLStyleTests.mm; sourceTree = ""; }; - DA33895F1FA3EAB7001EA329 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Foundation.strings"; sourceTree = ""; }; - DA3389651FA3EE1B001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; - DA3389661FA3EE28001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Foundation.strings; sourceTree = ""; }; - DA3389671FA3EE2F001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = bg; path = bg.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA3389681FA3EE48001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; - DA3389691FA3EE50001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = bg; path = bg.lproj/Localizable.stringsdict; sourceTree = ""; }; - DA33896B1FA3EF4A001EA329 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = hu; path = hu.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA35A29D1CC9E94C00E826B2 /* MGLCoordinateFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCoordinateFormatter.h; sourceTree = ""; }; - DA35A2A01CC9E95F00E826B2 /* MGLCoordinateFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLCoordinateFormatter.m; sourceTree = ""; }; - DA35A2A91CCA058D00E826B2 /* MGLCoordinateFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLCoordinateFormatterTests.m; path = ../../darwin/test/MGLCoordinateFormatterTests.m; sourceTree = ""; }; - DA35A2AF1CCA141D00E826B2 /* MGLCompassDirectionFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCompassDirectionFormatter.h; sourceTree = ""; }; - DA35A2B01CCA141D00E826B2 /* MGLCompassDirectionFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLCompassDirectionFormatter.m; sourceTree = ""; }; - DA35A2B71CCA9A5D00E826B2 /* MGLClockDirectionFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLClockDirectionFormatter.m; sourceTree = ""; }; - DA35A2BA1CCA9A6900E826B2 /* MGLClockDirectionFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLClockDirectionFormatter.h; sourceTree = ""; }; - DA35A2C31CCA9F8300E826B2 /* MGLClockDirectionFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLClockDirectionFormatterTests.m; path = ../../darwin/test/MGLClockDirectionFormatterTests.m; sourceTree = ""; }; - DA35A2C41CCA9F8300E826B2 /* MGLCompassDirectionFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLCompassDirectionFormatterTests.m; path = ../../darwin/test/MGLCompassDirectionFormatterTests.m; sourceTree = ""; }; - DA35A2C71CCAAAD200E826B2 /* NSValue+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSValue+MGLAdditions.h"; sourceTree = ""; }; - DA35A2C81CCAAAD200E826B2 /* NSValue+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSValue+MGLAdditions.m"; sourceTree = ""; }; - DA35A2D11CCAB25200E826B2 /* jazzy.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = jazzy.yml; sourceTree = ""; }; - DA35D0871E1A6309007DED41 /* one-liner.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "one-liner.json"; path = "../../darwin/test/one-liner.json"; sourceTree = ""; }; - DA3C6FF21E2859E700F962BE /* test-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "test-Bridging-Header.h"; path = "../../darwin/test/test-Bridging-Header.h"; sourceTree = ""; }; - DA4A26961CB6E795000B7809 /* Mapbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Mapbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DA57D4AA1EBA8ED300793288 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = es; path = es.lproj/Localizable.stringsdict; sourceTree = ""; }; - DA57D4AB1EBA909900793288 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = lt; path = lt.lproj/Localizable.stringsdict; sourceTree = ""; }; - DA57D4AC1EBA922A00793288 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = vi; path = vi.lproj/Localizable.stringsdict; sourceTree = ""; }; - DA5C09BA1EFC48550056B178 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = ""; }; - DA5C09BB1EFC486C0056B178 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = ""; }; - DA5DB1291FABF1EE001C2326 /* MGLMapAccessibilityElementTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MGLMapAccessibilityElementTests.m; sourceTree = ""; }; - DA6023F11E4CE94300DBFF23 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Foundation.strings; sourceTree = ""; }; - DA6023F21E4CE94800DBFF23 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = sv; path = sv.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA618B111E68823600CB7F44 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Localizable.stringsdict; sourceTree = ""; }; - DA618B191E68883700CB7F44 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ca; path = ca.lproj/Localizable.stringsdict; sourceTree = ""; }; - DA618B1A1E68883900CB7F44 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; - DA618B1B1E68884E00CB7F44 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; - DA618B1C1E6888EC00CB7F44 /* ca */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Foundation.strings; sourceTree = ""; }; - DA618B1D1E6888F500CB7F44 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ca; path = ca.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA618B251E68920500CB7F44 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Foundation.strings; sourceTree = ""; }; - DA618B261E68920D00CB7F44 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = lt; path = lt.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA618B2B1E68932D00CB7F44 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - DA6408D91DA4E7D300908C90 /* MGLVectorStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLVectorStyleLayer.h; sourceTree = ""; }; - DA6408DA1DA4E7D300908C90 /* MGLVectorStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLVectorStyleLayer.mm; sourceTree = ""; }; - DA695425215B1E75002041A4 /* MGLMapCameraTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLMapCameraTests.m; path = ../../darwin/test/MGLMapCameraTests.m; sourceTree = ""; }; - DA704CBB1F637311004B3F28 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Foundation.strings; sourceTree = ""; }; - DA704CBC1F637405004B3F28 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = uk; path = uk.lproj/Localizable.stringsdict; sourceTree = ""; }; - DA704CBD1F63746E004B3F28 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.stringsdict"; sourceTree = ""; }; - DA704CC01F65A475004B3F28 /* MGLMapAccessibilityElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapAccessibilityElement.h; sourceTree = ""; }; - DA704CC11F65A475004B3F28 /* MGLMapAccessibilityElement.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapAccessibilityElement.mm; sourceTree = ""; }; - DA704CC71F6663A3004B3F28 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Foundation.strings; sourceTree = ""; }; - DA7262091DEEE3480043BB89 /* MGLOpenGLStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOpenGLStyleLayer.h; sourceTree = ""; }; - DA72620A1DEEE3480043BB89 /* MGLOpenGLStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLOpenGLStyleLayer.mm; sourceTree = ""; }; - DA737ADA1E59139D00AD2CDE /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = es; path = es.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA737ADB1E5913BA00AD2CDE /* es */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - DA737AE01E59150A00AD2CDE /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = pl; path = pl.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA737AE51E5916D400AD2CDE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA737AE71E59172C00AD2CDE /* ru */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - DA737AE91E5917C300AD2CDE /* uk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = ""; }; - DA737EE01D056A4E005BDA16 /* MGLMapViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapViewDelegate.h; sourceTree = ""; }; - DA80E9601FE84AD90065FC9B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; - DA80E9611FE84AEF0065FC9B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ar; path = ar.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA821D041CCC6D59007508D4 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; - DA821D051CCC6D59007508D4 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; - DA8847D21CBAF91600AB86E3 /* Mapbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Mapbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DA8847D61CBAF91600AB86E3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DA8847DF1CBAFA5100AB86E3 /* MGLAccountManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAccountManager.h; sourceTree = ""; }; - DA8847E01CBAFA5100AB86E3 /* MGLAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotation.h; sourceTree = ""; }; - DA8847E11CBAFA5100AB86E3 /* MGLGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLGeometry.h; sourceTree = ""; }; - DA8847E21CBAFA5100AB86E3 /* MGLMapCamera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapCamera.h; sourceTree = ""; }; - DA8847E31CBAFA5100AB86E3 /* MGLMultiPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMultiPoint.h; sourceTree = ""; }; - DA8847E41CBAFA5100AB86E3 /* MGLOfflinePack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflinePack.h; sourceTree = ""; }; - DA8847E51CBAFA5100AB86E3 /* MGLOfflineRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflineRegion.h; sourceTree = ""; }; - DA8847E61CBAFA5100AB86E3 /* MGLOfflineStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflineStorage.h; sourceTree = ""; }; - DA8847E71CBAFA5100AB86E3 /* MGLOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOverlay.h; sourceTree = ""; }; - DA8847E81CBAFA5100AB86E3 /* MGLPointAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPointAnnotation.h; sourceTree = ""; }; - DA8847E91CBAFA5100AB86E3 /* MGLPolygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPolygon.h; sourceTree = ""; }; - DA8847EA1CBAFA5100AB86E3 /* MGLPolyline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPolyline.h; sourceTree = ""; }; - DA8847EB1CBAFA5100AB86E3 /* MGLShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShape.h; sourceTree = ""; }; - DA8847EC1CBAFA5100AB86E3 /* MGLStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyle.h; sourceTree = ""; }; - DA8847ED1CBAFA5100AB86E3 /* MGLTilePyramidOfflineRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTilePyramidOfflineRegion.h; sourceTree = ""; }; - DA8847EE1CBAFA5100AB86E3 /* MGLTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTypes.h; sourceTree = ""; }; - DA8847FF1CBAFA6200AB86E3 /* MGLAccountManager_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAccountManager_Private.h; sourceTree = ""; }; - DA8848001CBAFA6200AB86E3 /* MGLAccountManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAccountManager.m; sourceTree = ""; }; - DA8848011CBAFA6200AB86E3 /* MGLGeometry_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLGeometry_Private.h; sourceTree = ""; }; - DA8848021CBAFA6200AB86E3 /* MGLGeometry.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLGeometry.mm; sourceTree = ""; }; - DA8848031CBAFA6200AB86E3 /* MGLMapCamera.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapCamera.mm; sourceTree = ""; }; - DA8848041CBAFA6200AB86E3 /* MGLMultiPoint_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMultiPoint_Private.h; sourceTree = ""; }; - DA8848051CBAFA6200AB86E3 /* MGLMultiPoint.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMultiPoint.mm; sourceTree = ""; }; - DA8848061CBAFA6200AB86E3 /* MGLOfflinePack_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflinePack_Private.h; sourceTree = ""; }; - DA8848071CBAFA6200AB86E3 /* MGLOfflinePack.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLOfflinePack.mm; sourceTree = ""; }; - DA8848081CBAFA6200AB86E3 /* MGLOfflineRegion_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflineRegion_Private.h; sourceTree = ""; }; - DA8848091CBAFA6200AB86E3 /* MGLOfflineStorage_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflineStorage_Private.h; sourceTree = ""; }; - DA88480A1CBAFA6200AB86E3 /* MGLOfflineStorage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLOfflineStorage.mm; sourceTree = ""; }; - DA88480B1CBAFA6200AB86E3 /* MGLPointAnnotation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLPointAnnotation.mm; sourceTree = ""; }; - DA88480C1CBAFA6200AB86E3 /* MGLPolygon.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLPolygon.mm; sourceTree = ""; }; - DA88480D1CBAFA6200AB86E3 /* MGLPolyline.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLPolyline.mm; sourceTree = ""; }; - DA88480E1CBAFA6200AB86E3 /* MGLShape.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShape.mm; sourceTree = ""; }; - DA88480F1CBAFA6200AB86E3 /* MGLStyle.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLStyle.mm; sourceTree = ""; }; - DA8848101CBAFA6200AB86E3 /* MGLTilePyramidOfflineRegion.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLTilePyramidOfflineRegion.mm; sourceTree = ""; }; - DA8848111CBAFA6200AB86E3 /* MGLTypes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLTypes.m; sourceTree = ""; }; - DA8848121CBAFA6200AB86E3 /* NSBundle+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+MGLAdditions.h"; sourceTree = ""; }; - DA8848131CBAFA6200AB86E3 /* NSBundle+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+MGLAdditions.m"; sourceTree = ""; }; - DA8848141CBAFA6200AB86E3 /* NSException+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSException+MGLAdditions.h"; sourceTree = ""; }; - DA8848171CBAFA6200AB86E3 /* NSString+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MGLAdditions.h"; sourceTree = ""; }; - DA8848181CBAFA6200AB86E3 /* NSString+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MGLAdditions.m"; sourceTree = ""; }; - DA8848341CBAFB8500AB86E3 /* MGLAnnotationImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationImage.h; sourceTree = ""; }; - DA8848351CBAFB8500AB86E3 /* MGLCalloutView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCalloutView.h; sourceTree = ""; }; - DA8848361CBAFB8500AB86E3 /* MGLMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapView.h; sourceTree = ""; }; - DA8848371CBAFB8500AB86E3 /* MGLMapView+IBAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MGLMapView+IBAdditions.h"; sourceTree = ""; }; - DA8848391CBAFB8500AB86E3 /* MGLUserLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLUserLocation.h; sourceTree = ""; }; - DA8848401CBAFB9800AB86E3 /* MGLAnnotationImage_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationImage_Private.h; sourceTree = ""; }; - DA8848411CBAFB9800AB86E3 /* MGLAnnotationImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAnnotationImage.m; sourceTree = ""; }; - DA8848441CBAFB9800AB86E3 /* MGLCompactCalloutView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCompactCalloutView.h; sourceTree = ""; }; - DA8848451CBAFB9800AB86E3 /* MGLCompactCalloutView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLCompactCalloutView.m; sourceTree = ""; }; - DA88484A1CBAFB9800AB86E3 /* MGLMapView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapView.mm; sourceTree = ""; }; - DA88484B1CBAFB9800AB86E3 /* MGLUserLocation_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLUserLocation_Private.h; sourceTree = ""; }; - DA88484C1CBAFB9800AB86E3 /* MGLUserLocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLUserLocation.m; sourceTree = ""; }; - DA88484D1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFaux3DUserLocationAnnotationView.h; sourceTree = ""; }; - DA88484E1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLFaux3DUserLocationAnnotationView.m; sourceTree = ""; }; - DA88485E1CBAFC2E00AB86E3 /* Mapbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Mapbox.h; path = src/Mapbox.h; sourceTree = SOURCE_ROOT; }; - DA8848891CBB037E00AB86E3 /* SMCalloutView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SMCalloutView.h; sourceTree = ""; }; - DA88488A1CBB037E00AB86E3 /* SMCalloutView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SMCalloutView.m; sourceTree = ""; }; - DA8933A01CCC951200E68420 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; - DA8933BB1CCD2CA100E68420 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Foundation.strings; sourceTree = ""; }; - DA8933BE1CCD2CAD00E68420 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA8933D51CCD306400E68420 /* Mapbox.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Mapbox.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - DA8933EF1CCD387900E68420 /* strip-frameworks.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "strip-frameworks.sh"; path = "framework/strip-frameworks.sh"; sourceTree = SOURCE_ROOT; }; - DA8933F11CCD3FD700E68420 /* Info-static.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-static.plist"; sourceTree = ""; }; - DA8963331CC549A100684375 /* glyphs */ = {isa = PBXFileReference; lastKnownFileType = folder; path = glyphs; sourceTree = ""; }; - DA8963341CC549A100684375 /* sprites */ = {isa = PBXFileReference; lastKnownFileType = folder; path = sprites; sourceTree = ""; }; - DA8963351CC549A100684375 /* styles */ = {isa = PBXFileReference; lastKnownFileType = folder; path = styles; sourceTree = ""; }; - DA8963361CC549A100684375 /* tiles */ = {isa = PBXFileReference; lastKnownFileType = folder; path = tiles; sourceTree = ""; }; - DA8F25B91D51D2570010E6B5 /* MGLStyleLayerTests.mm.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; name = MGLStyleLayerTests.mm.ejs; path = ../test/MGLStyleLayerTests.mm.ejs; sourceTree = ""; }; - DA8F25BA1D51D2570010E6B5 /* MGLStyleLayer.h.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; path = MGLStyleLayer.h.ejs; sourceTree = ""; }; - DA8F25BB1D51D2570010E6B5 /* MGLStyleLayer.mm.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; path = MGLStyleLayer.mm.ejs; sourceTree = ""; }; - DA93409B208562EB0059919A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; - DA93409C2085630C0059919A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-PT"; path = "pt-PT.lproj/Foundation.stringsdict"; sourceTree = ""; }; - DA93409D208563220059919A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; - DA93409E208563360059919A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-PT"; path = "pt-PT.lproj/Localizable.stringsdict"; sourceTree = ""; }; - DA9C012B1E4C7AD900C4742A /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-BR"; path = "pt-BR.lproj/Localizable.stringsdict"; sourceTree = ""; }; - DA9C012C1E4C7ADB00C4742A /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-BR"; path = "pt-BR.lproj/Foundation.stringsdict"; sourceTree = ""; }; - DA9C012D1E4C7B1F00C4742A /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - DAA32CA11E4C44DB006F8D24 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = de; path = de.lproj/Foundation.stringsdict; sourceTree = ""; }; - DAA32CA21E4C44DD006F8D24 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = de; path = de.lproj/Localizable.stringsdict; sourceTree = ""; }; - DAA32CA31E4C44F1006F8D24 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Foundation.strings; sourceTree = ""; }; - DAA32CA41E4C4502006F8D24 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - DAA32CA91E4C4919006F8D24 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = fr; path = fr.lproj/Localizable.stringsdict; sourceTree = ""; }; - DAA32CAB1E4C491A006F8D24 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = fr; path = fr.lproj/Foundation.stringsdict; sourceTree = ""; }; - DAA32CAC1E4C4971006F8D24 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - DAA32CB51E4C4CF4006F8D24 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Foundation.strings; sourceTree = ""; }; - DAA32CB71E4C4ED8006F8D24 /* sv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - DAA32CBC1E4C4F5D006F8D24 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - DAA32CBD1E4C4F62006F8D24 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Foundation.strings; sourceTree = ""; }; - DAA4E4021CBB5C2F00178DFB /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - DAA4E4041CBB5C9E00178DFB /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; - DAA4E4061CBB5CBF00178DFB /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; - DAA4E4131CBB71D400178DFB /* libMapbox.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMapbox.a; sourceTree = BUILT_PRODUCTS_DIR; }; - DAABF73B1CBC59BB005B1825 /* libmbgl-core.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libmbgl-core.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - DAAE9B1C213A636B00F7D722 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ar; path = ar.lproj/Localizable.stringsdict; sourceTree = ""; }; - DAAF72291DA903C700312FA4 /* MGLStyleValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleValue.h; sourceTree = ""; }; - DAAF722A1DA903C700312FA4 /* MGLStyleValue_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleValue_Private.h; sourceTree = ""; }; - DABCABA81CB80692000A7C39 /* Bench GL.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Bench GL.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - DABCABAB1CB80692000A7C39 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - DABCABAD1CB80692000A7C39 /* MBXBenchAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBXBenchAppDelegate.h; sourceTree = ""; }; - DABCABAE1CB80692000A7C39 /* MBXBenchAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBXBenchAppDelegate.m; sourceTree = ""; }; - DABCABB01CB80692000A7C39 /* MBXBenchViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBXBenchViewController.h; sourceTree = ""; }; - DABCABB11CB80692000A7C39 /* MBXBenchViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MBXBenchViewController.mm; sourceTree = ""; }; - DABCABB61CB80692000A7C39 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - DABCABB91CB80692000A7C39 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - DABCABBB1CB80692000A7C39 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DABCABBF1CB80717000A7C39 /* locations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = locations.cpp; sourceTree = ""; }; - DABCABC01CB80717000A7C39 /* locations.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = locations.hpp; sourceTree = ""; }; - DAC25FCB200FD83E009BE98E /* NSExpression+MGLPrivateAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSExpression+MGLPrivateAdditions.h"; sourceTree = ""; }; - DAC49C621CD07D74009E1AA3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; }; - DACA86242019218500E9693A /* MGLRasterDEMSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterDEMSource.h; sourceTree = ""; }; - DACA86252019218500E9693A /* MGLRasterDEMSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRasterDEMSource.mm; sourceTree = ""; }; - DACBC60B20118ABE00C4D7E2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - DACBC60C20118AD000C4D7E2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Foundation.strings; sourceTree = ""; }; - DACBC60D20118ADE00C4D7E2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - DACFE7981F66EA2100630DA8 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = vi; path = vi.lproj/Foundation.stringsdict; sourceTree = ""; }; - DAD165691CF41981001FF4B9 /* MGLFeature.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFeature.h; sourceTree = ""; }; - DAD1656A1CF41981001FF4B9 /* MGLFeature_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFeature_Private.h; sourceTree = ""; }; - DAD1656B1CF41981001FF4B9 /* MGLFeature.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFeature.mm; sourceTree = ""; }; - DAD165761CF4CDFF001FF4B9 /* MGLShapeCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeCollection.h; sourceTree = ""; }; - DAD165771CF4CDFF001FF4B9 /* MGLShapeCollection.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShapeCollection.mm; sourceTree = ""; }; - DAD88E07202ACFE800AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - DAD88E08202AD01300AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Foundation.strings; sourceTree = ""; }; - DAD88E09202AD01F00AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = da; path = da.lproj/Foundation.stringsdict; sourceTree = ""; }; - DAD88E0A202AD03C00AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - DAD88E0B202AD04D00AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = da; path = da.lproj/Localizable.stringsdict; sourceTree = ""; }; - DAE7DEC11E245455007505A6 /* MGLNSStringAdditionsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLNSStringAdditionsTests.m; path = ../../darwin/test/MGLNSStringAdditionsTests.m; sourceTree = ""; }; - DAE8CCAD1E6E8C70009B5CB0 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - DAE9E0F11EB7BF1B001E8E8B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Foundation.strings; sourceTree = ""; }; - DAE9ED572238990A00C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Localizable.strings; sourceTree = ""; }; - DAE9ED582238992900C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Foundation.strings; sourceTree = ""; }; - DAE9ED592238992E00C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = gl; path = gl.lproj/Foundation.stringsdict; sourceTree = ""; }; - DAE9ED5A2238993A00C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Localizable.strings; sourceTree = ""; }; - DAE9ED5B2238995A00C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = gl; path = gl.lproj/Localizable.stringsdict; sourceTree = ""; }; - DAED38611D62D0FC00D7640F /* NSURL+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURL+MGLAdditions.h"; sourceTree = ""; }; - DAED38621D62D0FC00D7640F /* NSURL+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURL+MGLAdditions.m"; sourceTree = ""; }; - DAEDC4331D603417000224FF /* MGLAttributionInfoTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLAttributionInfoTests.m; path = ../../darwin/test/MGLAttributionInfoTests.m; sourceTree = ""; }; - DAF0D80F1DFE0EA000B28378 /* MGLRasterTileSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterTileSource_Private.h; sourceTree = ""; }; - DAF0D8121DFE0EC500B28378 /* MGLVectorTileSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLVectorTileSource_Private.h; sourceTree = ""; }; - DAF0D8171DFE6B2800B28378 /* MGLAttributionInfo_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAttributionInfo_Private.h; sourceTree = ""; }; - DAF25717201901E100367EF5 /* MGLHillshadeStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHillshadeStyleLayer.mm; sourceTree = ""; }; - DAF25718201901E200367EF5 /* MGLHillshadeStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLHillshadeStyleLayer.h; sourceTree = ""; }; - DAF2571F201902BB00367EF5 /* MGLHillshadeStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLHillshadeStyleLayerTests.mm; path = ../../darwin/test/MGLHillshadeStyleLayerTests.mm; sourceTree = ""; }; - DAFBD0D21E3FA7A1000CD6BF /* zh-Hant */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Foundation.strings"; sourceTree = ""; }; - DAFBD0D31E3FA7A1000CD6BF /* zh-Hant */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; - DAFEB3742093AE3700A86A83 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; - DAFEB3752093AE4800A86A83 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Foundation.strings; sourceTree = ""; }; - DAFEB3762093AE6800A86A83 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ko; path = ko.lproj/Foundation.stringsdict; sourceTree = ""; }; - DAFEB3772093AE7900A86A83 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; - DAFEB3782093AE9200A86A83 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ko; path = ko.lproj/Localizable.stringsdict; sourceTree = ""; }; - DD0902A21DB18DE700C5BDCE /* MGLNetworkConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLNetworkConfiguration.m; sourceTree = ""; }; - DD0902A41DB18F1B00C5BDCE /* MGLNetworkConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLNetworkConfiguration.h; sourceTree = ""; }; - DD4823721D94AE6C00EB71B7 /* fill_filter_style.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = fill_filter_style.json; sourceTree = ""; }; - DD4823731D94AE6C00EB71B7 /* line_filter_style.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = line_filter_style.json; sourceTree = ""; }; - DD4823741D94AE6C00EB71B7 /* numeric_filter_style.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = numeric_filter_style.json; sourceTree = ""; }; - DD58A4C51D822BD000E1F038 /* MGLExpressionTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLExpressionTests.mm; path = ../../darwin/test/MGLExpressionTests.mm; sourceTree = ""; }; - DD9BE4F51EB263C50079A3AF /* UIViewController+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+MGLAdditions.h"; sourceTree = ""; }; - DD9BE4F61EB263C50079A3AF /* UIViewController+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+MGLAdditions.m"; sourceTree = ""; }; - FA68F1481E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillExtrusionStyleLayer.h; sourceTree = ""; }; - FA68F1491E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFillExtrusionStyleLayer.mm; sourceTree = ""; }; - FAE1CDC81E9D79C600C40B5B /* MGLFillExtrusionStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLFillExtrusionStyleLayerTests.mm; path = ../../darwin/test/MGLFillExtrusionStyleLayerTests.mm; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 16376B041FFD9DAF0000563E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - CABE5DAD2072FAB40003AF3C /* Mapbox.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 16376B2C1FFDB4B40000563E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - CAA69DA4206DCD0E007279CD /* Mapbox.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA1DC9471CB6C1C2006E619F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DA8847D91CBAF91600AB86E3 /* Mapbox.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA2E884E1CC036F400F24E7B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DAAE5F8820F046FE0089D85B /* libmbgl-core.a in Frameworks */, - DA2E88561CC036F400F24E7B /* Mapbox.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA8847CE1CBAF91600AB86E3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 96802766226556C5006BA4A1 /* libmbxaccounts.a in Frameworks */, - DAABF73D1CBC59BB005B1825 /* libmbgl-core.a in Frameworks */, - 55D120A61F791007004B6D81 /* libmbgl-loop-darwin.a in Frameworks */, - 55D120A81F79100C004B6D81 /* libmbgl-filesource.a in Frameworks */, - 55CF752F213ED92000ED86C4 /* libmbgl-vendor-icu.a in Frameworks */, - DA27C24E1CBB3811000B0ECD /* GLKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAA4E4101CBB71D400178DFB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DAAE5F8720F046E60089D85B /* libmbgl-core.a in Frameworks */, - 9680276422655696006BA4A1 /* libmbxaccounts.a in Frameworks */, - DAAE5F8920F047240089D85B /* libmbgl-filesource.a in Frameworks */, - DAAE5F8A20F0472E0089D85B /* libmbgl-loop-darwin.a in Frameworks */, - 55CF7531213ED92A00ED86C4 /* libmbgl-vendor-icu.a in Frameworks */, - 550570D22296E96E00228ECF /* GLKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DABCABA51CB80692000A7C39 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DAA4E4081CBB6C9500178DFB /* Mapbox.framework in Frameworks */, - 3E8770612074297100B7E842 /* OpenGLES.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 16376B081FFD9DAF0000563E /* Integration Tests */ = { - isa = PBXGroup; - children = ( - CA4F3BE023107793008BAFEA /* Camera Tests */, - CA6914B320E67F07002DB0EE /* Annotations */, - CAE7AD5320F46EF5003B6782 /* integration-Bridging-Header.h */, - CA1B4A4F2099FA2800EDD491 /* Snapshotter Tests */, - 16376B091FFD9DAF0000563E /* MBGLIntegrationTests.mm */, - 16376B0B1FFD9DAF0000563E /* Info.plist */, - CA0C27912076C804001CE5B7 /* MGLShapeSourceTests.m */, - CA0C27932076CA19001CE5B7 /* MGLMapViewIntegrationTest.m */, - CA0C27952076CA50001CE5B7 /* MGLMapViewIntegrationTest.h */, - CA4EB8C620863487006AB465 /* MGLStyleLayerIntegrationTests.m */, - CA88DC2F21C85D900059ED5A /* MGLStyleURLIntegrationTest.m */, - 077061DB215DA11F000FEF62 /* MGLTestLocationManager.h */, - 077061D9215DA00E000FEF62 /* MGLTestLocationManager.m */, - CA4F3BDD230F74C3008BAFEA /* MGLMapViewPendingBlockTests.m */, - CA4C54FD2324948100A81659 /* MGLSourceTests.swift */, - ); - path = "Integration Tests"; - sourceTree = ""; - }; - 16376B301FFDB4B40000563E /* Integration Test Harness */ = { - isa = PBXGroup; - children = ( - 16376B311FFDB4B40000563E /* AppDelegate.h */, - 16376B321FFDB4B40000563E /* AppDelegate.m */, - 16376B3A1FFDB4B40000563E /* Assets.xcassets */, - 16376B3C1FFDB4B40000563E /* LaunchScreen.storyboard */, - 16376B3F1FFDB4B40000563E /* Info.plist */, - 16376B401FFDB4B40000563E /* main.m */, - ); - path = "Integration Test Harness"; - sourceTree = ""; - }; - 35136D491D4277EA00C20EFD /* Sources */ = { - isa = PBXGroup; - children = ( - 0778DD401F67555F00A73B34 /* MGLComputedShapeSource.h */, - 07D9474E1F67487E00E37934 /* MGLComputedShapeSource_Private.h */, - 0778DD411F67555F00A73B34 /* MGLComputedShapeSource.mm */, - 071BBAFC1EE75CD4001FB02A /* MGLImageSource.h */, - 071BBAFD1EE75CD4001FB02A /* MGLImageSource.mm */, - 3566C76A1D4A8DFA008152BC /* MGLRasterTileSource.h */, - DAF0D80F1DFE0EA000B28378 /* MGLRasterTileSource_Private.h */, - 3566C76B1D4A8DFA008152BC /* MGLRasterTileSource.mm */, - DACA86242019218500E9693A /* MGLRasterDEMSource.h */, - DACA86252019218500E9693A /* MGLRasterDEMSource.mm */, - 3566C7641D4A77BA008152BC /* MGLShapeSource.h */, - 40F8876F1D7A1DB8008ECB67 /* MGLShapeSource_Private.h */, - 3566C7651D4A77BA008152BC /* MGLShapeSource.mm */, - 35136D4A1D4277FC00C20EFD /* MGLSource.h */, - 3566C7701D4A9198008152BC /* MGLSource_Private.h */, - 35136D4B1D4277FC00C20EFD /* MGLSource.mm */, - 404C26E01D89B877000AA13D /* MGLTileSource.h */, - 404C26E61D89C515000AA13D /* MGLTileSource_Private.h */, - 404C26E11D89B877000AA13D /* MGLTileSource.mm */, - 350098B91D480108004B2AF0 /* MGLVectorTileSource.h */, - DAF0D8121DFE0EC500B28378 /* MGLVectorTileSource_Private.h */, - 350098BA1D480108004B2AF0 /* MGLVectorTileSource.mm */, - ); - name = Sources; - sourceTree = ""; - }; - 353933F01D3FB6BA003F57D7 /* Layers */ = { - isa = PBXGroup; - children = ( - 74CB5ED0219B286400102936 /* MGLSymbolStyleLayer_Private.h */, - 74CB5EC7219B285000102936 /* MGLLineStyleLayer_Private.h */, - 74CB5EC8219B285000102936 /* MGLOpenGLStyleLayer_Private.h */, - 74CB5EC9219B285000102936 /* MGLRasterStyleLayer_Private.h */, - 74CB5EC2219B282500102936 /* MGLBackgroundStyleLayer_Private.h */, - 74CB5EC1219B282500102936 /* MGLCircleStyleLayer_Private.h */, - 74CB5EB6219B280300102936 /* MGLFillExtrusionStyleLayer_Private.h */, - 74CB5EB7219B280300102936 /* MGLFillStyleLayer_Private.h */, - 74CB5EB8219B280300102936 /* MGLHeatmapStyleLayer_Private.h */, - 74CB5EB5219B280300102936 /* MGLHillshadeStyleLayer_Private.h */, - 74CB5EAF219B252C00102936 /* MGLStyleLayerManager.h */, - 74CB5EB0219B252C00102936 /* MGLStyleLayerManager.mm */, - 353933F41D3FB785003F57D7 /* MGLBackgroundStyleLayer.h */, - 35136D381D42271A00C20EFD /* MGLBackgroundStyleLayer.mm */, - 353933F11D3FB753003F57D7 /* MGLCircleStyleLayer.h */, - 35136D3B1D42272500C20EFD /* MGLCircleStyleLayer.mm */, - FA68F1481E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.h */, - FA68F1491E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.mm */, - 35D13AC11D3D19DD00AFB4E0 /* MGLFillStyleLayer.h */, - 8989B17A201A48EA0081CF59 /* MGLHeatmapStyleLayer.h */, - 8989B17B201A48EA0081CF59 /* MGLHeatmapStyleLayer.mm */, - 35D13AC21D3D19DD00AFB4E0 /* MGLFillStyleLayer.mm */, - 3538AA1B1D542239008EC33D /* MGLForegroundStyleLayer.h */, - 3538AA1C1D542239008EC33D /* MGLForegroundStyleLayer.mm */, - DAF25718201901E200367EF5 /* MGLHillshadeStyleLayer.h */, - DAF25717201901E100367EF5 /* MGLHillshadeStyleLayer.mm */, - 353933F71D3FB79F003F57D7 /* MGLLineStyleLayer.h */, - 35136D3E1D42273000C20EFD /* MGLLineStyleLayer.mm */, - DA7262091DEEE3480043BB89 /* MGLOpenGLStyleLayer.h */, - DA72620A1DEEE3480043BB89 /* MGLOpenGLStyleLayer.mm */, - 353933FA1D3FB7C0003F57D7 /* MGLRasterStyleLayer.h */, - 35136D411D42274500C20EFD /* MGLRasterStyleLayer.mm */, - 35E79F1F1D41266300957B9E /* MGLStyleLayer_Private.h */, - 35D13AB51D3D15E300AFB4E0 /* MGLStyleLayer.h */, - 35D13AB61D3D15E300AFB4E0 /* MGLStyleLayer.mm */, - 353933FD1D3FB7DD003F57D7 /* MGLSymbolStyleLayer.h */, - 35136D441D42275100C20EFD /* MGLSymbolStyleLayer.mm */, - DA6408D91DA4E7D300908C90 /* MGLVectorStyleLayer.h */, - DA6408DA1DA4E7D300908C90 /* MGLVectorStyleLayer.mm */, - ); - name = Layers; - sourceTree = ""; - }; - 35599DA21D4682B60048254D /* Styling */ = { - isa = PBXGroup; - children = ( - 1753ED411E53CE6F00A9FD90 /* MGLConversion.h */, - 35599DB81D46AD7F0048254D /* Categories */, - 353933F01D3FB6BA003F57D7 /* Layers */, - 35136D491D4277EA00C20EFD /* Sources */, - 1F0666881EC64F8E001C16D7 /* MGLLight.h */, - 1F0666891EC64F8E001C16D7 /* MGLLight.mm */, - 1F7454941ECD450D00021D39 /* MGLLight_Private.h */, - DAAF72291DA903C700312FA4 /* MGLStyleValue.h */, - DAAF722A1DA903C700312FA4 /* MGLStyleValue_Private.h */, - 35599DEA1D46F14E0048254D /* MGLStyleValue.mm */, - ); - name = Styling; - sourceTree = ""; - }; - 35599DB81D46AD7F0048254D /* Categories */ = { - isa = PBXGroup; - children = ( - 350098DA1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.h */, - 350098DB1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.mm */, - ); - name = Categories; - sourceTree = ""; - }; - 355ADFF91E9281C300F3939D /* Views */ = { - isa = PBXGroup; - children = ( - 96E6145722CC169000109F14 /* MGLCompassButton.h */, - 9641771E22D546DA00332422 /* MGLCompassButton_Private.h */, - 96E6145822CC169000109F14 /* MGLCompassButton.mm */, - 355ADFFB1E9281DA00F3939D /* MGLScaleBar.h */, - 355ADFFC1E9281DA00F3939D /* MGLScaleBar.mm */, - ); - name = Views; - sourceTree = ""; - }; - 357579811D502AD4000B822E /* Styling */ = { - isa = PBXGroup; - children = ( - 3575798F1D513EF1000B822E /* Layers */, - 40CFA64E1D78754A008103BD /* Sources */, - 1F7454A61ED08AB400021D39 /* MGLLightTest.mm */, - ); - name = Styling; - sourceTree = ""; - }; - 3575798F1D513EF1000B822E /* Layers */ = { - isa = PBXGroup; - children = ( - 170C43782028D49800863DF0 /* MGLHeatmapColorTests.mm */, - 170C43792028D49800863DF0 /* MGLHeatmapStyleLayerTests.mm */, - DA2DBBCC1D51E80400D38FF9 /* MGLStyleLayerTests.h */, - DA2DBBCD1D51E80400D38FF9 /* MGLStyleLayerTests.m */, - DA3C6FF21E2859E700F962BE /* test-Bridging-Header.h */, - FAE1CDC81E9D79C600C40B5B /* MGLFillExtrusionStyleLayerTests.mm */, - 3575797F1D501E09000B822E /* MGLFillStyleLayerTests.mm */, - DAF2571F201902BB00367EF5 /* MGLHillshadeStyleLayerTests.mm */, - 357579821D502AE6000B822E /* MGLRasterStyleLayerTests.mm */, - 357579841D502AF5000B822E /* MGLSymbolStyleLayerTests.mm */, - 357579861D502AFE000B822E /* MGLLineStyleLayerTests.mm */, - 357579881D502B06000B822E /* MGLCircleStyleLayerTests.mm */, - 3575798A1D502B0C000B822E /* MGLBackgroundStyleLayerTests.mm */, - ); - name = Layers; - sourceTree = ""; - }; - 35CE617F1D4165C2004F2359 /* Categories */ = { - isa = PBXGroup; - children = ( - 357FE2DB1E02D2B20068B753 /* NSCoder+MGLAdditions.h */, - 357FE2DC1E02D2B20068B753 /* NSCoder+MGLAdditions.mm */, - 960369FF200565C700510F3D /* NSOrthography+MGLAdditions.h */, - 96036A00200565C700510F3D /* NSOrthography+MGLAdditions.m */, - 35CE61801D4165D9004F2359 /* UIColor+MGLAdditions.h */, - 35CE61811D4165D9004F2359 /* UIColor+MGLAdditions.mm */, - 967C8649210A9D3C004DF794 /* UIDevice+MGLAdditions.h */, - 967C864A210A9D3C004DF794 /* UIDevice+MGLAdditions.m */, - 30E578111DAA7D690050F07E /* UIImage+MGLAdditions.h */, - 30E578121DAA7D690050F07E /* UIImage+MGLAdditions.mm */, - DD9BE4F51EB263C50079A3AF /* UIViewController+MGLAdditions.h */, - DD9BE4F61EB263C50079A3AF /* UIViewController+MGLAdditions.m */, - 6FAFA29A220023840088709E /* UIView+MGLAdditions.h */, - 6FAFA29B220023840088709E /* UIView+MGLAdditions.m */, - ); - name = Categories; - sourceTree = ""; - }; - 402E9DE21CD3A56500FD4519 /* Playground */ = { - isa = PBXGroup; - children = ( - 402E9DE01CD2C76200FD4519 /* Mapbox.playground */, - ); - name = Playground; - sourceTree = ""; - }; - 4031ACFD1E9FD26900A3EA26 /* Test Helpers */ = { - isa = PBXGroup; - children = ( - CA5E5042209BDC5F001A8A81 /* MGLTestUtility.h */, - 4031ACFE1E9FD29F00A3EA26 /* MGLSDKTestHelpers.swift */, - A4DE3DCA23038A7F005B3473 /* MGLMockGestureRecognizers.h */, - A4DE3DC823038A07005B3473 /* MGLMockGestureRecognizers.m */, - CAAA65D72321BBA900F08A39 /* MGLTestAssertionHandler.h */, - CAAA65D82321BBA900F08A39 /* MGLTestAssertionHandler.m */, - ); - name = "Test Helpers"; - sourceTree = ""; - }; - 40834BA11FE05CFD00C1BD0D /* Development */ = { - isa = PBXGroup; - children = ( - 9620BB361E69FE1700705A1D /* MGLSDKUpdateChecker.h */, - 9620BB371E69FE1700705A1D /* MGLSDKUpdateChecker.mm */, - ); - name = Development; - sourceTree = ""; - }; - 40834BA21FE05D3100C1BD0D /* Runtime */ = { - isa = PBXGroup; - children = ( - 40834BAC1FE05D6C00C1BD0D /* MapboxMobileEvents.h */, - 40834BC81FE05D7000C1BD0D /* MMENamespacedDependencies.h */, - 40834BAB1FE05D6C00C1BD0D /* MMEAPIClient.h */, - 40834BA51FE05D6B00C1BD0D /* MMEAPIClient.m */, - 40834BAE1FE05D6C00C1BD0D /* MMECommonEventData.h */, - 40834BCE1FE05D7100C1BD0D /* MMECommonEventData.m */, - 40834BB01FE05D6C00C1BD0D /* MMEConstants.h */, - 40834BC01FE05D6E00C1BD0D /* MMEConstants.m */, - 40834BB11FE05D6D00C1BD0D /* MMEDependencyManager.h */, - 40834BB41FE05D6D00C1BD0D /* MMEDependencyManager.m */, - 40834BBA1FE05D6E00C1BD0D /* MMEEvent.h */, - 40834BC71FE05D7000C1BD0D /* MMEEvent.m */, - 40834BA61FE05D6B00C1BD0D /* MMEEventLogger.h */, - 40834BB71FE05D6D00C1BD0D /* MMEEventLogger.m */, - 406E99B51FFEFED600D9FFCC /* MMEEventLogReportViewController.h */, - 406E99B11FFEFED500D9FFCC /* MMEEventLogReportViewController.m */, - 40834BBB1FE05D6E00C1BD0D /* MMEEventsConfiguration.h */, - 40834BB21FE05D6D00C1BD0D /* MMEEventsConfiguration.m */, - ACA65F4F214066E200537748 /* MMEConfigurator.h */, - ACA65F50214066E600537748 /* MMEConfigurator.m */, - 40834BA31FE05D6B00C1BD0D /* MMEEventsManager.h */, - 40834BA41FE05D6B00C1BD0D /* MMEEventsManager.m */, - 40834BB31FE05D6D00C1BD0D /* MMELocationManager.h */, - 40834BB81FE05D6D00C1BD0D /* MMELocationManager.m */, - AC46EB57225E60090039C013 /* MMECertPin.h */, - AC46EB58225E60090039C013 /* MMECertPin.m */, - AC46EB5E225E60510039C013 /* MMEPinningConfigurationProvider.h */, - AC46EB5D225E60510039C013 /* MMEPinningConfigurationProvider.m */, - ACD024552187EAAF00D8C8A7 /* MMEMetrics.h */, - ACD024572187EAAF00D8C8A7 /* MMEMetrics.m */, - ACD024562187EAAF00D8C8A7 /* MMEMetricsManager.h */, - ACD024542187EAAF00D8C8A7 /* MMEMetricsManager.m */, - 40834BC51FE05D6F00C1BD0D /* MMEDate.h */, - 40834BBC1FE05D6E00C1BD0D /* MMEDate.m */, - 40834BAA1FE05D6C00C1BD0D /* MMENSURLSessionWrapper.h */, - 40834BC61FE05D7000C1BD0D /* MMENSURLSessionWrapper.m */, - 40834BC91FE05D7000C1BD0D /* MMETimerManager.h */, - 40834BB91FE05D6E00C1BD0D /* MMETimerManager.m */, - 40834BB61FE05D6D00C1BD0D /* MMETypes.h */, - 40834BBE1FE05D6E00C1BD0D /* MMEUIApplicationWrapper.h */, - 40834BCA1FE05D7000C1BD0D /* MMEUIApplicationWrapper.m */, - 406E99B31FFEFED600D9FFCC /* MMEUINavigation.h */, - 406E99B21FFEFED500D9FFCC /* MMEUINavigation.m */, - 40834BBF1FE05D6E00C1BD0D /* MMEUniqueIdentifier.h */, - 40834BAD1FE05D6C00C1BD0D /* MMEUniqueIdentifier.m */, - ACA65F552140696B00537748 /* MMEDispatchManager.h */, - ACA65F562140697100537748 /* MMEDispatchManager.m */, - 9C6E280822A97F6B0056B7BE /* Categories */, - 40834BCB1FE05D7100C1BD0D /* Reachability */, - ); - name = Runtime; - path = "../vendor/mapbox-events-ios/MapboxMobileEvents"; - sourceTree = ""; - }; - 40834BCB1FE05D7100C1BD0D /* Reachability */ = { - isa = PBXGroup; - children = ( - 40834BCC1FE05D7100C1BD0D /* MMEReachability.h */, - 40834BCD1FE05D7100C1BD0D /* MMEReachability.m */, - ); - name = Reachability; - path = "vendor/mapbox-events-ios/MapboxMobileEvents/Reachability"; - sourceTree = SOURCE_ROOT; - }; - 409F43FB1E9E77D10048729D /* Swift Integration */ = { - isa = PBXGroup; - children = ( - 409F43FC1E9E781C0048729D /* MGLMapViewDelegateIntegrationTests.swift */, - 409D0A0C1ED614CE00C95D0C /* MGLAnnotationViewIntegrationTests.swift */, - ); - name = "Swift Integration"; - sourceTree = ""; - }; - 40CFA64E1D78754A008103BD /* Sources */ = { - isa = PBXGroup; - children = ( - 07D8C6FD1F67562800381808 /* MGLComputedShapeSourceTests.m */, - 071BBB051EE7761A001FB02A /* MGLImageSourceTests.m */, - 40CFA6501D787579008103BD /* MGLShapeSourceTests.mm */, - 920A3E5C1E6F995200C16EFC /* MGLSourceQueryTests.m */, - 4085AF081D933DEA00F11B22 /* MGLTileSetTests.mm */, - ); - name = Sources; - sourceTree = ""; - }; - 9604FC341F313A5E003EEA02 /* Fixtures */ = { - isa = PBXGroup; - children = ( - 353BAEF51D646370009A8DA9 /* amsterdam.geojson */, - DA1DC96C1CB6C6CE006E619F /* points.geojson */, - A4F3FB1C2254865900A30170 /* missing_icon.json */, - DA1DC96D1CB6C6CE006E619F /* polyline.geojson */, - 1F26B6C220E1A351007BCC21 /* simple_route.json */, - DA1DC96F1CB6C6CE006E619F /* threestates.geojson */, - DD4823721D94AE6C00EB71B7 /* fill_filter_style.json */, - DD4823731D94AE6C00EB71B7 /* line_filter_style.json */, - DD4823741D94AE6C00EB71B7 /* numeric_filter_style.json */, - ); - name = Fixtures; - sourceTree = ""; - }; - 9680276322655623006BA4A1 /* Accounts */ = { - isa = PBXGroup; - children = ( - 9680273E22653B84006BA4A1 /* MBXSKUToken.h */, - ); - name = Accounts; - sourceTree = ""; - }; - 9C6E280822A97F6B0056B7BE /* Categories */ = { - isa = PBXGroup; - children = ( - 9C6E280B22A97FDB0056B7BE /* CLLocation+MMEMobileEvents.h */, - 9C6E280E22A97FDB0056B7BE /* CLLocation+MMEMobileEvents.m */, - 9C6E281022A97FDB0056B7BE /* CLLocationManager+MMEMobileEvents.h */, - 9C6E281222A97FDB0056B7BE /* CLLocationManager+MMEMobileEvents.m */, - 9C6E281122A97FDB0056B7BE /* MMECategoryLoader.h */, - 9C6E280922A97FDB0056B7BE /* MMECategoryLoader.m */, - 9C6E280C22A97FDB0056B7BE /* NSData+MMEGZIP.h */, - 9C6E280D22A97FDB0056B7BE /* NSData+MMEGZIP.m */, - 9C6E280A22A97FDB0056B7BE /* UIKit+MMEMobileEvents.h */, - 9C6E280F22A97FDB0056B7BE /* UIKit+MMEMobileEvents.m */, - ); - path = Categories; - sourceTree = ""; - }; - 9C6E285922A9849E0056B7BE /* Scripts */ = { - isa = PBXGroup; - children = ( - 9C6E285A22A9849E0056B7BE /* install-packaging-dependencies.sh */, - 9C6E285B22A9849E0056B7BE /* ios-code-coverage.sh */, - 9C6E285C22A9849E0056B7BE /* release-notes-github.md.ejs */, - 9C6E285D22A9849E0056B7BE /* document.sh */, - 9C6E285E22A9849E0056B7BE /* check-events-symbols.sh */, - 9C6E285F22A9849E0056B7BE /* deploy-packages.sh */, - 9C6E286022A9849E0056B7BE /* publish.sh */, - 9C6E286122A9849E0056B7BE /* validate-framework-zip.sh */, - 9C6E286222A9849E0056B7BE /* metrics.sh */, - 9C6E286322A9849E0056B7BE /* package.sh */, - 9C6E286422A9849E0056B7BE /* trigger-external-deploy-steps.sh */, - 9C6E286522A9849E0056B7BE /* release-notes-jazzy.md.ejs */, - 9C6E286622A9849E0056B7BE /* deploy-snapshot.sh */, - 9C6E286722A9849E0056B7BE /* release-notes.js */, - ); - name = Scripts; - path = scripts; - sourceTree = ""; - }; - CA1B4A4F2099FA2800EDD491 /* Snapshotter Tests */ = { - isa = PBXGroup; - children = ( - CA1B4A502099FB2200EDD491 /* MGLMapSnapshotterTest.m */, - CAE7AD5420F46EF5003B6782 /* MGLMapSnapshotterSwiftTests.swift */, - ); - path = "Snapshotter Tests"; - sourceTree = ""; - }; - CA4F3BE023107793008BAFEA /* Camera Tests */ = { - isa = PBXGroup; - children = ( - CA4F3BE123107793008BAFEA /* MGLCameraTransitionTests.mm */, - CA4F3BE3231077B9008BAFEA /* MGLCameraTransitionFinishTests.mm */, - ); - path = "Camera Tests"; - sourceTree = ""; - }; - CA6914B320E67F07002DB0EE /* Annotations */ = { - isa = PBXGroup; - children = ( - CA6914B420E67F50002DB0EE /* MGLAnnotationViewIntegrationTests.mm */, - ); - name = Annotations; - sourceTree = ""; - }; - CF85C39E23A249FC00BEBFFF /* Interface */ = { - isa = PBXGroup; - children = ( - CFF9F98423A24BF400B0DE92 /* MGLNetworkIntegrationManager.h */, - CFF9F98523A24BF400B0DE92 /* MGLNetworkIntegrationManager.m */, - ); - name = Interface; - sourceTree = ""; - }; - DA1DC9411CB6C1C2006E619F = { - isa = PBXGroup; - children = ( - 402E9DE21CD3A56500FD4519 /* Playground */, - DA1DC94C1CB6C1C2006E619F /* Demo App */, - DABCABA91CB80692000A7C39 /* Benchmarking App */, - DA8847D31CBAF91600AB86E3 /* SDK */, - DA2E88521CC036F400F24E7B /* SDK Tests */, - 16376B301FFDB4B40000563E /* Integration Test Harness */, - 16376B081FFD9DAF0000563E /* Integration Tests */, - DA1DC9921CB6DF24006E619F /* Frameworks */, - DAC07C951CBB2CAD000CB309 /* Configuration */, - DA1DC94B1CB6C1C2006E619F /* Products */, - 9C6E285922A9849E0056B7BE /* Scripts */, - ); - sourceTree = ""; - }; - DA1DC94B1CB6C1C2006E619F /* Products */ = { - isa = PBXGroup; - children = ( - DA1DC94A1CB6C1C2006E619F /* Mapbox GL.app */, - DABCABA81CB80692000A7C39 /* Bench GL.app */, - DA8847D21CBAF91600AB86E3 /* Mapbox.framework */, - DAA4E4131CBB71D400178DFB /* libMapbox.a */, - DA2E88511CC036F400F24E7B /* test.xctest */, - DA8933D51CCD306400E68420 /* Mapbox.bundle */, - 16376B071FFD9DAF0000563E /* integration.xctest */, - 16376B2F1FFDB4B40000563E /* Integration Test Harness.app */, - ); - name = Products; - sourceTree = ""; - }; - DA1DC94C1CB6C1C2006E619F /* Demo App */ = { - isa = PBXGroup; - children = ( - 3E6465D52065767A00685536 /* LimeGreenStyleLayer.h */, - 3E6465D42065767A00685536 /* LimeGreenStyleLayer.m */, - DA1DC9501CB6C1C2006E619F /* MBXAppDelegate.h */, - DA1DC9981CB6E054006E619F /* MBXAppDelegate.m */, - 40FDA7691CCAAA6800442548 /* MBXAnnotationView.h */, - 40FDA76A1CCAAA6800442548 /* MBXAnnotationView.m */, - DA1DC9661CB6C6B7006E619F /* MBXCustomCalloutView.h */, - DA1DC9671CB6C6B7006E619F /* MBXCustomCalloutView.m */, - 354B839A1D2E9B48005D9406 /* MBXUserLocationAnnotationView.h */, - 354B839B1D2E9B48005D9406 /* MBXUserLocationAnnotationView.m */, - DA1DC9681CB6C6B7006E619F /* MBXOfflinePacksTableViewController.h */, - DA1DC9691CB6C6B7006E619F /* MBXOfflinePacksTableViewController.m */, - 927FBCFA1F4DAA8300F8BF1F /* MBXSnapshotsViewController.h */, - 927FBCFB1F4DAA8300F8BF1F /* MBXSnapshotsViewController.m */, - 1F26B6BF20E189C9007BCC21 /* MBXCustomLocationViewController.h */, - 1F26B6C020E189C9007BCC21 /* MBXCustomLocationViewController.m */, - DA1DC9531CB6C1C2006E619F /* MBXViewController.h */, - DA1DC99A1CB6E064006E619F /* MBXViewController.m */, - 965DF50F20F9430500438AAC /* MBXFrameTimeGraphView.h */, - 965DF51020F9430500438AAC /* MBXFrameTimeGraphView.m */, - 632281DD1E6F855900D75A5D /* MBXEmbeddedMapViewController.h */, - 632281DE1E6F855900D75A5D /* MBXEmbeddedMapViewController.m */, - 6FA9341621EF372100AA9CA8 /* MBXOrnamentsViewController.h */, - 6FA9341521EF372100AA9CA8 /* MBXOrnamentsViewController.m */, - DA821D051CCC6D59007508D4 /* Main.storyboard */, - DA821D041CCC6D59007508D4 /* LaunchScreen.storyboard */, - DA1DC99E1CB6E088006E619F /* Assets.xcassets */, - DA1DC95E1CB6C1C2006E619F /* Info.plist */, - 074A7F0C2277C093001A62D1 /* insert_access_token.sh */, - 96E027251E57C76E004B8E66 /* Localizable.strings */, - 076171C62141A91700668A35 /* Settings.bundle */, - 9604FC341F313A5E003EEA02 /* Fixtures */, - DA1DC94D1CB6C1C2006E619F /* Supporting Files */, - 075AF840227B6762008D7A4C /* MBXState.h */, - 075AF841227B6762008D7A4C /* MBXState.m */, - 075AF843227B67C5008D7A4C /* MBXStateManager.h */, - 075AF844227B67C6008D7A4C /* MBXStateManager.m */, - ); - name = "Demo App"; - path = app; - sourceTree = ""; - }; - DA1DC94D1CB6C1C2006E619F /* Supporting Files */ = { - isa = PBXGroup; - children = ( - DA1DC9961CB6E046006E619F /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - DA1DC9921CB6DF24006E619F /* Frameworks */ = { - isa = PBXGroup; - children = ( - 9680274122653C3E006BA4A1 /* libmbxaccounts.a */, - 55CF7530213ED92A00ED86C4 /* libmbgl-vendor-icu.a */, - 55CF752E213ED92000ED86C4 /* libmbgl-vendor-icu.a */, - 55D120A91F79100C004B6D81 /* libmbgl-filesource.a */, - 55D120A71F791007004B6D81 /* libmbgl-loop-darwin.a */, - 36F1153C1D46080700878E1A /* libmbgl-platform-ios.a */, - 554180411D2E97DE00012372 /* OpenGLES.framework */, - 55D8C9951D0F18CE00F42F10 /* libsqlite3.tbd */, - DAABF73B1CBC59BB005B1825 /* libmbgl-core.a */, - DAA4E4021CBB5C2F00178DFB /* CoreGraphics.framework */, - DA27C24D1CBB3811000B0ECD /* GLKit.framework */, - DAA4E4041CBB5C9E00178DFB /* ImageIO.framework */, - DAA4E4061CBB5CBF00178DFB /* MobileCoreServices.framework */, - DA4A26961CB6E795000B7809 /* Mapbox.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - DA2E88521CC036F400F24E7B /* SDK Tests */ = { - isa = PBXGroup; - children = ( - DA2E88551CC036F400F24E7B /* Info.plist */, - DA2784FB1DF02FF4001D5B8D /* Media.xcassets */, - 3502D6CB22AE88D5006BDFCE /* MGLAccountManagerTests.m */, - 353D23951D0B0DFE002BE09D /* MGLAnnotationViewTests.m */, - DAEDC4331D603417000224FF /* MGLAttributionInfoTests.m */, - DA35A2C31CCA9F8300E826B2 /* MGLClockDirectionFormatterTests.m */, - 35D9DDE11DA25EEC00DAAD69 /* MGLCodingTests.mm */, - DA35A2C41CCA9F8300E826B2 /* MGLCompassDirectionFormatterTests.m */, - DA35A2A91CCA058D00E826B2 /* MGLCoordinateFormatterTests.m */, - 3598544C1E1D38AA00B29F84 /* MGLDistanceFormatterTests.m */, - 6407D66F1E0085FD00F6A9C3 /* MGLDocumentationExampleTests.swift */, - DA1F8F3C1EBD287B00367E42 /* MGLDocumentationGuideTests.swift */, - DD58A4C51D822BD000E1F038 /* MGLExpressionTests.mm */, - DA0CD58F1CF56F6A00A5F5A5 /* MGLFeatureTests.mm */, - DA2E885C1CC0382C00F24E7B /* MGLGeometryTests.mm */, - DA5DB1291FABF1EE001C2326 /* MGLMapAccessibilityElementTests.m */, - DA695425215B1E75002041A4 /* MGLMapCameraTests.m */, - 96E6145522CC135200109F14 /* MGLMapViewCompassViewTests.mm */, - 1F0196A923174B0700F5C819 /* MGLMapViewContentInsetTests.m */, - 96ED34DD22374C0900E9FCA9 /* MGLMapViewDirectionTests.mm */, - 1F8E8A80233A9FD9009B51ED /* MGLMapViewGestureRecognizerTests.mm */, - 16376B481FFEED010000563E /* MGLMapViewLayoutTests.m */, - 96381C0122C6F3950053497D /* MGLMapViewPitchTests.m */, - 9658C154204761FC00D8A674 /* MGLMapViewScaleBarTests.m */, - 076171C22139C70900668A35 /* MGLMapViewTests.m */, - 9686D1BC22D9357700194EA0 /* MGLMapViewZoomTests.mm */, - 1F95931C1E6DE2E900D5B294 /* MGLNSDateAdditionsTests.mm */, - 96036A0520059BBA00510F3D /* MGLNSOrthographyAdditionsTests.m */, - DAE7DEC11E245455007505A6 /* MGLNSStringAdditionsTests.m */, - DA2E885D1CC0382C00F24E7B /* MGLOfflinePackTests.mm */, - DA2E885E1CC0382C00F24E7B /* MGLOfflineRegionTests.m */, - 55E2AD121E5B125400E8C587 /* MGLOfflineStorageTests.mm */, - 35B8E08B1D6C8B5100E768D2 /* MGLPredicateTests.mm */, - CA8FBC0821A47BB100D1203C /* MGLRendererConfigurationTests.mm */, - CAD9D0A922A86D6F001B25EE /* MGLResourceTests.mm */, - DA2E88601CC0382C00F24E7B /* MGLStyleTests.mm */, - 556660D71E1D085500E2C41B /* MGLVersionNumber.m */, - DA35D0871E1A6309007DED41 /* one-liner.json */, - 1F8A59F62165326C004DFE75 /* sideload_sat.db */, - 357579811D502AD4000B822E /* Styling */, - 409F43FB1E9E77D10048729D /* Swift Integration */, - 4031ACFD1E9FD26900A3EA26 /* Test Helpers */, - CA86FF0D22D8D5A0009EB14A /* MGLNetworkConfigurationTests.m */, - ); - name = "SDK Tests"; - path = test; - sourceTree = ""; - }; - DA8847D31CBAF91600AB86E3 /* SDK */ = { - isa = PBXGroup; - children = ( - DA88485E1CBAFC2E00AB86E3 /* Mapbox.h */, - 40834AEF1FDF4F0100C1BD0D /* Mapbox-Prefix.pch */, - DA8847DE1CBAFA3E00AB86E3 /* Foundation */, - DA8F25BC1D51D2570010E6B5 /* Foundation Templates */, - DA8933B91CCD2C6700E68420 /* Foundation Resources */, - DA8848331CBAFB2A00AB86E3 /* Kit */, - DA8848621CBAFCC100AB86E3 /* Kit Resources */, - DA8847D61CBAF91600AB86E3 /* Info.plist */, - DA8933F11CCD3FD700E68420 /* Info-static.plist */, - ); - name = SDK; - path = framework; - sourceTree = ""; - }; - DA8847DE1CBAFA3E00AB86E3 /* Foundation */ = { - isa = PBXGroup; - children = ( - 35599DA21D4682B60048254D /* Styling */, - DAD165831CF4CFED001FF4B9 /* Categories */, - DAD165801CF4CF9A001FF4B9 /* Formatters */, - DAD165811CF4CFC4001FF4B9 /* Geometry */, - DAD165821CF4CFE3001FF4B9 /* Offline Maps */, - DA8847DF1CBAFA5100AB86E3 /* MGLAccountManager.h */, - DA8847FF1CBAFA6200AB86E3 /* MGLAccountManager_Private.h */, - DA8848001CBAFA6200AB86E3 /* MGLAccountManager.m */, - DA00FC8C1D5EEB0D009AABC8 /* MGLAttributionInfo.h */, - DAF0D8171DFE6B2800B28378 /* MGLAttributionInfo_Private.h */, - DA00FC8D1D5EEB0D009AABC8 /* MGLAttributionInfo.mm */, - 1FCCEC32222605C400302E3B /* MGLSDKMetricsManager.h */, - 1FF48585223710BE00F19727 /* MGLAttributedExpression.h */, - 1FF48586223710BE00F19727 /* MGLAttributedExpression.m */, - 1FCCEC38222607A500302E3B /* MGLSDKMetricsManager_Private.h */, - 1FCCEC33222605C400302E3B /* MGLSDKMetricsManager.m */, - 556660C91E1BF3A900E2C41B /* MGLFoundation.h */, - 558DE79E1E5615E400C7916D /* MGLFoundation_Private.h */, - 558DE79F1E5615E400C7916D /* MGLFoundation.mm */, - DA8847E21CBAFA5100AB86E3 /* MGLMapCamera.h */, - DA8848031CBAFA6200AB86E3 /* MGLMapCamera.mm */, - 927FBCFD1F4DB05500F8BF1F /* MGLMapSnapshotter.h */, - CAFB3C13234505D500399265 /* MGLMapSnapshotter_Private.h */, - 927FBCFE1F4DB05500F8BF1F /* MGLMapSnapshotter.mm */, - DD0902A41DB18F1B00C5BDCE /* MGLNetworkConfiguration.h */, - 1F2B94BF221636D800210640 /* MGLNetworkConfiguration_Private.h */, - DD0902A21DB18DE700C5BDCE /* MGLNetworkConfiguration.m */, - 3EA9337830C7738BF7F5493C /* MGLRendererConfiguration.h */, - 3EA931BC4F087E166D538F21 /* MGLRendererConfiguration.mm */, - 92F2C3EC1F0E3C3A00268EC0 /* MGLRendererFrontend.h */, - DA8847EC1CBAFA5100AB86E3 /* MGLStyle.h */, - 35E0CFE51D3E501500188327 /* MGLStyle_Private.h */, - DA88480F1CBAFA6200AB86E3 /* MGLStyle.mm */, - DA8847EE1CBAFA5100AB86E3 /* MGLTypes.h */, - DA8848111CBAFA6200AB86E3 /* MGLTypes.m */, - 35E1A4D71D74336F007AA97F /* MGLValueEvaluator.h */, - 1FCAE2A020B872A400C577DD /* MGLLocationManager.h */, - 1FCAE2A620B88B3800C577DD /* MGLLocationManager_Private.h */, - 1FCAE2A120B872A400C577DD /* MGLLocationManager.m */, - 1F6A82A021360F9C00BA5B41 /* MGLLoggingConfiguration.h */, - CF75A91422D85E860058A5C4 /* MGLLoggingConfiguration.mm */, - 1F6A82A62138871900BA5B41 /* MGLLoggingConfiguration_Private.h */, - ); - name = Foundation; - path = ../darwin/src; - sourceTree = SOURCE_ROOT; - }; - DA8848331CBAFB2A00AB86E3 /* Kit */ = { - isa = PBXGroup; - children = ( - CF85C39E23A249FC00BEBFFF /* Interface */, - DAD165841CF4D06B001FF4B9 /* Annotations */, - 35CE617F1D4165C2004F2359 /* Categories */, - DA8848881CBB036000AB86E3 /* SMCalloutView */, - DAD165851CF4D08B001FF4B9 /* Telemetry */, - 355ADFF91E9281C300F3939D /* Views */, - CA55CD3E202C16AA00CE7095 /* MGLCameraChangeReason.h */, - DA704CC01F65A475004B3F28 /* MGLMapAccessibilityElement.h */, - DA704CC11F65A475004B3F28 /* MGLMapAccessibilityElement.mm */, - 96F017292118FBAE00892778 /* MGLMapView_Experimental.h */, - DA17BE2F1CC4BAC300402C41 /* MGLMapView_Private.h */, - DA8848361CBAFB8500AB86E3 /* MGLMapView.h */, - DA88484A1CBAFB9800AB86E3 /* MGLMapView.mm */, - 550570C522958FB400228ECF /* MGLMapView+Impl.h */, - 550570C422958FB300228ECF /* MGLMapView+Impl.mm */, - 5580B459229570A00091291B /* MGLMapView+OpenGL.h */, - 5580B45A229570A10091291B /* MGLMapView+OpenGL.mm */, - DA8848371CBAFB8500AB86E3 /* MGLMapView+IBAdditions.h */, - DA737EE01D056A4E005BDA16 /* MGLMapViewDelegate.h */, - ); - name = Kit; - path = src; - sourceTree = SOURCE_ROOT; - }; - DA8848621CBAFCC100AB86E3 /* Kit Resources */ = { - isa = PBXGroup; - children = ( - 960D0C351ECF5AAF008E151F /* Images.xcassets */, - DA89339F1CCC951200E68420 /* Localizable.strings */, - DAC49C5F1CD02BC9009E1AA3 /* Localizable.stringsdict */, - DA8933EF1CCD387900E68420 /* strip-frameworks.sh */, - ); - name = "Kit Resources"; - path = resources; - sourceTree = SOURCE_ROOT; - }; - DA8848881CBB036000AB86E3 /* SMCalloutView */ = { - isa = PBXGroup; - children = ( - DA8848891CBB037E00AB86E3 /* SMCalloutView.h */, - DA88488A1CBB037E00AB86E3 /* SMCalloutView.m */, - ); - name = SMCalloutView; - path = ../vendor/SMCalloutView; - sourceTree = ""; - }; - DA8933B91CCD2C6700E68420 /* Foundation Resources */ = { - isa = PBXGroup; - children = ( - DA8933BA1CCD2CA100E68420 /* Foundation.strings */, - DA8933BD1CCD2CAD00E68420 /* Foundation.stringsdict */, - ); - name = "Foundation Resources"; - path = ../../darwin/resources; - sourceTree = ""; - }; - DA8963321CC5498400684375 /* Fixtures */ = { - isa = PBXGroup; - children = ( - DA8963331CC549A100684375 /* glyphs */, - DA8963341CC549A100684375 /* sprites */, - DA8963351CC549A100684375 /* styles */, - DA8963361CC549A100684375 /* tiles */, - ); - name = Fixtures; - path = assets; - sourceTree = ""; - }; - DA8F25BC1D51D2570010E6B5 /* Foundation Templates */ = { - isa = PBXGroup; - children = ( - DA8F25BA1D51D2570010E6B5 /* MGLStyleLayer.h.ejs */, - DA8F25BB1D51D2570010E6B5 /* MGLStyleLayer.mm.ejs */, - DA8F25B91D51D2570010E6B5 /* MGLStyleLayerTests.mm.ejs */, - ); - name = "Foundation Templates"; - path = ../../darwin/src; - sourceTree = ""; - }; - DABCABA91CB80692000A7C39 /* Benchmarking App */ = { - isa = PBXGroup; - children = ( - DABCABAD1CB80692000A7C39 /* MBXBenchAppDelegate.h */, - DABCABAE1CB80692000A7C39 /* MBXBenchAppDelegate.m */, - DABCABB01CB80692000A7C39 /* MBXBenchViewController.h */, - DABCABB11CB80692000A7C39 /* MBXBenchViewController.mm */, - DABCABBF1CB80717000A7C39 /* locations.cpp */, - DABCABC01CB80717000A7C39 /* locations.hpp */, - DABCABB61CB80692000A7C39 /* Assets.xcassets */, - DA8963321CC5498400684375 /* Fixtures */, - DABCABB81CB80692000A7C39 /* LaunchScreen.storyboard */, - DABCABBB1CB80692000A7C39 /* Info.plist */, - DABCABAA1CB80692000A7C39 /* Supporting Files */, - ); - name = "Benchmarking App"; - path = benchmark; - sourceTree = ""; - }; - DABCABAA1CB80692000A7C39 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - DABCABAB1CB80692000A7C39 /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - DAC07C951CBB2CAD000CB309 /* Configuration */ = { - isa = PBXGroup; - children = ( - 9C6E284822A984120056B7BE /* Makefile */, - DA35A2D11CCAB25200E826B2 /* jazzy.yml */, - 55D8C9941D0F133500F42F10 /* config.xcconfig */, - ); - name = Configuration; - sourceTree = ""; - }; - DAD165801CF4CF9A001FF4B9 /* Formatters */ = { - isa = PBXGroup; - children = ( - DA35A2BA1CCA9A6900E826B2 /* MGLClockDirectionFormatter.h */, - DA35A2B71CCA9A5D00E826B2 /* MGLClockDirectionFormatter.m */, - DA35A2AF1CCA141D00E826B2 /* MGLCompassDirectionFormatter.h */, - DA35A2B01CCA141D00E826B2 /* MGLCompassDirectionFormatter.m */, - DA35A29D1CC9E94C00E826B2 /* MGLCoordinateFormatter.h */, - DA35A2A01CC9E95F00E826B2 /* MGLCoordinateFormatter.m */, - 3557F7AE1E1D27D300CCA5E6 /* MGLDistanceFormatter.h */, - 3557F7AF1E1D27D300CCA5E6 /* MGLDistanceFormatter.m */, - ); - name = Formatters; - sourceTree = ""; - }; - DAD165811CF4CFC4001FF4B9 /* Geometry */ = { - isa = PBXGroup; - children = ( - CA65C4F721E9BB080068B0D4 /* MGLCluster.h */, - DA8847E01CBAFA5100AB86E3 /* MGLAnnotation.h */, - DAD1656A1CF41981001FF4B9 /* MGLFeature_Private.h */, - DAD165691CF41981001FF4B9 /* MGLFeature.h */, - DAD1656B1CF41981001FF4B9 /* MGLFeature.mm */, - DA8848011CBAFA6200AB86E3 /* MGLGeometry_Private.h */, - DA8847E11CBAFA5100AB86E3 /* MGLGeometry.h */, - DA8848021CBAFA6200AB86E3 /* MGLGeometry.mm */, - DA8848041CBAFA6200AB86E3 /* MGLMultiPoint_Private.h */, - DA8847E31CBAFA5100AB86E3 /* MGLMultiPoint.h */, - DA8848051CBAFA6200AB86E3 /* MGLMultiPoint.mm */, - DA8847E71CBAFA5100AB86E3 /* MGLOverlay.h */, - DA8847E81CBAFA5100AB86E3 /* MGLPointAnnotation.h */, - DA88480B1CBAFA6200AB86E3 /* MGLPointAnnotation.mm */, - 4049C2AB1DB6E05500B3F799 /* MGLPointCollection_Private.h */, - 4049C29B1DB6CD6C00B3F799 /* MGLPointCollection.h */, - 4049C29C1DB6CD6C00B3F799 /* MGLPointCollection.mm */, - 9654C1271FFC1CC000DB6A19 /* MGLPolygon_Private.h */, - DA8847E91CBAFA5100AB86E3 /* MGLPolygon.h */, - DA88480C1CBAFA6200AB86E3 /* MGLPolygon.mm */, - 9654C1251FFC1AB900DB6A19 /* MGLPolyline_Private.h */, - DA8847EA1CBAFA5100AB86E3 /* MGLPolyline.h */, - DA88480D1CBAFA6200AB86E3 /* MGLPolyline.mm */, - 40CF6DBA1DAC3C1800A4D18B /* MGLShape_Private.h */, - DA8847EB1CBAFA5100AB86E3 /* MGLShape.h */, - DA88480E1CBAFA6200AB86E3 /* MGLShape.mm */, - DAD165761CF4CDFF001FF4B9 /* MGLShapeCollection.h */, - DAD165771CF4CDFF001FF4B9 /* MGLShapeCollection.mm */, - ); - name = Geometry; - sourceTree = ""; - }; - DAD165821CF4CFE3001FF4B9 /* Offline Maps */ = { - isa = PBXGroup; - children = ( - DA8847E41CBAFA5100AB86E3 /* MGLOfflinePack.h */, - DA8848061CBAFA6200AB86E3 /* MGLOfflinePack_Private.h */, - DA8848071CBAFA6200AB86E3 /* MGLOfflinePack.mm */, - DA8847E51CBAFA5100AB86E3 /* MGLOfflineRegion.h */, - DA8848081CBAFA6200AB86E3 /* MGLOfflineRegion_Private.h */, - DA8847E61CBAFA5100AB86E3 /* MGLOfflineStorage.h */, - DA8848091CBAFA6200AB86E3 /* MGLOfflineStorage_Private.h */, - DA88480A1CBAFA6200AB86E3 /* MGLOfflineStorage.mm */, - 92FC0AE8207CEE16007B6B54 /* MGLShapeOfflineRegion_Private.h */, - 92FC0AE7207CEE16007B6B54 /* MGLShapeOfflineRegion.h */, - 92FC0AE9207CEE16007B6B54 /* MGLShapeOfflineRegion.mm */, - DA8847ED1CBAFA5100AB86E3 /* MGLTilePyramidOfflineRegion.h */, - 9221BAAC2069843A0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h */, - DA8848101CBAFA6200AB86E3 /* MGLTilePyramidOfflineRegion.mm */, - ); - name = "Offline Maps"; - sourceTree = ""; - }; - DAD165831CF4CFED001FF4B9 /* Categories */ = { - isa = PBXGroup; - children = ( - 400532FF1DB0862B0069F638 /* NSArray+MGLAdditions.h */, - 400533001DB0862B0069F638 /* NSArray+MGLAdditions.mm */, - DA8848121CBAFA6200AB86E3 /* NSBundle+MGLAdditions.h */, - DA8848131CBAFA6200AB86E3 /* NSBundle+MGLAdditions.m */, - 3510FFE81D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.h */, - 3510FFE91D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.mm */, - 3510FFF71D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.h */, - 3510FFF81D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.mm */, - 353AFA121D65AB17005A69F4 /* NSDate+MGLAdditions.h */, - 353AFA131D65AB17005A69F4 /* NSDate+MGLAdditions.mm */, - 408AA8551DAEDA0800022900 /* NSDictionary+MGLAdditions.h */, - 408AA8561DAEDA0800022900 /* NSDictionary+MGLAdditions.mm */, - DA8848141CBAFA6200AB86E3 /* NSException+MGLAdditions.h */, - 3510FFEE1D6D9D8C00F413B2 /* NSExpression+MGLAdditions.h */, - DAC25FCB200FD83E009BE98E /* NSExpression+MGLPrivateAdditions.h */, - 3510FFEF1D6D9D8C00F413B2 /* NSExpression+MGLAdditions.mm */, - 35B82BF61D6C5F8400B1B721 /* NSPredicate+MGLAdditions.h */, - 35B82BF71D6C5F8400B1B721 /* NSPredicate+MGLAdditions.mm */, - 1FC4817B2098CBC0000D09B4 /* NSPredicate+MGLPrivateAdditions.h */, - DA8848171CBAFA6200AB86E3 /* NSString+MGLAdditions.h */, - DA8848181CBAFA6200AB86E3 /* NSString+MGLAdditions.m */, - DAED38611D62D0FC00D7640F /* NSURL+MGLAdditions.h */, - DAED38621D62D0FC00D7640F /* NSURL+MGLAdditions.m */, - DA35A2C71CCAAAD200E826B2 /* NSValue+MGLAdditions.h */, - DA35A2C81CCAAAD200E826B2 /* NSValue+MGLAdditions.m */, - ); - name = Categories; - sourceTree = ""; - }; - DAD165841CF4D06B001FF4B9 /* Annotations */ = { - isa = PBXGroup; - children = ( - 404326881D5B9B1A007111BD /* MGLAnnotationContainerView_Private.h */, - 40EDA1BD1CFE0D4A00D9EA68 /* MGLAnnotationContainerView.h */, - 40EDA1BE1CFE0D4A00D9EA68 /* MGLAnnotationContainerView.m */, - DA8848401CBAFB9800AB86E3 /* MGLAnnotationImage_Private.h */, - DA8848341CBAFB8500AB86E3 /* MGLAnnotationImage.h */, - DA8848411CBAFB9800AB86E3 /* MGLAnnotationImage.m */, - 4018B1C31CDC277F00F666AF /* MGLAnnotationView_Private.h */, - 4018B1C51CDC277F00F666AF /* MGLAnnotationView.h */, - 4018B1C41CDC277F00F666AF /* MGLAnnotationView.mm */, - DA8848351CBAFB8500AB86E3 /* MGLCalloutView.h */, - DA8848441CBAFB9800AB86E3 /* MGLCompactCalloutView.h */, - DA8848451CBAFB9800AB86E3 /* MGLCompactCalloutView.m */, - DA88484D1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.h */, - DA88484E1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.m */, - DA88484B1CBAFB9800AB86E3 /* MGLUserLocation_Private.h */, - DA8848391CBAFB8500AB86E3 /* MGLUserLocation.h */, - DA88484C1CBAFB9800AB86E3 /* MGLUserLocation.m */, - 359F57451D2FDBD5005217F1 /* MGLUserLocationAnnotationView_Private.h */, - 354B83941D2E873E005D9406 /* MGLUserLocationAnnotationView.h */, - 354B83951D2E873E005D9406 /* MGLUserLocationAnnotationView.m */, - 966FCF501F3C321000F2B6DE /* MGLUserLocationHeadingArrowLayer.h */, - 966FCF511F3C321000F2B6DE /* MGLUserLocationHeadingArrowLayer.m */, - 966FCF4A1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.h */, - 966FCF4B1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.m */, - 96F3F73B1F5711F1003E2D2C /* MGLUserLocationHeadingIndicator.h */, - ); - name = Annotations; - sourceTree = ""; - }; - DAD165851CF4D08B001FF4B9 /* Telemetry */ = { - isa = PBXGroup; - children = ( - 9680276322655623006BA4A1 /* Accounts */, - 40834BA11FE05CFD00C1BD0D /* Development */, - AC518DFD201BB55A00EBC820 /* MGLTelemetryConfig.h */, - AC518DFE201BB55A00EBC820 /* MGLTelemetryConfig.m */, - 9C6E282922A980E50056B7BE /* MGLMapboxEvents.h */, - 9C6E282A22A980E50056B7BE /* MGLMapboxEvents.m */, - 40834BA21FE05D3100C1BD0D /* Runtime */, - ); - name = Telemetry; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - DA8847CF1CBAF91600AB86E3 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 556660DB1E1D8E8D00E2C41B /* MGLFoundation.h in Headers */, - 92FC0AEA207CEE16007B6B54 /* MGLShapeOfflineRegion.h in Headers */, - 35D13AC31D3D19DD00AFB4E0 /* MGLFillStyleLayer.h in Headers */, - DA88483A1CBAFB8500AB86E3 /* MGLAnnotationImage.h in Headers */, - 74CB5EBD219B280400102936 /* MGLFillStyleLayer_Private.h in Headers */, - DAF2571B201901E200367EF5 /* MGLHillshadeStyleLayer.h in Headers */, - CA65C4F821E9BB080068B0D4 /* MGLCluster.h in Headers */, - DA35A2BB1CCA9A6900E826B2 /* MGLClockDirectionFormatter.h in Headers */, - 353933FE1D3FB7DD003F57D7 /* MGLSymbolStyleLayer.h in Headers */, - DA8848201CBAFA6200AB86E3 /* MGLOfflinePack_Private.h in Headers */, - 9641771F22D546DA00332422 /* MGLCompassButton_Private.h in Headers */, - DA00FC8E1D5EEB0D009AABC8 /* MGLAttributionInfo.h in Headers */, - DA8847FA1CBAFA5100AB86E3 /* MGLPolyline.h in Headers */, - 3566C7711D4A9198008152BC /* MGLSource_Private.h in Headers */, - 4018B1C91CDC288A00F666AF /* MGLAnnotationView_Private.h in Headers */, - 35E1A4D81D74336F007AA97F /* MGLValueEvaluator.h in Headers */, - DA88482C1CBAFA6200AB86E3 /* NSBundle+MGLAdditions.h in Headers */, - 74CB5EC5219B282500102936 /* MGLBackgroundStyleLayer_Private.h in Headers */, - 74CB5EB9219B280400102936 /* MGLHillshadeStyleLayer_Private.h in Headers */, - 357FE2DD1E02D2B20068B753 /* NSCoder+MGLAdditions.h in Headers */, - 35D13AB71D3D15E300AFB4E0 /* MGLStyleLayer.h in Headers */, - 07D947531F67488E00E37934 /* MGLComputedShapeSource_Private.h in Headers */, - 9654C1261FFC1AB900DB6A19 /* MGLPolyline_Private.h in Headers */, - 40F887701D7A1E58008ECB67 /* MGLShapeSource_Private.h in Headers */, - 9C6E281622A97FDC0056B7BE /* NSData+MMEGZIP.h in Headers */, - 350098DC1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.h in Headers */, - 74CB5ECA219B285000102936 /* MGLLineStyleLayer_Private.h in Headers */, - 74CB5ECE219B285000102936 /* MGLRasterStyleLayer_Private.h in Headers */, - DA8848231CBAFA6200AB86E3 /* MGLOfflineStorage_Private.h in Headers */, - 404326891D5B9B27007111BD /* MGLAnnotationContainerView_Private.h in Headers */, - CA55CD41202C16AA00CE7095 /* MGLCameraChangeReason.h in Headers */, - DA88483B1CBAFB8500AB86E3 /* MGLCalloutView.h in Headers */, - 35E0CFE61D3E501500188327 /* MGLStyle_Private.h in Headers */, - 3510FFF01D6D9D8C00F413B2 /* NSExpression+MGLAdditions.h in Headers */, - 9C6E281B22A97FDC0056B7BE /* MMECategoryLoader.h in Headers */, - 74CB5EBF219B280400102936 /* MGLHeatmapStyleLayer_Private.h in Headers */, - 1FC4817D2098CBC0000D09B4 /* NSPredicate+MGLPrivateAdditions.h in Headers */, - 1FCCEC3A222607A500302E3B /* MGLSDKMetricsManager_Private.h in Headers */, - 1F2B94C0221636D900210640 /* MGLNetworkConfiguration_Private.h in Headers */, - 353AFA141D65AB17005A69F4 /* NSDate+MGLAdditions.h in Headers */, - DA8848531CBAFB9800AB86E3 /* MGLCompactCalloutView.h in Headers */, - 74CB5EB1219B252C00102936 /* MGLStyleLayerManager.h in Headers */, - DA8847FB1CBAFA5100AB86E3 /* MGLShape.h in Headers */, - 353933F51D3FB785003F57D7 /* MGLBackgroundStyleLayer.h in Headers */, - DA88485A1CBAFB9800AB86E3 /* MGLUserLocation_Private.h in Headers */, - 966FCF531F3C322400F2B6DE /* MGLUserLocationHeadingArrowLayer.h in Headers */, - DA27C24F1CBB4C11000B0ECD /* MGLAccountManager_Private.h in Headers */, - DA8847FC1CBAFA5100AB86E3 /* MGLStyle.h in Headers */, - DD9BE4F71EB263C50079A3AF /* UIViewController+MGLAdditions.h in Headers */, - DAF0D8131DFE0EC500B28378 /* MGLVectorTileSource_Private.h in Headers */, - 354B83961D2E873E005D9406 /* MGLUserLocationAnnotationView.h in Headers */, - 74CB5EC3219B282500102936 /* MGLCircleStyleLayer_Private.h in Headers */, - DA8847F01CBAFA5100AB86E3 /* MGLAnnotation.h in Headers */, - 400533011DB0862B0069F638 /* NSArray+MGLAdditions.h in Headers */, - 96E6145922CC169000109F14 /* MGLCompassButton.h in Headers */, - 1F06668A1EC64F8E001C16D7 /* MGLLight.h in Headers */, - 4049C29D1DB6CD6C00B3F799 /* MGLPointCollection.h in Headers */, - 40CF6DBB1DAC3C6600A4D18B /* MGLShape_Private.h in Headers */, - 4018B1CA1CDC288E00F666AF /* MGLAnnotationView.h in Headers */, - 9654C1291FFC1CCD00DB6A19 /* MGLPolygon_Private.h in Headers */, - 35E79F201D41266300957B9E /* MGLStyleLayer_Private.h in Headers */, - FA68F14A1E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.h in Headers */, - 353933FB1D3FB7C0003F57D7 /* MGLRasterStyleLayer.h in Headers */, - 6F018BB0220031BF003E7269 /* UIView+MGLAdditions.h in Headers */, - 1FCAE2A820B88B3800C577DD /* MGLLocationManager_Private.h in Headers */, - 5580B45B229570A10091291B /* MGLMapView+OpenGL.h in Headers */, - DA8847EF1CBAFA5100AB86E3 /* MGLAccountManager.h in Headers */, - DA35A2C91CCAAAD200E826B2 /* NSValue+MGLAdditions.h in Headers */, - 1F6A82A82138871900BA5B41 /* MGLLoggingConfiguration_Private.h in Headers */, - 3510FFEA1D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.h in Headers */, - DA6408DB1DA4E7D300908C90 /* MGLVectorStyleLayer.h in Headers */, - DA704CC21F65A475004B3F28 /* MGLMapAccessibilityElement.h in Headers */, - DD0902AB1DB192A800C5BDCE /* MGLNetworkConfiguration.h in Headers */, - 35D3A1E61E9BE7EB002B38EE /* MGLScaleBar.h in Headers */, - 0778DD431F67556700A73B34 /* MGLComputedShapeSource.h in Headers */, - 9C188C502242C96F0022FA55 /* MMEDate.h in Headers */, - 1FCCEC34222605C400302E3B /* MGLSDKMetricsManager.h in Headers */, - 1F6A82A221360F9D00BA5B41 /* MGLLoggingConfiguration.h in Headers */, - DA8848311CBAFA6200AB86E3 /* NSString+MGLAdditions.h in Headers */, - 967C864B210A9D3C004DF794 /* UIDevice+MGLAdditions.h in Headers */, - CAFB3C14234505D500399265 /* MGLMapSnapshotter_Private.h in Headers */, - 1FCAE2A220B872A400C577DD /* MGLLocationManager.h in Headers */, - DACA86262019218600E9693A /* MGLRasterDEMSource.h in Headers */, - 353933F81D3FB79F003F57D7 /* MGLLineStyleLayer.h in Headers */, - 92F2C3ED1F0E3C3A00268EC0 /* MGLRendererFrontend.h in Headers */, - DAAF722D1DA903C700312FA4 /* MGLStyleValue_Private.h in Headers */, - 071BBB031EE76146001FB02A /* MGLImageSource.h in Headers */, - 74CB5EBB219B280400102936 /* MGLFillExtrusionStyleLayer_Private.h in Headers */, - DA8847F41CBAFA5100AB86E3 /* MGLOfflinePack.h in Headers */, - DA88482E1CBAFA6200AB86E3 /* NSException+MGLAdditions.h in Headers */, - 74CB5ED1219B286400102936 /* MGLSymbolStyleLayer_Private.h in Headers */, - 9221BAAD2069843A0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h in Headers */, - 96F3F73C1F57124B003E2D2C /* MGLUserLocationHeadingIndicator.h in Headers */, - 408AA8571DAEDA1700022900 /* NSDictionary+MGLAdditions.h in Headers */, - 9C6E281422A97FDC0056B7BE /* UIKit+MMEMobileEvents.h in Headers */, - DA88483F1CBAFB8500AB86E3 /* MGLUserLocation.h in Headers */, - 558DE7A01E5615E400C7916D /* MGLFoundation_Private.h in Headers */, - 966FCF4C1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.h in Headers */, - AC46EB59225E600A0039C013 /* MMECertPin.h in Headers */, - DA88483D1CBAFB8500AB86E3 /* MGLMapView+IBAdditions.h in Headers */, - DA17BE301CC4BAC300402C41 /* MGLMapView_Private.h in Headers */, - DAD165781CF4CDFF001FF4B9 /* MGLShapeCollection.h in Headers */, - 9C6E282D22A9815D0056B7BE /* MGLMapboxEvents.h in Headers */, - DAED38631D62D0FC00D7640F /* NSURL+MGLAdditions.h in Headers */, - DA88481E1CBAFA6200AB86E3 /* MGLMultiPoint_Private.h in Headers */, - 3566C7661D4A77BA008152BC /* MGLShapeSource.h in Headers */, - 35CE61821D4165D9004F2359 /* UIColor+MGLAdditions.h in Headers */, - 35B82BF81D6C5F8400B1B721 /* NSPredicate+MGLAdditions.h in Headers */, - 927FBCFF1F4DB05500F8BF1F /* MGLMapSnapshotter.h in Headers */, - DA35A29E1CC9E94C00E826B2 /* MGLCoordinateFormatter.h in Headers */, - DAF0D8181DFE6B2800B28378 /* MGLAttributionInfo_Private.h in Headers */, - DAAF722B1DA903C700312FA4 /* MGLStyleValue.h in Headers */, - 9680273F22653B84006BA4A1 /* MBXSKUToken.h in Headers */, - DA8847F71CBAFA5100AB86E3 /* MGLOverlay.h in Headers */, - DA35A2B11CCA141D00E826B2 /* MGLCompassDirectionFormatter.h in Headers */, - DA88488B1CBB037E00AB86E3 /* SMCalloutView.h in Headers */, - DA8847FE1CBAFA5100AB86E3 /* MGLTypes.h in Headers */, - DA8847F11CBAFA5100AB86E3 /* MGLGeometry.h in Headers */, - DA8848221CBAFA6200AB86E3 /* MGLOfflineRegion_Private.h in Headers */, - 35136D4C1D4277FC00C20EFD /* MGLSource.h in Headers */, - 3566C76C1D4A8DFA008152BC /* MGLRasterTileSource.h in Headers */, - AC46EB61225E60510039C013 /* MMEPinningConfigurationProvider.h in Headers */, - DA8847F91CBAFA5100AB86E3 /* MGLPolygon.h in Headers */, - 4049C2AC1DB6E05500B3F799 /* MGLPointCollection_Private.h in Headers */, - DA8847F81CBAFA5100AB86E3 /* MGLPointAnnotation.h in Headers */, - 8989B17C201A48EB0081CF59 /* MGLHeatmapStyleLayer.h in Headers */, - 353933F21D3FB753003F57D7 /* MGLCircleStyleLayer.h in Headers */, - DA8847F31CBAFA5100AB86E3 /* MGLMultiPoint.h in Headers */, - 30E578171DAA85520050F07E /* UIImage+MGLAdditions.h in Headers */, - 96036A01200565C700510F3D /* NSOrthography+MGLAdditions.h in Headers */, - 1F7454961ECD450D00021D39 /* MGLLight_Private.h in Headers */, - 1FF48587223710BE00F19727 /* MGLAttributedExpression.h in Headers */, - DAD1656C1CF41981001FF4B9 /* MGLFeature.h in Headers */, - 40EDA1C01CFE0E0200D9EA68 /* MGLAnnotationContainerView.h in Headers */, - 9620BB381E69FE1700705A1D /* MGLSDKUpdateChecker.h in Headers */, - DA88484F1CBAFB9800AB86E3 /* MGLAnnotationImage_Private.h in Headers */, - 1753ED421E53CE6F00A9FD90 /* MGLConversion.h in Headers */, - DA8847F21CBAFA5100AB86E3 /* MGLMapCamera.h in Headers */, - 3538AA1D1D542239008EC33D /* MGLForegroundStyleLayer.h in Headers */, - DA8847F51CBAFA5100AB86E3 /* MGLOfflineRegion.h in Headers */, - DA737EE11D056A4E005BDA16 /* MGLMapViewDelegate.h in Headers */, - 92FC0AEC207CEE16007B6B54 /* MGLShapeOfflineRegion_Private.h in Headers */, - AC518DFF201BB55A00EBC820 /* MGLTelemetryConfig.h in Headers */, - DA88481B1CBAFA6200AB86E3 /* MGLGeometry_Private.h in Headers */, - 3510FFF91D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.h in Headers */, - 3557F7B01E1D27D300CCA5E6 /* MGLDistanceFormatter.h in Headers */, - DAC25FCC200FD83F009BE98E /* NSExpression+MGLPrivateAdditions.h in Headers */, - 74CB5ECC219B285000102936 /* MGLOpenGLStyleLayer_Private.h in Headers */, - DA72620B1DEEE3480043BB89 /* MGLOpenGLStyleLayer.h in Headers */, - 404C26E71D89C55D000AA13D /* MGLTileSource_Private.h in Headers */, - DA88485C1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.h in Headers */, - 359F57461D2FDDA6005217F1 /* MGLUserLocationAnnotationView_Private.h in Headers */, - 404C26E21D89B877000AA13D /* MGLTileSource.h in Headers */, - DA8847FD1CBAFA5100AB86E3 /* MGLTilePyramidOfflineRegion.h in Headers */, - DA8848601CBAFC2E00AB86E3 /* Mapbox.h in Headers */, - DAF0D8101DFE0EA000B28378 /* MGLRasterTileSource_Private.h in Headers */, - 350098BB1D480108004B2AF0 /* MGLVectorTileSource.h in Headers */, - DA8847F61CBAFA5100AB86E3 /* MGLOfflineStorage.h in Headers */, - DAD1656E1CF41981001FF4B9 /* MGLFeature_Private.h in Headers */, - DA88483C1CBAFB8500AB86E3 /* MGLMapView.h in Headers */, - 3EA9363147E77DD29FA06063 /* MGLRendererConfiguration.h in Headers */, - 55E5665121C2A1C20008B8B5 /* MMEReachability.h in Headers */, - 55E5665221C2A2080008B8B5 /* MMENamespacedDependencies.h in Headers */, - 55E5665321C2A2080008B8B5 /* MapboxMobileEvents.h in Headers */, - 55E5665521C2A2080008B8B5 /* MMEAPIClient.h in Headers */, - 55E5665721C2A2080008B8B5 /* MMECommonEventData.h in Headers */, - 55E5665821C2A2080008B8B5 /* MMEConstants.h in Headers */, - 55E5665921C2A2080008B8B5 /* MMEDependencyManager.h in Headers */, - 55E5665A21C2A2080008B8B5 /* MMEEvent.h in Headers */, - 9C6E281522A97FDC0056B7BE /* CLLocation+MMEMobileEvents.h in Headers */, - 55E5665B21C2A2080008B8B5 /* MMEEventLogger.h in Headers */, - 55E5665C21C2A2080008B8B5 /* MMEEventLogReportViewController.h in Headers */, - 55E5665D21C2A2080008B8B5 /* MMEEventsConfiguration.h in Headers */, - CFF9F98623A24BF500B0DE92 /* MGLNetworkIntegrationManager.h in Headers */, - 55E5666021C2A2080008B8B5 /* MMEConfigurator.h in Headers */, - 55E5666221C2A2080008B8B5 /* MMELocationManager.h in Headers */, - 55E5666321C2A2080008B8B5 /* MMEMetrics.h in Headers */, - 55E5666421C2A2080008B8B5 /* MMEMetricsManager.h in Headers */, - 55E5666621C2A2080008B8B5 /* MMENSURLSessionWrapper.h in Headers */, - 550570C822958FB400228ECF /* MGLMapView+Impl.h in Headers */, - 55E5666721C2A2080008B8B5 /* MMETimerManager.h in Headers */, - 55E5666821C2A2080008B8B5 /* MMETypes.h in Headers */, - 9C6E281A22A97FDC0056B7BE /* CLLocationManager+MMEMobileEvents.h in Headers */, - 55E5666921C2A2080008B8B5 /* MMEUIApplicationWrapper.h in Headers */, - 55E5666A21C2A2080008B8B5 /* MMEUINavigation.h in Headers */, - 55E5666B21C2A2080008B8B5 /* MMEUniqueIdentifier.h in Headers */, - 55E5666C21C2A2080008B8B5 /* MMEDispatchManager.h in Headers */, - 55E5666121C2A2080008B8B5 /* MMEEventsManager.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DABFB85C1CBE99DE00D62B32 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 556660CA1E1BF3A900E2C41B /* MGLFoundation.h in Headers */, - 96E516ED200058A200A02306 /* MGLComputedShapeSource.h in Headers */, - 35B82BF91D6C5F8400B1B721 /* NSPredicate+MGLAdditions.h in Headers */, - 92FC0AEB207CEE16007B6B54 /* MGLShapeOfflineRegion.h in Headers */, - DA35A2CA1CCAAAD200E826B2 /* NSValue+MGLAdditions.h in Headers */, - 350098BC1D480108004B2AF0 /* MGLVectorTileSource.h in Headers */, - FA68F14B1E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.h in Headers */, - 96E516DE200054F700A02306 /* MGLGeometry_Private.h in Headers */, - 353933FC1D3FB7C0003F57D7 /* MGLRasterStyleLayer.h in Headers */, - 3566C76D1D4A8DFA008152BC /* MGLRasterTileSource.h in Headers */, - 9641772022D546DA00332422 /* MGLCompassButton_Private.h in Headers */, - DAED38641D62D0FC00D7640F /* NSURL+MGLAdditions.h in Headers */, - DABFB85E1CBE99E500D62B32 /* MGLAnnotation.h in Headers */, - DABFB8641CBE99E500D62B32 /* MGLOfflineStorage.h in Headers */, - 9C6E283E22A982670056B7BE /* MMEMetrics.h in Headers */, - 96E516E32000552A00A02306 /* MGLAccountManager_Private.h in Headers */, - 96E5170420005A6B00A02306 /* SMCalloutView.h in Headers */, - 9C6E282822A980B40056B7BE /* MMEReachability.h in Headers */, - 96036A02200565C700510F3D /* NSOrthography+MGLAdditions.h in Headers */, - 9C6E284122A982670056B7BE /* MMENSURLSessionWrapper.h in Headers */, - DAD165791CF4CDFF001FF4B9 /* MGLShapeCollection.h in Headers */, - 4049C29E1DB6CD6C00B3F799 /* MGLPointCollection.h in Headers */, - 3566C7671D4A77BA008152BC /* MGLShapeSource.h in Headers */, - DA35A29F1CC9E94C00E826B2 /* MGLCoordinateFormatter.h in Headers */, - 967C864C210A9D3C004DF794 /* UIDevice+MGLAdditions.h in Headers */, - 404C26E31D89B877000AA13D /* MGLTileSource.h in Headers */, - 96E516F6200059EC00A02306 /* MGLRendererFrontend.h in Headers */, - 9C6E284022A982670056B7BE /* MMEDate.h in Headers */, - 071BBB041EE76147001FB02A /* MGLImageSource.h in Headers */, - 74CB5EC0219B280400102936 /* MGLHeatmapStyleLayer_Private.h in Headers */, - 74CB5ECB219B285000102936 /* MGLLineStyleLayer_Private.h in Headers */, - CA65C4F921E9BB080068B0D4 /* MGLCluster.h in Headers */, - DABFB8611CBE99E500D62B32 /* MGLMultiPoint.h in Headers */, - 74CB5ECD219B285000102936 /* MGLOpenGLStyleLayer_Private.h in Headers */, - 74CB5ECF219B285000102936 /* MGLRasterStyleLayer_Private.h in Headers */, - 35D3A1E71E9BE7EC002B38EE /* MGLScaleBar.h in Headers */, - 96E516EF2000594F00A02306 /* NSArray+MGLAdditions.h in Headers */, - AC46EB62225E60510039C013 /* MMEPinningConfigurationProvider.h in Headers */, - 96E516F12000596800A02306 /* NSString+MGLAdditions.h in Headers */, - 35E0CFE71D3E501500188327 /* MGLStyle_Private.h in Headers */, - CA55CD42202C16AA00CE7095 /* MGLCameraChangeReason.h in Headers */, - DABFB86D1CBE9A0F00D62B32 /* MGLAnnotationImage.h in Headers */, - DABFB8721CBE9A0F00D62B32 /* MGLUserLocation.h in Headers */, - 92FC0AED207CEE16007B6B54 /* MGLShapeOfflineRegion_Private.h in Headers */, - 9C6E284222A982670056B7BE /* MMETimerManager.h in Headers */, - 1FCCEC35222605C400302E3B /* MGLSDKMetricsManager.h in Headers */, - 927FBD001F4DB05500F8BF1F /* MGLMapSnapshotter.h in Headers */, - 3566C7721D4A9198008152BC /* MGLSource_Private.h in Headers */, - 9C6E283D22A982670056B7BE /* MMELocationManager.h in Headers */, - 353933FF1D3FB7DD003F57D7 /* MGLSymbolStyleLayer.h in Headers */, - DAAF722E1DA903C700312FA4 /* MGLStyleValue_Private.h in Headers */, - 9C6E283922A982670056B7BE /* MMEEventLogReportViewController.h in Headers */, - 1F6A82A92138871900BA5B41 /* MGLLoggingConfiguration_Private.h in Headers */, - DABFB8661CBE99E500D62B32 /* MGLPointAnnotation.h in Headers */, - 96E6145A22CC169000109F14 /* MGLCompassButton.h in Headers */, - 96E516E42000560B00A02306 /* MGLComputedShapeSource_Private.h in Headers */, - 96E516E92000560B00A02306 /* MGLAnnotationImage_Private.h in Headers */, - 96E516E52000560B00A02306 /* MGLOfflinePack_Private.h in Headers */, - DD9BE4F91EB263D20079A3AF /* UIViewController+MGLAdditions.h in Headers */, - 9680274022653B84006BA4A1 /* MBXSKUToken.h in Headers */, - DAF2571C201901E200367EF5 /* MGLHillshadeStyleLayer.h in Headers */, - 74CB5EC4219B282500102936 /* MGLCircleStyleLayer_Private.h in Headers */, - DABFB8621CBE99E500D62B32 /* MGLOfflinePack.h in Headers */, - 96E516FA20005A3D00A02306 /* MGLUserLocationHeadingArrowLayer.h in Headers */, - 96E516E62000560B00A02306 /* MGLOfflineRegion_Private.h in Headers */, - DAD1656D1CF41981001FF4B9 /* MGLFeature.h in Headers */, - 550570C922958FB400228ECF /* MGLMapView+Impl.h in Headers */, - 9C6E284622A982670056B7BE /* MMEUniqueIdentifier.h in Headers */, - 5580B45C229570A10091291B /* MGLMapView+OpenGL.h in Headers */, - 96E516E72000560B00A02306 /* MGLOfflineStorage_Private.h in Headers */, - DA17BE311CC4BDAA00402C41 /* MGLMapView_Private.h in Headers */, - 9C6E284522A982670056B7BE /* MMEUINavigation.h in Headers */, - DABFB86C1CBE99E500D62B32 /* MGLTypes.h in Headers */, - 96E516F720005A2700A02306 /* MGLAnnotationContainerView.h in Headers */, - DABFB8691CBE99E500D62B32 /* MGLShape.h in Headers */, - 9620BB391E69FE1700705A1D /* MGLSDKUpdateChecker.h in Headers */, - 3510FFEB1D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.h in Headers */, - 35E1A4D91D74336F007AA97F /* MGLValueEvaluator.h in Headers */, - DABFB8701CBE9A0F00D62B32 /* MGLMapView+IBAdditions.h in Headers */, - 9C6E283822A982670056B7BE /* MMEEventLogger.h in Headers */, - CAFB3C15234505D500399265 /* MGLMapSnapshotter_Private.h in Headers */, - 6F018BAF220031BF003E7269 /* UIView+MGLAdditions.h in Headers */, - 96E516EA2000560B00A02306 /* MGLAnnotationView_Private.h in Headers */, - 96E516FB20005A4000A02306 /* MGLUserLocationHeadingBeamLayer.h in Headers */, - 96E516DC2000547000A02306 /* MGLPolyline_Private.h in Headers */, - 353AFA151D65AB17005A69F4 /* NSDate+MGLAdditions.h in Headers */, - 3510FFFA1D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.h in Headers */, - 1FF48588223710BE00F19727 /* MGLAttributedExpression.h in Headers */, - DA72620C1DEEE3480043BB89 /* MGLOpenGLStyleLayer.h in Headers */, - 1F2B94C1221636D900210640 /* MGLNetworkConfiguration_Private.h in Headers */, - 35CE61831D4165D9004F2359 /* UIColor+MGLAdditions.h in Headers */, - 96E516F32000597100A02306 /* NSDictionary+MGLAdditions.h in Headers */, - 1FCAE2A920B88B3800C577DD /* MGLLocationManager_Private.h in Headers */, - 9C6E283422A982670056B7BE /* MMECommonEventData.h in Headers */, - 9C6E281E22A980AC0056B7BE /* CLLocation+MMEMobileEvents.h in Headers */, - 96E516F02000595800A02306 /* NSBundle+MGLAdditions.h in Headers */, - 96E516F920005A3500A02306 /* MGLFaux3DUserLocationAnnotationView.h in Headers */, - 96E516F22000596D00A02306 /* NSException+MGLAdditions.h in Headers */, - 9C6E282222A980AC0056B7BE /* MMECategoryLoader.h in Headers */, - 96E516EC2000560B00A02306 /* MGLUserLocationAnnotationView_Private.h in Headers */, - 1FC4817F2098CD80000D09B4 /* NSPredicate+MGLPrivateAdditions.h in Headers */, - DABFB8671CBE99E500D62B32 /* MGLPolygon.h in Headers */, - 404C26E81D89C55D000AA13D /* MGLTileSource_Private.h in Headers */, - 74CB5EBC219B280400102936 /* MGLFillExtrusionStyleLayer_Private.h in Headers */, - 9C6E282F22A9824B0056B7BE /* MGLTelemetryConfig.h in Headers */, - 1F7454931ECBB43F00021D39 /* MGLLight.h in Headers */, - DAAF722C1DA903C700312FA4 /* MGLStyleValue.h in Headers */, - DABFB8651CBE99E500D62B32 /* MGLOverlay.h in Headers */, - 35E79F211D41266300957B9E /* MGLStyleLayer_Private.h in Headers */, - 350098DD1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.h in Headers */, - 74CB5EBE219B280400102936 /* MGLFillStyleLayer_Private.h in Headers */, - 9C6E283122A982530056B7BE /* MapboxMobileEvents.h in Headers */, - DABFB8681CBE99E500D62B32 /* MGLPolyline.h in Headers */, - 9C6E283022A9824F0056B7BE /* MGLMapboxEvents.h in Headers */, - 9C6E283522A982670056B7BE /* MMEConstants.h in Headers */, - 96E516DF200054FB00A02306 /* MGLShape_Private.h in Headers */, - DABFB86F1CBE9A0F00D62B32 /* MGLMapView.h in Headers */, - DA6408DC1DA4E7D300908C90 /* MGLVectorStyleLayer.h in Headers */, - 353933F31D3FB753003F57D7 /* MGLCircleStyleLayer.h in Headers */, - 9C6E284722A982670056B7BE /* MMEDispatchManager.h in Headers */, - 558DE7A11E5615E400C7916D /* MGLFoundation_Private.h in Headers */, - 96E516F820005A3000A02306 /* MGLCompactCalloutView.h in Headers */, - 96E516E22000551900A02306 /* MGLPointCollection_Private.h in Headers */, - 3538AA1E1D542239008EC33D /* MGLForegroundStyleLayer.h in Headers */, - 30E578181DAA85520050F07E /* UIImage+MGLAdditions.h in Headers */, - DA704CC31F65A475004B3F28 /* MGLMapAccessibilityElement.h in Headers */, - 40F887711D7A1E59008ECB67 /* MGLShapeSource_Private.h in Headers */, - 9C6E283622A982670056B7BE /* MMEDependencyManager.h in Headers */, - DABFB8631CBE99E500D62B32 /* MGLOfflineRegion.h in Headers */, - DA35A2B21CCA141D00E826B2 /* MGLCompassDirectionFormatter.h in Headers */, - DAF0D8141DFE0EC500B28378 /* MGLVectorTileSource_Private.h in Headers */, - 9C6E283F22A982670056B7BE /* MMEMetricsManager.h in Headers */, - 8989B17D201A48EB0081CF59 /* MGLHeatmapStyleLayer.h in Headers */, - 74CB5EC6219B282500102936 /* MGLBackgroundStyleLayer_Private.h in Headers */, - DABFB8731CBE9A9900D62B32 /* Mapbox.h in Headers */, - 74CB5EBA219B280400102936 /* MGLHillshadeStyleLayer_Private.h in Headers */, - 357FE2DE1E02D2B20068B753 /* NSCoder+MGLAdditions.h in Headers */, - 1753ED431E53CE6F00A9FD90 /* MGLConversion.h in Headers */, - DAC25FCD200FD83F009BE98E /* NSExpression+MGLPrivateAdditions.h in Headers */, - 74CB5ED2219B286400102936 /* MGLSymbolStyleLayer_Private.h in Headers */, - 354B83971D2E873E005D9406 /* MGLUserLocationAnnotationView.h in Headers */, - DAF0D8111DFE0EA000B28378 /* MGLRasterTileSource_Private.h in Headers */, - 1F6A82A321360F9D00BA5B41 /* MGLLoggingConfiguration.h in Headers */, - DABFB86B1CBE99E500D62B32 /* MGLTilePyramidOfflineRegion.h in Headers */, - 968F36B51E4D128D003A5522 /* MGLDistanceFormatter.h in Headers */, - 4018B1CB1CDC288E00F666AF /* MGLAnnotationView.h in Headers */, - DABFB85F1CBE99E500D62B32 /* MGLGeometry.h in Headers */, - 1FCAE2A320B872A400C577DD /* MGLLocationManager.h in Headers */, - 9C6E283A22A982670056B7BE /* MMEEventsConfiguration.h in Headers */, - 96E516E02000550C00A02306 /* MGLFeature_Private.h in Headers */, - 9C6E284422A982670056B7BE /* MMEUIApplicationWrapper.h in Headers */, - 9C6E283322A982670056B7BE /* MMEAPIClient.h in Headers */, - 353933F61D3FB785003F57D7 /* MGLBackgroundStyleLayer.h in Headers */, - 9C6E283222A982570056B7BE /* MMENamespacedDependencies.h in Headers */, - 9C6E282422A980AC0056B7BE /* NSData+MMEGZIP.h in Headers */, - DABFB85D1CBE99E500D62B32 /* MGLAccountManager.h in Headers */, - 74CB5EB2219B252C00102936 /* MGLStyleLayerManager.h in Headers */, - 9221BAB020699F8A0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h in Headers */, - 96E516F5200059B100A02306 /* MGLNetworkConfiguration.h in Headers */, - 96E516DD200054F200A02306 /* MGLPolygon_Private.h in Headers */, - 353933F91D3FB79F003F57D7 /* MGLLineStyleLayer.h in Headers */, - 9C6E282622A980AC0056B7BE /* UIKit+MMEMobileEvents.h in Headers */, - 96E516EB2000560B00A02306 /* MGLUserLocation_Private.h in Headers */, - 9C6E282022A980AC0056B7BE /* CLLocationManager+MMEMobileEvents.h in Headers */, - 35D13AB81D3D15E300AFB4E0 /* MGLStyleLayer.h in Headers */, - 1FCCEC3B222607A500302E3B /* MGLSDKMetricsManager_Private.h in Headers */, - 35136D4D1D4277FC00C20EFD /* MGLSource.h in Headers */, - DA35A2BC1CCA9A6900E826B2 /* MGLClockDirectionFormatter.h in Headers */, - 96E516E82000560B00A02306 /* MGLAnnotationContainerView_Private.h in Headers */, - 9C6E283722A982670056B7BE /* MMEEvent.h in Headers */, - 35D13AC41D3D19DD00AFB4E0 /* MGLFillStyleLayer.h in Headers */, - 9C6E284322A982670056B7BE /* MMETypes.h in Headers */, - DABFB86E1CBE9A0F00D62B32 /* MGLCalloutView.h in Headers */, - CFF9F98723A24BF500B0DE92 /* MGLNetworkIntegrationManager.h in Headers */, - 96E516FC20005A4400A02306 /* MGLUserLocationHeadingIndicator.h in Headers */, - 1F7454971ECD450D00021D39 /* MGLLight_Private.h in Headers */, - 9C6E283C22A982670056B7BE /* MMEEventsManager.h in Headers */, - 9C6E283B22A982670056B7BE /* MMEConfigurator.h in Headers */, - DABFB8601CBE99E500D62B32 /* MGLMapCamera.h in Headers */, - DA737EE21D056A4E005BDA16 /* MGLMapViewDelegate.h in Headers */, - DAF0D8191DFE6B2800B28378 /* MGLAttributionInfo_Private.h in Headers */, - DABFB86A1CBE99E500D62B32 /* MGLStyle.h in Headers */, - DA00FC8F1D5EEB0D009AABC8 /* MGLAttributionInfo.h in Headers */, - 96E516E12000551100A02306 /* MGLMultiPoint_Private.h in Headers */, - 3EA934623AD0000B7D99C3FB /* MGLRendererConfiguration.h in Headers */, - DACA86272019218600E9693A /* MGLRasterDEMSource.h in Headers */, - AC46EB5A225E600A0039C013 /* MMECertPin.h in Headers */, - 9621F2502091020E005B3800 /* NSExpression+MGLAdditions.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 16376B061FFD9DAF0000563E /* integration */ = { - isa = PBXNativeTarget; - buildConfigurationList = 16376B101FFD9DAF0000563E /* Build configuration list for PBXNativeTarget "integration" */; - buildPhases = ( - 16376B031FFD9DAF0000563E /* Sources */, - 16376B041FFD9DAF0000563E /* Frameworks */, - 16376B051FFD9DAF0000563E /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 165D0CE620005351009A3C66 /* PBXTargetDependency */, - CABE5DAC2072FA660003AF3C /* PBXTargetDependency */, - ); - name = integration; - productName = "integration-tests"; - productReference = 16376B071FFD9DAF0000563E /* integration.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 16376B2E1FFDB4B40000563E /* Integration Test Harness */ = { - isa = PBXNativeTarget; - buildConfigurationList = 16376B421FFDB4B40000563E /* Build configuration list for PBXNativeTarget "Integration Test Harness" */; - buildPhases = ( - 16376B2B1FFDB4B40000563E /* Sources */, - 16376B2C1FFDB4B40000563E /* Frameworks */, - 16376B2D1FFDB4B40000563E /* Resources */, - CAA69DA6206DCD0E007279CD /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Integration Test Harness"; - productName = "Integration Test Harness"; - productReference = 16376B2F1FFDB4B40000563E /* Integration Test Harness.app */; - productType = "com.apple.product-type.application"; - }; - DA1DC9491CB6C1C2006E619F /* iosapp */ = { - isa = PBXNativeTarget; - buildConfigurationList = DA1DC9611CB6C1C2006E619F /* Build configuration list for PBXNativeTarget "iosapp" */; - buildPhases = ( - DA1DC9461CB6C1C2006E619F /* Sources */, - DA1DC9471CB6C1C2006E619F /* Frameworks */, - DA1DC9481CB6C1C2006E619F /* Resources */, - DA4A269A1CB6F5D3000B7809 /* Embed Frameworks */, - 074A7F0B2277BD67001A62D1 /* Insert Mapbox Access Token */, - ); - buildRules = ( - ); - dependencies = ( - DA8847D81CBAF91600AB86E3 /* PBXTargetDependency */, - ); - name = iosapp; - productName = iosapp; - productReference = DA1DC94A1CB6C1C2006E619F /* Mapbox GL.app */; - productType = "com.apple.product-type.application"; - }; - DA2E88501CC036F400F24E7B /* test */ = { - isa = PBXNativeTarget; - buildConfigurationList = DA2E88591CC036F400F24E7B /* Build configuration list for PBXNativeTarget "test" */; - buildPhases = ( - DA2E884D1CC036F400F24E7B /* Sources */, - DA2E884E1CC036F400F24E7B /* Frameworks */, - DA2E884F1CC036F400F24E7B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - DA2E88581CC036F400F24E7B /* PBXTargetDependency */, - ); - name = test; - productName = test; - productReference = DA2E88511CC036F400F24E7B /* test.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - DA8847D11CBAF91600AB86E3 /* dynamic */ = { - isa = PBXNativeTarget; - buildConfigurationList = DA8847DD1CBAF91600AB86E3 /* Build configuration list for PBXNativeTarget "dynamic" */; - buildPhases = ( - DA8847CD1CBAF91600AB86E3 /* Sources */, - DA8847CE1CBAF91600AB86E3 /* Frameworks */, - DA8847CF1CBAF91600AB86E3 /* Headers */, - DA8847D01CBAF91600AB86E3 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = dynamic; - productName = framework; - productReference = DA8847D21CBAF91600AB86E3 /* Mapbox.framework */; - productType = "com.apple.product-type.framework"; - }; - DA8933D41CCD306400E68420 /* bundle */ = { - isa = PBXNativeTarget; - buildConfigurationList = DA8933D81CCD306400E68420 /* Build configuration list for PBXNativeTarget "bundle" */; - buildPhases = ( - DA8933D31CCD306400E68420 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = bundle; - productName = bundle; - productReference = DA8933D51CCD306400E68420 /* Mapbox.bundle */; - productType = "com.apple.product-type.bundle"; - }; - DAA4E4121CBB71D400178DFB /* static */ = { - isa = PBXNativeTarget; - buildConfigurationList = DAA4E4191CBB71D500178DFB /* Build configuration list for PBXNativeTarget "static" */; - buildPhases = ( - DAA4E40F1CBB71D400178DFB /* Sources */, - DAA4E4101CBB71D400178DFB /* Frameworks */, - DAA4E4111CBB71D400178DFB /* CopyFiles */, - DABFB85C1CBE99DE00D62B32 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - DA25D5CA1CCDA0CC00607828 /* PBXTargetDependency */, - ); - name = static; - productName = static; - productReference = DAA4E4131CBB71D400178DFB /* libMapbox.a */; - productType = "com.apple.product-type.library.static"; - }; - DABCABA71CB80692000A7C39 /* bench */ = { - isa = PBXNativeTarget; - buildConfigurationList = DABCABBE1CB80692000A7C39 /* Build configuration list for PBXNativeTarget "bench" */; - buildPhases = ( - DABCABA41CB80692000A7C39 /* Sources */, - DABCABA51CB80692000A7C39 /* Frameworks */, - DABCABA61CB80692000A7C39 /* Resources */, - DAA4E40C1CBB6C9600178DFB /* Embed Frameworks */, - 07796BA2227908CB0059CAF1 /* Insert Mapbox Access Token */, - ); - buildRules = ( - ); - dependencies = ( - DAA4E40B1CBB6C9500178DFB /* PBXTargetDependency */, - ); - name = bench; - productName = bench; - productReference = DABCABA81CB80692000A7C39 /* Bench GL.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - DA1DC9421CB6C1C2006E619F /* Project object */ = { - isa = PBXProject; - attributes = { - CLASSPREFIX = MBX; - LastUpgradeCheck = 0930; - ORGANIZATIONNAME = Mapbox; - TargetAttributes = { - 16376B061FFD9DAF0000563E = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 0940; - ProvisioningStyle = Automatic; - TestTargetID = DA1DC9491CB6C1C2006E619F; - }; - 16376B2E1FFDB4B40000563E = { - CreatedOnToolsVersion = 9.2; - DevelopmentTeam = GJZR2MEM28; - ProvisioningStyle = Automatic; - }; - DA1DC9491CB6C1C2006E619F = { - CreatedOnToolsVersion = 7.3; - DevelopmentTeam = GJZR2MEM28; - LastSwiftMigration = 0820; - }; - DA2E88501CC036F400F24E7B = { - CreatedOnToolsVersion = 7.3; - LastSwiftMigration = 1010; - }; - DA8847D11CBAF91600AB86E3 = { - CreatedOnToolsVersion = 7.3; - LastSwiftMigration = 0820; - }; - DA8933D41CCD306400E68420 = { - CreatedOnToolsVersion = 7.3; - }; - DAA4E4121CBB71D400178DFB = { - CreatedOnToolsVersion = 7.3; - }; - DABCABA71CB80692000A7C39 = { - CreatedOnToolsVersion = 7.3; - DevelopmentTeam = GJZR2MEM28; - }; - }; - }; - buildConfigurationList = DA1DC9451CB6C1C2006E619F /* Build configuration list for PBXProject "ios" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - "zh-Hans", - "zh-Hant", - de, - fr, - ja, - sv, - vi, - "pt-BR", - es, - pl, - ru, - uk, - lt, - ca, - fi, - nl, - hu, - bg, - ar, - he, - da, - "pt-PT", - ko, - cs, - gl, - ); - mainGroup = DA1DC9411CB6C1C2006E619F; - productRefGroup = DA1DC94B1CB6C1C2006E619F /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - DA1DC9491CB6C1C2006E619F /* iosapp */, - DABCABA71CB80692000A7C39 /* bench */, - DA8847D11CBAF91600AB86E3 /* dynamic */, - DAA4E4121CBB71D400178DFB /* static */, - DA8933D41CCD306400E68420 /* bundle */, - DA2E88501CC036F400F24E7B /* test */, - 16376B061FFD9DAF0000563E /* integration */, - 16376B2E1FFDB4B40000563E /* Integration Test Harness */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 16376B051FFD9DAF0000563E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 16376B471FFDB92B0000563E /* one-liner.json in Resources */, - 1F8A59F821653275004DFE75 /* sideload_sat.db in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 16376B2D1FFDB4B40000563E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 16376B3E1FFDB4B40000563E /* LaunchScreen.storyboard in Resources */, - 16376B3B1FFDB4B40000563E /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA1DC9481CB6C1C2006E619F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DD4823771D94AE6C00EB71B7 /* numeric_filter_style.json in Resources */, - A4F3FB1D2254865900A30170 /* missing_icon.json in Resources */, - DA1DC9701CB6C6CE006E619F /* points.geojson in Resources */, - 353BAEF61D646370009A8DA9 /* amsterdam.geojson in Resources */, - DA1DC9711CB6C6CE006E619F /* polyline.geojson in Resources */, - DD4823761D94AE6C00EB71B7 /* line_filter_style.json in Resources */, - 076171C72141A91700668A35 /* Settings.bundle in Resources */, - DA821D071CCC6D59007508D4 /* Main.storyboard in Resources */, - DA1DC9731CB6C6CE006E619F /* threestates.geojson in Resources */, - DA821D061CCC6D59007508D4 /* LaunchScreen.storyboard in Resources */, - 96E027231E57C76E004B8E66 /* Localizable.strings in Resources */, - 1F26B6C320E1A351007BCC21 /* simple_route.json in Resources */, - DD4823751D94AE6C00EB71B7 /* fill_filter_style.json in Resources */, - DA1DC99F1CB6E088006E619F /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA2E884F1CC036F400F24E7B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DA2784FC1DF02FF4001D5B8D /* Media.xcassets in Resources */, - 1F8A59F72165326D004DFE75 /* sideload_sat.db in Resources */, - 353BAEF71D646370009A8DA9 /* amsterdam.geojson in Resources */, - DA35D0881E1A6309007DED41 /* one-liner.json in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA8847D01CBAF91600AB86E3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DA8933BC1CCD2CA100E68420 /* Foundation.strings in Resources */, - DA8933A31CCC95B000E68420 /* Localizable.strings in Resources */, - 960D0C361ECF5AAF008E151F /* Images.xcassets in Resources */, - DA8933F01CCD387900E68420 /* strip-frameworks.sh in Resources */, - DAC49C5C1CD02BC9009E1AA3 /* Localizable.stringsdict in Resources */, - DA8933BF1CCD2CAD00E68420 /* Foundation.stringsdict in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA8933D31CCD306400E68420 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DA8933E01CCD31DF00E68420 /* Localizable.strings in Resources */, - DA8933DB1CCD31D400E68420 /* Foundation.strings in Resources */, - 960D0C371ECF5AAF008E151F /* Images.xcassets in Resources */, - DA8933DC1CCD31D400E68420 /* Foundation.stringsdict in Resources */, - DAC49C5D1CD02BC9009E1AA3 /* Localizable.stringsdict in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DABCABA61CB80692000A7C39 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DA89633A1CC549A100684375 /* tiles in Resources */, - DA8963391CC549A100684375 /* styles in Resources */, - DABCABBA1CB80692000A7C39 /* LaunchScreen.storyboard in Resources */, - DA8963381CC549A100684375 /* sprites in Resources */, - DABCABB71CB80692000A7C39 /* Assets.xcassets in Resources */, - DA8963371CC549A100684375 /* glyphs in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 074A7F0B2277BD67001A62D1 /* Insert Mapbox Access Token */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "$(TARGET_BUILD_DIR)/$(INFOPLIST_PATH)", - ); - name = "Insert Mapbox Access Token"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "$SRCROOT/app/insert_access_token.sh\n"; - }; - 07796BA2227908CB0059CAF1 /* Insert Mapbox Access Token */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "$(SRCROOT)/$(INFOPLIST_PATH)", - ); - name = "Insert Mapbox Access Token"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/(INFOPLIST_PATH)", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "$SRCROOT/app/insert_access_token.sh\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 16376B031FFD9DAF0000563E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CA4EB8C720863487006AB465 /* MGLStyleLayerIntegrationTests.m in Sources */, - CA7766842229C11A0008DE9E /* SMCalloutView.m in Sources */, - 16376B0A1FFD9DAF0000563E /* MBGLIntegrationTests.mm in Sources */, - CA4F3BDE230F74C3008BAFEA /* MGLMapViewPendingBlockTests.m in Sources */, - CA88DC3021C85D900059ED5A /* MGLStyleURLIntegrationTest.m in Sources */, - CA0C27942076CA19001CE5B7 /* MGLMapViewIntegrationTest.m in Sources */, - CA7766832229C10E0008DE9E /* MGLCompactCalloutView.m in Sources */, - CAE7AD5520F46EF5003B6782 /* MGLMapSnapshotterSwiftTests.swift in Sources */, - CA0C27922076C804001CE5B7 /* MGLShapeSourceTests.m in Sources */, - 077061DA215DA00E000FEF62 /* MGLTestLocationManager.m in Sources */, - CA0B3C022329DE9A00E4B493 /* MGLTestAssertionHandler.m in Sources */, - CA6914B520E67F50002DB0EE /* MGLAnnotationViewIntegrationTests.mm in Sources */, - CA4F3BE223107793008BAFEA /* MGLCameraTransitionTests.mm in Sources */, - CA4C54FE2324948100A81659 /* MGLSourceTests.swift in Sources */, - CA1B4A512099FB2200EDD491 /* MGLMapSnapshotterTest.m in Sources */, - CA4F3BE4231077B9008BAFEA /* MGLCameraTransitionFinishTests.mm in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 16376B2B1FFDB4B40000563E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 16376B411FFDB4B40000563E /* main.m in Sources */, - 16376B331FFDB4B40000563E /* AppDelegate.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA1DC9461CB6C1C2006E619F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DA1DC9971CB6E046006E619F /* main.m in Sources */, - 354B839C1D2E9B48005D9406 /* MBXUserLocationAnnotationView.m in Sources */, - 965DF51120F9430500438AAC /* MBXFrameTimeGraphView.m in Sources */, - DA1DC9991CB6E054006E619F /* MBXAppDelegate.m in Sources */, - 6FA9341721EF372100AA9CA8 /* MBXOrnamentsViewController.m in Sources */, - DA1DC96B1CB6C6B7006E619F /* MBXOfflinePacksTableViewController.m in Sources */, - 075AF845227B67C6008D7A4C /* MBXStateManager.m in Sources */, - DA1DC96A1CB6C6B7006E619F /* MBXCustomCalloutView.m in Sources */, - 075AF842227B6762008D7A4C /* MBXState.m in Sources */, - 927FBCFC1F4DAA8300F8BF1F /* MBXSnapshotsViewController.m in Sources */, - DA1DC99B1CB6E064006E619F /* MBXViewController.m in Sources */, - 40FDA76B1CCAAA6800442548 /* MBXAnnotationView.m in Sources */, - 1F26B6C120E189C9007BCC21 /* MBXCustomLocationViewController.m in Sources */, - 3E6465D62065767A00685536 /* LimeGreenStyleLayer.m in Sources */, - 632281DF1E6F855900D75A5D /* MBXEmbeddedMapViewController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA2E884D1CC036F400F24E7B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A4DE3DCC23038CCA005B3473 /* MGLMockGestureRecognizers.m in Sources */, - A4DE3DCB23038C98005B3473 /* MGLMockGestureRecognizers.h in Sources */, - CAAA65D92321BBA900F08A39 /* MGLTestAssertionHandler.m in Sources */, - 6407D6701E0085FD00F6A9C3 /* MGLDocumentationExampleTests.swift in Sources */, - DA2E88631CC0382C00F24E7B /* MGLOfflineRegionTests.m in Sources */, - 409F43FD1E9E781C0048729D /* MGLMapViewDelegateIntegrationTests.swift in Sources */, - DA2E88651CC0382C00F24E7B /* MGLStyleTests.mm in Sources */, - DA2E88611CC0382C00F24E7B /* MGLGeometryTests.mm in Sources */, - 170C437D2029D97900863DF0 /* MGLHeatmapStyleLayerTests.mm in Sources */, - 170C437C2029D96F00863DF0 /* MGLHeatmapColorTests.mm in Sources */, - 357579801D501E09000B822E /* MGLFillStyleLayerTests.mm in Sources */, - 35D9DDE21DA25EEC00DAAD69 /* MGLCodingTests.mm in Sources */, - DA1F8F3D1EBD287B00367E42 /* MGLDocumentationGuideTests.swift in Sources */, - 076171C32139C70900668A35 /* MGLMapViewTests.m in Sources */, - 3598544D1E1D38AA00B29F84 /* MGLDistanceFormatterTests.m in Sources */, - 071BBB071EE77631001FB02A /* MGLImageSourceTests.m in Sources */, - DA2DBBCE1D51E80400D38FF9 /* MGLStyleLayerTests.m in Sources */, - DA35A2C61CCA9F8300E826B2 /* MGLCompassDirectionFormatterTests.m in Sources */, - DAE7DEC21E245455007505A6 /* MGLNSStringAdditionsTests.m in Sources */, - CA86FF0E22D8D5A0009EB14A /* MGLNetworkConfigurationTests.m in Sources */, - 4085AF091D933DEA00F11B22 /* MGLTileSetTests.mm in Sources */, - DAEDC4341D603417000224FF /* MGLAttributionInfoTests.m in Sources */, - 1F7454A91ED08AB400021D39 /* MGLLightTest.mm in Sources */, - 357579851D502AF5000B822E /* MGLSymbolStyleLayerTests.mm in Sources */, - 357579871D502AFE000B822E /* MGLLineStyleLayerTests.mm in Sources */, - 357579891D502B06000B822E /* MGLCircleStyleLayerTests.mm in Sources */, - 40CFA6511D7875BB008103BD /* MGLShapeSourceTests.mm in Sources */, - DA35A2C51CCA9F8300E826B2 /* MGLClockDirectionFormatterTests.m in Sources */, - 35B8E08C1D6C8B5100E768D2 /* MGLPredicateTests.mm in Sources */, - 96E6145622CC135200109F14 /* MGLMapViewCompassViewTests.mm in Sources */, - 96036A0620059BBA00510F3D /* MGLNSOrthographyAdditionsTests.m in Sources */, - 1F95931D1E6DE2E900D5B294 /* MGLNSDateAdditionsTests.mm in Sources */, - DA695426215B1E76002041A4 /* MGLMapCameraTests.m in Sources */, - 96381C0222C6F3950053497D /* MGLMapViewPitchTests.m in Sources */, - CA8FBC0921A47BB100D1203C /* MGLRendererConfigurationTests.mm in Sources */, - CAD9D0AA22A86D6F001B25EE /* MGLResourceTests.mm in Sources */, - DD58A4C61D822BD000E1F038 /* MGLExpressionTests.mm in Sources */, - 3575798B1D502B0C000B822E /* MGLBackgroundStyleLayerTests.mm in Sources */, - 9658C155204761FC00D8A674 /* MGLMapViewScaleBarTests.m in Sources */, - 409D0A0D1ED614CE00C95D0C /* MGLAnnotationViewIntegrationTests.swift in Sources */, - 9686D1BD22D9357700194EA0 /* MGLMapViewZoomTests.mm in Sources */, - DA2E88621CC0382C00F24E7B /* MGLOfflinePackTests.mm in Sources */, - 55E2AD131E5B125400E8C587 /* MGLOfflineStorageTests.mm in Sources */, - 07D8C6FF1F67562C00381808 /* MGLComputedShapeSourceTests.m in Sources */, - 920A3E5D1E6F995200C16EFC /* MGLSourceQueryTests.m in Sources */, - DA5DB12A1FABF1EE001C2326 /* MGLMapAccessibilityElementTests.m in Sources */, - 96ED34DE22374C0900E9FCA9 /* MGLMapViewDirectionTests.mm in Sources */, - 1F0196AA23174B0700F5C819 /* MGLMapViewContentInsetTests.m in Sources */, - FAE1CDCB1E9D79CB00C40B5B /* MGLFillExtrusionStyleLayerTests.mm in Sources */, - DA35A2AA1CCA058D00E826B2 /* MGLCoordinateFormatterTests.m in Sources */, - 357579831D502AE6000B822E /* MGLRasterStyleLayerTests.mm in Sources */, - 3502D6CC22AE88D5006BDFCE /* MGLAccountManagerTests.m in Sources */, - DAF25720201902BC00367EF5 /* MGLHillshadeStyleLayerTests.mm in Sources */, - 1F8E8A81233A9FD9009B51ED /* MGLMapViewGestureRecognizerTests.mm in Sources */, - 353D23961D0B0DFE002BE09D /* MGLAnnotationViewTests.m in Sources */, - DA0CD5901CF56F6A00A5F5A5 /* MGLFeatureTests.mm in Sources */, - 556660D81E1D085500E2C41B /* MGLVersionNumber.m in Sources */, - 4031ACFF1E9FD29F00A3EA26 /* MGLSDKTestHelpers.swift in Sources */, - 16376B491FFEED010000563E /* MGLMapViewLayoutTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA8847CD1CBAF91600AB86E3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9C188C4F2242C95A0022FA55 /* MMEDate.m in Sources */, - 35136D391D42271A00C20EFD /* MGLBackgroundStyleLayer.mm in Sources */, - 3510FFEC1D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.mm in Sources */, - DAED38651D62D0FC00D7640F /* NSURL+MGLAdditions.m in Sources */, - 40834BEC1FE05E1800C1BD0D /* MMEEvent.m in Sources */, - 9620BB3A1E69FE1700705A1D /* MGLSDKUpdateChecker.mm in Sources */, - 354B83981D2E873E005D9406 /* MGLUserLocationAnnotationView.m in Sources */, - 40834BEE1FE05E1800C1BD0D /* MMEEventsConfiguration.m in Sources */, - DA88485D1CBAFB9800AB86E3 /* MGLFaux3DUserLocationAnnotationView.m in Sources */, - DAD165701CF41981001FF4B9 /* MGLFeature.mm in Sources */, - 30E578191DAA855E0050F07E /* UIImage+MGLAdditions.mm in Sources */, - ACD0245A2187EABA00D8C8A7 /* MMEMetricsManager.m in Sources */, - 550570C622958FB400228ECF /* MGLMapView+Impl.mm in Sources */, - 40EDA1C11CFE0E0500D9EA68 /* MGLAnnotationContainerView.m in Sources */, - DA8848541CBAFB9800AB86E3 /* MGLCompactCalloutView.m in Sources */, - 40834BEB1FE05E1800C1BD0D /* MMEDependencyManager.m in Sources */, - DA8848251CBAFA6200AB86E3 /* MGLPointAnnotation.mm in Sources */, - 5580B45D229570A10091291B /* MGLMapView+OpenGL.mm in Sources */, - 40834BEA1FE05E1800C1BD0D /* MMEConstants.m in Sources */, - AC46EB5F225E60510039C013 /* MMEPinningConfigurationProvider.m in Sources */, - 929EFFAB1F56DCD4003A77D5 /* MGLAnnotationView.mm in Sources */, - 35136D3C1D42272500C20EFD /* MGLCircleStyleLayer.mm in Sources */, - DD9BE4F81EB263C50079A3AF /* UIViewController+MGLAdditions.m in Sources */, - 350098DE1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.mm in Sources */, - DA6408DD1DA4E7D300908C90 /* MGLVectorStyleLayer.mm in Sources */, - 40834BF71FE05E1800C1BD0D /* MMEUniqueIdentifier.m in Sources */, - 3566C7681D4A77BA008152BC /* MGLShapeSource.mm in Sources */, - 967C864D210A9D3C004DF794 /* UIDevice+MGLAdditions.m in Sources */, - AC46EB5B225E600A0039C013 /* MMECertPin.m in Sources */, - 400533021DB0862B0069F638 /* NSArray+MGLAdditions.mm in Sources */, - 6F018BAE220031B8003E7269 /* UIView+MGLAdditions.m in Sources */, - 96036A03200565C700510F3D /* NSOrthography+MGLAdditions.m in Sources */, - ACA65F592140697200537748 /* MMEDispatchManager.m in Sources */, - 40834BF31FE05E1800C1BD0D /* MMETimerManager.m in Sources */, - 9C6E281822A97FDC0056B7BE /* CLLocation+MMEMobileEvents.m in Sources */, - 35136D421D42274500C20EFD /* MGLRasterStyleLayer.mm in Sources */, - 3538AA1F1D542239008EC33D /* MGLForegroundStyleLayer.mm in Sources */, - 406E99B91FFEFF1B00D9FFCC /* MMEEventLogReportViewController.m in Sources */, - ACA65F53214066E600537748 /* MMEConfigurator.m in Sources */, - 9C6E281722A97FDC0056B7BE /* NSData+MMEGZIP.m in Sources */, - DA00FC901D5EEB0D009AABC8 /* MGLAttributionInfo.mm in Sources */, - DA88482D1CBAFA6200AB86E3 /* NSBundle+MGLAdditions.m in Sources */, - 406E99BB1FFF006C00D9FFCC /* MMEUINavigation.m in Sources */, - 966FCF541F3C323300F2B6DE /* MGLUserLocationHeadingArrowLayer.m in Sources */, - DA88485B1CBAFB9800AB86E3 /* MGLUserLocation.m in Sources */, - 927FBD011F4DB05500F8BF1F /* MGLMapSnapshotter.mm in Sources */, - 350098BD1D480108004B2AF0 /* MGLVectorTileSource.mm in Sources */, - 3566C76E1D4A8DFA008152BC /* MGLRasterTileSource.mm in Sources */, - DA88488C1CBB037E00AB86E3 /* SMCalloutView.m in Sources */, - 9C6E281322A97FDC0056B7BE /* MMECategoryLoader.m in Sources */, - 35136D4E1D4277FC00C20EFD /* MGLSource.mm in Sources */, - 1F06668D1EC64F8E001C16D7 /* MGLLight.mm in Sources */, - DA35A2B81CCA9A5D00E826B2 /* MGLClockDirectionFormatter.m in Sources */, - DAD1657A1CF4CDFF001FF4B9 /* MGLShapeCollection.mm in Sources */, - DAF25719201901E200367EF5 /* MGLHillshadeStyleLayer.mm in Sources */, - 9C6E281922A97FDC0056B7BE /* UIKit+MMEMobileEvents.m in Sources */, - 35136D451D42275100C20EFD /* MGLSymbolStyleLayer.mm in Sources */, - CF75A91522D85E860058A5C4 /* MGLLoggingConfiguration.mm in Sources */, - 35599DED1D46F14E0048254D /* MGLStyleValue.mm in Sources */, - CFF9F98823A24BF500B0DE92 /* MGLNetworkIntegrationManager.m in Sources */, - DA8848211CBAFA6200AB86E3 /* MGLOfflinePack.mm in Sources */, - 0778DD441F67556C00A73B34 /* MGLComputedShapeSource.mm in Sources */, - 3557F7B21E1D27D300CCA5E6 /* MGLDistanceFormatter.m in Sources */, - 9C6E282B22A981570056B7BE /* MGLMapboxEvents.m in Sources */, - 1FCCEC36222605C400302E3B /* MGLSDKMetricsManager.m in Sources */, - 96E6145B22CC169000109F14 /* MGLCompassButton.mm in Sources */, - 40834BE71FE05E1800C1BD0D /* MMEAPIClient.m in Sources */, - DA8848591CBAFB9800AB86E3 /* MGLMapView.mm in Sources */, - DA8848501CBAFB9800AB86E3 /* MGLAnnotationImage.m in Sources */, - 40834BF01FE05E1800C1BD0D /* MMELocationManager.m in Sources */, - DA8848281CBAFA6200AB86E3 /* MGLShape.mm in Sources */, - DA35A2B31CCA141D00E826B2 /* MGLCompassDirectionFormatter.m in Sources */, - DD0902A91DB1929D00C5BDCE /* MGLNetworkConfiguration.m in Sources */, - 35D13AB91D3D15E300AFB4E0 /* MGLStyleLayer.mm in Sources */, - 74CB5EB3219B252C00102936 /* MGLStyleLayerManager.mm in Sources */, - DA35A2CB1CCAAAD200E826B2 /* NSValue+MGLAdditions.m in Sources */, - 071BBB001EE7613F001FB02A /* MGLImageSource.mm in Sources */, - DA8848321CBAFA6200AB86E3 /* NSString+MGLAdditions.m in Sources */, - 408AA8581DAEDA1E00022900 /* NSDictionary+MGLAdditions.mm in Sources */, - DA35A2A11CC9E95F00E826B2 /* MGLCoordinateFormatter.m in Sources */, - 92FC0AEE207CEE16007B6B54 /* MGLShapeOfflineRegion.mm in Sources */, - ACD0245E2187EACB00D8C8A7 /* MMEMetrics.m in Sources */, - 40834BF61FE05E1800C1BD0D /* MMEUIApplicationWrapper.m in Sources */, - DA8848291CBAFA6200AB86E3 /* MGLStyle.mm in Sources */, - 357FE2DF1E02D2B20068B753 /* NSCoder+MGLAdditions.mm in Sources */, - 1FF48589223710BE00F19727 /* MGLAttributedExpression.m in Sources */, - DA88481C1CBAFA6200AB86E3 /* MGLGeometry.mm in Sources */, - 558DE7A21E5615E400C7916D /* MGLFoundation.mm in Sources */, - 40834BE91FE05E1800C1BD0D /* MMECommonEventData.m in Sources */, - 3510FFF21D6D9D8C00F413B2 /* NSExpression+MGLAdditions.mm in Sources */, - DA88481F1CBAFA6200AB86E3 /* MGLMultiPoint.mm in Sources */, - DA88482B1CBAFA6200AB86E3 /* MGLTypes.m in Sources */, - FA68F14D1E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.mm in Sources */, - 404C26E41D89B877000AA13D /* MGLTileSource.mm in Sources */, - 355AE0011E9281DA00F3939D /* MGLScaleBar.mm in Sources */, - DA88481D1CBAFA6200AB86E3 /* MGLMapCamera.mm in Sources */, - DACA86282019218600E9693A /* MGLRasterDEMSource.mm in Sources */, - DA8848261CBAFA6200AB86E3 /* MGLPolygon.mm in Sources */, - 35B82BFA1D6C5F8400B1B721 /* NSPredicate+MGLAdditions.mm in Sources */, - 40834BF91FE05E1800C1BD0D /* MMEReachability.m in Sources */, - 40834BF21FE05E1800C1BD0D /* MMENSURLSessionWrapper.m in Sources */, - 966FCF4E1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.m in Sources */, - 8989B17E201A48EB0081CF59 /* MGLHeatmapStyleLayer.mm in Sources */, - 40834BED1FE05E1800C1BD0D /* MMEEventLogger.m in Sources */, - 353AFA161D65AB17005A69F4 /* NSDate+MGLAdditions.mm in Sources */, - 1FCAE2A420B872A400C577DD /* MGLLocationManager.m in Sources */, - 9C6E281C22A97FDC0056B7BE /* CLLocationManager+MMEMobileEvents.m in Sources */, - 40834BEF1FE05E1800C1BD0D /* MMEEventsManager.m in Sources */, - 35D13AC51D3D19DD00AFB4E0 /* MGLFillStyleLayer.mm in Sources */, - DA8848241CBAFA6200AB86E3 /* MGLOfflineStorage.mm in Sources */, - DA88482A1CBAFA6200AB86E3 /* MGLTilePyramidOfflineRegion.mm in Sources */, - 4049C29F1DB6CD6C00B3F799 /* MGLPointCollection.mm in Sources */, - 35136D3F1D42273000C20EFD /* MGLLineStyleLayer.mm in Sources */, - DA704CC41F65A475004B3F28 /* MGLMapAccessibilityElement.mm in Sources */, - DA72620D1DEEE3480043BB89 /* MGLOpenGLStyleLayer.mm in Sources */, - DA88481A1CBAFA6200AB86E3 /* MGLAccountManager.m in Sources */, - 3510FFFB1D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.mm in Sources */, - AC518E03201BB56000EBC820 /* MGLTelemetryConfig.m in Sources */, - DA8848271CBAFA6200AB86E3 /* MGLPolyline.mm in Sources */, - 35CE61841D4165D9004F2359 /* UIColor+MGLAdditions.mm in Sources */, - 3EA93369F61CF70AFA50465D /* MGLRendererConfiguration.mm in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAA4E40F1CBB71D400178DFB /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 35136D3A1D42271A00C20EFD /* MGLBackgroundStyleLayer.mm in Sources */, - 3510FFED1D6D9C7A00F413B2 /* NSComparisonPredicate+MGLAdditions.mm in Sources */, - 354B83991D2E873E005D9406 /* MGLUserLocationAnnotationView.m in Sources */, - 40834C001FE05E1800C1BD0D /* MMEEvent.m in Sources */, - 9620BB3B1E69FE1700705A1D /* MGLSDKUpdateChecker.mm in Sources */, - DAA4E4221CBB730400178DFB /* MGLPointAnnotation.mm in Sources */, - 40834C021FE05E1800C1BD0D /* MMEEventsConfiguration.m in Sources */, - DAED38661D62D0FC00D7640F /* NSURL+MGLAdditions.m in Sources */, - DAD165711CF41981001FF4B9 /* MGLFeature.mm in Sources */, - 30E5781A1DAA855E0050F07E /* UIImage+MGLAdditions.mm in Sources */, - ACD0245B2187EABA00D8C8A7 /* MMEMetricsManager.m in Sources */, - 40EDA1C21CFE0E0500D9EA68 /* MGLAnnotationContainerView.m in Sources */, - 550570C722958FB400228ECF /* MGLMapView+Impl.mm in Sources */, - DAA4E4291CBB730400178DFB /* NSBundle+MGLAdditions.m in Sources */, - 40834BFF1FE05E1800C1BD0D /* MMEDependencyManager.m in Sources */, - 40834BFE1FE05E1800C1BD0D /* MMEConstants.m in Sources */, - 35136D3D1D42272500C20EFD /* MGLCircleStyleLayer.mm in Sources */, - 5580B45E229570A10091291B /* MGLMapView+OpenGL.mm in Sources */, - DD9BE4FA1EB263F40079A3AF /* UIViewController+MGLAdditions.m in Sources */, - AC46EB60225E60510039C013 /* MMEPinningConfigurationProvider.m in Sources */, - 350098DF1D484E60004B2AF0 /* NSValue+MGLStyleAttributeAdditions.mm in Sources */, - DA6408DE1DA4E7D300908C90 /* MGLVectorStyleLayer.mm in Sources */, - 3566C7691D4A77BA008152BC /* MGLShapeSource.mm in Sources */, - 9C6E282722A980AC0056B7BE /* UIKit+MMEMobileEvents.m in Sources */, - 40834C0B1FE05E1800C1BD0D /* MMEUniqueIdentifier.m in Sources */, - 400533031DB086490069F638 /* NSArray+MGLAdditions.mm in Sources */, - 35136D431D42274500C20EFD /* MGLRasterStyleLayer.mm in Sources */, - 9C6E282322A980AC0056B7BE /* MMECategoryLoader.m in Sources */, - 967C864E210A9D3C004DF794 /* UIDevice+MGLAdditions.m in Sources */, - 96036A04200565C700510F3D /* NSOrthography+MGLAdditions.m in Sources */, - AC46EB5C225E600A0039C013 /* MMECertPin.m in Sources */, - 6F018BB1220031C1003E7269 /* UIView+MGLAdditions.m in Sources */, - 40834C071FE05E1800C1BD0D /* MMETimerManager.m in Sources */, - ACA65F5A2140697200537748 /* MMEDispatchManager.m in Sources */, - 3538AA201D542239008EC33D /* MGLForegroundStyleLayer.mm in Sources */, - DA00FC911D5EEB0D009AABC8 /* MGLAttributionInfo.mm in Sources */, - 40834C051FE05E1800C1BD0D /* MMEDate.m in Sources */, - 9C6E282122A980AC0056B7BE /* CLLocationManager+MMEMobileEvents.m in Sources */, - 406E99BA1FFEFF1B00D9FFCC /* MMEEventLogReportViewController.m in Sources */, - ACA65F54214066E600537748 /* MMEConfigurator.m in Sources */, - DAA4E4201CBB730400178DFB /* MGLOfflinePack.mm in Sources */, - 966FCF551F3C323500F2B6DE /* MGLUserLocationHeadingArrowLayer.m in Sources */, - DAA4E4331CBB730400178DFB /* MGLUserLocation.m in Sources */, - 406E99BC1FFF006D00D9FFCC /* MMEUINavigation.m in Sources */, - 927FBD021F4DB05500F8BF1F /* MGLMapSnapshotter.mm in Sources */, - 350098BE1D480108004B2AF0 /* MGLVectorTileSource.mm in Sources */, - 3566C76F1D4A8DFA008152BC /* MGLRasterTileSource.mm in Sources */, - DAA4E4351CBB730400178DFB /* SMCalloutView.m in Sources */, - 35136D4F1D4277FC00C20EFD /* MGLSource.mm in Sources */, - DA35A2B91CCA9A5D00E826B2 /* MGLClockDirectionFormatter.m in Sources */, - DAD1657B1CF4CDFF001FF4B9 /* MGLShapeCollection.mm in Sources */, - DAA4E4251CBB730400178DFB /* MGLShape.mm in Sources */, - 35136D461D42275100C20EFD /* MGLSymbolStyleLayer.mm in Sources */, - DAF2571A201901E200367EF5 /* MGLHillshadeStyleLayer.mm in Sources */, - 35599DEE1D46F14E0048254D /* MGLStyleValue.mm in Sources */, - DAA4E42B1CBB730400178DFB /* NSString+MGLAdditions.m in Sources */, - DAA4E4261CBB730400178DFB /* MGLStyle.mm in Sources */, - CF75A91622D85E860058A5C4 /* MGLLoggingConfiguration.mm in Sources */, - DAA32CC31E4C6B65006F8D24 /* MGLDistanceFormatter.m in Sources */, - CFF9F98923A24BF500B0DE92 /* MGLNetworkIntegrationManager.m in Sources */, - DAA4E41D1CBB730400178DFB /* MGLGeometry.mm in Sources */, - 40834BFB1FE05E1800C1BD0D /* MMEAPIClient.m in Sources */, - 1FCCEC37222605C400302E3B /* MGLSDKMetricsManager.m in Sources */, - 9C6E282C22A981580056B7BE /* MGLMapboxEvents.m in Sources */, - DAA4E41F1CBB730400178DFB /* MGLMultiPoint.mm in Sources */, - 96E6145C22CC169000109F14 /* MGLCompassButton.mm in Sources */, - DD0902AA1DB1929D00C5BDCE /* MGLNetworkConfiguration.m in Sources */, - 40834C041FE05E1800C1BD0D /* MMELocationManager.m in Sources */, - 9C6E281F22A980AC0056B7BE /* CLLocation+MMEMobileEvents.m in Sources */, - DA35A2B41CCA141D00E826B2 /* MGLCompassDirectionFormatter.m in Sources */, - 9C6E282522A980AC0056B7BE /* NSData+MMEGZIP.m in Sources */, - 35D13ABA1D3D15E300AFB4E0 /* MGLStyleLayer.mm in Sources */, - 071BBAFF1EE7613E001FB02A /* MGLImageSource.mm in Sources */, - DA35A2CC1CCAAAD200E826B2 /* NSValue+MGLAdditions.m in Sources */, - 408AA8591DAEDA1E00022900 /* NSDictionary+MGLAdditions.mm in Sources */, - 74CB5EB4219B252C00102936 /* MGLStyleLayerManager.mm in Sources */, - DAA4E4281CBB730400178DFB /* MGLTypes.m in Sources */, - DA35A2A21CC9E95F00E826B2 /* MGLCoordinateFormatter.m in Sources */, - 357FE2E01E02D2B20068B753 /* NSCoder+MGLAdditions.mm in Sources */, - 92FC0AEF207CEE16007B6B54 /* MGLShapeOfflineRegion.mm in Sources */, - DAA4E42D1CBB730400178DFB /* MGLAnnotationImage.m in Sources */, - ACD0245F2187EACB00D8C8A7 /* MMEMetrics.m in Sources */, - 40834C0A1FE05E1800C1BD0D /* MMEUIApplicationWrapper.m in Sources */, - 558DE7A31E5615E400C7916D /* MGLFoundation.mm in Sources */, - 3510FFF31D6D9D8C00F413B2 /* NSExpression+MGLAdditions.mm in Sources */, - DAA4E4321CBB730400178DFB /* MGLMapView.mm in Sources */, - 1FF4858A223710BE00F19727 /* MGLAttributedExpression.m in Sources */, - 40834BFD1FE05E1800C1BD0D /* MMECommonEventData.m in Sources */, - DAA4E41E1CBB730400178DFB /* MGLMapCamera.mm in Sources */, - FA68F14E1E9D656600F9F6C2 /* MGLFillExtrusionStyleLayer.mm in Sources */, - 1F7454921ECBB42C00021D39 /* MGLLight.mm in Sources */, - 404C26E51D89B877000AA13D /* MGLTileSource.mm in Sources */, - 355AE0021E9281DA00F3939D /* MGLScaleBar.mm in Sources */, - 4018B1C81CDC287F00F666AF /* MGLAnnotationView.mm in Sources */, - 07D8C6FB1F67560100381808 /* MGLComputedShapeSource.mm in Sources */, - DAA4E4341CBB730400178DFB /* MGLFaux3DUserLocationAnnotationView.m in Sources */, - DACA86292019218600E9693A /* MGLRasterDEMSource.mm in Sources */, - 35B82BFB1D6C5F8400B1B721 /* NSPredicate+MGLAdditions.mm in Sources */, - 40834C0D1FE05E1800C1BD0D /* MMEReachability.m in Sources */, - 40834C061FE05E1800C1BD0D /* MMENSURLSessionWrapper.m in Sources */, - 966FCF4F1F3A5C9200F2B6DE /* MGLUserLocationHeadingBeamLayer.m in Sources */, - DAA4E4231CBB730400178DFB /* MGLPolygon.mm in Sources */, - 8989B17F201A48EB0081CF59 /* MGLHeatmapStyleLayer.mm in Sources */, - 353AFA171D65AB17005A69F4 /* NSDate+MGLAdditions.mm in Sources */, - 40834C011FE05E1800C1BD0D /* MMEEventLogger.m in Sources */, - 35D13AC61D3D19DD00AFB4E0 /* MGLFillStyleLayer.mm in Sources */, - 1FCAE2A520B872A400C577DD /* MGLLocationManager.m in Sources */, - 40834C031FE05E1800C1BD0D /* MMEEventsManager.m in Sources */, - DAA4E4211CBB730400178DFB /* MGLOfflineStorage.mm in Sources */, - 4049C2A01DB6CD6C00B3F799 /* MGLPointCollection.mm in Sources */, - 35136D401D42273000C20EFD /* MGLLineStyleLayer.mm in Sources */, - DA704CC51F65A475004B3F28 /* MGLMapAccessibilityElement.mm in Sources */, - DA72620E1DEEE3480043BB89 /* MGLOpenGLStyleLayer.mm in Sources */, - DAA4E42F1CBB730400178DFB /* MGLCompactCalloutView.m in Sources */, - 3510FFFC1D6DCC4700F413B2 /* NSCompoundPredicate+MGLAdditions.mm in Sources */, - AC518E04201BB56100EBC820 /* MGLTelemetryConfig.m in Sources */, - DAA4E4271CBB730400178DFB /* MGLTilePyramidOfflineRegion.mm in Sources */, - DAA4E41C1CBB730400178DFB /* MGLAccountManager.m in Sources */, - 35CE61851D4165D9004F2359 /* UIColor+MGLAdditions.mm in Sources */, - DAA4E4241CBB730400178DFB /* MGLPolyline.mm in Sources */, - 3EA9366247780E4F252652A8 /* MGLRendererConfiguration.mm in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DABCABA41CB80692000A7C39 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DABCABB21CB80692000A7C39 /* MBXBenchViewController.mm in Sources */, - DABCABAF1CB80692000A7C39 /* MBXBenchAppDelegate.m in Sources */, - DABCABC21CB8071D000A7C39 /* locations.cpp in Sources */, - DABCABAC1CB80692000A7C39 /* main.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 165D0CE620005351009A3C66 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DA8847D11CBAF91600AB86E3 /* dynamic */; - targetProxy = 165D0CE520005351009A3C66 /* PBXContainerItemProxy */; - }; - CABE5DAC2072FA660003AF3C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 16376B2E1FFDB4B40000563E /* Integration Test Harness */; - targetProxy = CABE5DAB2072FA660003AF3C /* PBXContainerItemProxy */; - }; - DA25D5CA1CCDA0CC00607828 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DA8933D41CCD306400E68420 /* bundle */; - targetProxy = DA25D5C91CCDA0CC00607828 /* PBXContainerItemProxy */; - }; - DA2E88581CC036F400F24E7B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DA8847D11CBAF91600AB86E3 /* dynamic */; - targetProxy = DA2E88571CC036F400F24E7B /* PBXContainerItemProxy */; - }; - DA8847D81CBAF91600AB86E3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DA8847D11CBAF91600AB86E3 /* dynamic */; - targetProxy = DA8847D71CBAF91600AB86E3 /* PBXContainerItemProxy */; - }; - DAA4E40B1CBB6C9500178DFB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DA8847D11CBAF91600AB86E3 /* dynamic */; - targetProxy = DAA4E40A1CBB6C9500178DFB /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 16376B3C1FFDB4B40000563E /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 16376B3D1FFDB4B40000563E /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - 96E027251E57C76E004B8E66 /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 96E027241E57C76E004B8E66 /* Base */, - 96E027271E57C77A004B8E66 /* ja */, - 96E027281E57C7DB004B8E66 /* zh-Hans */, - 96E027291E57C7DE004B8E66 /* zh-Hant */, - 96E0272A1E57C7DF004B8E66 /* de */, - 96E0272B1E57C7E3004B8E66 /* sv */, - 96E0272C1E57C7E5004B8E66 /* fr */, - 96E0272D1E57C7E6004B8E66 /* vi */, - 96E0272E1E57C7E7004B8E66 /* pt-BR */, - 9660916B1E5BBFD700A9A03B /* es */, - 9660916C1E5BBFD900A9A03B /* pl */, - 9660916D1E5BBFDB00A9A03B /* ru */, - 9660916E1E5BBFDC00A9A03B /* uk */, - 9660916F1E5BBFDE00A9A03B /* lt */, - DA618B1A1E68883900CB7F44 /* ca */, - DA618B2B1E68932D00CB7F44 /* fi */, - DAE8CCAD1E6E8C70009B5CB0 /* nl */, - DA5C09BA1EFC48550056B178 /* hu */, - DA3389651FA3EE1B001EA329 /* bg */, - DA80E9601FE84AD90065FC9B /* ar */, - DACBC60B20118ABE00C4D7E2 /* he */, - DAD88E07202ACFE800AAA536 /* da */, - DA93409B208562EB0059919A /* pt-PT */, - DAFEB3742093AE3700A86A83 /* ko */, - 1FDB00C721F8F14E00D21389 /* cs */, - DAE9ED572238990A00C01291 /* gl */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - DA89339F1CCC951200E68420 /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - DA8933A01CCC951200E68420 /* Base */, - 20DABE881DF78148007AC5FF /* zh-Hans */, - DAFBD0D31E3FA7A1000CD6BF /* zh-Hant */, - DAA32CA41E4C4502006F8D24 /* de */, - DAA32CAC1E4C4971006F8D24 /* fr */, - DAA32CB71E4C4ED8006F8D24 /* sv */, - DAA32CBC1E4C4F5D006F8D24 /* vi */, - DA9C012D1E4C7B1F00C4742A /* pt-BR */, - 968F36B41E4D0FC6003A5522 /* ja */, - DA737ADB1E5913BA00AD2CDE /* es */, - DA737AE71E59172C00AD2CDE /* ru */, - DA737AE91E5917C300AD2CDE /* uk */, - DA1AC01B1E5B8774006DF1D6 /* lt */, - DA618B1B1E68884E00CB7F44 /* ca */, - DA5C09BB1EFC486C0056B178 /* hu */, - DA3389681FA3EE48001EA329 /* bg */, - DACBC60D20118ADE00C4D7E2 /* he */, - DAD88E0A202AD03C00AAA536 /* da */, - DA93409D208563220059919A /* pt-PT */, - DAFEB3772093AE7900A86A83 /* ko */, - 1FDB00CA21F8F15100D21389 /* cs */, - DAE9ED5A2238993A00C01291 /* gl */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - DA8933BA1CCD2CA100E68420 /* Foundation.strings */ = { - isa = PBXVariantGroup; - children = ( - DA8933BB1CCD2CA100E68420 /* Base */, - 20DABE861DF78148007AC5FF /* zh-Hans */, - DAFBD0D21E3FA7A1000CD6BF /* zh-Hant */, - DAA32CA31E4C44F1006F8D24 /* de */, - DAA32CB51E4C4CF4006F8D24 /* ja */, - DAA32CBD1E4C4F62006F8D24 /* vi */, - DA6023F11E4CE94300DBFF23 /* sv */, - DA618B1C1E6888EC00CB7F44 /* ca */, - DA618B251E68920500CB7F44 /* lt */, - DAE9E0F11EB7BF1B001E8E8B /* es */, - DA704CBB1F637311004B3F28 /* ru */, - DA704CC71F6663A3004B3F28 /* uk */, - DA33895F1FA3EAB7001EA329 /* pt-BR */, - DA3389661FA3EE28001EA329 /* bg */, - DACBC60C20118AD000C4D7E2 /* he */, - DAD88E08202AD01300AAA536 /* da */, - DAFEB3752093AE4800A86A83 /* ko */, - 1FDB00C821F8F14F00D21389 /* cs */, - DAE9ED582238992900C01291 /* gl */, - ); - name = Foundation.strings; - sourceTree = ""; - }; - DA8933BD1CCD2CAD00E68420 /* Foundation.stringsdict */ = { - isa = PBXVariantGroup; - children = ( - DA8933BE1CCD2CAD00E68420 /* en */, - DAA32CA11E4C44DB006F8D24 /* de */, - DAA32CAB1E4C491A006F8D24 /* fr */, - DA9C012C1E4C7ADB00C4742A /* pt-BR */, - DA6023F21E4CE94800DBFF23 /* sv */, - DA737ADA1E59139D00AD2CDE /* es */, - DA737AE01E59150A00AD2CDE /* pl */, - DA737AE51E5916D400AD2CDE /* ru */, - DA1AC0201E5B8917006DF1D6 /* uk */, - DA618B1D1E6888F500CB7F44 /* ca */, - DA618B261E68920D00CB7F44 /* lt */, - DACFE7981F66EA2100630DA8 /* vi */, - DA3389671FA3EE2F001EA329 /* bg */, - DA33896B1FA3EF4A001EA329 /* hu */, - DA80E9611FE84AEF0065FC9B /* ar */, - DAD88E09202AD01F00AAA536 /* da */, - DA93409C2085630C0059919A /* pt-PT */, - DAFEB3762093AE6800A86A83 /* ko */, - 1FDB00C921F8F15000D21389 /* cs */, - DAE9ED592238992E00C01291 /* gl */, - ); - name = Foundation.stringsdict; - sourceTree = ""; - }; - DABCABB81CB80692000A7C39 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - DABCABB91CB80692000A7C39 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - DAC49C5F1CD02BC9009E1AA3 /* Localizable.stringsdict */ = { - isa = PBXVariantGroup; - children = ( - DAC49C621CD07D74009E1AA3 /* en */, - DAA32CA21E4C44DD006F8D24 /* de */, - DAA32CA91E4C4919006F8D24 /* fr */, - DA9C012B1E4C7AD900C4742A /* pt-BR */, - DA618B111E68823600CB7F44 /* ru */, - DA618B191E68883700CB7F44 /* ca */, - 35DE35531EB7CBA8004917C5 /* sv */, - DA57D4AA1EBA8ED300793288 /* es */, - DA57D4AB1EBA909900793288 /* lt */, - DA57D4AC1EBA922A00793288 /* vi */, - DA704CBC1F637405004B3F28 /* uk */, - DA704CBD1F63746E004B3F28 /* zh-Hant */, - DA3389691FA3EE50001EA329 /* bg */, - DAD88E0B202AD04D00AAA536 /* da */, - DA93409E208563360059919A /* pt-PT */, - DAFEB3782093AE9200A86A83 /* ko */, - DAAE9B1C213A636B00F7D722 /* ar */, - 1FDB00CB21F8F15300D21389 /* cs */, - DAE9ED5B2238995A00C01291 /* gl */, - ); - name = Localizable.stringsdict; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 16376B0E1FFD9DAF0000563E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - GCC_C_LANGUAGE_STANDARD = gnu11; - HEADER_SEARCH_PATHS = "$(mbgl_core_INCLUDE_DIRECTORIES)"; - INFOPLIST_FILE = "Integration Tests/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.mapbox.integration-tests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Integration Tests/integration-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Integration Test Harness.app/Integration Test Harness"; - }; - name = Debug; - }; - 16376B0F1FFD9DAF0000563E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - GCC_C_LANGUAGE_STANDARD = gnu11; - HEADER_SEARCH_PATHS = "$(mbgl_core_INCLUDE_DIRECTORIES)"; - INFOPLIST_FILE = "Integration Tests/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.mapbox.integration-tests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Integration Tests/integration-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Integration Test Harness.app/Integration Test Harness"; - }; - name = Release; - }; - 16376B431FFDB4B40000563E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = GJZR2MEM28; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = "Integration Test Harness/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.mapbox.Integration-Test-Harness"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 16376B441FFDB4B40000563E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = GJZR2MEM28; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = "Integration Test Harness/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.mapbox.Integration-Test-Harness"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 96AF1AA321B615A3007CB696 /* RelWithDebInfo */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_GCD_PERFORMANCE = YES; - CLANG_ANALYZER_LOCALIZABILITY_EMPTY_CONTEXT = YES; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES; - CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_COMMIT_HASH = deadbeef; - CURRENT_SEMANTIC_VERSION = 1.0.0; - CURRENT_SHORT_VERSION = 1.0; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_CPP_RTTI = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ""; - "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = ""; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SYMROOT = ../../build/ios; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = RelWithDebInfo; - }; - 96AF1AA421B615A3007CB696 /* RelWithDebInfo */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_LOCALIZABILITY_EMPTY_CONTEXT = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = NO; - DEVELOPMENT_TEAM = GJZR2MEM28; - INFOPLIST_FILE = "$(SRCROOT)/app/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxGL; - PRODUCT_NAME = "Mapbox GL"; - }; - name = RelWithDebInfo; - }; - 96AF1AA521B615A3007CB696 /* RelWithDebInfo */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = GJZR2MEM28; - HEADER_SEARCH_PATHS = "$(mbgl_core_INCLUDE_DIRECTORIES)"; - INFOPLIST_FILE = "$(SRCROOT)/benchmark/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.bench; - PRODUCT_NAME = "Bench GL"; - }; - name = RelWithDebInfo; - }; - 96AF1AA621B615A3007CB696 /* RelWithDebInfo */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - BITCODE_GENERATION_MODE = bitcode; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "$SRCROOT/src/Mapbox-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = "NDEBUG=1"; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - INFOPLIST_FILE = framework/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - "$(PROJECT_DIR)/vendor/mapbox-accounts-ios", - ); - LLVM_LTO = YES; - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "$(sqlite_cflags)", - "$(zlib_cflags)", - "$(rapidjson_cflags)", - "$(variant_cflags)", - "$(geometry_cflags)", - "$(geojson_cflags)", - ); - OTHER_LDFLAGS = ( - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.Mapbox; - PRODUCT_NAME = Mapbox; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = "__attribute__((visibility (\"default\"))) "; - }; - name = RelWithDebInfo; - }; - 96AF1AA721B615A3007CB696 /* RelWithDebInfo */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - BITCODE_GENERATION_MODE = bitcode; - DEFINES_MODULE = YES; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - "$(PROJECT_DIR)/vendor/mapbox-accounts-ios", - ); - LLVM_LTO = YES; - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "$(sqlite_cflags)", - "$(zlib_cflags)", - "$(rapidjson_cflags)", - "$(variant_cflags)", - "$(geometry_cflags)", - "$(geojson_cflags)", - ); - OTHER_LDFLAGS = ( - "-ObjC", - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - PRODUCT_NAME = Mapbox; - PUBLIC_HEADERS_FOLDER_PATH = Headers; - SKIP_INSTALL = YES; - VERSION_INFO_PREFIX = "__attribute__((visibility (\"default\"))) "; - }; - name = RelWithDebInfo; - }; - 96AF1AA821B615A3007CB696 /* RelWithDebInfo */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = "framework/Info-static.plist"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.Mapbox; - PRODUCT_NAME = Mapbox; - SKIP_INSTALL = YES; - WRAPPER_EXTENSION = bundle; - }; - name = RelWithDebInfo; - }; - 96AF1AA921B615A3007CB696 /* RelWithDebInfo */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - INFOPLIST_FILE = test/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "$(variant_cflags)", - "$(geometry_cflags)", - "$(geojson_cflags)", - ); - OTHER_LDFLAGS = ( - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - OTHER_SWIFT_FLAGS = "-warnings-as-errors"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.test; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "../darwin/test/test-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - }; - name = RelWithDebInfo; - }; - 96AF1AAA21B615A3007CB696 /* RelWithDebInfo */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_MODULES = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - GCC_C_LANGUAGE_STANDARD = gnu11; - HEADER_SEARCH_PATHS = "$(mbgl_core_INCLUDE_DIRECTORIES)"; - INFOPLIST_FILE = "Integration Tests/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.mapbox.integration-tests"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Integration Tests/integration-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Integration Test Harness.app/Integration Test Harness"; - }; - name = RelWithDebInfo; - }; - 96AF1AAB21B615A3007CB696 /* RelWithDebInfo */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = GJZR2MEM28; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = "Integration Test Harness/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.mapbox.Integration-Test-Harness"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = RelWithDebInfo; - }; - DA1DC95F1CB6C1C2006E619F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_GCD_PERFORMANCE = YES; - CLANG_ANALYZER_LOCALIZABILITY_EMPTY_CONTEXT = YES; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES; - CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_COMMIT_HASH = deadbeef; - CURRENT_SEMANTIC_VERSION = 1.0.0; - CURRENT_SHORT_VERSION = 1.0; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_CPP_RTTI = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SYMROOT = ../../build/ios; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - DA1DC9601CB6C1C2006E619F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_GCD_PERFORMANCE = YES; - CLANG_ANALYZER_LOCALIZABILITY_EMPTY_CONTEXT = YES; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES; - CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_COMMIT_HASH = deadbeef; - CURRENT_SEMANTIC_VERSION = 1.0.0; - CURRENT_SHORT_VERSION = 1.0; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_CPP_RTTI = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ""; - "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = ""; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SYMROOT = ../../build/ios; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - DA1DC9621CB6C1C2006E619F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_LOCALIZABILITY_EMPTY_CONTEXT = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = NO; - DEVELOPMENT_TEAM = GJZR2MEM28; - INFOPLIST_FILE = "$(SRCROOT)/app/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxGL; - PRODUCT_NAME = "Mapbox GL"; - }; - name = Debug; - }; - DA1DC9631CB6C1C2006E619F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_LOCALIZABILITY_EMPTY_CONTEXT = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = NO; - DEVELOPMENT_TEAM = GJZR2MEM28; - INFOPLIST_FILE = "$(SRCROOT)/app/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxGL; - PRODUCT_NAME = "Mapbox GL"; - }; - name = Release; - }; - DA2E885A1CC036F400F24E7B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - INFOPLIST_FILE = test/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "$(variant_cflags)", - "$(geometry_cflags)", - "$(geojson_cflags)", - ); - OTHER_LDFLAGS = ( - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - OTHER_SWIFT_FLAGS = "-warnings-as-errors"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.test; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "../darwin/test/test-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - DA2E885B1CC036F400F24E7B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - INFOPLIST_FILE = test/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "$(variant_cflags)", - "$(geometry_cflags)", - "$(geojson_cflags)", - ); - OTHER_LDFLAGS = ( - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - OTHER_SWIFT_FLAGS = "-warnings-as-errors"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.test; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "../darwin/test/test-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - DA8847DB1CBAF91600AB86E3 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - BITCODE_GENERATION_MODE = bitcode; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "$SRCROOT/src/Mapbox-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - INFOPLIST_FILE = framework/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - "$(PROJECT_DIR)/vendor/mapbox-accounts-ios", - ); - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "$(sqlite_cflags)", - "$(zlib_cflags)", - "$(rapidjson_cflags)", - "$(variant_cflags)", - "$(geometry_cflags)", - "$(geojson_cflags)", - ); - OTHER_LDFLAGS = ( - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.Mapbox; - PRODUCT_NAME = Mapbox; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = "__attribute__((visibility (\"default\"))) "; - }; - name = Debug; - }; - DA8847DC1CBAF91600AB86E3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - BITCODE_GENERATION_MODE = bitcode; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "$SRCROOT/src/Mapbox-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = "NDEBUG=1"; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - INFOPLIST_FILE = framework/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - "$(PROJECT_DIR)/vendor/mapbox-accounts-ios", - ); - LLVM_LTO = YES; - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "$(sqlite_cflags)", - "$(zlib_cflags)", - "$(rapidjson_cflags)", - "$(variant_cflags)", - "$(geometry_cflags)", - "$(geojson_cflags)", - ); - OTHER_LDFLAGS = ( - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.Mapbox; - PRODUCT_NAME = Mapbox; - SKIP_INSTALL = YES; - STRIP_STYLE = "non-global"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = "__attribute__((visibility (\"default\"))) "; - }; - name = Release; - }; - DA8933D91CCD306400E68420 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = "framework/Info-static.plist"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.Mapbox; - PRODUCT_NAME = Mapbox; - SKIP_INSTALL = YES; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - DA8933DA1CCD306400E68420 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = "framework/Info-static.plist"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.Mapbox; - PRODUCT_NAME = Mapbox; - SKIP_INSTALL = YES; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - DAA4E41A1CBB71D500178DFB /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - BITCODE_GENERATION_MODE = bitcode; - DEFINES_MODULE = YES; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - "$(PROJECT_DIR)/vendor/mapbox-accounts-ios", - ); - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "$(sqlite_cflags)", - "$(zlib_cflags)", - "$(rapidjson_cflags)", - "$(variant_cflags)", - "$(geometry_cflags)", - "$(geojson_cflags)", - ); - OTHER_LDFLAGS = ( - "-ObjC", - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - PRODUCT_NAME = Mapbox; - PUBLIC_HEADERS_FOLDER_PATH = Headers; - SKIP_INSTALL = YES; - VERSION_INFO_PREFIX = "__attribute__((visibility (\"default\"))) "; - }; - name = Debug; - }; - DAA4E41B1CBB71D500178DFB /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - BITCODE_GENERATION_MODE = bitcode; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = YES; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - "$(PROJECT_DIR)/vendor/mapbox-accounts-ios", - ); - LLVM_LTO = YES; - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "$(sqlite_cflags)", - "$(zlib_cflags)", - "$(rapidjson_cflags)", - "$(variant_cflags)", - "$(geometry_cflags)", - "$(geojson_cflags)", - ); - OTHER_LDFLAGS = ( - "-ObjC", - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - PRODUCT_NAME = Mapbox; - PUBLIC_HEADERS_FOLDER_PATH = Headers; - SKIP_INSTALL = YES; - STRIP_STYLE = "non-global"; - VERSION_INFO_PREFIX = "__attribute__((visibility (\"default\"))) "; - }; - name = Release; - }; - DABCABBC1CB80692000A7C39 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = GJZR2MEM28; - HEADER_SEARCH_PATHS = "$(mbgl_core_INCLUDE_DIRECTORIES)"; - INFOPLIST_FILE = "$(SRCROOT)/benchmark/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.bench; - PRODUCT_NAME = "Bench GL"; - }; - name = Debug; - }; - DABCABBD1CB80692000A7C39 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55D8C9941D0F133500F42F10 /* config.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = GJZR2MEM28; - HEADER_SEARCH_PATHS = "$(mbgl_core_INCLUDE_DIRECTORIES)"; - INFOPLIST_FILE = "$(SRCROOT)/benchmark/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.bench; - PRODUCT_NAME = "Bench GL"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 16376B101FFD9DAF0000563E /* Build configuration list for PBXNativeTarget "integration" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 16376B0E1FFD9DAF0000563E /* Debug */, - 16376B0F1FFD9DAF0000563E /* Release */, - 96AF1AAA21B615A3007CB696 /* RelWithDebInfo */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = RelWithDebInfo; - }; - 16376B421FFDB4B40000563E /* Build configuration list for PBXNativeTarget "Integration Test Harness" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 16376B431FFDB4B40000563E /* Debug */, - 16376B441FFDB4B40000563E /* Release */, - 96AF1AAB21B615A3007CB696 /* RelWithDebInfo */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = RelWithDebInfo; - }; - DA1DC9451CB6C1C2006E619F /* Build configuration list for PBXProject "ios" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DA1DC95F1CB6C1C2006E619F /* Debug */, - DA1DC9601CB6C1C2006E619F /* Release */, - 96AF1AA321B615A3007CB696 /* RelWithDebInfo */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = RelWithDebInfo; - }; - DA1DC9611CB6C1C2006E619F /* Build configuration list for PBXNativeTarget "iosapp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DA1DC9621CB6C1C2006E619F /* Debug */, - DA1DC9631CB6C1C2006E619F /* Release */, - 96AF1AA421B615A3007CB696 /* RelWithDebInfo */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = RelWithDebInfo; - }; - DA2E88591CC036F400F24E7B /* Build configuration list for PBXNativeTarget "test" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DA2E885A1CC036F400F24E7B /* Debug */, - DA2E885B1CC036F400F24E7B /* Release */, - 96AF1AA921B615A3007CB696 /* RelWithDebInfo */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = RelWithDebInfo; - }; - DA8847DD1CBAF91600AB86E3 /* Build configuration list for PBXNativeTarget "dynamic" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DA8847DB1CBAF91600AB86E3 /* Debug */, - DA8847DC1CBAF91600AB86E3 /* Release */, - 96AF1AA621B615A3007CB696 /* RelWithDebInfo */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = RelWithDebInfo; - }; - DA8933D81CCD306400E68420 /* Build configuration list for PBXNativeTarget "bundle" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DA8933D91CCD306400E68420 /* Debug */, - DA8933DA1CCD306400E68420 /* Release */, - 96AF1AA821B615A3007CB696 /* RelWithDebInfo */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = RelWithDebInfo; - }; - DAA4E4191CBB71D500178DFB /* Build configuration list for PBXNativeTarget "static" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DAA4E41A1CBB71D500178DFB /* Debug */, - DAA4E41B1CBB71D500178DFB /* Release */, - 96AF1AA721B615A3007CB696 /* RelWithDebInfo */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = RelWithDebInfo; - }; - DABCABBE1CB80692000A7C39 /* Build configuration list for PBXNativeTarget "bench" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DABCABBC1CB80692000A7C39 /* Debug */, - DABCABBD1CB80692000A7C39 /* Release */, - 96AF1AA521B615A3007CB696 /* RelWithDebInfo */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = RelWithDebInfo; - }; -/* End XCConfigurationList section */ - }; - rootObject = DA1DC9421CB6C1C2006E619F /* Project object */; -} diff --git a/platform/ios/ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/platform/ios/ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 92ad79b9dd9..00000000000 --- a/platform/ios/ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme deleted file mode 100644 index ebe96ef82d2..00000000000 --- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/CI.xcscheme +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/Integration Test Harness.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/Integration Test Harness.xcscheme deleted file mode 100644 index ce264aa19a0..00000000000 --- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/Integration Test Harness.xcscheme +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/bench.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/bench.xcscheme deleted file mode 100644 index 68e1c54ead4..00000000000 --- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/bench.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic+static.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic+static.xcscheme deleted file mode 100644 index 325b58d690d..00000000000 --- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic+static.xcscheme +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme deleted file mode 100644 index 4fdd8964018..00000000000 --- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/iosapp.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/iosapp.xcscheme deleted file mode 100644 index 1f8969faf7c..00000000000 --- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/iosapp.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/static.xcscheme b/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/static.xcscheme deleted file mode 100644 index f88ec1a04cb..00000000000 --- a/platform/ios/ios.xcodeproj/xcshareddata/xcschemes/static.xcscheme +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/ios/ios.xcworkspace/contents.xcworkspacedata b/platform/ios/ios.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 92247c14f1c..00000000000 --- a/platform/ios/ios.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/platform/ios/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/platform/ios/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d6..00000000000 --- a/platform/ios/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/platform/ios/ios.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist b/platform/ios/ios.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index cb6ecad738b..00000000000 --- a/platform/ios/ios.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/platform/ios/jazzy.yml b/platform/ios/jazzy.yml deleted file mode 100644 index f5d0040ea5d..00000000000 --- a/platform/ios/jazzy.yml +++ /dev/null @@ -1,140 +0,0 @@ -module: Mapbox -author: Mapbox -author_url: https://www.mapbox.com/ -github_url: https://github.com/mapbox/mapbox-gl-native -dash_url: https://docs.mapbox.com/ios/docsets/Mapbox.xml -copyright: '© 2014–2019 [Mapbox](https://www.mapbox.com/). See [license](https://github.com/mapbox/mapbox-gl-native/blob/master/LICENSE.md) for more details.' - -head: | - - -objc: Yes -skip_undocumented: Yes -hide_documentation_coverage: Yes -umbrella_header: src/Mapbox.h -framework_root: ../darwin/src - -custom_categories: - - name: Appendices - children: - - Working with GeoJSON Data - - Predicates and Expressions - - Migrating to Expressions - - For Style Authors - - Tile URL Templates - - Info.plist Keys - - Gesture Recognizers - - name: Maps - children: - - MGLAccountManager - - MGLMapCamera - - MGLMapView - - MGLMapViewDelegate - - MGLMapSnapshot - - MGLMapSnapshotOptions - - MGLMapSnapshotter - - MGLUserTrackingMode - - name: Primitive Shapes - children: - - MGLAnnotation - - MGLOverlay - - MGLShape - - MGLMultiPoint - - MGLPointAnnotation - - MGLPointCollection - - MGLPolygon - - MGLPolyline - - MGLMultiPolygon - - MGLMultiPolyline - - MGLShapeCollection - - name: Annotations - children: - - MGLAnnotationImage - - MGLAnnotationView - - MGLUserLocation - - MGLUserLocationAnnotationView - - name: User Interaction - children: - - MGLCalloutView - - MGLCalloutViewDelegate - - MGLCompassButton - - name: Location Updates - children: - - MGLLocationManager - - MGLLocationManagerDelegate - - name: Styling the Map - children: - - MGLStyle - - MGLLight - - name: Style Primitives - children: - - MGLFeature - - MGLPointFeature - - MGLPointFeatureCluster - - MGLPolygonFeature - - MGLPolylineFeature - - MGLMultiPolygonFeature - - MGLMultiPolylineFeature - - MGLPointCollectionFeature - - MGLShapeCollectionFeature - - MGLEmptyFeature - - name: Style Content - children: - - MGLSource - - MGLShapeSource - - MGLComputedShapeSource - - MGLTileSource - - MGLRasterTileSource - - MGLRasterDEMSource - - MGLVectorTileSource - - MGLImageSource - - name: Style Layers - children: - - MGLStyleLayer - - MGLForegroundStyleLayer - - MGLBackgroundStyleLayer - - MGLRasterStyleLayer - - MGLVectorStyleLayer - - MGLCircleStyleLayer - - MGLFillStyleLayer - - MGLFillExtrusionStyleLayer - - MGLHeatmapStyleLayer - - MGLHillshadeStyleLayer - - MGLLineStyleLayer - - MGLSymbolStyleLayer - - name: Offline Maps - children: - - MGLOfflineRegion - - MGLOfflineStorage - - MGLOfflinePack - - MGLOfflinePackProgress - - MGLOfflinePackState - - MGLTilePyramidOfflineRegion - - MGLShapeOfflineRegion - - name: Geometry - children: - - MGLCoordinateBounds - - MGLCoordinateBoundsEqualToCoordinateBounds - - MGLCoordinateBoundsGetCoordinateSpan - - MGLCoordinateBoundsIntersectsCoordinateBounds - - MGLCoordinateBoundsIsEmpty - - MGLCoordinateBoundsMake - - MGLCoordinateBoundsOffset - - MGLCoordinateInCoordinateBounds - - MGLCoordinateQuad - - MGLCoordinateQuadMake - - MGLCoordinateQuadFromCoordinateBounds - - MGLCoordinateSpan - - MGLCoordinateSpanEqualToCoordinateSpan - - MGLCoordinateSpanMake - - MGLCoordinateSpanZero - - MGLDegreesFromRadians - - MGLRadiansFromDegrees - - MGLStringFromCoordinateBounds - - MGLStringFromCoordinateQuad - - name: Formatters - children: - - MGLClockDirectionFormatter - - MGLCompassDirectionFormatter - - MGLCoordinateFormatter - - MGLDistanceFormatter diff --git a/platform/ios/originals/compass.sketch b/platform/ios/originals/compass.sketch deleted file mode 100644 index f5b848cd968b95ba8fef65f3c414cbb23c490068..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4881 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

    bW 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�a2(8(1~0 zD#^@bZ)QqDH0BK{c;Oz$AUroa!7(y`>C7A<2Xf>o-OH~u7zSDqQDmf?0UM}-r*3T? zC?A>R9EL0r?i)7X7|)hS7BvKY zs+^cpD%ngd1rj}L5;+cB!pem8M1%GoNZ;Ut%07^t=`d_G_tKJbr9BBx%Trubxn!!j zU{*^}ZP>7!*~oCf?0bPj0CsI8H1l|wI1^o5cri~1hGN0X+WRI}*`7#~_RI~O!ZBiq z3;ZqSSRMapXa;E#I6K*`{N4>Iv)`!VauSKfN5K9qFE`}<)ov8l*CzUUb~!om11 zo>~O@Q10X43pH_XjNeA!U{Va&n~9BiZiYFkoAQ%)2|A!v!KVOyUycrLTYWnLqg8 z>65SWp=6oSW5SQl%V2KMD*8DTHL2w^p-5#;gu=*)P66b>C>n6lb_=H%O%+qZOm8j_ zD0Ggu8sIhauyoo!Uq@euS%BEBP(8RNPp1L-uUBXmc= zg^fz?77?b*5QwN7AID&WH`q*qXpvw#a*dA$WLs`P$n3m2C|6&fRQ5lxSwMyLDIh__v39Ll;l-quCQ~w?h4u z1XgiQ!#~b>AZBiJhgSc^Pjuh>z1`X3z7kadgq?W#!@u|cy!hoW-n$!K@+%yJZPW_K z==m54cQ)4-t5_RoMU~+WC)lHzyk1WMU%R$EJ=yvDZ=5@_5U#2dMLH#h)%+WGXFqUh z-wT&+`}<14MGx{ARzAkop&8*Aj4eBq+O4Zf@`JC)nSp?$?&Q`|A{J4g2QTNrmFsYf zxvp|Q#@hp$VUBR^nxh%dR#(PFNT@_JvVkfl%dqPO#xP`cN})I7n1+VURoFZb$23c5 zU(4F0TbT)tkpvsTTp+C`)v}qjQp7+aqebRrz*uP*T2PCC3lsw`l|phubBaQZDTMI6 z)+ocuN34Jgam;GLip3hQEvsSys7Y0HmOh%^4JmLPN%$sRzzkhJwoyS_0T+6~V$WK} zlerWabUH;(!4QdjiOq>Q#SBQQl2c>T>}4e;Om)|s?`=|G5OKA!)foVtuzC6AmvaUp ziqJxc#>hmOB~;ONC^VzCz?k{WLqXT(Ela1D2=9u83sRu={+K=ZoGq2|wAZv3Q|q1U z%e`xn9!Jq85QJv(y_r%he}lZDZTy3Ou3WyvLz`^OY}>JODn2w5I>`UC3!S5{@4WUq zx-+xg>z6wB?u46V(90VuQ5+`|eA%%xx3zox>CT_~Tix&aZ@LE_?M%e=J|a{G_rlrJ zAN#}K|Kew!y?G-*?I@!_GwpFq&vMtFq?iMdgrW3(N+$4#c@~nwIk7%;H6F|q?lt|l zM^~QOxk)PO6w%-_w>ST@3wzIAy`lXWugL^@;X^r;qYI6?|1z>Px{L%61BVKJEu

    y1fBptZ-@ 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

    }Pc%4HWjlX6PzJXI;;?-JG7yNBz_8L3 zaf~2VUG3$Vxh>~PiqvGPc}>nzxV$&J<_w!9Z5NNN)J(_&HXF-kj&olES+^!2FWSieE1;!}#C>muKgQ;67))1bG0LRG@0k2X{DWOYOjM^WoC`VQ8 z6k@v-E2j?m6iA{O^sy4jDUY_KkPz;&q?n^hX?r;n$1usQrFJ+S*K>pZugrWFU^O zKe%*#@8L5SoH?K3caipg>HVF*_1?3?FBI1-TW%X$8$&$XBZuHV9^+ro;rQxA5Cmg3 zxnq$n&`bb~U@XB#IrM~{RErLTZL3o#^{yzr{LPouzMz~~urLgcdF%co#4({RLt1K| zXq$bpE%Ujp-FUw7jc=$zA;)S}ti;npV{+IrjAKQ)q>jl|DHqTLq!Y0T)zO97*e+Z6 z;yoHAk2OoRfKPvbFkm*bM8bwYZ|&srmlr% zQdAiYdk3%QBR~9sT}*^6%u6n@#CnX4*lr$SM8sSweH1t*dJA|ll0_8xffAV<>n>G!hwxQC3_C6~bF{U$bL7dgIGd^D`*`g@MV?gq#IUL7 z#-92XjgtI{Pkho7D#w)JXZn8S-W7l8=#zWPALTpl8b&(B{+Vw-`0u{>{?X2^m2g_> zFyH{dfo6QC3Cc7^Bx3M#d|snQd%>`LV+V9-sg}fOFJ&zb{No$o zZ3(=$IFEVo$j)O}va&L?mIsAjQayXyq(ZSy`3|zk4GY%g0vZk<^yyvH)Zyz|3RnEP zqjp=_Q$^X3u2HWh?610_fLo+iE{&zMvMuxDvr6kxuvzBttNaL$B0jLh|91I&`i2hHdOWUa%I~DS-+wr)Uk`HHZHwlM?(xWBbRbE zxxe@p zDPgQpN~V#&!I^X`%4+Akl_^mqSpt`+Ul9kMa+%}!QBqyXNlGQ($3kv+QvW^pyvfzj*J;-3R*@ z4)=XO+cPMy-aYzRUZo`>VsC?8yvIwsWH`sRHC)+W zUfSd~21%unrA(`9xd{~*Hnd2T7!~~D?-f`r8j&luPhTS%lb`fbsbVD8vul3C2S-Z< zUU6tKF-jQiUbfikaKaF^&qFq)F(D@@5R&5F6%NFJG8KQzNmRm-wihLJWv?l)GYPnF zq*up6TrQQ0x!=w6y&Mm+>}(C+9{lzz-`;i-r1= z;R}Mj);&y9|IKfGGg&$iBf(G)$7Cl7ZIlpgKb}R62lt%E_$fSSrnKbT+g&qOYVl=h znOw1ri9(kc?lg57Y)fKm#{w_PTN{<|_R=bgeXH#XN~_LpN1a@%w)vEx_LexNm0)$` z0wK!ku;~OiOCj?cajsnQml_34ohd0L=R{jkwW;$lkBu#PL{57CJImut>l>=D8qz`_>5Fq=XE0Cc#gE3HeEMTV#G zT^>XzycEkYdL_)5r!BptaK~#*R}BKXd@ShFr-@uu=qGgN@Co_4fED2;EfBpRst7J6 z8G6J8UJ)|7c#hwutAJXBrVWTG!;wnQs}UbELKf z5G*QyKn7c8GRZ2+I0WZR9Ft--h}sOtxV3Kyv1b~`P+`9K1D}myIErP9@aP$>1f93D#qV#lORwo2B3W_VT&x)A<+!mhWL_z+$9h zF^k^C*^I86GoC{_5gHNMowS9u3ya2v`x0`>NZ*&Gf|YH%X+sQ>@k%<^-YwN0-J8`yA{varL{k{Hyc84 z<(I7vzx6n_6I%j4W|-wMjRuwr#9CIM)XXTG+G7L9=!(2;rPNs397S>rb&bhHH-x7W zRXVYX%n2NWA5T;ajTmTN+RY9n^0V7JVb2-6)O>nH$pqOH0=}>l#hjW23@(L>qO;%_ z!^`-WW>+{ymr_7uH}l)v!(VbTxD9Wqj;E*2Gs?bbj~Uu>Ruo2?KNge*RXi?B`Et~d zn1cW=7PIs+0f@RVmRKFwt&)=igMLOFV~(6#q|AwiomDW+xc3sx z$REU5b=B~&P+~B$@}k5sx~krkgKo(=l1a)$BZM#yj$zNlXW|mg9IJ+AJj=2bXvRFs zQGmnA;h4q~Y;n@s+Swky2sWI@#H;99G`Vy0l~+#OX}11T+Sut-lQD&u69&Ju<&hfk zIU&t&EhHwIu`0WFno^!9J?|8!xLuoFLu2uKUzz#Y6>!I5*}8P?rPts20C3E7HA}%)6Es~CyW2ZKw2#PAYe6~*yLPzW4#8P|@(DD< zBe89_TNL(;^|r##i$X6)cp+AaW?VAH2I1qA27}LtW5U{MiV<5J6NP=uyH*0uj6eHV z<_R}fK$(y@X2Aqqm}FH%t;-e+xn~bR{rI>AF$@b(5{Qg5b~rN>6QisBILmoSgN`Sa zcEgmtXKcjENg z;+W(wMI})&+Uz_Al7PV2tPV!?@5)a_(NKW697&&OhWn10x>8qrSB>%XOkfZ zwiJ2d_QcHn$#7=)v%}uq)tdfHJfMW*Z_cM)KL7v#9ya56=EBa_?$+=#ofdqX!)dL? z$zHc;ZEyQI-~q=Rd4#v<9EL0y23R(HPyS@wDQP`&pcy4RI4c&OF2B=M3RI-9zx49UYC=A(oM$%B;rjw81m4#e`y5zP>=%!@y&u>^11dj2ytAILtcCN&7 zpt)#qOerDHV@hI3kok%guenCf%3Z3|8*M{GECSogkD7cIG-Kt4qE>i?W73`pyb`Fw zDj-(7a;H^MF>HJpdPPZ)<0CFn>hGK^u%0A=1mGIC4o6M^IdPnPALnI!<;Ax=dxgm$q=nnb>sE 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≤;(=m4Etg*l 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

    ?{2{%QTj%$I1vym`SM>abWiW?5A+&NN|XOmSGX z{i@1a6W^7FAlqbfxfp3Iz=FfeWok-^k1S7;-o@8uL=hxm=_C*)xuDrBl(7sE5j69hO_YfUF^F_~bPSy(-nfb@UuJ z+3*0FwObyT7(`)Sslq*-RMKGb&xvQ#bmXB&kpW`7Nag61bV^=JfTu%sNv?AVx?KwtCIvFdmuXNX}W;EKs=0vVdQoS_*DvI@;~#4&E>PK)48 zY>L1KGzy$Z-rBs?0qouT4`w|$e%!=~6DVY2Z-$H*R_2C$;gZXjAomc-@IiY)gu^cD zNY@27PP?q%wEd62`y=a)5`8<@ zt;x=o|C`@?Mw6Xe`Q=}D8e00mqYuuTGmAAx%~vj8vUKqxuU7cZk6&>3NUa{aXYDV2 z^20PAYnCqo{*IkEHErsYr=ECE#80v2X@L3tYv2Eg#7g|aCqDw`dHVADcg$UV_1=f> z4U&?qwU}wSJhl8Df9O8DSwR67k>QV``>f_IyR=?`tlzKC*u3>Ud1DdatMUo zz3-r9Ob0f8!i1?)rmR{#uc+z>1jDz9L0^sUSam(j=af_$j!ZL+tO|oHiq5HCtODDH zuBueZj*Yb*j!RxYM>IpJW;RyUN-{HtAGGR0GyJ-4E1DS%jtQW_AXc@dd3=UNuJnFS zpnm3OZS2S%?4=``kvKy$UT%KrvQPbRj|Rtt9x&XFf=8^D6L`&gsV1ds0=!$NzxtT8 zxNNCHGiT3x5rprKFR;U_z4rqs*S%yp1aDTC9zrf%KA~u9A+3XOy)Upz78i?{j%cP7 z>+}W3g!*@jX5g4$k0vF_%3LQDe>$Cz!!aR^uBUy#-u=YbpZVcSROZ4QSDt#$y{t60 zrn=NF`538l;Zjq;g|!*ZVm+F~fD!auj%VA*B2siw>`26$Cdn^tMj>m%$epO{!IV=< zM~~!i47VoW_xF6)~#Cp#KZUdHX(w5$#6{jaCnMi6o(DH z=f1n?FeGq}>HRltOyBt_AaY$}KltbaKv<}-`&PdAnWtyYn8pb5*aP=OLB4#+LPitb z8=waL$I2xOE$q-1()VLeKKd)4{W#$A&W=5^X3sGQue|w=rw0z-vLKc=JVxHTYWe3s z_QBu&%GV9z*Pi`pjhX3NKYl?4Wc=iZ9{Qw(So^iTuZoP?|$l;sDQb5%}UlKS}2kG4;@*$D6=s^JX~Qk z*(g7F&l)r2+dqDhipV4P==}9x`=vQEGY>(&-m|7p`@?U3Kf8!;!xj)HIEZ*u^+(TX zQep8;_QX|0a`9bleXLuyhPYn|q|89q4SR`kj&jGJ_(iHJH+Hf_922s;(E-A9CNXH~ zYZ|Wi^!fIEhpm^j%NANeHJa3pb*o8`;23xOcRse}CjM>hH1mnn&(Bc=S;B_u!!qE<``y`r_=1cvNiKeZa1=J%?8W8CjJJWhb;>-?S6- zfhU6BXKCWx@+nOdBB8*X(j_J?#WCS&RhF2y80aI8LELgCF-sLc#iIL#V^Gd^q&Mwj z!1RG**}+wZf&S}X_;6%>Km}C|`|OWjd*{afwOFTIjP~SWy7~zLtX!07EQkSmp|0|V z#P_aPY@dhEa^NpIkXy7)02j#?aSYvToE&!WfBUcenlsq8__JqDhtyyiYJi`<{01|` z?|=QfoJR@mfMX!~9F7UaJ^H}9NfR;k3aLNkACER zkHRsOE2J;W2(3W4r3q z^cpKwm>%l+nGe5zM*AF-3-m*y=)InQ<;`FiLQTep?_IlM$qhqQRh`AJ-?$}sL*KV{ zRe;f4e}Y$&crYdA1#|*bV##8s3-QNKo>E(3SL&@;yukF>vSXK@SQyn8_!5%A5FdQ+ z!wcu#<>%p}N0%0kG>2sI+w3(!xSJaX>{nv^XaWW|2OVmtSpv?E77yJ3`aR&7P!M(; z+JZRsdue4T1HwtVa9wpx4P8qO&`^BZc)0qxU%ix;XcTP7tSmdf-f&Eyrlnnh$g~c* zFt}hGbCJz|YDIVrmf6M6x?@Ib(0w!NZ`YpsMaGObam@4@9MfFpK{K#gLwOeK&?ImN za7?I%c?iuIZkkJIrlUk-W-`05TviMcx~46bPrA=H4Z;REmqqWD&Jc^PsEEqWsBzDy=oaZQu+)Q zt4UL*Ini_cM0Oj;s^v@O7p@y2kEu7ffV{nBn=|3iOq}0gb*VOx9;ail?9!vD44RJT zbndA_3aH|jKl8L3jroPp9)0Jzm+o1;JeNvM95oU-dD27)zW@BoX@X$2IdJ$Gu;tv= zJ*$>!CJ^)g{HH&nDPdV#wQLbQL8auD*jDTOsq^O2}ntLeiK)a`y!(y%(ENJwwHt=}Vx8OfYUD%K~&;3;OWu${f>=acF)s&duG zV`RKC>(j)iW`^1pZ;2(^iwf%^Z#1ksbvcL-~|rcOK>RF{X5>+$|Q0 zfyYQEF~g1}#`G4rV>l*Mk80MLCgQ`gg=Wm*$Yx9H@AwSumz0@=u0FW}RR`8>E#tH~ zWROz!DA)vIB)(qnyAx72A13K3`C^q~K~;fVZL46DSzWK20ZJ6A6umkcyHZ+D=A$q< z0e6#`QT532(>gg_zYFi0HD+_>j@eW$VxZAnnikeon76F-(9Fi2``uOJylYq4CBAQE z<`vsUGY3HIv`OMqG}8pf#L_`4S{a{5AG~+pfkWT>=}Qzdp1%0{`c*5I&6qKrM%@U- z^l88tyDJZru};4G{3{RKyKeu%Ljj9Ce9zi6r7(5Evp;+J$3K7VNL#F8G}ER|X3}C^ z5@TKQu?>tY#bh#GxO~O!#R930Cr7;gC#dnoPks2`{O+GXrA{-2`*YJQnZ2=n(I>ss z4_|mSeH6nWg+o`fr%eB=zxw&#dFI=%v|H^wk5a3x8p0bZj_9Mc5du zkSq6X1SQKwraw2fag1pk*J?ljxp|mo=@@Q~V~|q4@OJc+EYV)?Fp(y%3F8_aCAuv> z1F;g{*u0BYz|OUbpwo*s9=5ZuZ`t|a>Sb7DU(ifuS8C%J>k-SYDm})hI3|o*Xk$8L zA>6U;k!DSRT6c74CVO4lfnz6|qM7VPr#CE31|`_;jU)e7=gf0B#&GQ1e>fMZxUR&c z^g$SRo2%GqyAB>XbS&G%clCZH>6_b?iiPqKBsf?<`EJrLI@454lg7a7W*SQq6BxC< zdk4~|!YMQ{k($iONCCgK@$0A`3hA44c&LmC&=Ac8pb+b$h!`#gYS4`L0R$ZL{s-39 zoD7IGtNdePf)LE2UlUVuSF-46&YD7*>(_=`JsN^zp;;iJ z84k&Q_KIePT|!D(!Wf^^QUo+ZCguEN*oktAR>mVvsULXsp|pM`t7~BRrcgg@-@TXQ z;7LP^P(R}zdtlw~eeHWRIo{#8aQ<9i2u(_ec*-UeL9+hQw}0^L&t5TiX)+$VckMl^ zY2xS5F8-||KC|L$M=HPpO=bCZ`+9zM$TN*!N)d$aqdKl8DV%$Pn+ zyFUB$2bq)j5_wI8M6Mh}pYG?G@BRqK|D{iUBvQ@=sH~(ENn6%d73H31uRBFHLK#lM ze1KE~cw*h7%L&${l}i_gvKtuJMo**Gy3P=m5a^N<~Sx0Z$5ug$=y6xu?g=AjtSMkhn-`mo3YCex|w42(imta z^PAbcGvLb<&7{2{3!au{EDcA+3|1c$T{$A9xk980*SM(}j-U|?;{wfKN=0i?q~8^e z3Aswq4BZ4@771KcmlMaatTfON$Am1dVhJF@#);w8jh)|n=}k=w>w=crW(ga&^qNAM zYs0q;S826+2tzYuIe3+!nTi*7*OS!@0@cI{mZqEpD(+BoIEH!R=Wo9AqZeO2edZiT zirf`>iXI#qvvA&QP)2xM``)Db`YfJ5Z^@zs-mA?e$|&BR^*pP+K!Xxr|6{EN5j z%vzWJ@rmId;~n>w`WHU_A`JoSddNZLcu-RP>jpo@99pR}$l24IxpEa`@TshLVt& zDFmqUf~VKF>|*06uDDo)lOycHl+Qk-Z2OAH9w%_Wa7?IMDVniBdLG1xV}dw|J>bBUY3k=&EHsTF0$7?Di^FZpZU{@C7Q^1c;$yu3y5Dtcxlb zm8P~b4V=FSZocTOEeY88@KHaDIdMh zVdlR`ty+;w((|EctU^oSOLIn%2Am zDSaZUi9ROHLVN<;I+>Q9x+r~=3$uu+ylFs<%K0ED7jtPk{_HP~3B|?vmX>Z1d#GU_ zaZIR;X@7f}Cw>KOUNY%_h393L|eXg{UA#4-dn_WqVxbLoq z(J9tJ44!}YvIRIHN!;YN<>+GoU+%#T+s9x7W%?Dk!M3fmpj>3ol*pdO%id9=BY|XT zt{5&3K>!>QKr=POWh}zeNVX~viQ}JehGa~HO`6}8J|->QVI4m)oG(881m_t0?Pp(p z`#*f`htIvffnvs0K<~Y8O{05dP{I0xP9A!|zuc6HH`UxQk=CO$Oj=Vkxai3VQtTLK zEKODu2@jpWc-i4PoD_>JbpkKq7zBw`6Azlv2u><)lp(y~4;|#7@3vjLfA?$OB_^d@ zw`$q1{KChmA8M*W>jfuf1h?;G1`4u-vWIOY=L_=A)*bCjWishaQK3IofTQuBeD}x9 zSc)+1?pwF!Bab~G{@Xu!(SatKl25mtTfMo7IZ&F57tX)-c6M3IvW4@XeDs0RiZQ;# zEAkwxMkGzfPnqH*yi`Fv85XX{(=FzNt6;J{+`a?)(~;?c!ND`<&MEOfJ@ak%7gM4v zns=A$Xa3di{Ffg*|1#^0mk65KrUYHovoE~5Yky{3TeoKA{JZXYk-PQaTmW^p4<_Zjpm<%>m7TV`3`; z9lJ?~(TWSuh^Rp6RTF6i(r}fCO4F2v%^WivE3ky^ifX_R8-}p4Ly2 z(r!%2#;|vN1U}ZSe~hLD%TBkW6N@eeFc35I_?ffx$4%}hwA|dQgxgC`O-?rnUg+=| z8*8r6Xz?-sbL-TatzjKq;h0cpS_I|`bqkh31?Qs@`_PC&~loLHogi^(o`nmkEu zY%aZk7r>y6$ffD{lWs=EQ1DVD+mYs$cuEo1zy97=zeCWPCC~l*bsv@pQ!Q#}oU-}# z&wny!B+6AO;24*DPy)a7>Jm2yhXnL4j3c?kj*}B$hQVe0|ME+}4`BdL4okW3-$5$y zMd^#?%rs`XjDGTmAd#&-gIavrRg4Mo#ZP|(sN&R;%lO1Y_klI+M4V~<-5-4Q55M&+ z^9_d~P*2@-h{Yz$Ywv8P!(aybt>1mdW@OHc=|I5AQ)iE#%1#VXnXFi{_{j0&Z*APl ze~51ovzj+EOqehpfH-{gL|Fgtd(Q*&=47|Uq<=UIf0}T1i5qWtOL>|ggdezj4delR zZrZk!Q4hGe5x;Kr_n&`>yG;1Wx|DiPd;7tspL+i@-}@2W*f*a2>4fKBb{FEZyP5&UvWH}<)*n*6k0Qhm(r#xbEvm#s^f{dY$LBuZ2j?JoV zA4g2{bq?!C*-b2{bLP}3IU&*B=-;}kG9^b+E?ewnF&FG^?PWbO)%*!i!#r~D+Q0J4 zpL6|Pnk5$wFAcU!aNmZ!aLI;kJApIk=NCTmr1$>h(mT1sv%xzAybqF^6ceOW0IK+r zc%^`IL&|;ML-#uB3?)#35XoK-^wi@IJ8~>B{gZm0IC;WVG$=d&T(1BC09ciAhR8)P zvgfoi@)FwyZsYdds=@ErD;L6jecVU94*{$^eDt_SoOn36xa>~F)+}56g-<;7ktZI( zE}4_8H!pCsTjVIi77I^M);aUMcKMReef+6OQ>NTCbNWMfucUg_y?_EIYYMP)=PqOl z&zaLd`N1c?@bRZg{eJinJ7EM+K6uYs7ysn?F#Oaa9@b~hpC2bYLMKuG+i* zP=IK6&7S#%Pkh*WE3~biDc3z1%2Jg~Bw`MSZ7v*xYo{h8X>|I&!zb!1g96c_4v}V6pr)QxS#t3X zELb#FA4L&cQaH4qOA~(5E6^@vx|xfYy!N( zT2X73EMT)xB5}^igP<~F9=`AH((WRm8MeHEh++VGAcGy4VrhEm%?$^%z@*l z4jn)322$tCC{A|nJ-BJdE~l2j0zCtq&73h~-d!VZI!ar?rPsB~B%(9w+L%5{!%T9( zpUJjh-kiC!Z=LFQ-{AhkNAwtdl3Re&EHV7n)}78bUDCaiCa4k|<0#pjnI+fByu4vM zluUsb&X>xyb5mBqYx_XtNI$sa$9js ztRp7Aeg9!Ihqo5}R*bI+&>TRG-XBu`7LHO166ZHZ}dUUYYpDql4*=MaCAI}TZ&_1m5MzUCsjR; z2^5-iLQ1Db8pbMB1ynT-B^*ORQk62s1BfrawZ%_(F}z zd$dsI7O~NV95eIk7Bn7MMF@88pkirnZr$Y_VAcr`Lpm?s69b%&~6Sf+p(O=B4*BrHT8_ zj(s?<^SbuvRT7BG2e&dzkVH-C09?(}-X7^gY)CiS9o7%DeIyq}x7_jz4tPD~2n|ce zl`yifr<6U0>$7K0NE7ofMu3A=soQ;akx>?lj;yozsAG(t46Sn>#I{?tAG>E&y{R{t zWi2|VwW}EMEgZ9USrg$mLLbvTjtR{y?W?L9N<5l=>)5fm1l~2XWB(xvu!d*`1b0H) zMC$DpmWr zN59JN$yV|Pj&W1<-JNj^i*Kfn89$DplnrR~-9k0OagrY5!PQHG$jmj(Pt9@m)d1Ny zz@#%Wh1;#MET(_AV$Aj9r_XtZ_ObRHOm2;mfL^bv4*{bhDjj9h zyy*rmGlD{iBMicZ^&X6Ip)Ru9F zag1tM2nw}cSep0^baVrv>jh%ys@ul>>)qP!E4m_Y{!p>vUz*qbL*b078#J1DLq>d% z>SJONQM<=H5D!>~l^TIiOMkkYlDo~%@A|as^F`v=7etk*cxA(Oij1Lu{6GKWs8`_Uk)DZ7$=OZDoN0U?!`QUtXQ7%LVU~1DeBSIC zgkSKRF)4G3?ou=Z?s>-;eT-%AhK!=n&D8;pu`&aWF&nzFqvc4&pNCIomoeLH6{S~9 zgCA|)bC7A4f)yv@Xx#1YJd(P70b{pi?;#vPTlBWhaiJgU;hA$6ap4iF;dUh?fF~?t zyLrp32;&d|-8dL^9G8ZT0vT13?u`PhCJSc4MTXUk_N&Oz>~vE;QbQ*`GO;nHhHr}2 zEk&aM={|gYxH*K1MGL5~@6x<|!7=P;ituq57?&{OJ{{2v1OqP?(agJrV?vJ=g^Ku` zsJQbuCe+Ocl9vI^;N~6C3^v8U#M-Nq@%G%-Hqfm4wir{y5R;k4O{8Gx#)xC+V@8i- zVjXgVEjKzbSq}lNrU+poAVg%RIIJf^PT^7P3DArkriqcJZ-`?;mePrrQWGYH(F~Cm zTFQl*bV6E0!*L8{!7+H(EgVy3i_cZnDh{{ca&s9ajtP|0#)`q5BQi5y{8oql=HLFi zu@a!D9+4vMlT4a`V623GiIZ4dE?^$C&0qtB4Q$S}ld?LOrsGeRPJ+`!FdbTe(hSk75P1@ynLhe4|w6P8`8WbzXK$y_yE?%BFby8m{ zkd`uEsi3ho#Jvm5tdn~Rh z5ba8HrcZTbsVZ4l@hQiT8KbCpw{T3TiT=bSO-@X*A(}CB+~d*}nz7JImujd3Qb8!h z&M6JpHUxc4L%R}Xr0q3QrTUm$5mAhVc!Ev9M5>u@ISN%jwVm{Z7kxOG+V)hX4DmWD zpcx|~Z$vX);g~?GbmGO*Gq!*8Y-WfoLo*$$1Zfcs(F`2p(uy#YnLef&jtTFo!^$#- z&<_JbV7ckIM?`DG=|YqdCz!G#2L@;|ty|_8uZQqr+aQX}lDQGXclY2f#6Im+EN92)Fr>wKnv)ZNFfI1@DXy9a8Q( z{Iq}Yj(~8T737|#bfZZBqzO$fSWHRXrm*R;ZQo&6w&@=>QS&EP5a^)C4jw;cVbC|` zp8BaNcrNy#H;RD9Q<1pCXz(=RdJ;Nue5P1|7{idqMaH!8e!lwRNN)31#wH9@*&UPN z<~D+sT&#?M%}_igF`5HM)^CbtMuTGvVqn=RjtO-RXaN;kuC*kOb% zdk>sDpW&E?+Bk-XLGCZ@7GXGM$G#)jMTTPMN*>)=+B5| zIA7U0)Kk-+R+gogp_%K~I|4*AzXr!BtBDB2)-Z618{!x#@dr(#5M404!>t?xnsv=bb7!sH`;Rk0$x|FVG+lKG`U6H zWN6a4-7)=09J8z$jycL}Y0mjA&-^#8SyuPgV~`G(%yStGT8Ttn@J%j+ruve@w^O4@rxmzpP#|zlO!^K8V|&!>l=h>kWN{D`kEOMEl@?@yaQmilyAv z7~o^)fuqOTH~6`H1>ekdcr0C2nV*7xcM-2hhA9|*3PauiMU-aXdbT&|KbS*>; zDCe!^MTu%+(Kd81FnlRQh>cAHMUkIA4Pi?U;EU%qLL{Yy7h|Or9t~?i2j92QMk9}L zx8RLf)u@|jW+3Qh%-foMLRhNAz|j+#vB?av^9ySMj>+{>8sj8aICl-lG&xC;Bh~R| z$~4o&WNrHMT?yk?Ag}KAnpX9}7V4{E&SbioHku(6YgmnyTaRNxK{X=K^uT*>oZ(o# z)cDrdEq$tzrl^HbvxTU_F@cVrQGs;5r1YDI%~%Ct8kCFrq$8TaD@@&pW}FphURF#A zho!F{kMUJFCM3|gKWO(dAk?V9u{j=?sYoIi38a=FzyF&tkpNkl{)}O#Y72}dKI}t4ol*r1c^2*hrWys1OMz;Asewh>h@U-w zsrYurfMc|uKBgls$#Bf!0{KN6^t(x0d{Zg)!)6iyMBSgI$_oTmmh>Trzdo!L-_v&$-dm;T+bD-91@6#6Hf`AxdI zzK!u|$~0r7fYzly?|hh)wTRk~^sN0@=Hu82&G4>sMG*rlyjX>1xZmM&4VzOc0!bY z7k~DKV*(vb?mL>v;g}{`Pu5|t99JdG(*|Q?mBvv^r|Y!X1I=U7g&D&Gu96HS+;dwB z3ByxDD|!bvFS2<`^oyMpy~Y5Jjy`UsWjT&WWP&VCtVA9M$6&7waSSIF7Kht`V^lbJ z2Do8w#iGg^@%e%CX@dIiS+O{_kz$6b22jJrLZsFa|9}FmTTC`)XuuB4hinFeh?9o; z8_YU$${A*zy##OJEbU98BVjL;W|_WBA4Ae84{=tTQhw_78J@x}#Sx^2C9dYr$=|jf ziy_{$aq7g({US!jK%g9d)&%G_uoxr$-h1;e#!7RAyCU=vNYR5XFp$#NoIC(WI>KcF z2FA*Dp!v^&Aa9YTvZ|CKX^U#YY?K{qmCK&um?8$vCH7N#_rVivb|c>2oGZ@EktTeb z2JdX&vt<4p-5#(@cod$dl+E*<2M+Jtf0S|=j$xt_b3zZdH)kPbT#dU>75!0kS`&Rtj%=#lBaAVGfMXgS)}`vk zk%~_48RWWnSxa-p#Th6*+LcPvq!r60=;|lIME@rX#d(bnK%~j1gr}XK#JNt6@%4ex z;Fw4`?HrLc_m9LZ>D*3x45{cJLmyKV&5=S3kVgcopJ~H$RcgWsBf*Y=wDJVp08rmC zj|7=fBis|KE8@RMGxiAo8BZ8*7(WDex$J@}Z509NQJTChjyf|y~$pu#jC%aCXBaVekn`Poz3;IwXn{PM1 z(y5ngO?N+2rWtZ})d}4dR-0NI(;-t0YnE%5Oav`)Tbnz3Sc+zJTMsxUloh&S1deIu z9BPYbqlieUKh6Fl$L*!Uc!q+)cNmL$9FtZo&D&e}!sW}}D=x2Vkea-`1U}J7~x(ia>P>X55a9~Vw;RW^k(*#`aQF|c9}jy{G!s`6iR ztjj$v=5%=VYqw=#m#=N!2@eKYNFPJ$K63YpcNfQKg`EeL1MRw%T-7LI{^##(BLIlu z(lm@F=PzBlaFN!;X;@~!>sTAHjhSQQ7K3%-@V0ZjAv;o;s(JE6hR>9F$xav?af7cr zhTUFsGd)cY1%6vdWN(1-&+X~p6J6?EGp7y>X4D96;-s{CrJ93MK%*;o&shAWbVND> zB_oMgOn^IUtV$LiWf@PL2KW};H8WLf6;s-Kxwr)anKyHKDlLjB8^#3iL9NwsrdeE& zTu%FH+S7yPYLep%YBEaJ&=AeUa(gIFUQS&cHD*kmWQP~gOu#V#!T7#@?aJ`c9}XV= z=FrLKTG#7#O~b9hQ)3^zG~?svr+s)}h_`t5(o=t|RHm!ffwkQMeP@3~Ss3EG`pz-U zkhh1f=&I0S;v$X-x-o)hS2t*e(^zl_3#c7jZfkRk1$Gg$>)_Et?c;$BH}Mh2IH{YR zc^)1vIy}Jy7+3QVjI%V>yI*5u%M|dUJ5iU-pA+d<1!C(uqM1J8m{6JATuw<24~6@S4^XW^Wg zxh;DxIjJBfK#dG;;Na~Pg8rBiXl~$-6Q|B))}S_jCtq27Ty;cPo;rJB=fR_nLxVxt z)3*C9)jel7@S?rxy&)Jpr9*z{?X9vymi1gFr;^DEzWG-=+^T)@^f>?vhrO9F|9_ws zR5OVA2d!4Ay~*nmWPuW%eCTd+u9z#tU{ybTW0Nps+0n(Xib!wqY-c{XgTz=NbyE(< zMEbej8x3nf3T&+^D3lnB>$xBl==tbo+NTAVS;!H`Wa!)Ffk(bSwEJHTUf3B*92goH zq&IY)5-u_Ie6F`hwc+cn>u&M9b_17R8Jcr!#;>28^z`gmvoho9;EB*_7>v zdIs97dS^w?9TJ+^)pr$+2}JA!f@NpDZvq%osLyf-a13<|Nv}RNI$=gV4!^3pV$r;?m#wOH#<<&m zSU5JGe6lfx+qfV&bwa-af>7jGD!%k5N$>8^t$PpB#2`Lq?2uP;-@Sa{%0=@6jtLVZ z+wB72Oiy4f{4nNeAUT~}1CJy&;?z+v{6=oMjn(^wbwt>l2bY!bNpm>m1=erqV3h2;h3}AhBo}hnEn58;Oa>T zX3WIFF_Q*;gEE8cMMLe6{J;%`%h-XT34=o{nS%ph&EU23Q!czX`TPqS?4f`anI7LEpkLE2sderu0L{{T}V3 zrF7#=)9`Sqva?~eDTL6G*b(|BP8GI@;nI%V&nTBFz0IKYl3D@6NJT?QC}a# ziFoQkf%=qp0LQ4nfnz5KT^PlTud2_U!^c@hc!SoMU8?ey#^V%p9(r=z*dcHRrt!XV zfJS2YVE&w$>%6D?u9@aX%|J+ueG~k$d&gUYaDW*}hNFuiM;($;woTx97ve?WRV@{@%p=w8~;X1gD zW*XhQujaS`6cY3n?9H*n<^g6GmS5>@5p$ZwQX=uNZi-_J9eFXQ;9yr;yEHp@opO-g8daK$pu*5q=7H*$F3GrI$6j30MQxl_O6hbJ+1@^8 zNECN=`Qela6X@;fPQ*~aXs?^a8@3k!Qh(d*(#;=3PmL)@aT<=Z(4b%qRZYMG$d40e z&Yt$tgGm#LVn$vAswOy#YNrXTTOaZ8A`W=(%EdLvNd?w#+oL|3A8(?os#SmEO?aOi zmgOHnS5b4$Iah~FTY2t+g_-fn30<6cOm(wp7WYXhwSh|LCzGZ;ZYhzk&~jCsyg2$92452+BKbU;MmFFfYDI3)-8?+b?7^qK`_d!awub| z#}si;afgmjASUi1fPHkNZ)PyNSa?THWN4-<86VkGRo&niiw*Ax=aq^*P?fRU_;6V} z_m`UW4=VswFabM`ZIjB^2>vD&$Zgr}k4^3qXU|b!P+Hia*W<{v2os1Zk`Sd)NaFz` zD6JvhwQf5C8bja%x#DgBOK^mZF)I+w$F(zP=9iPw^9f z=Ek{;7Y`gc0ju3J^zErfz9iR}$(cE+9C6eW4NnJJ!4$=ZW>#z0j>AWH4L>q_Vs>A7 zhGvp(40Z5r!rutTK;}}`{x5vBkBBpjqHc!H z($A=POVgxbXvW79>lV!f90T$>m{!BbVp%!iXNIR+>X@tw%~<}Hc}x}p=`77X%KfYt zo(+r3C8H~Y zV{rJpmn|Ry`$aZaik~>?zN5zlT#HxJ-Yt6$(zW6d8E+aI41%BR$8maqHKj}tor{;R zqUj7s#|4=-M78(baF>}vCrkimZ+<3DZ=QQf6W51j$$(m`4yXaFO3Yq*aOG-lyB3IB zqWA^g4e^A5gJO)P20pZAIiX!u2jc3DExXAv7dow6JdgLl*s(+2URjmCkMX1|6$M3P zN|Qv#oLcvYsE(_BTAqvmIZ5!!zNJ#5*% z-#NQ`r*2(v{9lM>Q3`66kfzhOzOpU9r8|k~Gf$ea1J^GPFB;nR*6}HCpIfnb>Hw?R z4Kx#QN`NZ?#w2j2U9k~32H7AZquL;VnD8A7%?0#of6+`%PM0p>Tphws9K-Cw#M)@4 z!CQo&nF$kkmEkQYG+_mf`!Po7koKw4&iWYsG#DD<>4~14REuq?L^J$m&fj=PfyBA~ ziP@_HxP;ZA(5eK@;(x!(058KBftd zxjB@!h+NZp=+E4^+W_}KBo0<&W#v$YR5DaCbqMs}SD2$v{}Ypm)v8Yk&EOiQwdEAN zQ|r@rdFL7Pw9Muj^b%CmON8JoilD-3i% zGXck#;SF&N{ms?_jtTY5NwwI^RcOZA3}`0TKQUu{05-Mhvh?bcHF;{REtG&}ESQe? z&l_?yHe7x!Z;EE_7>)_;O3_Tz$24?xijWkJfl7PUsifoHGm+37>@L8Dawx+iRfBUQ zdg0RT)ymMdl!~ZaHNsD5#K&7N?7Xpq6?^n8g`j}9<8~=zpXKJc^ zW+mI@=z04+mo+OSsA{aGbXAl#u!axf*C^=u8eCOMQ|GsLB+fi#D$~+5T}6iG7|`Ox zi*#^LGlbrPp&H+h5;rCgppZ9$uF@gB?q9VueUuAhE1-->X0qJL3*3J+fTkYD;KC*V zkeb#9G$hZcw|Y~_q@;w=rzG>8O2?QcF8&x(6*ztN0;W^-v_3w?G5T}!u6+h>?u@DH z&i~&-7k3Vh8yGXGQd^d%496_}`>olZYfW0$8o#J@=I7;TW@sP-9oMcc8?*7*Gf$tn z+*&-v6^`CQdSTqK0ocmSEgNhWtdO=gcY1|GNsZ@zZtcPI3@;iRqX-I7(`1BC3A!5m9K>&eOsj|5kKvg!e6NcF=i|VY&CA6 znUjwBOz92H*e*btmQCj8d-3+_V>E##17{&@?^(X6*rFK25mlcMu__iLO9KRkc~JT& zM%HZftw!b{Q(^w>nH|fD1O==~hug_ZOgJ6TG))g-nh}+$2QN>%epQzMEGR5-KUR0BCd(e%eD@sV$<^|H;Q`?g!qOFp^f7OT_* z&CrMEDjBnP6`+EmkHI}=Pn*1M((B_7eVGP@X(>Snwe)V_n9sJxOlu8}YfV_v8dr&C zoNVGWGr4u@%JA4%&)&o6G<)FC%%lHy=AnN+;nK#z)@4VfhQ_r|bWg~9bcQCGOoL(u zU7s{2+pK42yssP`cl!D9$G&l`HSx-Xm5$Ej>KAZK4Vr0g$Ot$l(1&JZw6AbNK9<-U zj=4c_!gy7ucExijX^7HDwlo0Egf~1}T%~B{CXN{-{7PN^b7Xh!KO8PJ$I5EbTM-&w z}` z#%|DFR7^u06Cr8#wvdq*nf44sjC*86JrfCyLZ<@CjC{FcNbRoGQrVCb0DeN6;bU25 z8^r6^$sWSbA18T37(W^iKWRrd3}YT|&~aCh4vICLUE_8oI|iu^ z>7&tyn*f?N6B!#0I+p6LO6O{<8<%Qlg^W1OP2h=qYrgV>7rfZ&$cZ!1Ej>+8kN^be zkH+2<3l+%98pw`}rIGxOt&7r|k<(;7glmSz*deHOrDR9%>Kn*flACw$vkzv)TeoEP zge|{0aQz&8Ow;p9DUJz{Vqk1*+`QI_XIob|oTZkZc7eRE+GeIDW469@>FGV^#;-f_ z52j!ExfwcU!oXNJ)=Z|&b8A*+je@Aasq7=rzPEOj#8OJ5p?c?8km<*iN9pyVj5~+(R>( zobm*(@Fe`qs7KZ=tHC9)CUB4Iv;D;Gu$LHL8bG!R&3OM?DVlNBLRh(_1nVRFh-RG3 zz(xX^(RCeLY6wgl;F9f+qhV2HP+#--)cWmh_l`oia#o-R98>Cw&~U=X%BO+YkkJr9 zunQ=YZH3QY2+$-$C*y9SlPN|pMJG<#-S`-%@F7;iCv8Jt!Y+Pul|D(sCIdv7Ne%5C z0moqF{A1vl(hJ%8Qo~5Z7MX3*Pj4!ysib=_X$xG^&=s^o5CRCFfFn&2pBiBnD&}%L zoWkhjj4ZL*RROD)h~nPC##EJNH1Rn=qfcl@n2iEN3zT({f#VVEDF>H^#StN{Iz?*v zg1K{NWjkQXt*<@z%9~quZQpm;+u#fVj0;M}10bfjNv@QF@N8ISmdpgOa2CxSVOqk$ zIbUPSHQp^WgNuF4^UC`8s{}yt9V)E?+o!=$UaRz6&Uf zo!kuj7I92y-TBR}!@t+Me#-+iZFB}it_}}gzdAfHX6uy)4-c%mcj)`$rwxu7pWQ=~ zA(A#G5h(o=pIuthPVCZ}!7Ilm9RK>Yfk{^;-qVIsDBQ>y0`X^#T1UQYE>*p%C6F3D zjtO)aG7K?&aAP#1?ire~z=6CVn2>6dX^U#YSPvFmiNNhcC!wA6Iat31A7pLzeK~viI~9VK2YnBosm`R4+iAV)%emzmh>&(4 zw{3nB@~&GB$6USxI7aE&WmK0gGkiE9oK_|cGn(K6r1-*-z7%Pi{)Wjj2$h}B1vXt# zHVSQ@mFz~lDu&(_!P3ML(753PM~2drn*%f%lpZr=Od*9Pe1Vs@e#TIiE|?QGb~?e% z6>)DxU&7@xKjTJu!B&+h8hiL|Wr293#!ZQ0v6^Th~sv zW`3-7z9V-4()sX;%Ckd&YwE&`1~>3!xh*WQZZRGIFlAu5=JC=CA&a+ z+?f}LuU))6<*}^r_Fu@5hKnR>n7i((cSuLgWG>R|Eye`3pqsH99Y=)>&FD80 znm)!#%y7&|g<@%a;2v87kKmXl=_3(!tJck2?W1m{U&hl|^9;?5bvb8-X0RY2K0Yc9 zw7X@1Vumx*okTM|B@ab4^&k1bT zEK&8oc-b8!SBMQ5#mA`=kswO8Z}keX_UT+qknrI9%^|}l28a_#-!9ywu`kb#(R69! z0OuWbVdkMOyREz7w4SN>!k-G8p39+xPm(^O{*F9A|)3mdu;; z$l4X>FJ25>Sooul-Jc1)!k@Wk24?;Q-Tax!W_RxGX0&ujA#=wjVX?{L`-)!>BI^!I08z_UNu znz*Xy1x%OVDAU;CO9zJ69=W>UNNe?jL*E!PcpZ}nI3@s@vawC-AlSaNCZopn=KT6= z0~4=KzAuZuiDts&D4isMP$_e7f@5Tl{TWD&@_PiD85+V%>j|2!I0FO&%~(@LmNB9U zE{Qm1L6q2C1$_I3$W1bhNHg>g|It4h5z*@p43Tyx)0(uQ$qkHh zB~z<7xzGkE*{vfahaCbGVrLKlO8h2QtRGX>BC?E33+tz9H`!}7Z{)*$xJoF15kXbE zMM6E4P9uXUXl%{P+w@a-=~D4M$vu?VJd0^$m~?(e)o4o700nm$!niNzZc^e+!T=4! zqM-~XCq9NWcJt@VC~i7~y(7>xsc6N_E33}*a*#ZVBAcpj{p|JNbo@&nc|7M3key{o zs@2BR6C_UJDuYH=-4@TCou(imf@KqL)tTv|I~)%31D@-lTun1`WQ=EUwB_LOla9>; zpbxBGI&s`s7;f0yvDGg{;3wuYv*CM+%Y z0v>KLF_NH*md;Hl~E=|1m`uK(I zjAqS^KWz{yYe^QDW9}AOM}15n75lS_a<}of(2TbT4K;d;5KTj-kMZuj(X=V?^Oll>sX4 zkdBcZ5e5nY$C#$w`p4u{YaPqVP56$Lmw*6r*Lp~arKjw=N%oMYGXrJHfkZMaqJ-=( zY-zI9OCFeZLo~5NLmVbDhu$&Sg&EC@zkMl94mScXUpTk42yzIYZ77FIDRdjjq9IG} z2yTvud*{U1^xt7*5TL-xv*&6oU%9G=pZ0dPAl+Y#S4ymxNE6QFY>jVGvq6ej2_M6h zP&Qw0x^BcU4G@gzE`yh4B zs>Sood|5cYD7RiiLwZf1Uo3b&9zAt>#+1pCS*O*$^I=mClj^oyI3_)KNJwjrj`f~o zuCouUTFQ^kR)+Wg__J>#KF~fTR98yGF?;@5rhQrQk6YutKdY3bv?B*6wPt<1b?t0x z&p%C1XorFp4{oLqx^n&cTUS5%;I;3KVR&*P0e&@*z{d?%Hqe^5qP67jwl3{!?f$2& z;gZv8+0pTdgI6zHpT6gRIX>aHuT8kCmAx-6d%t(qsCK}2Rl9Ui80F?TCXmvf{k1&W zTdT9M@T}PH2?@&GeTnU%B@^ z+55TVq9b&;tvDt$WcuVu=9S8<-@3cCdTH*kPqDFKXN$cU6i;*8r(*i5n9w;@PjBFu zfegoR!>CFY<9F^q;s=5S0%P+yibal%J}HG#h181yp;X>$7ug;|f*WE-H^iey)x zF`AB@lsWCz)aFmmBan*&2d3178MZ>Ec&MVQynRdzOgIFDV2WeHlx|P$;mg;rJ#%E^ z3#azIe0u-uXAe#r8vod|g+8B{wQ}CTbZN|aXO~`hYcnF){gV&g9jo{KpRa%RmA83r zg&1nHpS-?-kp9FI4+T#eu$Uh4;L*&XyY!Dh;&hpthlh@xgk#$2D@9-_wc8YFt76r6 zMZ8onU%GOQz7w4X)-1Ec=wrfF3qzN7iyW+n&Se^!azG<` zeCxut>=bqK7fx2s9^CKFBUcO^9KQS1wK-$29~&CZPA6psYz!~!_<@%DW0wCw-V3}k4vc1w-910@ahF-bdGZFJb5 zQ}Kap5SAI5*>ylSc&%evTrr$`w?;8RhzX}Cgkk-ujUDi-sEKD~urtXes6#VzX4;3; zIH}wL9205__L*Xip+GYOYnINPIX%~k+)ro*3v$ljHldmBam=kF^i?LsexaFu;TT;y z^w0ju|Be^y{qSMs@iVjXWXGh(wLMYbneKR8Zm9b5lX8fPo~@Lh6#T&!aN6hW1#aM{ z&R+2I%(;sM2Dck(I@QKpB(tbk@k=X!6raS*y=`pwFS0A8SREN&x?~TObCpPQzy$0y z6k8pEe448-VTI}n-MeV+Y|5(UH1YF&hmVt0=1fC}>*mCpr)0xq&Y;naZ@>-+CVcOn0w?O3mPZ5Fe%)^{%NlLfS z>h?b+DjD_EgxKVUf#Tr+K95{vWcN~zxihB)5JM$HF*EVtzjq(q(8TKNWFn4ne+=L< z`JUFSPi88aBY)63@NZj_AI$ERDWaL-YpuQiymjoWt?QZA^VZ)$>)OTZL#=BsT=~VT z!|>3+oWY&*hIUdRw?Rm7n#uGr11s7%hAZ*l_|}AFt#Nm?PQOT!-Xe7~d^zXiPiMmevUE>%$8b!jWF}R{3|aWl z33Y7X5;bim7w8LV?!!R$(bD9O2?qquZdE=?X}-ZDB+Bj=Ks=IY@7n=_;3LVgn>gRLKMc<6F=F*4|hC z)|PKyr}G8T#*K0EI19*g?V2MZtxH#b|L{9MIl23{7k=iI4O>~F=FOh@_3a~VN z{P72uFT4wmF&}ADe)#I!uWZ=v?wKFG`u3mu*!x3bK+1=1#vG2>&1wj*C@P5jn~}Y< z`&dfP0p_7pf!`IK;2)D_AuWQRgxd{l&2_$~VHAX&koL0@FQqsJUU7NMl!xJ~44@qQ zdh6WVtursR#xKa?)4zaYj(nwc)dXnsi{z=E6*V|~#YT)i<F*<|eJ)8rCfTHZ%&%@ImlBS-IjdWyJv7tX_NE5Mg!+VjCiSV+bC+*rmZpMk zroUa+q)()wb2ZVx2=_ibv}Rd63t5$&*_tj#PeMONq_|J0%9x9{JBl{n1jj6EW>;#8 zV?v=FCwz^islPZzeY)6!=en%^CnXAiLOOC{z_^X58Aj{iYBHl`vZmP$9$r8eLZf6V z0ZBPzRrqASz!|FLYyjqVVdM%*&KjeM-2<%3zIMBHPT-U|Z7SDbrm!s4XOuSPv{$Kzs${n*9soAYd`y+#=o4`aWxx-PZU1k#wsFjav8`#7S`)@)P=+|Q zUt|umOP)5dHD>U@<+Fcz``3gFO#kywJr;bP-r2sF zUr0HimTovWfgXq%_;xsL0`bd*UvpbXrhf!Wd1z0H}Tl#&z2AV6%t=5dzgH z280OjC1~I03r~c<0e1;HaWt{D_;0lq{MFX_!Y1WjWbYm8?DG#h<+H0V4~8lS=Wam<%^eodj}m^(alyugKu=Td$G{ z?gee#Y~ z8S~!xK;SRdrg~=bxSPKmZ(`WBHAjGAEVxVS!$2=|rs1e;YAKG1m4P#;XXgEd%mtVu z@TI*sv@Z>COeisfGHrBpX?TiCw9(Aq@Py^V%l_dF#ZN3tfQ@P5+Sd5_t+BH*^Om~h z{wQuHWaK6t|C0+BFY$q+`%_SCuSXr3dyZuDpM6I&v!R)p%yzAfJNNZ~X7~~Qk(T{uS7@dojtM>11kJpQI3`pQdz?2r^ObpH^R6Q53Te{sHA@$S*Wuax2f>j( zZ5W1TdcZN^YUUn}(082hIW%)SaEzY0vC*-^z@E%SP&!o}z$4Tu(qX>-C{%Bncn00| z+puSI$pDw)q|c?P|7jN<61Wc|1ken6g*0Q(;+PO=i_!#ifP6%(A1`fBq0=Ufzu^F3 zd&=;{ApOvq<-h?gW2s6R`VX7e{+>)p8`Ln2zl4;~j8Ai>Z-&IYC|HbJb{~XQ7SEkU zNnTa@^})%5*DsL!Bk#u>Y`-URq&_A`f>FuQ>)rpPb@Z9m#oet{|3`)}_{UV(m2TwD z@P&Vamxq}Jv%far@I5fhA!gY>$Z$-mj|qvyOuoN$|5u#k&LXD1x99~tIDW8o;rfJg zuU$ERcxb|14nz$PW-~dRHkf-fzy)`x_%oE#^LO7ZO~LM9N<%Z2LJoP?)RSe(-c<^2%?r_YksZ&fl3;*@aJ0Hp3!P(&e(b}a8 z%q4vrHfcQwg~KOKQ6-Rx4`t_-rgUsCeN4nLIh}OJydgn4;Y+jN7-1pYCLE*CL0v|z zLjA=Lk<)k%IZ}^nn-Bg=r{c7m+18b3XlcVze*y_QiZn_fofSXX;qdk++_C7pRQkG+ z81WjTNjNJMH`Aq69c5%NK-6E|>kKyK5WH1?2x62q>6jfuk>i(5WfmF#1-*azl+^~J`*M9O!u(K5NieYK3Ibl(n4XIbh%u~w9V@B=9jbGRr!fiW&+F75@T!82NVx~y$h-0#X zvUzp#`YdmUY!{P#Wp<_U%UX;7&M>>x)ok-n@(0ZfP0O@0V`sKze>Ou}BXu+6efxOS z^@-m3dW+f2Vw?Oz=Qe5{@MygvaT74meYp@A!FuB`Dg6q?JYJVGW z47{Go=F(Xd&`b?YI40F@)}$=Gehdd2@Y{*>UTA!-(o*=`9+cir8WY}uov1dBQaBC zL({JROCgL)e^x;r0 zRHDmZHDw(cVAk4n!<)G%hTaFAGwaR$#(|?q&aHNR3wl5x2$JIo5s>U&^S7o7B zs!bka7Ro=uLHZ_h*Q+4J{~Gk0DXhm`L9xQYcOd3`RxP*}(~5#?RJER5E!DZE^i)^DF6W?4%Wa#HpEke zZ4Mz;ST5*;AtLPK2n*o%H!so?H-Ls<^p`(ypbyue&wJ;Jf+Qq>j1c~UMJ6(yF<^8Z zD1w<-?9%caQW^Hjof^A*^wfDS!@?>Yh7Bjw5Fd~Ox!<>aE8ChV^S6I^^tt8}5{%*W z(4G5D(b|h|oZ?bFJoQnH5MQQoV2y5?r(YzavxX0a@kk5D5CwS*>uD(9p*_Po1?><7 zBd@rx6!u~=zH>u{sF@nJMv=!zxeb zYb7Y*aOXr8c}%?R&e+PySfWnt_eM5@%?+l$D#wr~w-B3u#rh^XvicQ(FN2K{R~j8S z%vxKqc=gkID~vS0=Frwx^L3-p40(wz0~~{)SeP!}%v#(S$53sx4SRfwEoY`WH4M%8 z6IqXs)k>fl))*XnvAJA>vwk$gA`N42!#F&k)KH0vSO+x22m$=Perkl%lPjVbs0M@w z!L#hptjHiHr)N6hN|*zZHcpj1n|TW|W9-Br*v3*6D#f(Zz%fx5(jz5Edc&ZDP`7*RwrRytJy8dA9CnQ*ao zF)4`RD&7N{vC@z7I={HYK~?9*uRMSJG`cU?5{W}`Aex@3ZzF#plmp7DcM~Loo3xoP zqGl%j-GlvmhoL^D2T=Iz>nBloBgpye;}6PS22jz`ayk%Lug1IK|LV0-U`}B?(v-&# z5gvx<8&r4ao}sX%2n{F?A&*Y>z$feT>0;h8mnp^s%`|L_rAO3(b-VvWfeh=3VCSo2 zKwZF0sFqIV?&a9uymusCN5@dSbx4^Hv)y{n=VFarF;3pQ^to8}QjDWz>dFp@_L3?p zE90?0j?Mi@r(AM)I;&)1&XdP5;L6N??ZD;lCao|3vL>r@gfXLp^^_UL?XDTeNV0PL z0V6>+;a5a6?!r{{)xt3n7yAd$42R{IIxjx02hC{P4u>(B!ZFcSO#-tNnmIjsH+Ncj z*DyIMj?xyqhy@5}MxCeMShCFXM_I!$5kL~rxoM8uvT$r5j*(Ky=+(`|YR5t|YQk*v z!+1z(5K~ILJR46OQkE^t*7bA!@=P$zT+?TlWw!c)z@SDb)1;sbFfa_t2qUcR{;Ji| z1^)}?!{V2=a@cLL(iH>J)q`Jyle#&+$Q!Ukr3A8QGg0mx%a9g4qFK$-dF^vTi7#d!UN!hO4v&v0^GiW?=%9uLi=FREj9vs3E+ z0Sn4hgJVdTgY5WwDs$IDv5N}^3M_&W@xIR9IGQ1zWJA1uNZErgpN!3XPnqc~9E)vw zysSis;lMGYe-xX2UP*2OAFfefwUkjqAk9f6VX3`8oHFf1^PKS6&_`NM?yXdHv| z8v9UiW>`pvzd|#`BAa;Ce2mA;%?*LF8AnplKUt&EjJUCAM&lT=2&+zX93$m4(2SDJ zRNVG_028!gj1}+LBywIWhjhiJY$xkck)<-vGD73klj!lD8ygc3*Tl_KGo$&x(g#^4yM+2s{9qpeDi3e&cM!D{f-QFkFCG8S8BHm~AG<|r&9p)u zgSt%z4s_6cZ=Jiu?Bnu~{_agHslJP`hY87nxq;!8=fct0!kcS?5QSqt7sbw3CzxMG zp%gojx$9znAHp^E$Whv%_9EAWfoyQ=$5S@lq0W!t3a7FEBertYOJr3ZGgl^$S;a0Y zh;l2u!{wApF2nz;SZ4KK572laOQ^<6x%3C*!PwS5dY6;-sn$^~nkmCEd$)(-Q7J|g z(=HAZ+O<`o8F=IkMKjiD3~MNLvq2!5@fJT(67l00KeAMIzLoR|fh9yH0TE!8%hW*A zBsSN9A+;w&iNll`UZ5G|-{Q~oM9QQ6`Ca{In*jqTX;{^G|U{ke}k#0Dj_X4nCI;aksq{+my;N69}( zUU=g)0vO_Q*8vMtxce`D{E>(6J^(>~^~5{)qgO&jWz~-LH^?uFCeDhu&R2TJzw~#f zY2i+2D7HjI!64Bg7^fEq!ejGsQM+az$_wkbCw@Z1fKl zpaH~Gk7F>ALF%(otpE1nFK`zwCt>9ZN?Ula+fx}bEIc$L`FiE#w#jR17uD2PlufZu z9-~l;`~<qWw54%Xo^L80py`8?!YmG)WIq` zqN5oD$278z_fH}-FGez8oqNtr&pr-f!T zRj(~Cy2(s1`CGsJJ7o!R@`85&sP=^8n%EN{8K|z);iEX1rRKT>fiE%)xBiUbXBHz$ zE`$LgVfoQep9;I*6*R#TpDI^eVn)nSf>9mpXOXWW)eMV>F&ENB+5w4ZSeTpa4{=9* z!wBnagA`PuJ7=3E=a&NrFW^dOsksvSRs=LhfuTYySg_5p2~y}~m6O$6JRU06Ij zGCq`Pc)sph5s@#njL`7LK?2SBhmVME%)?p+Qbn>+yn>f1(#q4O$U)L>mDw- zMPyCw^tc@vzw*szUqxQc2JBBidaqOpfI`{6`TT2R6YBIZ&hCV0zH@Pc!2r+Do0|y5 z4>oTWp6Y;W2?n=y$PvvbRk)`~#SFHvQ03V5Q6LVl%?oL%YY zkG}?*N!Ech{9VGNorx_TQ~Q;sz8t&y74HC;NGlD1#mc-|5q*39XU-K4CsTDfbp>`} zYis;)f2!VlkiznKkVZ*p2pmVB#idKR>#>1fS64n^AG0ctVbt)bKO%-vcti~)&{95I zoUOZaq492Y5tFKg{7S(U>?tp@9;;kaq!RTWH;yq8&uR?UzZ|m!Wp@)v&;UpDvekp- zEc=xz;uwr7$dWC-gs(`ZOnGR)u3EQ)Uy}Z?id$>?$K=DD+W< zGcg0F0}Rqa@EeX}qSopgOWo+;V%d_uTIZ#$rN@K<>{5)z~?Y3Y(yB}fdOjsoSL48uXD_iSxqY` z&W9xohH_Pj{jEec{1w40kRKWsWqO#o0~v`34rp#DBOGQJ+>9=2T^pbg`6}q)jy=PE z!pigz2Et$XC};NVXzAQm*Yd;s71q(HkUWm$onw#n1o$Siq69XDVqd)RU$-9VYiQ4c ze2cO6))tcDzH}5=D2$j3VmS`3CQ^$ckUggYUU@u`}o;W&W>ha5B78c?mPsbw)-Hvn9ujbSEf4? z7YZvejtsYizNMrOf1HyGsXFAF%3kE7ib+K$zzsN6B#mh;21`@Lz-(QXt~{Y5i2m>9!;EAq}h-PRg766?Mj5N) zS7$(|4Gr~MHg|j~-8>j;`q$aF&J`B?nkGi}M-p3pqxrVJ#t!ZxLJ7ho;SvcYeQ9eU zYv9EbNABce+ZT?X;-vNi+Xp3!Gh^e(X$ZiDDepVDOBWLBkmp`MK_k$!M{eJLQ zd*t$!qbJV;1-|-&A2D=#tpzl z#aQ-oVB*1^3diKJCZ5Xm|Ly#*$5VCjWGc(9??h^U;;G)m_Ec;rl^IDi9!Mk_Xn7tZ z9nT6FHPh(7D#I~`BnIdUeFC0d&2K%q^6-iLLsQA!F>q!8)I<}f6xx5tJ%5^Z2L zg__j=3@WfV8RO>AgD@f{beVx+ay1bQMB(UkbRbBg*ErD*5hE-6+jocVpONL%I@44g)^Edq{4eG+NJgmP~-Xv+!wIB-0XtVeF9C+NrGX-OEd{HrkCwgVJ)w zu62YzlZ(ZPw6^4i+nOeRc?^AryqfR;J0uG0E2fIgFhCvy^P|ixz}TT(v6tmIN|s5; z)%5A0j*@V+6&Be9@a$vW1-+8LY&0DW2$AGd*ogJV(mwvB6bS}E8Ay+ggTunDCJiuy zRpo}XK^LSZ60s7JQK3YCDQBrg%#M*qNGFu>b}&WBK4O;Mtu(+vM!YFvwPK5LoL{tH z1-tpLB69}HfC8oUB9=j$%R~%MuxbGf8&-+MGBHpxtnNfo_Gx2tA`gC#bY;2)5mf90*+nZ>=x2|VjLw7wZcK8N|oF`MBfrVNm@k7EdD_2x1 zKlRxCh}re2rYA-&$+8Sn7_$@El7Il8k^p*s;*s}>pb<-&#`^jny!sYG(YMZx36voW z>`FM6gFVn4&|JC$1*@)LwGL=>wNb3_7bX>sffVXp;oVDqvGnmYb}fc!6*=e ztcP3Da=V|+{L(x5`&BHD2trRG#X2b^gYoQtIoaXLQjFg#6NMceg*$uW9gPV@eSlhz z;w9*G8NmK2Mi_xOGP(rKXof0`d9~P~|N40YIEGu6uP%$N%<;2hC|)a`1`e8`**H26v$oxFwFhvWI3{AnrBYU25*IXszs6M(l9|N; zbb@B8!ZAem`aY_}P_hgAD`*Bv#a^VN-aSnftsOu!=$K5(6P7rqUdg!?w+@bxqOKFo z`0E=4Wy*Ij(PzL89h0f6-8DOq@UGt)qwoK!dzg%igW8<|{Xa@#?r^ zobIOB6aZk--O--QQKX#JzN$a7z_G^VHfkEL+8-}Lwm`$zBBvH_3Mj>Xp?>t8Uj)4?WVE#e~!6ozg&ZjcJ_Ga$G zs@u_!0+c*cr!YE5ObCwr&dtU~=8A{<;`i0(8tRfomTw78J6)nx7zq@Bz`8u(7<1hy zXvR`xL}cnFnxW&sF?1rFkLwH-4-S7|d#IMcG4!?G|3Rjp85#u1BF91^q;wn&C21>b zs$vWyaSZ2yzYZhu@UoPBiCA$9$4C+mG{Zmz&Cmtb93hICJwONZL9^+Y>}o!5&_kE7 zj{&h6a8pjt6WNa=`S&!Ak$P<`npp!Ay49@n;vnxB=j*Qlwv%h$qPn1K%oBK6)Cfkn zs>TmP1nR)r0>yz}Dn+WIPl1RSIjq;os*5BXsuQx4V-G5h*Yy^qrud#UR)%{etAa9Q z)!E(xDFMw?1!W-CQ7i*U7&Qk()-4z~H8!pYQ+pds1FpjWP*6rm1mL6UKOsPPA}9d6 zC;+3F3NLKORyc;oY&I67yt05ZJrT4(@nPF+x@LLw{yX;rJ6?YKtY~2{N#+=09iFjw z=E7wew`^M#e=RB0V*tqqr|l6^0#Fp1<$*i)J#c8Rv?my@27S{yMKbiJpp$(=18xNY zEJ4*~-)$5LEhUEi7P{vZ&-=;9KN(dXbP z5Ch^=!j%$^IlXer7K{NcN`vk{e!Sb1Wj7@vcb+%@Bo=AfVjJv8vaK6%WKQy8NPPLh@miM9_>`5OF&&E z>_9cy#S;Mr=IHusZ4SsZ^W0>3tjo<;N3xiqh$zJoMt`ET+#W#rvA_+C1xsTBvvx-+ zU@nPt3e`Fg2_QVcI&z=7K_mD<&50Quh++MUmEa84=ZnDy?3tE9CRtTV>C6iA5Is#r z0jZfRj058@(yy^$iPL_ZXqy>LM=+gfeeN{ zdddn^{l^36Yiwu$?hsUPjQlkdhq^5+E+em!PgHQ%U_axEt|S`fGRx`A*PebE#t$_4 z$q(FT&LC`lzxSi#3`OjSKlb2VtddC?1r~ovkSuWkf4}tI7X-&(0*rwIKBUH?mf-{d zlG!0Vl6El5=60JUafb~23PEH%fTA=A3k*h)I9(9(zI~tv5tO%^CKI%HP{tx^IpmpN zbECke<-zg%p_Sb1=DI2FfK=#&>yx~%^q!R$S|qjIdbyBWET~(Sim~&VU0~S=8TCuWSCYlKMB5$l`W`ybYjo}<@Xo>Grb$m` zrf`f>6F~!&Jm#g$XTUMJSR)l_YE%kH|G=93Z;f^8Fd2$f4EHN#2&;Rbg^-yVaX~Z4Y{}hf3Wz^<(@M$}aSRz*oyBG-hD~kk zL*p1JDpxKr>mk2am2pp-&E_!rX_ECxRN zp$CuLzL));Y(wK-Nnj0;?mf6$)~}KPhy<+@qn*UL(*Qb-Ka^co;hF|uIjUoKOliwim}FmJxKcQzv~pqkUMJ(ZnRt8ZPQ(iYHMoxFcnwuJzms?LR{mM&|WB0T^bz92`0FB&hP0C8; zTWQ)^c#|UIK5wk_Tc+@)$r2=7KM0e&VT>UnffxLw=4@Rutz8y+&`sKp6wi zUSi1QhdN>y=;046po4(Z&IIg_70p6*gy=X1!3oR{j$-PSbUNArn`bQnsYC~gjVjVd zhwNEmvEvWWBWD@ZB@=^vo0)3B{h9?Elp%Tx=#t}*xxgktWj7Ndo3Yf~kR9uQ8S8!t zNmjyC#8PHq#7&X>)DIISW)tLBweY^}Tq~g?Qu0^cKId^ORMqO_VrD4F^4{Bao2dUi zgkz*?8zP$tfHEawzuJBXGlcA}dMG0}2$O!T%_04v<3>*~P`IMgu^dcJSsFUcWz_ay z3&2_FM1N&vZ@e~*RoTQ zh+L%Q5ZyuJpip!-SI9ESnd%e<-lpskir4`w45P<(3A126v4Wgd$@!&V+F_MbzY+lM z&Z^E!U+rMx6Zn+@424BnbL5V_Ixr6C5kg}esGPXzMn17TP0zBDTSN2k2AL6e@7p11 zLLWI2{>x9jMD*8Ap1WiB5Ie((PDvR#{HP>klJ7 z1Ovtq#^ZBqp%9=!-)Z+cmP2|8B3M#sa$?AP*>uhqx~D$1G(85~!#cBsC z!B#A;nS=yM$3c$HUz$Y0Epgv-I7W(Xq8Y0-BEAN6zgjC94>K9^EJ?2m0Vq?ASHK*G$ANJ8L-S6`qh!EbWp;Q&2RV~WAFhgJ6cSeg;tq~ z9UQcV7mPq9oYUnA61C8rtIR@FXcy+=5jQTfr|(T!j#yJby``j4lyr z(jcsE%_#aS4l_H`KcbsMMG46PcVSntN;-@a*|as(-y=N0Okc3n6h}9CcoEQ|41lpa zQGw#vJf})JKyXNEdtJJ(Ievcr?*I4t5p^U?aiuA-)RJ08rjjnUWQr~Mc)jW-b%PQ= zl+;SpqV$J}WNUo6FE`m7&n6mr8H*vKEoibzjO zP!fX2z~Hag`Of6J|1R@C7diE&PMN%z)me`lVJCU80DC}$zi4{qQtV^fbB#&?O4*bp zUp5vA&D;na!?K>u^Rx_Rr8}fovd}QM1|k zFhju^8rietKvNTjW)wFl7A<*k* zff8yUnwAs-1D&0pa!2|&1)G4Cwt%<`rj!q}Q%mO+lb;)z|2gNN=28a+P3LH8Lb!N#0 z_=AX8t0*%Ibso&s>-h9+>JWbb4Rr^kngTxyufXKOTEI+PyRFg!GMEbjuxQa8s|zC? z{*_fjU}P!>cWl-Eeg~$qXk<{LaTx+wpHH!k6ZPwa4R4SidSHf)SJ2 zsa@AlpS`UyyEB`)w3M7k*U#lzmVp>*R!P?>KoSR*D77$hm}Ffd)|Fi9NiMb}GI(+~ z>y^T9+*PV5qz8Aa1%L31lSuLu$tz^G^yni(DtNyA2=nJCN;oE;I(V7%XDSc_V9kuoDo z)4)gvh*As!SHv-rpv+$~f~_<)C@B&COcqn+B+UqUlqhW9#K9yBV+RuKmi=p@84AfT zi(b?KD8uwNAEs7&YZK=`YbaxW#qFn|R)D})H07p0gh^iE&HlBW8M0b86O||q!Ktuq zOBPjaE)rfwn}enk?5cNVEAyeYEUZ{kJIm92l`-Aap!6XA2WD@Ia|j?Z9(Ew3KCi`G z#v=g$2!CFFA4@as4sR|U~@EO9U-FtWzIZ)l4HloJ4=FU@P32U)4{ z3JvM*Y^VH)%IFGMH^swpf>n@0B}xqlm|^=-syz{p31eS@=7S9l2m6jD`-+|8f*N`gPA`~7H12K`FJ~@J);Ar6~>Ts+yByq%wG%~Ur;P3w70e~|8P(miS zIc=kt#Dpfm2+mM-i@F2R4Evw0odgVK2DU>W?NRSw0$vf#M8q*{U!b9wEWkvelSHIt zSPYo$Bb1hnb>hjPdC18)4-k%#K=2_esrLFxbG@L4Xuh6xZLw4RAAvJFSvsy>ksq!}g`HZ<8GLI4*1wM{2o z7+4+WH^5L?bA-vIk;bFTgt%_$?$i<2I}ujm2^e@yuI<5@B(sVpBZ{b@thmHZ>f zLo%XTily`QU(5bpR$U`O7nK%QX8G6emSVusr!%pgZORy2Jqph#Ws|~o-Y_*Yx&?8J z6pul|)hrBJMgn3&Oy%e=v*dm^03B+}WaOqA2r{jVz6OTv4;jUW7K8KY{f~?;)JB1m zOQ%K@sFMczKp(W>a5t;u=x(TypP1-$91h1eoEmV9W?QryMWT-8stFAgKoI7|;*%mV ziqJ~aw)6-Mi&YTybrkj1{3MuOO$o%dk?&~=z&lVzy4IY@YONDgX;~)fwhjss?zg(c zln{C}3tbM6R`nO*eh$%*4E?|gR+SkLkV(Smfe?m86z!61V+jjWm48*txT=&PpvY`6 z{i*6q0tTPbG0iV7Wh$7!>g$O3(Fg9P zP1v}^vh^!Zz4UWWJj8I)nX*5NqzKQJC}j1F+XFiXbuAcsTCy0O`RT;9c1I1P=7 zN?v;gIyk}yf8 z&iL=_P!b(Umf#Y@i=`lt7azMB1?C8*?y4qU-PY6f|Jy+NtAqI`i`fG9wj5fMY>3Cy zNkeOoqHLJRsGkzayuR|Wh1g~!c!3DJwIT7(9_;mlp|#`;S9+!JXFr@$hYtH5dJv15 z=}h9nTyD6-Lo-MRy=u^>j5KpklZ;hg8UY^B^-AlM$C!D8;ANLS4E5;g(Fa%0Kr+Kv zZcfrg7nW*j99 zl+9F$W0HtiOmZPwB$k(9Ib#F4;o(2qZK_{bf5c;)N&Uw%Wga3;mmuf6>jU;ExSpL-QnL;%nJW>6yX zS8c!X9w?^H0xB;<0*4OiaB!f7=*uvXaW5*kN)v7b4Ta)660|-E#lW)!MC9y3??MA5 zTxn=P%F@)-)XdYOo=m>DX;WuQOKVGO>)PLzRz9mR&CP@*JT^0Zo4Ys@k?1N3?{8gW z>*dy;JJ$63*Aj43XYLtFu*`F z?6{^1FC0JZptKU6F#wu@Nh8+;%@fOCovM5U&FCoZaVx>}w31iQ4259CQ8C_dxEe${J1?Nft;r8yH?B8JF-YDiT@k>#9Yf{8$g307kUUNlg}tTK{~IqoX} z>&W3K5vB1J%VTy51<(T;D++#eqM!s}X8Z-~L`OMDizz@2Gg(#=(NTg_Q;I55D_wEy zQ6M@j`t=e@f6@-%8tNEc&814XFvY;?cW+tDxo=;!TrKj_mx%}wTfw}kqY(Ptht?~m+t}cXPUlX@L zbEX#91!EsUPY+K?S; z4pSu>y}XbZn#DcUO)>-;h{#|l1B3~w5-^%`kflf_V8+gX3ojv~FTQbFOK}JWRpnv? zCJ3?QN?SYuYCrXX``DH#>3|f`LlF^XAU+@iJWbT)hg<}}GYrt6S^}dmKCuIpG{gRi zY6(_U(b6+41ryDnTA}ZFn2BqEhNc182p&<0MTuLK#6`gu_09wA0mtTcPrdTyPssVYZ#E@+$-4)Cm9R1?k4FQG$Hm6D3FfYD1Bi5cgb*j#V7x?2PGB_9df zw|Udl^%-E00!Qjevd1Zz!uST%Sl6`WgQq9&d~I$S>FJJvoS>Qbtq%(%6zE&Mp_B<#^P-zz5KrO|J_pGuVlMF zsvCqt6J~B#`Hh71b;3m1{h)*jbAP#jZ1 zAAz*iue0Oq6Htp^JY%x_FnkbJ3yW?N40focj}V&2?ztTsVK^U~tH1c2XWw{djIE(y zh3Ai-Vmbh3%<7|W5`7=WG{63t4})N^n#5v8atDi;WX=@x_=^V+fn=KoG@@F9WV_)w zvA9uz1UUvrrZ7I%Q1oZ#_E|+H{3|9j32x#><^lpy4}u!+A8)(1x}(7JO|rFN^Cop^ zIj`z}U!io*mS352Fa8p#tt+pP$sa0 zk@1EUq0C!WP2d(LJ=ZSslk$Vvn5{4V-Q82&})QufIsK-ve0Kp4mi znkFTi@sJFLH2AX1$&=4Cv@|sz*frGA-gbRqdCWsIiIi&Rilhu<7z8uA8Ij;@>#V=M zzv(vbcd)NjIx{|979D` zN;+~?I0g_*mvNr2C2QBIZMXvl51L_cqGATkSgS;TcHkZ~P4pV!$FC~Wx2hfs#}JnS zpuIBDjD=$ud$7i^TojsVY2q9TKixCY47unvNo{CGa10de?r^=56q1Z&S!F^QO+y^q zS)!8#Xohx%ETCz+X(J)5g=_P7qnQBKi`YQ-kYvf4i1`_oy-DuF!ub7JW(A@Lf5>(E z(DzIdM_yuohhW#Akplqfz)Vz;M!GK|xjLg{4BGTZN3Yo-t2!MWxx036phK)T%wuGu zBu?kb4rFca8YPwvgLW^<9&Dj{8zqv_x#M6+Gi)sK2jw!uxZOf`9ATidvZskK2(do# z&^^ETGaviqPdo~I`P3ut`?XI$_Di35L?3W`;`~L~xWum4_Z`?}B^#(q0!T$cGt?B) zMuO) zl|7W#V5t^v)a2luOz-92kEKP^R8lh$0^+ODOl>%3{d=CRlDl8QqAPc zL#xcdaJ!OrX>}2AeqFy?D{CYvBqip0sABpSc?}B>n$ds;YJSJ=;m6*08wcwh*gmMo z9s}%$$4?7ufB#+kVGmYn9QaHkewquKflCt63a?+Ok*8Y9uz+S6t^ETXoZ5#!aEEKX z0|SWX;!;}IC@`4TdGnPSq0o=d+JM$Wy{i|UIvso*vy5N@W5mG%hDX`WsB`%`k<%#a z8SfDX+o3SKZf|Y5I=gUTQfVqHK8(!CO7^@!lL?=7a9GOhw<5ftKZR!M;;H;>@8y4y z&!wTR@{lPHL=UmtdjiKuWwG*MP$5=C2*+vqVJ)Ej8Crs7pf=o^qWv8Xnn(n|It+0c zRQeS(V=XF7QHl;0=wM``{6g+4Fv1K2nxRKbA8|)VGgaXj58rhH){mQ|^Yt=mTIp_|E{CR7!I%SqkvJW|Fbx&VJjd{zy9 z*G_H?3>MwfVzdlma{@g0 zje3PcM^DP4o)seo0udbx#DvC)f0~W{rx1+U*6|KeofrESi_*(uFkyTwp z)e;3Dahke!^|nr3Jimi!9A-KLSM&E5C|`tdR#KoD3$o*5g$aCxwurwV8#GoPs#*IZ zwm1A`_QGztmi+px+Pe_Mp2~6{z|_Ku4|y>V@JVsX#2e-NI+13vSg#e0J(fsOn!&bzM z9RMMB)%n9{pNcp}LL!ROQJ`ZMYtx?s9gIwcW>ETiLJ>2}uE9QQaLU&xXr@{mgXJ7Y z_mX~BTbb=9t)x7;qolC`H+ZpPUn?}T4>Z$A;eX7~OfV*}rZluN3M z^Nv68#v1(k)3|3-qSk?pjCvOpDS^?}O@vz#K+ZVY4ug!hSgkbpppA62nNg5{{X?6>yAHioU}J zi^VYa2fcOf;#y5ZT#T{Xb`J89`f|=nNGN4JX31k1U15Ad;05y{EI?Q;__M5HJ#d}L zSJg*-RLeDU+Tt5dHcWN6}e(iDe(1N@w%K!k1yh53xC9iyy?! zI<~H&?UK&1uKXSf?H}fllpWec7$+luKBk;Z2?o7R3dsv>fN3M!v$enM?%}nfb_rfC zm>LPrsw`P2Q;P$JY8lE@RQ=YH&1#&62DMeHT5}nqAP?ZLWs$m?YUsZL7cdiXKwB1h zkQQbygE%yyjs75jpdz5r3hWy4XNW>GX)$uq%g2GuUH2T^#Smq~{}-Qp?%AU!^e2B7 z?1M%64gZ+&&Ym^{nEECP$)bXZiPUZPwth31-+g*?98V4!s7gHwmbGZQUy)?xMc2c? zEKky5AXSB9%oGI2XrB_S@%|}+8}FL#U4#A23AK!=SV#~Ef*GBl&3yx9pm_1Q&%oXq-rYaTJ=&NP9vHwyD zL|-6spxDWgOBFNYcmfoE1mj*+Ig!DN5{P3=>5CPfSB7E@IEHD$tS35XhQe5AhR$N{ zRE1`0z%jDkpbSs|liVTtg;wCt)S$cf4Gkz=-kj3qIp_o7d6-iQ%``Q#IvSn4R&mTr ztXu7`g=T`GjK9zov7U|smjU|l(>`GiMx^-(%3{7c+|>?BQC&I2157irlkzYnNS~n( z`7ld}k{(QhMv3vw=n+PXKA7>%NHPbRRdVLR7ZyS=swK|i%VdQwk_*ji z=4GW|z54sYvO2QDuk%$5%|w`4RZ?=+lYgo0NQA}|309>`my~5g?~SpNaTJeF6#*zEDgoZH11RkRZIR9!o)NFkX88zf?4}Zo9ag)8V(4q z+t#i~mSe#qIRa$@&-|6INM$P81xrY@M>qyz$KZ%4#MDndz_gkYyfkOtYFv1k83D4r zJaru$d1%j21bNJ@g=3^nuuPy8O@8spbuqeHt!wbVC`@HP9g7xA(?lYEd5jy!1m{u7 z7dmgwWkEAgY%?B(*%cYhtl}6Y6mjqiojwgEI7T*rQpD&&+}aKk%|t~H6`Mv^8StpxZimIZ#iGR>MZVJRkYj!f zEUb^k0NEO3W;zTwUM(Sz1OVTRO->0mvcM^wjUB!vq#>jp-yje+(I9B)acY+sUc*~@ zxK)ScGW$f3=c8xE!SPUlCiDUVq*%$x7D3n#TcW6rKpg)d6Wxtj!RWnX#){~cGyP0S zRm6y!Jk4&}ySp`F6j(U*rG*`~rEq9aCVh&SA!4!{9xM#d0E0IwFM1ygAryvD_rM){ z|H(i4@J~E^4|f_!7JNmv>7Bi+VuWIvRg0OXG=KHyjAFK)4X z3Jd1;$It)?P?WWePA5=2qrYy5gYjcL3fc^NqX~lGmZ>n;{Ad2^A^~(Np7Tp!205rS z8Ov^KxXiT;B@m-Pjh7M^csDA_+&=TS5NmJ@wBnB4>iTp%!zMdQCG>!|lsv|(jQRt= zrB4N&F!tn>Mg29<0ksr)A(I`6h=ifbEZw@NwOq4?2~4U6PYcJ80`|h78K9N5He=)< z(hKB1rc~0vF~e2i7#N2v!Z)>-8_IZ4h9c?Oq47|frjniYsP+$YaCR4$Z^M9q%N!l< zXEb3EZz+F`W`YL+>lB*L1SQcmBT#d>!?SXQ%aNeqiHflp*-UAH;ax^YGRVT>$^o7- zAj~lMymMh<{Mrlz1o{;ykCluVl;8{olP)B$9Q3Y42n9A`s2yHRGc$3An|i}wE=*h_ z5zO5B+LeW@`7m3UOH6)B$TAVG#$Vi!KQe-kR+XKZat&?;wh{@3JLQ2;Mo$6FE&~Zr zMs@t~%byPE%Z{f?$KtJCx)fQA=g(_Hd_+*efP|b$%eWWKHDt;-VN{8Fh5HKb+P6az z5q?I$VCF*ej$XdH8J&5PZCB2aM83sXnwp+vBunuiTZnuhfNt zUMH@1V`-m?4(2$Mj#iB_aspG6>rJHT%mB<&X+1pG&`ct+sWIMFpTC|}=Uq8~7hq+4 zZsl7ig3UOXpbqtuE{0hD45!XCZuv}N>ACpwi|jEl$w#swkzX#fWsXf>Ios4ebo;I~ z91}=qZe<)JwFb>F4w22Axo{c$4Q1H5wO2Ptpo3K(G#Pw`(F`LQ;e>@_p!p;l7PgOwG*qY-%%yG(Z@kJC`U4)-{W=@TcW8#CR3Au||7{8l&&9!bvPmQoXge)M+4IEwmh_{pvXa>?3JPr_$ zFxgBfQ`#>Wp$3rGG8tTW6iX@tu!U=e2UiLp#3bf$@eoEy49JC)VR5Bz2b<8r*p3Eo~pzb@a*}Ft6_tnj2vNzhT0gX5|JUd1w z0vHkC>BLP7BpEHJ@;M@fT~6l76A~VBk9dY<<#l#&6bh@Vr2(BOk${U@p`r$c_`~K$DCQp7T&mA z#ktQ`?hqUfvcU89ZF`cN?n)F7#jhmei!ZRJQ)TL998Yk^cf61-Zc85DyyF3SkXSqv zm>}9ADc|}yM#?E@1^|uLk}@j3gGBmvjJZVs?ll-y72f6?O z3j1pM1C>ZtL}V~LSh1NSt9jIT1Q1;V3Jy568C~4aO=aAo?v@MPR)AFsea|q`J2jAZ zoFAX!kOs&C>8q6E>N00g4G4g78Q7iFi~ThKkt?1V4Lk#+%wiWD18bSMJ`2d;U}VZe z3jU%}LQi5pH9CHUvo5GC`A};Z2HQc^!C(G3J|7Ckl99fk*jVncQm0cZM%31qPnm}@c+2I;MfPTweRIBm`LINzs9fhn zW>%}xo`Sa|4J=j32W6b43paCM^YG;L8ODr0KF<95F1lru-narN2`Y(n6}KJeLAO&lzJ7&x+g~ zc20xA2neri6}>gyI&q9ed349oHQIhaJef@l5*+{saiKq$s$iyK(s_tE{xC9gpia*( z2#$$pAA>-}<4Ve)Shh`I_{;zX&70>SAPL4Fc~9V~j{*SukZ=RMh>N1xEWh7PFCg)v zoRD95Wk*Z%>frK+y>)$pp$uI|b1-Uj!5K*rp$v0ONRN)|a4;RGuFo89`m;yM?j7^MR#dI`|&(48frU&c+ zF^Pa4a-?7$KvMJq*$4iN48|oTQD5Wi=5OIDR~EZCSZ#ofm>YL zs2$_!%Jmr}K*(}t7f~6+DGV3$5|=0>P87}sF_D}ud{qvn6AeYjA#h`$Lnb_+(;`5J zEhvf-DCno`3VC3V{H4DDI=B(7V~t2NDo(i?fQk@^Mh5V?`Jcb2kYMgrAw>WR7%0L93;Sl9%Z1j0)5)Yv#h9qjA&Gbbyg;}t?ck;oTqu_M?m_=&FZ z7@>`0C@L+<)T5E<;fZUr3_(j8FV$h&7dXb!yZdX(39XC@2q<*T|252qapH}duxqSzC^@u67zuy#nPR+{&-VVbY#rwt6N)5NC@&DI2Sm$ErCVpe zlCQ?L2i*Y?K*j(?h4C|7Wi@MuGv1-nLS5N!%+^sx0wmY?UbQn2r$)gsl9PdE>P=!r z?;s}8Xa=;QaZJTJl5!c2S+$J8P@3#e{g|p!#5NFQre|2Pv@p9aXkpqaI+~&6Odoy~ z@nzL5e&Zvczg!XSqWNgOvPMm0%dIsn>fkOI1Q)vC4x_&!jSx4zE>J_YW;(+V7k_At z8$~H@?42B%ivy$B$AG2`~LJixMBsX5KcvcYdV|C;f2Mtt|rim-|YMn{=@<*Q9>QvaxgR56As~a z-w|QOvR)ZoGMpHqEDgzBk2EXfd*~H}&0wSJ3zk znh8rS>YNXY@ARkFm?reTyT2H~eqzO#jv2aZ2D2a-HUAQctJAYc4Odox)XAR4++cd~ zVx|Szl^XWWB31j5OqmG8x~n_4sR_CZWm1$fzVJ$7`bm|Sk)OzC5-V4{iAZg=_v8Qo zKmbWZK~z*l=lDyRCExcVj**h{mwAU_FDAez&R?PxDoPFxY~M;dpc_3kGEPLDPR$OX zNIH6S93xRg(*&u9k_!VBf7XdZ{XJusr_ideAIB(a=^f5#8Oq4^r7#>LC4sSGH-n~$ zl^ZJ)IZ0X9*YAL^qiMo!2F(Ld3Gn0(b1VBK|L_m~fI9Po<;YJ60e794$~jmvAtKg< z6``M+RE!Jj2SP%0n63goDn^k2Um9Q2+KVY(7$!u$t@;ozYBOFb$lT6o^A2p8Q5_vgDP( zh?vOYj$MOrVwze=5{J!jOb*4P!LQEF5sR@4XX1zA3C#}n#wd4a6RK(C8L@4u2u2lX z1gb_gsf!Zlct0A7r8!G^4D|&BRFSA>=K%mBS;0UI48JS{ALQh;^Zwxh4Q>6o5JpxQ z?m6s_X!>wPs9uv%7&3(_HF{Xh4E7#!E8OhKx)_rT9vX0UXw@@}J(Ec#t%+D8R%R!? zgJjs>#AMWMRWUk4_lAy7DFFS&WC_F5SjL!q#VoUcGt);}i6{y^dq{ylJe`U3WTrk_ zNI(Ucr)HG(xIrS!Wvqs`H02*0D0(+2ctV+_*OKF(ODvzH^|U-jWdz+=hHezny}y`9 z(!+GGdI-dWF)YTU(B$`!JjQB0|ZiPp~0wsY0(3MEFqmN809bN(b zSb#z4SUb><-x1v{yLaYMiG2{XlU~@I2oyjPf@)uq_ zs_drYrlaTaWlI9N%=BQ67Bn~(AqB7=mbp*CPQF3NG z)pUqb2mn83);adnKz%TgCUL^lOvMoY(4bZcX<-_XCQYT3=-c{w>%W!|vsX}BhPq$` z#{j~EK4bWyN`qT4Aguu(STz=KB*?+Rh|n1APHf}QriaC) z3UEPcBmra=%PuEyjPeAVZfik=-_y0=LgEE35)a@&&>6dao3Rg7tQ_ z_jO@jxMr&xmR=Z+Av^*VYDzk0327^GWT%LOqUyYu@~|Y)Gyw#opqcJ=jb>KfLz<>g zK}$)Svf3n^eE>XMeJlN|37j_rOH&Xw9B~|2snzhxKor|3;xfZ2vpJr0g4~Ubn*j-s)9x_gbY6g-QaE)S6M-D@Sg+VWL;G66KH8NL0V2*s5 zv3#v`ES}o9#GP|B*G09D+KCt36)+bpob+XF!Xu$HYWpA7>0KH@IYojR1mjWQ6iGqa6lDm;Fa1lxc z-ZC?xzousw!bS*;^Xl|mJ)1$A72^RtGs{q0AnpXdFkzBKwvneY@$67{Yoc!crRg?M z9dn8kpsJz(W|43+EjjR<;a4BeJ=VY2*4U=(W0;&vM-vl&mdJQGCOiW+ok@a}ga`9G za114X@5*D$_CexHrO+IKp%3rdUeSsRMF~g1!HgKvoX!1Wl^ag3zk zX_}fT|G?%>sIJb7Iml1HhB+KKhA511{#x24xvwCMAow!^AbOgn%V40`*)h50${$So zFgr?`rsXu2IvD=zPq(roR4Rkz1b9;y9rF0Zu6Bg! zj3PP!F$iOXBj4+pO>9{j2GQbwKn%4S{uGB-d=tlE{{iXAbY zRTFiz65PO7N^$wx40S?G8mK&ice0zE(z@r^+vhJa%7(XWrgk+H57w?K8#FuuQC-hM*c9ThKeN4XK zA%=|*0Y?fq^AkghW-;4@)}Z8SXJ$w>i2{M}S|)={pue7SkU5@DjEpm!*!tku z3S(spsKQ(tOHk-PIujbu3Shmm`o*pQvt=j@WG6aoveLPkuc36!nkMjmsF+nUx=^;s zur`v5vZclCa8|T+yix|}0{fN7(d=DGGVB~b$N*Qe5r)Z+-3emjbrj)7MWt+0v+9&T zNb?5nG-hfsE>T4@9Ayat!K4{EgB3GgZbe~{hnXh=Ax!Yt2grsa$R!I_Ko#TI-|02f zf7e!Z6dS6&z_?5p{M{lMXqq6dplzlw)5xpZuu}ut*j|0SOHF8`J1mm zXW=^hl?Ol%w%^>-I?euZ%| z@Mtk)GicJ?=|K6B%|OstZ*vq%L`cVCTa4lziTlTrBe402iOG@HQSLv|u}+Q{`>t2_ zE9tK|Sb^}DYBFH7KeG}u1bnKx5RK>}n;|0PT{QJN%|Hj79YY_`5>>l6#ctnQ{i!Sg zlNx{q7zzkw%nGe7AWUC9^U6Kf`36q~g)rP5=@2H6VL_^(Q+&mNa02Mf%yFdiu6&yE zj#WXKfk3Z5iXIZnH4J+J z;;cH(UYdeFU@OL~(b@gjIM^-+g~1Bs*y+)`_wR7CYFP3iG)-)`Sx$SJrV2;xL3#A9 zNk@x8Vf>TM5ng{nu8g!Bq6*~25K8-pIlwVQ;VaTLOMj%J$hyU1RcuEmKyCB~x%l3p z0YpKd8HU_#JGbe)0v+VS@xsRwB{b4hJBcV5l%3r|5rMoB{f0Z4!{pJ7CBKqV-jM7N$wo;R8qJ)9Q32#JTjL00 zR`bcY+M3QVfZ|sxoFEof&u|F;^@mu?(--utrO`0UNwJ|X^j*aPV8$}tCWbTpYje{% z@JOIuZPBC0qTQ^(*zlS@A|ruJ!_irxnxC{A=^Ab<)-6<|12`PuOHNg0b?9HM(iaR= zM5H%ns5%N&_Q^DdEc@WSa7!0D1;4-L16BaO_jGlz-~qU!$H98I7>n0oR#T7lef`$@ z#e?~i+ZLazD=0N3I~14FD{Kit=z@brP%@kJ3WSBj9B?y77#@v)n9k)-Zd=;jm27Be zsBiA6-}b9@`SH}mpQkdXFy==I#!Qz6^iO%t$D^FtrrRkVhvJ_ayUY~WHMAw=ttU(H z$EwMD{1v-86il=yXa*~3cWoe0$Yz)k>X_OIrHBc8BH|c{&WK_*g(Vf}uW`)Xd$(^C zjv=E!Lz(NP`w9Z!dtlkLC*m9s2`qBo@D>CU827w&?xOx0=0K2-YzFdAVPriS7V=&9 z4}~(;)bgYa#0`()FzVhj?$^p?}YZ4ALCpUo)mE~RO zg*BWyIxik;ZB|>SDg{>>qS^U{sq53%XXdziGNd2uWY*7hL`5YkAv<;FJ3C_duI$dr zAGSv0;XYMjd{rc)MM~vqRDRROyp@AS3jw-Q8afYsMvGB(D23k2C!r;hkra`Uu-t_H z2C{7+i0FyjA{kcvtknY5M!;Ckfn+@=l5MjZ6c0c{fG`wg2EGyQzy`50s;F!dOaP9- z0pSA7Fd3Op-a)(|nR-A7K%}{$t}nj$iOZjPVCsL`mHtX|;WA;EhOkN0Qc4U1m++)m03!mP$bo*xRE^bsfMm=?Pnd8V~QrQxYF-0;~u_1!_tP;Is+8^M8Ed&op zY7Y!=MJi*5{PB91?Vo6qkDVC_9FS&p!3~HF)MQjw2q__l|EY*$tP6ulp(-?kVJz|( zl=xg`6eu9Higa@1QblumnuPB7xy{Y4#I}YeFz!WGE z!~~yg_!S2_e4yjZ$i)-yjEL;#6CZexy{&=4YVgc?l#r^SMh|NFwIsRB;icDA-7if{ zagZRSmm9@~xAwp9(80sE@ADf&OiYz@$z2`oQAqze2gh;O;v016FMCW4dW;ZR_w!CF%39~&PQHYoWRkl4+z=MJ*(s2amk?P)r7000189;;#hcAF?TMrfur zut76XG))(-T*F)e9CO#cVM`AiSZ1aPh2)b%uOtx(i38E6sp8ZWU{nX=+NR-nf zV^2Q)0s$U>=zbH*pfthoL!`}NN^UcwKsPYr3txSbE24J~4?h0>dp8iuct!GVMRG#G ztJh~f|K)GKeEb9z)Fqsrof{jUc;U4-j@*6wKmODcU^xAWnf&GNJoW0EC%Zd4__TX_ z1?8xY80Mf;*vWz=4eGEcry7{)9Nanh-0LS1%$QIHvc7$w7eHo)G~G-##u9VMp@A~P z2fEGX3Jg%2CmR-Oi&!z1pNvL?p-fwDPh_D9f##%2=sS6dNGvQ<6z9xhx>bT9t4A)# z=>Y!l5LSMGQPzv}h#5eX_vGs>7(%Iv8D*Vrm`znFAhnWav0|AkX@z4r&C=Vt$cjvX z8A3C9c)$_G;zHYpIu`ztIwl+94aKFl;!?4A(UT(+P7%m>eJs&Dz>%HFl)70~(2P=A zExwin$7D}&ss$j%#4%QRG14kuop%NqD?x8Wx;N%<;?K_1+Es&AY4&6roN7?%TaI)xl`2r+XvXr z$vm1r#p>8y4eHfj2CjAX=c0?lynJ@#-6+XFkcS_QCPX-PCq7$=b+pKd`k z6UstZPq?=L0D?e$zfhmB5$49xRvVeGw6DfMxR0GUZGOcKf#yVktJ5$X^lJF=}h32Z+;2e;o;!g<5k%^`KEuFDU7nZ@G&aed(Kj|D$7X zE274(^37d4hqeOa?ehG&zK+O)=o@KdGb5ar!8UdsbWsOzf zYV#7U3UY5!2B5ghIX0mr^Zi{V>_Y#dPU7T}FpDUVC}~nsp|)nN$rm7X6ZB0c{xA#R zc2hj;duU7@Os4}WIFd{vYCn%gwbLJOfbfzk~Da{$-UArag3xdXvWOTp=lEPn5uA$ zq>Q?jSY|GPZrR3VA)YAr6_}}o;h0hwg=V%;Yw(}k9c#w*yA_(*x1FvbS!rZ{n0L`9 zbo~SzkxgH^a7-c8Y`nsD#o^iMD<5VfvQ!+1+W70aD;RANtm1R}{1~<%U7cmSmN0dE z?v>Y(PxzzLEBD@Y8?pyVxT&Ko7N1yRVZKN#cxr9rV4$!2xBuIpXL*L|8?}hP05$tS zJ(;%*5r`?O`oNvTXGbr-eC%zq0I2=!CqI1ep@Xe0O(4H3*QU`oedp;HFq%OC^LO8W z?&m-Kgf0oIN!;`o>1xlK9W)~Y8X%9k%>LLwwdo)_#zqgp42eiw?FdT>!9FuzAA}ed z%&={;^ipq$NHjn`W zprM1r!ptfFVjExEWAh2M}#n}9#)^J_Mh9i@Na+`oDCgIsE_*ba0w>FM-y}3Nc80AE z%Q<*SMJGw0q*s&IQP&(y*qnFB@5{@dY-nuawh)#$U@QKUXD#TDwF?Hs(w}X>4CCWx zMg^%jYRuV>$Y#JjP*Jcrh`|xqk7Fb-^eu{P2D=>OogR+a9_2h=t0Y*{gM=LCO0eF8 z4!{LW^2mIoY9u8RP%BOUD}nVe_J1w;6l3c2ys^uiJH@cvzrBKNhIP)}+|zVg$!5Sb z7&e8beA7QTpp25rnBnhyG zPn=ccM(K>oWEk{)e@{2!3c^^usCWYu$s;8UbdR1?U3|<X+yyGL94>BMe|20Jq3vnAA)YZ)z*SrvylvK!$UB zi-+fO_jj%QD4s2*TFa%{kQYT5a`9__mEeHj-p?em7vh&cm&ly-K#cmP$%c05Vu&NR zpsZv@R}NjTJG^h(780Z+3}AUA%vvf|2m^QC?u!w5fM3!XqSct`o<@( zvYOJVQNpt$7x>}R)4fUC*+8DgCnn!Kb#7*Ej@Cck)3tx+5P)Eye8Gwe=Gcj|r$;W# z%`c$j-rUtmuzfp+H4&e>KJ()1Z%IS_CKxub`LXAlN?wKu?{>HS4@bAE*ku`bUoK2_ub9S zQAngZJoPF{B~($9SFc^UuEec8w4~^m0A!{Wk$jE*ml?%zsFT-bv7@X3%8=2%;n3NF zkieW93;h#wBi= zgyexa9H)PR*!UsY=HhoGF(Q05%gI;BH0f|IQhRfgIVoh}0q20KFe%JfHM?tA1PA6t zt;HWGrj^?G2uh&9EPZgR>J*bjWj3P`O>Cn5zv`TOr=f5?u~JMmBkom?tZY2$MZ8@6 z>K8cnJid55o)#SA!5j%0z6i=K6$-iHQlaCG;y>O!*spL5L=8$>0y7)Gg7Qjq>;7Tb z0GHwVSah-UIZ(+!73xvgImk9+7&E=+H~DhUHE9S3nkm`&*4MGA$F0DUq`)xJS;JK9^(A|aKzHa*+dgUq6Yt4^OE1yVpQ zHgD>jym~#hhGbL~Ksn#|-m{pMeB|LH0%f36U;F!~fAGSqBGMq@o2Slx_qiWo9{bpl z!=L)lL&Ez}X8q;ge(S_LqeyxPBVz_-`Tm{5pL+bEBX`|K-9b@*^X;eD1&!J7#~wK% zH}>KG%*(HT`N^lxUl=#rXH!SpM;^NWGfzCKaS1@@|M}{7xB}vX58MMK{l@p6r?fI^ ziAZV>+;i7mcN}DYGIAq7&j4CM)F|GYr_Vk6^3g}`J8XhW%4`CZYcq3SdGaZAPr67i zymtJB*Oaj8-aBtQe8+(>ath-|b;9mtcKr~SnL`xGNHq)Z-lYma8FWm*d7b`-IFP}Z z>2Sp+M!}l;$PiTqB`aKP8&y<6U1~(tW>L!BH%=r|o=>bck<5g*=^gt=_c>$S_C8lV*eY5jnP@rgZzr4BPoQmq@2jGy#T zegKNh5nzNTm`QR?wm1CIFmF2F`Wpup|2WP%3N+JLlFgLDd;f6cUhL|Zm@%p;)PJQ% zk(Q7L6B&M-N%_*suWlRKrSj$Ra12ccW0n%B1pgsDaCC0r1)5+s2ie@|9Ubmy0E}#y zHD@nOaOyvD9g|Q%I)D_8xcU>#ZfTm3OR{wtYfBK!U3<189MOTp9HO}4>-H@@3>w53 ztjf&5OeO48{Afm)00h&2^Zp7pq$4;Dqpnwm+I#v?Qd$t!@ z2EQ*HJ^o*wc@Z2#n*F_-cMT72>D>%T1tGoi#>vZ5ikfp|UM?)M2X+`ykp{Te?74<$F(7znA_cEm|AN2PA+W zJOkSTWiZj!qS#ei3qELhL0VY7Fm0^p>v=_?X0xXz_>z1$VBMt4%n<@r75qJlbsqY zC0QZ|2EeL@wI==O9~d%_C|h8}sywaLYE^Olff?8w<>dFrN8txgFe9Ks-RSCFX@C{* zO4GiPrvDm}Sj0p(%^B9LqfmLvU+!*GmM!x0kc>)RIs8L;HDly4{CIn1RXVZ7!@O$0R+v64-0?KYH?wwXMV5X#suV!{kva2 zu6FC3I6Lyh!$)Kmv+-+1!E_$05Kti!LX zvjcoXI*0b}?)8j>B#UhWeZTR`pS?6W^~JA!XXN5#JU{+{_luYc6zHIc5wX8)%JuG= z-x%{Ls?3p1oPZ+bm%n)8V8WZ8+6|y#wnJYq3U&-mIEs$4P6r09>r5dqx)wWGUuzY~ zD4fCC)Uw945@-2^PeofLD;BS^h~(ThhDspP5>I#tn8q?u6pLV(3d7!?azvkv)$Wlg zRzCd9>#p#GVn9O#J@6Mi!4)1Tno3WsI2U{PTx?}m_AiTBbwplWi?=<=5Wwi_xCbB> z#JNSKS3;@vYUZa?TYrMNuP%dCNQQCEPvtKq(P{oebFh431B1G~;lc!MVG#;{YhaT{ zPjR)}*^3i<5*(2nOhfz;O&^*boPihy9E1HzRq_}U$4Hu#2Pi|wnk#dtF%t?jz&b%^ zEgMr{%BBSEYKR6uW7mKzP3|m2JphTJ!Nr3|f zf)x!aea_iu-*boR2Kx5tQ+aadv@=((_2*hEGfmz$ zcW7JGRXel~x!u!@S<`w^l;3n50}0BQB*cDap|vG%gS6<(YuGv?+s8ch)KfdRY$Wf` zUAXlAAvUJV!m=|1QD$iH^Sid!_9)c~ceWc>q;5G^9RFZLL`t)$8{kfn1WcU%+%8#FLl5rPyNZmjF)vrd%6-yUyTDzJa=nua6 zUFsZo$cZndK;_i(-~ZaL0zFa47e4i|Z@v2FJNpl!-G}L{yoVfvy7KECTQ>gJf9Gr8 z{@xpJzO(P_g^QA3ynN-=H+|lwOky_r(ocP2)v~2lnFfo>#}=o#)dWzH4lIwHiK;ul z%W2m6G{-np#<_yO!1v3Co%?Jc4OrN-mtUgwGTG z4H-~+2>>xZhThaL=sA7MK!SH8w&s>uS|+1?B)2+=4Y%=^7zLh|{AM0$oUcsz(!0}F z?zr`T%({Q+?zQ{Vox?agZMJU4F1bCfxDBI{m>UlkeDBWRUAXQG^f0(zbs&wCB~+`p z#5~#-noIw&3!pR{4@ChMdc@Vx&94}jRUuK=A%+Vi!qeEFaKSAX}P{HdRObJkD7=U;p-Z|JA?!|BjzNOSHoQ zXv^K1%?in~Wa0K6vM3muG02Bco~;$q=BKv(*=ui8V;V~3us&Gg`@hWVCI@TfmgXUV zhNjBG+B`1{8OLz@&KXsuSX(b1RP6v7Rbj4%NGcf&rP)2!f}l#~wEoeRU#3Rn{Jvoe z3sBa^@=*?J$@UGaq1D>BB>Gvr0FR)#$%)$p27q^Mij6eZ#|SdEL5RudK_LBs6-iN& z3{7x%x}Rz0%v*Dw|KYs<>Ew(r*);j!_JccD?%%t9|NiY7?|i%oZald2@b1w4J6GU%cUqO0RItuuevOQM0y05q>^i)=$8COh3yt>qkPasG0S%&B~FT*y$S43#-URYYPPa7={9kuVaP zsctra8s9mX_Ruu{S;;^%gdKx*FVk~#3FGo~cvaN3BOt!A4$}+Y3GrOUPefRItVmwm zy~B~ddKLir{3l=H?Hksm%^TKIdmKM=u1(cH^O=|5-G9h!2JpnUUwQpI-}?cFkIn1W z03VT0XHrXBiF6*>X z@pDuQcZmTS8=b-kB0KKT6{eRJwG5A{b6S=uSud4L^(eUnska95dKGSZo^GL%u@{L0 zfr;GSOQu(i;(;^dFu|@cXd(u$s7Ox6am|i$0DnJp;yMeKCmF5VydQ&(U z0{ehRb$6NBv(8U>v|0n}p_!JB%(!Pma}{O+BcUbPA^0xy2>?!N!~-~ayq^6S6p$baRF|65=Ex&QX>{xM4@9W?B>nx zYur@lNR5$$GKmMwKmHrP{MUZrOVQ`{grBytYoNcDjxtd;ZD;TiW~KpZ+fbchm5j30 zUyWcu5CYP-X+PS+bs)1;e$LDUWolZPIF?hI zoUvgcl+z3rFr(uv;B@Qcq2qlEv3iWNfUQme&A#c!J;4l|)QZY?9LrNyP?MUj608== zt^D=)@Rvmm5H@vfy4k&b^NG`E<1CpU?L7cGEM2hhh21+wRp6?X%YOC?KXq;B`l4Ag zxVAXT#Z^sA_1sf_`;Wf)PygZHP#5m;<)8Y*Pk-V?;Aa2fV+>5JTBpxlL^rfGTx&n^ z{L{5caT{JQ5gA9elnJg~zaH8@pli>CC z{j)E>V28HLBe|bkzH+rRVAT>g{2Z;QpqSw?gK)EQrJ?ZJBY6*;ID_iQHlnxYqYB-N z8FI&da&l1ejWyH4{)fF;7E7mDLHFqYBH6(C*e&d$k7G z5vo_Ay>U^=)C$K&#PCkA!Mkfa83=rA<9DKQB+ex;G72Ln5H?5VfY+Z;(^9S|2e5Lh zd8(%J=s#)ziy9y!C8Kn~IFctzr2=IWUoijf-Fa`E|EZztAKSES`sT&gr{B9c=^;E(!s>|*9C{XqQ z%^8~kw)4aHkFsv`rHyB|ZZMh_PWz7~zZtsQvb0)w7{}Zm-M;Ja^KI70loc6TxE~uV zBjXSqQzJHe$FX=hK^!q(+M%$iiO|aMwuB0xlQ=z3JJEXIdzwsbx*4bE85i(-EEfRh zS8gAefv*J}Knb-~T2_NbaaIb(xMk7iXUmk$$zFVV$G2X2gTu$0@9vAU@3wDRw`Rp- z`&^n!@RYjDNN~RS?DO0I%BNnkvFO|1d-GrZ*6&*BzIV_;*T!tvw1NLZEwShM)Y%J; zf%%Kqe`tgEzC*`4p$uAFyDB;2_nw#83wFG1Tsjs@?m|Sx3IKT`1swt2F z8nY5;tCirDbM{FKl*T6OIy24`Ls`RU#_!6FMvid+5TI>ocqUOS6)L`>4hOfZg#ipW#5pk^bp6oHCj7NaQB zAe8hr_|l8S-H&K?2)EE;zuJf>0b^vVbpx>M|&JFlY8&*iPL}f z-Pa>!PE%$aZ8%+!`QU+FQQ*=4^B?}xZ~fla?d{5K68X(nUU#;yVj-thD~5ghlOP{K zJS=oMeb?HXpLWe6k~hAYhUhze*?MKk@m4TcH5ZDS7AhvH$ic*IiOC?pTwVJ>bOpHJ z)qo80b%M5G*P5gvGMiev7GM6Pw77obR?Q<=Uxj67W8=0C!-SQaKC6~3D$5+-aOS*G zY%ivPgTui#Zq)R_vg_?oL`4ZqOXJ(ZQI!_PrUYAtAw`8;5_+MX8Fm4lJ9iEz;FA}w z+`4;z{i@~9Y}+`y`eQco*8l(jUKtjXj8fGf-(jx4{-pcqmv;Ge);KwV>hArb(or?} zCnYf#V4484^{stJ^jY86c1e>J7jVFDrbeYXuZt1~!!bBvS3loea%aFyv@$UzYmaO{ zq@N4*WNBlfun)Him)_?r<7;CI9213Ozxa&B21^t2XAyhv@MFio<~Ec8#$vh|G0@EU zbalxj{mnoMl=*wF--M@d7K$x2VG7~nT2D5Y>%aEW&U(7NgGj@>0t(OU*m~gT@z{y8 zaKXH_t5<1Zxo@o@`{k?G{=*-AJ74E_91f3j=d-jQ9p*(m(gFMS?-;V=Ym{n=l>=Ip+8)wS4g%!xB+qdLU* z)1Ug7ixHx5LzwsSee2aXEJPNkyNee+w`*Hx?F@*Wk!@m-&7l)#DP~OOHtBO3laOMD zQm1CS;go88&4j^prx{SHC=v1K|7z_SeF0<2(MvN?77Ej6eX96_$In0vz(MwRE)(Z) z=)ff#ua!nFIR`9?Y8EaS%ZPZXPRkLh<}*&TFgc~O5(?82N#ldjzH2vbuUfw3*)8jGi zuJ8V6|JjRIr!C_%oWOL>{!yT_2N1Jfw&VZJ{YRYG)~u40os@lJ?;*>l(9M)1Nz)5GZZ==oR*To7$OR#>>068b5M~rp^b>byA3#8GxqV zOE(zT45{zMaFLG zn!*NZi3GMU{b|7{ACyt#-XI4ufbxz^x02v zG>*37I`^gwU-cly)4%mse@-pH5F609zW0Mj7T;Spto=t{`=vM$ClW_|gLHM-_}zQ% zlk3vaHlP2^um1dR|KXqgXz%;Vu_wzX3XE?Y^~<083Mv-xM>iWrpI&8+I1CG_FK`Lm9mzTldwrHdE5 zxP6l+C6paGXwlamVH#>^)>UB)^%BYl)J0h7pM*xkig)+?F*K)rgzRjJ4H8N$r|J z%K*pJ-DPIag2QeWTAA^(F?HgY=$5={!d~D%D^Fe!c563uvPW9=;?7O9WkiFiQseN= zc?Wws{a^fxe*xcFNDVjYu6ZAwr*Uf z1bJV2X6Le{i|uNwe3p|nNfySV&%OM@-~W|g*tOMOgDKlKu6tqEHp&dfd&(qVsor^W zZN~mDf9|h*?JHm8x+}(PaY2ET|26N^FFhMeTfLO3SiA`Ip%j+P?y7Ywm($k#{a^XY zwoU8A#2-Bn@Zm6Ds-TyidCYV9?R^I{Y}t~9+cs^mA7bvTSzVXcS_p+W;a7pGyLbN{ zs?rR`GG_*U^=Ci-g-^d+TX4Ik0mPv+k_GbPNlj6-vpTS6xLMUdEEHLPQ^vOpo5{BL zUcGUXmIZ5WnM*R%h49L?6x4O?#w`nUFdE-!UsO(Me1o$X^ubCXTytqpFrXO*g?YtD z>!q?KBJ+3=kQN~rUrilSrWdAE#}@69s9gk8OE#9DxQDe+NdS0sh!*eSL;K8<%9t%-Zt4^hcLfLlQk&-p7uged9T(0D_~ z&juhsY0d~(vtkK#^$3ocPMy#UhN5IbJ@hef43o+L!mex~;>SN}TuMlE=iYrd0Fjh8 z9HBk)9h3K(xrBjPWiFu?j)??#v==lzwNN|30D`hFIzhLf1rESQhQ8-k+sku};~q$- zCgei(h>f)|Lgu9D#ByKi%{=NVVsi;)z=qh)6|GpsGxw)nIavEbcU2G?Ejq*R$J zyKd$9ghQ&7!6irmKAW;&H!!yi0UJ^A{JBe5szx>+l?B2gkonD94z7AAg=DliIf2EN z;?gGUB!lbHPF+L^H|`N@WpjF~#cytD8-eCnJo{rJQ>ihwt2yrv%VuBWe%7ZbTfFej+z`5{gds|vDc2+@NO89 zZl>>bj|j{;DAF4R!h%s7Z!|mFP+bkjXgQ&iPpcd3MJ!Hc%$NqXfNnnj zvE8{$?PMTBZ}UMe@8YN-@GcSWv{h|R?X{R{hhs3%h>B@)~QfJ3{Xg^ z@aR>=2o-#Lv|j~SradwKd)R?;;>!4 zj*Ktz1_Cs@tCm+T5{1bIlg*KfdY=9u_NI5$U6aY{Lb|Nd1LGLA7&uJNYPO-qhDRubmSy(LnOJDXQrZtCTbgfJwLFUh zPOKCPBB_G%T*Dai6i4KgKd^R zw{646pWfm$d1S%d#RjR}S~e;zi}!4P$;o_*$)YwCU`dpXqm$WyzIADv137fs!ufM* z(!Foqu_qYVQ6^W7USpk&x#!3M0zou+mX5XrlPzZ%xR6}J2Q8q788S+CU}9Rh>-^fm zJY~y~R_t$rGRye!4eR;2vy&Y*|J}Gf?1hkHa=>Jy-*tKoK zkv3l*>c7#fYax9jAJfW|sSUF=0sN&Ots$^NJ#IM&IhM&9!Vtsci{xJIp+~uS+vO_v ztc~oyUNWNE?UjC#VUWpM4XJmkf~8tMJq3FEiWWv!mT& z)~mqIcyJ2GCMF|VSN@$1190FaQDptQl1rJ6_h zg{6!tf(KG_gS$Q*Y-!cCs7Z*7ZP*Ut#2|WA=iXYqv3>oj29en-Z_9XVHEXXjF;#iS zlx2KpSj#nxIf;s*+{BSnf<#z3XR^yfHxoP>Jv_}tjZ1)Zfn#{L@lWcC4$a^Aa~3Tl z)XF7`Hm_YNCU8tV^2)>&j^yw$mZpZGk&L8eX!;1vv>86+!LQs39GYR(=sG}UIl4D+ zLmAl_&Nyb7^j1C`1P!5n7ojy<|-pVz* z$)oV$LvzX8)0$9|Hor62m@#8>%E@_Z@H9R)V`}cJhEM_*bDw8==`!E9G~G@e zhIrC4wA+4K2{3LYo5kbE2m3axmVk75_uz5H3p(~vz|@lYDH+2M7QbzMx@*?DS>7_4 zx4_c_%_QAS4+lP3q@;B_SD_h;-~nb)l@eIQ%PFtWkO&*W@h z-IGmeL9d_Tn7laaY>(3mb%n8jGCQA+OAPyWZSBh-(o(s_%Ns{d#|Tvukj%!zv1xp{ z#74QDBE2jEvjFItAg7#&00d(@1{K$i4X!3=Izox?BZP<|XXI-MZUftOHYuT*85Np2 zdy%JV!&zs@5-I{riRX{dOlMElVhAh*A82Oi=IxrwFcLfIp81b&ijlH)7tta{)JU}~ zdxi+3!ZA@YVs6&WG~gH|5c8L=4Z$wT;XO&zYE^mE0xU~##QA=C?kA8@RiDjFIS{QX zzhkSb6A0xBXB%@>0k_w>Q z!PK?xGEx`2C+!78NLQeKuk31QwB-r0iBCUca5S5n+jYkLI; z(%igrm-tOaR+`D`LrB;>NqOTfI^V8MgH@4AzI`XkM{3pQj>_>Pw0QFTWwQtdx96T` zQp2*WO?3mO$>M+D63UEv_`=mnKFykmaLY%{;ge@C5fXOYqp0STy`I8AS-ctIa^=x0 zOD!H*&)qM08X+5G;___33{nqR~h)xfnz2$|CnZ&Zd`ao z(!awon1@$uP!9%r!w^oKy~q^R&~M(fKr;_pg2l4^KT%;=#9X$jA~g{t$yL6-Gx*as zi^?kniWUGbFb%lD<}#1yG6^_t=`@8hHrtiTk|RuH^g=VuI3}`_6c{P8!9tIpIgc+v z03>%tC*IBk@pcd}8j}m{O6{?8)7nMz=2Q&#HZM_BZiUBv>EgBPkWKL!vfD`{dckUK z>29MkAw2ZSnM+ss@LF6t4(nWX6$Rk(=yNrN4Lq+Mv&h(2u7Bg;csoD`mg0Ya>|L|y z>eOlX?m0QSYl5zk^n_*zvd-(FuE`oALC>svw`3WhoDaCqZ~5-$uUJIhKsgPa%smhz z#uK@YnvBMpjh#}slU0=^k1A}S-CR*-IX!YLUK!anTv`%qfJO^(NIb+$G4C>0Da*lv zc$!OK7Uv_L%LL;a=3$M2SR6N)^VCTAy?^`+9*xgvc{7fQ7FK9xIy7TpgBvucx<5iQ zqZ(60g-9@DQWH2ZSt2|6_ui3{!uIOAG@B3qtvqPIaiuR!V^Ovty&3g#$MEu>m zm10Jk+9%yVIQ%Djgrc1CyOS+MOby4BSt1Oz15$cbJ9SH6G~>OfUlW?Sels|BiH$nT z?~F+}=GbYtGjEUTzjEpN0`gr7>00mmF(KfDEMdKA8HVbaGf=(JLQ%-2OPb&wi8>PyJ7qrhECO<2WQ8`%D$}hWdEal{4sSSh;C8~~>%8#CS zz>-WGx@yjI+kk1|vgLTI+bAg5caeFOpxUrm;h0fsV&B@+(;cDtS zity}4BbiS=LYK-Db^tDYLqYMYHNbYtK<&k7~CH%j1LYT=Vf z(-zyjWgqLzw?+vY9yC)qAtsa4**kYbDW^&kFKyf!8Rk2WA0mXMmc65s%b%TKpr$>u zfG^We?NC$2;kq%dF+$m54OY`p`xsw4v<N3oq(bWX#7mm@S_BbXAVFW~e$Io0KpGYc&l!ce! zkI+on8-2sZf@IaJZbMwLWC869o-dbK&?_(LU^SlIP$Vt}WgI$p%hGz6Xw`2y>p6Ub%#Lt`-HJ0^^bJ)9fQg+umCSnMp!^?s0 zT6Gx-NBRj$mXV_kXXFvXG1~04^te^c4KsKjwSn?UEbFZXZdfaAe18tBWE`8(yWFgj z>B^@fAB5ezfc{Ugxf)>AGi@lUt4gL;Uj{T`7f@GM9FudIjXuyDsZ+|5oM7O9p0oti zj9|E3%fTXkxc`VpF7Ci>M~h>kO!T&K&2st!LaQpO3C*|&+BW--bTeItqm0DfPoB6W zhGmeD5(q*Yu#EQCC`GFYX zX@q^7O+KK^hLy`)_{@$2TR>)JbWG|t$GjyLQT-oTq6&x{_p)5K;6b|T!nFP6Gy#=`5v!@>>fzoa>6XeiXvWNPaCzVu#~YS~58^9R=I;#a zBeI<0Zp+%0Bs%G$k1&_Y$94$Jw30LGEVyx2AXWCRdK9EH(v>5uBS|P^I zE5IK})1uIt4;b<;UctHQ_HJM$mE?X1j9av^xw;@1(L>GT9QQybE!YzPk}T-PNKjg) zHGb6(sc~aaMbsJ`KN}=mnO+M_j520i!Z4h7LrE~(Gbt}4Ql}7Ud7@jNX#-WBfPFD2W~k6 z1|7;-Og1#5jc9<3?Fk-9m@KFipEV7;zCsx(B^<+x$fA=(DIX0M*4psmV%DkQwp<_r zc=et4&2;7`N3IQqW1=*4r4LCFo)C%+(VHtO0|pMykxc(!F&}vWmz|Tth(Aq)yZ1=S ze0BW1*|Yg~8d;h=q)7VCY}|~UOUnVd^gkBICdE+2Cdg&YaG($?9ol7L4g&U#`SZYQ zSl1=-F!C4S{H^iE*BlpEy?n{)6-!h~vb3K*BL&z0Rf1x)R)O$=3MgyB>O^lNwI0jn zwz9f1TrafxZ3h6}ivyF4m_y%1g#?-*v00-f-o4i>^OQq9Es2JeS5QSW#vjU*uScSr ziu6bXyf-ukcq=7`M$=^2k%gEvoqt3#VlB%YOSpnE(|bV~BWQ0PC>DlN+>q<87RH8t zLx`U2Tc-EJA|Y|I#7BE795U5=c|qRPH5lPMC4feyi)4HX#XL+n=zfAVq#$LFD(D_l zR3fD*6M<}cby|5gZm%>0#FHYNn$c)p#PltM`8N3?Or44y^iA9~K?%#qGrcNV--%Zi zWn4;N*8pX5E||u|GvaDDlKPX;dQ_F>qS^<*zLV!JBEm5Icg=`CEnl>a?yzfu9Eq0+ zQ>>s~YJ(m))%C)NwJPE#D=^Mz<6-#}OEY(Lb+o^HBn6zD>Za!9C1~ z&1+W(;N%L&Qk2OB3Xg{!I%h|q7Uf4Ef2TmD2w60L9<9>M1ZL8u>l49Slu7E%oju!9 zko2J%*V@iw0CUwj(5qX_J{?%0nY2YQ1Zc0s;!RcV7BtPW^g=U%V~{#T;mWhl(q>pa z4=g-7i|Z8w)0pHw5>VA*F&wY3e#GP>61??3-nq@Hu2(I6xj4Go}0_Fk@ns_oJ$v(VXKVx-rWbt}h?W1?gZc519FP3aKu z9UFVzHgEgFOFK8cx$g)zC2xB@X!#01mSKXK9|n5UlO>LcmxVb#`}|JcGsf4!GZvH9 zls;#sq>1AX@mqT$X@Xf`R7$Vd6N5Nunr-OAPLU9$Y>`futd}~{TbD*J7dVs7vcIG_CUMtGV$+sc- z6wXYF<;+Xw3g4dc*b1b=F=s0rGat2gEocUZd8-XJEsE%_DaJk0(Fi`<)79B`D^KBT zU=0@FV{xb}ai~S}l4DIL{~BXsz=F_zbd~f|N8C%WKR)Myu@0U%+gYh0$Mi!e0*UBy z&MYxqE|KZXD<;93B@07ip*{9{!%4tRnBLG(c)X)6keoyzQ~2JSlLlL*=m|LQTJmTk zV@8cOSKss&h|+ZJr>Nin!jdlb9J6t z^^U4ni5w-@kc5?V)TOI^+=Tq_>O=Y`%hp;0)I}?7Lh)C_qZ@#1Eu){_kqKY=n-kG;TTIqGWD4)>$|2x4tb{- z*a6U>6N8QwW42;^jBn({brZ6wz)cmflcNj6DJw!bymNe@CG!!ip(AA2@&Q1XE}Tbp zggF9Zm(h0$JWMMtC&?+llb*}+CnD@MK|r&H7_xyq845b8kw!axcRWdc6j=$%s>Y~i z2EBLqgtRrSYG>Yb=H$aE?x*BpuhVi-a15OpLmQpTi#s=WtygIYf+Y>X)$16pidlj> z>zJSz>=K6xCPhCHum%-nRSne$rJ5;?QyA9tZF!Z>9U1vq1v=kNN8{1M`;tZi4!pAm z&AV8m+d)^plwm_{{BuPLQx}&{Q9Njcai=4^l7vQKT}H9Y(mw2sfXKj+=!TsYpfQuu zE{2EcOh2C}%}BvCUKVqQx(HeeQ%!--ystnc^WrTLhtluQ$ZlX^9y&E?*7 zGqa{WCbP@Z$_9^Cc~F*O`u}4cQI2FwpV%p)Icl0v&j&! z+m>(CnHZ;DUM*mHQFF9E^h_FG)`%L*0#%1`moZ(#qwUpD$>4*vPGh1PV(=YlQfPx5 zIEgtBU7b~1Qv2u@v&r(H8x!u#lun2dyKCc`UP23>XTOk!?$**9zv@!T7@}}I?2+Wd z+!fOg&7>XLAL(Xvl(F7>^dwNi3)RUn%_BfZuAfn_PqwOvgyWg*(s$aG?Xc#Drk+nO zjr>Z;hR$Zr9N#saZcZkU7U%Ql^3(yr&(PCcxJ=ggkkA&iWG+t~JlvnengL9VJ1v#% z=^F;2DsRuJj%~mtG>qKwC!_E98Lf@TD3JOonhnjw>Ie=BG_&W>2{Nm;An9xd+Z-sz zGR|=rvQY(%#^IA^K>`XF{xLN^P?nI+m`DBk*RXkDJk)I+Qzn|sFy^I4k_GC@5T#$6 zssW4i-&Bw;AzSOCpg<`STy_ z(e&(^H`<2P>>a(b6K1Ag*C|n!(5a~CRp4mju?7Q#+u~QF%_}{O>y%Hc$+U>+@mHPJ zaAC#b1@0;AktFG3@>O;StZRpK=8Z1mEV;2d3L+!Xd9@2)z?-X_ly zOz^R@8i|s<1?^~AwRbUL8=SPTMMrycSnh0F8N>8|Kj4H74oT>o>DhjGirI;iJ;W+B zgGW)kH=r4f$HSo+J#78@6KiRzE*CtB3^2D&=g@M9h0)Is_8#W`XvaqFQSGPxS7ta) zC0WyBJZM54GF<4cOWsndXB zMdegFfzprYP1}@uuXl6$Ne-X}9F4%J)(UA0SgiqId`33>H$C;fR6Y$N%G2gmd##H0 zKV1lH0(|bpUG2+9dz4{z8`jJgEi2VOSunTB!Vc`hS!z0@V@8^dwd`$n3%9ALIZa=e zl+NsLymt`2H}~zg-gp;7 zCi$o1XXvGp^*`-SS#g>hFg=`E_yBdpUILk6^|F(IBA z3Gobnrq6ilsp;%o2?nL_>M1MNink3Zd$P18Eqh==ML)HbarAGLW5eITS$eh6M9W0WB`%|_%PY2Dy>X9B}z1aSh6z4 zlS4IXP{!vl=={pt`+bvVtj{@q;sP1X!1~RaOPqnY{Ru=f2!`J% z3Nh%$u6Z3!-vGw|Jp><)4OmbZP#d%vLEUQsz<^6h7Ir1svEr~NkgQP%EVFuf!ZbAH zVx)<9fe0s06hwIL;`u8>4psoHGdO6|jLA%cpATKXVNNCdQUMyZM>y6(!VT>y(F~KH zK50lCkC>Sl;3yXiWprTIEV}Rq`wrm=3Ccu@640F&Oboy7;n8I7o z!&l%YnRUZfSj&-hHp#b!Dq`x?@s<5$b>H7}Kv#eHlh38zY4`WNciso1N#DW9ELQNf zs?0Ia(_IJylxbNX60uh1ME@k+0gJAlwyNe6XGO@vw84k&?E}ZC9M~5io^fw2X@SgY zHgD@K@dMY@70`tG$0%SvWyxe!-_a}qjWEE`aJY`zsgx|TbFmy#7~DA?Hk`K`ojhqc zCVBwVpmKoEK0-4kNkkY09ysnq=%K#CPkQXy>4K&bm`mqJtwIiB;6!X+-EFZuCiOC0#E;AG}(O?~(*A>m} z$D$p$!)WW(+&0k00Lm<7a|4A!uih|ZZ|+V0VfHXSf-;f11T@zArnCWzM^tdw%3#Z{ zUQPMH#t%cBewv;Pz?)wLg*HGV1k6tgC#5EFC6iU28Nx|wV8S+4pqT>Pqzgo9E##~) z>}NA8DQ{Z(F4PL?`jh0aYH^IFGZMQd=oQaz<{2W^UfX<$pqSGsc=d!X_61 zhaflDRbw1OtzvHRg^CpmVP~(6DQ1CJJ4Ut~`ZCNQj`(pBx)}shJ`zU5bO9uN*q-oY zBA@(rh5|EspqY$gniWX3lAqwuVciTyinmUk8aPJ4pH{_pL-PheGYzHb!@#33qN6G6 zP$qIFwO6_WA{_~3JZLYDo=GnB{tO1Cs}n6V7K`|w%x<7xut8`L@*X3_KR zq2p$5-;?n=^Y)D)Cn$0^t$FM)asmK-_RZTeK>(WASJkPKp>uA@c0#FBtCZRgkZm}R z$MTL>wZ-};p4ryRFBoln_ec8)p=Y+P512K{XokR`H)@M!SekDCnETBjOY_3)Fp(J} z`cg4gk^-Mw z%>21)mMsdkgtPBHEI1~5fUvvb?1OY!_jN1qXnevltM?lLK&WC9xLXSP@+kHUu8Tb)o^SCR|<905f zwbu)naypz*-&&A+vOthduk_9FMzcaT$rR;-E!NU2+}hV76@z~~dh6hgEw49YE^w18K0!Y@qIJpbR=dx#`9w{<4Tjmh?1 zp|*bo6o^#HJqTp~xa)qRJ%)o~xfBnUx7_&RD8;^Q*3@2UASCqMu+4<*DOEwWa$-SG zKVA02Xo;;>=4gMKo-NUg@%q8OBZTyis~50=wsAL9gO*R>@!8OyVHpH>j9@3}LekI- zX^lM65he`2ok41gwJ4ee-ybcDE3RfC);i_Kw+DhqBmI}AqFxf~tnc8K^H z^qn8I41@@rWXaT~ZJ;nm8KeA#k3Z8ZJ#zWZo9|&LpV+-M*ou_qDS3vSHjG-Y0?T*| z2#hxRrGk*D1+XrYjaS(4)%LR4)R0f#YObY3w7pUSG+J&KZm$Gg;{gc!rvR+Zy}Of4 zGi3I@Bd73+zJ4=Yr|IE;EYXbF>O5IO5j3HX!K1p4T8?yYIembMuyNJ$UJMh2<8_lGiA;pTNK zL9bks`OHO}(83PllOG`_6<7iI?)yGD*GGX~Jz&T)tiiS%Rt5`qO$a;H@BOB#C2ok%d$K?=r^+^@ z?D_~7i!Irxx+M6ni6=SIbzr1BqlUZddR1+WvH#dQDKK+fL8Nqmq9O(5@M4P+hIO9rSuXX#?ukD$Dpib7+ zrTV=8E^A5`bN;biwbcOOTcm|YWm~QPe3%%#$q1%FV;?>pTKQ5>Fs$3%^Q$Lw8*rsz za8oI7u%~z=;A4#Ar!_}lnykFZCA0~kOlZ|dVsozoGzrrPXn;|_eRqhaG>Rf%3^AQN z3Dmqzv{%(onnz<71KINJ%owlGtGZtC-9cin)RP#GtLkkOB{nZyYHXwsL~v97!%rq z5giNLYnh(&?LCqX_GMS{)+8b|j5R~qhpdy6iDqmUcca3-qbIp5X;=fAF+E8OXeQ=t zcxmMK`Y;9v6&gXFVbB00MPD4_5(E3}B;K%UX)}(|8czFY2gDDgwz+rM6y5> z9M|lXMwt!)YG!Vci=R`%F)lu;^f3_`-z}ibv~+LLV^C)56jOp)4{A}0m2?t&{AL!; z<6?HC!Co; zOkOiJiW#l-rua#GH#Z)`zjbF=Lq!4SL*QA+%lg^F_Z}osI&uT{@mm+eng~x(4Z&X%WMZ$q-jDrH zh=k}WrI)qxFtVxeO|0e-3ZCoZV8-YZ(xO5(!v?9oZvVL_EncBgpNLUiDmmR?b@R&g zn-nw55I*tL{7*ZuI4rveVt)69h-I>x)-|J2e{B z1E3omne9y<3N&NrM>{TMk3GRK979D%02v4fBQ(bi?MWB$glQJ0ecgRIR9X8+;pQGN-+VHkVn=`#(&uqk;!vf8NkV~U zSEaU@la4)@Gm0w@qq?lJCKAki+8VG%jfVc5&xqMe$rY?g+sl&>t^OqQuU)d%xL^lj z^?y8S^9?+iM^Hidnv2n4&=>=s5YeVF!u|igPaNNBmBml%N2Hf1_{=7SbP?qFGQ&8HnkeN7So zC{*Ds;F!KZr1NDhA!Ll}V(4aAn))skTr7%xIg;D1{y;Ms$0RGvLn@g$_)lkDAI2E$ zdg;OiH> z8xqbb2!ok^kWyfp05^<}WwVhMJHa*qNBlsuA`8PzHZ{ z4{MUGl;dlM`)662A)PF>{)$_G7V#=n}DN) zNlyVQ0pD}y%%-2lZTeRFVM$;nUc7wu@--LLPn|w(I@kcHC4M^cjyX`i5sgNyqB(dO zo$^uNFo&etHZkjGxu&{#4t9xUU$0V}|5Mw!&?{y8cnhpE7q2>>5vIuoEbIvvSj$Il;^sOjr^^foUoyo0~O~ zQzo@g-WZj!c5Xw7Z#+d0Sc6=sx2Ax}Sq2LrNON(pyc3a&gg$-Y5}%fao5r>IwRaED zk+eM8YqaeoDHUEWV62SWkU^ls_SJRXx!v{hNbQLQSP5uGTUWG->nK6haMO64VDa?k zb?B`nVPt#LWTTmd^Y$G%3HTBZ4PL-roWj(5A*v4xnlZT67ze5gliOV4gFbEV@}_iY z7)yH!?3$9s0g+&j5baBiUdD(dO3;A4hfnz7*6USE7D4F5JS(I-3c6PD;fRUL-vu&~+NN+NPSzQ>SX3Kictnrak#=a$;pNo^NFWY zW>{mtx5)rb`Q$c7K&v_I40<2ZJVqqJn)UaJx`*Kx;-P3 zATm-2;ZvQ3WCX+VL}`zG4dx}IWa=&~I2ci9MOYJKJZks8eN{3!d)S+>)XB6o=@WXg zotxI$7~I#=#86W0X*$Bvq<{0Q%&+i)3Sc-qr2@yWNA$gnkf|YX3`K8y2G#J&mNu28 z=>nJ-elrb|Q8@rjC>tE0=VB-p52tUVpC3OQ<7H>LPjJ>uU;-f}BsXG&6|R98iJkEg zIEE#zmup%%5bj*#R$udoa^QH0W?&~2lI%xqR##=|6BlNZxI7e=@pRW?GI&+D0o?H| zROp$zwgJHMS z!QyMKxXdVgp_nE!r07~KlIR-W5D77qn8`-Xn)a@1UW|eoZGcVSw8Gpe8gv-$TC(Za z@)474sgfyM81|-%m#+a^W&Fg2K|1PpXvQfx4eu2VsB|+&eDmV}z@iycWK%Tn6K$p& z>jgShntY80gjU9P`~g+(9y;dwUYn<$-nx;-Ah+|!DL^rE z^31tPQEHyl6*C#oT)lDAzB4Zli`ekhw+G^KY$C>1?aqrt9HV77Q!a#K(+9`}Nu%@D znB2r10A+@eO}fz<%DH!^y4pG+p1TS31oXiTopG9Tbq4hHi0P_O^VAT}m^ajP*8Aa& z0Z@Fhlc0rin4;2mWs|~d;_a~Ptgz{|WvR0t2nnLvCmtEWVN;Y{QA0NkG zddv&P?Yi|z6{CeRijB2wZs)a|H}mG_9N8I&ecA(T0uP7ZTBW&solkUmQw0B%3tmV6 zr<1h`Zy#-kkG`tm9G3njqhn4&H)E0f^yam_N~?4;o8H`a#D)xMK7eQj3DMLBj^QiT z7sv3dfzPkH#jN`pm|+$o>_ zIE5(-OcShN>huKRvSKFQQ4BOgQk<%8cwq8tgJZZlg}xra(OWHhh}PNhU3Nol3hyqm$52*7W4S zPozl;YYx1UI}oSNt~N-PVuO(L6x676Hp3^)E*Xt)Z0AM;Mkk6gf}_PT%I}l}8rcTQ9pz6sPws;&Khw5K-S{W=mgfmZuD1n*DxsIBhp;mBdk-o?}Rtc z2nHH9a-rhpLO$$Ii4dQ1ZzMniN+*1C;}(B@J*nIACQGI89quJRI=ezjpKKtnU`^WW zZF>||jREa?^e|Y{zKUGwAWQF@c>)67;>hW93bv1|SMfx$N9|QIOsr8J|&I$Sm^?nP`*_b)|4y4^+7JBmy!8t-$0n&y5=25GaJ`%8R?2eR`TCpG4aU;N^D6{{R)%$Of%7gX1`Qu8iO*5*u;uV)He3mT=hQ}LJ4%#R6_(OKA*gVZaqG7MQF#-rlJ zQxI=s{Ki~@zm!i+W|~7W`s-8AZXY&jWvr7dS?R3X*bpBXi2~t4qFOgREEf=%N_myG4;3CFOvwYFQT0dZh9LNY86jHV`hp8SAl; z&X0Np9-U?Ua0-ae@l%%?ub^ao=meKiRgVlvRou5M@sj-i=Ha$D9qMk<*|5SZ&2oi~HCkw$z}%Vtl0nB3w3a(Zu8frw1kvp2|J>{(XE?;bOGM0U5?L{aYQCaqAA{P?JeZjSJ?bvv;dc z_w{kFW`FSGb!@ubV#FIpgUJ$PnhdDtFR_K|C2|F^R-d_TM6yB@OZ}KF*2+Zd)rSQt znWCuKe4>9q#>#Ox`3^%id8})_2hA8Yy1Jk=v(kk0H#%WcE424djRc1Z%8=>9L^XA3I=o9=0r)~y zqbrEL8si{iYB9ZEZWK?vj_ForfK$f>MnoaVzy!?xUIBI+d@sVfWYEX1k||$GICL|Z z*va#kAyF~6Zr@w&Xv*1-#=VxM{E5j}anW~%RtC+_o1HH41wd=#ZlKXH7n4#qBmLgP zCutOP_`3&>kuKq*hX1?-&FnjjkW}{s(F`18HKNU4kd&g5DPO-cZ0-b((Fu7G-2Gcy9IkWaXeZ!9PRo|YLopa%;mBXc;5s|MS|jp_zRY*)D~M?QTSuAv2S zFp)~HE0~~;)wX#5`z7e9&)JK^_d!}vCQMU-8^adRD!22;AmELBvS`sG#5StsiD^>_ zTu-70xT#TX!@EbBSWKj$2ckkt$Y$s!Wi_06>6*{5hqA-~O~4x8C6$m~Bzh9+g?1re zv{Uso6;b)i)Y8zT=0|A2sh5ODAaOlFwmA^lb$v-J7n3Sg~+C)WQm$r_qT`pBt|nbZ|N*-%Ea%%7}Q5lEVqyLa94<=~_I zh6KEuEb>nQQ`Fh^38QeoP2bZhypqBml_{IUW;$nbOrdKoWk&Xz*}g23xbZWmEFbj> zhuC{+Mw8YZdoo}w^A^O8@z5!eV?W%GdH}8&amdIidj;4*eAZP)cHJA8CcsSqN8hv*vYTarX~Gm0KCQK4hrvw| zJ4SE=!k)i!m7bq4GoTCR%+?ra*SBfR)7HyUS*fr*0}yMlM-gFETEC<*+PrERMCd3H zD9}^)GuSao0nT{PxoHB##|X|{yzGp*copk!>sqtYQ4NgKnY46B@vg%`&6|h~r7&F0 zeG>FEwL2Ry#+ZOd77RE{7CfD0#+K1IPnK%RVi8#E3RbYAC=+$T4Smrq%>fu1UMUi< zUA~yirW@0-=ZyP}TN0o&?;c}^VIo~=te}7xa9nF;1U@#bTqt{Xm!v@6$c zTK)p)^mCOuDG3h;XDb}OM;Nw+qZmc2#ZtiuA2QPC^TZT^mYyt{fn&@me!dz^Vb*-g zpI0-N2|xWq-J2IMoufISF{Yk=b2^c3G+2nrw;FxNpQi#7+J-2+4T6c3tV{FfKeqR3 zT$<-i(Ji3teW@0XoxMb&VcIY5*hpN8l%Q8d36fSOLgVP_tBhkJy}WfabL|EYiPUp} zGk|(CFquef{7HfPoj)zwXfiBDBb$kW;<5Yc`zhb?$%RUs+*T@2+k{j`!U1A(vNBM% zNj$EBI;|1SRdZ5DH1tAQPT#O;e0R!yFWVi;jCe%Oo%N`XYGsmtVp>{2YIz%eY8Y;! zi`H&T8}4=Y4Lgu4&kv)h8?nEN1Ew-`OV-&4)OxR>mJiXRfDU+WZZm<0;xRjfh$@f= z^wSbk>fX}ArI5-Fm3)TXfNVxghu^(e-w2LmB7oq;gSqX-nM+sbl{7;Kav$2hekJ-z$E%z?hsI8v zzi5Mo>8w@0C97e2z)NxYEygRr1uZsI=K|?D#vRJ&mv9gucvRG2T>=VWX4Dn!3EiR2 z?}X9OOOi!mx3U1ny$A+Nyg&57?hGsujcs1D9OKs2h6$u1lNIGsUz1d}^q+*LABGEN0S8$=3iD=U1} zMGY*Nh&ETjBmdFPS?_Fk>*=MRF%@%)bg=O zw3a4VDj|Vs)*j`bflG!pE5j<5O25(}EzGOj%A9@dfmrKQHl{9{x~;u12(T@$O*?DE zFR&{8PC9lz9b-&p-wHRkeWE}(GGGnahU002m2@~*NPsIP4TSVb4>6~`MP`hxo#gD{ zN}MZ2XV{rVr%S`A=6DY0?#gL;1&9jUZ9+sz!(%wGLc%vgH;{*=bLt=ll0BtX*qUUN%{p`V_4f{(|K zR6cL^ELJ28lzy&+)QSRzuug)_H<57R>NOv&k_-uHOjW{E#)##M<|`q%jDWJ8rmA6T zCtqXgp|spZ@j7JisIC`|Tz$W5%no4f1Py%)>6@SuIh-4=;Zau4wMuK*9X4N!(G@xn z0L^W~$7*Tfe(YX=hO*?)iL+LQ7|6~ItJy?i_%saZdTZV@DA2(9R8;n8L2nSL*;d&) z4uCwauR;tg(TK;m^PQ3xukfjrfTyirz66D6f5pwGcq9C9-?7tBkdxeA*gkw+;s}~K zqDdH0*Bv^w7a!wKuWz{wQF(c|#F4(u1)3di?LSP^SpGdhx1QWc&f|ts=kGsq>V9P! zGi|9?-#Kt({i+pQE_2H93Jic?a@7+CWq^49*{^ir^3Y9W_WZUDeOEpR6^_AqurL1I zU2#mbyaUb5B>_=#EGN?58PtqkMfviNumI^OK+ze2+zSHu;q_a$Fguh~sa}Q^Fv!bO znY{xx;bX>HY*`lgR*p|kDUfVziA_)RUzn0jn_d-R6Ig!cR<&eArx=1Kq(bfK#QiiP z6-*h{`5V+>WHX| zIV7kinfM{kWE5DrWPyvV_8vV=5T3qxdFA3o$i|vdCzs_d1B_+~Xo81!CJR7QGfNrwbmUj%VzqnIT9Bg5 zXgDB9A1W5>dpsH?BgSgt&sn)RoyOaVoN@`Ke9$me)0J!2m2mFL5b&!6j|{r(#I2QN z&LUvkz2^3Z5B48BJ9Oi=Yc*efdTXrWDl{`mr{|$Gibnbv#J+Or!qU^AY;6vM_=F!# zRf2$(uX=v;qylQBKPKbj{!3$OBLrhBwGGvIFVbj> zn;`2_G-LMcneQJv$*{!JnLeiPq8hj1>f{>-*tULk1CELEJJF1l3BpFMGq$el;~(DH zQve4>V}xpt44#-y!_AdzH-hcf(m(z)?b^bub7bbTIc8h}Cbn{*t6rrg%+*`nViw6r zButR?bLPxPJon(aFwW+6Tm$puUajp5S*^ z_=5VAqizM$+q6yRpzVsh)0M4YL{iv{9MDI=V7P(WJ(U;`;dVffa8mZ&T!qrO>&DP9 z6WE>6i4~M-o#2oct8guMO*l2D1;?!F6p&PDRfqTLtSd$q>jZr95jH3498#Q~$*M&E zn2G42YepPl*T$*u9XUny!roysR1Hr+7^to@?-*l}rf1e;DpI{vt9p!8$R0z(1qZt% z0&DoPR{qjOkKv5k(*QKJ$j+ak&;n?5w&!D}_s9nv*9q2C;S`vk z_6=wo-(jDf4ZFf?s**#-RX@Fx=GokPd@&4d^H4p#n56G(*kr zXi-7Gj>)*>y|HBlMV>(GUG($p_Fp_hBbY0OuT{ukxB+hxGqJh%g$N}&fE(*&~;=w zLCkR7$w|L!j$B@PY~qzrrUm+Wl)Zh3(n#WP7wDSHFwB_w*xIE`=14X_IVtyfpEA#A z!etMPCSNi-_~b0KM`pXVof8-d!t!`rX|RtlMMa>2)8zs`ya5x5HgMqflLTbEPn19b z9)}Kx+6L6H+V-i8eHWx5ODHtuvd$)EtYW z+9qBVXs=C5b+OSvyN6HnKfd9xiCr7lh6YHdjhr_#AvYV~KU!$NlGy~B@X={*FiigD z{v+s+PHX%6$B45zhMY9eaI&}E(;emB9oi$7x zl!0SdcGURH)(xR&)h9vf5y(HKvBaWUGueTX9UIq>Q=Lui6{DQT(9Ha~2|x8p-5hUa z*PNhyirqi1*DN0nhiPwi#kO5*?JU(ig_i)>!ag5HzD^+{xlfbY&gS#E@JjbI!(AU2J7|j4}~G$qg{Wmv?XFtyS$g7|*kSGmgQgNIq8@HNP4x$j{f> zou6-9;v+mpz}H-3-=}a4<{5KSVjJJMiBJM_XxhGh6(g=40ET-kBYxn(ftxo+A?BOg zJfYSlx+kpT=}orfEzl>qTLe0L03_v!Wu0ay*%O+Z-T73RkD-})a|eVnD894wUNH@e z$ebmy&c}^Df#3KBS%_ZcdQRSa(b%KN{^b(lStaHYCjamOnEebErw7u32 zBPX$z&vH0eK>ik}|1lg~y)nh9dT#OLyk%+2AhK{iqhs=S>-Lumul070kAQ|*n1dIR z)vPe43_ev$KlYz`speG*a5PN7UN!1!ZSK{=VU^6K%1dVC@Q+?ai8quDPe=QR2GmJE z_SM6J9D6BdMq9!}r)Mx_2vdtecbZELWb4&W?%wv=o&(&)U~FcTv9~8&m)<{i8mEF~ zT{K;*v{nTn!p|4zVNi&}W?I@KYUPaM&%iNJAc8q`f(bFLUFhB57+x}PjG5a!FV$7*|RhmebYB5m^hV8s(0#CdjhNzymfOk=wmKk8G@1xC6#t_;$BbHQlgp3 zfHHkwOk1U?t@#M`HW_=pXRr9aS{WcJDv(ag0x3e2AQVArOH&u*Ezd-F8NCOPsyLN=0#QB(tO zg;zjfX^37gQl=zwx}G%isP=(EoOjB6y2o0gjA1MnI^2l1r z&XjFpjEEk#V@_#wGtN)zJLrz`vnh{#bLYm@C0VwqZX(i@IK~3zkh2Ubk?c$a*1DLp zQSTUA%RarK`U8y4ojb?j_sp3y!h^lknl;^*PlJ_K%Vp|i!bT*X`u11r0q6O`%}fOB zN*#;6T9JKzDmU9KYlfXTwJw z+-3G3bGb~~Cspp;F)bxXQ-9IWKYpvQQdre{Ek?P9vZ*Kk@X|@4t62 zc1jM6W&+39l+IfdIEG{TItW%5cMnPI*y2pXzyyc*vW1ftE^!QH+tJhKRgK@Wtr%rJ zsY}I-%;WKqmNo$cBL0+r{`~n+)!eRpH(S0q>yp2gi3d&=Zym4SS%{-|+_D7m@WX4^ zN8FjQS4^Vb$_scvD1%Qaq8C%B)!HT*?qdAQjLh2;0cBz)G<0HvfeGiu4Y^9xY++@y z#}cmTrCJtcAmhFg=`H>oF*K?R?s;`!E?&(?39&qaBQcIP!lPv)$1xe&8^_XeQA5{n z>_2k+$cfWK*Ke9>j@sR|W#i`ck633;ImQ5iVMRjR(xPQ3V>T%^xPb3KFzNf`xvBs0 zThsO*^VB@T&cJAYUFVeKM$?t2=yTc|d#Aj)@4;uDd+>`tHEsS}+V~S^&U-H#qqc8a zFMHSdd;Ij-L&r{NhiURV=P#6SgigT>MG`BQ*9{N@cLD8+N#yJ|G zwK))-BPJmaDXQFk&~ybstwJm z70X_Hdi#sJcW@21*No#xUTBu>93X7i<)ZwsA+5}w73`6qd^Gm(58r$L{Uayz#?xCj z?%uw+Yk{ccFTVfQxl32P?1|&YyQW#UdgW(7_8gx434Sws5}Gj(ad<)3^t~bj$JpcJ zxN6F8I400%uk_-7`2JCgG(!W&lw%Q2&6AI2GL9h&?5+6X>62Zuu?_JY2YF z(M)Glma$_Cn;I*tzvrKS{?esO^fdn3_|r_Rb*XwORMGHqdykydA*eCAY&WKCD5Ud| zO6iOTgffZ)JzH)J3I5XAf-(l z`>Ce}!yKIj)?#X4uJ*L+Pi*MG@zcJo`?sde5s$1JWqK{Q-VMBxfr~9;Vrt!9=E5up zo8eD&xpd$4Q!$k z>wo_0@zdvAR`9uxKfip*B9`_kfBd~^fBZcMKb!n+)=dnt5yqig$$aorjynFP{pF7y z{_y?#fBnmE+`9IgzyGI1`=?&m{m=f%-|>!$Qg5xmZ@%)zH(q(YmmipkynNZxuYCEh zELpTL_fpG1V&xr;$3yJKH214dGAM_~M$0l=COdrUT!ne2*qUD2j^8_QR-e@7h8hbmjt9u<}rWc0P?5 z867%;Phl23IeeRZ{ty1} z+u!Y!-}VQ7_0mzPac9L-5m<^=lSGEx+*x z)Ak;b0D_r4YZeyJz5$4Q&TNbPnbvCehHg&(SHHh@*V>Ct>v!hwNbO2fre9^r*Kg{N zo?dv?o40P=;;p=V*%BxOvxdM@pz`DqNI!>FN>zB|QJJiK3kW-w2W8}F!>M1q1EXUM z?C?M71c>xEY$%FfQ;8p)gOlz(aQI*U&L7$uAF1RQT{WN6-u>5pxaY#(#r5j!TTgaH{CFh?*QUqw%m; z#xYtI9Mv&PySEHq_@D!0F8gMRefPl8D?`=Z3w`7>n)%x>7QG%VTD0itr=M8Of%!sLJ})BzUurK8sGkI-@Wa7=*EqQckWF6_1~Fx=oETz zb0~~CSiNNPym|AeXW)+=dr$uDX>``;L#KR+i(2#Fa7KnKzzMKlp381 zG^IL%iXPRMm`-|}q*)bqzFn0*C5}HW)a|swHC7HeNr2==5>EEN6$%`#^rv2a!LeFq zF;|$9HrB0Pp&xR~und+aXoknDckX*mPv98-d^T6&7;sEqPrmmKpE!B$l5VGuX*NPl zG@3DAIVs1x8$=$y)xPwkxzaavTW)xpxZY#|xgKXB)IKDyXH;KVt={F2_>$ttIDbAE;fe(wq^9iTitZ zZ+^5ah%7jJ1!B%c?*TEK>Ky>uTwwVW*%7qf5mU?Yign|WeFXM6SjKVnu-`;aTAWqh zn!^brmnBz%I2E{I=gx(EpaO62JNWy5`khJ&PWdlB|LL#&;+No%aB8 z7}*cr+55_yZ~x3^ULJen)nzMFOo#COOcJlUb}otNN*b>F#+z`A8R7Kcj5!9bny6OD zjT<+9dD`4l5AR!~2fK-q4YW$L&|*G`iazz?bN}#bzbNm(_4dk$JSuHe&so+hW8Zjv zTcMl^6+J>ZDc1kP5b9xqP5<$a_MAPR&NE!RaKSJC!k3=jzC|ZgX&&;D0oDHa+us#) z;Kd6WjCy?p*pjUL(J;cs}CJI z)U_b~!d>IXH?kAT7)Pchq_uwKvSvs+#+Hl$%5>ch+O0VWe6(0{z%I4i9Bj+2AGN1` zHb3o5A2CF9gF|r%m1-pflrbLHuHS2=kE-SG_me|eza+!YaR;U)KX8zmCnJ00!RlT> zPl1Uw%a%Asvt_ZhWLb`eh~*jupuioHGSZCm2`(uF3rd$ zSn~+nB$Sh%KEVLjkT_+M0Q*OO{i_R#yEq`)uYB>d@9aPLtyh0QK)$o@&=)`b@htMA z%`{c?VmEKyo;P>S@+FH)5hVea(hyYii-8HGJbLnsJM-?|f4E}lVkXomhkb#Y4$BUC z`U_KLFFR1_W9H7y{XfPoB0gie_K&B}|E=qQ)Ub6mMzDOTJO_c)UO2`O6Z@Jp%L^A8 zqjZeU-FskeO?{Pm_~AolGLI3A>QF*iX}q0cfeGOS^LifY-`o#ghd>_b)ShWCUb*_t zz60_2SAX$Kzx?xGs3m=2`^K|p&%L>4znjCCFP!t`Pd<+Tv<)Omv^{iv-ysmk?bdge zEMB;I{o0kwmJH*hl;q*DlV>icJA0>sM04iMzJBA@;bSLHo;i!>EM2mA=`%ZG6?FRC z1?H{2hmMA2Q|G+;);nugCM3Oe!x|Xt@QKrxu3VLP?Wz@gr-a{q|M0b;8{0Rp&*sj{ zSBDN9J#qfhkX7O^Zf|KU%*bNJSsQ)d@_^0{5PC(Vm<7cPN-ixw_$WaQg>-@kI> z)|!Zhs$Uf)BGRwO<8|JDRDKF^{y5XD(c}2G&AN zVpJ;MBARXcg)2GZP7+?gE;ZwleD(Se$`Ae-$tLt0Ug-*Ds;x^CzIO@v*LI1YK7Yxz zZsvjxak|okzI$8Q+1UuQyEC$DOibObk7|*o3M8H*YkHa-KgNJbq9V)gt_m35d%emZ z_LX^RM*R@iUKu7Vp2=VPEpDFP{FoJhn#zJkwdNcBXFhI!j14ITkFZNyj-I(-zqc^e zf{*Rr7EgTNRFuHY&0FwI6##UIsE1gjPi_X(>Mq6#--PBSh09uU%83hHzIyG=J^P~k zFMamq630X&y8YSDeTso;_qI)3CQB{xwd*(jJ;f_1Bw?>TVzw|?(W z&R@KA;>@}A52yXT8R_;PB5?Y+-lj`bBm{Hk&MzIidjIAvhAX}8FEd$T^^#%n?#2#d z>cmpg|I6R}ox{gZVf0`5!e_tw<^P|(`wFrwN$}%R(r$7DtGvOhA&By=yzx_Qmvuee%|MKtu+KQ!9 zNOs>nK)X84N#MfsPd{GHMwme{DQY2O6Uwyv$_B;RlH-8oL?}b<2 z`gecybwxIirRxsJ|MPeLhyf7!yTA11&wcdSKmLpF{M8R%7VVcl`Mk{h`#<@{!DA=o z?Z5atzX;0cNMHN*4}b9T8z;}4Ex1l8KPVfgzxOLY_gIh3O7+5qO|(Aq_3Jmmh_EDC zhGw37Y?q-8wbO=v8N8c6|DXT8U)7r7XV3mafBa|PJbV7)L%X)y{Izvmhf(pTfB9W` zQ#rrH?vIW9kzJ+2tGW9oG8huWjqrB8eK5=Dv!B@Q1+FE7w|YGbP}( zX1GyRcbgvR5*1SFK?}O~uAdsc@aF!bIDUkc%O<)$>0Q>U%fz9~*i&Gt@s__eCxV_A zd}XI>Mj2hjYrvPGOm-cvVRo7%fEhPRd)A?fQ)M6Jz>_odVds`3 zraI?NC9{q}RkoMIH})N2gI>60wCpr=v$Lx3X386;vb;P1N;yRkumo-r${}H)M_Ey& z1i!lArh{_YgWz&-qped7MhKro_u82|MV~Z>C(jsUgXD={J;I%-$SX< zxNJFk?!xQuQd2zno4@?CfdH(S&0#$3+_Le1{a3&9-5mezwoKljf+S8{>p~mt`Z3G z@%z@7b$%W{iu1K^{XnQU-rbj>%<)sBRAn(>PMkjTi(mZoqr0|8wka~(C?wRc{oLO$ z#{c}gFR=gq%WqVm%nPr)N!Z6}_rtrU6vs&7;E@xc6~lHrj8`?QtbXj-C%pWWpWpxb zU;V59_m86y7tWtgU*^iyYmmfm|MAyxX#VqG{rRE-M^2qN$KLzOTYF(y92(t3PX<{` zb!vm9%}QcUBE=FJ^~F*nM7MW)dc*_gef`@njGjB6sAzGh6^_yW@mqgD_{Bz|xMR8; zR3wGB-#hqke*aJZyMOW);q zC2<$Z>^r3Ai~Q8-Q3u7y{?>J?;M(^N9iezMYu1Vl>(;@6qQW_P@4%stKJ{qMiPC-h z#g{K%xe8=I|Kwxr-#c;=XpkBFn2Fu?HF-3nku246Ch=NiDfsaZY*}ypmYuTUodd@X zo=7T*wja9I9@qc$+4Fh6GuYMY?2(4KCdV)=gU&$4bnxK8N`%uRUBZ%ibKl`@>sGH@ zy<+sj<=5XktXsN=H5?958Or1ZeZAo1?%pyDz&f({a|5vY47FlZSmwQ_&fbl{ak6-71+otuOdhTiT>%D_V z?P1m}E!lT%-Bg*UkDWYimx?96_xz=+KYHWs!$*&s$ej6c=-3Hm{JGD5ENT0G|MiD% zrpvJGS8B{m$C4Cf>$;H-J>s^ykrhiR+Kn7JHS(jkM_%1K(mm+8S8!scOP4Rt{?;qk zpMPv-!Bj(QbmlIOxf|}>`3qnF&I=9>3E0k$752kBxAF1VgFCPsOlf-$93j^TamL<* zhuLsd348V(3Mf;|tOr;^3=i(uLRt8azVU4{?rU$qckI-e4Qmn)&tuv8!&l#Az;gI_ z4L}rLhWSGr6VYwiXfs9I3Fggr_y5)(ejSdH$zS=(=RWfE<3{U?uf6sE{K3~u$u`n| z=!r+3e)Pd|Mo*p@bt64s2Qne?fAxcx_8&~p76i0`;F-rCa%zz}{MY~CtLPqf)UW@- z7uT;&{ZPLu#{)X3e+;B2AKs-7K}nJ(5*%&!;oT2A?uCEgmkjh@|Nd8~1?- z?C~T+v7CceFI>EgJnH-rv+m6@r!v)sI+U3n>5_73V&YT?=IYIxM^2psVb`u&zG=-W zEZ(UuwfM)7>8VR^*^-6lFJ6INP)3q+FXK8_48M9vp5J98Q8ya+9pEa3J`vGY+REEZ7JyRjmV8t zKnC8-*O+h+$MTKSkfPFg%@$YfoFZqwmCi-==2MJCg?f$!Hxoa{&kPiKqm+kaH|Dc$ ziTCiWAHK|f$Ci!%%|H0{om&%QOjB;%wEqA6-9I#u|M_=bv<;*@M;<+S=AZq>-y(j} zjlcEdw^poN@kd|##+gwEbKqf&I>O{vzVg}Ar$%RgcaNw{5CeKOUBb^iJMzHhk(z$onKtJY^mem&Rn|s%igQ`t;*s2ut1g#n<1)EYusJ=LtX=@$B6{WK#9E?xptZ0vu3+0qlI&r%E$3LDXcz4ySOHLKIS_2bvxG!P7drAyP{ zgr9l-sn_1HA?cXjLN_Sa5>^~}ht!1j zeK&(s_;<}3d(CE-bylWFx}@x+(<))~;^hO!&d}{&zj7%SouZoYtx>12%th4G1ZAWJ z%?vC|%y8KoGEwh9+10t%z{Lcn($GTavmZMrQ8on1j<9`lRSweM>}ZxKuUR{A)j$OS ztWGRtybueQa^zSwK?o?-PmD2Jj;*EHD2*GbTKX@03ldhYM$1ZXc{N4^2*(u2CIK4w z2F1t1@mekA*obK=3dQ2du6+#R@8jCb$!?~CcQ|5dv8oPlAn6xB@f;^W2WuV6y)3z) z_weOUf0R#aIQrTvmMvSgZ0YIIa|8@JKs<}zJ-qNXRh5~8LDeJMM|N%;Ido#=n?JG{ zZ-hADnTJL`vU|i$1&2?L>_65k=V3o@-aJrd_A7g@|LleLi_2mPdRv7uJeOxvRnJ=| zhPiX8H55vqw=fJq8Je(kCaCLfSi73Aj3t7Oe}Gj(ydo5Kl)#$%lOKNSM{m3%W|Quh zKm8Hq<@)0{-XWk7|0h5EWJPs4QXKAYmI{^&*gpwE5crHAxMADI^(s)SMUZWq*RNc$ zOlvAEI3CNSaQgIfPs1@%LB}OZHAl}h#|WENMa5Gd0$sc6-!Fdhd2iWPUH#G*KdsjZ zPG_7V2X%74M^7Xcf(H{K3={ZG3!!dX<2XL?z_!mko1{N-{l=Sbefz~%a9@@#nES*7 zTQ!{2={|2 zl+7F0JFlGC;c4UAXemgqCo@;Fp^lJXn&8AlBtRHK3c&;eo+VAyb*q*)3YF+42gAnA z8xB}kqE2@zhLf%NdAw+AJkDiHmK2@6SAK_PZ%jD~_~_BJgotN)q)Uo#A2`hSu4Bc| zT{d@zc7IVH$vo9)rWMie*2$Q^-QGUNa*`hvD1$Ck_%!ACgX)>&dhvM5p3CMSH~5ET z%YkMyC_he}36b_d{{uasL^0{M%>U8TX9;exE-NZB241MhIQ*c(su`GvNqT_6Elnnn zs2N?-c?(ZH8=946!GM{UnM|4tpecbHOTl#O!u6YXmrz2X?-9^%pL6^`$w(J8L4tEC z^~_`&{gcY5Pvetr2R(^Qu*5*okCVyUin$DBvS>9J(W%ric+ycMdQ&=+ZH{{e$X45I zeqOu6CZCZve>n2)VK+D@Hq5tQc23y{h(q2q2+9;_Dc$Qn3t3Gg3R(C3+g!4p2G?l-F>+dk7W70QgE5d!}H)*t=Z zzyInt$^kDHC!tY~aKPZQl3GAiDG+n%a^n9vYOfrsy_rO*?ir}sv;Qz)@ygrpDhOS) zn>W+3mUW-)ZDjcQXP$g;$5xvO@_JxnSCbd7!A8IDy!5Kxa`4Ep&wk{Y(X;1Z&}Vl) zO!5WFkT31pxW-8{XC20v#AF+UwP;akJGO24(W`GVYWGJUevsN0y_rMDPV%;4-P+Tx zc^}bv7a3oIV+C2CR61n)Qe>YQ#AKVgfgjm}V62YRVR%q>>b*%>wX~%%heetk8x!{x z@MHC;Lc)~{0r9ch%|u>)aAj1KeS|rZDK)?@8OltXbO}b+1C`oYJA03ua!<&C}Ic1;*9Zfg|&Y4lGcX zj!deMMir#<*13z`1T5mg>o&&lKg;yx_~=FRy4Ku(`1m(|@XDH1^g=pMVi0#dpEz}f z9)rv4b(*~530LNob2x-7PPQDd+s7ju4m4rbMQX%{L>%Z zos@^r@XJ?szVYTeue`N~^76GS)XA3|JbYAT>U%r4cSMQ~tn%ix;0b^x!J4@YbMmK2 zG5eXM0Rskti3LVPMV5pO1IP4=*$hoNMrSaD9r(7Ydvsp-PgJA)bf`!=IPUV5D%I+LO+;wMYJ7MF9TU?epiHIN z#zZ^84|P!vsXDG)O*c`OEi2{;KpDeKBm+TGEul1XV2WHH(siuGd{#-M=cmPrdDLuL zVS(7Y7^)=3)wm+;nbJ5NDoxfVH2eWan(EpxLL$QOS@+L|?z3OS&dv)lLqE_JMH@+| zF~8_OLp@{j?FL`Cz>?bTp?CHjn%T5z2xs{B{^aY(^y-x>KJ?UXGJ@N;J6&|+`n8R- zAVIZzg)ZH=V>?D9dhFEMAHK0y&xw}8i!P81N0pZjEE(B%4Er7%qaURsRKkq0vR}PC zMeDQtlr8NjIecoQH_3?pKkLZp>vmkvo?S*WT_iIC87rr~7v)5<*=9qi1(c!oVTbVB zdk<)W2e)tDwQUpSAu2LJ3>!160c}%~ftbiqV9=+Zf7)`rktk(;PdP$O z96R-#K2WxwjQKx&?VI*6i<#ciS3Yf5&;#pNC#8gc`MZBONhkw7bk_?F8Kl2V0SE@Q z6?mglmBtD{nNJ(ofzHjth=i^{MBc0%dfz<0no&ynWNjVm~~F)6abB zIs0|iA?NAXL3pB$Cnn4CN+)zqdjwHn>0jId4CjI9^3*zt)yp#Gy z&2qd$G3&L)l_{@JY&`UFZFCB*Oyl&{=szq2`WP@$?1!!TL^0M$wU4#v_hsh`=ZXqF zJ>M8wgtbOjzwlG$rb`flHm>1%r5RYTKh@|Jw!gjBnKjpyieq$m&88&chMBO4tmaEX zojZ4|z;`z+V06m zAA0)nN8k_fMTEs~fltQf62&Z^hMdS*G<}hX&@+!(yL2|kjSX7*`h`!?3nRVnSbgk? z5pU%QOByr3|Cb~09I80xPnnNyOmXr3MGJ}|k6A+SIgsW)`N#tf1+hGJz`tvyfx<_2 zZ8xEUIMkvK965%iikYD;^3i9J0UoIL!a8rgcfhUGZgXV6bL++@9(f?=a7qm(<6YY} z+mS?b=^NjD(M((^ENuIo7hl0$@H#Ol0LqGGOQ`*_dH$)#9)ECWuN-R4UQT5-nz|pI zEp@mSkGm)7AoENS=O6w0FO{n|D07QAdU~$7)1vraR>xjIuXoMT2G%tF`!L4zV%= zC!;Atka9qiMS?XLn{)s==R0=~HcWrJ=28RcoK}WF41Je!RCO~jN*OVhBBZX3+A|T# z;F8Hi+l$6zNYBifs>Ke&))T=`LZSrkFx#usx^TL-X zqK58B;qTDV4 zo^keK%0V%M#&6kAf3rD4i{R@f$f>M~{s42&d*u^L;K?8{MMvqJ-* z3_mZu_Eu=BKKJBf6a&lNrp_!OTj)Ud@)s1dT{IK!#lPCYT@56`I^fp2*@%K&rW57Rxf{sxl8s(uHCq9M;pLY_fxT< zq2<70ma7sLzuPP9TFU#(D?x_%x%=Ur06m=HfE+DIdKkO$$)pIpj-EJe&eppCES;g8 zF4>|@Rp759h+cT*Ed!RG_=lf(r0gfmsu9D(yQ1b65T^h)iFuP)IBB4Nr$4Ad)$ronKz!@iX1OLZ9WK1Vcou-1udQ2Kq^RaH-Iwvpe z*s)`3q8}40(sA)(q9odVY@ug7uyupG)ZO-g^zpEz3tI~`leUkIiD+^kskhZdEmB=g zg>c%RN;8`h_5nqZU?7R10U{J}PM9lm)r;`nU#swIlI|8QMf^+c1yjWA>r5_TY|fE0-@L z^8fyiUUS#uC!c%T`6z-ruJ@Zi_z`Zz$3OJcmp=W`GP#1t<2t&4GO0rs|NRK)nNjFC zcUU!p@;nsx7-)CWRSBIZWvVvTET`;}MW7HVziQa93bO*PTe}*R`Q{IPEbOvnORnCy z#s8eS^VE-NmAVO{jsIbZYJ%wmFQRfDnge(!(*Dsmz9Xy?2yH4JO1WA_;{4oK-`@M( zmtHmQ{@ovZ%|7ZUAANw>$N|uHDpB-_czAoHI7-Lo7eD#jU;XgMRD8brm*1uLV86YC zc9ao|;+x<9k+%EAFMP@oGJP^otKH<+*~b`r43tiZjetDgPE5ur=oM9(E($$GI$n?g zISwrT?*7Bydhum)(q5t3+V>>4od|YO24A%jPE~ML6n?`2R|c$)@xnkcyq=;{2fzNE zAFA`vH+t$ZGRZM8w;rTogJx#3S$0Aplg?ZLZpfFd3-#3?{>864o;iDrP2XjM6aUU$ zfMDR5oQi#;PL656W(zozFir8_rZuwct1h>i7RHQYHox$NFXYTmok6d*gd<&>C^O zNYpA$YwSI8!VO$JXEjIMlh_R3KW~LDW^~HV1##$)AchI{8^fGgY2rX$(w`2$p@bG? zi2d|Gfj|1B3%=ylJb7Ezh*lDz=FMz19Y$S@7s`Oul5kl`BT4F$=gB*Tc!E+$md=VZ z9g}eDwi+AA9i4mz`oy5CkxusUP|QHvgH=e*Aa-`0Fs-*T41s@Bipk9*CBbK4Woy8UtnivUW(W z0lF}x=31?@Ku>>)qzWI?KjfmAesd19Avl*PgQ8{2iecT_HE+GUFD$XL-#wgU^Pc6) z5|m*;#OE(q^!?Y;oL70)u2~&>g4okKI(gyB=$r2uTnQ%?XsKpK$dX%vQ|U<`>hrFd zP4QVtsPPkL=pX#;UofI+>hNH{mAC9uccRDR%(~pK$f5qTzxgx&*YExz`0|bKz4RB~ ze~Cr{X=M;k+QGq`C`Xdb%A(yfg3tC0xIr$j2=GK~^k?6B0iycH|H&_{e4;0mak8Jx z&`KuVb7wo|helGCRm+!>orMndm1|WMlX9Yc%!w+d7Vp{U?)Lyw0*k0d2qt2SV{+nn zYxj#~`*K>eh8-Z8ks|yWbi3?lVrB~=Z%<|2){&yLr1o}Y!bTCuF36QjmyqnYS!?Mn zo;0As6mX{KmhaDSjqCeo&Yqh;f1Xa;I!E`rM}oVgXn4oL4tARxf@2=J_q}7&TF`RO z!DA{`j8Vilm`mBMp}SB9ZtYqYFfxBkqd^{wr6^A%t0Kzj zXB@+_;#Bt5-yF+#GfIDN71s{nE1Ij~G?Y(bre5*T`Q=pMzQhSm4t|($J@iU$T=vHN zg+h;~eJCJ+=W;8z56fpXL?uX&kBViR&($lJ|K_j!{D1uB_wZ({xdkzOM?g(&&iL8S zeIoBA4*So1)-wX!3wd*`+-Z@;@QQnyogi2E9}T7p4iP);JT{&$>;A*`6c z^0QxDzjn<_ufBQw^k_a(Oo?f*e)eM@`obrkn>Bkj{K31h{QunNK2G1+ed!L-QR=ji z(C90dlbg7Xii9PKxds?nvN(&13{OWr+5br2g6K^=2L0+E3!>hQ4>W!a+z@Cp&i>yHkFu-&rg5EA-y|oNwrDGtOl}}|8UEncz9>_ zY+s3q1UlywmiAZ$l=;eMKKi+jJ_8_xuEU*zQ<_I#j$!Hy0b6LpmAFDFH6oQK9@=^R z)~&0z65EV=W97&)nJkb^+C@&SZ_Uz$D3&SklOKA*JdHo+AhH#U7uu%kKwGyW)8{Sx zcaTtlh?M&dA(Top^XD)$N%adk~XqgUb?)RjE2UEZC`YXH3zBXwoUFWn(?=O=JUVw z#m`8x(gbovsPsSl)4yjA5gi=@7v~7TJ%Whm%b$84EzPPtWL}QfGTC!+1o`6nd3xDH8-ofr zQi3T{%;yP7(`2N$9=VO* zoNbp4s{~uw;U1Mk@RXf~Vn|RXXsF&_J{Lg;N+<*F2$WIe%vjZ*XsQwoELk+)u*{io zfLrBCpzIWeEDS2!rwB_^AYfE{-km%YzU+S}W>qZOadTw~=p%bN=uooJG7_hrYXW)3 z=gdJgO`Mx@@1e~2x29uDD9D7NOhDmW6=7gm?no8aHlH?{dfWI6KThKR*oramJs?_+ z0kWy60+^G`ZAR6`4eRapdH;Qv)uiYBV&$C&T8?4r3}}$Z-(RvYNt;U#rCp3Dmte@J zdEGL)<)Ae`vR; z{40J-93XO&!V-ZpnQ;w+U*=?UCrNEKuUlo!SBc-J&3!1WWnYT62p&Ng6)-DuDr3S@ zE#Op&XC$$5mo8c2jTFt?<%zJIjdPbfXYa}|n(_Xf8Moda*|s+Anyx(N{)%!m55zPT zZ{<&nmaNB}|JlC_D8shyHJN#o5A*MnF(+tq;}!H~jdO^X#o|;2DYV-tu!h=?KGZaEvw$&j=|H zgA+4JG7|H5(c+Bh%YO(r^_?`q&v3rOD(6ElSU zC5?$~&MPmsa&-HTCXlgt?MlUzjp9knX;1Mp_BX7$P8~lib993YnVKITJ?{trLW@Bm z?twe~ZhM}M+!Z)&Wm+@2ywHdWX_R_%XGJIr6H(a#H-U()mdguf$3R#i8&DV1mEG4J z%oImi>X|{Bx`xz*jmd#QD3v4ofT2bY?Jdid)-eMyGiKhInflnwbQIDCK+7&2aLWWaveGs60JNIeqjhJyxO^y;qVorRY>Z8lHriJ##Sn6wY~O2w4-Y0$hVkMU zK~z0T4$V~fnK|8xL4B#LA`~5^R%NNgFyYS_gq1lXpiKY8(}YuOA22i-Lj>d81&iGr z)H?rj<4da~b1-eu$|~b!+8P7eh#0(nT(k0a>ua|8l_`HShQFwg3P?07*naRO$Bb==C~}0n%7O z&LH_W|KY3lh1t&Ffb$6Zi4Q-83DoF+T$bpju6XS9S%k72u-E)#{bu0Dv0Y{V<1(v5 z54uqN79Rz>Xv}9}jndMUaTW{Ww(r;}XQ4I%tZ}72T+eis4kcOGjFn3km9fI)Q=y(5 z*R1BKXh^$23ePXwOxR!{=Pj-*OmS#dnC9Z;Ykn_ZOFJv;G3(NLDRR1O(L%d)-Lh2o zGc=nRS6#*oQ1gEA-vKknPo3U6Z{tuZVQ9G>PekN?#`0nZmzN%l40>5_9XR^ZTl*g0 zwWZg#R`vqDvgZKKDD4??>Yzf>F92xbnksYYAms(jy7#gmv;g-lQA- zM_n~K#jYhg+443v-th44?44#%RnHzqFH0x!JJ~jHjH#ObIVKzpx>xob{OA)8R;EMn zQG=@g;buM$hI%H4YZJ`8@;K8g45)!DnaGBFh7EX!ZMpEzaSPklu9WjTOBdZ-zjDs; zQ8L|DcNa{qNFhhQ{$K}4m8;H_cKnPpOYUsnxQ?`FKssYry0qW=U~6ZiIae8myH&_& z5OFHfzx?ITmQx>)TwiDFnVGj{k{S#=W67EXw&}KQAbYTZ5Y%Gir+qM+9qEhEKw|7B%KAZbybB% zcb8L}u;cX;(x|mvftps%$c8>IWoQvt6>BX@(eMyMe;#C;%;4^X+`mH~ z3PxX=lnHZ--%bYZ+_9C(_;Qb?F4QLG`^t}EQ7d$=vZkhD-L)%~8v!Cvui+3xJCZiyy5};EbW}?(y}i%2RVQSY5g0!qU7C!LZi>)k zRAGOlLhxGY+Yze$uOYg0(W0|R>^0Z$UJ~7!Ws8u2t556zW$YUR?0m5=Y`CjZsT-%J zsQyQv#gx_(dJe9Hc0Q14@+{};0DQ;JoKx>x*RN9Z?LtqXFI465i8E&|T#gl^MTobY zo?11_XO)z$*-&UTcYNhDAA9EUhwKeRslZ1{IdrAV@lTyup1rv9oiwj7sPg!SM_ zCUrT9S5fUYu?5u7NCspZ|3mbnN-Y;OffaMUsg(^{Y&k`m~ zzS7ldk_MyKEMIcuB*$BJPdGk*^^yfMo_gT@Z@!Xzk3Ec_9N|#R(2_h{-@5kBdK(Hl zP)1hIUATPU#2MO7_Tp0J(BIUC6#3|tZe>`Z4}FHelXIVc>hWGt4a?p{3-tHDNduga zT%rKe`H@=KR$c*CVSS({&T?l&>-_yu3Wuv;r!z} zHs82?d;hW1u=&e-4(@iW@9Gtqo+yr!&>>gyBQw+!yV7l=_2M{n@R^6V+bW2a^`p1< z;nQfNy0?}#DJ1$HU+xVE_$gEw%1oX;kdw%{cVB|c z#LO2kqEPfn!%S}pd({-@Qbhj=OF0iiJx*a`O?J8UK~h}-6J_CBnKhC#IeCMs?h}bh zR@G%F!!xPm_4DXq+C14O?36mizVx`7WXHzN!AFr|W3_V%MVTz%9B%gNNJTaR<+QmS zV#1keL@k|qAb_h4V@nAxM%`j}1uwHP-N4^L0UA9_oux60mrfL`u4K~1YC!Gk<)n`D?@oQ)@l&dS3g=KfFbnMuq$6(_?S0<@?q;pSvnnsTvJHC1223Onik|Vi44f0&5`i?G~ zho;V2I%}3Qsc~N}T)A$GHSLz|X>ZEiQrLZM=CWVOWxBg}Z3%u=rD!aleI%h7x8Gpo zUR}K$dxf->om!gfG2qI01}bOO%Wrzf zC90<$w?EX!Vclog#3CLYH-M)C%9MLRJr4$twL%_L;X$3)1!@6W_djhms`1iDI#dcI zuk=*PJ?t|ZDQBs(eW@K2C5H+_06x6HioH*FKIn~8(KI=&3^#+<;!ri%TEpd)gh5{hJ=9632UvUVjVc-6lC zee$epvFg@r;3TP^+OlTv?3r_qotimo&NY{PkWr#cFyEXxTh^|!ysm`J1ry2*^X9@9%UX1%gj*WL2MObQ7LSH*NSJK zQpupibS`>}r0^E0OR*lR;~`1bd%E@tmF>l^yr{e#jHf9^UcP+Asc!S;{&@G+kN@yp zfCCCo#IF4O&%a&%nt-{OdT!mAGwa2NH(GDbxqfT*Y(ll!E-?XLbSF#maSh?hQlXgD zCXlb;2T{G0;vvPxsNFpw$a}kx22d25tk&WD{8E@Vz3?IkdC{0Fp8!>0&Jw4J`~DO}`?W0WS$;ERP>x-;_B+3PoNKk>j;v^1Jq zp|v?VjN+HN%NVfiS}`LG zY+|yka|O^2t|n>N5nikS9ZtDWRNQmSYEKBtk`~4gQns%fB8QX!%1(xvPx&ufPO};H zl%hK|%5|s@=+^A<(sRLc#w-(=6NoN!fX0hIay%^!|=^sx^S6KXNAx?ecnVoZ1Ewcoi zHxKJ)F235Fxe3QG7}V`k)Xy`)iabnm?6)jP8*fIU(+YY)8A=f%xmQpo@~{7|S+UH4 zY&UP-ChI{r@c8`duKI;mu=)f?E?l|B&XDnfDJMoRzz`c&EnB~Oxu(ihp|FQfo=rOg zgzpM~u-UY*{i@bmn#K$&TC;-Xhc!X^EzIp(JSW%3U|5sRkX2O^NH*Zp1N=qSC%Qw{2dzeED!&Wb&1!?_9oo`Sj`2`lQ}deo%}c8e7+| zK}-mnM$cb_MW7jNnhT=rBuBKwoIIzd9^bj8)OkA@gm^*=ST_cV9@@IzN^e}5pCFWx zMuPp_VG~JeuEym>`wXF_iY?;u3^!pCDKk1#ulZ^IoY{JwaaEp%du6qwE7N171!t=d ze@px6>t!4xA!QV#PpF(3esl{JPAfAwG@R%JutdDXY`|pC(`K+$LSq4vs;Y>=GOgh>1MhynSoQ zyfH_;1s@bGk+Z9?zPxX6$$ujP&G-E5g+q zH*xJo&t1B1$@BjE2>qVJ*AAZ=wN7xbvX#txM^Bjr6;p)d7ody#F%SoPeVa;Oua9Bc zXmJA^-y%zv<-;4u=B@ol@oSLCT8vmrGoz(6+GEzG+I6p?EQ3Ni~%;x&E%Qa~M?>V3*d3$i{2Iw{iA8433lyUC39$8L6156Uih)qrD z1Y_p8F^QBD>}NIr003jd8A5%0#IYGjL+*}!Jcr<;K1cQmQg(`dU$z;q8GeRtLQ zBTH@4f<%q zPqRT0$ZNb#6*K%DrS0lgeI8@Uv8oonpo~e>XwsxkkA`57n#O`pPtMIxIJIRcQ%)B; z@u@#=Sl!`m=mszirbZuRQ;4FH5^|uSTg({J9CzL??YQRI;X?pH{RR5YjfUBmh&TqXNx^eC`oa8-bS4~yY@Fs2Fg(X8AD_NHfy0W z=d&?w04NTYqGjSK?@01#de#rh*O5-q+QOn#aynVc#GohSI1{F=gQ6eoZd@fObM@NV zkq#9Q#&}Cm=Gt}Zv%yge)rXT+jZV4RwqeX|ERKZNzV-$5I;l*zmyxj;c&Is>`p7UN z2X^u{xiJ0<5@01Zll*+Pio4??fmw8zM}Pfqto*HSjGVuG>GEa5pn%Sns8a20|Di$ZN}QlABwnnJ3~v6g3IK;DVS5DjO7X60yh* zS{jxz@6F_^jBFCV32D?=p3M{?8bb(sgmDyT|had0RpUwi_f5dHWxQrD)jh_>TGUOc!S&kHH#=RhkEnAk<K)- zfxHdXg{a=Nrc4@96FGc%o*s0U2wq}s+ryE?!9__d7z?*~hb1>1oO zrpZGm&lvaw7TBM_!984Mm20L0WeOF#vH+JrXuo}!gMPv&b*HcyAF`RBG>Fr?Fm3-H z3eU!@;Yy}_f1HXfm`vAPP-PjZ@&ndHqQ%(hRg^LI@&>M%l8tjulGv?F zrY%*d%NR!KKs|m;lrBhraL2X<#Xjx!X^lyEoF7H*(h-_x&YU6O7CLYY(v-MFv#wD# zL_6Y1e3;^qxBNtc`Xpct4kko+{idDRDmLeZ+Pe+d&E+?CiM_^E3DLv_cQ$Qo&>`_lu)963 zb3FH}pS|+R-sOM!%E*=LHaQ_EAsFJVS1lPkPB^nOs~CwRmsc%0^sz^8Y+Oybw+Ne{ z3Q>} zS_*L4zJ5)yr)eSnQxxic$gRAQAXHXdIb&S0H%ML*&1=!!1|S>SHrMXz*{BCJGci#X z4Gr0d)4RUQIDl*v4I`W=N+}#~D6P!4F{E-yvq6!A)-hyD0~zs@Tbq*&SVI+`=Dfpy z;hO|;t{T9w&a3b2du#8(2X}1Uv1Owx$NP->9P?xhvSG<|@!~~7CGp5`B1b`#aAk^Z z0opBDrmef3hqwGh>OL7EUXe%#_V#9q-B2;AL)}m7k zVbAc`&Mhyzu@^56JET#~Hpeh50~NVY)2nF1U|i|8QrSNCth`FPF`{F5SDgO3eHuYg z4-Bc37sv+Au(t^8P#f%TKKZU< zy5Q(jJ1;!AX|^3om@(adp{N%@BYY$@?#eHbW?}V9C<)Xy{fs-Rp$4!eP<*{4Q+h8~ zH8RvR??Ge`X}&x2zFHQT`z@}_^rowNy_ows!32b5b=Uqjbz~!+B!nt9MKgP|2C-}; zOjDd^BPW?=_D`a}Yap8}I!BEY&*t*g)8{VOo^6Lo2i6pfBEunK%fs9!bGA%FzIa$J zUA$0*tY4LojmMM((_FkvAa!-`fy4U_9bLa>)gupVU$SVCg5-b^e3HK?h7_rmzxnPy zm#Bo+nj}0K$1vC_z`}HvaZEvbIzKrNxqxiQk`OXzM!UrEcUh9i)r|J+BP2}+h@yV@ z=3Z!~F2Z~2p>40c>tyWn?m*afdrhwSoLt#3ak^8G(Q;JD+<#DII$I4k_8Uuxr_WAM~2J!DVt$f z)s=gONbxqU2|%1OhQPFZeCK8-DpFpdLAH8%!|`$DXeV#BQ%)pnS1!wJ*oc#s3DAzvqCB~c zHf4`B11;#YTUVdmzW&OlRkNU&5GbW98Ip=jSG1I(Ez%vwV5u}$WuVznY-rqb93zum zu1vFlsiP}%uklu;GJldj&G#hXj$mnqG6~~hWao=ys^0A zp+B+_b^=`&wfE-v)l>r303QdAo%RcHba^&O1SWnXE|YWv&=B^U3&j)(6%jqJ^IY4TmSa)nLWj-0U! z#<_8swreKK!I__YVC(De9U|bPm#vxlEY~LiWlZ6il3?YB=N5l+}^f}SB?X@KvlWPEza~5TlQT~ zjptd%wnNOGu^K$8iZ%?Ap*!l_Wti2NZZu6xP}>;8Pm-nXRHklfDTT~9;C$M zJiAj5Zr;0K)_SL{U%Ec~^3}Olu0!IpZrr{(f6mQ?^U}Ly;q?`Z1@O*Ggf5{Me~W+V z(-U!uJRT`BOrT29v2v)SIX9tr%8?AkOw=WwUR)XT4c8B}fT>rT^eQ$QJ7 zeNLQOQBU2Z&Jxb3J5ADN0?20Z{Q2(bIdkq3Js1PS0Z*&bi8xC#LuFi93Sy(6h1849Ft@H4-x!%wsSNej%7ZHVg}Ay6$QY1OIn!UO#o>#ORzkix=b3 zB*jxt@ms8_B_pt>$V8fOQ<%=*B7C~f!d8G&qi5aix?s*sV2Sv^PPmXFpcqAzW6%s6 ziy>r%pKy&tBAsq(MUvegu;cLYlc&#}clp}pb!!~^VBh*V}UatizSqR@QCBRTHT$xhfs!=a#qjOXZHtBD?`n=$X z$YNU%F)ft3@UdNG=7%E`-P#3DXlds|kE5=}na`uA6HCS!zLh0cXvx4g0~a^ZLw?GX zsZ@Ma3q>>d1xqHN49i5PiiZu}iZkuzEnakM`LdgL-oKLctU6jg(D-YTDDuxxNBEB5h8v3lq%`o@H& z(^5s9xq5Nn(3_qt(cqC#FLfCTvt02`raCiikj<9IRuf*N6?vht&g>o8H{y5>+p0~U zlYzV)WYc9c=y;(Ahjsh-rW8uEIpWN@|bP)5Egnf(SbmMp_Fm-9On*Ok{arTdp>mY`q_{HHcxno1 zh{E_SmnU0h1L#0ss&Z0XcD-xp66ml&*9k-`r1P%lNtjApnMuSliJ>8k*|RIpd*Z zV|5FRn=SN6f-MbJKK90TK}Tj85+q9QwkWTIL09K8f&X|j4kMaGrg{d&ccF}?i7PA_ zYC3=y7V1EjjHqKZpXcD7iQV501<&j*b9geDRi9BCVbG??5lZBw< zR}B<$&O#ZhNSkNKM2Miv3I7NzSn-?VDZF)lBF`z{0N_ z0mckf-cdJWUAsYh!#gr^#A33*G)v0s#))MYd7Qs;StjNojk1a9NO&3jxNetQW%wBLH)x25ID0Us{kqweQapvs)BgeO_ zU%O$=s-X6f9~>7eZIfDY_vHIq*QHZD;Kh$W{rH}PM~VmF{vlPUh79Y z&uqt*33$|I6I1KN?|LMe(m|s$$$z2VkS_gUNM`L2YMyD&N@Cwdz4(=@GH$DYznvS` zzOnBxK@Z-H%hPju+Je%IqlfIbI(Yo_*7akKd&%A=Y|wRZN(F~wf}0glDTq@9lKrNB zXX52_<&(KQlCbNpoQBBeStn`|ALgzOQl$vBJ_gnA^ zvYgKB1%fHdwav$)=bhtsqmi%XsxK4+1q%+%bY?ZD704!kGUzkjO>0-uwK{$F;yL;w zSFfX`UN@V>a|+q^lX=2D0(#(KEps3sHQF1D8)xj*07>7R{eS7R8J` z5@?3!GL$Joryr@uZ#JM9_CZz#yU%z8FcsPEd-Ha>pxbe`=BR{tZoTg}CS0N?x@A{y zxI6utP~vi#1{A>{6*LgN!pKOQ6x@-NxW= zwR8bWie^qrSlpD!Gl9iGSoqfdBg9FI<|n~n&Yk5ZG(#tx8b5yE+7&$&fO3#F1|*5f zRfv17V06cFsQpJznmmB_y702>Et`i6Wo%a&*yVE4Lo|%(pu>n)pVxm7DI=uAG%k=X zdyu5#M7w;B8waeB<`!hD_$m6EK3DwX9d_ybFQCg^NR-^VBP$ywkoSbb6WtsWbm$c_ zCid1Jrd5^FOS<$^o!{0KIoKoWXO=BbHe@IP7EMTxZQq0@G{$2724zMsUcQG=rZHn- zX<`Ow5~jIvlZFQ2qFrF!vRiO#3_(?e?u3iThLR?V|K)>U8rcZ!+-k_RWsM zIyHK3`-au~kDbOF`}WIkfBwU}8_7Fei@4$-b-C_MIFp7log4Z(RR>#@E3s~t>AGdb zMkGoeb6z+_BUQZh`Xs=@Dzs=-cLnz&c@$@QliENssN%?p4;5O`_$kLsomPYCYUQ2P ziH}k!kn8s&%|iKd938Ws)}r*)fbv_hvbhPK4Lx71$Y79$A7la_kHpb_B5k~4@uEr6 zixX$g+4?VXMW+6|am^T2J~b0JM~1AolF!D^sP>o+8$EomEDdbUsyMh57BN;@6VAVy z5szPVDr(8ECkPhe0-)=3wl`S>1=YF>!_%lLe0TmNb66C%9p}hfa+>rrt|2+;)Y?W6 zI={Up(GFLp*y!Fi#-I8t)c}qKvP``r(Y@kP;q)*VEwRw0@^*w$xG~0H-C4emvAzF3 zjI&VDFhO9_6dal>%1h_es~$q1#_xC+s4)Oz1XTv3Va|TRym{6us|%iuISiQvr<@dQ zG3>&|YuDUVGi%ZO`KYdo(ihEh?LnHy^N`F2mO1_~_$@z@i_b8Wf9Jc8z3jCx=LoId zO`2-MT~q0|cu$U=bx`Jl1@nQDfZq391F%8d{0i|&bG{f-l_ATFh z@l_&9N9silTSfQU>4rV_vE2`nh>4L|-YJ_q!pw{4}ZLLty~sF(rMF{oeh1x6#A02sGKBZsL=TXSm@5tdv;=<@gO5pOa~za%}gNnT!C3e~PjM z!C3yKn~4fK1HK1Y&=norvZj0SP|MW&&JQi)m{xD5T|y17RPkvX!J_!)Z}X^^rF|i` zKH=8%ns+PNMLGgO#2_*%8S;Q-jwjnMn4i>-5aF;#nN3)3;{t9@9!*zR;L;H4>DX?i zrLS8UTs2UTih{Y2BQF~=j$!G^pV<)he&xUX>oc?<$^#82>FCLmAARBxXXNkzf%zr3 zLDLE$_l$QA96ogXl)QcXsYeoPp!RTj;=vuSy}SQY&+aa-&ubn#77AG2n?0%CkME>O z$|>pbL5|CoWpm@iT=u{`XI4@#Dnps^1At1DJwH<_PFE~}$BI`IhgF9rnLLzfDfy~o zpw}mD7@gRlqBKJVxSTy2;CPjk!;8zSZ-y3|zL+r0l7(Q6LN!Kfj1}iG+@PS7_aHp9 zZ9}MNRf32%v}f4gRY0wHs(r?gFeYm*L$*MFBa!H!k*@AnuBgc*sppL8qJ!cx0Ties z6}|f}g)x8(BIF||2%Dr9Q{zIj!D2LB723SzOF8Z)9Azxx?2O8=K~_w4(%@7YfN2Nf z-M~Fe-Jy}%E9w);F3e+Fu+18!M-oG{4g!h_HO5&qLAvCn(en1+lA9NC$>!ul(jdALNXUIAD75#M7A1 z94foAfsH)brlkQ{4Aj!-zoNZ1bR>gi-I#8F%Tz__hT1e))}L^-`K#{qQ=41^+8r4; zD?>1aT;m!V=yPlB=D!?dT!xslqmz#-;CUF2w5PDF23Cck622*EVp@vNMX9sn$NSlqzlb33dt~j$H;xGR?LS{=}{2}bX z&C4pp6%BaX(+y>!D$C_TxlMHq-;k=a6!t^wwVUX{@a_?9nY~`YYY_(j7okQ zeGasoFp@!X19TuPrKm*nwPlZC+RU4fuo_*qx zIx`04A}22M53^5UDX|;6Y@FKX#HRwvWcLAv;0na38{l;cobfP+1!W+}#`?hro^ZxH zIB#r6$)gD*N~6bjAL>}7JBJ5A^uO(XkymDZUizJ^TX@2fjfzv33ID;OQj9!*cGN^1Lk6vL($* z8uEk9fArKD0w(64`Q&pshjoL>eD~0?x_y5e1)mgGrXIT%#e_t2v57Q~!fOL)pi_PI z06lCftep~9yhnhES_hQrGra|rAxfKQ3R4?SU$=<~kHjV;w`Wtl@0DIGBV3SV83Fpx zfd0KM%kb7OPknr7?RMHw{CDS<|5bg`m7A0UU^`Tm+5y{l($bpjZTRo zjL=k{ERzrRMWGs#n2co%lU_4%A{<55$2*!Plck{=*+|~z>w-E5ka3D zC1rk6P^JvZB4K62)z2-Ob2DB;g$YbSV7xK3^dHpCsX@K`2b3Plz#Fud?v;gfS6`nh zH9V5a)v2>@?myy)Cws7++|UR7Sw^5!UY$?Z$^E-$@`Zz8=`aAND!hGF zHzqMG%SsCly*?&Z%;?O$Cef(CUe!CSnz<+Om@4|L$NFc<^kaIpsKZULhFrI5SuF7S zhccgG&6@4tMhhDRs;v8uuv{*7$u>rUsQ$!oWfTw}E2EhxZ>$@c;k$q}7LXy|-*fO7 zo;MPWZr86U)`2r9;mvCshdEx;h{vzvZY^AmJ{1lV(OdEx>+Kw{vCcD{uNW$y!m{zq zpF1-el(`b25v1MCN`ZB7bl@AQ%Uf`FD*od$XYc#PalMUxSORSo0Wsa0^{baVWMuQ2 zm9&(41#Bkwy?j^f>xEROL+PU$ubft!p;h+Z$E-rNgb}O0WHn+osrL#(WX5SIg_@%I zPxc()tS#^}9X8`-18u};!5i#Vv={)rT+8-EQSTf~Og}-kx}>#q-+J_c+)c}&8qMwf z=av$W#?oX4b|ub2%uyX_6+e|vE$@7mie;-$BzqEjt=l9KmD6jk?V`Xj0001FL!(W! zef*%Xy7073h$^%tyZ$vapnDe3Nvqf0$d|6ziDM4# zQx8^jE*&H}(nS##vuSW6%0Wa$YXn`@L&V=mWLP>lq#Wu4VOAm-!ZKUAkRyi9e=2*po#%Sb`WxvJFHFJ6F?a?V-mmLGZifs>;bpl52=Z0gU1XnHpq zi_^;VtN=ry6sgOU9$nuk3Jyxix@xpVE%mU}!8#EDlyaC9w2S}M0PYGYF8WgSb*He2 zp*Z0ck4R)iezc9=+^fg;NLgS$ z>bTmrV2MzHm4PEF?bR4nSO&XDiAbgj?WvAmE#;plu{~<*fbe8sR7z3ETl%CnOsDeD z8fLtuxT11;ji7KHJ2FavCuBq)D^=PunlaTwa2`|>r(=8E0i{@Ubn4ZPSnFm}MDfWRfmkJ_nyw@{! z4{b0NLNPvilo3a3D(4n zlWQjBpm@qQ%y<=EinQ5-oC7zpjpIUsOxNK>y*;&v?UsdtOQG+=Oz|bb9W*URn~PAl z$xeL?h;|&IVwBCB+mWJ_*M9OA!Bs+^cz9C-bz*DYshnz7iDXhxMw#oy&NW*}X)>Qc zz_lAmg4-t&14*aTCtCKch$?7bKPXe^1=q=+Vge{SJtq@$1wR$aLJ2^XGt6`UB9uK( zz>J*Pq3umF&5M^^OQBmJLtZ=;x??Dpp@JdVD{_MY9JCGF6)Jw2*@S0MsZkLpIzV^0 z^@{keeTFH;h`k5vc#0I0-HLX%G($E;WmcrCIgOZ!doBR8ziBa4hq<19A7Gg-SZU5m zjK18Zr=^~zFOl|KG4#qAD6v7wFzj>5iE~q|!H^DG1HDS3C*bG=)iqy+w=TEaHnfH{ zSb!m`)0nn<#XQaSWg*eHCXqJz6gk?S^_|0pxo*HQL*S#If}V^-dQ*RYpj~TbDanv2OT`O31^q!AEZ^%*qN2fnpZTI3a+>UW>&_eAB!R zgm=N*Vx1QkTqMw&xrP-XPT;&=b8Waztm-P2F!axYJvNk~KdG!m71b9W5orw4UPy6L z34cHWBXl?>j*&IqEkBTmsIhwXErhIu91~L3fT?&xm&lTgyE^sjLYZd5)g`LU;-^X~ zKN+8me4Vm}Z-OoTca8ujwB=E?+%m#}jf>2T3@4;DSSt9mr_>RG>p8exKuoCQ%6!E>S%L zMmtNb(~{Q`M7AE!5N$$gS&tCsLVqjM{k&ES&;2WN=v60CcN7n7;(9^YROl&gyFpZE z3pa+HI?Jfr-cTlSNqZs1sms;<5Ob{7$Ro&55P`htujeghQ|IFMnNi4_kP(wyul0kY z9L3y=+nu3IJ@vnyHV~tC^SV`b>i{$w2(~B|nH_{-l1hNa8g+iUH#=U{SRIBfs!vqb zrIn>=!MwQ z*z5FmHhEF`1pkXW(gMer$pZD~;W4iAM6I-kCI*uD+jDVvPIHeycSh<*-i<4()8iQl zm~cW-IlbmugF?*Xs=5j1WMIHbiw}Kp;2jRkL)}9V&|VeT6)+806xE~sK-i#Ry?_Po zEdC!7>QLGxi{|%|C?O6u4S<777d2~Ess|SwhJsp_B{fz~X!Z8uc6W*DPi8|jRtQT} zw_wO7-b1dvf)U`_fzI5YcI$XoEjO#0)WI4xsrjIav=eG9*IXpPjj&dpnTGdDy}x~u zG0mMr?>l=7=1qb%g=ESZEAUNu>1&jsb!BpQ>*nDPHQw}kI29E z9KVUn}a9#nUQt8CJSX~a^Jc=R)u94 zR1MG4Feoqb2J(7h8c20Co=0_CKsZ^H0ILxUg#?;_X=3qL@?steLQt{q|4F&5zlZj& z`d7YBBxxcy9r>gG>Br&(?@+hkhlQDaa6xj4{TT__TQ+q4XN!IYePG#=bR=;1>m8>_wMm`ZY;nYhO>lHppx5S19F?X!ZYx^!vU(r->k zHjLBgv2`EOk)m(cU4J5N@LPYUE9s^ko!l;ZFL;`h*8dZ%S&&wzU3{Zt6H!Stj)GT|BWEZx zZ-Rj&&)I|WxlVh|jJa-GNT8=ABPqn}9Vm0<>Qz3+Fe-{D)B`Xyd-hzC%^YVKUfX*J zmU13!+1_{(;L^-!jK4Qvxv8OoH)&}i0*h}3vf*SDl4 zLbGP0{78f#PQuO;-G4MDw-Cb6V9A(>C-9+q^&Wi@Gm{}oS|4l?vw1Z2zvA4+^7+#R zrY3G^n|^mbZWTbZz4FsGy_!Fzo-mZDMK;*NRR-2o<<(3%jGZIp&j19ymE8rWKcgqxWZqM-F`Y>cz?ej1wKZy3ZWso)}^T(FpXyC|0nTG+>P` zZEnibQ>Z5^u4aw5z%=#`rNdq7%p1{WScBO~Z2-`jSOM$I8$6ry7q0{ZiN1{nxpn*2 ztl3H04?;<(;QFV{Rt05>zFFoi%W}$#raO4_#QU@6Z{M`OgL1l*%smExxYKkLxpJbt zTea=3ePiF@$98OSJmW#_Ac3g%st3NSdTldKT76n0WNHAOr zMa(p8qjF;T+aHmb;U;*LPD3s_RzZNWdo*kQyoUxAqUSeeAZn}^&}j_v!Llr`G31Ch6ZK`P9UiH^O>jo3w;ZjGlXQ?*WQZx86^hCwiAxy5<^Z!{GS^r>C+&Me*L+ zcM#|1iHCON0_NP>(slGy+Okf+6En(X$=Qiv$HujicsG-@unBMllnoKS+lQ=IFow_&%|;VWp4veDqTd5g$-`X5OQBcQE7-kX6R1K z_+!#-@4scVb#HZ<4zg~`K;7q*+F%`98Mi$1BLG2fu1ujTbLWn=(Uj)7UF2h0TsMes z^NmLg1$yqpl(1ZZ=S(?8he;n3Bb}WXd;ihFdhuOie(i-6dq?@fb0LY)@raV^8U|4q zvkpypXQ|b7dv(8Y$&wmtC!Z_R=o(EQ6du;M?qWt0B&`?Kk%w;6{sfoC6hG*eLCrz~ zsZUwpyae@1EC91cKpDSRt?h2z#v)eLIBni?R00AtU3}94I%N+7&0^THZnYR**|TrW zvc((Lu95_tVY`X;#rx0uq$C8>qzzn)(=`R}9XSSeJ+ysG9mhnX8`rEfc%9S=&?wR4 zJGYcGW0M!MGFd32=T%6thbj0e&03#lS;-#}MyE zuY)YdJB6oNEhT)%)dXd3?a%?rpp5r)kEy9OlCf*LGavViaq1l=e0PD7Sy=`(X0|*c z%KVZ7E~hTg{Wr2^>>&^V6MJ=%h^l+gPh-ksEM+55MIT;e9q^5bqW4Fo#Z5L&AL;GA z!R7SX3uR13uR;M64pRO*)tYGt-@^*Yb3tCCqxd6KEM0n7hZqoAC?ZR~F(Vy%+X<^1*FoKZwu7p^U+R zeo>4M4pNSH^1~pasz8}eU(d<(Fc2ajgz31v)=#ueuTdwO@E|`HlzKmbWZK~xpz6epHSGCN4Ir~GRY*%?C6sE(o(tzt8o@K>1#dxfl5 zR~%uS{YUDmZ{PqEB*#YPHgthY&Qiq?Si$f%L#L+f`J_fL z!CXQ5p_yZ+&zv5;fFY-Y%$hal=KCW@PoIM&dPzbfaUOK+y@!uGx$&j9_dWaYj&7#X z-`Rmk{GyCBxnn`u{c8^GETa(!GXaZ?WA}=mi~^7Y4BHImgqy_dkl&xtok?S;54S*hp8gBe(ECQ z(UpnmTmwxYo4Wo`Drc$>{B6A3Zy=6QA+b{}#$dgEf}v$>&YRP4f@3I?0kGuGsG7swa}qRq|1MK&>1(bUJ(PfF$2=-vuJ4y@&U3`pX*jGYvhY_ zvNAUJlx5hEpkBS4_RN`c7v4K` zECH9>=}eQ^vu3;b%YKNJ%QoJ)c^in4%CXaDz3#qtUzG@Zl^PzJHFLwBL&x2FWA75w zo+;1lO743_(cWGkbzkb_p-deiwOQA8@@b-M-BDu&(`(~jv#&E8#{(ZQ^mFZENU9L=$Pfe0L zIFZ7S4O3~siRGu4>QV=$fXtF9YD1IhIpCmq7nMX_RO#GB{*G^>zKNWuc5G38LcV|% zXKZB3o=b%bb?nSJl7jLKL2H4;+U}Ss!ZDf-pfp8|S@z^SB`7ny&+4({ajJ~d!K$39 zybmE>sw(;e9-jToPmLAUX zx|a)aiC*v;I)Q0utna&e?eNJn(2Td?TquhJ*L{Hc&et3-^GmQW_=t&JhpC4HexQb&r_VVejC`f0hi9~jTQ@_;X$ z*$k0~_Lb8SF!f+OOiziXVvelj90d;q%sv|`e(In7D<{~8y~I!T*cxq$ex91E`){N_ zm1&HmZW)NS5vFhgQxZ32=1ikFt<@GT2%1=rXL@X=6d!9KYgRPS)<_B24_ok-QpwW5 zFLdCdOTfF8aWsMA<89#F=QB_1F;qnJQwJb2h>1MJC?ixTi?nj~bO5~&Y9HeHpE>e2 zhH))-+eA2heulJ`(LjKLqY>Xde0=T7r7;ioFGaLz!Kz3e4efLQWB002`n)g=R*heq zt>T4~__Rdna%&d3D6=swaAfI@O}jR)gJzDLIxDuLr_Oq@g`lnqnWCff@b*o6$gQs3 zc_H{kQ=UKj8_MBuLs98&?Saj{)!jx8J z>A@=KA2wqYnzPy{Jw=TNKp_FEcMneOfo%WO8(pnRHAI~1(ddEY>~Wq-)hnJp_7xBl zK4WKSFDX(~3tXk=^ojYWPE%R~E0!$6qN4<}_t1%lwrv=gRt)XTs-O#1W|_p*m2}|5 zgIr{84Fgzz=KLjZBw;%eDV5agDH=qMit)l&FpZs7j&SsnhygSad4#ekdZggZ08cNy zwQmSeMwgZEGCml}L{*`ca^Ie_j@qKzm1?3=WU2sYFcred3e_O&KjiofVL@)cO0*OB z{Gdaba*=~4H!kU$;+q9>B<6!;F1Q38<%rI7oUAKgJXuZpFD*eqjnX-1zf1u7pC#K+k{K7qeM>%qvl3NZIoGx1t7;qrQ#uWpcxhSaqZu3)VR2k% zDpcdT7vF|6+Ltg&adc@~e8f>|(H9GOjs28LVeV7}tIWMePUu=apiB}Lo7(;ISt(G) zD0g8_#m9Z~iFUjEFZ1?uzD}LH0OCBbd40Bl-mc!bYP4mWp&0Zl6IBe}L>cZ_YQC?T zqJg08m=V}CCKrTV8&y{Jjh-iONnxmRcY(b#^|SaUpU^bK&?vB*aJr$`i|s+o^x;Q$ z^^Yf7&6V9FBP+Ccz`>|Sn5Gx35hwDJ*>4cZ$+PFRNGR64d-%lWH7hY`8tD&h8}9>M zsgqSo(x*8&iamo#qyLye9@@IWR;(fP@8V|ZF_&Z4WIO%qr`gp=K*GvUrrF4St$yVs;+=3iqLduPBqUwv+5<+h#B2I zG55n2JVbI6)0M$>x6L(Exm*SG60~w~p0XwKMO|lZm(okIyuB`aYi~#gUpY45&Ioxy zJrCl+&(rzi@R(i=5t&Rxby}Xrd=4>XQ|xdN#t`#1Fe;cpS9E@z<8*r|k4GeHS1fzy z;4vH1dc_&_JOI`#oDYI*Ub~9MF-)WCtUbKsq?j~~TdLLV&Q0sQ*fXR~vZ{l5sn=Ln zQ>LL|)9v8Bvev>L-K_M;o}{`(Y}tzuSPX-^oKn$(`~ZhH5k7xB#Vi_AX?++YhB?AM z2GdNs9J_}Eea@^@OUMBb=rrM!g<=)L5?3KjRK>OnG*_Nuo(@FSC&l~RsTZni$aXP9 zrbSunCnoIiglHXgYmXB?@V9jeBW1B}`%wB%FRqN8v(_#P=FUZTqRW|>F&F(tuWO&m zH272srFmP$qAJ&KpHS-pLhNR?LDEYc^iKPuqjd>uA@)`mdGelH^ zc@LjRQl}w68A(Rja@qz@Hc!S7GPxWBB3QdHX2&0$ETIt^#o-aM`^I)K_^MX zm4uCHl`Vr_mu-Gh&C$|{7uEU+G0MHIqCN-y7Q{E@uKTZ3Fr7L;SnGl|cr4~!Q#&{e zF5ZQ6s!=!d&xQ59R_a92ah-ibywhu?c7l}x$CEu0nOUjlRYd|RC76Q!7P5x+c?{^2 z0gBJ4snppDC7vLu18dm^5URc5V*|%8W(* ziTyZ?2MH@jGZ46xJ%`!Yt6SD>;&N=V__|ZrSnFK7QCtGvZVfSxiM>~nU3>Hk`Hrb| z+Ey@G5Yx>?&%aT_cjx4u9`8B?sjZOLyUx>PDyH5$)`c1iU3o- ztr6FIh+DPsiwLKj7QON+)-3QyUt9shR&GXbYP{|ZKlzZ&h?}?Z-Z8HUC{a^w0W(9+ zVHAN;s@7xXWXJWC8<-^OBRpqY3xz=TI|he$zP{=sKkcyBc(ThY_{}4jc~w?8y;W42 zs7cJTivu>if@7Vks)M0ObX&(p2WiTtV5ITo6qc!oEzBnn26Dk8eg&0L6w6Lnj=~PW zj2VdV$L{UnPj&0V&Mks1@)A7N4bIa1W#n07C3HuQ5B0 z*cVZ>OFD{z1@3?qwj-#xRt9b@N?aa3_$lvyjRkbZoUVz(df1DvEY<&}7F-=Mb~E!6^ThKx#qt0= zE0U5tqQL=I-^&2QS&>O&@pRzeG8!m@90ecTvV@!_evzvXjd6jqP6eeh@+TYTotQd! z8m}cT7@TW1SQk!gJaG_$J~#|v!bLWMxr0r+JSDPs?IVUbsleHLZ{4^NG3)=!tNaU<%d3cL{*=eyh`fwA+awDZYf+DHS zdG)K2f7(jSNJvNIxglG3EWgLsV{o4;o?NWuG2no>#Z)#ZGF4@tj^ts+rkkT4E)VwcdVaXbihlf+89hAuI@Z3OYyqLu09FBDk936wTQ2S4WaNzl_ zNaN_IDKD+?DcH{MRB*AXP!9>8T);?Fm}fE~HSuze$n!Ff2jgO+P?E2pu(LeuFfJU> zT0~(#))AQq037PXQxLY;Ouwoi(b#$ka7cq|U{jE%aMZOl1*;PM@$tCZ2RPwDu~@)B z0kaeM;Fpl3aPNL)YTu}*)qqcpy8=gNZVcZ4(HPZi#sT_tfxh0}dWYFYvHS zWiJ>n>fDGv!ahLAR)OP&oZ zz%)$L7%VVQgojus0=8oP0|^Gk4okvtCJTQk^XI1ECC2!{J#O@NN%W_)f;l~6&iKKl~lx@qhZP~VMtg>y}cC9j3*|u%l zwr$(yDx0s)efPY*|KC@(Iophp89g&&WSh|=`?V3KAtd@>Bp!<(w*pwt=?$;7=dcwg zP|T>&2sk);B&PTx#LFH@y!2p+^6V}p%~Qt$OY+lJ=^x%0vEb6WlGM{EnPEvBtwEG) zyBPM+{YmC%j!o!E^xGXzkV^g?AI*yIeW{+w7SrMj>o81D`mqA;(Q zc(81qss|~BL1MAE@m+w+gz-xCE-V+613Wy4A)i)A1e+-0G(pdx!qmwjqHt;XmxpNr z)7ra7_~gJ_1u8JAFZ8*iGE?^V44;QkcH!J=&4%HNTqIn9Y|cimH2$$qqJfv0`1Z=- zK5a7CbhuVYg0E3VZhYx3J&6k<=bL%Pg<9h!va7bn{=h=Zd&$G^$zs97dGx}Ruw23!S z&xvnz+?GA?V94$e+$Og|=j`a-TY7-X zVR&8@*Hg32OvUiHO|h}x%eX6N2=qayaEegY#T8yK#3;WB!LM>->~6OW+&S6Oa(7FR z8Um0b0?cAl9!%7v0D31m2ag6yXm;%|Qf7n=%;(5jU5}iAhxu_L(hA>i;+_X{n(8tEw7hBQClt7|%~70Xo@wv!w7V=X$&L|A&8?!;`a^+$38s7e zSVqf%VQ6PmA#4qye!-V-fzaUYWyej4!YwfO?VEVoqg;(=h%yT;Odt;C~x zkLsfz)^VT;jFBtH<&I*aI#TX~Oi+Eg-^$;O;&#AE4NYyR*A6a(#4U5*Z+W^>zl#`5(CE`dYne5Z%FPCbH9OwO6X1ry@|0RM z5M==brN3jnUvAX5%{Kfomv=HFP_|erCDaxlJZ{0X2(4XNM9ws^^cKjP@-s3EjDP^UGguAd zkg-k*LB^6FYtOGWLN`Band`tF-S7~x^sx((Pyt7-vdrOl-a8jH5d- zJi9iL=R+kv7-*J5ndoaYq}-VWraX_K32x9_MnBq%asY&#Kz1()LqK>$~=;X^wJLV=ylV#7IPeAF$e3{uDd`XgJZy+Y+JA=uzZ5zc#t%9IJ^EV_fxrrs zmQpr;J!?5}A@tPd4;65Q5?n71dmmpA9Ropil93W(fqV>LgMBU~@jFO&ai# zK6_BIMinxRU}oY@eIBl6g1N3NUL9dWc#lC7F41qJp>S69Ol&e2OKa0G%z@N;3~D8+ z@Lc~rNUdg#iP1&o)5t&_Elg>FG2J?15^_#x$dj$+5onAe%+ew92nJnHE@&x}POxxL zTQw&QPaVdE#@FD2VdEc zQ)4|ycqin*^KZzCZ7TC36IVV%ZQ<4i2Enx@F4@!@1X@=WIDVx&4?rbt`jW;ucKLsxc11c&g!7 zMpeKeMlBVo=jReiqM(LOQ=@i!#`f_ISpktK>~Iia4!tVt8b(>h0`j!zSpFbTt}GKG z=o#eVbZ1={^#>EfUMDbzbw&X_a2=?gA^C?MhjDIrS_YbItx7w^(7s}t{91fZUI$`9 zvigAbtc5g%hpP9N@qWS3O_6*)|WN@FxUdn>{`koUvpsmB@S2^@Zmn$lL?Tuk{15W;*b z1=RsjUb=eQ1vK&Bx{%+}#(x!lbK04OMD|Wo{iUQ&nj>O;RKH`)fQ2Ka>3kCowPGL# zn#}v7Ab>wtJexJkOwSTSu>^8VoAZc#V=?N$z0fM($!uE0xMJMql2H(*HAB|oZU8}a zFJ89HSWJy=Tz8ww5+lK*$X(*ks84CA4n8v1zhu;h_@$9*8Ddvc+fZAcmyQ`iYeD>^ zA52U#2-s&o(7b#8-J<|o)uDiodIh9}Df5T2L!M{S_|I1!7m)gcsXYdY1_CfYD52;^ zZTKv6sYy$Pdv5OIIBXN>K7ta~O)Og%w9WSIT61iN-)Wm)XbQ&yvJp@H;4D%MX~h2DxD8EINo z?L^$=No(fwAi-8RD_!=u4;%<$;Ivy~g~gVsq<83N(Mr{fD{E(-{VaAM?@-|i-n0TR zWjAz^3$r{!WEJN0;&oxD6RSYCBF1>~agGB%CgvG{e%pho$sGZ4jSjKKr zj=KBFn8|J`jLr@AH`&F;LiuT#4(w2r#;Fj zWFW?&AcZ!Xf=FVBnP@62;t?xXBS&zWwBUfzW{O48D;XdQHIRi!-lwAJ!%~Ii?cIbQ zX{NnN--I<2%tAr6>c0W7yGmtU8j39zwwl2*EMIFDytm1?>@(^)Yl~g+sBgB}p zKBDH-P&+SkxFk_z>KTf?@=YqptIR408Eo5&cvDzasx*t26DHM>q=JfR#pVj* zB7u3{&|-r!R5b08NNlvl_OVM>dA6|xt=UjIq!Liq2@67LWEYBR2qLpKu-GIJq%lwI zA|Yo)S0gioe$#4YVT^}Hz@jX?l0^XOC`^5zf2F}J!(kG{t)`EbRnvoHA}bpx(nLPk zBeV0^{_xPS-kYs&bLMZcwDi8;_ygn#|42I({=wX>5gwp4Fg617pt=rhH9a5X$`GoS z@C{^jz+W4vTh=HnGFp(5P0fr-qdgFcz|~D)Lvy(WO?8!FEKx>j3iJS4EhelwqTmfJ z?)M8#K(rfzaw&@-Nb|yjYB08>0=^53!~iketQT((&7f3NN{uTNg;E8LbwEe!Euo~T z)SW2G<(PM$9DUwj&|F08K|fen+F-og7XyuXrUL4Idzvt zrU?8dD&SvH$f{P%Rha}yh1$EXS9E-j+jQmrgTWxC$Oy9~lC|x8WhwbMC+P;zhrCW^ zosHDy@kqiyPz2S?f%R=-O%!fSZWu{TePb8lvOd~PDW;+Rz$~AD9q_A zEW^leEV=8C4x7FFuBQVDG|(lwBAaVF&#f4EYpisXL6NA1!E05xs=tB~~yTnO9QLf&- z0;ODUVscH*yLku{kMkGxF6mpKG^cGL)XYP4r zfZOD{%3<^;Szb_%^Jm`fawQ)$Nz_m(oPZXWS4`C`Jf;+b|`!SNv#f>FX1ghAuUaX^V7HE*i4Vs16=IN*zFQz_XOwMtMx;=OACD2 zxBTPBF{X(D^K_Ll*<}WG=*W8CwhU%Dh{S?ouxk%+PnqQF&3l~m!0KNp4mQlgAC9S6 zUKcLJ{TW}_W+<#9f)@-5Z5z5ap0Cpfwmd2eD>wiYY28f8f6(6v)f9DN0yT?B1EsVe zg&P3f`G%+f4Tv@myW#$BwTe($2*bWun;`S@unNzNhirk7zvn^__C0MwfFaQxhnB)# zE`-ZG+J9c`BNgh2(lnARXDh1YN9?I0AvYq*|ML4%M*yZ2pdN*{M=COTQB8v?c+z9F zQq~w57r`XgL4QE0q7(fa{zVPkU1mCH6`(YEt17;uNkmOk!nNj}h>u*~cLM>dv)mZr*vyI5Qb-+br-`4a(VBXQad9 zNnXMZ?<0MtRL(qS!!62}31U2c0gWP8o*cFLXds~@7Hh?IA`Ymrm9kqjjT|Fc=S`LD zn#3@OFL@m5yiFQgI*c5la|=%b!F3CJIhz9`so>xYr$MC6YVR>939|;0+CwBgXy%)D z079?@p3%6z5+-XRL9xPYioPDEjopoL9nu%ar~`8opD0HpU1T9f-OIM}4Qa7N zpKL!u=%)T<+$KZPrj^QNjFbIK7$?d72NF#INok*ZIoqo1yi&TfV%NeqQcB|? zb%=sF(OW{qI1_^7oniRDj+^%_-PTbgkbmT)EUKIvf;^fu7k^cO9a^?81~9!&SF&#S13=` z6gNs2DNK-2EItX2_r2v~8X^-UnI&yCTEz6PJyy1rIC46(Cg-`*Ob_PEW9Dmf8(Fl5 zR+v|8qAsN_ttn!$fZwKVF(vKU?5$I;!EjkQZ5?x5%@<>AVq*4A@-Vrr9oWkBPRmsZ zGJ^SR(cD1qypPl};N1X+t2iMC@p!2T=W z)@53huC!4oAJr~7GP+f+w9pL+h$@sgFd2vny-7dZ1c+BdDWBP2E-_bGT7+hq=C>cB zJ0(yatfLN>sW{VbAlj)^%os~lkGZ+LSWbTV3M8L7BBJI&GbtK(1svqb)N&#atw*IqRVrBW8I5%5&=I6&{MPd)9x2OFM% zzNcJq6H4YO%qoE^!?kX03qn8lTtDGDq)3jY$-2+LxJ|aV<~|N96K$h|*>_eVMv#M7 z7Wpc7N(=Ge;<`%t&4!#YrY*zVz{@j>h3wUW#h>kCFqbEm1+muC@g}AfiCaZY_=Jm5 z1drMfO16xKmDFTNVXA7a|NDC_eqO^Gg&2;mh`HTpjA0FxcjXAQg2M*6g|z9ik3h&D z=o5*}nPlC#Kstctp&8ivKpW{arek`o2k*U&$!z*JQAFQsxk@WYFW$$Z?AYO~?nUpV z#Cqc|8;2(hA`n$M_Nb9kLR;dy;~Ud&^^UUse7~4GGUqtXs1~+6M6xnxU7h9+9ei%j z*SnQj%hOpxwy&r1y@6m0oEHG5ko}x5hj*Xs^qDi@SPzf)Xlyp;^W}spOYY3K@SN|r zwi8|cTP3C#EJoK@GQXx*-_MI5 zzvW-&;C=K*WBV*FXdS=aNc0@tw^WgL>SlB;kjK?N_t~h`s^+PPJFwXR2ZZ=MeKp;7 zdhpU6-*>)Qp5wkg-@D95{%-RgSl8s-aVGIo51<9^$CK84y|wQYKn{9bH-$(N1EB`s zDm=`*e>r^v!{<5ecs&J9Q(=y)eILJhTzlAkF+uwct0s`)I1Tn43`fT?tLc1hs8G`$ z2d;rk0!rpfdBRAl{-hN}@}MGJWarXCGExn#lz@_7@<=tA?q^~$SRoI8tAmA5-S#nu zjtv1uaL%X|r_O@!GY_f5cJyfCOxk?}UxiY=QURy1y$Ikxy!FFy@s|aN-Gs(apkHfl zq(WO8MbnYdx1?E3)-;{tT_H07lhCVrkjADTGkTzai4J$2B?AS+5H@Q-4jr1<#<(y$ zHc;cA=vU3DqxUaRStZCUSL$@^0EW=&))(6DbQ1_|(_0*lW>mkMe|vv6>iW*5s$4(& z4di%Txkag8!r?KW2E6xNM3DP1Zij!E*SO$ORC2wA3dwTbuCl}Cww`=}^F6jLr1Ufk zT8n(@+HQUN-*>Oqv^Ys>mfKIMq)7XGqDc4*M74OHQSbN?Q1D%N>}(o6XPG2WT(*vI zv609y0-SXBY*U=(WPeXGkZ0fR=cg$1%A04LDgFN5{V)&;DSfPm0Xn@|@%gw9oXHLz zuOgRgzdD~Vp@y=cV!AI}_;NnsQ*i6I7t6MrM2x?j@oD>~mf1#0{S+Brp!95Sf__wL&|Nw3*(Tc*b9Ache*_Rj} z*%+@NIG{dF9#KIr4xYB)rMx)zG={Q(s#CFbdHZUq|HE|kM-Q8QZ1*mdwQ?)R3#kR- z;)CleyeJ`Plyf(>Aa2C-{o?mNIWI4TK6=tqt`wo+(0CGG*IP?Tj+bud3~7oUX-WUi z&L7K60G5Vd9p|NKISFDmAVCB|Bj4{Ae7xQtW5c=@M?x{&-fwC>l*j1}vhUj5F$!T` z<2_wp!@#@_k&{Nknfb)R+#jbs&u-5lb+Sef+wzVf5C$2w3Wm!K_`!59o$^^9CwXk?D^xqitb0`C_?n^6w^@fb{}9k!9a} zW_Z5$;k&)AvOO-Hr`^!~kGegs!?xtSzF?TA-nQA839kSjs~mf{Ee;|6^u4BoLg#c{ z1!v%SeL!A*eGO|(^V};(Ek*gfMN|ry`p%@zWi;Gk1usxXq-cAdp%QJS(R*(~j^Nc@ zNAl>YKg?H3)pXv@wB+GQ450G$9FGdY$9pycv3q(RkE!SL+t^=@!1369yI6u4J})N7 zsyDeeS+(EnPt;1TEG*ooAx9@C35CFbC9qg7XL@W08BQ4;hVHS`HScsYsa9*ded2$6 zj+v+#ctPjPWH~?4vV90TOY79m2#!JonN^;8x*sdNf2?TXr@oIq`n)VOv28ZmY_$(X zqKMu4rbWn}UEGLF|gnhUqUlU$;23 zHIMPU+es#`=MNX($BW0pE-ivKsV}WQ0PcIRT!lu=ZH4Pe^&Y8D^2=wH5I@lbrJL_U zjD03p`8buBFMqkfa~$)8NJGG2|An^Z{pe`_0nH&@4##QL@4e@w3!f9ILVk42+jEJI z&->*k|8Lr-sdue&!OiURB}m_A&X_5+ZndC5(PJLMwtxTi{P8?T?&-bj3pj$~MnMJG zK_$g9a>%2Uwca!7Fs(lFrx2!{0Cai``8a&6_Y}+tNLe@~4DmMkmpL9vC}3b91P1Mm z`|8lIy8staMkd#&&v~^ie$0UST&2_ZbR>7jtatBnH?8!EM8?9GwG^qpNSqZ+nthiQ zpdb~vns~&M0;K8E#T)?uVhN|g6Jj6ZEU%ak6Yy8!>x*vk%o}Zrb3!L3*#`kWF_yR~ES-5O^XzTHtC>>v$H@>60<vHqaqFHR&1FvQKebVb?G^K&;4k@ zckmPN+w%wq;!@;>O%HO%Krr0a6YRpEj;xfP&eKaLxk9c ze(YKy7KH;_k8sB9Rsp#RPIJw3YSgmn9J0=8a#3ZslB#*2!#Z(ym7PM5#pu>nbdf{A zmB*1qlYjLKyCq;mY~EUR8biGulb1@f&&4pmb210&5F!a z!^ciR(Y!Xdgc`5cL?PZM32iiBSNkXH*;evB@*R#k?TqMOBpQu((;#fcAKFlc6$}W`ZSeOlx>Fq#?$a9;R zN(u-QdN^8ay>CWK?WI&I?3eOOfPPbgq4Aa>K+UGGfT*gl=H+&eE03FNm#u)A0C>K) z^Lmq1-(Xnmw+8&r-Op?9kn)wG6x}c~4Bq?G0R^8^0q{^JGN1Pmp7_hSk>jwt7uu+k zHj=zNyT=-zkz?NOy?K3ZxbLj&#HeQW z{sJ>^?h7uhXl&?H0-%+n+KpDz?2lxxrxWx+Vc|3v=4C=j)BSLZ2+Z$YAWMJ7ZlbjRw=R<8mf_%&ORpD{l5M^SOaAqR(u zPz2teiDMMItDY--*J6MhwS;{O8oF9_f{SL~T+#jPseUIL+x67#xt?G>m|7Rv1}Q$e@qkAK8QVMmGQhYdd_lF~_BTaGR#zFTa_#y<&wJm@qZV`Gs@T#@7YvM+906_5pc4UPet8fCfaA~E27S5*(C1C8s(O4`P7pS zyVa$cSpzJQsT*oI5&k5u%dZSf)*=I=;l4LtHgcjdyD;I>^uKaS&^J9NGAF8EK(7ef z_hNj$YFfH5pJ@y5;Qyk!pjvZUpx|K>FJdqlwo*)fjmv>*#zyD}d;%jyqQ{oLe46mJJc`T#zbZm?|uir-f9ICM!_n)Y-VW+9{AfYa8 z+JIL4vUkr!)n@^S{E!%XB7Sx4cY_}TIc`S&2x!Z7KB1?q{jn77f(Ah3P&tL9RgX<) zlPmo(7^E=S~lp;pL_u?$OBRWK{uMFu6Gz zVB$4O1`3U#vQIZw(M;aAe;>j3dI`MM%64AA%yGRdi^%qrM0VKu zbQGDg;R0tnnDjZ;h!VZ@ehz6k;e9yO+Nr-F#CPZWg|BKZ%l;&O$WY4hy~z~)zE~FP zJrLzH%t9JHVYztKe5d8Sfyn{YI;GcZ6CQ0V{-cA?(+bq$?w5R8CUmFeAy1p;8`jrpW2kzohwN&-Cd~uX7%$ zMXSKq3GNXKYwa0*Mcd`M3trpx_Go`ep&l=&WyZB))$6|67O4W=^>C}C+b&o#A&=Ye zg+4AI*x{|Zc)3(_@r=B`2uk=J|jVxWUZ83tM%*hA5erB!~M5&AiI^YOz?}@2>BBd}L z)The%?7?(`NE+QS&Y%!t#UL-HAKK6i)5aTzAVJOMft8608QNi#wKpK~_J2eIQ}V4W zqr{ND`@c65o*#4c4NB|7uc)=0X0HRCs}oaU`3vQi$s>JdG{RQx?V(+vyjO)q0h*>H zUy}!st^69UA-$={s)#w5%dnoKQ&9W*_FKFIJ&M1{g8p`y%>_&asSEU7N*ww6B*F87 zj%FY9-t~IVySdlXp>~#g|0ropvAu5m#HQ=nx8Tl4fBqHLK;nvY`{?t5%xBqf*#(aK zy3BUnzVVBTR_BdMw~S)j7q+>?Yfs50>Xuikv-Iu*+SCumZ7GEBg?B{hakFyPeRG5l z3i;-cheQ#d*YFt6cKc|m*+YtJMkX67AU)1Ip?c_bG}i5U+z@?@PbrVpDUhW$aPv~4#-kLN7n zH(^HKt;aO3%RX^hz~4Q54!i5Fr&yL|plt0BYNuK%U^4cphk}S6qk@OBo`;Z~ek~wf zZxe=xkBgn_VX?nK??pa0e{0HEni(V8Pr7}EwBmq<@gXTjtJ}_f;JF{vxup;w@s|S| zO$cdtKV6qy4q&QSmT*vD_nQn(d8#nfO)AS>B7ZBlkJ~g2iTcNBo~oCAmeOP~sgC5c zKQ}QV;t#HNEJi;3K~!A>D@kng<9QD}ai{NJs*)aqJ%Xhu-y(tsgz|aAI9OKKD60p; zmJ7ToC)lLrb{apF`t>oaQIZ8CQdjCbzz4N%WLgLtg6oh=q38JbT4e7>=h$RAYGqdw z;ZadFH*f{d>lyp^9!qR}O~*}uZ5FT>e*pQ;E*ceET?c9mZTH`pp7n2@@2Ew>2XrlG z|2o&916yxatq!oYsi{p1Ki3D-jO~w(oWIY}nEO;jYv{#$@wwPFpOnAo3~6=6L7I^v))$_PbCQoUTFsi1O;AJJ5a_yDZ937pIs%{BnpmGuHdz;ExVLZ}o3HM(1N!#peC%}O`wbR1QA1S(j-gJJ#jc|_ z9IswBbl5}uxx#|sOysf{F7lqK?eVE8TBctwas_~&w;kbU?p3KI?Wc?_J0+_8(DA$< zZrftGn}2wNY=2*d&uVh8;JlI~lVRDz_6R7;X?jIf2wB!AAh1Ks0R%`|?bCY^#eD=8 z3uS_;xx4=0ujM=_6iozDTm1sY@>_YStCt)KR9X}dW_(fxbKdo}hNjW&L3E4cEOuLS zW}oXM?a!Bd?*dlHEdL|3Nt9HlaZWqRUmAteTM6_d8&)yjkCA|sc4?*fagi4@tBqXf zunGWWszZnwAQVlt&;s+fFK$i#_&94kRVdD2a-aZ61r!FfK%1;Nz9l@qG7)r*$}*e+ z!_J>T$QrR9$&FpOfU?fR4}?bh=(>kurx&ra$*?Lv{M2K~Rpvg;zcS^=2 zAADq6X1Pi&?vBb4nT;smiDPn|LzOe~(qd3ERX186>NJ7UFtS0}HJp-!a5P`VYe~rOYB0by|VIg778d=lOOZnJDla2rM9h zW`)91spu92>8P4QctU?4HXA+6(AgEcKrq%G94z%!8Id7Rm!SO|QE6{kdTksPS3ugC zq6xiJ)g>q%S`z!z9-V<%O_gpdv3 zf~cnoCbbA=BqhK5a0I#U%sw66b|l24)LoTx=*==kSgnhE_#4Wo^uR0k!&9Wm_eRxH=G82YFp3?=+fgA9Rx-?-8BDBKIbt zI|3JM7`fppq!>Gc?fgk)jieNQZuBp7hi(B0+V0_<;ZJxA)Y@94NJ@u{L+t=#C24Db z3XGWexm>q4N762U_qLIf6I;tzC8-eOIo%rUBUr>pmhSLJ4xF$+_73(z znn;3falJs(T$Lq#Lw`b@>Olb~Q!_})DL2SVo&%dSVw#qDKm_x4ih&xVBrE6_{qm$f{r|EZ_)8u7Ffl6nEPU|MCb+H)KWp#h5YC0$EJPdnzIl7i#-yC3J<)yL&Dw!UT6^RPAGeA zSyGSHe5sECYyTf!=M7G0q?@z>xCyQSe9VOouj69n>cXvpw5 zYzOFj1}?RsFiC}{5`S_a=Rh9JKip|totssZeQ}eZxGY1N7A5W>MKn3+<7Nd5CEXr$CFPvJi`xh&{tV?5||tt0giDtYr? z`9SbV2gQ^8{cW%d6b+P97Zd@&_L?)s^W4%_SZ%;{ha97{o5c=pkB_ht;7E^@DtNPN z9LQK8E68bR*#QDiB7s`ev7>QUKK!VFd+62qT62BQ1fceMi^J~JCt)N zgZNG=lcA>s7X{P7UKYt$Xw)rYkgX{_K6rppkLi3m{F@_lai}{Rv3HOyyID0R*dEvq ziyY9_SY@!MlFE5Tc1VyaCDb;6aR8xi>kw%ioi*tYld;baKUic~db(^WJb`yk<6Kvl zYizV*`Qb>fPWM;E&<`bo{z^m&+i2NWrmv3MS`u*{K|2p@(ujEZvvBkelPQ=Ugot5j z=sC;>)b)Nekc;KsIKqH1NIqT|sH)+&B4p>1`P5U|P#DlFA(5g}2&!XiRZ zdXXq}zV3DHF`C`^ADvnF{ncOunJtxv%A;>I@utueL8;jS0~>v`WqfSXT^cX(ATVOz zIe?v$9W2)JOt3Ni8t+YsIa5&N^r@_L`3b|&&!+Cd=%*gARx$V}fu;@-*l3a}V4V0- zVXozHW()=VZ2dbUM9fMR%(D{BIA!0m@t`J>rM)AF8;J+qziX*fz%vLQb2o;!d&%>c z5QfV)MPhW^mP8h;fh>MV$QQz6YZyjJMLNCik$&yH9WH;P44-UqR^%JBO=5* z`BYMTJ_?EXB6onx?bJxCc}27STlUNSWn{k>h1Jhk*m~${od*910Gs z#kB;ibs}$~M%44dTvNgX_U+W_)-C|3G?Nio!o8?no*%6cox-U6i9AWS=+O@*z&-6? zDW61yCnC$(PaAie*}UsrvXP6;Y4HL8lWSxt$FfG(ssdxRV z++ak6?tMwpO{-GGXqA2Hw;g`I=dZa7WQOySr?O`$GO|z?Hr55W%FUGG7;P`r+>+eC zNF@tNOC7bmiArUhC4Qd z_`4fI%O27vISAyHk7h6}eHi7v3DXGe+M-$lHJ5dWlXK9B zVLT=^4UnxPPsq}-h;b}+mmL*%X_A_f2ibH_Cc=P~-Y72xMuJgj5= z@B`8HEv&hsDHkFg;XOP=WkoyRWW`1KY=fird?7=MV2gRf2<-Gu_o@6z=$UqnTYSErz(-h4APK!9>wj z_5YAw5Csv}D!`#DYMMh=z*wp{)7ZVEl~_E8BSTEG7?7L{*G zL_{OSWYpwLDY2Un9~(zw@5pk9(9!ec2IU|gKtZq}UrY^M%5RKXtSLxM<0>|}y%?SY zvB3A`5R#oUxwWkk(XeQr)MCzT8HWfLbW)ImJXV|a;#@rqk|)3k=8?koZysCi3-tE` zYcriuGTl7IKzXGySuw~0ocqJWOJ=wX+zZBc`p-4mnHoJLG$=p+X2vz?Q4x*}_IKVH zNH3Ex=-e16;K9N%R~wl!A<)cxu%2kImuC-XfYk2oVkFH{T=1Mi*m>vk67~8AWsggwSX1eLk{j0znsTv@gt% zh7}MOPnXeAS|;U>o6S^I_lO^`O~-HbkPISI7nuVli;NH^kP!<(lN)CJkTOp4Bj89H z>t)^+In+|`9ZY6#bzMh3Q4o_Ui%S^FRW&v~!~LriY_D)qFR+`u&m)~*KJxT38bVPg zBF_k08!P|4oM=K^bE~C*z`8xl4b^^(PaVTy@=yf^lII450y$-(z9XK^31^rb zFV1I$llud8dc$Nhyp5`fO zy9C8}-UH2oA`Nf?Lt8-i=ulnsrqzmi>mVF}JbGF*NWwtm?}(v+r<6X5?8r|9FMB0; zh>3qVr~;9;qWPSvwHH^~F{7Brh|glZRqIN%YD&vdJLYUd#6)R-voR+NO$*T5y z$18)Gmbfnf|(g}oA4;VNOgc0o`Oe`Hi#SzX%)dj!S(LScVsXJU5yRk#p>loJja=TC%7f6V9*Ej%PAAHEvdpDf2$t zyM*Z;{eFAX*TLU%6z|BoHOjUm6<>Ya&U)dc$rco*zDCv+RKMSOS8DL&A`~n83Z?0^ z&2@^F+mS47RO%2Q1_+*%i+!^rY6yOp)D%?4r0CG->g)r8fb!(4u?%E~q4TS3$Ipab z&9_mxe$+a0*Y1ZD#H5g4S~t;o(*AC9}#noMXy#v zl75gX>PQQNJwWFS9(T6>3Q@}zN>(oea~7BoZ+A^t)FOnivc6eSL7}!%WOgQQJ^oMv zfqWx+F!p$NRXC(85c0)n1Eny;+z4~;lhAaihA<3-AP|6pz6b>WX>#2`78`7qq{zbp z0SNga5P<%tITZBO`4qwa=L-ZN>u`V~M(cBS#f<-J_#b-=pu}-`od31?Y51{;`OBoS zxnh*b|LH=~gaYhe{Y4?>Di=p(iIpS&->&{+UBrk2{7?6@!w~XR3&YdIOOXF>n7)db z;s1OA$Y}BIGIu8~(4~|7q4S03}V< zSKSIZ|8Z2FN{HeA!SLgCAHtNk#~^UU|MdLTFHW4hNLG(+oSJrtfqZLq#85D*N9$?g5oDuFyKm&0n3lGTjQ z4E7`8bArsLg@N~~ZO4cO{>%XzYl!%6LD zy@-kgj0f_sL2Nod_o!C?aP3f{`0CTn638u*Rz+BmA z3hDgMI;AI)_re2aS+3TyRW=Pc!jWAUs*Q7-9&eU5Nv6?opS#TY*gMv`$AEvZ&AM0f z+`gY~@wsb_iNcZiO?1~Q;q~8D>*tPO)}wsiQ#`V4%ww_Eqhc%K!p;^jkMGlbqVSS!*GTHGKpkI#c_I&+01u( z9P&Rwm#9Y+3K_kdKdKpX_#1Qy9)GT)*W>-^;=}&Feqp;PESJzb2#A2v!4Y9hhp zx%yKQ>@}%t>vgXnhEs3#YAGIE-LY3Za>7Gt9*dFXHr;aNrGGU>j<>?*tdT%c0QAoe zVutl=mM~GR)^z$IUAg@vca;zaO@1-OaO~4|T<5E{Pl&s~xn6s}Y`U%R{IIr=&^N{1 zNhD@?pZnW>d)fb_=j-F4{@K;D#vtnlZH%KvvYe07EHRj~J>S1&*^locdJ?E&6nOli zPvOY)NiPV2{0U^2<^BHIrRkCU*oBPjHGz+*A$V@u`|JiEty0}S+kN2O_|Lv$<1nCq zz>#Z#gw}BV3E%`xU{U`Sqv{|IB|*#UpjJjoFBmqu4c1A~v(Ze0hKXh$l)+L?%U52B_FlGMf5%|(R;u&&Ay_S0fe8|}t5Xg}{WGwinVKtu$;J)-D4gJ5Ni?{c`_y)v}2KW8%asK2;Jo+HtR zK)9jO|NJ`1cl=*qF@vOMjPJ6VKe}~~;5!QYt&FU00w5xgXyy63w=`Fl{Ck=}{Emwm zU3=mOAuxvp@Lg**X`289ET#*~70R^@{}szH5zNe}0-kjac;e=>(?;;jJFeZ=Sk!7> zq^eUGBq;L%1Y9q(D+96QMXwb9g+EphzmQT|hD{o=UUS$pQm08vmUZdlmgl77i1%gM zbGPH`b@dj>5p}&a_w55W1ZtH$@c1f4S@u6bor~n=l}%1bKKVXVbI@aTKJx-^*G`>_ z;k)e}%FXz^>(+cdj7M3ja-H&IDCd{$pJ(kQ-Ju84;oD?*7Hp@7;OrzSD)Q ztIl)xA_ukK1bs}$c`tSUylymB8No`Ul?*P>nTeDS3Qhr>bZ1x4{ST({NI){uCRc6W z0_K06H)QcS3m;YOHEPg;yKTR{k;%u>o#<%YUq8OndRDY_Ili$k^rln&cdHT*Xx+-G z#w4l!^&0pK!OW24c6sZDl#=DLsheCCl${+nGPS6=Lg(RhTZwNNbX>$Fr}sPwRJHV5 z4YjKLa3RI)zsu4u6Jm1JDdcpXF+{*nUb{id%gBPJTz zO1;bCOs*#NI~sGM`pd0zNv9xORmI^sU-iE)!dwIpFnAn#<5~V&%0Pn>Msq`|hMTn$ z(#-_2$P^Q?Jh^W`;%Lrg(OUbz>mt9ix^4PAvHj|Fe+FbsQY`u3r}!e2g8GpaGfwDf z5!PX_SOn5^Ko7uk**;ssS{ERUDd%m3%};b(zx zS|ut?MMz-GdZ4%|M#_>7}Yx*g^lm+@P+$4?Pald|9`l953r_|s9iY0 z>>aQmN+1c41jMd^^rEyt61&(dqGGRrSP*FgDt7D*DRwN!E+T?puZX=N_g%AQ&E(dw!(L}Xopt4>Q;k&5x}DS>>pNXuMMivD=7dH! z*?jIxMCYLQcNb52kvwu>mpYhTyDY=Lc4TqM`r+9VZ3Exl=<3PxKRK)LG3?%(GcVnJ zy47xby!zRR`vc#{3jE84XIVU3wQlBzXovFPlc4jcp*OB??hI)vV;LpKXKChB^(Hvq z6WSaLzH+lNYhhYiU`?rG#E8!?^7G;IHndNgoe}r_^5ALCl22(+2Nt`6VQwymgb2+eW;PRZJ^AnH4+tM{bWyr&bGO)5`ix&MH|LmDD+?>QpBy z^XFKILpK_+eB{cm?Y*M!&F63qEH`^UisqNTe)5lZyS1OvUaYA|NRXzjpUdsNyXaFk z?DV-$4}(U+IzHa$q@Sl}x?~K^h>0tyO-iZe#l+6pUe$G6>byCXEz$!@7Y|srS#q#9 z&N*g1+#If6j=9`)bwSaczy$~GXx*%V#n1CI9$o#sum9CqPobE{yKOo=Hcpv-295+4 z*ZNAQMfhEMetL#)Y(Nk0mT^NTzrF40vt)AFv$0!zW4-3w(9DiAYkDsNz3J9Y?tHp6 zjCRd>dWH0AYs)eLM>GkZ-EMu@{K?WAVoXAI_wTWG^HO0o??hz))mN6$q^x~*(2u7@ zp+`LRMugnk z{_f7ArqS2oy!>n0-Eiute)1xjWYaU>T(+|_m>r$9sN~MMBL3B0&dwg+Ycm$-<~n`3 zAAdOPSy1M~*ag{5cDlED7zk@p9kkv2p$-_-H=}NqZ0b^5dG}4JrPIomO`i_^OFn;~ zNn&5)xzhZMZ{_DMGva2aB9j8v6X=$(15yWrH3D-WQJ>lLrKk1NWWFG%A zb1W-0>qQi2?y_|)X_+a9%RjLbh4WXvihXhQ{E%MQ^VVG1dX5+T=}~dW^p4}Uz+v&7 zuICIf?rSCA=gB*IvafB-sViHD-0mKeyz@YFH`kKgyv=vvhz`s+Qk|wFF|!Vu#Oc>@ z=rt1@Ih>a*^bt<>DEs>HX^SmWh8=j%-j+xk(w>$=qo$6XcF5n`=g zZ&2pU*`38OIxJdP@M7XZ)Ps__c6I`V;3)eQ<1e} zRNg!>48f*zoA{e`Zl?=2UK>BPoRDP9obYR4=go%-uBs>TWE2*kZ@2| z7nRv%RbmJ8Hukg>b5Jp>_v@Qm<(*av{U^S>CH4=3umFF(Gm@SbI;b%7CT0B1%l?<5 zSevJ(nDa6}%6d*p_?iHkI4X)}&YOiY3%morPU;a~eD=0ymPZd5b1sZ^q^W2$)ehAB zGlYZirQ!2q)=v;>3zv;~QPOwE`sv0H7seHujJ|%$M{8=`ZPM$_W14Apz544#)7HHT z+qnh#*C?k1!_vB=X*JpdCU;tdyy`QBh~Is4)4tnuo49P|35(6?-=6c&WP|UmuNPGI z?(M~kEbV=YYfs&2WS197fl7-#VR6Eo=hMr6^OU&JWj8N*I;Bm{?l#gBfhfM#IB)Xa z?q6cg-MHFs{?>2Z3j6h2pR%&qtPM9adh`^XFW$DTdr@+BCG+;Eq~Nn~%Kq>;1~Ct~(%)e0M3f%~`=6yw^83xx3GPsa?#%n*1v`INO?K*iYQ&E2S2# zwh=A6W04%OtL2gGfYb65vu>>4%gn5~!J9olt>yi({!a9kS|+NGMINe>RLI>nxLZA<^k+ZTAxYgfcqe}whsai3q0^=h%^dzV*fv@)l$ zCS9RBdD7-U2HAVJq_2%RoF~{Xo{KiMO0q+gKUNKn3ww11M#KT7{D8Q)+Ex2ANB7%a zd?#c|UjB=~X?v$I+uT}C@%B!iGq0GHzvJ-Fa~_GV!hu0;27K~a)tNEnfZzAQ!GufZ z8<%YkTQDo#yR=1W(iF29^3_jXCnPytn5h1EMdO$qP#YQT?BZJ!v7}jiNNDAZE`FPu zcl5t<`>tK&HQ%#W_AGz1AI_Lt{a-}0)6TAIGIVnkC1-%^f}FuaCyTF7IHpah>=@)7 zu+BTJXx+kvM^=3uGO2v~>Es}E+UgF@>slFQM^f%Mys{a*@Y}b-&m7mFlRG`izPs5) zvlYj}oYuK>BX7vO$Hpzy-ih6Cla;yqrm5B~ZFc05L+{7+*f32OS|_)f8eMQRc~(Mw zP#TU=`qZKOW{mM%TAvz<4X6Bdb8ZCl23i+&Cd|O{N58*muP8Q8bE1Cr0iV=y(}z({ zHoU5f%GzmRpo&c!hJYrGbxbIq8PD9SR*a>@$IO3EtAYRVdlIn|M3N?A`8P&QCDQ8rUH zQnpYmsY1#&N(^NOg+qxm-$O|--%E+3%FXwiCsO6qZj?BRHO1Qe5QR;NL$k5>=zcii z6k|XO0kmNFPY|Fj3?Bnu025>X(o)UO8izLvw*j<8_u#LE;mBjkb@<{2Lco7Xq08JQ`?}a%yH8|g(R3iHGc;GWy7v~q_E9%u#Pn0 z!{1n&zlMg&r*NR+7X#W-W0P=-37|z8hi`+wi8K!P)Y(AcE>Owbl^VWU>#pHT+(in$ zQsS=Q3zcf6yGSTitJPXE8x#^YSVCq4N`lS?U(sSpLPOO*pjJ>TDW>M7uxCF3ZJBZS z=x5Z9=HKD3DyZ$vE6uAYk>)?lf0|cA&DSz03@XEj(S$)8-G8uyug~;J6XrU|8@!e@ zcr9!2THN5Z6wuZI+Fnet+W>7fpzQ>-O@Ou>&|;q&Ax0?0)QE0mY-D28)TkMS-K5B< z1;dzOLP=mWrNo(p4*|4QfVKkARvM2rV=WSNwG}wXIRdhL4WZ zJ-Ri+96p*sVH;zQUJGbz04>@Ce%?Xa)m9jyli?r|i4}6Gp#G1pss25NkH&j#!{ES2 zbBSJW1hn;lwgK<8uFDNNto-$ffAeU(*XV-Agjf z5btTM*8+wRK3YWddIz9w2ecU2YbO41OcfHbyk6H(!^8vYUl=|a?{qgtclcx{qSFb0 z76)kYb*dH+s>XW!n_>i*6)|%NLJS{`t6I&_z(;F|PVWJ4vIB;Xte^CN)v7X*$&fOatayD@xq)C5o=;}ck}^biUZ9v(uz zP%TmMB|?>m?=I2G`C6&FQl=JZlmekU363yk5;$_03`ZD#7>*eE8(pF#K-3h&KN1QA zl*a^wKZgMRk^t~r48$?`4yWWW0vQV#L5xL=U`7Zfk`YR64f;w?3NLGU%>5+*F=kNBE#m2pka z*NoeGzGmF5=j&8JJ5TU+I?mVU>iAlsc2~L!BtpJgs)T-~_R#QEa(5wLELJGR0(YrI zDU*?@{u!bAG&0rWe9g$EzajXVP(8udj8_yk#@87p;iEBSwTC{HPwfc(rhxID@qzKN z;RMH2as|*X09q!X-5`Nb%2&v-Ul>JjMix`pI*z>zXcqzPk_pCt^-LlW!RaK#{}$^> z21CC3-@{g=o)a1qR>7!*!m0>i*8%M+pk31m6X?kHm&fUO7$b*YI)OF)4Oz0Wky#j7 zG@&F|&Xfw5gZH~lAsv9N?4VPXhl!M3o{Ba8(HLm1=Xzah+HKzjrc<^iDH*CEVv3}LP{ zKp3S`p;l-_e4$9C=1Wu>Ip19<_u#ADC32BaBNEDlN|I@A(S?}i56Pyv@nj5PEQH3> zjc4c(hM_|kvqlicLaIlYC-n$pp~PnRQ&NPna56-gXTKwig^KE9;cnr9AqGro}9a*%rPHkftGhiZKD==<9MNPZty10XT9fiB3kh_ToKpB_sD zx#fUX3TR~{>j?~|ejQW24gMQO?S*3Z=`bqM;y?q8I;_K}kH2Bm4?wGe7*zpi-*p&O zi(%AfJw}Oz0)a*-6!A53l@Nx!61a3$XoY-{R4o)LH3G3lA|`W^6v9a=$(+Qv62mCt zpYW#|VpL<$bV(0QKlRXb4ReEPa%j3~2u(Ex(3AzC>8`~+44VECmL5W32<6XU>50YD z2C#%>UWjCc#j844LW}@H!(jtIPM7t6F#iG&aF2_`E<5*Z&xp$fi0sFEmT zDi5s(xyC=@8b_LtX&i?oOyfFOszal%Iy6GidNeABX!K2oMimy77F8BMEPnnC8X?U9 z!UPB%Am#vRY3K>Mm82z1uTc^#jc_zVngYZaASS<}kv<}T(a66?Bg>|i&ETV(<1UPt z0;D-WTIkWJK@0^W$Hsylg;4x&z{!$fX#s^<62e*o#0(&OXB?{#D}b;7!fphs zejVcf8CF?}pja`6RhCjqnI5Ywl^9l;Ecz9z5LH`T{-tmU|W zgI<;sFk$Wf2)!&PTTaoVm*q@7dRh9_qgMxjbRy8JGmc*E>(EOL)7cua5=K!Hu@a(} zSj>0V3PgO7L@b1+k-Lj!WPD+{kg!2VG8^FNWf?~OKm=8U4G0*s1UQVrxOnta2wtX^ zOQ`KFms&sS_?BFamYGJw2aub}>n<2Zw>}^%Xlb0fxucZK!gAhLGf%Dg$dv~QXyAJB_gR%AQTCNa$LTy4eyaiUe^&FBodz^ zZ6oOcwluU%v^)TNaF75lIY6KWWerhMqK|e2VmY2!B|wme~Z5(+y- z09SW_C;`$93Ttdg7)&;%iuyK^;WnBkwM?~4gFQG;DBKkw&H!<#v$tHJlq=;@xj-Qm zhy)_2?>d~WQ*(o<@V8BkY5S_>H7Nc%p=}R4+5|E|*d?1M=3yCLea+)$V< zq_wQ-!_TP}j;iJv0g(r=W+8h3!9tH%28@dMfF!r;-{B zmpng5)rQN`~W9GPsUPR7#Q9-CeBZi)C^JUm|c9@KqWQ z_?Nr8!UJa9#X@&Ei4B-`gbjw0*#M^!W{3JLAfbAKN|>E+Dj5N(KT0X7+*N`x5v!4j|qD8LJnsRLJzPy<8}j=!0UVOxd7KCYJqOlc9JWBr%6DheGkg z2uPX;5Fda{ARtLBfQ%;+DP&TSKp~Xl8-iouuA9I?D3(ZIgf5jz#gGz34VDI^A2O7V z58j(O7D^vS41Ov=CIe&&0sc^|QV93>MKYmK2z$^#h8!}WTmS=UnHbW7TtILw3(J&{ zH5rP>2S1fL4T_&m41Oj+rUPV#9{kA_tm6f8v*1kzW-%0xkA4m_0E(YWjNT6*vjO6( z8@=v90-;zYsLO3jgo*}xsN|Cp|CGUeH58AJKA0H-#fK83p9_#V00|&WPol;;dL^+- zT@&f248`N4U&@Sv;+GMl4+O}3fGmKcC!bz*B1op!-!>Ua#|OWbxeiKSPYga7AVC0G zgb)6oT$|J^x&X}3EdPm$ncHF4VlXOZ#xmjGbpGDq00JNthXEv1N5xAq zDqf(cVxdT*Qfpv_R;cul@ZmB-%2&XxIc!-WhFK^TTwO@WXy7P81Mq$d!vY%SNsNk_ zNlmMmXYAd2)|R|ov%;?d6$jb7UU7sO>hQ*vcg%BoPL8bSWM(>s-iygO`Jy2wFEQZc zYmk$#GjIGWPQHx^i~2K8&SJtHIA{l5B@OdY15SQc&&kUHvXbEBRX8WZA{M-oMy8Rf znMmx@JXaS`)1VT=`I#vnNPebXvpd53dyP#q_K z#5s92!O34BCl^6ZE@pmZmOxG}WtK6^At!%lRxm4>Rm>mEpUmq2IZoaTkb{__;{dWA zAo~Ea9Uw;lvIZc#NW2r{WEPcWL`h&ZAvk#*K%xP%7GeWjdg#0p*1bp-3K0x`l@g&) zF2qRrzqJ|mK!;AOW~}D02Q3J6+60gd0NIE$6V?MIOd&}i1reQ)HCTly>+4Xk#h5}S zYCy{dO@`ui@WirU!JRS|lYpmf0NDbNtpqlU;A7#qMGCPDu8yQ)nSK=vX<49~oTPWU+7=0{2VgRxOAHBn`_%9Gc*1^<|!S=8CFCmu4jkOpG z$H(4@)fo!!LX3SUK;i+C(14W|gCK-M5AelRii;{Z7d zkYjM{|Hiw?Ez=lc{3mK=jfTDR!l;?$%^ItxW|j{|&CL$}M$Kmck_4&w6hKbusQDa5 z&41~sSu2+-6&hFtC3aWBWS?59;w!~6557hv7RX@atCa{mNT`|RN3g+ZGB#k%#i*IJ zpczc8kgbw~8d)W?uyiqA+ls)77h>Vc3d6AbEGZ+iA`BTh<#$GAMNxfN%UH|*4I{Hw zVZu`Xh>=;*thIVZW^K|lGHY8sBcBII2EoV|a7Iq6V`QyJD^Q8Va=uKWfMrT*p$A{# zuJqswWhyw|wF;$1Otwm9?ILWDPG$p~ky(kD4H`y81S7K!;*5L|XJpn9iYep1HKC6aZLb&7SGB4nLmC9}@5V77c(3hNvzm6i5C$I7<=l8Y((0YI(+t;`Uu4r5~F_%kcR+y)PR=_)TrlWQoG>1 zZ15>V@%ZRVS!GasIWhX@0C@_KXS&&k^Q%xS6vOPhP=HNBp2VJLIh)8ts3S8Ntl@}AXwoe87r_Q7&Eiw&C=K~f9-9Mzy8NXGaD-%BPbfy zm=F}rcEf=D3n@jjJq#(j=y!@{_oVu;d$D`}8;WN4!-RePBZ_7ZU=P$&G<%qyqS>SB zDY_IOwGPs6Tz#O56P^J`}icqGAM!R!!r z=>Hf!qZEKLprTPYM}Gp;44^cC!lHr-fHo&_P>i105$s6l0*eWH{sE9mfK=%KvN1=~ zht+@QyoPOtJ-`ua6?--8!5RXgY5`IWkQyAJ{)nC>jngyMWGEg-sLkvxQ2bULq0lA( zr2^E5z-N;6NgY3utZM3-NIzvL9v^)IdnXjX3m-j72PiZjO5igI2VgSD7iWLhVkjIR z`$6_0C>)lkVcX_tGk}@^v}t4HT&G{0f&VQzldB#d`ziKmC_af8drN?}0H~>M?)_gP zXZCq^I_yCPp#XD$wgPBtr~q;m*D)Z8U9hIcK4hqUeE8SdH=yvF#PFE_wE(CkVS1A3 zRVSTfdi`yap?KW*_t_7i_=m*UtpUmgsMY_EsQD%AT{a{DYj!R>uK_i`fxnAu;Q$#5 zQZ)S0ohw1@0BUOtP%c0@7&W79;5niuY{*%}AtHf9s*(v6@DLG9{=s~=2OvJ49sfHZ=&_+O@NH3(VA= z68(o`MFb~XQ84tj|09~TYGOr$S|D=ERwjCyw1SC9{FElz4xk-ynnXM5XcBE(N0SPH zhlf@S4`^xxT1b=dz$Pqw6lwTyOH88?VY|TsGR0U~5{hY0rWl+it!%6~#7g#eeGp4p zE1vH72ii%0{KLu~D}=OaXVu=SgH^`{+=vxoqg?>n8K8WCb|snC7@-;Qjrf!V_#ajZ z6g~?3F>dUw?Tp&Nx3~wHf_>XADhb5GMQ2d zcMdcjYOL-a?j|TT?oz%+AyRm_OSK*v5n0yAY7Aj#A(@@6#$yg(HPLDk)yLk=m7-cM z?~|c(0As9Nk78u+#!L_Xyl!e^MHW`m>SI$>QXiXI&BAOgC5=t3{0w4KRQ7vpYBi7Q zV>RDu0T!DUYyxQ8Y)8Wvbxs$A2~+%;(}h@tHgLMg22K}M?{wV&>O?r5GwyWCI;WG1 z-9<2Szxjsr1Q|o)gr!JBNISy)xbI$u~x|!XguT^EyP!` zgls`*^@OmqmdwspFLX|qW0h;#nat_j{?X~)=$)>Y-suW3Kj=;Fbl3rgU(Yw9eGHtg z2s&M{)z^RJbY+;Zet+h4->oVdI9;{g>8z>sPUi{GfrQfy!kw;vozr<}6=DfwGrrIR z%h?J%qDt6!W>Zv(>VtYHoW9zj9} z>z&S;i8-A$+uF+7+S=xKryB}T7?TeN=&=9wPG{{zNw9XtoX*iTmPHW zjRB|^bh=Rh9jSA=@tD(%&^w*hT_F^y;f9D>ErU#_g;nXW0$K@;trjSu)uH2&<>svi z5_TRfB zJDv43s*m+_>ly#X>8xjC!hHV7>8$;&=jffzdO-uHTU76K69GDzaJnhD)4?PPUb-NM zj-^p4pdH+?)0VI-3x<~-D!yDTc9*DCGL=G3#&p(;31dtmGX~*wE38-k;&l3Gqt5A8 z<4!lVfzz$iIo$^9jnq_S2`}8y9T}I1Fs4(hC47}sDfRFWYsE?_*|~k| zTZEnc$n0#LrE|Lb)(WDprHT-01f|t%jy2;G87vDCBa6BxtopHMpAbfij9K8w&_N=8lK2l z2GFI@(G~+VQg;~&x*8_sqA*9(U8W5Vs=?N;dWdLOeHj7|F$PmRK;_>47FAERg}ZQ4WpvIyP08fP=!#s`X{ zF9PTqKtKG4_te--hT^c}S6^+W*-WoD&1?$W2)hVGpJUnp(Dl$XYXKUKn`Wa)xPQH6 zgdTE4}60wI;Bvp#VS_N6fq)iZEnRR4NXA??T=F%TsQ-h_O zD3s~c_BKl?kv35}EiJcMVYAX^mCfn~{@1Wr9?P%L8G!Bw&`p3o8qj*J#GgmyeJIa0?^I49%D?x7uM@hp%4nR8Yx^BOC>t(!K(s1 zU}{R>AropfGO-$76hJn^_Y!*CN~T8wybc*%qWb7&_*6G+h8z7uUhV;Qy${sjafn_g z0h)}>=^g(mn`3hZDkoXz|0y=-^mJ=;9;4ePC{z&q7yjTVuoIvOP(^V7jn&cZE)(N$ z0BNW$o2ga9gJc>tA6}&($D%51qY>7is1zElNCht!(JIIQ-sU!;qj)kM+1$nEn#}{7 zhc=IhY^E)d&1AuIGJ#L)vY9*JJraGc?uR>q|DZl1!(#Ii)7$PpqClHmn>?ruBCTnY zucttp5A_td7ohtI3QWW)a8DftN+lY(#vSgxDit0u?$nA!d<9Hq^4&Es)#a{|NR%qF zTRv>y_91owAi9rCL&Pkquz~qrd=~wtm^uplfm7fCNP$pA&<$%TksJ!*8erMUkSCUIm?8*&VjI7&`8JtlFSb(j=QfOZ`wr2#Y*Vp0k~ z&+0Jg0>q?v47Tye#2s#nNi}ett$}66@a8Uw7JikAQp)#`X<@7)7O90=GECz1Aw2FJ zna6QFF-+nN;tb{tftY0D(RFWNLri*tVN&b~zUi=fOsWf0e!GN|GXf3=uYy3~0RsY> zI9?burIRiNIAh@_eoJ~~{Js?6Or-j7CUGWXkxHY-`3M@}OojdrgPjkU%!_{nhn!iQ z*?KtS1nA+Av!EUhF9Y-{0f*OcIJ{H`hY$i(F#6Z<-KBEKtZ+)h8`WT}0?Xd8qGT~V zuu66pCnuaR&J|MQEY=w(inENf+}^Eul4j@4jBp(;PBAv~>36>r8bBV=A`yyY;$P|&6|h56i9jNT=gYTk2;d0{0kkVTS}4KnfZc>tSF0+M%9KKhP$?D2#gKWGcqJiTL}S=y*a3X>_c?G= zo>R9ep9jz!fab!{W2Y2J)QAyeV}_|CPtuPW%EuM(l9LVP=MXgsZvpxmpl@&mIFQV+ zIvFH0>~EV4#pA<&$0>l~-xD|=ihzD1nk2H;!X z0DLR!!M6~gp9%2&f`c!-8VJvUYGE*@hOof*5M#G<$Tbj#1sZrmibe!ykxVUA3dxv} zYeazWCo=HGV^OX#*W{O2R8NQm)NrJpql}-7|>}XlK|Vn z=eFV6Qxdpsi72fUpkD!6Ld-!0JiG z8Gg>N2l)8ixbSE@7ancL3dYe|fK~&vVLhHqArM01gCHk?_o@gmoU21%?8Li3h!ydR z(iS7x(T2+EXX5OFdmbTngwq%_>`e|eDqVf@Mt@CIx+f|fZhVo8y4h|PcR%~4JR08 zna0`-dw^Si4i}zo=guV*U=HZ5039pHYebWEBtv4Fx+W6+3;x?p$J}7pwGeE%#0}$y z>z7O1NNl-8d;RNjiOvRemNB4P0=fmZT%vQ}a;aLsT!IBSY7h9s7r^Bv+#Qoi;XNBl zc<-@TqlKAVnTJ3mB}sE}*WsiJ`8m>{faOuc>$bH0p45|7F_bK-or0N&km)vY_4mX#Z$9?rbM%8papsO&A zO98zTpgRM)5YRP%-VV@}B<`xC>U{1y=o1AvRnt2HdV4_cP*2qgC3e*mye~km5J?rk zz~!Gc8H&g8s)!4}1%eB&Q^cr>-WAY01A3Qwsusf&U2=Hi7QDOwvZAuVf(XXx@GdTy zK!~0Eff4&ZH5tms(W;UQ&(3pUvQG!s0zh{FbVnSmbSn~gQvzIw!5Jl$$YI%OLq3#2 zsusc!MyiksrSQ`222^SADMRtP;q#jCXp{sVLJVI5=psNDlQYQ2V`;>N5C6eWHK3KPNDFZrHnzFVGnc);I-hvT1Q?>LIDaumjSw*fNK&ZW0;Jy zwV`e5@S5~vhVpR@FnKH}AEK{r0yqJBH$d-B%s+T079J}UDd1^$8QdZJHB>a1e|6$v zR^<0tOLh$zK72b~8z|nM7`_{zy8yZ?9DW_|kt-SJL~`TcZHAv~OaWbZU11OSgaXun z?hfc4ItA#S1P}9*Of$U6V47hp+enk4cw7Ne9!w$fA`;Wo zHIe9F_}}Q7=L);#hS4?8o#&yaYn~RPYh)i}EBG(`(e1d<`vZDE$kKfPy|<38Jz;?Z zRjl7~(P&lhegs%C4zHDi%pij$n@V`uB|Lg9mq=9DwFy$Psv_PHf*JafF#~S|#@D>j zJg@(m0&*U9_auG5A5kW6G7sDQBz9VO4ep-g)!#iy9|Y(_2+ACaQzopI!dJIKh;cGl z$-|d>Xkm?`y9i$BEs|^bGKGgg4a==O1QN2cI^IG;F@wnzgHt9ij2B+Fy8W%7o}f%# zgl=_9AEqxh;4Q`WS$NBM%Xuq!D;vnALSE$m?LnjiSEx->~k>>=>7F=3Pb%<1xY@JM#O)4kKj zsl1Q%aq1L6pGG*{blmAC*EyZc1AeiY2G&=>L@>N`7k(`YEUSa=r&LO{QZ2l^NeFkh zXNXA+Qc4(PDw#nD$E)Pk-3s)(LFyduC+>JN^p0ms!5q)l$hL_s%@+CH@n!+~OhESq z^x6M!Ii6*MuROxO9&HVEDf|k&Na9P6HdD5siz$}q66|Y_(50A5*}_95w(Tj_wjFFc z+IB+MpwXBMV#c<0v=vY|*wGN|N9T0&0evo@`vdwMKo11eNq{;L`Wv9n19W&97d$#* z49UE$3~uLZ;KdSrcv1)M-YA6dd+oGx-8WbWYl{mJT4Zw5=<2J+`g8 zt%t4J-mS+5-RY%pu8FN5m@(M_oeg8#?hADR2Sday|excEEiJ-vQtp~XKW){*>*O+ z&>?zh{TE7_8L20|x2peIN@HNG4NvS#i+8f>hWEg2Su57UlH#XNpPKPDn(mK=j|>T( z>R8vk0V~}`O}|+@zQg5f*B%WUc;Gmc@Zjl`@HL+J7n_?6G;Z6jeRyWu%h!55OpGZR zxBR9g|74#4dweLys8OD9oOrp3$%Xejst!9EJ+6}3RxY(&yLIc+vxDg?pPdM~cIV=* zT}$WY_ZWTXQPAx?mB$+H(?e6DzkPn*zQdabZFZhId^kCI;*&4Vh4PtRCuUxGz4umZ z|NXq!!5fNuP?&BpJBH1Ae#)Usm)z4+JVQfO717(YJ&hN4Fd90)`^>(VJiEP$Us$_& z?UHUy zeYND!tJ3Hk>9)QLT#Jppi{~8Yov%qRJ2hnC>dBQq`&?UgM$>n0S>}eLynxCpfw68+ zKhLi%x;8d$(bu5@lZB&QgEq^*54$t%(VW})TUK=|xczV=!&j8br4{ZUJ308M>EC-eg13jt>LU4*FzTMhCZHVpJq}kn($cc zn0oPhX!!^FU!#(W+b^%W)MJig%4;hQh)@5~rk!%6!+@r+Y0HKE8Es?;M)l+Kn3ni(=21 zawWxO0ge*Ur`co9&CE{Xc+Rv7{)!arbb9mM)zc=Z>v^=xp@Z-4j2XQS04RY@}lc`rthJ`BWWL(E`PIo_bi7kg_k^C z!^&4L7_j!tlG}Z`ZuFLusyE?l*0)m+9M-n=ytH}~vmyLaE?IYwSK6|V-aj8E-; z^1$QJ1+~r#yd*)4WfzZ%LysOl>{M|3!SQX|*9X7IZh1YX;@-*Bvni{(&$_?Zf4KMj zR*5M=M^jL*f{$Gs&;4BAthVTuZ*EZ0rTg~!mI49G&_6c6&`Xsk*$3 zc0RYD`}a@c$#-f>FLd%8GIZ!y`-sHlmtNg3*G@Wd^5mUvA$zX)d|mZmVhQ7YSY{Jy zaBPmi|7B%C-0BZC#id8J?Xyq!DF_W&G-b*phY_dLcP8Jp%(|Lh6DKcAo*=sapud%D zZq82xS)#T0EQ_&N)jNPP`6PSG)al-ze;_@s<*(k|1b@dvX8@~JG6J;L|qcjxqR%vSO5Hci(S>r9`sl) zYWn5~JK!3Bga4$LrFo2nX&obZ;mLvh>8M~fbKI<2rC@oCKI$)9rrYO8%8ZI3-SKR=&2E+RR=uS=3|?(B?#A>*sA6t=h+ zSUG0Vqx}7GqMtcY+$G1R_FvLdo%hbVy&w1Fg4~*-&^&ZOUw-QkKr$_kwG=QWjG+xRtW&%XaT@U)Zm z;h>#tTMFm)+vRUip7Vg)<(Ugy%qGRU51WjBd%dDt%~QMSvL>Pyg{=>N3%nXP_x0Vg zwGNEwfw3;f3k$|hdF?s)-R2wS9oD4J&p-Ic$9Jh@spI*YF9)WKWo+8M#Q%xc@+xcJ zbJj%+*3@@*YUaIsH2mg)zVSKEJJT;`f4%;2zhqI~rUB}mQ7vHgD&oOOk z*?|tx6<@dHzBMZE9GT-D`r;dB$F+o2T|%F&s9nREGxwV5=lmi2yt6+xix2xUGTLP> z@5~fcNtUuU_1oh`qmyP2K4lc6TptsaKIzu*^FLm7NDiO9Rbbi{^+|Sh4gPVulV{(k z8@=wWkl7o92cFJLqQ70}GHYvV}*_SFTB^xmcPtbjbb58+uTpRV=T! z@c~;!iQmpw(^uUNxwn4OwdO7<{R)TWJZ;|X)z7CbVpDG$Pudf3y17fx(bS)<&t-qT z^CNy)+K&FOZVi4o)v~yH`3v^G(KYU!I(B?{Jb>vk%CASj8>XZz%UNn6zwX?!F9_Q+ zxkJg#tFMJ6LYCu`QEtIW%2yQ=(rc^4sZaa|0jnAfTbelhlqPdad}@45jQmSg%+ei- z*0sAjoQ-H7D-M=}qO+TeS(^zpeb!%JE7Mz8(rMbSb^$;B>bk0lI%U#zh%f^y{4 z>KIvV<@cAhKT53cOsKf78jp0(x^tWH035V&LSvfz_+I$@?1sc1z}mlf*~Z~kj#DO2 z^z#3pS(}x4OWc1FqdKhijbq@sgw~!DL+PDp#};0wEJ!@@)66zn;sOFy;tEjH8bA;3n_y zSGeOzZm8#xl6#*zx9+lf`XoQ8lRV^Lw^dwemTUE8WQ%vZo(^r}1IsRq{*vO!YX9w1 z_V;(^cwN0tl;ux}PkH^^WPF;NH5wYq9&K-MrxypImD<7p1-3 zb?@or?gx_hs6WfvZrL+OZ6D5D>$mLQj_da)b&<_}zUyqCldWft`%to}|NdrAtfz>* zn&^(@74_nhpi z78OQpQQ+NOSNiy`d!v1NVpezgJNMXykJ0ttQkzJEs4|iKU-xWn!6P41`oR-&f z+0=cdJ%qJASnJ=0o(P<{N>Tmt#+e-H$BVb}J^Ric6XA3!q+rLqs@w7B$CPCih25zb ze__YS2k~1Ye(tXt9J#OHb+bEB&An!wm(3h=|C4xR%IxEZ5)((*9h>-}Y0WIZ8%tIt zFXOprU&SrY^gaJW< zRvls~+$Mc8cZ9u@Ls0e%{1Cwn`B5Dm)sojLN(*L8Dk&{(wWO+i3a{(7@7L19GJn30 zed2F@^U8qG50B0i^Q*oca?BfF^L3H0&r`?qKf8T=b+tIpc>#lAdGVU-i6gbi$%^33 zPSW!6SNcAR(H>~N>(0Z~nii>3)a>;+Mr}fCW=*c>xq^DAneixXyRweK%$9zw=FM1unwBscZQuVNtEj^XH#gbvyv(4SJgL^FOu%cv-$%LIBRPD-wSHxMYuZmH; zT;3t@%f^1AlMXC7`=RM{>xz`+Y0Kge)iwY0+8YC2u9(_$$uc*Jsc@XY_}Yf<-=?pz zNzwM(Kd;|-P5wb?;p4w@J9hp$D}L+%;|@V@Tt4mkD<%Bs%072hUmfFe-Xa@VFAu zsbIkcH-5_(9garHTE_)njfiORK3VGl?495m5y zep|~<#^H3^!cSx@`FUpB$upmy-a9+tTFmUN;l3`5d%1qQ z8!~)#eA^?_{TYnsNz+z$F+-esrB~-hmyB__mF#jhid~{?6a3+w_0a;}f#i0O+7HaG zdE+RaonDDbK~k^UIFu7tH}Lw5CN^&ef#(l}5)4GZ*AA zC%HB)l+V6-`}Wjzu}hL>FDQTA?v@pFz9tauto%&d4jy>2g-xsVejn0G&qsZIi3S)s z!pXR;<;z9%*Wx3opI&>q*7lx@xNbGs;A;`n@#VZ9nYM0zE!{^i454lMdbLbBYWJvZ zslm?i_GXPe%6?K{Z}-dt$GuH6x~^J7JE?2`)< zEFDJ8`S!j~QR;U)uVu#DU4zDjg}!9;QiiqN8q7|8d&svo>Jkvd&Z}v+tccR#jrryD zj_KbXpPRBO#mvrbEg1B9L+zn7d4=tV-1gxaS69c34gJjD5mM7>IsK*cf|n)P%=o!e zbMIXLB%Aqsm8+9{U2~I#AJ^7UYrR9u=S8&*QM9Rz=7>g|jKA?@?6qpYR>dQ7d$@KT zd8?+nSy;g2>YrD;WR;GaS#jLXf}7g(VU$Nw%OhHZQxKG}u0#A~&gStI!)^`kSE{0n z^$$Gu!+Gp`*W$bHoY2^hs76r3<_AB`1bMM`Ljm5mRH!n_RR|qeLC;z0sFHB zyU!$TFJF*7U+iGjwmhZgUH5S#u8e-W?ppliGw)_NI^T-F^>h884gQ%qKacGAR@O|O z3nan^sb`;gv?{OIkY(H9!lh{E1C_Hrf8Tjv{8n2E&n=K~zB;FeV74j8A9bM$1#kPo z2w+jj8neUsue%(%lKUVly=%HtUg@%6uT(dH3x>Iah80vH>C#NU=4Jeey7=7>Sd&9&*NwI zoN7M(PI%XKA=UGqyv{W0;jl1=>Tf$S^76GN>nAO<@~(Kbf2{v^)uHD*L;m6qb!f7* z?D9tX*Kz4TYICppwo@aMIG&PYj^Fv#fVFt<#b+FpH_yxxaZV)U?Rhqv4E2-ix7jj!G! zzD>*~YSQksKi|xgEo^Rdx5(s)`Fr;V_wVN&F8)^NIL0}&wY-|OeB)!~+N?2(6v4Lf z+b0}NG1?Yee7dP)|2e8qwOh-rW#i|stvtBY_dx!EecNn{cQ3Ht=wdV=Ew58%$cxIo$U>+7 zJKwssyQnUHI;5*=cka$$-@?aALArZ)Q@LniT9)Wb#F%s6%Dz0>J?2HyM+?;Nfph8G z-L|9ej&0-D(zi|UkV~B^UN&>=(Ub1A%J*C)8hFf3alHUo4Ih`2-fX{1`Qa=fYp?JD}|g%4pXgw;#+tTk7&!NbPa%UU%B~eE;jl{fD(RI`iW52$!X~_pV>M zb)fmDo#N1+D3kBLy1(-eqvJ^(`<6tu>mNSa@s!>8LcjmA!KW>$>Y3DJ9A>z zty|hV(=Gpo`89jNkAmFEUq5a6{Ni+Em$s7aP6-ynj0UjZGarU59lH8X6}rOTYOiQ2 z`r_{UK38oY2R${p_NqmTcvkS4SAF`#erB%UGRB#^-mepLeWHoH7h)M0{ATr<-cA9J zK6t}*@Q>whj=qw-j9IO{XD9ngqrbTHV%LJKFMi=$nq>qozs0zamH6|^kNCIeB1UkoBMN~X94=wna8~0Za{bDwK=r%jfY2CGNZ&W)!JdYT5q2g7q z7INFfftB-2$Bs*F9^r5MQ9Q^@5NGM>Vt<#h)?!4MU%7)7Z**e?02&}drp~K z>R*0?JwraSy*F&!x-6oiv)g8?j`ITdzVo*~a)LVq4QRpy-IuKErCqTn*dcl1*9xtB zszvRiBVl$lzgG4GTc7vO>h?y`w!cMr72-9e_I5QhNqKl~}l7-E8;^dWHwI=97hEu#=?1V$rg;_>Vs9ir? zOk29H_lTV%FLw)es=T<N6elNL zn20V}#Pf6DXaVSa0y}9Le3+|Nmp|9iuagnzq5%wr$(CZQJUk zW7{3uPC9ndv2EMv*v8!b&hvinH*3w$nOXBUxz{;$_NiTU)pb?v`J_vW1I+8rfd9|Ibp z!Yl|>*1`PTJsg}l#D*o~KuSE>#eAm)c+}TpUP2!{nG`rdDuP?BGU!&U5Ar1$jaROU z%|qlHQhI`sklM$3uS>6~LuMoH8}P7jAh>3!7g~=nVZMZ2P(Rqy*Uz|Sb(T&-I?v@+ zMMt0K{=4`0JeOXk_${EwgLnsA$0SSxPklcwy_*FBZ>({$;uxKt0uERNACiP~bVEi) zK7RY@O;0Al0`w}KyOzQjvj8Pbex6HfFfcZltiHJ+uTT@UH}FCh0-yNni1(8_DFyk( zx?g<*&pS(%mWVef#aBzo%9TOjHHvS zd+)6V^Ku@lL+1;-7DrOu4jBWG=+Uz$w_d9UdA_&ke6&Y7y=zZxrdoC!i`n1rx0tUr zv&px~J?GuwKU}b({h_AfPpM*qfVA3ntZ(x-goe4Nj0a8!Fd2k?OLI*@)q2VsPmSYJ zGRJw8o1s1b62XGAo?MM|vhN#dVLIM#1U6i(?fh!lKY#vB%MeO~Mx*Z8fW1x3=X1;N zvObFZ65Mdoj%gU`D))n~`*j*JPtF@{u4X}z``kx9FkfRI^nDKUdI0Op6;1UzFn2NI z(MF=*j|d0`kprI6YE#E4Ud^ZfZH}0o80;(*Xj6};DHx@W{iC(l(d}}b-aUtT6)8Mu3X%?3~c(Mu)WugEGknC|I$W=H!;@jFVB=t}XU>2rO3`ZWE|7c8yq)K`!JnmmTXxNw(mWkzZ z>Df>?5dZn78Bu^$ssAzK>;w3(7-+V3Wt0?a=dxr9vHvJcY+!YXyFsDRpEsk;J# zRCg%_(f>;pBLXAA0#02{^80UN{@El(1(3Z+9tP*?p#MJ?)c$KtQVMMUuND@vAp6`| zo&Ik|0@S_#u?^|}C3WxrVPgOysonpb+_Lau{o;XR85 z$d@0Y`MRw&l8AV#C9)?q`aG?+E6Wb8jsR~vU$zHu#5v#B{U0AbuC1DSZq_!+uC$?{Ax_{+?Pm!U zp8EweC?tZ=QGaN(M%9O6y{4T)Hq*96BRBr9)*W9%HI+cX1Be6zDQC>?%1IJ~b&?p> zYYpprKdNi$Tc=u^?CTCYYHQUriv_|m{UW&+s536J})&tEDJ1DvL&rteS2UUVP% zS-^h}&4+qG-<}WHWz*<2FAC)W`Zg3Wh-+>PF;{M%XsF-1m3F68+s zT!bcoV^FOY=W|FYDr%yl5l05)^E#V{A-z~$b%qn%o-kxNea3FMUm$(v$ET*QH`}h9 z59@CLl9N-d_jR|+<)6noMPp4MNIJp7PQBVlI_*E%mCbMXu8Y|{C*$vX=0LQkrY0gH zwFdkvRoayp=b8f{La0mL6=48x35pf+ur_yg*2&>K%cdmAy4z6P>3M#_O`A`xA=t{ut{xcDb&{ z*g3rJiE%Drhm0m1S&H1AZJh?n5U4yyhsfn(;Vvhim8-a`@>({jblP5@@SH!QwVa*j z;a3bP5s)=N4VrD5xAuBhLv+Mrk}x3<3CL=(SzfGOOQ{e~N19m3$;oj!9Z*u#08Ijc z@x(|BY7jd)J3hB-D~3L9&pEBZ9c1K`W5jJwnU#lGY7}6ZKp@%~8EN`n&=epiDIM2c zh6Nk(iZ?6RtUKSkq>H^!?4I*tuQh9p-y!-?>;Q$V0bpwwFnGA=k)g}iag`J?(v3Wp zSFYz1__jUa*g<&OfK4w`cy(&0E|2ROlp`)X)Ce4Q%=naU%hgsZVyJ0TIhzSI^(E`P}}yWi$vp`oF9^ye5vh~$ujkdP$yowx+w zMs3OJux!lD0g8ivAE&2iz3j{UuZR5)SjRYIO8DT9uTMw~+jg&r8W002Ix}P8HqImz zRPhsIcB8h5o508G+J_JH<&scX%mYLdrbB%G2ylxD|H8fb%$h^*3OPU+CKe*nE0?Qa zNC8F~2+M(jlx~}gA@shiAA#G;YXl(*vFLnVr{&z?^6U-pV-)yitH%z6L+?ige!1`G z$1n}n|GQftDgi+qRIl4=O`n$ceGQVUHk=h}J-XYcm&SDeyv9c+v&~m-PQVJDq)~JD zG!cic0lNLi9#_--hd(AaPA`0x5~=-qr{~hyQp7?(MQw8Q4?$cHUVJVOB?CqCf14j0 zWKYC=m$^*P(r5MY?-s5Dn`v#=S-WNK+fmuIuq^~UUceh5mYxR9%RFI00nlU=uq z(}SH7j$c4PfZ)?{y;EGFpx>q!YqjA>j(MTk7V}0nFifdeh!7N;Y9^IIH?Rw4#?XW4 zM+bp+8rV<3))0vkY6CM(OHEy}y{l(t&S!t2WuQ?|kk)8AvO9j_y%r}>9Aa1}1M3G4 zY+=t#`GkDJ#fux*3vd9vp3c_bHo9?k21=SLcbS$DjA)baXz3Ik^bS_Zw|LBCe}D4k z#}EPE@w{jE6cv93pu_D>&*(xG%SOu?0{5*SxR@^=6SZiG@Pu`RqV<1A#CGk#S|G3H zTNU%fqtk9`yq4RB=yWc|%(3e;H~Xm9JXhD$a(Yp9jK~b<*Fd4DD==rp9~5?{**$L47X#H~YFb`YgO56p zV8;TK`kng|Mx`eEmjHD9D0x8&lDl={X;~%g8ed_%PAT+8tAy~Q-f#&e>|9+$VY6)% z;OIc*f9WQ6P;vl{PaqdgNP z>{(2z;az^vkxPWjjlEO8LR|qk8bF(v5EZhOT&tlNCs@je6W$3Ul!L>9QZ7A@Mv}16 z^>&vJ!|-E*RwfZe*ipe6Wr?k-5OA5%w2?#%moy!E2+Oj67?~Oo%&U;SLigY0#ut~al{oK_iW!tT3H5M_=0 z9+x;z>DMg=L^j{HIK~6m!__*10-G{XG|h?IaAbc?92raX%P9{`DSp0sftQrnog5ZmOuZv9YmjefN3IKZK>= z>%`D+iuE9e&%`5dyNfM+oOZyh7Yi;%#wl7j@Vy%@6@yBt+^i0h$;6Wyjca8O+gzh6 z{}BcV`V%T}Sd2)ln?+O4D{}e|*ftOq9aVOZ(H@{x%-O|-I4L6|Qt}>pgfNZf2;+WP zX0hje``!ELWfYPzq(TTP1S>F3;Paw_l3+ymANEUJxh+ZVj0H|$87&Oy8a;WsukEpp z>bw8fK18aB9hh#MUWha`Xc`e@sXvb=;pzD*N$BskQO#+5Ezh~lWPLZ4X;KcC1bn~O zCj}N#pUK%@>#Wl(Mm}>>iN&{R-iy}Z_BSTpu4*%+%S>NING$6g$bkygfY=6lJYsJ5 zY@gwK?r$$*%>0^knH3?`LGh1$1@xOvbI3Wu;^@tH~Ned{GL?( z7N!M7uTq#XW-*G14>yyPlvK=SLdcqRv>w(Jr3KxBL{Nyue-~*^C z!=Alp#-8qv2HDxeR!0M`;F=phb1u-cNZF!=SojWcrL-A0HpJ=S9aK0DocZxtPD&`eQcRzRLz)o`_`i6U@N>-rmed*o{~0 zyTx|HZ4y1r8Ub2a3X$(+blvrw{dt_$aylEFX24eHXilknMOXV|wi7yWbSZi~0K4;b znU}HahAz|4Whtd+DqUMouh8@7H$>GMIt?xha&b7an#AFgI-%8GA$f$+?xU1c5k@}F zKWM@XBFxDo%$%E?ZRVsw=<@=-NDmQ83}MW6OM%$<902^;by?!|574~;#HJc-USRDD z504fTwK^}KCx1gdx1l8o54d%Qjc!nBYfnlk(Xvze5; zJ}IFPEV~@@8em42ZxJ}0h7{T_Sn}eZbO0M>#d;ULcYkE^f~b2grPJ2bz6Q-*qu$Cm z{at#9o3n;2K?HGH5%+P7zOd7qQQ|p1!MxaPcliv9 zee9y{x0GN*0bCaV2m*v=;pKwk2&|lNB08Q95@IQ=Jf_zyZ3s$KN1iet)uf?9h(WY| z35|%8!a>T3lKgAvCBj33`V&~uCbc0{lgoEEQcfGYc*-XB^pli79`667bN)lWq+V#) z2lG7ie0^Dd^}qsDr8*D}#ev;Rr=9N`(i!nR`CeUL9h)=kGTRebag8p99GjmmizvA3i8Bir#pvJg!TM+?MpcWfZw;v;eLg(J51xc zGAuWWD@hO7FMgbo2KTO4kDA6ed1#?yPMvLIfs3|Uo0~&i22pd%tPH>h0ZqO`I z$~)wB*W;k6D%_K_$^S4kNXSqjzs8-ooa5?GZCi^x1VII z8w$-0>Z)M7YL2dz)D-{oy#JUUp$8@+Z>~}EG2_tcJz%@JTB)j{+IgwIBI@zcX1fT0 zj^sn+T3Zq>nCd7X|82KW2nmu6O)z@G&s2{=8<_fA7|10|>gozf_Ad)`zM)F)sqf%<>x0@BW;J_ZzhBOFG{yIA+D;J5d|F1ik zkn^}zrK~=Vg5=nlI=893EbX9GLE3|Wot5t#^#E+E-O_r+@+Bd$s@7|%bIOMEI z`EipqJ|?F3%WOgpuiI~Mw7Vv0KpmA39Y74ZAtaC3QUH0?#ktC7alP#esLo3Z3t5x~ zO8uY$rNr`GvzDJX{afkR-3~_+KHm}8vd05Bn{0QUMiVxJK7y1$=1XkTbg$cvrdGCf z8h=kmH4cO!cHAVw+Hq_o#R)dM&loV1A+=4^{_(kqFA5FCky-nGKm2ZS+#oh9|2HNe z4;>hcB9cj&lZehGQ0?Rnwp5P!N!3ZFPa-hd)-x#{h5-}XtPG+gbr@7U1y zJ^M=<$9Mk9Aos5vw8DW3Ngm&P?iFR^|CXD{9p8Hy7EtRU*pC23^ky8+c?Am+QI`R5d&VKY2a7QF&On!w6$$xFBjWQ zcl;!$UJq)U9v=KYmQZz=J5 z-g=gJTfFT!SK05H5<1+k5-WqId7i5Z`}_S*=y$Qs5PK=7^I49Lj%vF;-nzTq8M-e_ zLiwtUSpBn_jkh2?QK;Ks0>^tT6^P}s0Gnr)?cX9&)6#ZaPJ0LSSsYL2a9&nej*m}d z4Qm%@BZ0sR=c_BwdPD*EmW(M2wArPaoDQxO?4J)ptA-{ACinOEMfNQPlnCJW9@m%8 zZkL-=ajP}H?+Y`0@N!3mvWy}whsP~zRp{u-pb+p<3JPIzS#I_$jV#Xq0+mM9Km#HQ z$R#eHrOWGC#O0+FiUxGwdAhvO@{=R_`Pv0YPwr%Ai`QMzf8Sbu0YwL&$K$l@It2m1 zK|GDr00^?bKP%g9?;Z~*74d4@W%XZ&d9QnJpWe^BeiH*Ch!H803Qh2s6UY7jz2fuP znks+me&PNh+EZKAwc}HsOT@?`CR?K8Z>Y&nZ-y_2?#ogIeIEXwI|C+}fB*i~jO+SS zSANr8mbcU6D0o(2g3W2Xxq3dVkaHI@afFh%%iQzv0_!6m63(b+TTs`2-rZsG#UuMN z4j{^c$y_g&#o548gtL*`&{!ylGCV-baZMu2#rgi%VUXpR11e*sOv z@tK^XMBoMX%9O|Dz_ueF1PsgfTSSaN%>p)A2tlBPR01T2%X`kV!)l$fz{YQyciY+? z&nHjJO|N(T?+@12hTk&XE0);ID+1MpmWIWYlL2o;3_f zBpB5-j=&zb2}7}SUhOjn;Eryu&Q;3<1#BM5{Q=nsQV=Qquw7Oq2Lx#-u=N&OP{yQK*B+8x3D7_e`wbXoG{6p`+gYTp)$JhgZZ|2F z-{4>psn+XuzAv5P_g+!KE*EVZA9(@#`OC^_%TMn4+dxjCqeh3R zKaG+(@S3=*(R23~8I7JNfW;(?@i#Azz8TqYyI%Vo)}Zt;?FgzG|v3&*knR{ z1sim*tZ+3hRhA;*f?_|(6{Pw7M@I}gaEFKwM%%#14&@F&+?`66?f&FK=5&bu<#&+6 z83JIXRd$NrdTmho)Z{tK$K-<^!hCz59SM{ zQ*RVyKqg}P$RP5dz&Gf{H-vt7(%2b)Z8dA7fBlj$*?huZ|7Jc%JXP?Sz8&2om0}IX zqfgUNGZLq4d%mL>ZHTpVJ%!dz~o;qie@AXefp$H70y;Git<^kU?Fv_ zY};HT-J8wtHEsw(EJ-t^w>?E6h^|L;*N%R6Jq~Z2#1goE%pP<+o(>PyJcj{^ZZ+wqTF>(u{+HBrR@{zj&uxKD5M7X_V4R^oWaVr zZeBQJP>f;epo=7j$conjLLQYF9gA?RxT^c}$4m7}#B}JsMm(A=U8Nsd%4?IH9p+D* zS!b*H6XWBl4Ej1cIxuEBEp}@qvT1{ZgN22Ko12>eK45>}1km294}jkQ4OLD`N{G8P zpXv9Xb#wO(lj?B%4IC)z<_W#aCUxGTB0YA>twRoNe2Og8@3)K2b^97OG0lylqTeN+ z1=Ul=Q8g?X{F;6#Ir=*cupPw{9NqM?Wg0! z2TxUr_j15P8-|Dw8c{nvVQr;GAw=je>n+{i9?}M$*Hi7^V?$!x%seHs!^%H6o>Ei3 zh02~Vuj5ygu&*Bu)^li_oI1Arzdzm2HJGF=M}~)=u6KGG8k~2!eTPE9Jy^_3%XZ^n zM@B~6?RG4B1Awz%kB>0WG1G?0B(8tMr6Z*Ct5*VoDHap%43zwmMLY^$cTr`boGaI# z^dPFXN|UXWANlM6{olSbtY>nPS>30xGqEc@XPMxoHGg!7_OBs3h&45V2=>8~Pks6& zP9E)9SV2`i`7$vxS5qZlVAsX1LQC5uH2Fo4HI1MWyyXv_j3d3JRX~9*J3MoE?l*pLFfn2EjW>U-W3ZUH**%Ywd62*ei z3n!ntW$hamqcb1_EN=s z=y7XOXUvWERvc6yf|9oL0wwQ%gQ@zvT&CpsGRXcGXx`XGV6x>@! zJGs_2tzo-}g@~k*A)^>SqszQhqAYNQrcCi(qMYd^fD-Q_z^YU;TP-i^=l zGOrD2M&MBc-4Z+QBzZ|7wwaJl8v-1ZZO`f;RwMSaGl zN=KBur?K}Jk5$4Ud#9caBTWU3oJ!w3d!wPq59g|>A_ykQ4Ap~%#VJquALf3>L&%Qa zSuXsG)+TRtKQ)vZt1D5Z)%Uzs04WEBN1eMpzYveX4|S5e5%qYgJyRrKb|xH z`%Hj2JVILSDjH5n?zMt>mCTMr3Kc9kh1AT!e3jCez?_mnG<(aF=86v?F})$`3wC^c zbNQO0xII-cOkhLH+B+N?)d6n42XMR+1}u-=ETeGd5sm#N#vO1v=kP&LH-cLKO75acW}=0qp&T`ypP$adRdNEEBxMA3V8P08njsv_JK>9p# zkKuQ*D=*S!yP|n#y&m^(vBufDLkL;T6%OSK2Y-D&8>UTwqoQc`26PJnqoNMvB7SHZ z82BBIBCqBeh4eFAF$e2cJF@`7iY6)g%lANo!GQH70Y5y!X5t@k$bl8IMW*%aVLf06JemOaj|W9 zDoUhQD=bWRErIi*F7;A&LU>Xq(oV+OsB6o9^~lxqexwZK*Zi@fw)}#)tAK`sIp&P^ z($VD*moF1m0oTfaoKg{O6w$i-unzbbueEU$OW)5#L&92hi5}ZY*`V%nbw-{Capq_E z@HEf+FlDK6&LfMQr;06;YMgGgc5_IC$|YBQ4=Pvq)al1N3P&2m}A^e14nK)UL|G}hl_FJQl;byCUCzEe1dvRz6C#Z;A30KUz5>5JdYqf zwWDaxh|a_d=Cxb8jB-{N>3T!0B>Tc@46=>bvLa*#c`m8fX*eqKBY_y`^}LCqjmVsi z)h7aWstmfk)*8(FZwAftb2C^i5rVS95b(!66{AzJLrV&rm3qUAcG))bAPTUv7m~@D zOJw0(P&KG#Zu19VYc>24{4=A#K7>_N<`=C>ZMo!8S^32Ag8NdAV+ZS8=&gx}KwD{K zeJbAOV;^wFYRLYYRw2-S_}JP3#^kv07_wrqL%9nAW1$bX@${{KRVq1Qf+ILUzO$H} zVVepjMZOZ|&mi4k9WQ|HVEr{50}STp!zp85-M}i6m?n`_5RoVyQ!PKl%r(`W#)&dv z9sI`pM5uRP3iS6jM}%O!r5*#%N8ST3S7*zzn=wRuDs7iFfF6q3xD+`}>YTUqwB5Gx zfPY6L1tzL9dnO!l=UTu;n@D4njOTz;L;^CmCjB(BUavQWWMi{kshJubJza{{Mm#t$ zMI;<|%tK=OHgpvIt%|5X`uZwCF21LH#VjcN7X;s1nil5$z?%7(PrnVxi`-J` zph>$9IG58K2#0C2P8&?Fb@46^B73))9g0>3>}lSkkq~W>1MX<1O~@4Mevp4rv67R9 z5@a6M(s;Zpbv$L6uc#LI{g7%<4WB%+8nwMFySjS7`iJ~;~eHq314 zjlR7K52=I>eM_rV)+V(UJyGpgEmw%B`wU)wMRTHTp`M<4U58WBukToqTn=O)7XNog z%AY*4@ZkIPn$C(BP9>Uw2AKHI1 zng+2CiqCgQ!AUIPv%()}nEOi!4)o{eN8eSa0P~7oPnOioL1)^?Ox5ihjnyDn^RrPR zJOLer9M^=Y!CaB>>`nK#iPlvP??_yjh0=RgR_dv9OXDw!NivL(CZZH3vEc_G`F53A zMeA)_Vs~0@?UCoqds*{Hl0v|OM5qNlH{Gy5tx-ZlfzfH)5Br|GplpDS4GwzvoEc-v z$tsOGb)X>jhACTb{c*M5Xc1>a?a%ajx_}OqH!vVb2GHADLLAlId3^hA!ZbqgsOb9U z!VJuvxaqIdslFd6q{vnv-U812@>8O5uRDWjdnHh315mMtL~v<1ow&tLWjf^Y$%EGY z3rP|RhJZ!B$-GSHGh))gM*+R2I>sg~VeGFkHkNT^w-^4C8njMd-m*b3B^7hn(;r9v z>P^Ihvo6LfK%*VP&9^D5LNrM_d3ymK9Ox>2gT;1u?dO)mTg@|S#29bZ&vKm+Fq3dH za)3d?L8he0EqITIIHx!nskP650${T%mlv2F;u1MaollX=CCYm?9G1pI zvaokpl+=cCeG_I@9Nh2HG60yb;J()|t||~JFpNiaaRQc4QlVq<>P|*^TfI&?ITmyL zV#pSOUZfOzvv-tFS4DkLJ9;VVqR4d;@^nG4EBUsMjekt zmza~Iz${EPl0V>Jw<65XHMUTVoTBQcEJ!p;<7}81^-|gm7A>Nvqrt9mNQe>JG#Xq@ z+;5}P%oWqSp$|l&sc}~x_gH(9H;*p>wqL`9`|Jk=E*}#8Gr3Vvhk?c?DBbaQ z*@g`r|J88BzYvE>hZK#ard}Toy2u1IBhkyT3b)9F%V8IgSgKm40D$GY5lgQ;i|tl8 zh=x!2jK1Tnl3)bSgIw}_F6~SmYqVl2OGW`6qx&1J9K`a~woc?GIYiWa)@_Lp@*)TL zRRj7a@w(K`YK(W4LQGild01|xTH7aDUp8ix$c%S?Je3Z+#Kki1QD&49618-wfWB>L z$l9=A@f&!^I4!dpnYM6ME8JK?_I^tRbaGO)6~*-54`Mc6IDD3(S zjcdU!bg&6Q9|n()R>}U>4D>QnLq!3*n?SVg{z}l~R2mtHmg%f~cpHS3&YO^m-RpOj z+fZGiB{#OLJVZGAx~!4;R%7X;ZOg&I>3r)|GX(-R(p6KA&rR&_c`7U_0_L2QzJR;;hm$6kvHP*^hPo-e^9ESX%3Gx2}6|onD{g;+$9|N`FnQgKlz2w+s;w}$H0hRCCh}$>eT%RPZ;|8_Bh^aie zHnU#=ev!$^q`F>)DHc4t!&U|sQLlA*(I?J9LU1AK zFa?C7;0laA!qKE6g=T+kE;c~~t9>?p=q<$?%`_^PykTFt$wa+m@h2+(h?cX%lc34iolN3Ebj{$QPD;NkZu*G#`YmXaz5` zO7Jzu$Az0<7B1jJ3Tb`kX8uQElMPjeViu+#lF~9VG*nbVJlGxsM6Lv*Q}M*2fcE9M zzy&xnp&z^7w9ZF;H`rRRG}Y9Xu?q9=Nc`@H)7}tu-}b z>Uwu5_()c~7v&{CkmRpH$?aZI{xj=0-#MZ928sGLNl%#%6PDR0u=${&{BN&bTJR-O zQv1Q3$Mnofwv39jNr&>!MS)J|{LYk;u-wjHnJhQt`}SV#l9wAe$BUFJHrzIx08xtlEEPe4O{yK;s1^VJA}ca_uQ zRtID^dvmmrRuR4UG^nwFV|n*fgsF+LtcN*?5g47pe6}bg=soH?2uDV>!i$j(U`&M< zov^|oRSEqX^tc*&nxUOywQA{O=3<(&!)5DuvRDju+2eQBZ*Vbq@HSYp7s4lr4vus^ z$(OvTWL(|Y52J|PfQd>2$}@+7GKhyE6#ITcS;Qb|se2&nW5Jjt@M|G*job)LlmXNm z6ZQO67+I4F@@}|ws3dNclPhl6Nn>tpox}MM+sQ<|i1Vpy)WOch$1go2)+Gkq8g)lF z&@@^GJ0(;&(UZ$Km%au#7e=(hk!VKAQ7nb1pJi(GElRz;c4!}xRRk%<&%}vjnfgrp zZ?V+ua1bE*;AhP_KZx|)fwi}>6_Gj*Vv#^#b)6vh1uV4x(#^~@kW*(8^WjFC>o3WC z>xHIIQ}{n&YhU3uf@Tq`CL^TtbU5|nqc1lVvyB#)m66&+zJK@EH2pY`sKYQz5Y|Ga zDTovH<0I$*Gmg*d4>IwbVd$VG?Y4hu#1^pVWVzk1+GA4!4Oozp{bEr_3b3TW0*8WE zd)VxW_buz+gYZsR#@Ez~eXq-&g;F4;WDDxvZQE{xwPbQ;BCVvuf^!L)Ghs?cP*n@) zOQz6lgffGzLb;LXUtx#k`_odlq1XRzlN zkKA_K7xNQz5;%8G|X~etfr8kl3 zygK0|$XO?omy<=N1BSMZ(07lZ)M2b-vNctc*UpSu)R+j6lK<=}pghamb3F{E1&y%1 zVb7JYnCZhTyDrZ9?Rm{}ltf!FLUA)R+cHv?QeRgm>KgbsgMe}4Hq8|enU9<@cx!8A zbTk?Tx85#RZlBbNJBpcup*_+I6__`dm69>XVN>Y~>9ujfZJN&mM!toD11RX0z=qNa zEu)wA>v-{h@%(9xU}B}F=;yrsjDqBc)!Wa8Xr>c|U}Hup`>}qLJi?1rOI1t}Ey5$< zU1f$;QKWz*lZoY$yXLv7laqxsBd1)?T$+ALrDd@B1jU&z^=j0HE`4eQ7L45MtP0fq zSV;~GweUhh0u4ujO!%1+h56eGy#QRUWtnFHTDUw}PN+d={5c|s0ydB%!Pxz?^9#F*pH{X)$Ddaw)QL zqB0TC_$sxrlY(1nxuwENVyc3VLA3rIh?(1!QmIRfbj-GTyB-5Zg*lz+*!_Z(0N^CN z$ydxMUyr4mLCQooVaflT24VheN z{{cIy9Ew+x~5}lK_x}Z?? zV}jDQg^zkBU+J>4_B0w?eBk2knHa|s0*N4cZT-KJ@No((^GI>z(#!{<%Nq^booiS9 z^nv@#0>i=`py5CUH5;;NnR22!=H_<>eMS$`F-Q}mQd1MK0dGuBjnI0ECSzr1CQdj{ z=+XWqO{V);Qj_C&_BZk|Y8Ef1(yX8b%z>&ZIBEZlTcC35e2isNnn%pq2(6 z$kMhxUYWfaY2?HqAjAG;ny+&Mb#T|Hx!IVetRtzMskAi75qx)}30bkU%D`wHI3@Ac z7WyU*7dN>f%Hv>#pzqYGY+>3EBDHD|6=+zqXkpb{1ICS!QiSp}1Bv}vMG44UM5Lkf z{bgaGJ6cXWx33@z+RGbzE!VUNG0}=b7VGpU@I?|B~H{^L*zZgzUwFD4Tsj+H3BI+59Fg^!UOM}9O2duf;D{O6* zSaE-#x#%VPI6|ezDlU@@50{qA_vNGTV3md?ka%P;McdUrn4KGM$UlvArps#UF|lm0 z%$P4FN*82tyW~p@y7J9h0?IP$!DZI{@898j#JqK`{pc~(f3XY%?P(5_nVFxDdpnT_ zZ0F@o*uc@l_a169(n`!#bm<0HZ?v6Vqi6gcG@0T#8C{aeM(WZrhY*h;#Nq8FU_d;S zFY9aV2zgIu`##!Uu(GCLu2c*(l+^}RG%mJX>wF>Mw}|ufHQe43243$nID|P=S@}!d zBTX_PJR0{6F~X9x;MC#YK_?QL-sp_PU`zvn-f@nzCEhe|*XT|dcwn+JgCW1ZMOH}u z45#Fe>4X5m$nla-Oh)6R3S}_rFr?WgnqxTRkkxBV;#l?+&kfWXk(nH07B5DKzBFm1 zCjyRyaMDGxj*TkJ~ycArk5Fz6MRjdoj zyMFnGnQFrp#>x?aZ?9^kk)R1hF#&~p;Av|qX|Tb_q`iflX23O7O(VlLc{_uHZKQUu zrN@t^(>(#wZ!(8w*_XyiaCtOUy1J3;Mhr%=6OhvN_vh z7~qO?#6?Yg94?eSV-{)!1B^o#ZKHSMoFeKekR`ITh>6||&yjhBbugf@&a2sY!sV?6 zeoFGV&9}+CZe!51BH&k{`t49fVIv0avVmOVjx7fpsg=qEE`;?-b_S}BsdP!JNgVv8 zp}!9q`s2w-7Xo%*43o9qL-pkvss3CX=&5Ia)({vli}|YNbE?B7-@wM$bp9lo7jECPs0#r;yYrJjaD?Bv8$YS!$#ol zUMeJ0GG>48sSW2B$WWQmE%VH1KbDtM5J4rUX%3HgH^D|BbS=>if^<@QGLmdm3>u|l zh^+~N#Wz+T6y(Or2B!>IsmZ+@rL}1LN2ib z(Ph8HbrWKF%ql9>T3b)5FTlUVS-+u>4@rtR9RmZwtRkMauQwS)-U}BKOLf@k4#yAz zT?$J9(}IFdFfxE5m@G~M&UGvB*$h?K2ToPClxO!X>jdffO;f&$|QEzd<9y% zLiz<}X+ULBMGY>X%N!OfE8~j#YKNr-Tm#Y4!9T{~S|LZSoY5OZ__AF`6mSd!QBjZG z0s4dOG*uV@WG<-;vD|>ILQXCq_3>#;A)kk&NCil-yst(^b^;X@nYQ3II@UDTGs-ZV zbj#c|RRUjS5qI;U^Mc=##qKNsR(h^Kn0=Ln8Ac)qljr@RYAJ&01pRoF#9D0AO;!!w z_@Gl*=GV!F4H0(CE|uz5uc8P5&s`m~zZnib=e zI6_(;ngji-bzNxTS=AzP7!?sTF(+#uEjDIj9J0)I_nG&&WM$YT#1G^u@om+n4DPvu zvSOBtqQ0qAwRkOmxQD11+XY5FWU89+g<=+X_cUauaUq^E*X1wYakXsdmc_*1!2)>fHVC1Rm4|x! z_1MtQDl>iTfz=jIGoKSHx5CtU7 zQAnVmH{>MRX+p)toJcE_^+1jvyZsuK;T6=(;IV3{FbyoZPcfC!6Kr0KG-4W9T95C0 zbm6jX&9{LA-<$=>M?5sLW(In$UA1UiH@3mvV&K69REzZcr$NmTIG)1M<3hIts@nEH zm@_r7ZKG-%b)q_%Qvh(HZK5}|m;fSM`@mirUYaL-6}9-5odA9?mRDfQoJsAlQ}`J7 zF`ac^7d&Jf3Z+y4Y>ABoWJtVZjCvj6FSFEi?OO&-p{l)oXGR7Y4l(yI3pv;_#cx}% zKvOyw!ioaMKo=JCoJ#%DE(uUR%qF3 zUb2qDDK&i4C>a(_O5IKD)U#9#P1>vu)22$%CRSy)h242`N1wKc6v~&$^>E$%^;mFf zdZKRlj6BZeAc4ooXfCSdfau7um4Ir56k{E2g0NU^;Yc!b=KeF{LTvPY_&^nJWFKqx zG;6zrRSQYbR5lgHoFYN@gEe!R%b|+;+{3y%fg}@^qbzvp^R@{r!v6!sKsvu?Lk2)? z)d=L}6(uDnc*~gAx=o9HdzI!Sn3%>kL>6Q-rVrcmJq83T!Sc|4NO`C^Q)_ zSYkJO6k7)yt_JaVhv8*_KSpR`%WE7~JY!@$21;%)p>R#s#oxQk!-j)x|9TNSflnr)$U z0f`Cz=dU=lx_~D;%iJ1QUWd?N38A;@>Poje-{H!4I`>vNc30ZBR#a^$t5{!N2^xgInWfAU2~IOC(SAZ~ zSxRLB%uLqQI=L$qNV2OMnn*{qw*)y2XDxV}#6Vli^er$CfVb2kE{gGBvkswiSF)Q8 zasONnh3bj~+<}&67D1IDp5ZuH*<57M7%@CCR^~o5SU>yPO~~vR%xH zmFY8TY(^}}dicF-J%lD+A~aCa!0?1cuwiIGJ~VvAN(yiBbd}96jEW$L_IKMPA16_u^4vf=NosOlkB$7we6vE^~rc(4Ay zoS-A`9}eoxNMz7L#D@*05*rPj3rs~8{1|QV^&U~ox0cE^J7k_`GXm&yIVrTVY zr#q)A?!wgS(~>Kr>pswhy5*p)*zRzpRd?Y4){D4+uEaz$=Hk(}1mfPVr84kY!2$Sg@8;4U(>?w7{mBsp&X)|A*2DAtB7<1P2-r8Yu|}yDZtV zX@Sgc5RfTAsUUeSGp#)Pg~4Kh#)%6bvix7pZ*UEHyUgUm{*_^ab7MgzkI}Hgl2B~u z8_w{-T-8ytN@6}Qj633D6uxzgZDOm;%d*olq5~afFAWLAXmnN@{_^aOFAo>Ivp;vA z-SKLE{MW^a*JmV*PKgDSV(gr?#K$`AjuHnP+!=Au`_(wOfVWu9l81|)w7>i0R7Nu8 z)>xN#hhR3YQkxWN7~J)k*a{tNwb&@LvE0f2&bMi{D|eJ?l7QscbW9jJ8_necVk~i0 zF0U#?H1s1Bh|>t!Wv>l5B9%0$j4dGUGVG>fZwujm!L4KRO;Oe!AJqmE0W3V(vXw@f zL>x0UIjJbW%d1AFA28w5nbg;<|gcrG%=lGV{U7k zb#ZpOz7@$E2*&FzCPoIbW30EdjhocE)mMjdU)p1%|{F;gx!C(w#l#w3-moQW! zMsk51*X|5?Ls8zAzZNDlvFS$vk3~#D=YtH|Ch7aw&^Y}VKyz-w4d%bBufgQqCGDLqaVNSlUlwnkOYU_8#^6i)&kDVGdO^cNBj zq+k#i%~K32gL<7ufo3cHN)c`i1A;lw;nqbi)BE{xzn8}1Q>=Y#^h51io|l;l#}WM@ z)pxJO1m>z%4c0jd)(~~NT|ed(PTO-}XGInEU67J^SBvzt8p9S&;;w@Sdv@%Y6d#W$ zTK^ne>N|2Bd5>0xhr(;7`2&Mt3p7;5BaVp$HwEFx?r@jYWJOFP@fd&bJyg2eCzUBE zDA=)M$F^Zk=9LSN(~#!Y9?UB>RJ(hOOGyG#SA44z#4-WLWkj1Uu) zZ#o=Kd^Oa$cjeQda*z=KO9uX$2f;Gh2wbSDQYr?JW+utn((nAgn#T%dC1S<#p~%w1 zmnAY?h&`HFpn~&6^*JwiMmmdAVbI6tD<1nn9Y)BAi+a{j%&^-$K=*mD!>t#V*`Ci$ zC~=z+lypn$?AzM5KtVmJdewMgE$G8X&nzW+lzDV!+Buo&FYP^uzwe4l|12$ku~XY~ zv(hEkTyyId*)@aFzL#tE2KWECz+A|JhJ(Pk!ve%DPR$D%cOX6>picuEWtkfSov;BP z2e`d44BXhkopICc9kjsZb_zcj`9z_H*}s4P)~#E2@7`Tj=1CERa`*0Rh3f8^12!C9 z;fMA`ehB}{rB#LL@h#MC6Qb+tE7cMPYUHeii_2?3YhYl)X9sjMfqKjt7!--rBH;2) zWgwK5m9|%vV+QrW*)_Sma%!ix zjYVGY*mk?{{BYSFaMp3)j}KR(G8HUpS5qa!g`g~9ghMhAT9XTTWuX4WHwrsCyTi3p zWCrR$O}L*{N$u4@5%$)^uy)3s|?#J_<|1eV7L?T-9#nq|1lXi^!Q zRw7`{9{jGvoy|y$+2nM(L2=|P$L~I=VZ9K5RxBn~Bf~H6#1?H$NQf^hQ|f5#WzKY4 zTW|S)>otHz6vkUnQqRPL(6AiAju^>%CMXJT^)&I}>ViH-df+#FZJ=-?F6#Mmj~R8n z@fuhRYQwGL${O;?ot@CSO-k1oYmIxgG>FZmMb~cFy0+W}(lE7iyUDGUA9%>C2%Kw| zppaSxmbGv+@L=SePtE)~#l`+`RF60I9eQ}%Zv4Bbxb)**UE0TLte$2ZSR;~nb3xO5zJ2>(NZPe)mr%p-E@NY3vDf8tLEy-dBQ096dnVqNQ0@p!LTBi5jnjhM z@&jF?j?&a~woGbwuw-|AV5o;ICtFSji#5f76^5sJbVQ!z z8@SA*){q;g4$oUtw4K@3!7Z42CI%4?!FE+~SK(Nk$N1^{82;QPu&0xIk)luOB~^@5 zRw^%X7Fo#KwHstMi~Fjg>u+Rs#=t6`S!>*CHRk4tJ4@ zi85%`G06#I*Kb=UeDUhXA$W2jJzta*Nj=erOf3%EhF{)9-UJp?=fJG*E!zehyj8aZw569e*9%$XOQ*Z zU>((HU+UjF3S?{Epg!X_Zu>p2@SN2fKkL=?lyrYGXt24s-O#c~#Klpm@{OzS*sRbu zLfx)oT@pRQVY@oM6jX-Y4{Y&~hQ<@RxoHXEe+}+R46>ON+NN|7Gu2VUASSL$mo6YN zty{Ooor5Obx^>&QaU*UgP?>)H`o+gLC?l{KgMS6&yvdAjrEVJ#cNulJR1-c3R3e7c z*Dp0SQIpE(FEi<@*Rb0!sb?hb8K`GUlcA*!hI&S57huZwrUGx)#HH?a!OU>Tedlku zHF5{x5iRF2U?)(MEdkd+zO%x$-xE01=?_^ zTWTF#gh0a!%vT0H#-L)8t(aPEW}guyDW>FthIqF~Um>xG%Qus0ss5*Ncj4yN$(_&+ z*ZqtcGhi^{S3mCwS1o@kAxx=HpFS;HwiHJ|IVUFvZog3B?A^N;%m%x9wH&zq;0htb z3nKH1&|xS9)SFyVG*k;HYVyhsXi^zyQ`s6Y#ys5=ebQ#6AmG#I8qe{JjMTim06XV} zAwJM^GxZEIVn}L$V5n!{wTg+Gk>p0pJwT8c*q_4?pAZj;odwBQ!B@A2a-?-~H~1rp zG^C~W!Y#S0DxDSH28J+9xW$OQc+#$3y&6;o-;lg=RcgjJvB_X1H~l|*Zvq|3ao%|X zg+g7Z!i@&H(FgkGA&P8@l1Pb%D2bG0$+9fjvc~IUcQw}Y?$};mGvjBE$1B_G^)1^w zyY|@Q*|FEME!&hv)=7$#MI9u?t3`@z9(^~u8{N2%0;&pCKNQpb zBdocSEmEpIVT3ZVaB@0#t+@rVwv?@C&!jBvnRL4V8c!0Pnl*PdE^nMV!35| zd8VWLfxbZ|onP7A|5F3KY)5VWODVnL#PD92*!ksxi&MfUTzUuW5W3t(R)QmX_3Pu^6(xx7m&s&`kA~gqGD3hp*ydXw3w} zYuam@fjEqry`2_M1rZXcrK6+cz<~p3!*q9B9)9@-&Ye34UP1r&`s=R;!KgZufLjvq zbusef3&BAn--y5$Nx7o<(yT`+B0d3lGYS&HF2QmzI``KQq|>(>wd1%mrmmfo8hqQniGu zAy9^|0DL2JIN??JqLQv}z!Gt-EF3?#XXjMD0B;7RpU=Pkx&~?i2Wb;sr;>#$EBvao zS|FU7!7~A3T_jCz2faR(XV#HKY^Ou=gjVqsiYHN!#kLy!BiLuJ=2=Cmw?(%%v z%Oi_DBgRcA>RRj>%UZkI4X0iNJ5TGjd3BkTr+n|~i`LU$GvOcu%+Xj|dDJ@iGm|gL zkFH#~f_MlWm-hDd`|rOW1w^uR#ClUv6h!cGQbhkFySSLmt*U>ii4+SAvXdTW%)R&C zTj=Tg!0{J3GY|ck-#oMr1jEJfW)@;q=8ND~ua7L%@>Jpl$>?d;Axt#{zN`WVID9LU zCcK%^d>*}-A9&%_uibiMyrpH0BuY{X)n2fr3KPKFW7)m_%rD$r#J3XCB@4~iM}zt$ zE`PSPU|TIE(lrXF%Bj7U?{JGp^Z62X?%b*47$U*=Flh+zd0@4KW{h+cpVo8FJttwl zF7isaEs|27pTy|DEcWup)F6L6tznwbX-ar}{<1rg7~JGIjLeP6YL3(!QZte5jP>+D zezBxCP?1P~zr|>DTpoTk9I3YIEeB|`U9|kZG%v&d=3Ez%deqn+)K@_=A$=vPkn>m)CeB)n}T^-P|e`XZ4)3OrA=ggE##oQTJ|JK8xuOnl1e zC6Y@}I9&7I{(k(&OympLE1~C0GEfndFg`Mvy&KB7Y{-l3EF!JZ1RiV`OXjgx7FE7lIO>T>Q zAzbGX29y+d_@ zDTfy-CvtQUr%7Y(ySTJYZmAsgY1HkL7a#UI$%rBlJiYYNOEWVwXvRGF;DeZ6qd5)Ar6CD66ldCOAX*=Iy>&AF4Lddduhf}C~NqoTG4RI z+XRF6Kt+3OMJg8Ogt`d4dKE+9npBt38%Wq@&*bC;W=j_}Z@C7pWe4cNmAUpaJ&A zpn<=AW&G#6s^F=+%XF|?0@lc{o5G>UzOL(V@8d4aO`TVgjCPzDeLBCi%4c&V1H@p< zO{9-#2_?{Ev=aygHT(;~!5d9qLYU$p#hz?m*OB&Uw_Z2uKuk8jkX~H%#tq^b>bkzQ zC8AQw=)p$j+|c zY2wmb$H4{r_ggyyE+F7krtGQ2yMJ{A10c{R4vWqT&>^g+bkosea)pdkSdS#!73*6g zC=U5vw=uN zsqRNxI>s^osJ1ZGGs(+5uOd}Iv0GFOfzGy`RHBVDF%Dt^QGUTSK}7}-1H52oh(Mp` zOsa5bD1t|-AP{$|EipAaH@}eSu$|o@`N4v!78#Ifpz49 zCUgY2pa39HMy*-pHL85~mC5P9x-$OlnK=|$dLpfF?MQuWu>baQcXkj5xj38%S0=rZ zg3PMn#9^V0i@*Dizx3x<#%~UX-jP~8ctLVlg_*9}fQy@wACzfrX=RN;Hu2fde%75+ zj{&IObI(1n*di?vA1EVMOO_u6??dD{7I9~4NH{2<;8-k<@7IZi5r^elI24YB+h8y} z@W2DACb!;t>rFS^ggbm4%5*1ofMXDL9zT9uQeut#&Ud~u-r6uXg{lJUANbD5H!%DI zmSyq_;26dw<3)L$x#5Nz;Ka~y#TTW9uq#mne$$)YBtl9uEaI*f*g(7zEwRS3R~*dKY&^~d*k`}GV@nU#$=uz{fTY8r>mrW0 zFdennGon2c{1_l~ez~@|fXN5As5dH$t6E}>s70|`$OS7U*_IFviX!3&z#3tJ8yT^f z{hS8Fs)Skfcfb2xlzBlRfR$Trxdq)s$rX!6TU#?~CPefP^ZWSe(+}*n_Kp8xPyg#8 ztq%SoL_jcVHYS;>zW^Gc9Pl@@yo^23XU0~=BO|%Re;S?O@1whR{LaC>t5S@B6ay#2 zdmaZb{L-oOzkGT8%ZFm>3~eDG(5F$r#a$^sC}X+RX=+AG^z7NQ{JJx%7;J!VyX`ic z^HvgAs7ES*sxOK)O`)Zhgy*r5s7C-qnwvt;KKtyeufEDVe%ssL*4x*kWJ8LY^|qVQ zSzAPUqTKV-SuEb2vA)ZpvmC)iVh;4_ithjvqehOrQ?kRpBPGXvu2S2|Ar3RrtA8~; z+!5_=k6G#kbP@25Z3J%d=p}B^T;r<)%;~~c5-%4mMc}F~K3AZO`e>`lt0x|tzq})9 zZFC$LFFn!{+v-9dt2}Aedw#p|Yz4?f}L|5{bIZQ%^kwj!__k?KBE8Z-4vS#k2xy zeO+CO0!tVxa?O$(0tZ|S9T(=Q$Ey;T`Gb7}$hO~b>(m@=VGkC8U-3w(3qjW@zO70Miu z{mOWWYZbh#`f&_p&E_T<@L$ifYBHEv;XVB%-0v?{S*6<`hE`@CnHB%6=Q(jDQ#@ za}h632`g$|0SodJi=Q2v^ujTc@h?ZlKD?vnP34j%FPatNfmx=C{o&!EH$VNtr)Sb1 z>P+35D6KCQNHyZI`DGg^)6wsK_q%z!3Nxx?#NdYw`CdL9Z|~~c(LMlcB;3*p%0}eD zYCSnSeI-9LyEw+D$ohl`i78Cp&rEiLk;=Mjv5U#j)SM}1h0!96I7U3C!b`;hDbG*6 zVuTJ-6ND+Ryz9)tph%m)M1V33UKWNIXaaJTb9gX%H)} z03T9c+b$Rw(UusLNeN1uUz|hBgp(0b_>jCj?P=TD*ER^0v4mPC?pBz37T`c>9P4s6kW3vlf8?=G1LkznWvwA8a$^k93Lde1~w@> z2D*zh#zU&5MeFdJEi8z}kE5*4c<(lparDWxbc^E*07~!{b#k5f&Lebz@kELM0czkICRN=TsWb-CwWvtRo7iVby?Cyczxp4X8SH?fRe^A+MgV|b2 zYrZL4fH({VqR|L{MvH+epbY(seJ|M4xWs~2#-}HC_Vx|*c4P5`lGMn^Io=KE6@m2`SoH~r3=;557OZU4qRS8wn_(CUJKFY4XD22XEOv|6 z1(dn#uDf8yu$CiTYLE4Riik9(CjqWm`jUg-C&2irOQ#viAZx0@piIJ5jP;$JIsxlt zAhi!A9?~mo!-FL91IT}C2`gU+XWPK00etG4#Q%h6)-=Ls?tEb@ggxrml-5< zVfqyWUZjT(eh46vZ0qFP;4=^a003{bTqLh_S1Q^S4JUlONgA6Yku3j5dTvn(&YU^( z&2N4aZ8a4`p>#MG94x-!_q^vl@N9UBG1TK1zO0h1X8^{G5z1_<%dF>HSpTx}`2vQh z?s7f$dzRk;#7vVDtAjcC(UQ!h?t&aK4dF66Xs*$%&Yr=R0!(8WH-*dOFREw~W6O>6 zH;x2Wk?R(4>$t#x*Gp$EVmW6nV%1=#;!>*vJ7;uFRvpvDQwW`7QNx(AOrxVwR8^qn zfGJFLtS@j-fFn%BT#6e_HJFMYee_Y(4G5r1pSvkkO2djeYKOpW_$rhj0ae z!;BDdQ64x**ODF4Pcz5(ZkPly3T0%Vql4pI#RiUQT?0dPIz8-jcT*IjoV{0|bt zCPjoq5tN7~GGK^;CMPF3ty-E4{HK{XQ{srFTwww6uwLOH;oih9VepWc-au4GyCfrD z8W!5XFEADj0VdLR+{_^8l>``$VFneXl*XpPNDW?{n#`g9$9m)iB`)e->t1BGbAU9=V+>5R;*=C6p_DsaG*0$L*-Cpb&APzz(%YZZ& z4MjaIOdHZJcOTOE4$5p@nwkz0$<)U*$kfNhq{M{DBCV%q7m7y-G$sWlFr6B4j80$X zaAF|E%EHBrt=4{4lcAxZx4!kQO8vwij{pDwKmbWZK~x2$Ou;cs`^?h&_wQ$VCl_-v zHQ^~!H28+)gM|sQpew;Kgo$SkXQd;oe0LF+E4RG-yBDkp{6Fm3*^KwQ=4PV=N^kE< z)+W|XsWW{7njsDCV#N_yqmnrS3(Mw#ttZR6UWfj)sxa@>DEgw7zq)Vmqc5NN)A5<_ z??^^gRDY@>UTxy4p$w}FLKX*O28jkHMcwg!M&zeI{b|OZdOf@bmQ0R3M8NT(4}GXN zxwF`0DS`l5fW16oqyj;R;Z?ywVb~F`njzo=;4C6174Hb}f*FF);l)D`Cpc31mO>na?m@Ny+G8s4J3i1nj6NO(A)9NRmd{RCz+QnB2Q&eq7;KYC? zDGuaE9pvM@uI~-_stHn1W7BXvo7d_E#5q50W~w!|4%^h$q6hqa{^mUFu^Im`Y*1%# zSBXb`JG#e4SqrTzpxa+^u}SelFhXjJ{=z8^StmCov8%AyGh*E2a(oJ7W~so_SW`Ka zsYk|SL@jFOSN&;qy+bE=WlCcTWx8fkRf#3QwwCFOi(6*(#~yo(`4Hn0JsI;Viv=qV z$(Y;4>{(BMel8O)#Hj#`cBVe&TNVfy)nI~myyG3jQ(GoLsWaBEa9M-`Wif{{ZIY47 zFz2($6eA`_H54RrLz%z1GIlAqcpw&iPbxvV6vr|IDZP?{R3t`+DI}xjQZeZV(x|?r zL!I!@CV|tMR~A-RPrV=&-lu6mtH>Gy9_&+I_y>Bsek&e3oyk5hGxx8$I-n2BQ`Nu5 z;(W6iCJV3h)Pr{kbk%!Y60;B@(BVzt#RT>SkqiQii2$$+L=Z0g72k$rl!pWW$b;UWxBVXckN(!vbvnR&2FajB(gxyAZjvVWOBb1};oh9-xi$rZar zI^PIf^!FlRde2`cSI>grhS`Z}kVv@2O#VOzE~Z)5cvc724r+*m2qyQh|nA=Z)Ry?vHwY^^V5$Di9X@Kdjz`)`x8 zKh)W7PnK4ly)<3wuTK?FhHm}B7rvmsT`8V1^nnk2fN{XUf=fXpX#mj-AiADch4t^} zKmU0G@DdTnkY3fBNI)(CnPCcQCOsDe7gh&jk#{MhPztrJd*)PLM}W@&^uW-k8hitS zuLahS5>&zH)U!|!w*VIwbw)WFHZ1lO1RV+mRZuso0Ty8liCPKi;l7YefH@7}-Jsb6 zDd+&jXufcd_;O&?5JMK4_Nh;Oiex}En3gb0iBuOQ0-+GTGQoVG7MQ2|x-KgLR`L=});r3vceBrn{oE9na=&AJ6_?eDS|Bt^p#Temt? zEQsldG_tv8ZrMgM6??2=0*0TALq|%uGPxXQ>{%>K_tihpb7jQh>T@;FB%7M>inr)% zwb(Oa+=N=pLK}b5KaStRtaWOhI?;(H^9ppBB8tFzj8Gt%gA{p#qZUVAxn&~dlC2bb zQS=aGT9&7P8zyt+UT)cxDhjY$z%i^x#E_o(nK0W$5>q8u^2D=6lxd9}H5VI2BAE%9 zRN0qOBD1kT8JQ%>$fb%P;J8&#hRK=YSTZCrP=*SyOt1t%R#qAM>Wkx(r!%?T(a1*z z`j|4vLL_SnXhttZ!cbtbbCk%6K)iIjRk`x&xrq?-(}M$lePw*C{BR;YB|5o3-d|=T ztv{_cOx=8H_2C^ozkUAl`P|~8>4ke;9`mX#t77^ppbWIsny1sHJ)lcsSpM1N6Mz}R zpag|ZPEB(%1OY$-T?goO?U)YA-(>&?%%&39D_MmetD5F zh>$d-R3DfS4EU@2n4x-%Gnz?%(gX(uzGoDZiKH@U^Qfo$yKg{+=$T9ZqGHx3Fq*!| zF%<5y5beRO;qAL0t!IpY7)lfzLjbM}ky}VnbUnK(cvUfhO6k;w&G=61PgEb?{`Xr9H!1+!QJRSuE7TZ^#Oi&H$e6Yyr)LN@5#hKrFv-zXD$5ocN-4Oa*$HDyhLUvfho+N`ou^YW?g1cfifx! zs|<(A@#>j@k(e{FGikGBh3n6p3Ce-{E_@wW(Q@Vhb34QVI!t=9)r6WXRg}m)$t~?w z)4nQ84^R_kQGqNhB?`(g^HUSZlAYZnx8!0}|AoyR`N_e4Jp3Z0p!cXVHPLAjmI}yR z?Rdm3xwzc%UNN}b{p9rrfAGbVGbU}Y{z&WJUVjjuAC0=4LqwxXA+-5pyLSA?vlsti zIxSGf>tomQ)gG)4%CIWC7e%-lyi2OUGA|VYO@p;3W@avpjfEnG?zUcHfHHa-Ny#e& zM5B3gZtA6}%otLtqkXr^BlQcGg-^h)UB!3>;L1=LhAfM;$aKV=%+Syf%2|$20+Xvk zv!zhXDC7|U0s#<^S;1#1#U4pTBuXOrg6!Y_{om6%J`!*`5-}jZ3}4W?e3Rg7+KVh~ zWbPcxFjm}rUC`lcVJiR}l=MO$3VapTQAEXJXRKF!Azp2)7|#KX*p`!wO47YF2VERK za)ritME@WZ6JW|aWp|>JMMQ;%WzMM5BiA~-ke{Q+9HtFYD5}{Td&C4^AT?1SMrw5p zEPHGHPJ_^AZGds^P8o@|rqc_VOb*oIeoD-a{w~K+2F7Hs!N^c#F%&V+mf`m4!b}%J zsHNFX3*y-LX61L;a-FfFkg+Rzy`$?aY_o(jcN@5@V3$H+nk}oI66@$xxl)V%RE6b~ zB4$M;pb>1L5)eQJBpS7ZmGlRWyD&D`0mAT>m7W<4E276vMzv-nAO?ou{CAVCLpXA;lY!Ji%3~S7|A52P$I{d3a}zr z%YV4PG_^7n3lgFN0%)i?IEF}Rf=$f&ks3N8<*Ajoyth>@6?kK+?W;Fm|0`#QADo(1 zjirq5@9p}H{d)!?)vfr7Y_$REPw79rqvtoyU7{<-3WdHE(Ob2o^z=UV*i|%)xBkHo zeo$6rojPG2@yn_y@ugdf%aJb>EiELqj;b`0l6ZzP$uOLOG1Khwd?3km|8f#z`~_{m zr39F>NCVOt+$`brDGE1~;(#*fDWfZchB8J{3WNz+eHhuJXBi}f$c#f7;ak!KJ_9Zo zEr??&jz@5wXs(P=MknpEeFH8ohH&G!4Af)PGS=nND=&OYiz5}X`mp}%vL}e zF{)_BHxtx0V@7p|G2pNH%XXea3EUYa^2*4>{sXHT40}L(|K)$ z(W+^mS(@nt&B#f>dh@}Q3}^mY!l5j{21bH4hnLtb1oXrz%*@t`!9+OB-_+b3J6P6y zeF{}6^+0-Iq0{ER>w+7Q2h_k2U;^L;3NfG=a=b5IaDrC&|dplnxIbbp?Se&?JW9 z6tsc@3>#TNm|Z0==LW!jc~4hIuQs-+0Es1m*DqC-+LnI3(^*gKG3`!rARhg@8xCDr zEIc!po-7pDAHTW1t-DguZaVeHaQxH#T^(PToc{9c{Ev2*l#1#nYot)2XB~N1`C22b z7{{_a>yL_sB^WAdMHIXOQn0>@CTmlr5R6KrXRjE>p$lpp4znqDE{KC#a0b9=L$t&v zK^n#x_(owVl}p?Tqv0!~5WWk^z#Iaxzx?Gd13O4;f0GtV4(3 z=Jt_C9)a;AxSN!e&PQSm+)yik2@>4O(4_y|Y%Nu#Mg`7Kzl!xZW$|UQDWUVxBW8!e zS4z#*yWneQXM+}zluL^MY6$7hQfKxfVYgpSX0?T51Ioo6~gn_Xjkj46Ku?}q}0G3z1mt9=U zQiYAKz#|Q{OvIE?K6bYEn znBhSc#1K$ADBMB;oUc`8fREaK>~?T;)F7s8&q&mjbIgER%Zo~ zI*>~yZRjwaLQp{#X%wOW9x=PJ)=12!Z40{(?&yXBt>cn-uU~tn@#VJ|9~vW9%76j$ z-k#2tyS4gH&5fq2S?IDjw0c+GVcQn60LG6Hz&P?Yg+6-C%XA=IDRgOfU3)p10&KZgcL0V@JN1Y%Jk z4nQ#$N?)Hjb4Cz4k|`KY0{qE^eW3m!A@$$`;Pc>fV(kYoQ8B(HN*=gDkB6L^lnh)-w8E5y*zscC_~2m`}d<~4YuPI@ab|XYJ7EY zO%XN|Bl7~EG1CD}OxitYtX{t@tn&&0C8(QuD+A9E&~E@mEPNSTe@-3ruT4~BJ!f;ddGk3asn zO3BO&c42B|w<*&&5a+CIuL{DzO&2OPk{G}wQ!(>7G=VY*r`XP6tV(;?^1;-B2w+7p z6BtGGh{?_ZM^!0{=~NX>098o%K$I?sXEI;-_G}s@-gk9(h{TRGj;^CDKT%QL>%CsR z>cV=_rjM>VYE4aa0$p)DlbbFqb%rf1<~1^6ssYMa4*O9w(VN8K#>5N_4Y5G7xd-+l zd4VZ6xTBA%KlkEyh#@`0f;4(YL)f;>mKP6pCL^r8uGkJ@IE5g;oM)XjxnSKTPGYT2dj4s5Nd{h`BQEhTD=;2{7eBryW3E*qNH!hX7ubVVQtJNDKyI29w03=N39V6+8hJVM|FeW<0f( zr4%*MvABSc7@X{5@q9rM%Y_!~kH?9RWLIwhg?6Gr>a6h#`httnQ@okrP=UsaU}MGy+s0Gu;H+17IPz z0efkf9PZK`F_eOgQ@#yg5b(lFpOkSa9|r3;I=`&$;4r=%5W3KWjlq%Hd_TY=VM5|I z2Fj4-ms}(!B_EP(1)zX-JzpBiD0~~#gocA-L>5b<H!m)Tt-!QrsGer{?P81kF5q`B6s?2fP(#MpbJ=CO_X6DKTmFQre@d2K;*b zhKJeZ3mkDw3qdMIM$xt*U_>)?AoPQf+O%m{&*a)6d!qnut|vUh)ECj40AY?neM1;!w z3{#~A4P94bCQ7iv#KK5>tP36>5QGuKa)_u>FAhk{aA6UL`Ju<_Vc06O*(t~Q_U;EnEaMa7xDdQMP z5QCo5X$689I5A*$APy|hfBL6?;sam`7PQ1<4XB6nLFFlqHiC+vLj|M`QZ8T1efQmm ziWwTd;)d8!pN8L_7=2n8Gf)N#(jvVGK3bSDv{4@xw1_&xS;aQ?ENb*N`| z>)r;I0%nQYxJ5)oY*89QoL3K65mGYuI><6hGv5M404qR~p`oF(XU~!nHZ$|Hf--0^ zGJ!LLv418#7x0C-9cpaY&>0{LBMsyvJ4|+=G=YIdyv31jO-vDM@<~J zXcwWUgR+-nU43T3^7`=>2M5Bm`Z@^Ke0wI7`^3d7pBkOOcTEr?vxTJ(y>RkVHynIR zr(xe%Mj;r%vMlOm1qMl1JZn2cVWMlP?@&oP9Q^E-QdM|c)QZ<^4-89t*Jt>S&R=2? z>hIixYdE~fu<9d~WRx&c;lzNZQKtgZ;vt69kst-afJ5L0C>%81+qM%}4H^JOfT>B$ zI1{!ZVaG+h`Vx2qe+c7eMx;!RU<;T)xk3rbu$(h?X$~oY6s*(lfB*aW7(h$Fc|H{y zh~6tqMM{78;fE<*YDfjX@B6+Fydv!q4kwXtI}nt@wgDJjoxjLQ2)K=*6lxCShX@5h z0j3Vkr&g$*@CTG3QiQ~g=Fk@6rG}12HQXW|dh?$993mU016o0o1&Tpd6yo45@yY-< z%n`Kxd%ov;gw=H0?zaaNGs)y8Yp|+qRomRFbHlsa530N>fZ&hUY9HOA;u;g+(}Iw~ zUWyAsyoz*`R40gmnuEBGX82@Cp!cCX-MVPTXVQ?4rGdB*cXTqhQBIn)j$*T}Y<98D zq#fL(fM8_)M8koMC+)NFnD(K-)QYkrP=-=S z23SFOq&JPQVo2-lMT>|mIO>?sSU^XA&}Hu5Zb0#0;8wNpkzg4Y_VpuA~M>9b2Bn`o`Zfu#TEdy zP+;-SEoEM~`b2)IwDpH8v$x|2)=#hp7_SU3%4N7S#D`~2$$8PZo}+G&P+XL=AO%}; zsVRRI)zQ=td1b&c^f~8}KaRg%Dp;o`k&+P%{}51>DWrF$_Va-t90k-f+=++Z2u2|p zk*xZ}Fx;sdG-($UP%fcRmK+)dmxaWI<;CIYQ#ii?%IxVlOuqqQ_}J(->P#}6$50b= zrO!{j3{c}Ra1_Vn`=n_=x~u66^d6_!Q=%+pkmaK~HSv56CrV1k%I~pVcPk4Z8pwwY zGX|-jJmu|R<%IID^=9quFEaw-Il=%hcx>{WzdHUM-T9v6HU2slX-U%x#~wn#Cc`)F zxv#~fE`w6=>B$$2h1M4705OUPn@%qfLmI&`1Zu_>#x8;&<=W66S6bGz>$rGYbBPX8 z>v_8`_69~BUqLSI$=KseC8LcJ+b`ugCLWJ@onwH(b|zyfPZZ;eS8^{a(->njy*gh{ zyj8l|0bFQ8&De!A8nJD+G+J%d+@Rm8-fMM);o@^hpH=@<>IZ({2b6$`k;Al%cu1^9 zn2LGIdcn$q@*+!vlqt}M#8exA^7gmCooP)T@j)RlVu!}&6XNXIn2iJ0G?UHErqftb z1xzo=o>|EL59ddYB@#?C^ z5IUwwoMq7zZAq6D?0ft16P()p$$dL-iNci#d7W6I*Ucx)VC7vqi1=}3;2&I`Jqxgi zCoMJx7dzFfv%^Ll!&6rDGm|f}=Hb(di5WxKrC&{7rOD#K57+@sz+7M3&Vz>zmXb9U!BP|R zBjXEKs1L##xH5@oG90zOx20l!GJWN0dbqg>Zw{^Twvs{_+|beai<1kM*tNDR8EL<1 z;4LaI3e@Q5E3G%;`QSN4LF|X=Mdj;bRB#E{JhS&We+R?L`sAcfCTO1Z2g zMjRtm-6~70{ys2b+7mgZW;Feg3UjEW5z5eBl?JfF=Vn}DQ|)a6WdgeWHH=SHj2*B? ztGTT5gzI|ODBwaLVq3&wVA~W~3NFT8UC*|GP5@DC|Cn%?pxDB(qhm7+SYgv8TR!Ro zOaYD%K>3fuUQo(pjv|+U7z`gdb-)O~_lxtE zanlWLiM0bUPtMH)V!qM{GYGV5e&nT7|MmI<@9j2BxvH6~0rNBtXffOb=M717k>&y zNEY11UYa=r1IE5B7M2T?OBkR7{=g@%Z8aSN@nrG~z$TCo$3t?8HIM>siX^5uI2@dd zBqAHS0#xVFBLUpNHyWG2L`u8zl$4)eOoQ{JCcv6k#*TwpDfJ-4%=kz^sHC`SLJ$QY9mhx{EFuY@?Lizy-<{Tx)sq3{74oX zcWBpFq9TyxI&DW|^8AMq*1jDU1#ggUbZfelC$HtsFyT7L_+uAGVz~u; zptHhX>1mPL?`SHtHWdLF*4oU$kj9MVk?6Q&a!r2Ar%&CeLpil32j);u0V^VeQZWR8 zO$*BgAsR@9KRu-}Y}LHrS#yBVqG@vXiZ>SF6ZyLS+ZB#s~5L&dsJ=kNm1{OQ7L@_ zRSj1kI#oS#02lJsfL$2a02eyV;<$if%CTTo^=WKkFbd2QBoWljO_`|%p^~Ty=x_m6 z4UgcdfMb;0UuCDUSZ;Hv7!`mB`!JcZ7+pCO9act>N>f7sf)1gEo5)3bFz<_%xAxd$1i`lOA|w{P=By_X=rLc0e;SK_Dka|C$Mctq*KlQC`+-0OG+4 zK=#ncm4Q3*l9}v%CcIK!@*uKz<{?(lTt)JD5a}kBzFygGQuSSYWP=Ma15na zgbsq|yue&TK#b~yt%zp4aIk6=d@|#@i;7HsMJ;c3Cfy@KeU)t`fOj-_h}?BVc1$h| z>)>W3N$I}`j~tO3a_hh@H2@brWHfUlHg3Tfy5cBZpJp;wpkKlq!lDZdh5w<-WpC8o zVKA8ilpte*zrx-L&I(~PBblrSz-|HMIK~e}IAT;0GwJlaZ9t@ADh6b3RLQ)Ue=320 zV9Yk&95k^H{WDg4`doU!3&+qKuS>*wTEkzn9TWJI;>bz&VUuVL|C>|i;n4ipfB_o% z6ZF{>QZeaXd<{Y5stqWa58dJ+{~{bufu|unxJDy7vRoG^!r(K_`b-`cbdWgM?% z4Q?^cf+-~;HdK0thlde7BTE9upb`X2hPeYAgN-7$q6ddK39k%j1d9-g35CRJb>V=? zBfZDw7N<{7d^ZSF%Frf@ug#bb#NLLVhpv*FNV_T0oh(QU^SwRAr-+% zY>&MljbBfE(d`!e|%`)e;FD3rb|jifBx+03z_BRAKKx`o9VE1t5gLl z2CN;dod}r4|7qVtU@B7cPq1!KCXb}3SXh;6`&VoGX`Mar#DxdNsSNuY{NkViGc+_L zTNwmQ@N7??K8T_|J~{jqJw9NV>@4{K z^$$>!GD4Y1*y$W7VCi1T+>99oV#pE%#|ULN9aSQ;yb3ok09jjx5C|GJu-w{6*>B&^ z5(L=CD(xmt$Lf*n@{Ld?8ePrnFJqE%sMB1dumihP3tW&At%VbpIvdMs2fu~Gv3U{T zl4{jWKm%O70(Uk14U1st&Sw_p<~jSX!~*a^MT)peEHPC97e%Dnz^rZY)ZOZd#;PT# z(xW!3!V>tsLwh;zT17r>J7H3{UV;8-5;^6*PkplbB@tsLKQ~Vxnho zlNK{6RO%WSLEQeTm+sZuB8M_Ax?Wiv@l|0L<-|qKDXOPjM>XoXMe2vBh+zij1L%OV zOFh&iFJLIhiDhWIASkK|Ds2dGad$}023zr()_XTKJ;u$IxfwgDm5b(o$AxuP9+v%2 zwS;1!(BI#1_{Uy8{a_7dP$oqI$1U zrYW>6>N1F#5Hk=|SIG^3NXt!-B~TU9{;osNXjGREvn8FT3gdfIk23d%s%;(yxPJi#%< z)K+tHZ4{cJ&Wb%FI81d{ZEaE68yoPSyaF0AVSCciRPt7!S5H@t322h7XLpC0g6T{X z`@o&n9J9DQ9|>8G4BQtgBQRYy%884+J`!UAmn95T3pQ|p^U?s|;w}ra2*=#<6goaN z?T$CbxX02ua9kJ?^p8V7!(Bab{fpZZ_oI4ZCJTl0xw3UL6>izD+3uanF1j^fj3p*R z)|N7YN0}QAee~rspBpbRcBW_#&}z|+{V+)?%lg_f{ZRO+401q z*T`PT%Rqo*O(ii{feLV0I6c6%usCOQB-2238ES!VC#nh*;J40&f1}V0tq}H%1oW;| z5J!*PsIdQg4`{@cS+HE;xi5%wF}mE3s*PcwR-45qJsK@c*#caU+inIYF4UHOg8vAr zKB)Rth(t6DuXXRx;q$ydV(6l!6)__hzHEl$nVy_$mTGhGGWP>wy$;Uf#*iPIoNR! z+j1QJ;UH&k=MhYrrF?XIaVn+P1)o$HH=R9uRwDUSVB&Ex-(d-br(--*i7!Ein8}R; z^d$kHz#lZ-$@J3oFfM$IPzD8LJz4!>fgr&v=2N1O@=36Ek3chS;tJw4q;+okjg5gT zz({k`)Qy;U>NRO{VAK43$^C)9jEVVQR!4n^LRp5W{JN`AZA@FLwKvhLFE-UuXjFO{ zi&)17E(JgUz(tzhDEd{=f%}3F8Fv;REoS;qH&k)wZFmgD0YGab+uGcO%>}B+LF8z` zi+IMR^ZWX?vTl5K&Z$Y`MLemrs*A;NbMv1c-H*@Tzr8x)l|D$k&mO|!d}EhtZ!_o| zx%kTJG-6_3V2c7)YqyS2rqxnz--a@)eZMXt;LFMJ=TuQ=CSKUnd4vNNRE!FMSDtv{ ziL)y>hWH~#j-XY8QZU9%FlJD%;aG!v@4Z(hXc#0oO;*_*0mqV1?P`i|#-Xn39W?FR z=HA3k+%}pX)fiW8-D)gmBeH>JEPnnb@QcQnaZEjq{-CM>jhL`LcI4$29U28?qM?MP zli_VH$KVuJoSRNV1_NiabjADJ#MdFl0xl@HSR5BiRFo~3N~}W#{EP5X*JXIfn&+Q= zW1liMDx$zBzzeT7%gdr2(x?g_cR?9lQHE07SjSj2a;1pI%OMRQ@;@COY74b|ak8?2 z&#=`n7NbS-V(Bzat|Bg0a#5>2t~H3_xn;g-accW;s&4* zG1K)sZu_=}H51=Ft3{owf~UGnVxX~5M)g3Q0h(;&j?_uE&g`KUYbvonG(!VGT*Ui?n4-oPDr5>A2Hu$EmLg5ZpTlP6Egn#V!k_;>)poIZV;Na}-<;-N!_z&9L{f(II@A*VOQ z!e+%r64bv=q!(w5U6G6iJ1)eSdCej>Cyt@H_R77&*j=;c`xC~9i3E%;pJW&@8K1&F z(c>{<(r;DRfp096Z10P~S^xNSlg9v?zrF1@x*s(ph7N??0;6SaejX*+%cEl>W87Q+8X%)R4Zcmk2zMTw!75P^u;@mE@$^p`oFpM~{MC zaK3r=>{(8r#M}v`U~mk(YDxvosIuFmov0G4+r|bsx?HLC=#(3-E~68#CoH-b>ui!; zPleYxZ;2V=QEE^lriE-*mvyF~<8tWP_^Zn}^450i@EijXF~E*CuWpxXqb#}VbmCG^ z(ZTaN79_Vqt{a88&1j`K_D;deZAeNf(SKO#1(C9%5mO(?JD0zNTrcIh&C_WH2_H{8 z=hzz)3DjIld7GP`4rYc;dMlU87^Lh5rMYNBvHlg&Fg?l0(Zxgcm$R;;N90P|j`He% zZ4IH2UYuR|8nA*X$Zm;K*%AqBEdHx=ID z`@AwAI@o*bet=X;PK{DwJwRD?s)*{;9O2+N#*xwMcDD`4&Sx7WDYGZoXI)U{W+h#c z1TIY)uj-x7=6?J95;a6x>M|{b z;u7jIc$YCVifbUdoyE}uGSR3=A71*^`HKTd>rhFonUGb(agjsah{3zeb=O_@^wUqD zIB^0;z?UyyCKA;dtg?kNf+`LMm$30ysv)Zv7)bO;T3g}nEbERyjCm!J<3d|o45kF# ziGj@qWvDO?<@u%6n+MHM6YAqL0DL-s{U0$@9LyD|gTsi)t3?z3Y*}-vo1HjHzmr9!UG6gh$x1o&pTMG7sS*DO*3TsZX z)dZwous@}M}+R%4DR&Rp4fc05{O~O@e0N4>@#AHn5vmtNb;8 z87%>gm_nvGk)zyoC{vY;NoTsiaiNz$EkS^bu|KC~XP1`S67e|ZA?#LHoVcKwYx(;Z zaBs}GQITris1vvZslS&_Pml>A2>sw`_*4TaFlN*( z0Zz}pdFP!3M$?y0jz6z(jGl(D?Ghl6E7i$`D@G_|WYsuI*}z+cW~hU#4f;D;|B6uu zDzN_Lx=U0`ruz{w4C7!%OnIY>68NZ-^>O>F0~fL=X;IDCMK4#vv*~&M-0_wfStCnfBx*~{?Ck0|HiqC?go+`&v@8a-P>h2sN9`?HO8vHRhO!+La|7Pkmay; zR$5gQf+Q~c_=9AqGY!WVKw;avOr6~**+qPy!dAyx0!s$k>Y+$#w(=_RO8Np&hNt`Y z@4xM~+n##rDa1@1nhg&IG=nMA#fukF0lx9Z8<96D2>i zzukmkRA&S|@Jm?G%tqCd!Jt;Mjj99XGK72vBt}fex;eBcypAt$B!g5(cmNzDqM}{V z8|ANotQTW#H#X9m0_=-PK>px8$R7wsu63@Vn+?NQG}eK0sf_WPCz1iorTSJX#`LSl z+-kcse$1udVr~V@AvNd#l2=F-}$Ab55IWoRq>G>3^uLS z#~AV;^4N@}halae@-ZtiPStH~0ew!}fT4pOQ*kM7Y5v+An%dg1olAOv0U@tbR!xa? zZ%-?B*GzVzBi6%LiX}D*zv%hm6EB%e!kB?Q2XiMhh?SYQ zN}%}v`uI~%y#ndQ>F&4zwIm}|vPQiMSg&}6X1tIbZ;hAe^|bzKf@Y+M`bn)31r}N_ z%1BO?%v1&3i6fB+&Z#9HcYLVkT=T$18mqo3pFVVV*ZRcBqQ%^zieo4mQ40ryt2BCm z*43$3p;N0r?6z7UMi3iSeN!U(k27h$<4`*wjHKXLJjn=q$Te(=SU55E4o!GNM4uWHz&y|^+DPgx$qZcmn}`!F7WG7V(5 ztv6SOCT+`@+(W9K7-k9`$J9m&k9jI12nMy^!-o&=+_}?;Vo;AnP;B)>}Nmw z^{;>Zr0rFYH1`~OpQ34rS8`0V7O#lN;1!;jH++Fm2!{-oO{%!f8Bl1(T|EIAYt6Z# z^C`kz`ntuyII-rhr02Wy;@QN@)gCciHr6?wSUsW(9D@d!G1(T4w7D(TkKzGrIL9SO zPf|%oGK`oUF>>qXs~M9uFj8PvqX+_MnB(4rE^1TL<1^{B`*d-jfc(`^BpKyWM2f`= zx!kC$dr9@Sjxyg%|8f8BpWa<|2Cyn07dRh$;Z-n=im4D-t%fV1dZay}6CRtMqeI?W zZgr(4sV)fmQGeuA-@-;f8T(}H<$~vQR$a@sQ#Yswl$gmukEzoUqu-)fgX5Wh{^x&w z?6JpivWHlTQ?->xVC6spW&@U1EZEgD27Jya*qPd=*JMkCjc7*oiScP;+r|EDW6_NN za1x~JZgNbsec&laI=j;l6N|0RD*go-vu~bAAe~$+jdC$%ZwcTMqz~N+F_KH?+ytSs zIn&_N_U32=_qz{Gn*EiVtL>O(9k-H)$nyASO*Tr0mdKh58n#um) zi>Ctm3$`jE)mY`SN#!hsVE6Ul#59y|O~g9O-FA~wu@c?6RE$C`5@11Li^8WN2u6|# zg4_rwgRV?yscAV>T)L+AOse;{Zs0p3-$bCJPBTDV6@2sjmB)-NLIU;O?|%1lpZnZ5 zzVQw8f>jzUo?dqS--1Y%Vcqd*17GA%)pG-MWmMVQ zfz8$fxV(Gu>Qk|BA{vfOWyYj>3;8+6$&RQaoIZUT?#sx?>Iv1L70x#R)36)n(V;_! zaJvVE=H-_B@?t%#m+%{#NH=Bof-hfLF|DIgdXz9s{hD6k^A zn}!jSTl~b*#jL_Q=jH3!O(%E^Xr|1Axk>yT1QzR+yss_sdlRz{P0fri7JAEl1O%^G zkd#K9-@8_He%%y)=ir_~Q}O>DDb4Nf1dWXuU(7!^ISs$$gFAYf9KLo|O5(LjP*96y zyJFj~ARUGWh5n!pH|3MDcE&BG!J`o525@Conqc~0#BAO5XG*vow?;hxCkE`IaLm!Z zTQN`yhf12iYz^VKeBldUc;t~s6pmpc-oJnUyWjop`|rPh@7}#sjN=Yoe)(mo;q62B z3FE=NW(RD7myC&8VH*^X$Yx6hUZF}}eWK9J+EsgFc{5(^3TVW%FmGnmsU?T`upad6 zRlOSGOB3|6AIHUkV`?a6%Vj}AV61a%*kEK}OxeK56<%2BKWnG_NfC^tYRlpzrn?d` z44(gPbiCTU!P74li_f`qegTMgdqWvMkUu!M_agv{`Y%(rIQr^uua46R@9yc`W%BO~ zTSc*3BmfU>ioHuQA6Z_E6!Xzy!BwB;VknyBPtI?u zzyG%>1nhx<)ZYDFmcJRfkWk_X7=JUv!@~lNB_4Ap+~^Gr4av?1A9@%uk>I75UOIB* zNGfG9PNLy>u3))Hs_o)jN#MEBMHH31JbSh_vKyYu3&%*s6z9fEeWd>S3vY&Vqx@@9 ze?dA05C&rj&EH(QWNM^8)h8)Eo-nhUTJjlSOr)k+u8C6)GMTJnN_CK0yIb{XsK9HG zNp8cWnG`Jwj2qYK$T9~t|} z!G43UJY)VUBVWp7F{pNAy3x`~F?6g-##?wtcgNq4uBrs6M~w{tV*c!sbqLyz@9cxQ z;wH|J;B_mei~3|pNu&%9BOlHyrTJujvac}HwVY|Qa7^>E^RL*voQ;#9 zFx6wFS>CF<@U`p1wV-@#*If$7Fv0*aU$!p-`ha7a#v?GYBsI3cH2d~h+PIi=D~*|3 zcimHGB^L|kU3hogEc&gpxJ{B>I5%FCdqXN|p_yR%cMT~{i1_0SeSqnOiV+j16Lfa9 z_Yd?KgcEk^csvSD(pOELNMplPRW7xyhrVny0001Sm5z&oUyUt#Yf)3nm8!N^w;0zv zm1_$H?uy6uwzgc%E&jurfd-?_@7uaI@=zE3)Be=eahiWH9(`ALr}2A~NF`u$yj=OF z9FfLb(Zt#aD6<@DvJuI0HUT<8|Cci+L-B=h$5d<2nByqbAJBP2irwWbbmW z%sk!Lw(ZC|dthw-vQR)R=HZ7Q{^A$Ec;?I*Hq#Qx>DfRQ!p!5S#i)2<5OCgb!wtgQ zf8~`|Fldr2Eg`>+f~4{Joy(aO=n}14Rb9rXvHBz7m#it8fw!SgKziwG6gJLlsw^)q zR8LRG{sV(MclCC4r8qg#%duE8m0(!<7op0kDo}zg+oGbXdd(y8Rxx4<&XRF76hY6A zc33AR{o(Kxi-oubmswG!+zfjSiuEI@+DViD;DV(|`BS?GL@CNRiSeECy?dbj=Pfm#=Frk|CPAPjH3MF0X`3^OkU%*tZRytT@s{>!#7v}LO1B&2P_Bk;N7T~; z7iUgOcJV8t*#4Z1ednEbe((2wFMfeVc*F^m7cN}T%j)m%7lmK!w3Su%E%w<=dNK(E zsId)JUplv(H|btk#}-!gi*+I(q}DCyU`B7k#)dhloC+Y8UY}~9`Ab2}U%&#d66;iU zmbM6(_9~)cyc@Of2?)D|-))Xd#SU~QkgcDthd_usZPrEXaCID=nI(GwWMp-8TjxY!JuF{atNk*wwUMaz9$ zo%47Ddq6aQ8E2fn#A(=_ot?Mee*631|Ndjgjsap&k>N-tii0JCNw(s?5W_McScFIp zr<5uw#bH%L)YLiFn_F}>m>|eR^Z8?ORmesqp3aP+E~9SsK!0kFetV6D=@!0Q_oUg7 zW(tm}VJfM!bZ~|ntty%rF{yBEf&Sj=v>M&Og>nVB=u1~^mD$ea)dOB*fI}s{vTR7* z^@ddd06+jqL_t)%k{&t&6*mBgIX`A=;QspgOB_Pf*ve;?mtW2}#qPHz6NydW7Lvw( z+&;$g-|gKMUD1+>wARI#*L%+`ujJ_lKp7<=3XWq`Gg^|f@M$=|=^8^bF!@o8fCXpd z!l~x3XW->AYXi*%YT*nfI5BU0;~Rw&Bk`!n$SqtM)PZGUVpTvzW`5o}6BsY@y0hRm z$58{eZvcTWvRbojlgkUtc_|KeUAyWsbSVQvbqL6V*;AeWAa9}OU+4fC*B{5I3VZqd z^)g~o87l_Z)_1mhN*;p%7cWhYibZcH2;Kvtr{zwMez!YP25Lhj5pLoun?n-`t zDsdzdKA&CuL({ndHI!>*VNz&relDGXeeIx7kD?4ztG-+nfC97DA6&S6E|Ys*Tl~j% zmRK^xD}BnUOR1EBS&>2wgQil(x}IA?C5%zvX(KR-tRAf#lxTCYB{f@^?nW0l6w6#o zr#Q(%9<(3UCEaNH;*R8QiV{s;N11bTb8_Ad!|2=J{x*8PeSLlS$3sPi7!q^t0iI?g zSGJJRu?UT|SCrDH=-@gqBfztPTcekVx(p6)^cV>zS}lR}wRcG$B5sqWfjsCmdWK)Z z3g6V+aOi*_YtCM0Mroaqh>~U+p9YLf#A4Z8E}L^Qcqo_4G2URk1SGqitmYmNp@1y* zLWH+qJah@fZY+fnyZ%N@#+vv@EfCwPfXso2NI|7b==IOd}Ws1w8r3Gu@ zvGjavz%h1ffG>a;g4l1{5!c8MpSt{Qp7xxce8HFfG{`a*y@<0Xc0U_UUoxggX*}L)`Qp3AE(^6RS*S(YMR%zY z67Z-dmDk-fF#n+Dj$gMJH89*I`aE(c_KE3iH;ADj-YEJ$MQ=ZH_kdd{fHz}zGGcJ! zYK-5ak;h`u?@J|e%geub`h1`!*i08;y_9}U+1xt6@lfcE8>;gw)%=B%=V|PZ4D{Y! zUYR=8*Gzp-7PqcYW_dm(ESctrbGKAhsY*A^HVi5*)`V~?5#Oli8@sf4wfehP9(O-N znfHk&o{+-|U>l-F<4A+x>CQXvRJJ$^Pfi5o~g zMui8GdsX;a3W#eN5QzhMsCb{ok_Gf*L^BR*K19~;5qJW&oRPj|oz#d6yNTW|=g1Vo zn@3L3h=y)F4f<355WCn?WzH%wc)D}!UUH^$5NV7Uyli}{8drm#>u&D|HUG=>+@D?^ zby9T$7q)Tkot!h9;Xv#+x3{64<4U*&5qh1=$sks6YT?(>D2WG@5bwr?3arR`*QHVFk%Qp6-OBL= zY|(TZe!cWqB_=#0kS4>r%jNRfOs==LGZHl{oX|v93-uyLK_>aWUjBBtLJue)h^S7I zIwW-PWq~pz^A{Po4=7LtBY5&Tr%5H-zyM#CQSFx0diDOlAM?BL{j+XKA6(omnvi z(c5HqW`JgEc^G4%5C&VTxz-8FSfV9ZGF;X{k}b{Qx}Z!`a}mA{Tp1h$H@7Tk4Sa0{ z83EE@1zd!QXI$HA?wSkJufA!|eJVQ|zRy4Zyxam=aFK_4FGkw<{AJCc0t_$48C6mo zMYPlg+Yi8-!Em}W-pB7)V&vtk#}!R?fYn#lY5fs)OhzbU)S=NcZt1Wa$4GOCmjOUW z>2F-@k|YgpgEa7F1kG$Xj&ZyQqt9PX;c+CBTd>Q><#7it;nAf_qeJ_5>64nCJrRq} zl^_11&3<~q?XbBADgqa>DRwEJe14(O5_2MNGih5z)cE39^9q^T{eycIx6bi;*S#y! z`eTdvzn+@=pI6+Y$phIeO9o{%72S@UFmve&-6%zw02OdoaJI1Y(U;Gn zL-6BW?eFO+sYp7Kv9&Nl8Aq~!w+;ZbPEclfK54nai{wNqR3}%4rlM-IWI>tMrp9oi z1NPn~N+!#gzJ^gb4nH?mk&lBNR82$Fq6hCw$X>d1>AB~g6XdjG#}3T1!7=iPHHIS# zE?>UP0Zh}=)5w@$&!8@oNR)JScefvul>GLm2CvLqn9fe97Jv5@uuxSjo7^}?nlL^-)7NK~ zC2h!=J{#MyHJ7fIUMQ%y{I2|vCK#$L(%a?Gn2qJ(ih0y0a>clwKcUB@$v-_7QJ;?*;Md;P(%*K{0Urd}*AzrVLj?>DI3k_@Uc zxH}qgWQUYxHSJX;y(Ck(P%QrISI(Tv=5C5be{n|_->Ff_ckPUr=;8H%GPYGR5X-$)IOnVSag;88M}lsOK7 za>pHabajcp`I@|2VqG-0F-^g(H+x7Q#5x_S21s1+ch1^l@Ms51hMj%eoap>E)u$*UH4zVc zxD2knVw*K5%aZzION3dnv8JqB`nxoy(IQE$-BlSxV@7gdTz&oZ*Q4i)j~O`xn|NI0 zed$YILRUuBhk+&Ohlhtz5Y`>&5ik0}1nxQXK1pW$)ipd+f`!Fd71jgo(b_+3oz4~w z3#g^rRnI#b5^lvVvPK~5Al0Z_>Z1gsiY5!2S2g|p&15o8)d8XD-W^h|8mOw=Yd*l# zum0c}@JA;wy~v+TIK%*4!}^X~pcsQK@%PW;-rOKaE)I=}R{hJ^^}|NZPmnnR;#+HM=ccxgcycPaL$ za}E_prPa_SphmAF&6;y%EEO4)V_FwEWvOI|9c~2v;2?KZ?u#I&OhoSXKlHv}CHW+pSEDHCdmw7gaYjVpau1&eMa z%f|j^6uAXPa%QBvVio7R%tEfIOwqhV!?>dGj5)E|ji9?$n>L2lN!=8laLb996V{aD zBAu*PLsdrg8%9h?gRdyI>1)5oR+XqJQ1j>Z`b6xHcJ}?Rmq!2O;uS1?es=djP38M$ zDq9y=BWj-beM_+){?WxNxXb}Y{K;THO_K~>wrR$XQ6ly4QH@@x$(Z36v@OKdwoPu; z@7h9{<;5tz>?q7)$#5-M1GG656x~}{Jgyb4%rz)r;xp!L2~PrrOC)f%@3b`<#F40o3RJP zh)HVZ(EM$+ZL-{zcJpr>X&jtC{VBX|$2PHSs@Icl&9IvKRWFHeCz$TcB(err)5VJQ zJFyNHOZ}oEz2_j_nm~EOI*>%r5;dW8>cB+A+2$&-*P)Umz&^+gzf?xmWQo~YsPwIE z@!uZo`?r_IK7Q`fRAK4kLxZYaYZ73%)Ae#S6xhIz0mnd^=G>XI7J9kdTa=Y2mQkVO zW8@J-#ga*_==%$eRHvxvfwhD(#b(QqjE!UJHCfWDEa4JYrV$JtH}SQPf!Sca zu$2Kuffj(N!)uwtgNV#u@(c00a7^zpFKg#hr%s{g3w_|r-FM%8#Adyy&fC3vHzwJr z%b*DS?6c2e`lMXy;U*YlLjn?C-+$~SZ)+xcsQgPT=9d?ZM@aT02DYJ$>ijJcaBtHA zug045Z5ZSANESm;m4%|F& zM_Tbc$wX%;^z);We|vReEMNGGBl|lPOH$vxsg_g>D7@m6vNp=)1hKouUI{&4^ka}K z>HHX#5G5?m6jZk=U_AC*o(B2G6&-iLP?$SW4Kd3LZOd6p3R)5^)j+~K3tnn0`Cl_! zjiAaR-o!TMiQ}ttKo&kog;9L!$0wmaUBaP|bI0S8*Z&d32HOt~b{wFWeNrm$#OX`! zWGDio7DK!o)kFZH5+LUA;lujw`T0vvxbvzQN6!#HzA$2hG912bIZP~WRYsj^@@pqx ze+6Z`5g*ocJRZxGZ_^zem0v6^Y>s&Mr$o7|e2!!reydOmHBn!d7srJ(4&Xve0pzf` zFFt&lrhop0B{P(1Z85J+ygU621j1kxBDrX~0xs@uP;Xq9UpTS|+!0c43K9c%N1-CG zGy&t^l8F76f!=>}bplv$&+!v~dHsPm1T?6wXY@MqR>`Nq4<7zwu)D@y2|Zt>ALD2; z0wbg8H76!JQr2^80azQt^2!=XSL#$;3NNKo#k{3=){;m!UbF;VTe{TTQZ@odb_|VRl?FNb z6T=UQR*;Hx2l&=xyvn2T`OAlUZnChf>l$bux-@gz6}=s?Nqc}LO^py$MaNR7;$yLh zKa}C{$Tm%2uQF~ltY&nIXp}OrVlfra zb-J`jAsc^$p#X}H)&<0=ssrl~qff$=qEAOYP4jxBx8ilN$R~I8{kzf07juj6dG3{u z@8A8u?Al?@=zt*RL~9$%xdiz0#Sb3-W3amxdnIF$*rvr+lqU5AArE_OJ&k{u&gV>Z z*<5jHRKuj#`=W1zU;mXL|x!3jIPSJydgE*L3SXel5;sh2+VwA** z*(Xn)#8L^RV5weze?J<*2M!!i!;bh@#*RZONd3tL^GV-4i>=Cu>SP>PSwFm?OEwl zj0!Y9bc~PqQr!5}=Adwx5g^9@0;AY~MlelttMgD(gg(pZ)bgTbj)f~cORltb(jVc< zY;j9$@QOaNHwwP+z7Wmemu0ZyU`2J4srji_C%&Ub%D}(?j24Ws)9Ey>We_v*ofB3} z8q|St_M9jESQq`@#mbf8((RUSzl9H?RkEBPK^R zlmdh!-bczVDSeEX$m?)nvOZf}(NU#(N=`&rI4*ABqH|gFu%jQg^sN{-=}l0k0D7c^ z9W$gm!G^>H1Ti{mN6qc}FwiR>4u$@0Z|80C=&y}U0TmejrMwJ>qP_mmg6XKEH|P>f1J^$+ z8ZD4*4(9HDnV@o`agO$TQiBTs6sf_M`L&h|kzSP%d zfHI-x7EZp*Kr7yG+WRpx!k zD|3ImdMT1dkC8AEI)|v#oyI4ILZR$nsq&$PLy2?<1QX6zVxr9Bs~0~pHk#o`>hN+d z&L2z~N)^o*j#z>j<8xHCJSrCIg);cuqflHG_%wL?k)sDNM-t#-{YE-kLRGwl#ii_} znKPFsMwg2nP1!h5GMt>{#B2_UWaYqV9wMZNAAT7BF;Xbt=BAr&;($p4dNojv$rZ|A zt~D-Kd>`p49buBe!BU$CxH6D3`l=pC?mav8k|X=}?WXMk`^}bp$l2_wut~4B5u@k{ z2!kAqMobacxlU>z#5txJj})9B-wx8~OKX8XrVW^AlH zVni9Au63lUmEyHmg=3_8oT2@jJ9|IWnfmyZ@mDgrkG_27x8kv%+cWUt9X*xgCXH+# z+A#kxI`N6&tEX)!c{JMkt2?@n#VwHw7mN^pwIoRfW({teCRqah(!*{cV7Mg_cnjNH z3`Mg|{DED7GTAtP0%C}8+a;?K8#83}7H#sdV3(A|dg<`j zfbnVwCf=83PlIFdgB^+jAD0Sq9h?bTnCUvdY(W_^GIzk+$FZ*vfeiyQ29}JQCg6j! zoSwb>sCvY-1Cpu8m~qRPGKB>rGs(*Zjw*3Gut|EL*o5vL_{6FCo6VY!AfVdJjBYhy zy*Z3Shl3?~>b9F;(5kgZr_k6irC1}pu|%&qYP?gUYIa4D;)eHxLyDvnIO?p}v3T@> zpg(x^RIvrEp&H|hg})me|MQWti#cmYF%WL~ ziO$sbrxIXIFX@<9DPFc|a3#I6)DvH0zW_?WE*L0*W<<|-IUlj)O1}Cr0%d?f_0*WW z!jCD5nd+oYdqzD1kb3O0R1zy-tvxViR)ojXnK2`j ziG@v$(90-o-)xE=$S-FiAxksRVi%Wd{t{zB0M`|dN7HG){ZcOLA)Kn)Zo*ZUKoPWp z9i*dmfpT8Ei2$z-856QU0)q6?(nFIopB|ffXle$Q43*s5+VZ0v z$q%I3BBn1fNLK@WJZ#gdhB9i`AsjETuUj{xK2!mpCcc1hO6}BJQZqgRCd(I0O93cj zA8%ZTri+M{#Nltnp>a(o0IUe>MG%b9uBV0$z~K4f?3qkH?as^lwb0C5hovAj+j(i~ z;$WBMv=?#G(W6I|<2!do6@yopU8$kVbLS)mbfQ?YDvdjUHYf&PYJIz!9^Tcy-<^z^ zt~1vAnmr}k-65McCRbdDG?|PXY-?DfabGkR@rN?Dwf3sDziPW17}+3Web^;tX^5)Z zb^sO8wsJ|d^hpgmB1X}}mg`}iyYr!B;``g;-^gSim|ghBLiP)j)BFK1?&wIqqqF^v zj?~S`1b%gDXd{s2x%9&0Gjoqj&ptkrUbGPmd*6E!u@AK;?uy6!`@dpWTd&nt3(R^$$0(2UEzNtMS!XhWH>AL3D|Jp!+B zt_+Nal+APz){93c)ff#3z@B+FH|3un%!=Cea;EL{*)f4KZT6*dL8mju`F`eaY;V`m zOksX1Gp5p4lrfPKT6}Ku*=7q1j3j*GDGDmkmmJ)NGO9N=ZD2BgA=P4eR&?VGuOq`M zO6c|Z&e3qA5tBoC(2=G7TX)myr+MvB@X{%v_qg1PR>ehh-MYv}ai@WG08-qOi1RmA zSo+HR!h`ATbGgMwr|0;i6s(+XNW^bwOB{+v_r;=v(MV4?+}+v|4}}Ec09i82%ai$~ zi9+F0Zt;9JcPf)RF~4wPA%k_2)RU?8mT2T%$=LnLcyEKe*ku=2+4*{JFo9b$xgNC= zMqo#m`h3Nu+L}0X4S+IGm!0|wZ>GB?H64n22)x6Erp0KJC1dhPu+l2O|H73i8kRA? zTwC@TD!Mk)r4yAG6kl3fR?lN=NSks?*>r9i!=ky|^jtZJVb*{fY}_Jas)mi3<;+TeGM0@b315db|oVn2+`zJ2Co{U?ywATKT9{8Wj-j2Wo=X4ZS7{ zi?ha4vN0@IdA9?bzXy2xj4{2Q%w;&l(_u_g?SQ>&)~_&vehiz_1LXBik}?kd2X7z(_(uz`+O0M{ovgA6rKt zTS77d+rkD*;vkH5BoM$lXtSMG~{H@?hUHzRIDMrKA<)$6Y4 z>U=kD+%0Y__aEQ)|Gv-Fl&VJVhOVgll_p6l7z zumv0=rnn2J4cqALU*8Kiy*YB0>147mD08$%Onm^$Ks3Ky84XI$<74UZ@yS?>Py>LW^NGay zWcf+D19bCVl8 zOi)QQ^hukQN76%+luznW&kQhKuT`V&>-KFQr#mT|_gHHjp8?c5atV}J*K->TIcdB$ zy@tWwHvNDLB{>}_uaUZX9J+%ucpKC?z>)W7__M!bb+IE!FyXSAxO(@qO$&czl@z~Q zD-$u4VZ>N>12vR*rZ|D#AeQYi_T~_12KyIW)C?2WAeO*qY#esZFq|9L{2u-;;uZle zsExA81An-Yj0A-Y3L^n7`~nwfmIu%IZOijzSBpJ5N4pr=A~Fe(`VnReBJkQC;1VNk z)Qj87Xuq?)wDR@$p81%g9_?fq|Hj7??>+O;r*C|*5v$X?7Q@H`;1a_a^;8lxR%=$R zv7+X3r%#}aYr2l%t~O$FjV-|9I-N;Z{H?WVr{d#bFBbJ0<{Go#uF^4`7%}e|^MT zFjh^YlVh56{M0GRiy#;)Yjv2RV{;_fWw*MuUu`>j=>QZ3Uw{Y#T+CiN1-cN7F5va) zq7NM;VogK6IEBDWLs)$8zP)?2Pr0JOVwmoFY7g;}HA*(q z>n(hebKGV?8!_<;bB)bUG!2I)7|N(fOg5FK*BrwE8C@J5*BGMP?Z_LWYw;b{66<0v zW6=xih2MIbOl))AUUG~h^@Wx&A_Da=mC zELXKH_>W`^x{;AU8CnOgw6aANU2?CGnBLI+kr;;&ysx4)#mCxft$8$LTHq0}6hf9i zx?nLg4Dbk;h>4S@#!1F8 zngP>@Nme60I6uF=>2!}rzUpH)LCbs#>gWN|5nt~tLVheuJ(ytx2S~88TT0IU`CI_hJlZqOW5x8E z-ytJ}GK_}ray-r8eI%Bu3gK6V2$!NkIBu-62i7scxpBPhv1IlPn9y@xhAiOtsXI^` zrK7f>!QZZ?>yoGw(WQIi-7Q}^T6v^DS-J}jxED&t)M=ZG3nQw&JL$wXn2qPR1$SQF z_$GK|Vd8A3pyl5S)Atb%@{RQuEXRDZD)q9}G2m==@dV2F%-J!@79%DGq+U#h&)*6f zhY5>p+E2@Fo|5AX)beIaC6fCmMoi{R9Z}kAkIg__avD7}tmv&!Mi&U5a9r;n+!*v2 z1{qu17sU|2tf_3)GUQ|a$?r(Te%7v!Po_+fcRcB2Y8WU39CTf~gX`+;Z1^1D3*joo zpeZr4t{Wuqq@!a>cXN>S@lXi_0DS#7N=F7|F3!AXB3Z!8i`9dEsB`cy)KMELo1=hG z&lkHE;@z_Rhej!?YcSbrY9&us3LyMnP#$m?_>_s!+6 z8F@iTLQ5_r&Us6W;-YwaImwA?23+ewxl|dOu~<3c8=z;8wQAkQ^D?3^!!^kjb!d^+4EE$*s8iVMV$Ty`meO)}h{%KPws)`dz zuW^VQmPZet`YZms$T61QhOtWm`=g$X^IUP^>-7V*anCA)7jXD8VX+J<9~IwV zqp{bHZ!nhMQDpG3u~*lgL6Kx7xahIr;|?P5GdI7aa{>}8dpAHo-U3`51UvyK&|Bps z=kRC1&xk1?sH8A00)~pq3adoN8`FokuwIG+8VrAkCCV(!g3Ttqm@+4`%t=~i0Eu#V zYnS$vj)3Q6-VZL|VpR-jD;{JFI<2oMEkKMl?+We*jv}Xd2cQ`y#Cyv6-1TL(LK$l& zRl;9cC`u;XYUEIc!Jz=cWT{!nnwlU4GYW;^U?yqz`sbPv>#h>aU?(LYDKL_ywfexB zc&Z&9$6!nBU>5~kkip>hCH#1JLgbME$AqsnOi7RoA0&1`s$aX~V>-Tpia^h62d19{KR2A3y)?FRy%KuVaVhR~V@b9{+H-=PhtLf8njom%aHXImc%POd}?_ zrS;h4Ggt5G1VJVD_k$=eN}^-iA~#|(mnb@9{BjEX3QK@jtzH`IrQRPWwo$)Z@^A>0 zwK+#Im#fIF`Ww98f&L{Ed$t5Lf#>6V-_0rKVAwFqy^uwiCWQe*ZvV zR&qv|M)0eP!f4mQE+q7QAEqu38=HC^^B=&XBkBxOcla`W(Phl;RD1(0^RZbgO<<(0 zzzwpQ)u%5`zvt}aC9|X}jTO?vr=EOk^Ccojx(>N^OZB2voivr1ca=QZJ#I6gjhJ}3 zqlhs@7rgqdDj|YO21A(uY69PaUMgb9@8baA!mQFPr@#wZ+SdYx69g0Tmh&UT@R@FH zffrz~C9t)YnTfJV3l&VolUb&(v?-;K28Hu$l0pRRzGI+F&#M4Jwa#I{4D@W%+TdY8 z89I(-%BX=5%)~p9CZU41qht@EW1?jgSoLkRR}*8cac%u;J=MW7ktKj#6b>VxH*ReD z49AW11jr(C7or3Z?Wo^ja9#D??^vKIG(%>;?F?U@R|;6l@68g>zLLg?SyLsWd_WhJ z&Gyx;S4y?ryJjB_Xplp9%|3+lz$<~mm95gM70N_z`W|qOCx?cg0T;4I<6wm{die?H zkq1Px8O&ms!_-S%5*mOSohzgEeB-@-}GV7_;QNB<+V#Iei`wTMxYez{|+ilii zH&Tz@ke`iDZ8k7#s-+rR5P?gCilCcjNH%Wi;{MD^g2&p+d~P9t{^S_ z@)c$O33f53eaJNE(5nQbO^ldE1Z9RC@W9o*Zczqq>iAdm`vB&fM2LOfoR$Fs{(dl)6k})|4(2OY$4nKM%<_Sb_pgnD_?I z-TJci9HANE4bSR2c_Dx91j<+^?f7K+GJh*IiwP4Sb5R>H>DQu8@Bp%bhd@^%Ef7Nt z4P2PL6S>PUw~*Z)8zo)BvLq!F7QcuCo4O1$?320!%z%<#+P;9*H;D(yu&y=WBa}-@ z+~S}X5@8lQ%Y8GzSi@9NzGS+gjKT-XBdZfisXMqqmr;(sz_;z1jLx_kVfq#sHKfy2wmyftWIgM%HAxkc*+K4_`#O|uP`DS;W5_I znxGDj*)d2n%1FB%KArdmF=2vZtn|?0hx}q_%Sq&tg%6(lhitWmNt zhH{lW**&&1;N05>kDDKR*Co8Mo(^;wyAhKoW+9LT1fziqt$|%c^rDD023Pk4yI7}s z;7plzvwE$8O3|_;X;HLU__j`?5n&-m@DRZ3x-Cu+N)SMWuZw`ElIO`v^3{AYBravV zbl32rpd>CKPaL66E|bosGucdrs27&|CS*hX7E@5h5u5-ZzzR}*JXLNXn8A)|I4Gl9 z8*eGKMZ6B00jxC3*|BmK5ehl#7tiITOvGL7edxfKGttvG~lu&J_gf2 z;1GIBNkJ#pSfL=8)y>V_Qb|ig14aN?!N84Ql}M|E%bff0pbVo_ym;;uycaW0Li*!gM zCU0LSIsMK6Phv0=zgnwLWDi<}9|M9}-Q4mc%5VodkVPaepq4Ds7r%Qzx7)qU>+I1a z#Hn4g?2vz@3!D08_|6qr$<~$f0xC>14p>1Zqace**)&8?Tcx!-Jkg$^beK!5317H8 zS^zUdx2mepW#peBn+jQ7N5g59Q_Z~@4B*idg{T(z6KSN3bW zc%88lUvyJHO4mK9|d7Gr4p+W0TCes(5z~?o{uw$a5U> ztP@BQ@^9K9{D^%}bO^&eW=96&&WvIo=?j+Cu5e5F)D#+xa;+^fGvUiH0vOkLdEGm& zY2~wSq?<-CbSE;vm}6^(tSgd!o%jYDiU>@6gRL22PmZVX6}bM?^*?^!*^dY7hURl; z(xz1gkNt6JaijE_0GNo-<$?F`3e4Rh&~2;et$FAM7iMP`W@fCGYu+0;Ajk5k2b3QE5Z~gBJ)Hb%DC2x` zjSk8TKVttDaA)ET^*oiCt2S=tFsKH;C;g0=DwSF;XYqOvh6gIlO7EG5T=l&b4>L!D800Q4 z;9?Hr=Gqz`yJzR;M|4sqtTEF85J!p)teFx^G4mWHoxu_RNLp z`_4_?rHgqJ@mS)aQy;<|@Y3$JO1*52DM7racOH}>rYV2esN<3+9>X7htz0jaaV1sT z!^P3zNTKAm5z}Rag~?>xPeI_laAuA+Vj|OgIr2U-=}^NI-4qX+JZtj2Q-Jd1)EXeq2CQEG6FX`t zrYlN<%d|K%bMfq%Oms3BR~PIaI+WqI#*V3yZIv^P);J&H3RFf9=B9vWSa1~JGU`VzT|jjNYO z$xuxkg8*Ro!JAepvho3Rte1wq97xl~H0&a(5eBgU9V@Jn5mu_Tg2jdj(?vUY;wC&X zVjAq?YRJOX)CSc&Zfw$^Jm93c(A-YkW+HJB)DnieG+oFq%*-y%&iIK!2OGJy))7D% z)^q;!tnau5Z72Yxl}vZR%RwHYSMC`QWBx zs)rqoE^JM(I-1LHllN@G(jayY!BB?A8Km{b1}<0)LG?@AI(1p z;oV$C0~aPi?sI-MSkW`XMI>LzS{ywQzY^id5BlqhIw7uKCbC(mFr;<i^MGskfScCF%dX7GcM+v*6|HH9yM@pMe~wwxnU4`#vNHlpLqKf;2!f>~629Uz zvv+O8WM-1)F114$n`M)$uAdPT0tPFTu`b50HY3^9AVyfdR!NMk{qoC0Dr<~ugskoy zP$o{zrt8C3%11KVfJRI#5)5nPJtM!IlvMOCrS!#8>N-ss0JG!@1sX80+u{&Rc|jG? zj@FA>XkP?r(vgOq2( zZf0|*3aM#q&aE%*kq!n$)qV5tBLLQ$>o53;vit@RfMcWzx4mQXCN2ZozkaRhd~L+U z&B@ZN6+LL;(;17IL&9d#qFa-MuMt!HXx@8_$^;^pE&BhRj@5b zsKYuGA0-jNHL=!R4QoJ(GHktMy2^8j*~pahbsYtku|~Qw*+rY?3I$3gU5o+^czYj3 z4ls1c!JDXs5lU

    P0~=0f$6|#FOO+S`OGPVe~|D?%b}R7AH!8a<)q%9l|HVDCW)D z=FvRTtX0a-FJJbR?0EJz5c^x_PBQV8=Ylfi&t&HJE4u@$egeAFhoH!4EE1+8%5Z#SSunNV>jVova^Mgm=7&+>y6P|RNhPsItiz=}HK#2kHj<xyMP!aK4~&u zw>gyAEU%uOywi0>(J|fFdCPnwy9z|I3nU4tT@rarBsfM!uI!i~=R%hm8I++TY}}Mt z6X7SJRf$>Cc~pd70ir4Cw3!Hl$W=hf znJ$T`v|wF9&Bmim3y2Xy37>kOmD>4`@eF^B=n3aQ4Z6hX+2URH%a+y46F6xwq zHCp{-UR-N$$O(XY-a{@8niQb5@Myr>=F#RbIou3}Vf(>wyud|P6EA9^j@A=ZD+V*S zA3c#HWl@0w+KEHtxE!4GaH%7Ey&{z%ezhY1vK%@Ji{Vb>$ZGGDH~6B3f?$q-)r*{3 zqxYAtS*!0f?>0xT%(t@CwTfrRAnOp-aw1ijNKHA!mryj35l&y|rf0LKp19+?2poaQ zm|rDu3~y5FJ?2+suzc1hS>~y()fV2S6hIHO%_;jEF##ZS7rJFK5eews;S(l^(aW=f zFzr~}3KR;63DcJ>+b$>&V8j&iJ10!n!DOAwd|CLtg$XJd3}vX|7swrTjFtJz5(54Ruom_X!Q=4c`^M*7 zfL3U=F!(|^lx$6A5*b`=`kkYhk558+S=+y5W}0b76d20Df&0)E(12AZKry6^m_$0F zAqA^GIp!E7&A06CSP!NhU#m%*YL72bE0po}(pL^+raa57sFOqz1AGw#Bfx6_5F=x- z(q-VvaFo@KOLCx=b1GOBQqt7X{%Wlgm_|tAuJN$Cdm#>G(wLszZlOS3r>1vB5+gSQ zCo5=-`$R}Bro=^82~NOeK|R!Aw?NBPLYLqwxAoC-rBdXtTrQQ%#d75+p^W3|S3Q6j zW(%qFHl5kc(wcYVc$W!yYkSKNmLuy5PlD#e@oJ!{@tU)4H8QbSkQ=eVI+a=~fkYKC@BvWtmA9^-t}@nL4PpRKEGjM#!-_R9f-$@Eq7w#;U3k$LW<6#(^d0PQMytaiQnBZjALiDrWf#|^`;AecV&L=JFK1Q&%` zZpW)1{xa>Cz$*@FsVLw=nw!L|Zh1kNhewpgb_vTA^aawsB6W_pB=XLPdK_u9^=6ed z!==CAYaRu}dewq*A{-1aG8PH*1t;(5R;=3GFhvNp002M$Nkl`eE%CX`(vBzy2@P)alob^T$KCL=OJ8{Z*>4H6NMrhh zh$@>n@SK}a8X1;b*9WcH>tUo}jg@QrL1!Y*-UNNYIM-l=XqbMs4pxeHVG zCF4Oi1~=7%iyx#gaveCyiGeXT8o$xLM9q80(cn5s>^CYdx`35z2en{NWM>QeHF3M; z@9ys-aS?F~sD;0tXK>h121!h#G|_&&#_O@1S_SbPq9X5%fo39D6nmcYC<@>!&jn@Z zWjeEftN4-Xm`syw^SqP-$O&N$Y8;UhLggrrYle3jFh`$Jv>ZW82fF}bkiK}qM64l@ zMX-woF6L?KH0y2{Gy^R+z>S`6?Qjxkh(IlyrPY=F>w}42!ij!UVAPWU}Lz_YxzzTXLEsvo9@)*4<3I(gc(q+V?U-V_) zppuqV&^2HTpr-pVVscPg*Vmq_LGLa&hD;H|kYLzsk%JiNSBA&0ISd_C(xpM9*s)sU z%`r>bdK++v#U5Rfx4cz^<1KcWIac5zf))q6D2a>0E0DZ=ioC^i z&UU^2(thci`^C3Pl`G}Stx9#HR^P1GOX#W`bC6VQJR6J6Boed9#F=#JQYL+8HvP~< z?!k%dl%t*0O&xh+Yj<~bb8}^L%gczej*UAXze@ZfpglY&!)G^m1!jyI(|8lqqGImI z)*4p^x5Ye<-a%&j*zNHTrZE@B?sJV5>)*?3ub6LnSAj@&d8@&X>3+GXh9!ixf*K?8 zr##+5Fhl$3nDk0%IU~3p$Xe82+!4B{w51rpC4so5EpZ{yFFXRx^u+?UjA6uCtSiJq z+O2MF6qg6~wA0zKVtmJAaLZUhGdM#dUv{INtWmc{EMmg- zxvXjO>8Xj#M7gHU&brA*Er*7Z+<;C%jbq zwQ1&S<}WRquPt4Mppt%$XLK3Ax~xnkA8T#huWrPfP-UFhNiL02PopYtQ+?%lKU#RL z(*ldAs~zW}*dBTLivX!I`e&N-S5azq`8e|E_F&ZD&t^8Kh(559G2B z=O^yXWiDpY=hLaVq!Pd&iAg&5O0CsGLIe6)uhp+ts#nXE*Nf$s_KOH|fI@#S z`Rd?y<%`$5GAP3$K06(8h;`0gLmgmOY?qo9?wCWiLouMzXE(Nf{nqMd*S7?jrpCuVGF|wNnW>LV72aEz z5Xj=!Ai`3tKTt5;ogMp-Q3#0h-0uEYws-$%bNee>yIKh%PW!E@)Fq>N0$n39Q40prdzEdd z-{_BA#g1@ST`4C{R*?E{Yz)E7mCaX(G3hr{*hPfCB4mVLfspy!?Fv) zIHeemjFl&0WmLFY_NyDl0Ls;r?7DD_v(njxAJ*zaX7aw^>qoscIvcAybBn6W8&pyX zcM2Z-YtHRKu93209XgVOJ{h zOS4)%L>dI6Jyu)WF*6mf#c-7ii0LUsFsu8eE6wI_F0KCZ^`$o*pVvT^zc4%fy^FJ- znw!oK&0D9n4^HO!`Z6^J^r0KEUXE7w7m}tJeP6^4hQ5SOz@(#Oqi8-nCo*&4si7>6wL4 zW`{ogp+#B&!E9`Di@J(1Z~0vI{Nkx>I<>Rc#p7|6?77?fMbNVeZvj@m#?G{&dB&RY z{7zqpBtEf+<{tBGS{R?&6lZAOE{-8OJDhi(v2v?GKuo&z(6{xFerJBI*HKq1#k= z#c`fXxCw+Sm3pyM+uyI@jBcA(U+89zQ9;ozji-HS2j*C>ZoP_y_QJ$DGt*216H%NY zzcDi-Pn$+eJSN(ZpHB16b}BuWPY;4%u!4rg0;2_QE`)R1uWsYn^*CdRj^=3+i%a-Sd%p0mW!ofjSSci(DW3^&~LS7hh=y)_l}BT&^uU)Utmf_ z0~g1nh>PW|V$ErbTO0@fVhimjy0cavK6AZR``OEH|K`#fOU0#Z`sXg4hlktOjXL}o zXaU%SY6&3_EaT5yxeloM)Uz-D;OY6Fzw3@U$6QW&VX6Txf?CusX@9=9R6&b$dTwrE zcE)v5!_RZ{PzDI1B-@x<6D!ANHxXv8!9Zg$04v%0?sQ^mV*or9rkBXe;Nr~NCc=4i z*~4p*ye)^x5tD3nQIzLghv_o36PGakMpy>&3+pS`MM4K4JaB382I%YR=BuL)Ejhrb zBCOKZ?IMyfOa*(k|MKcnkDPu2`IcYFi_`ZbvI+=m;8$_Td|AS+jbP}&%4IzynE@t6 zygXR%Hi zU3WcOW~xy+{l)p&U%Ynn@4tQPH+l&^fOvT=cLb`Eu8 zIy1LZ-7t-q%mTxtwJ}t?5!56KuPDf3I&ondg*nkKHnbC$Va6O>*AWcN<0v_oEMN?b zcave%Mt*&rE?j(PLm9`c%pptpO@UAT3rk;p-n^)ei1zXC(%n?_8m zj=DA0E$jOZd+cB+LkoU&Q5Muo7GDWk8bniDNYVwYZHCE=7|JMnC5Y##N+iBvh=EM( zK;j!T_NI{WggKuhFN0vl1!Wl0bZ!AC6EHSGBq6cRfiYBLtX__fH6i3GiA%GoK#aE+ zWeYt5CobNO2FPK_oXX5Wjt01-5}CyKfx3Nw*1}iux@Hbv_xP7oSeB?DgPH+8d+Sd= zaPC|EqHprj!JvsU#AzDERJe?oSj(jsJO~48y*;Kg$*~=8c2|xgB(T&~hRPNsb5Pes z@*OpfF+mKtO}2y4_@_j+#P6;3b$F@mKmLIbU1&zc-MO=nRE(ts2pZ?Q_x(zD6bGycLenD;#YmNXTq}b^{nGp0Gc6+430(?8sXgBT9YvETUC_gaF?Wah6n-F!(?po02|n}D1EG{cofNz|;z>w79t(O5G%cGON> z`n?*+S|-!8j#ZZmF-`mIlOs~oGNPwnh|-;1x|ypDJR|MbDTKVVb7L_1)?DFR!ZUz&FV z7r!2V^vvRiCntXBmA786RDY_}_=k(LkLKFaBc3mAT2qtg*GOMx_I{0c^P_|^61*^$ z+l!FefDnmRSmpw2fk8~netM9tt3)e&5S-1|9d+Xo|VfozT z?npUb*eYC6%>rDG*on)*Xl*GWxFDk<&?CV$<3|x?+BU9s9wgS`t&0QNKf*(zOblte z#t|ai}dMG+OOB0Hr5#-2CgnieZ3k&t{LRz~?u%fAFQ( z_Z!Xcnw$PV-gEa_?m@3%#KgexqKbUujA@jLOX3HT+1SOwDmEnsVEYySnUm7vd@`;C5Jpc%v`V z?tc4~3G4rtUoV9t?{yTTsby>)RK(vLPfN z5sooIOn5O2RD-R(JwS|{AuB{7mxEBr0`ER&&;G{F4u9Kwdq{3TGgR~xi8zBbtc#ZG zh+fDH(+#I4sAVc&m@ec2F^8`p3p37v%l!7r`j5VH8JD|1aC-ii@4M5FdJ?{Urd7=? z|EtZeCkkk-4O}`57&{ThsSo7(XAj=WSSXc}g(B_B^;a$etvXTK5r|Wg4D#B}yyFknVEGknb{LVhNW< zcw<{%yt!O@Z?8va4!^o6Wwe^c94ei%318LBA119q43Z>3OutPnZ*GEPSmW_6<|0>y zYzo=N+4=eH{e6PqAe#~K%uJ!T>oafrB5u);1*Qv7##_vq!zqAQw2}xA6Ct9q_IRu^ z(JLX3VFCNhU3Xw~9cF9_tEjClYf-7tn>;e@mv*G@?$2C0HP8 zWhbBRGRa09lTXZVm+@r`K}M}fPOKso7y4KM7o{i4%;b}kndHRrA-M49)|<)+FRtx~ zb_5}*R1flU?Z@zN-5Ar^#j&x&gEC5u*o<)xD|F((lol985}q8_P&>Osir|KE?jPlI zxgqyb=ja%!C54rT)-LG=N!-|eGZjmpE?h7(&Gbxm;hwoi@UUlQ4wE*Gm{|2SmjYk` ztIXRn=AJ#Fj9*>I7G5X=h@qDVamsbYOUz z2arYhxuM6qy?En{% zyZ|8js2jc)UGi_8KaC?CWHUdxy!KC%@%PvsPhD6N0cJ|v-T@{~u6A6zkwF>t0%i6_ z31w&>lkED|EUZRYz{ijR49p^eCchi0V*Yd&lwt5h1y3Y!_gC-BYnkhUMY!uYyio)f zq94Ob#-U3{1Q6jEtWBXUs;l7AC4kFrWpk^v&aSnjH8a2`imQA&o*5sHMH81m2~h;8 zs9yzHj9mp{3>~6t81`LU+o5DszpXK3ko<=N7bwqzhBCLS&H=trWw_JA1uN)kBXH-f z&6m)}c^P235)lt-jVjR(bj~n|N~@R}JNR(pRW8h543Vr*#wEeFc8y_-wXRhwMD+yZZz!tUF&xEvPln3yotFj}3 z>8ri2>i#;?Goo5$1PVN2cD{$5xdUqkDhE_jM-KFe%kwF=u zsg7DLLi;%1L&wzEFF*%Yu;5s2@w&t!Uf*56aJq~63+H#QwKN{xeD{0a&|s0c!L6(n7z7DTKK7sFdOVRM8p z(FuScVT?50Njky)lxtNoR4D!c3NoSph#?!Ev(>LO&6*Y?rY1J|7DP_4dMEIdSvzbxnx$2} zTiFgJxL_<@1}@;hrm>e#OdT&ZlR|PVORZQbdE@fN*qyTvifR&LkT=&~40}zYD2EC3 z6dqg@GZzmond3unX*2;YWg<21)pmBu>${ccuV7zLW-fP1pp3!pCYH%*oczn;>xd^T^_1ooilnFGlmYQP=?Wl^RFukB` z@~cQb3lH(1b7?0cbSJQ)UR(nzzH1L*YgVjO2&Pz+;6&x}FYlI~tFgjSyO{LJrp=_{#f9<|IKk>{yKb)gTO%=hV4#8z_uezlOF14W7WmKbr;uF59OrovGsBg{()W+d^rbum`9^614Q#WVgC>t!GoFiV+Hp4X{p@;=91%A_#~ehz$i@qbVO)P@RIrYYORTr zTueQG?fy$1|1s@*P<{8xx34*;J>ke9!4-2%&I_!&Ury@(eBiF{e(u%Z+}ZzNHvMfA z%2}@8hD6GGM-5|dAI+L~m{J)vJ9q)sYNlj0T0y$s?1#*EpbXSY0)y8uvDqlCgsd2{ z7>-t_v-9}fpGZ!kGm0d(V#uz8iwVI6`4hlJ5nRe^kSBtxjOb`8-rs8%&4`Nj3>Vvw zqa38k6hTWg!*yN&{e*bzyIaREHvS86UVwy#SR$=*7V%6Zu|ycmGdI8V!E>MF#t~%Qg8`sOlZUMVQLdOZw`E6MQM0kK&oLJE82A>Jh z1pn8v!jV6B>74fGEBK`w4+J;kb5w3?L)~*wj$0st4i4H2PCb^-W0Uo_-@Nv7tDEo7 zq^3J6B(FVoz~dI&h4-iyZ$$%TrZ%d|Wn%zSANoQl#5sXFrin zpe8@W8#8eHFg`#km=P7LyF?a5?4*dP$7A!e#AbxvZyts`pF0bbNzPhK=p#QNWnaxU z`X>b%865dox`c!VeG?ug(a9=6Go0T%nGlc)u73T5f1vI6o*}Hk9}hEorV$hE=ogmD zuv2$Ie86BRLrKt#)xB>zh7Nsq6 z*e&epTEPiWk&E3DE%_$6_uKKP(i1rvBJc{qEJ^z=bv$>fbh9`0M9S zxAi{ZfTp)id(PoP7W){S+`oEu@pJ2&|88p+HPdGn4)C|@v1Jzh8j+6&zoX`RK*~VG zApu&7c*XS_!6@>TnyHfJHBG<-D8QrWVt_W4eJq<}NHRcmYn3N1e9F28TMLgOlTZwb z;G*JwZ|{^hMi&)1lEK4hwzh+|3o9+}p8R)UC>zvsy-gEKEr(gP4yT!j$$h|+~tLtaB^+Ro* z5Q--VMrIBrxeBrZ>i3>_m^6#s#!yD7nX<)3G2bZXcwd`mb%bewGKzy4(e}afpFB() zgXp5stP%9MqzEqCTZ-V~_`-?kbPk~zCrYKIADBAHv<1rWL@nmeuk2m7)EP~dOZ^>B z#Oz^2J%n9tPE43+>(Bs3$&~xvL$xIOCIx7!>3TH{BRHNPDmW{4@~^Hv`<{jO`$-DX ze!ln2$DSKBtbxmjNuMke1!&N_I*~}a&srbS3HYw*v<0>3S=A-IiC{D%IA%y;46kf0 zXc27@VkAZ)v|sO#%p6|vj^h@^ZgEhHN<;;!%#PkMX+&89Ry1nyx)<_0Std5=goDQ7 zMp>JC!a-Ajn+o%{MyvIir8R^mKYsr7U1C5dNXDuUvi9ev7WEePwmCY~WNq0Q>YdpP zC;NA=-TWWdw*JMr#klKb*BLfnaMnXiX{igzs0x63F3*NftQ#?QnCvZ|ksX>sD* zAwe0Ng2|3!Y?Fap!IpiH7qBWTYo<&I!3^RV7{T0TXrK;i_Mh4;t-Q7IGG=;yRS|bR zeCor=?*2>yzP!;Mwz(TVJz%x)9gMal{yDNmMQ<$U;>n@j%aM)Kp^l0*uW8bS zoJQdrRTQz$tKW z+uDcYo10Hf;|?FkeV7-)5Q6&xWbrNS9N;18sV5@pf?p%}2_$S2)57wM>6u@#2=d#r z(#CudG}u=Y*lZJNk`421Y_^**j;`E>uuS+h)FDZO0GtKr`I%z!zD)1jlf=Cyp^83yUbb=7V$4fh~2w zZb`S{%fPRDTl4ResxR9K7aP&xpav8)76N5cNDn9-qS$2yx7LaI9X2lzk2m8PXFI8H^HuTS0>MRjr-)?JH3?O8DukUg4aM@yuI~0VGYpG`PH7u zF5W%+@S7XM`c;xO!>c3L{c41vb6g3W1-o+eF1M@eX4Z#X3Dz?~Gvr%^F&tI2T!)z} z3Hs$JcC};Oz(?#iV9()}E#XAXHl(UNm?lD~j7UpJ`SJz#cvU}S@86+P{Fyna9 z7|`vQbz+9d9FOtlQlW4hNq$x|92mGuBRZl6)rU`X##HTj#n$0Z=nn_G< z4?_e7reK>5Wbx}Api^sBLwQv;ns6C0=@lKUAo4$>tV-f~*7ecsD!{H^T}Ya6C%omY zIf7PMH(`vDdHu#`fO#6((Hv*uX|SM28$5GmJ!51fM)9)>=F{w>^~M#IP>~ z%HT)UdXh(w8CPUI%wOAGQFsM$i|C9@$+_9lNtzkpS}So&x5M0!v&|#ZhAbU(Xn>0_Gc%%2J2|pBTNi8F3e=S)HjUdziUB-$3PuFf;t5pA_ zRQ^ORJ2N?%vx#9`W8$JzDwX~H{oUQ&?al_8`Shnho$3I6Cfuy$T*;{2pO_sST3RA8 zY2nAA_3PIW#^G{kJXwil%DBMsD;XxgTq};*kSO}2;f3~L24E|r;(CBxPz=Fqal8!Y zA+^9zj>mZ19UY3T+U=f)A7KCue_+Rr;_|hv*D*`(^Q2^Q+(6K;5tQz1TBAoX(#(9n zavEZmQCFEVnSN!)TX1EN&A^+f?zsF3pjyFzhtK`o9sG?J}m!;MkU6E((qQ09ZX<1w@fV0a$A*7vNnzq73LAU|?; zG09;QUg))7fsX+LBr%fTTG{yDmsVfgFIGCn7Qy4U9);BM@I>y1PA~lB#aT|!TE;gs zpty5hNZo(r%)-xJx$!$YMWBoo#~=pdQt$2U?dbs@bb-y}bHV*g*^Jw_Cxa1zN5~^pgyr zaUJSwSII1EDV`BrF?lO0J0|EKr5u2CcIJ^sjRSN`Q{1l&hp&{Mnn{C$3F=U4B$)Hj;Z z=j@aCj~C~E;p)vlDVEn7^*fz1ppfO|GXv755fjB^ z+3+(&vJz-qjRRM}C_BzKU&pOTg_Tv_hOWZiU1Veq8&^<^(iQ<+!u0EH>RplpMp1ah z)Du-I-sRsq8_YI>7Q`)>vCK>s1Sy)!Eq6N?(X1;5^E`%L%wZNAAT35oX77HDpu_sZ zVhOp>r)Q?-wC6@En(=EQF#lI>tww@l%uZ282!Ej*t}eAmp>?`>@T z;a=%+rv#V&D_{A_ty{N(?*X2vbUHmTF;OTKrlzISj)=9J zQD>rKYK^58UB;B3kGj|H_QgFsc`OWFV*Ku6{q6-s=7T?rOPGEe^p?lr3YI&<$wl7a zw+?wL9&%0t`d70Kw6gZg`wLTQIW(J90wnK-V>hU~h17IkAt$}{W}kW}~&$dVT5bkUjGCuhc_ng;zAk zC1l-qXEAR$=t^k!EokMKa0FUHb0ML*L`YxeI$z}G#QI4qsTgpRm@SyBi=I_r>Ucja ztoGP{u%kqq-?KPt_7zDQ1n|o@mZhn=MB=>7`^Q6T|bI0SH!EuTm9mIceYhJ+9lr$AjLPYM3y*#f6T<36;t~r1O;o(e z@s^^_lyb3Dd0?ND(0gB6`Nl(wA9lTi%ivzAL>O1# z3#Kl0W%>|SPXuHUc8kbefG@19{a>7SOAXdk7rO=FR!BGh%n?XM0T&0mNFqSEWnH>t zqR}pe?^LP?d=aStzaq%w!ACKqNx|N$XuX*!hLAv-(p9z^&1Xs#oT(s?(3uB`Hg85m z3*JwggM!x7Gkg0tI{}P-{QRlEA)faXZs^5PH2FG4)Bo`L5_A?aX!hy-;s^3ds}SM# zU9(e6#dDSF_1(Sm1@##NQjzwNxIFyu!|aj(xPWHFOewf`Kk9ch&#L(8KSJeB8$}%z z^`|x70LL`rm|G9?Icr`*WDiJ6rn8IuT5$}8bIHQ`*pgYRXBq(v43C-Yd^(ZyYqn=2 z5f0`H`1!5kk)f5N^3oVk`yP} ziR9M6gJAyOSbzTB`S)5|SeQ6}b?X)DAy=l$h>6uspb5Vco?>^ucw=P+g^?2r+V3sr zYE}6`H}pgzbjkRwRqo2~%6+&*_-ko%T$I8{kzGR01Xs<3ETS_CSyvb1MPa=_e4{fe zU94w<#Zu^^BGI8u9EVfOgd?V?MjtW@1o!f1r82nU$*FwaX20F8J0Ox7`$NaTTN?Su zwDZm63{f$N2iguA85{fD#!lo=CLfP86<^%i{kKc2KkR`rk38}SilmSO=Q9Q~Lsx_* zT{kKyquLRl{krKxO*qczZ1TU6kHXO_6&#vQJu#doc*e>HEB-m4UtrJNbLg3*#e=)G z)-e&lpdo_AjI4!t+G<@d_sv`by;)BXv4@$zR=j0}GRU6*aD0IwGO>znkopiMn?T>v z8kYlmC7QApHhb)u21W6A%F(XW8~1SfN)=VzX4MaXZatd~D1ajwgh0S+C2k45p=oMX zlq?6creO@4xCG~FcUiC3baw7)IGAKLVoK*zxC-4Zm0o}QT0n?hea3wBI~tcclv@dR9C!U&jzLetcYbC2@%yusRPgx z!(*vij-qVh@Oa&E08N#z7Zu3+_UXwkNr|VTX9%7Q8#?)e^-U>PNW|Ya5%&G>Y5E|8 zMrdl+@dQZYKXc*C!LcDz9UT)>0hIaj&i)TO4WdQjmf&jy!fyaajqehUQcN-MiSmJ; z$yRG`-&f-i0hCb&JBZDd8IjurZpf(!U!D6<6&C4z_-aF!RNt@rYIPb&4}pJC_F=0M)G(!31VLmePKz zB7{=6cCYw}ZCpz)5}GTUukZ)A=EBsyNXQ}~*(BnMEX<#b8F;s=7&Z#rAiOb8WSF$F zTH?jsuey^ct+{>pzaXJupbTAam)BkMDW~Ii5yPA;uQT3jZ``=PxnrLwZBHcdu zJgcl09X(OoVJ^D?3yj$s%fHeMIqViiaB&h=*@;B4sF5f z8irKimlagR)l32y#VjUp$3!i1lr~N6*s~P{WuBbsd~}5YF*ejm$xoJlC!S}HHBv!?YdOn7Q^JoT0Z1kFHA?h%eWD9?-~P_P}2LoNkv3Z{Fr_5 zpxRe!+;)OpGEYy<)WrM(zTXSuZYG#Wt9@;~fW@j;l4CvX$MLT z5++UuCLCKre7pvbhf&8<4oa_kOvt*!7em8E@7{L&L_Ww@Oi-nfiX$m#uM;lOi;E}|hPUAz&u+7Exz<4R z_uhQY?qJKjKh3naEld^(i8uX0tGS0Wm0r@q;%%Z|M%rzRNye<4A_VIN1c~DB2u`k+Jb% z??rK0fodt98=SZMOX$m9DG|fPyNdM#f*FR2 z!RUkOx`Zq~oxd>nNsh86hy;ge=O*ubd;5*PLQ?yA)7h!C<*s_vyVcEf!XhlqrPS9F zP{vPebET9ajPZjVnj*VqN7oJYA+|f@OXxGs_<(@sJC&Slhq3i#DpV6_P3| zU5H2~Bz0GP`#6ra;L?(WXHFPxVrVxI%s5=&p2M~l*stv}e(O!XsOU1UT5Gv7UCiH= z%}tGCCbHRw?!JrYIj$-vyD|eE-z^TurJ`KV0SH1)j!<#6l8A)qz9nQM5f%f4ak;$> zT9K=Om@cQ-&dR{oqiBmLY~TtA`p{}B z7QbK@bJ~^lo31=SLP;jHH}pYuD+BavufhNj4Jzs2XoWLKp~QKNBKhWbLJ}$ws)JoX zFjE;HKi2lM3d)Ts*ShwNaKvb2xr-@i4Vvp^X|m%%8k)vVUbR$Rh03V<^66KAdS z2jArz*FTRwrI4P&19Cn+W!0@%>jq?k1C)Q^vGbIn3jj?=6$Qg4Xjy92)F*6Dk&J*C z5KP+)q@yBM!9Y?KgpQz@0VIz4jNnCCb*6(o1*~Uy)RM**XJ_uecu^KD-QBx3fsO+z zuF!IwaL@|4uvCPZ5YT`?7OgEJaoi>rGjHp;_>Gfu7ll-WsD%OWyqJ_7WIxP2W6)E5 z*>N=dU=%DC*ZC4>8^(!b7UJ>uVQLf+NK$l}czoBf^`i?qvc|G@ji>jnar-eLK$+)v z_eAfejhJwiXKjajlAw~vT`*ol5ygWq#ZdW)&AiJnk*hr5A|&lL@rI63WG|N$*0GKt zljoLOO5Il@Xk0ak#9sLj6AHq_9(tvo9bs`ZlTk7lv7PBz-dX?{F_~7M>8?$EWQ@n# zR=&ouM@~P%YHDPJN}@w4)m7X?!f0=F9JF|A0s>HcXb&z@0R0Gp1njzTtkvY(Z~e1I58xF1F%wM~N*%)7_E(9Y3AYZ+*bNhA3za=G@8Q3^+ zN6}>*s&n_bpDvY9MRsBvv`6C?#^}ek2bdd z?Z#HaK?7$}sh_yx%vZK|_c{x>n<(R|+~;naF0-k0^mOr+?Y)mo=6~t>(vkoG0CfW& zIr{0@sqe5FmQz7=Oa^MPc79J*F)?1-X{&BDltC&JFv&2G@Q*<3Nlv|IAdA7F3`!Pk z92j5hXjMyk=9E;1ol)tSaM1ydQNk@^3+H!(zjqZ0#z8RF#ZnJBAOS!ja-s9L!sqyt z7d~Y@HI_*&FOk;pP8Ob4iNp@h=|%}2?pve-#uI#qM);F5aC^^9-3{Fs11movinlc+ zC{yQVUtfPNKsU__=CcF^_beO4wggo5i+wK0QLD zCR^n-{v?OR+rczbpj#5U*uV*-KKxk)HnlppPXb^cpkTr|je;^&%S9)^6KqOiWdmZA z1M6a51veOI!|olPwYMq|oV(QOMbK4P8!_?9)Be^TzUOYgHO5u_9k7e6MgAOxks{~1 zXaoW0*k-pVaxSr;mG?Q5pc+u|7#`vq-8y*A(FJ8989X2QV$kGjjr)*%6TXO4M!=0g znTw&rKD!#%yZ_}Ymqkn>IrFLH8^r@VL{lZCs|=I)=v4l54wRvh&u(nJSt|d}*ABec z{r1YnwI|=_+kP(`Lq(a8w>k#=D46gfLq3rsVetpklAuH3d8W3t#hjbd?i$bFP-d*D zKtqg}&qp2hsC`O~`I6%*$aRiG@3zJo`;)xW)%j*hj+b}KCjvYPr9yHL%)p!p+>1Ff z4+UaCyn5&k=fI*)LfE6B4EmZ!&wK+>YmEq z!AfTRF88(!i#b?4<0mhvG!7nevsrxaTA`%SWw5yR6WcIs8Nb;YX*6qo;B0BHhYwj; zuKca;s}}@nBL!<5OhdvtNLSavyKaF^b$>fwUfo#=5F0uyz=Ipi+CGdK1!b_xMlj`#XLYc#4A0zCM)zpQg*+mq@?5#Lbne#ec!Jrdr;uzZa-PMhohKlXOUe52J z9Z9_pX?v@&u|L?@I@j&%#Wk1#x;p2?vX;rA`l(Z=zVkc36VG_Slp8m0NPHzS1=GCz z^2-E|JmMg~y8r+{07*naRO4(i&rCa!D^@q$gh+EFLqHj`nd6XlpiJZj;Yz8rGvyeA zj46h%%|!>cCvy{LSmy?w1{j@!U|4;vjUbpw#Vt@qqXd*M@MHMcwN{r*R_?2tucBKC zC=>0W<-NE0L%()u<~^B2D4jxpc*alK z`1Pv!Ty@P|fGIp>O;yIyN~xk0xS7H=pX)7YRt%ZWr6zJXa-N@ibG^B;uUvV0H+l&W z+KY|}k95dfRcxl>L}JQLR`9m$%0cvE#h`wZ?5fVL7%^!H^SOn#5xckK?UlnBIeMZ4 zTCU~<^gI#PZ$)iUzez{pqWrh?taV!#fW~V@Eq+E!1D~w6^0mqU{2ouC=4?8EW^OnV zDkFdIME1G;gDN}0*X03LsT3fEwG3{QeRF`VC{4IO|Kk>v9a($7# zG4o6USI4S4e5XJeg=6?&?(vm5z~$hp6dZ%FT`_zUZlWd97l^A?v)(X$v6u;h(b^fm zS}<^}UfSe?9`eVf*$4at2GS;L?JKKKL*Vu6Vs!bUDPxu{Oy6gP4z8~K#4~;ZCqG{- z%&ni?Md&h!rZTpt)Q`#GN0h--$8`#Q?N;jLN_`2VDrx~qA6$IAuj&DX@1A=EGL0Y9 zqatA`Q73s@5FHcw%3~gnKrJ<}$Gq*zh84>AO|o||V#K7iDic||j?Y{1_~h^k?&ygs z4lP&diP}V^UZdm(}F?yxoVk14uQqAAO#MwKh z?z4J)arKUPrf_!Vn=4<_v=!WjxXQ?`7H@cu`qE``%DW6q4%8gpS_rpTXuSx)k0_(P z1ACk5H^MPS!)IBnB*u+rsFY>Fp~p%%v;^NX>|&~By$@8 zQ@67gpo3DIw5K!XgV%;d4AK2dqEBnE#0p`$b4FOB%ixds{HlW zuR!<>Su4U~fTwHa>OZ>Y(xq%~#zN12krGh`n>ulhO#1D&-xeH0-~v=j+s=0R@?~T* zc$z^N^VCyM;dlmR)4liJE5QvgYm$I!avhxur)FEO(cn-9+Apn)rv?-|Q#Z=Z!Bvsl zE;;-d<@z0|jBB)K3KuWUJmAU<*v0FbMlb^qZ2bt5nMAfHj-l=|H@_4xw!=IGS%g2x zC@ir(7iN~a_n-Nex3^!vv2)pxKeb;pt^o(gv_LrvHZvu$l;)@(lYxy}94iU8Hnse@6Rye*JHGE;^W22V7=QUoD1o?7E=W9dmU|y;@ zlA5C!Ko??W4wnAre(}@KzbYXG25Vu+T0p38dG4j(fAs!`a~4a_z8aSaVRFjVih#lm z#~P8#1ZsKcp@)Dqpa1;l!80W8zyJQzr%wZ4zWBv2uCK4-f#!}o?x4F|HoI3WqGtqI zQc;=j#$pH8sILJX6mE^Ttvyp=X;Y+mQW6qNe%#Is9vs@tm>rc?0gs~BU7Oa zRUGCc9?eh9T6_~ov624r4i#|=zgkbEeX9p|eOtJ12|k4*KMEG%h2R|qOmG*Jp^T7M zXP5xtEcRn9M8Up_({BWKM3{?Ya2|Lwj@QBA^Lu~e8)dJF-k;1ysB zY?yQB&Rw{0;e{7ofGERL26nu7@gjbK%jGiorUPX%Kp8G8f9iTQ#~S?C*}6XdI+?xy z)q#gbK~L%3y{AMwkYuD>86}b-*fl1p23+G|cxds%EFPXAbYu`)y@%cuC59 z;Q^Z*)Z*@t@YmKL41!}0ypD#`f0jK^hW^lFy5OwK*c%~@c<1w~%-|kfn7-eP9Ij7* zbwNH=0W@T~cr$WTtpEuGA-QHfX^|u8w)_(q%2}a|b>{t=naE_sKi>NGfR^EYE&Js| z!foq`99OxBUNrUCuZqs+?JV|04l`HrbHjhx>qbrzt{LEa+{$kD)4_RwOB=_G4!97m zw$d7dW(&o{HTZsaZ&i+k^f8iQFd>{ilLJhVd6=G7Ybb;mT+7VN%#dDOR6bqV1-s16 z&8fFeBEc0z%_LRi(#uO#a?IaBpiEzCmSIg*_bmuBa5fC2`?{L&Y$RF^rh9 z9RpGLzkGuGtzO<<`pVhb-Ng}~^58O%`xZte{9LUL>#O&Z!of4ZrME&EtBezQ3<8*8 zP>a>COz;TPu~?!4oS?U=FPTk&6|7KZB4u%CYgX(lZH28?sfM*#F1;7ZP!gv{OMBP6Re0S4 zV(^&9*MQ#_4<8A5hQySQhr-Jn^S0^A!NmYySHLD$KD&$gI|9N)=<;I3glb%@e(+^J zUBF*u^c!-Q<@L5tVQcH+zC}Y8NmxssWJW#%kVdT`xBQHlthZdqQHdWsX(4<&)3F!^ z&l|P+^k`yj{__X#`DDlO?)NXu{d>>9^7UQImruxZ{7_-yUq5oc*ld4lcIuPUh3|dw z^^kS@Dz;HmADoj0wFOBG#!475UA=nsv!DI!op;`e^aU{ta++tKeHLSE!7=EVL|Q|2 zKaj9S^gwF(i!mcyE7sg7!Rpz;ZF+A8im&#M|t6Eg)I5;se;BaQ~`qgw-+rR zX(3yq7}W*GNR>}cPtryB>fuYSJ5rRHL>%#nW;NY?_uUX;5Ws+DzVL-FeEG{?#zLDm z`4t?)stqjF=c3j1w8*;Xs*-r%!`j&SD!n zJw27rqv5h@H@uT}k~5+i2naRhUCRLI!UG%8V64raay-ghhm<;k?M{z>7jI5q-Cptp zSQxUwcJE3j-Sv0F@wvB{NFY8zdn?7@o)Jz`vuDhaBc8!R`{N(~IFcIxjT{nPA*h8$ z;;Tdhyl+i;ss4OW9K@!wCJn`r?L|;8QF6 z*R6U(jE3-uX9|jF$4^m$P6unLNM?gGLbBolQX!Xo830sh0G!u4jPvy~1e1!QY_gt( z=#`rFl-;+FwT_WVzg|8v$5AQb`4CqHMp@q^4nXDD=%5T>g;oa40o~i*Jw*&nz6B~6$M|;J2_6RhlSHR4`U^F*p(wZ6W&bNSGqLokm78pm_DzC5}~ zKFpR06JA`S~k1o}A3jb{;Dlr;DI!R^Xy% zOLO5o6DSjMHa?CziA}nI2ZQtlwb7%GKKj^WkFncRQ8-n|17)N-mq~N`_y+3@Ww2LL zI3`t5IOZ5`%EOKNRs*JVjjkC}IL6V4AzUHBUjtPX%D7lFmaHgD1F|thHPC7mu~Aw} zm(BO}bY`Keac75b^qYqj&nVcLJx*(0TKR@|gtv7LTwsJH_%aSYi!fAZ)^95kb?7p2 za17wd<;q1moy@rXm*CmO3T3Rmn1e^&h6uK|14c|UWA0lno5+XvjZ38NJ7*qr4FKjZ zVqZUX8}9}2e^c#*N|EZ?jwzO`H7ju*5cAP+brG;j)K3>alfpb)VW15BZY`C8Gch_N zCZLRjuB_EPUq=C_cXH@ZW`LE?t4pG1tNcvy*$qGUdVm_ZXw>3b7p0_DZRm{)^m&SuPdq`4?O=%td9g^TgF z>(XmfMByG#2JMXc2uswCDURWzToZn~KuNrTrB&UDog^Bu);J|wRRB%8Eq8J3$z5}I zu-hH(TVg369CcEMMy;Jl7Q7zY^k8r~^UlLDa&~BcFr~g{?$LmEN*K)xP>+Yf+6eq7 zdVwxug)-^5+s)-}Wy^Xk{GwY6UeOmz62hKgNUnUni)$I3)(J(IDcfm1x{OX>ca1En zkX8;G^akuh$Fxye(K$LH-#5WgffQY)l2KT{n+~rV2~PM$ywV|2gR8rYn9wG`UkR=< z*wJis$P}^8bJK-aOW_4MSWyHAM(jwjk;Jf)z{p}b2@r+(BcRMpq)3V)rQvX! zeR`Xo-uvzQo==_My}wtt>R0EUyS?rq-$mnfojSkzRh>HLRDI8HZTJu{^xwQyk7isz zOnU8#N5WJvA=IC*_Lv65U=5@6Of~LH%gf7nXiIb%0?bgr3K-*GGEFKa1@2&=X3B#y zB#;xU5i%+ITpp-0=!Eg01>0U4>FQf&wXL@7nJe1@ckViuD;Ml;(TQF*dL6RK1TcG- z)0s)potuVBp4UCFM21TF0VejyDy3A;;mY}z{eS-OQz>59`96Tbd{d*9diNFpEGp?v z@`=&f@HLO=3>p@bvZs4bGHen^WlAJ~paLjE44zYCkHpPc;84?GccQ1}*6x~=DT`V- zRF=gu4`N_!ZAovtMY^iAh*tiXK22>bYJM%H&wd&`QpVW_EY0(1iP!BjtN5 zNpl%yFF({F9M*SNdOL>L#w4H7%G!FHpo}^(ZB!)T@wFV(+^-ox>o*jBU%0Ul%Qqg9 zn22h<0vGCI)Z&;_7A5`MM+2hGixft?yC3N-UEJ9E!Q%3BqfJ5W{>UPv$N*YS)BG^L zzqGQxvwNy*u7RWsP<*wvSBATXT!$G8+&~C2r`~V5?zjHw2`* z%tt$0rZv*xq2oT3VK6>hzl`%Xv4i~@EeF;oX7(i|rjUw~=hM_IV=lwY1Y|&&pvFH8 z#;Kl5w#{t~2 zKMLXKa13A0eQUl$vf0yptlU|3IEF!%#;3ammz@fKr@L&~GdA0>g)*stVY{&1E{xBdBRJD7l&xe99J z5cneU9?WG-0wVba^(py*X;2lk<*d}!E(Ci?Ph!tNxXP9Of-@u~m(^odiRJ#w11EobPO0Wgdvxqo@i zX>~q2HiV{6BEc*!mlf!vqoV zEJ!#WWYrQ#s|;oOSNLA+E-iHoE}=8p+34>c3Rm#DZie%9>R&~|lF$`_1Venx`JjO2ILjkZ3bYshIkfGA{v*38o(LDeQ3Bp7RrS z=7|I{a~Wh9W=e|QQdP_}dPg8<8rBTg%FHDr=aQKUOB`NxW$2iK@!*XQ@Irc2MVEWP zMa2oUnL~4~WMC=5jOds!uHPmQHk#SKMuZ|MS29z98(*2T{H+N5+XrRn7s1SY7Bn4m z88f_WJhp?HeVYOOKo5H4L*JCy@L)IQj~(zYc=*x50X{vyHNUjHy*<=ztHq13LS^=w z51-)Q^v33U|MEw0E7GbZGz|ND&%OIFrY$wssapLl?d&iWOvs1&`+$|A!c!|WjCpao z#%QMEg*^t25ffmPO2quVc<~|$Ccppv?;k&Yd~nch!NY?tKQ;xx4JZ?MBsVt!WmcWr zw-ZiywzRdzyx-@yok*q=*D60=ALZ^WENPRY=^9*ec#c(jn~(Nw;>QH)32KYS!)RtO zDeV%wLNjdlxov=Bq<2XWt@`PjL%KTqstILi_|VvSb9?rA=9|k9)IV0o&>WE%N*OSL zvRdAlH=)cxHP}`9pdiYcpfWy0#}q&rXhhxKO!%iA~YZx+Cy|#HMy!(h6od>Ev+V#ngoOWeF9}PGHJ~w2L$^z1Lzm@8{O|z zVXj}F34)U)cwpr-*;EnQ4js{R4CIe$iyc*)LT1^>r+Dm$NG8~wzd|xc2;(G zHj#Ye{*xtC>gnpl0GYpoon0fPuF+EI*80W|a+5cqtZ_JoACmKC&`f9N7pCX2e0g@D zkE`%6O3EmYKJ%H+kRLn#rUkfwa(?(`x`ewEt+@3Be;OVde=P3#Z}Yd@RNL3I;TrZBAaAqg}eW zc(wTD++Ru)$H@RiNELDA04x$`i>#dNAkqxU4Q}4N$-TIB>y|(n&K@~b z1rSBpW7x`|Re`!|psdYOz7JHvxmN9hHeGC(b_@)|M#r||lHC$B%m&7pqg^5kcLNOf zzex^`k-?<4Pjjd#0LSilcJfKHiB_hf!)4|&4%5e$CDN9dzsiJy=>bGNV=zT%ysm*& z5Nk1+sQI_$(gN5n*`Q~?Qz@JLV=}+S2Vq)Y)A&~@0Wr8-aT6J>REiLEhh(b_{qU|g z+oj}fJ~2*A9I9Yux&4;E2evZ){67Ey0CphdRJ@-c=tyd`pcen1Sa0wevLnhrX~=7f zL5BQGu}and?8p#1>lbF{(G8_&-tqNd7yqAiJzPGMz*PJj5tJ$Tkw7lVvuDpf^UO2n z&YiP*=r}Y!#y#R@g-~XDWr*)BXDrf?F5K*_9hI4O3B2W&ws!o`E5TOXH0)30!WsS= z9${+hdZ%cY*t6wd&J3WrD2`@sEndY)$mDi-@VHs8l@f4P5BMg? zWS|#Ts}Mv_R`S@UM^9-1Cnm}YW%j{|2?bLMYwD;D3i~_*_`jGvvY*BEQmNPl;KB{% zmjhgABCTR>1#6DGVA?@SkLvae*;M73i8Tt1WVso?=a@CE#*=jMsqn`6W+ z^q9!}!Y};7$3FHk01Y{tW@ctccYqBI)-(8QL!-9dVF$bG&d5<*c!ItkoI_{ri#up( zvyIugvz+0gUE;z`sZ8vl-P$S2(=IJsX>DKa;08u1$QDYRMhG=qB-jjM1{1ZQ8=^ix zdjR>F`zu12 z$I7dTJ-QNJuI8`}#8*w{x~th`bpXUbJHM0o2oS^NQ~%j+94iY_JtZfi zsQCt6o_X1XGW2p{^jtoa!H=mw%VZV|Nz7$1kJ{SVD0LY&twFZP<;_JC$`lM-8}yz! z1Zo5h*ui0{VNj1o?8wl`pb{O^>gMI3QVz=xOeI`cKvNEshZ7UVWc9lRpcu`}(2V8u z*zm(Q7q0}}1&25>?L&TSI>m{Jg_8o#q6bhWxC{6Fko8RvNiY(em|`dc4LXQ`vfYPB zWlr~&uC8zVUw5YedL?U8!<~M1YVu#)x+f-LF_UAxJ)ca#g_xL{PmPb#B$f04ut#@h z!@4TD@VD1Dm;|Q6Z^*slP{Ac-JmitMEG;d8SF%uf?hl8A%j1;L`y40(Xh1eeD6>Q6 zMIeF;iTmLGwwE(gp1#%gslb>Ag37olsMyMYZCbUj6rWjhv!waLT5aDYo|c}TZa(_E zx_D3=n7A*PhUEr;g5PzKtL6bu?4DJvkuhM@V(KHv`iZb^dp9W!BDxIG*s9oN2hLn3 z^K)L>SctPQLK2u2V?k`fsn)vauWl^`*d;T^v85^TMQP1k0?H8PSZV4g5EQ$#NqlYo zHTKPexlCY*EWINes|jVGR0UI8{jst96)1CHE>p*|v0tQ4Icxbj_mq&I*|CfEYiQ+u z00h4}Ir=-dW`6(Lt$+K-Ar6}vz&}2Jnt#o3@Y|jr=zryd@AYe1UIuk>;jm>Axbgsw z5Yb1&C?jb3(wDw8Jv|MY0l4Ih#O)?MJ=g+E4(%XqQ?*nkgEF``=dioKr<`{cgY4Yt zs>I=K`FLE`$%S#)V)*Q%rM0c_6B(M6l)m{<ug87&i4SpI@z zb~byu8#21b(#wQ0MN)D)C#KR+CJy4s>R4V~8yW}$|0G6TUp4;N(x9MyVtw2XsGFMs z6c8qqscRW&ZV0to|FyA^e|~S_;_BMx?#=F-D^u-Z?F+@{?#^)G$4cFQwIT%vzW6;W zYQgUe`3f=^|E!d8ZbFeHz(oSjPzJ%^yv>)n(mSZceyztY9ywkKlB-B-AEW|aMWR|F zpFlaYQmcoDJZ5WQ46Zn$Yt{nk#N0nj!;6*-Dyd!C*{T^pguQ59&8+qy9q{%#>WNgNDUcuou+jhXv3Yg_h5n^?kpn?8U1eA(#u2}vWnz$ki?yb1bwfJXx!UtsH#H5c? z`vfzZzTiMA6WoFa;n36~F|dM8O!Zy@tCRl3UKoXVO(wlvU4Qei+f9D=>UEM3)ujJ1 zA=usJV*ksl*SVZuA0HuDZ+=u|0sxbjfWM#?3cg4Ep+kp0@rh6T{LlY9f1iH(X)J#U z`-@b@$1(KMnZX(l%4E3}A7t&)4yq;gyWZC4QgHS+E5nqwR$1t7P4hdaIgpwR4_%WGh zRbxeDXOm#E8l$AhM*9slGk7j_WjUuzyP+b6vGMrVEMu>Rfp{gaWP`@A7;a-O6AzM_ zVN9+Qx<6(!VuQWhD~~P~4YT0N?k%_x<88{^Dmp``KUmrC)mf z`RBnaLP=!2Z+`QeSFT(M8v2L4p2BAj%2ZC2}^#yMeHzsR6kplmjG> z+?qYKgBQ9B?7Kyr-|i73eTMys+#bu{9PLuReS_c_5x}HoW}k743B}h4?4tGSr)~a?00}>8k@uRwK5YFNOuK6h7iZ7MS+W=7J!S$75H246?J!Z{`RrMJVyWR+qW*S zw(D7~cT^41%j&F@aDioaPD_T8?&)za8(X<|C%h;B+{8gPy+GUy!bQc9?xZ1Zu9kePd` za;RBg3p_G>s$NYBW;!6PRM*tktLI)^HxMU-XLvcAGy!l^f(^`NXr7YykciQrnN(<> z-g>k)Ty<(fPtzP9Q`rpfzC)@Jv&u)EW>wN$oWY0?23Yn$CQC*5&A=h+Xf zKk6iB-dpWfihQOo+YzxRV8zdNN8=N@wa&LX&uQ(FtsK#Yh}r-IHPMU<8Ip^am7x^4 ze1Ho>+jywB&aWx~U} zdiT3}7!=so%^AjA2FqW90-rzhRM12Y4-cKt4BKc)%$!X;Ic8g_6yPEkON~Me(|60X zWm%7)jB?|)YS)Otm|jJPCX^|dG)j5;1!pdU4L-@38VXZ6y?o1b0V`rI!!Y)wGHna^ zOD_m!Fe|2zvdr)&}iqSwS#vU#N&uq^6#6aDiOrSXbwNGC5kL9nv))dV*lS{`Ie4 zym(RC65$uqnah_ibIWeuzWvp&eiegXVSMvR71F=OTJu`rc!8G#K z2#U%K979~0mM6#N*((@lZ=$>VzdCXFZ@qozw=Z4$;K<;!BQBoEefv3pg3-V8kT%93 zXN?nk2**50`^GoEaqU{!@#3+^9{bqGK86$1 zn{U4P!V52OmWX+?v$Fza=%t(BqF&abap>SgA?HWQb zBfdqXFK9cIX~lPZ{WEmXB5wu|m8qW5r}JH4{QCP_{`APuzc(@ZzsxTD+N+np_RN!` zi5TB)A7mN62%2#pI<4w)erx;JUb#es-@h?B^r<03gOT46*&-3TU>O4$U%5{`_0$JH z_(9y7IK+B}PMA#FLk2Uk>WyLy^!ljALN<*4%3+M$VYZGCuB8PzH@yETWL% z;r&D_fXJlf)E(SwY-!D#6(FAY!VA{m{~tg}zz5louz?YAOHDpt9i847${?g6z6%1I zntV(G7hPt(8*`b)pbSP!rnyyc$#K^>F^zOj5iCof4CxCdo&LG?zXPdE>*us}9GyF~ zwPVJ?=n%=UHlhz|z;3s7{{^8pCzyI2$KYa3hset&r?%oBO2nu5 zW5Hx~CyxZ*@CSz)lhXMm8e zCUH9|&3&|)j!Fq_j+qzG??^tu(bwcS#W;`XT8}tbnZ~XFeRy(T>+jo zK~>Fuv4bA#KNOPzJBR|uei@&lCf?VD3|2rH?0(Rf#SNKZpC`=Cq)R-9aoYxJR#rEL zBB2lFSt%c@{4Q3vR;m(wXVeU}2`IDCf!P`6GX3`Yl0P2ot4t`vcSwFiIg35Byy89=PLC^F6inl{Zq%84npAfsj?sbmqYN5KKJcIi%Bq)AU#*YBM?@+()a ze{p91Z@+Qnf4E?XlZ)`NY5Y~)FWc0a_h%-&FwUpyAKUb^!g^AxH&(_BU?;}nd- z=g{DBg-2ku6P9|b`DYSScTB{VOPf=Xynzt{Ws1Po;KJAK&@zMb9W|tV0UtdqfBZD+ zkDYmn*-K+hbD7MEsl0Zz56bX;kLn6r94`3)%IJN6KnleAOpOE!i~#8HzO>w22A(XZ zsWF)K5A~M*`KhD7dhOP~x;=fQr{}*od&(rUE9t8pf*iZEI%_Hh0nv@uu zBdDt~5XLyiqUs+4gNMf+tto=8Zq%A1RQrVVh{L_N+#fq-yR$+V`&vH-Q%WxNl1T`} z!E(YpC6#~}piB-y@l)8HU~2P&TYpx(Nn?~`O+v0<2ErfdkHrw>PDoH-CSy{O!0P6b zDRIG#OUIcLcG(x+D1E^KSzW;~VEUB}-&`h3Ur_#rX&;nf%;=Z|$`D#c^-bor98~WA42btY+%Mnh0hIAQm}2^x zHHdS38ri1{?$&-o%1;gU|I?F4f8*M%fAaRN@t)FueCk+0uy+{aBpdnfwP;OAFq5T7 zQr{-+h!8UW^zB=~h~GOh`R;xA%QqYl#<)0mT_Nax zc>K|mqmMM)MZtzRR^aanYGLVL+o0h7t*kFglEU{r^r>JkX}MG;WhqXu{F;}*Ltp}T zk<--l!8VOy%}!IcCO$EUv!Kz8->QK!+ny;&La&P%@|D?FW1cz6FH%OM9RsGAP$odG z*kYURU0`k%-o(8pYlzv1s~s+T+{T`b^`6@u9p?k$dj0>i70Ed<*-`Rpg_cp^qMqLB zFohM4`}o=DW5s9;$`BdokY!#y)Efz-f>|K3SN8o!HS6Yj+mcrUU#90>_@aaK1<@V2 z{}l*k&^yHAFawM83dEFVjSpOW)S~Z#2)2te^m~EfM~C|V;mN7rx_A}3#QGy%Y}|m^c);`(FJNu4SHN(=+?ADrDIz8H{MyXS>aF!HCom(-JdVd?jZOtq zDQ+~Qy);lD7|f}$^QJWG@Zbp(%FqiDaZICKt_UbYbQyTYgW*cW%SlcFc}d3|la2Jc zjHESxD3XxDbZnDly5#;8L9HsVn#_fO=aVIvWt^dANVjSYt0|Rn z@HcyC_T>5Ali1a>u?>_V=Sd_$Ei$|rXD)LzrZn%1Pv)GMx`#kB67dDWOkX8vo=?_% z8J|aCauD#h`N?cK2Nq{Vv_5k))1*(JW!-M2MuCfoS_-;eD|0OfTMl81yaDTu=lgp8 z(aEX*?D}0~Gj}&P|H=8&O<4guX-z}!NU2u&;-Ah=?0hlzL9YaW0LT3N@Sb%biafb+ zFim#JMNO2x{q1kxxN$=#EiSmNw!fbQ+7upn9%@RELa< z`8HU?+Kogy^Wh{~4Bwy~JMPLc>?QnNtWlC)FyU+x#}JUi!IVuWZpnl$uHef#c-nZ* zWcKyac6O>DA&MI_sU+a0RZu3iQTblDI=r|5j*%EG0%%0j#HF$Qa&R0EpLwGT;~<8&hTJmO)kw_wiFDeh)g$IlQ-W^U;p? zngoQCzO(eUd5X%i6H^7s;Ez2~iFBT7(pbGJl@6pbjZI)%TWxM_4s?{Urr(hnZw3M% zxWuRh0$Cy1DSgxeB|o5i4nl%J20&ZNtXTedDywlhIuVXk#98>o(Y~SWoxgKu<_~XA z-`(8$A1|C8%lFXceM|k)XHqSk^G6QDRI{uVe%HVL+9m9Kv5!HoB=VTJg<_icR9u6< zk|ryVv&a!7$E0S)CbI!QF%TxZWWXd`>{v-zn4E)UZ*6r(z$-jNRkOo~W_QQ7`%Pt(&O>@GWI`%$Fg7u;r;_~~O8;24wKmeRXSOwJ*``Cn>l5%pFP z{zzZAA^;7K0%hJJxj=cHaySg91qnFyT$_I*)fU&~+e>d9&7%ItG<;!?_aDwt=)_H= zhGB~?oPt>SuuPY`QUX zwYfq0q7oOUx-EybtF-9cb=ZZVM%TjC zNbF;p;McLbwl1>IiHQj;e|_MB(1mo_I4H$8H15%cGA@W`olu6gtO8jCzPQ*~aepj) z_(^rJaN{sVlr0wVo^bh&Tjf9*Tu~O*X4JaHg+t8{F;5tel*q9(oC9T?=%w<-siTsD+?4Xi59Ttxc1H1_RdBepF=vX?hI?xSKKC;*k&Pu_ z+p0r8#MK=J!OXw`lxfw>wt|nS7fntWZJ^5WPo;ze`gqGrL=(X-L30>FsWi%2h~*GK zW18tGu@-10{Q?F4<%y}kduQgQ^^KqV{%gN;_SF7mHb`la+&iC*R6ZTO*Z-g0yi34h z;^4ifzwh@>PCeAy6WGDXb@^L~Ua4MtP{4^vpbW8Oo_XdO<~bnn51F*hO;Sdb#lS18 zYc!Xc44XM%v0BSqhK#rsL5sqd@N+Zk-=P-4E7{+yTx0F_$1P=cj@WOAhl-H0;21Rv z@}UX)H%t81)}9E+KMPwQH3wRxcmRHlxf!(3@;3;=rd?y$q2=NQ9wWgtHJcn6e#oRj z=T;NPNW&lA`qukTecJRxPJxNIM^*~%6vNI6RgVg&sT~=zBraZrUnhCo-8TK_Cx;JTU%69}xNL%8I)E>cF?%qo z;Ba-TtZDM=ReQxmNiu{KcJW(LHlJRCN#^7z6~Gkm@eh%ziX6A2At(bDG@*={kHYUa zb7CqlUqs3CPqns8Qb}=#!Ca+!?CKeO<^FD(DPOV_?QGxv`lIel)x5LGs) z6^gs0M)68;R^W>-{&tkRmsZz*^Ws(VD?v`!V#57(Rq4=^}zMqWs?4Q+}5fLlq5?Qy4`GemC&Woov;1 zvKF^wySV0CvG3O2B^EA?54b@GzdK7erk9-7Ah67(CjO3Z7`OzTa=3~9YG*Upumi7_ zxK;6*l))pe;Ki9VK$$W(#>lrgw@WiG5l+UWH^GEYSphLl664ovnKc5zjQ@)1DJkH` zbb9&IfHFBT31OIpMR7f&A~BgvO!VH_zSE@583sLab^c%f zX4RDp0b4PjkCe^92V{I0q|9YHnlzVLzWL}O+gxU9=mf^s!ASf=B+qgP$Y@{O7j#Us z3vLBJFqiQs{{bndOjvqLJ-WhsbhcV)Um#5scH_x`c4U6kv3BHL@xoW^_|_{yLJ=vWb$2)b#;+U ziX;pG004K;1PVK8#l)gzlSxk9nt;E5C?41R1-S5+9}d`fWrHAvC&cXd7cN{VLm5wm z6G53She!~*Y|T$#*OF8cDPAd~mhISg+8<&wWz#!mdgZ3++)ZoT9DTGY#i=>k;>siTc(&V`44p2xT4(-KLj%wB z_adJ8e-~H&>$h(FpLg#4{nID^>fwnv6+=ztc?61M^t;e$nw;n*XobG|bN6O{_v-a4 ztLxDI^61cS9Xmv7%z!L76g0zMCSkjytYP2Us%;HBq zW5!W_L+6CXnX!wLuk^0tUPNN*(%5Wi@@~(eJEigI(#Sl17B0Co^l7nqwm&%)Bfvub znV)z5$cmJ6%y^45Z}32IOSAR+-KHN~cpRtHJlGO&qp&y1dHSW0QBeykayO_7^WO zzdJ4GN0-5g2}(^U*ghSTTK?u(X6Tp?3i~_*sheUtG0B&Gan(<7EvYv&AZzAuyu15% zrY8QyiNhCqOIO!6e(kl(?|+4}i|KP;bcmaq84{(fd!afOHk`GNPeRiNZLe3fxgNGzFfdEjHQ21j{O-*Sl?I@JW zaKb6|*E@hO#Hm9<6ST=W)H|()DG)Q1KsrLc1osslO<#)h_O9`zjw(GR^iJ_*qad3X?DU=JI3FUv4c%J9qtdOAM(@f8oo$syw>Ck7Y=tb_YiOwiZ8 zmzoq&(3y!RVj6BGfFp&ud0BiDU1?6GXzqP(-1_*65X_iPOnyVNjE*U=Wv;0nWf9R= z+vMrYWwv^DNE6=Eh(*`*%55CxW6njeAWlpYjkkRNx6cXwo~0W&)r*)8F@hoILXXEUx^)+~TFR_5bjVtN-w=oBzS_sek9_ z;X}P;rK-uZ`O146oB!(0^dH=~^Y*%XmyeZ7zcD%b*~!tZjZG1^P^qe=d{CHkfx$Rc zJB-9-dU~4hcfKDJPD~&QG))B1yL$C1`3m@}Xht9o3@s=l@C8AB8prrcn*tYkdII2L zD1aP@Vbdy#WlW3LUeEM0n3r}Rrv0&7&~r+bxVmM;ux~+s8H6_I)cHd&6F?ahxPS(Lz1wQ;%h$3`P^y`B%!^`1D5UtOQ z4*i=WgP&Vm{@>=8-df-I`&X|2?$sNAWn%1?k4*mT*={a zx;y)Y*?Exwo$f9D>g4EO8yg|ADuWS`2J4Jb z5zIICV*=&it^N7Wf1U)|V4AaM&mKB-h$eVHEiO3|Km*Ejl-xRHTgh-D`*BGOl%fw@ z4AfF4uli3mt>RLd;7eL~@r9l998~q!>H||i5^N7m^l2kJa}t{9rK)LbMM2l*UVqoo z4_0+hIRH$=arP=F9k#_H9fLTni3?~n%>7;|Gkcwll9gR~VjvVt(h7`dI#@~80wjX` zGp)5SO1(Pwn)Hh?xaoR^<}SAOz)+WWr?{Fm--$^tykH>%;^92>Ie+XtD8qo&RVw(B z)3=wyw`0!M$4P^Pj;_{y@EPZ)){#)})8`+DE#mP?%5B|#d@F$1S zVmr1fgQ=s7jFgqUpflIv@`^wiKn%ZBM`L4S2xEXUy|(nBG2HG%^(dZ<2!{B~N@%)7rz7;e`p> zYIco>JaJ0Qt)1X+P9rClUILTeTX6BS=C zIYCXJIovlE6Zew*I!;x9#VcD#)bbaj z@7psod}A0;22$t5M3hoKM-xy68h<&<9YA=p=7)9Az*I0{nAzU#Js5;{2+CtW(5+6+ zw8ZQ;wLcNL#OuGsMKiF9^ie#-a4@FZOK(49B`^Xrk$F4cE2`#m#aqS;n0(bbIxf$? za&+Wj(_RON6F?cHIA%@^ly1xn_AIEGOhn=b6GEqEnojq14+Jxlf5@e=QUvP=I4O2w z^8K;%c?M@~f9zUGB?Bh$VP^?*8PZ5K2xYK0GNFtK5ViN48?T=3e~yKo6_ZNR7x0Ou zXIofMbD1FDatpgSU=`1Re!{7qh#gc=f=`SIlWD-D5<8!`nKDoVv(tRbSKtd>Fir-a zqs)Shj6~jd_G1bu=%ZtvDs}(${?UJTa(r%U`X zgoX?TO1zk5l+1@RrN+Low2zh)NLUy1sTn~lZqlk6pcuPL0A<*u3Dn!9pHaY52W%QX z%UK>ZA_4jsnpM42VtLQm>y@!9q&7vi&nmil4&I)B6Ubr;djJ_ZP(~y!IbES$LL8W{ zW1@M=UWa?6HZIZ&lgikoKP6 zHaKfaWl|4b&{hrwZ~3R(vzD35kWvj-NB>m8GB!y>9x{p1F{$6XNx;W9A{kCCw++fD zLOOsl<}GMRB}{gfppdoHpq=s#t!N}Un zOHpJIRvNC_PyCeM-FT_{7e;M zbawQ0c8+#+k!k=ibgEQ3)zf{Ux95CsX{4*0@HPM`1uHNFvB^A>;tC~QFcQvkneCfH z0^)&Mh$y2m@xU<>T1H2L-OTah$K_DvLpGEt$HNHn#VDu!F6_ohj3xd`%`f;ijdXc^ zDgKD$GrdVD(@53=2VA-X`x4d!T^D2qbWw;W#FsAkXH%{>K21(}e(j#=mV)mOQF#Cm zW?SBWBrZ9(6$1UBF*!)(wYfLmb@T%!!Rd*|Ub*v^{wWMK%&&g}JLf~ic_UTh) z-;4>M!(x&1R`(^83k_?RWK?K*Oen+IhsQ6xbo)E0!RJ3(_|9-eduv643tFL6;I*;7 zFdO#r#$vCv6b|*2Wtf=$m?(3ie@dVXqsU?dhF>t$gNKSg6)D}T>BQ6+lwnAqnE=1m zC6$rAhoS1+%diPRC22 z!5kc>W`K=KPBjT!Oc0O~l@;G#Qp5J8EV6{kca(6hsSirA6~RX8Y<_(PG7zH}Fd}D> z&*#~`vy4-vCfW-h$(sb3+uqvT-o_=67zg|t92_`y*m)%JsGw0&VhUg;Y=OZpcxWFz zdi1f!9`m(J{e8V>Po97*56bZQ;d87m8^Hmq3G$D!<~i)ETRU@^Y7HIIb)s0Xe^e7T ze#BR%Hujfkt@H~kn}*YA&G;NX2eTZ&HKob%E@6eJNMV({s=$+yua5CUr1&kHoLdA` zILnxy`{Eqr_vM#aCRp#d9kS~AunaQl9e^+JWsJ_kRQg~6LwZZZHri<>Kr-x+6 zd%&5?Gz4W((wR^uKe|kHCZ?(t&>UpLm4_$BZ%?}<9w@U8piIs*@@~pmMJ*i4E^CT0 za#$5SRSs%kQIm-&l|9=c59({B@C6aij7L0lF-GFP$uBc`WD*qWm<>GLb$ zV_r*stAb}y7r3YsyE{ls6}Xu9>+L&t1j^u}gz^Xg1YW^qi5~@0WD{&AKSlQ5{_PKr zt8<5GD8pxQ#rD~6SF|k63nQ5h(-j%POvBr)0vCPXbjzfMv-xPomdaFb4@Kv~qf2Ei z*w||08m$|)HxO4et*rx^{KFdyc78{c$OLP-GW$xZIqxdBLj;(5FXWbScX-P4!I`kV zHvh)S(X*yeGf5(SD06rDW+He@Cu$uc(P5N|nj;>q4?UOG=VR1D6BEo)uh-?XrBWYA zzdqr_{(lD1$5n!Z;e!-Nf2tn%9 z<~E5JJCU`Z_2W$;H=3B_`)tj!iq=k@I)y0=A${ZQl4e7#w4uxcW-HUNv13^N5+!fN zsMbr{E66U$vA%B#TvXwwyCb^8%6G*choD48Br-0Mcge4BUMiEa5^d51#~)-|_V;7| ztO*}|f|})={EkyY$8(?zoaJ^nqo0a|Ms6AP1#^AFgb;tG`!^r@WBrqwDHHu&D!cWe z!Q(&~EPu_EhhVbd-ccNh=?g8=v5|-4IVp8lixXptN)4B$&u68s{J-hMG*D_OlyUyp zwgFQx81pbw{JFQ$#r!oX3RG_HY?x>s9GQYL;>09-20fr-LTg^2tGY=PFqz+!b+dbC zHqez(A5;Yp?Eo(3B>7lD3AT6m@~K*l<&-KPm6C$V!6)#`DP&w16Q7}$WyWHMEG0-4 zP2{VPi0gCkR!r>IuupD)z_1w-)RMs$pCG49knVy0eqtQp8z==0*93x5JD3~} z@hRi>J0g+C)JhI#ep$wSNR8r&6hThCxvds7mtlv<0WLJp)T!M%v@NE+%7BPgdn^pz}?wV)*lEK~U%31L^$oRbkcn-~I3 zW)d0!H#+Phg)4KfKAnhU^U&C%^K0K$CV)juPxMd=qkZLDoC*p&K5#^!Oe)C(aA&Az zB$dlaJCdu@jX~?R5IZqpni|4OJ$mtDRvMXoY)OJ-C0b*M#2Yx8qG8jBfTyX zXwHuvi}e(Om9^D2K^cAg@D9xx$&b^i2LZSgoKK7`Ow^)x&F6zeflDhQy%32-3eEUD z{j$s(kXQV+^VLS!>NbEs{O+18BjZVVm?Pr>X~{%!Ias$K^F+{sxP{k^IWO2XFa^}2 z*oCrrvkG!ck=am&#fSzjR$imO0Jwl*`3E!K2&nkywW;h7C{qMZnGba8%6M>Ps3`)e z$6O|WGSv6?3^tY-M|fiUZg$E?d0dagg6raeici&56UdgdZA(N!pSGgFys>SYHm!a>NGK6Vm{3O5Ljb$ME(7cMMyV;dGckB%dA=Ok$sb-&&cQKq zEwK|5<}%nU2YhNC67(;oF=r_tb6TWaiKR1_+30uXGTn_lmWWNnBAtx zkhLH+VbUBx>Do)In4)iOJt!?7Iho!0cV7tHL*C_3%iQu3WnQj=!bo;c1T7A@^p%A! zl=la#C7{escB^vNBX(U~)_mYnfh<)40l64?F^a<%f6{HKj1`>TZzW|}f9ploF`uBu zHkWZ*i&Hl=@Zpeq|c&ghGWF6V!Z4Z6~G@ zNhRxtGFwLI7f^USOF@mG{M5$-mp~XQ2W2pq=`)_#fLnZ+GM9ld-f$_o7krRc3%Awv zM*59M64$UIbNRC9v$CtcDW-hzYxH}Pf*6x2jDGNe3q$2D1nW7u4p~v+nGeWfg8Ukp z4Yin|Yih*Cg>nis=o~iLdunX(H+4)*OF_Wlb4G`co@jk*lc!p&TlgD;8^4K`fpiYF zWY}e}uUycx`&_W0OovEia-j@6uNq(iU-b152*#am47Hfoj}kqu$KoN|0OB((s7bBY z%6fgr*bf575G5{B@Ha)DKIf@&hEWP9{We~i^R}p`LSq`na?;G2S!q?J<8&9)z>HGHXGWXvT(i13~$NFvupyKyZ;12e#WL1!;j9kOb|j2~!}*S-N$! zDf?L^NEKinjDbU>P^G@Acy~c_=Ln7Sb7qu4CQht$i%$;EJisOUm&slF`}->IUC_&Y zIkcfn5d{+y2a=FqYk^BV5w=vOoE$sPQUq3v5~QU=jhQ!AV=8@`vHVSKOFJEn$m)w< z6uY%aoZ|s*(x)nCR_~c1)+*wXA-2^{(lEgprV+csXVHi#%X;^D`rQp;S;ug@H|;7**yU7kswTg|7`bYe=uU!SvC#vfaCXF|Yi@ULN)z;Z7*F|mMe zmv(ntEMl|k{7MXuOdV5>1ONK&N?)mL(zHKN2ElvBKz%7G@~^suXBDq#p&Gcjt}+DE z!anzvRgO$zZ$t7%M7-Lqbi6f>uxL@t095pnYQ~;e1j_jKC@EHPeQFW{O01!?2rk<| z7Kz|eTx{cHEt!(2EOhDb&rz!d{kG~5yR74M41!iER)Zh6|BoZ=QtBn3jW4}3~J1$ z7r{&xwm6`zI!wJ9qGER644BJo_PM;0eT|r{AbK&OOm8Xamo&5a*28^=Wt0qHb$#75 zo2a^sh7L3n6H=Lm7__*Nf)y>$fdCgaNbT$$4P5jp`~r7b9iFwGNif}adwWXDQE&j0 zgR*K#p*TiqmF2Ifhmf@p#|3TC`X+fKYwTijr93m9fs2#4@Gn?@S~4efF?sv#w}0@1 zA6&h9_5Ats3S~%ZKrG-l-+WW@N)m5|vrj+$GzAOFY`CDMT|I_Qr>>#2kQkXBXeMwQ z_GSAyeaR+~Ltve%9RM&(D!JNUs`@x9VsKz}=j!?ssRy@n!T>Ue-Q61IGCa&_kyJ|e z(OOZ^mDyLx<7kS1sBZ?!up}{ctOYq~r;rI@XkrR5hI&WTUT0-<(S$Mz7qD0|wJ@Z} z7AS*ABMoRiMWfZSyAr`lA z`9FTZ#k}KjC5jRg%BZDF+@!IZ;uwW@!ua&@dL11e8W|o!+JS=X?(|G?T~Dc}1X4lJ z;ze-5k+sk|fcKCniJWEbK>uK0U%zEB?G5uj6fa)9__eQnjqFSGO%ekz8SgmRu)qHG zufP8K>pCC+4ajD0Zthc``ji1>$O#8&XKy1bk@nH5!uFOEQ?pR!Pjx@_9==L>FqWv$#HM3U4&pEJ(tHGUTV! zp(1)Q;{ua6yC#%@3227DJZ#z1rCiGe1T(P#HAo8(7LwLFwxLX^w&kxdW_T0?yHMac zbOPE;MoSJm9?9m+Wj4(K0fz>Trl5?ZFHk6RXl$(31T=D<4M3VnM~$#(v`zMemlqrb zD_Urj>yK4CHuX67Ay;TRF%|d6Hs{DKstJ(7Dl{}WI5IQ{w&o?-+1>$LFRiSILW=0a zhbJduLo1^1kB^Sro3#TwWscBJNyPdf)-Ag2~B ztiA=TpDcN1^t_hLzQPwCTv@y2dq}oV@`=VF|IHnu;9zvi4CrIUginxZWZ61GJkH?B znCZ%5f9$cM!?LEgnY_=xSZjj&6B-2WEP#zDG;$-)w47s?( z95i!x`TE(3C(Hh|NQy0F=@}z|1C8 z;>08_=Iu)=sZfT6m5s9k|Hl#$ToHn;Myywd9pS@gQ zoqgJ>J5K{fFXqrY&$xX4aTrqEMQi*wq{iYZ&IlrD&~X%#@1Q zVY-Y}cUs>OnhSiDWAF!;IKN{K>kPi|XO}nLC*w+~=6$QKbzw7|N@*K%qw zN|quxsAmRJuF;%w!s}?0V7Z75Zi>$&Tf(7;srL*;e*zz06?p7)fUEzm9@ zt&vN>IOf!;Qz6MIvRc%xyS?}pIk96pZh4U3F{YtLKnyDgg_s~E$xzCRGe0t+3kJ+fckbEM+o!E-^x=*UsosL=#1z=~@Dw2dLR91a^->r~ zLFBmilw2^T%&+MzVJ_3_%w_fq%HYJ*TPiD++U>+7+l+H!s_2{YXG4LA7I=mO`HCOC zUdgloJzWG%@;m+UK5P2#uqdQnPn0Z0z(Mgz1Imw);ILW}gY<+Ab$)&xtp~af(m3-I zm?E6n+@t`AdHLm+#pdHfANr8c0Ev!FPVkSRUcGtq&djVo9<)LgiA&iX+SI1`P2Qnp zAPeY(!6TA+_~D23DtO~IHr%HXuY-Cmf&ZWZ%J8yOLz$hfoi(Q~?`p_oPkU{+kbSBe ztv8o;wnr?L2iAbO!FhFqXZx!Y$#jr~pucATpH)6&(Hgiy&!8z+&=D`JJF!?}ztnDL z#%A@qKp>$4B){H-Vm<-oz>-?e77zs~ZPCK@g-fT#&YMm^L4L=WBf*=xvlK-;X(Jxi z7f?=)zyQfmD&r&f7o-9bHKB}JsN`TBfiiGFLu(p12Zy`DN{l8f-*Rs5CY1z7RulO?Bf`0SlCTpef3p5 zhuMi`0H7H(AP5hhdg>_@BL1i#!#784L4ZE~Dat^Wb0<%7)19oP;tt)g2ryv&;2$bv zK}N+-2b@_syQPvBq|dWc1_-j2f?}(n%+8wg$HCyYlXNQg=ZE+tGh}V3cLgrAmT!06 zr@g1WZ1|{HyaRgEDX} zsFA~#WG#p}W41|_`&{wB=mwj3)=q0(Z;-1eF=4H}qw(6BCc?g~Lw=%^N#3Lmo813IjHj ze+^sy>TCyHYvkpiUJm)FWx2ydMM_!Ct?(87;PW!Qmbp{eIbPAi@5pdD{(P~#tp6O%w0EPp3P_T0*RvL?&=E$&NYSX)_b#8%?~h%`CF z%{1r3)pXC{JE$49Rc$*vaGz$KkxGnRzWUX#`fy}mV1SL5eOH`oAmi*ezxhpcA`=tk z1SSX@AQSnGU>%y^S4_>j-u14k?tbzPmKFv|fY%(*i!0NK(X)QPQs%)qHTKBc^B3b&QbV*^L~aCdgDj@;ci*M;Iil*tG$~<2 zOi2xECAhq@VD6E$9AaV=wY9SaTVnsTDpiFWzd)I--g@7K90?QODSH!Pm2hH`kFe#{ zHfCayo>^7VWJ&zff_7=vkPqq_oB@`4wlRei!i8KygB^P+31zJ^Gp#9J;70Rl1ajpc zIu3THhmMuy${gZ8qd4aH@#9ZE`6PdPdwYR0*RNmy-uJ#oP+Iz$o}T{U4}bWHPkaKo z0+DJlYgH8qWSj-W(9uH=J@nXPkAaMf5AVl@lD7%LDtC&@#}xYZ?c2;D=0xb`+y|-$ zSpYZ8Fc;2DzVy;dsP-r`pL??=+NG}kT1KYrp1jVEp5ZQxW5RxNHYoIqIM0{C3KlJ8 zp-W0-6LN0)m<{sM;*YxeMuCG{3lrTVbM^Xeq{0N(T)vwedkP@7e9P2v-dMb1hQww2 zBgD(4nU|C@C~*Ia>=|tT@fxSB@CiRYdd9r!Bf}2?We9WU;}UH+K5!T)lSPnYH8Y+? z!8*_*`!Ugy$yWJG!Pk%mr{oaXgIQl!C2m#(CMH4V^5z1*pLMk@NbC^IT8DFD+LOfB zZpwpU+A2xQJ4@GdSX4VPwF}CCT`;#?&&&^z011?d5ogXg4^Fjk2H5%BcP!4z+0sBx zA(MH4cuX3p+}hcOm^+IC(ZQD}BQ$qhp$3Qq<&iW*fAr~3e;VT$Ii!FL1~ZO7`IA4v z$QMZirmV;nu3fwK-S2*vvIrO;2Hc3z3}yCaXnady;r8SAmx)CS%)iyO^_6uB$TT<3 zoH+4t1{3kV2BR=DSQIf)*c&lpue|b#%mar&88md?_{KK~G$WOuz%rC!4|e%%yLRqB zlu6t-WB2IjI6Zcud!h#e7jtt;aB5{WyTbMPi=r9n9+^k94kFxMnCKXp@2V#`a4J+C z-+rweZZ)rzoS?0upgT)%pBaDLl#OA&ng?YvtKRA>FpgM>OnHWq5+24@5_R{Z-9VjZ z1~nP!Eob@3u#Vw3ix0L~O68b-Bdy_q(UA!168OTHsh7Wds0D7F;l0BFwr@=sxBO^koA3+hP8u!vwF@Y$Z4m^gdlxE~Cc zV0X#{fr=m!)||&5e_U~l5}Y}6=K1HJN4kJ^iL;0kP>$f`q&P+>*_b&Cf;oBeq)Ka) z$&W#S_pyvxGWbH7sgAE}W`16v43aJI3YsJE3X&~Mk@z|ldUQ{ZJmTcyU|6*`B0k>x z-uJ!?%ItP-FK4dpgE%(d=O2%Sj=SbihWpAJOijv`5Fm|5T*1H9%@xAeF09XyI?uPv z=pJ5hXl8YAdvOd$mg2ZD6{-&5e@jMgGBFiBP~s+I(zmKI72*ZC#gUodn;js(IDokS(^?4={3egX19-X<1IZ53OF&H>U~Bk*|hkuZj;joPE4~4i*%&sGIcFk!LSbw%^Ap| z-&T1EnPgP*!r;nI7&@8|h7K%Z26{p7ytuq9f)=ML$|No(Pe8|0kDh0zG|vtX?!7ze ztOO-;7n2@ofnSfo?~x-%h{O;7yLZc3I8Z7PKn0+a>eT1(fR~wnprIg3WGxwjSqlJS z>JlK9Q^>tO{NWEXy%JzX@c{Ke762b)%oT^sCx?X5Ll5PkjKeWl$@FX#-+EJ{X}&)D zRJGV_?S-eaPPe#@cy4T3SPy_&q_DESyuDin7R;kFG3zY>76Wln_t2t4Gb=;eOQT>K ztbm>Qk^8qreQK1c&1q|=jX}on(lW=x7G&19sxmjk%h?<#QnV8_>@L|Wrj9l)eDB7eK6U(~0!N5@%y<^o zW(B^OfoEb4IOxTdEw6Eb^0o(%^%gONKQr-oO@Nh?99ssD_X__cG%Cv?kw02~Q7{C` z2wVNi&jf+(MgQ%%kOz<_l9H20kB9?Hy~9KCH_ARn9PpA$X*7-W1AWcLI-(Yy1mr7Z z3|L-S#hMgfeLmM7JAL}-p)i%oy}3E=rVlCDM-i(4K1jkG3`sRX(4aX2qxgauD*5@W zXg)PH^)o;7Gl*W0==|{?|1pr8N@$3o5-@*99D)d)hDcOJB6_L#qSqWhsyd9@ke2bu z!C$Aj>+WWQl>JmD3N;h1VJP63BESl!NFtIE=I?#)dx@2YVGXy8nv#plnZ=TEd+-DB zORWn-eQjBoxMC5sfLE|}b>&SGW`OR?+c}e{9^E=U65S-_{o6gbglK7dWr!T(F3mXh z)Y(q}js8_`6bK69A8MI&4O(t_A*Enyll_E0eg_D84Le`VpFwqII7DrpBbafa#R~{3%22?&>Lm zba|u$ln@-&JAi`pJm=W3xeNxie)!>=QyR46aphl*Lm!4jtcjvs+7BpG@u!t>60SEV z;B0U$2ZuUo{#3Bo#yAE*z?Kh~z@G&hTYOtED4`NcHav_}6hMGx?##@*aqaCBhYz2a znmRsJ70rc?Mg|9u9kwO1GK|9>UJ+XjFb7Zu;mZ5p|9*d{luw*EAr`)rQG#GMBQ~lu zJYuE2wD`oD4MT1PJt|-mL7*- zdN>TeOF1O+;quCg%DupjAN}Y@pL^~(W|GO_F7tRuM;J=K@WKns-h~SnjvYHDl_gOv zb+P+4AMtw`wV)y5reqQqPzxFrVIngX0GFJYY&l(b4J`8y>AG`C zb^o-$$}X0WIIM1A9Vy5rW$n1+nN|ed1@eiqZXzJcJxq0qek8YD3r=2}fAfiCh?gf{ zyZ2(M51#2gQ<8`Xy#n%>Ku#7>bzt6ma`X|?D*W)^2~eyVu5fbTC_#a->Wvvv!@zW- zonM=_MLXSwk&Vf%W+nDaMQ{v!*!u(Q0w&|y+ip>wC2_;@H(#2{*dCjDwxF$>7&E0N z$65ZCN);&6u6X4tm2vyk&W;2!si^W(Lp!L)$E51vXY*!K`0KA@QYrN)7clme__=KM z7|)8EPcW5YC&88`^@k@W#zsa8Mit@)f{NfwTd+mI8DRi!N8+Fa90|^H$R-#fa+iXspj?Efo*pN0 z0k~xU5Vwf5C4(kVrM}r>zQfG^4by-mkn||Rer5PE$o_3$CTJS9awPy zF>?xYn~w);5ZGjgj7YuvDx=%`AAg^{gQ%1tS+{v}MiH1oS1R-IjT!!gR_(}I5R4t0 zk5q^ke1!sH|B$H`uWTw!$85nmz5$cpT+5igPFT4i34fd!qZs=y>LfYiz~TL$Zh zIW1WZ9_@Iq_N4_jY+Tif#5~j{%@=_0V;$j(gN~`7Hmb+~bT?9zNlgzsSJyV0Yb<84 zn=$z?AtV_!F{MdA(mQc)`KEbFD*4)zLi>_R%Ib`0osRh1o%x044CyEHR191Mrs$(0 zOA~LanFtAa2C-O(+ER1&Ko1hNMZV72M*|!~zigQ>WPkP7M%;Zxe}TLQsfq7@B%LAz z;wNPQQ#=v|PYxiE5MU)f>(_vaNc9X9``E`mCiRGvum!$x;|7OtU<~&W%79VIf)=ML zDl3fq@#mC*@*;7m0GA#C_cYnu+C)xRsm|L?`?js0> z`y#gzy!(YOd;!ldr>CMp*I@aEnT^|8sZTaTbRF$>pzaRMPqGo*TfB98%1{a*LMY2x zoN0^LwX7_!)j(#A$y$u5a1*WyKI8me70Wg<7>yXV+bK{6=ijM`Pzx)qFzMK9o-X+h z3RGO0T8c2eIcUb$iTLdE^*cUgGv#!Mmu}+Jk>w!8oQFJfHQ41c1VW(z*>Hamm=ngETl;& zv$?UYkCp&O|2dRfz|+3F-tEj~y6q4T&z}5b5g&COKT;Vj#|502dP?Q{!qOZQw5o=s zc7ACIZV1?kaX}%m@V2VM2c3@(Tm-Vjz(qDE6S&Cbv7rh;$oCZ*3hNASV(A@snO?D+M49!_Y&i zY~NoVT5&1L;EMw;;*nRRN5Sz<;*!Z-01y?aBomAta0?+Duu)hMe>FxV(11F4U{c!H zQ7-}^d_aLrEc1ixO8!#A4Q0|et00n&N|^fA8w91uHJdacaB*UTvi3_($!;W~j)24J zx`9qGO8CL8KNCu2?k}kUla?PcgY?_TLPkW?o(*SeJ5 zW1#06k=vQZE2+)3w^SB;^3;*@D86#Pl3;))bNsPybnGjXK`3{uU)%FM7589{NvcZ zzz2;F4MoiX&NzSmyx%Ddr6F!I{FF&h5I*mI_q*9*VZ~bk4&yIBC^5AmkPJzeCZ(B z=3hq{N46WSk-~7_1lq}9OT|Rg29MFU)Y8=8DBq0Qp zzy9^FzxLW|a>ynJ0HQl~L~2k-ef!(r1{EQsIdkUBg$ox*QcXP)8qmx~KJpQ1#Wl{% zlyd_U?5?Kv2ghI^1_=}Xg20d=eeQFg6Tk#dS*$pPf(g(g01nZSHfgxPm@`3(QxdJZ zxO1+Mn&+Sw=F>+lOd9sNLZkPZ0=HXqLuBX-IK+p%iv@evw(@|X-p7pRZLP-tpgBYL(0}cqtDfiT^ zV#-$4tZf;}oxmTP6@&;k`dx*>NZ(l*Mq@MV48@REU>3H+-0X>N2qBZNDnd_pW8pHU z(?>eOw}a?1IZ(zqF_lV)WEgfkp-jae+mp)FyK1-U{rm=a99xw8@2Mfu`P;f%tFDDCB5_E5)OxB8r`ZSTfb zg?^8!T;kD!o^KKtU1p=tnafmyU!Onp9wH-0E%qwzE#Dv^6vrg*+^emW@}tX0`T~J6 z?X&zPe^r3h-_!dQkBxa5bPi)R6wP~=-oru-vxvZ^p3 zW~T?Kh^z%D!!8p51$KSS8^8{y<}BFK%9eyI2VD}U;D%s^s3hp5*dw`RG`x^GJ>fo$ zZs=Rz`W7^tLdJvrFE^BarEBVyGiCn=A7nr9MAm|w0B>!?JU)SxG1(Ek!Xd*@jDlMe z8ZkLV*Q7X*2Z?PvjvY)a9Dqv}eXeYl3qXwfGHaOF@(gFQjkQY3I7asrmA;q^spRce z?IErBF?b)xKm!coVk;&jdz^|$YnT@1gf>hp)<}RA3VSTjSg)=kMFScN8K+9y3*+6R zbN)Az-yl`i(feO-jRBXS3n!8Zsw#&_Wh%wJ{}EG5sQ65llWMw0-&je3i!|p(X8%<9 zR0Bb$I%P*mS!Uc_amMZTZp-8_-@S*>-ut+Cz8d8AoNSY2=?DAhG>JVJ?fdgAf8 z12#dzrpcBTpKVnQc@pY^GP;j)|4oPOf!<+pP{LM*4_Z@ocxdowP8h&eU7F8leRHL! z+7&i{GAu(p&wi7j%xlggN2UM12Q>bnN-LeY3{VDhnGDJxY%_Ip+Lo|AZ%jLt0Y4yh z48l^-Uz+fjFMBC3x6SgGJ(v|5RR|riqj0FbKbQp{wdj{81%C2~76dNNGS^cQf#mpC z@RCU?KG;`5E!mzLNCE;rNG#aw1y6ul@LLf*5d|ti5A0;(0Yt-7r%rK}0vi*b?D7$h zh(#);o`wpBd~5{7xqSIDq8iBf)<-48hdu+~lw!VKjOO@B zz4+pbqFv%p+^i_@qd8q86OxXoVetIr>e$G+c2{0qef_O#AQ&^!KLo)Ko`_r6_4zwB zIf2**5JRO;1|(7_Lyz237F!{Z$Dp_*Mp_B~pcgqMSLF9zundajDtOqK2PQ4RF)%^a z#Z&`jRAT2`f-^KT--+jB9Y1vE2omdRQiHp|h3w+pW*R4zG%bJCB7v#QUyf^ZpFYhZ zE}VJug^E{#yWW`8-S5ZLQ$WD=ldH(549Yr^px!^^wTN=~?43_pDijPdy~n7z65i$y zjX!F_0zgK)p$y^XFlre}#3zie4BUz3DFQRR{ju(g3H-F6Y{S0wj1rIbA8I+2(I?-u zZoyn8h)~SS(%0P|xXAGW=9rol1TlJSm+VF`wd%L9vtXjTy|fLh#~~aRPPt9?X5m;F>rC1#ap|CUABnX zDrO;I`vj;tC6T}vo&YO#PCPiCu8OQ>Pv~N9b#Ys*0g)h35rbKv3}zFIg?&rD*C{I{ zWNPqBFNidrc;X4r1K0)W3m1-D1V|xmrIqM$Kua6~cTh9Y5tOh+FoSP4CN;7Rqt4)` zeFX(9cz`mZJOWpJ=}TV%od`YB0^rfbix*Y8!yv&)K8G`B&JYETG(&KpJMIWOHxdXn zyI~s1x8OJN%iw9X$rbpbI3BX`;St1KKE0HCx~ohiVNx%4iFwvl!y|=}E>CG7#qpUi z4W1rtD$xE6;#fltFW$> z?)%S*@t=^&7?yp)TsX71KMbHkauc44_P^uX^kKx36sZyVWx}aO}*)6FID~ z(E8ymC+GKnK$ZZ?a29i!6qLb<=|oTYZu0fXEY-V%`n~6r5ilr}5i&ZG%`c}_J5Ch= zE;UgL15?PN1w}vk!$yga0hbDD>FY-Tli#G^S>4eY3E^~8t-vKXD~`kQx0H84TNu+Fl5PX`g;gp^QH; zZZ6mY1q7D~BEd+O%RwUYwXc2c`RAXPpuO0yeB&G6ARdV}gr2W_zTkl@RC2`tAT@%4 z6_&P$a9{{*B7m>TpHkW-<%|#r4H4QUmA)_@Jxc)<71qa3J@u3r6w4_lTqP)21@ZHn zXqk*rN5N9v=!{A%0P>2l6d*^5)pPXA&n*+#Lb0)lg3K^Ol!rvRfRZNp0umjJU*M_h z>gth>{Q98GnBgB(<{!?^FC5L1OAzLVJdq}ji8;_qsiSMBG&bwd%x16CG>yz<0cvAn zqlQ&1mPqT;CJmT&NJ8KHiF%9)QGcNt1D1lhaJGjTvm(QG=YqC-f zH46fag6pc;Dxcu7sd5%ylZ?pvX1!MCE02^cr_h(MmDz`^1;MBYz>fff>`OsChX^p7 z>r0z6b%SP(4L=_ul?~>-Gy$w!zI>T&kDuCD$e8)WM?mryfAJR_ zB3Y42x)5w6hvr{s&`;4E+Z{An2zx+RjG3+(C#J^?o3oH<^V>5sx2I=LA3v6p@f2m= z%-sC?#wPMV!7kcd3tWYiKmVIoLBr1G@pco3@bxW-Crl_=a1^HQgSJ?B z6y(rCG6Lc~YPmPl#kt9Mzge*ZZLCKg$oQ%7SzVra8Eg^kmp(yICKz!lilA@wgXKrc z^7q)t!vU0GkUnS- zS{Jnonn8r=pTeP?4;X#r{Zo{2V&bd40%h7|E~7dW1g?CS`G`CBrVxMAz^?3Hod2Ay5F329gpw0m1N@9w=zg z5TTC2%tiD;*REY7)*N_(A5GW`Kk$JMfHQQ`9E7QC|6<_c4<9IlI7iw_y~uKW8YwfS zSkCtM_NlT4I~aaqpu>PEfSmZn%Bk6f#as8L`MSO{J%gTQcyIu8$f!Ub#2yBlWMg!Z zbK`#f8oDs?had3;Rz8H%<{(tmuW|^1&WRGF3O>9p*eY9oLw@;AOg#2_%V?PyCYL3S z0V983t|0m{ni<>O?AuzHD2>h*K{I4j7atk_m1_jJ1Ov=GZ%kVp(m+PE9fsn0Q zSPgh6^;p!)Fvmm&R_Fp=zxTbGJeg#6JKjpuVn%i#!IUXhr9^7OeMrC*4+;OFwigxeemSel(^6lz-6p|l8}ag7#^zP zh>*5OTwb~JLJAkkrD6FSKpE<}Svjvf?iV7iR-q z*o}oNqf-WyffDFO9;kvnvP0?JEVx$%oPo%J3NKJFv1(+%#l3YYRS~B$q03YzbQvik zbP0wL9KJdILy4pi)cc3FxlHf)osPGCGA-ZSc=b?EIigSd{ITf{p#{FO6aW+K4HT?h zL&sI9z$WReA}YIY(8iawNV%ZDAuE1G;!;)>nHxjU-F-gA4_efvxisGyUSQ8E?gDzdVq+}T3s#t}j z&DU;Kxgg+7_44J*Cyz`WJ9H>V?*_y~RfKj=M=p658LEjzsL$Evl}VAp_SSZHuYrbj zF%c%(qa5nCLP3Fxtej9Pd>gg& znw!LKW@lxnt5&+~)W%>AuI|dt;{Mo%6H}@?m6^v@KB*?uvq+((Y7)t?|2;PKY)&s| zI)c40huEEB-?5g@k~0yjF<2mi$=p;%n3S!pB*Y5==(wJkEvcFsfHLl5U>CoPvO^Yv z8D3!d8+So2f-E6+xKPHFQZw9FWw51Wf&Ulr^ipZGv2-pDW#G@qwU;6V9sm{>eF`v_ z37`y5BmaC=W?p#?(&?SGIB;i6Dmrui48_HCxoB}5MAeEsHRX^}|;s0n&LrBs?i*mp2Y+2ay_hTN%7yf*7wzp2ZwjYY2~+un`x!=--9t;; zi(}g>!=1hBMbu0cR{Qb)iltymg-G!S#M35Fw7ex`QReF19(;!Nma$cQ;>i0_00M3- z>y3pQQE((F ziEtoOH%2ffx41H8X%r*T*|oce2am@bF!=EEOmW9_y@-kHstKM4X=^$$VZV${!e`!E zp^MKsC`)RBpwc`vt-^U8a_qtNOB$gCE-rZ7n4FueL_s4Qz#LN0-7Cd81}<(~sF6`m@Up$_+CAEW+KZ6i!s?=4lWO@3T5a{$~4)gbFO z#`0kjo0asc4NZdlN}|1;pL`Ejlp-UrsRlVs(ZuxtUK5QK8EVR-B*z3H9zbhruFb#x zp#PGsLEd?!exjTU)G}4!p zHYzbQ@33m13|B3?8tCL=7I99zg#4|JtHNSNU<&0Ae(-~cUdXrv`jN@UfcNa#v&4Ww zqXfaZbLT)sRK`9s1k;l_f`brq$UD{F)7v#zUckXFBwiP?_^&EQWaK;vfdD3D^r{VG zo<(Z(k<*zWEq1CQkBvT-&?su590Qk_N%kZ=@BkAL&j=2SDW#)$5`;1sGb5KpOwRhs zET@5px#R2J+bclFfHKgNE}KxL1=UOz{}$9`->C*4EPn$i!v}64Dvz7#?TJsdyXMr` zBM*(`1=S$t?DqgU&HQd*wz{zG+j%3jV3CRQ?W zL*5qCbS9OlJLZt8;Z_Ex5QkuOYf5pjmQ`X_Jw^pC$a zs9Bte8I49a@IF=h^zQ1K`t<2;03>k)HS5&bwQJt>tzEmSzV)rUcki-I2`d>murdWM zp_fT;2zXpp*xayOg^ou}gTY36+)LXm8Tnn?4eq(=l`;&g!zDm2(MVFGJCrF{;4)DV zfTv&=7Y8T^z*BSW26s0xi9Z0#gIq3s=oVbA#TdnHd<7(t2IQ@qUldpPhxiF5nsP5j zFpj&Nq+e%e8aXI~32=RRi(_U^beRdAdj$D%=I{B%z7~7dm&_?xJv+OQ2FU~plwbXtxv5)e@{Z^=WRG{gj2?%GYKMbousDwL41tSamomUb z8D3bp0tz%rmzmx^3;lX*4h)9&JA1pWEixO$CHa&@7d_|6QQFv_g#cM7o#-YeNj8!i z6^ktEFyL_(NQ(s`*%Up@rO+Ui-bU!Tx#z+%H(zn1f5ps&N1%+$4fp~;VL6E-TR1s} zbAEMIQOPo!iIhehSQcYdg8>cDM-InhOkG=BQ=JWHwIl%bI1l?O&?kfidEg=w^(YPi zN0iybG;BJRUQicN>WY51G1j)3f_W z^Sg)5#gkfQqHv<)YU28Wr3z5S&F^5hsjQTiD<1mIE8k+PYW!Q*m%*FOJKeWq`j^#& zXiTB0N0e-Go`98C&fShKeqCLDwKSA5OGpC~DKu=`QFB*r>P}hd4&){T>>Lg$v2Tq+ z87Ns}!mO1$6g89}7$jN*HtZmZpBGtEXXF)lVr0AW2b+OQUczC+x8QWsT`1mznJJ+D$j^{H2l} zapo0dBGdN_jr)nxrzMrw%Di*!d)^&>E;n&=LBR)4-wXXG?c<#(qS1AZa+(Y!o2Y}$ zMCcO2D8#CRui+=xhdL^TeAhSa){VzP!bvdE+Xm7M`o5$Lw*g7fvt$U&D$oD@?Ek|- zvfXoBid+OsMQ(f~^}@nslrD_xGsk7=;wC`cqIBV6PEZS*wz$sPe8RF7S zOz!y^qog4k7CnkUnPw|D)Tx1sxgFXb;u3BliSmEhJV6-Lm;Al)>Z@cQsr!Q;`~Z+4 zz$H|@xJAV1_>^;6c6KhDTVbD4bmW8HEO;12npyb}jRhbH9S@tNh>nP`s^NecjSGvD zo$e8|Zgd&9AOpCGBSV?`L|DZEFyVpHTYMoGcnZG3QAiBClbHctzzWLgC`ul^1Z;9%z9P;TM4K@EeB;-W}0R<(+Ms!#r9)!;BT1oD*E$6%Mvm( zKCXIS+DiE`k`*Op;dxO@6zF441ji8doO4x>$!+&(AD%pv`Dp#O@5Z1EX=IIQAe5m$ zXUt8y87=+|PtoPJfyz)ObJQD~$ysXjVwczYbmNb2{>9I~_-9^KKNO`z>4K7vqlwHx zx^+%s&34`>i*b04UFk9~QP^*x<^ij@l+in|lz<&3;L$MT;AF8cysfHImjfik@6O-cGGbf8w@+!vVeiIJPb@AQHc9Vh8z-I{~372d_ZVaWP zoY^22^*>He7ABa5M}gqV++h1nHG(OVW;uG!)wGQQ<}xsgYYH%nNfkSp{q`&W50<&2 z*m%14P>hxURoq^=%pRlDqjcGQcp_I@u*Nhq*9S*{1qD(8VPNmcEI&0a!au5em~G7L zSTieRg=#F=m>tH&(95wgq&fVQ_ZhesiT0`Ey0TIeTJ?d(1um`)iqhmAscp=JVqDWP zj#nb`z=v?w)goRc&8jYn(nFT2k(9qgl>fy9ElOZC680GYWuRd<(~<0EYA#IArw#22 zhU5H)oQL&I<+6!sVYY9jd|{^VwPYfwNVITW>{8%v0WM7LOI{kqT=~|8yNo)SZ9#5& z$PvmI_HnqL8Mh=)m4_M1@}E-M*IS1}ciQrimZ!YG_3_$jVe8NzY6{&3hw1fu_Pt4k z@>^0pgE)g!)ghh3c!%kWBk|&0tK?B}AH_GWeK&QkKg(zQfrB~Pn1C2wlmWzE6k~Z+ zr3-6q8^+QlV*N9gh=yW<e_y|~I>N#d7> zjD;Jc7uh$ekv)Em>c!k&U8V$B8DVjdKW+*nxZHKMy}Ju=5#u(GNooLw45dpH%E-zK z1Ut<=G&E{#;c-UI^JIP9m`7H6Bw-9;4E&+CBX!z}tLGpfubeSdA$}b%D0ZGGh6pz? z5m5+S2rgp~Uxlrk$O>tz93+(y*^fOK%9sqy?_vCV)GkF_IiX=drpwXxk7CAyGHeEE zOwH{d>?vRjxpAYh=c%X#|B}GP<-lPlmzS?M$<0FRnuP9x_ey9vja0DhP2D{jsA9!_J{sXRE9O0pD zM742hU4b3R`qtL+B6o+?*(ATW*F*<1LWDyE9k?HR2wnjxnkskHSCb%*&=>=C?|hI? zgc1kB6NijAz@U`&#ba3E)r(P-3vL=9Fpa`$&fQG8anX2CKKY}&OQCK#^Y^GzidaL9 z?jQrM222^+HKv}-694(5W#$0P#+1x+v}$b%Md#mq9Tps5xyev^Zhm#4u{@Kwj?s(M zedVS`&W|ZSR0xiN1LHC05U>l^9dupJL%Ek`R-zysCXY%SBtKMKm5HD2KHyxzFgU8O zD@!*Arc-K`0t5x-(TwPCG@?}Pq@DaRL^_bB{mzEVNP?#~pfWwsY>Z|`qx zG*64tWnea=o0zW7-(EcItwAuRGKjLK&alL&AL`@UBfB(3#;^gY!jpu zI+=hPgS7xV2x;YjTkpKSj$350*7X}>CrnSDIwJ6@~a~r+$Us}2mjhuZbjC0XX z$M1>iB{k&VJolA>P(~6AOv$5}(Ck-NUcD@{FvRwp=rz|uS#n1`XF78r3Rf0*{3rJc zINNVGcMmoE-T`Cfd%WTcJK>@XJEzYy8EhgUrU!v0$4i z9M$0u#d(axv^Mk{OS2IZ2lnp(F-z|F6*MEiBoFLD|CF+gF5BHWx0cAo(Y>d?`R0v3 zOMIZ=l`qw|B8_>mNB0HSYBCJL;1JY-a+ZI-h5PkDRV5bS7zb?7x=hKMf8Yv ztMlmDGltTxN}!2nndp#x?1g4Nr^^auLcN?cMcIm(i!JIDI`qnivK8Qh-o*?y+;CSP zkL2_s3SSxdGNY*spJAw|nTR|5he3w*QH&*yRB*9PNi}AQkxwN7mTTtX4j&W|_UT~) zbnlORB8cJ@d@_(CWHr!7X5iK4;aV?XvV~eiY)aQI2W3D2jRON^+M_}lMJ;4ri(7yT z3K(4;${SxsH!-1=8Cak~;HhUgKmOvvb&LwJA{_e$S0=#^w?F@Q{kLV(hH$1iwW zBtw)gE^q;MAhR}`JN$~e1xLv=V;f=jLYtjL3+9GJ%sP)xms~QDr-2NNqM%R#V#$Qj zZVhm;>qG)vPAyDKn~5}PF@1l@5*P~^>s&elsvrsndmYH#NL|!|zaSy`h2Eva&8BzH zM_y60pgg09^eeFsb$0;)^H5SbYj4w+=U=&X@eW&%Qk0ebnH+QQD}yluOnD}> z#T1B9Cdi-)7RnkNM{1|l)4lsH*@?SZvSFN#rgk-P@JuSrND4ZVS(mq>0=Iy|kUnJ) z{n(z!%mPj7Zpe^T%7@KKyX$lRcm03fxqEwgekppiaVo5%bTMZHpEmRvO?DKxD0V@G z4pQ0J+ZF>Cep%X&@(Dc+UYVa;l8cJW;kgScUP9uR*@qIgz-7OCj!QE&yoIG?6fK2i zE*ckOqRYr3qh>L2Pc6!Zye8w586(qXB4r1@3Q1O+A*F=K!4Ya!1ipmWB^sm06Ncnk zDPe_=uo79vC$TKX!6*HyLBs*u3R}%RCYkd0C`WuvK^fSR_tG`mFcYJ^xl9VUjDlKH znMX0RJb%vpIzN*`BwhGYBa!^wTD^PY+^q_xyKamz_t8#k`@!}n0001b`F**ufHh>e z+d88(c#4iexL;_J~+s4Kx_%-&p~e0}BhkSVGW4k5&fHvE+GaZ3z$6b?qO ze-ehWe)Rt1UtGQww=_z{8~S&)&esm>o!Q;@9{q%`fG1AuU75XrJ=R=(p;4c4H*Aa2 zWv6TDa{84ndEg?7mS^q31}A%TK*RFA!;G` zuxXVtG$M1Jv|9?}H?|h`0ublMyc=t42Dl(}P_b~^@YD9DXk3^k zvZuXFMp(8G;8I*sbauC5y3{agmZc)AaWQW6T50m$7n(8iBKAKw>Zn_A@MiSfVtSH7 zFyZLZ<9Pa9t%LSbY=+Ci%CL#m@l^s+4m^y_z!V-l*?&(OQmu}rO!t8Ou`RnGE}6qfqsESbf*mBqOwenTjOnaex3zRReye}J96`E6P^rYBVY{6cXk zB!|S05yvoT<{l*w3FFjU6p#>(rd3&UNE(mrfO+YiRnE?G1pPR-_iRzB62H>RfjUadiBOHX%4YEH^( zyp9ZT5d#-y|Bu@nz!w8zDjB#~1T$|eFwUN!1d#QDTCi?0N*Akoacv!f5IqmfS(t+J zE0DzwxP1%sN}92LV2shxB{Og;s}pymHZi#%AWWn?zVg*Tm44KMC%^?P0XpvmKSX7o z+g`40;noXP!UcVZR5HfS!jhVjfV`H`PBEsF9TGXvTt+h@5h?N*m=#%?)Zi8f8Zjsw zC{Pj%63k#h2J@(4781i385wm81%eQsI+&|5>`oZ9ki7+NLY-Y+oa_DNEiP$VtILtY zra+V#Yu!Wh!OGDlv^3kd+!?YuY%XxlB>w1Q zre-GJf5H?D>5~Bf&OkB0F3kHuEy%}5?R6Z(8o2apT;?;9Yse(OP~^z>-R7Rz3vDkd zlGEo(<`BuwpIGLKv5V*-O5%^qf(T>kz@e^WBF9C>B}5>!C^`w%02(P4;m!R%dssLy zl%iIVP&z_KPzziRYoYGTMGqPg4qCW!<5i`1G|g^6aYGhTx^=`?QtqJ;7n0(RZejvk zxY2p9iaCUaC|pNZKjbnfdJpCMAI6p@Morx-L$4ZwPkLf)=q7 zSGP>JslVD`BYg^8m+|ob_8`mb@{)xwLzzQnB1C^2hAyWD9Z1YSkn5UT>_dc|P6Oqt7=#?7C0azZ^je42`0P)UNUh8TjhuZ>B&VU1NK* z(^xI`?$HvsULcGjwJ%I44UXA1SZ8{1`savM)RPu1t&5d+316=wwE>U}k@&z_yI0il}Yp1xS{8^Dn4YynS=Df>O`#jkGjJp`a*5BH4a zA^MmT#4#RlAw2+>!oa0zfXnv5V*^}D8@K>d3Y%Pe9W)x3)YuR$u9wOaq$0~h2EN!! z7Ag5MC4gjb7m3VLQDOkja~l@Kuw)~%T-eH7-1_7rImxd&W`~JDW=0EbT$`A@7&9sH zC`Wwt>L`x@h>QIS^_U0+87q{5%*7=NSxoT$z2EpqjH)ler_AH>FGDXhTB;-oD={RG z8acb+T|27RaK|3@xT?lQ)``lWTo>ba9DWQ}AFu!Z*SokID{3@tVlKl;dR_w9uXKcY+0;>eK`uA+zE9*e3S0^U zm%ZZLxyS7Z$1Xv7lOC*x%JteF#S74Y^L2!!i`tEl_cEK9TzZ1& ziqb%w(W>cLC^(;P7^yo9lz|+@%+Vb8X$X|zkh((SGFxmc@-D2N zXqLvpe0zWWSLLo0C=(svkxL(^%}t(V$O{^PDggm2(TfjdQE3!?4AG>t8hm=VgVy1+ zKkUkmLK)Ki>iIhrpv;|1@35$px5vUXiW>l?>P8KzPzE>K)@G(7ODF8d4xvn;k^#p| z4YzHfe3e9ji(MN!Xzd!{V(fDdJ|EJ+#T?us)-C*&Pt40n`NgA0NLWxy`TL#>Ua^n` z2OtJFqM5NIYSmbwRN)FkQRaI?R0VF&Zx9wsqlu5I2k>Nc^z3J&!97p4kex(P11Scg zVNHM}40;~LB6uPMz{g&)dG+8jYfSkCppe5veI#FAscvrX@aM%l1eC!pa&dWnab|UK z@yZgIWp;VK+_gtul+|AMTD!aZTf6%^yRGfr{q0LD*KS>Y!(;Wq{aBbql+;hNbGASSge=_S{BrOml$M&XM%Ago{<|}D8rRsk6dIR@2cMTb!G#gjT_?hQX5iAT z=OO;x+Sz@wku*5N5DptQrT;cwdpjQ3DYrbCazrcQ|CY6#x-UiENjopvjs5u<(#>(xr)vvjp>i%r=19cDOkVd2MMSBa06!0;O zQl^Mm&^?xZ6lMF}SN}Jf5+l8B zZ?WCLbQ^s=svXWX7P-N(ymficeux8L?7FHw8_$eAY+{OTy$-Fa9Qy=s++J+Mg?Z-T_QO#bU8bp>aVakPmY9wM+@PiYo>YG03HCMfJk3 zj(Lh&T(;%qwHxaBa_cBXvTYAFzamKKs+e4ivWh|2jL`-WdE>ei-R#V42xZ(-b-It_`cbR0koGZA=g)rB0g9)RCup)yl0)vJ}Kj8?sYjwXG`xqq_&k6mqsMm?? zVK4Sz6RCCt&6k$&z$6udtN<=^b|bXiTZCd`VBoP3(2gx$0kQyG3~J$Z;3Ruze=CfA zX+Cn1GKay3l=yIgFsH0WKjl4bBPniIhSI}WED}}LpqS=p=Vt{6&JpjwXDXkt=vPjD z%b0_F^z66MP$%UH8d#b+$5D0j0O|Sy-~){s=Ltn6ktPxq%XlxE=FGz{w?0<>=34mn zw6XlH-fI=Bi%j?&#!vrb8m?!O4$2t5}SVtp*9-9UUB}1k=nnr`D zr#se)=l;I0a!}$)J2crkM!Ff7fr@O(=&LjnN)@IRD8oYLDIFLkDW9YYB%qF|Zf$Cr zEAu?4QnFzkl$Dl}mRpJmMXgXkX$TIqiO#W^;gnw(RffYlBnvbQPcZ{NBWZkvp%(J6 z%%N|*^ZIvDy09EmA#jBtba0T$PN8%$OGW%u;6teJ2>B4o9BdypF2?7b`SWd6?{e5V znw{(8K%oz13R6CJurY<;>mJzkmD-&j#E=nHjSm+paaItfak@X*k;#&eL;yvP9*^BJL2l z%pI*xA1^Z@}|)Y97st%GYweC9Lu6427tEnrqk^q&S>B31@M z22mX>!y`;x9x{&VXd2b`xbzcpD{6ti4z~(iRGMW*Dawj~;UG6uf-@@}MzGBHmQ zOp%I+*NPw|TFyhIYK+9GQAf*M#w>}^RdIn8BrI8o8aqQEP=-1hwjwAlf~3-x$-dic zAgjQ^W8PR@if?T3=&HSfHmre*!7Bn^_V#^ioobv3wbR^OS-9W^2as_Z9>@E-o+zB$ zS9N!e{54dCFVG+tWZ7tDHh$p|3rSHcUBZG$s@1NIH;S7z)x$ad==%T47=={6F{(@= zfF|ITrP&o!EEccK&v0h?bR&Oca~aN)qv0&XU*7*IC-V7G$hGihKell}MTnpT$)(jbC5}ew^ zq->=LF^9@$(EUohvh3x0X57Rj^lr0(-d!Eb1kZfx(>G-3%6#e^c8r$An&leD{xjFD;^tG}BTUV}hM#VC3j8Wz>%Bh(dOpJP<3uQYDZ9%kC-mfMSrb6}UJ z#R)E@_K-UUF2$}QhU92E&pewP^KVc3*Si%}O+w)S`z8csg!#^%fvwc9K$)(sLiK6^ zsi-o;11>N<2J8|77mZX=3*v6{aj1G3l?b`tI#`Kp7^n@m(X>QF6D6VKrOeBq7B?jb zAE_YBWfWw)1iO2^$s6sh^x0A_kGNYw5)Rr4kNV&qZ?mZ`6D@FIOHqMcP`Wf*W802Pd`1cN zt($+DT2_PYXPbY>XdpQJ?efx%^YfQkHkzF_767B9qNNs4+>kwvBWVUChbm(bb6b{m*-c!1Jmw5`h0Em%`goVy?fGp#*8-%>-q?G z5g+Q_{+ZK9DsRblnOAUs^TrP_K1~H=G3B!j|1=%+E~^VyuzDfjX*SEHbkPpB4_jan z{s5z35l(rbDyPf|3#@%l*P2UHHOzH7_1QM|I`(0K&@79yiF)AO=B{z>()5*1`{<~- zID7C41`yLn2V9YR&^mnZbnsz3SmK(~a_4%7xSScdq}pU*;9_whYe1k4Rcxe!h(DDJ zQqfx#joThQ7lvZQDxeHz0exEqLfVQxs+FOsRAg}$Y_t+U_NE5fb|(&HX6o_DJPGk2 z3qDcQB8n^5{u;_wt2q2HnxV{ESd?BoCyn-qg}exeF#>fMQ(Wi?NQq_EzcRIx$#wZp zji0^$f1V5A63r5d84t>!?pm5#*>3hu-ef})J8YvPG(-5n#f50R3SR`fKqIZ3`JWk4 zM?MTD8fh8NcdmaQ3)~bX=g7&@5(`FHy_}n0<^0@?{wBp|qW)-2*jy%f1)ClVR<^08 zP?Ln^in-yaJ!7m`4(qi;x*vbWf@*qxufFVGhZH9JLgSU4&J*!poHD?rv$xPVxXDmz z6a$BH{p`tj1YFaa|FsDj|o|3Yy4s z=*?PD_a;RlCaJFaK`BG#DWA!yC|vkO!cz&z_>;TL*VFu|@%-W#iWPI2ODk8s^5t|H z7s~K;-&i(8OxPLGB`md!ITx%MCj%w5KJ`8Z#Xcxz{ zEZ44MoO{?>thZ;GMstG8?vVhO^*GnAFKTKAEx{`|*oCWOSeNAN-=YMtP(j5aiWcLr zOGPD12Ll%YE;Ef84w%OsT_7mQtp{bAam%@qd@^Jf(aw`iXlPNQgv(2n47Zo?(?nP19Kb(+wK`Qn_X-=gxn}%utm($mEmc((T_deXeEt)Nr`%PMxE+y%a!+ov1a}T_?(_TL3QgL$*dwH4dg`4)}FB7fP3- z`cb<+e{_*se4gKSl@oxhFN# z?A2UG^EJj;j*}I|b$W)zff>(WFGf>_)9BjC@f_PfF!5ywT-23X8Y{zRax?;81iSDn zDgZ@VmE#qL1kdbaf4-p%7RsR=%<^2Z%UTOAa~9mig=lF=rnbQHXY(`!VI^+n-2K(3B zRiscOUj}SAMQ=u>5T{CkJID z1riZ%ckGc*XTK*^0*tHC!r?dZ3l|P{A%FwHgjq z;36Y3=}|D08R`5!Uo9KQ8H%e3cuV?g|nk6qzvj7 z)`=`?ndwuv5Mu#c?0VDO;e}4;XtTqq?N_DIZx_HNX$HaUU+r2%>4Ns9T1H;@P=$eu zT`Ds0W#8Dil+3j;a49xI8v_?ELzTIsfE6Sipk|=zJ_Ipg>?$-9pL+TsqT_*#4`)JQb!*_dTa6!;=oP%xa%HKq}ZXmY{Fq9~%| zc?7YQ)VWHIPCJyDpIH##vS9A(Uc$}M_ya2g%U>7DK+i^)mAS|+%;njL=Rp1^NN{`g z8<&@^PxQ1p){NNbjztUiCUU=lTq-ndmQlJC%SITx90ijPlrGa9t8Uq!p7Tda16&U7 zn}sK~R9oP((V1!;6o&(~3*eHp!(cQOb&G{B<`9>;uBpVZxp?8}t$|Bd<6>1W7)X}P zHRUYo7HgJ^#sw9Osc6-*fFWF50`;*hn)jXPFF1x&v7{x32#GmM$vh54wm4rHmQn%? zoB%r{vX;hBtWF8Bz>8C>2^gxB43vqwy55nWOXA=RU(kw^Q75+66Aj z@m0>9D{NfMk^ggyuVM1ed?*1F>F#N{yp}g`>8e|b?a=njo?fA%CP7*50vEo8x|87* z>b)qcxe$vo$Oz3l(nSm@8uULmsx|k!*#_@y( z9IPU}a{enJZ_b-x;fdv^@Y8AVp+LT}`i+Z=*P^Rqqok0tTi6Ia%CZsLiw^ha%vK|= zj5a1O!GqqV(VoW4Wv;1~E&!MH)OnN>rS|!j3(uQ$mkikG@D$Zz~Q;B7|lf7GjQo1o9m)O)C@cxOhMz4VJM%dJ^~IT z8!v%G%CEB@J83~RdepQ@fifjA;^;9>ltadlb`tSsmWN74ml^7~R5Hqhwh{Udl@b@Y z$WZN}7SUEpL@yzH(c-08c%&Re?*IS*dlIhhDeGfOq%}6(#;zyx0h!9jpfzir2(-c8gpGv zyxnL%UT;1gmXEtT+BuJ|pN+A1!AiHqnvq<=c%gA~eSi0;J$KlyH;$G&?b_pZ=jf=| zG~TI+iZ!li6$2Nu7rKBiM&r^S-`QJH0%G6-c9FANjAOs7?!g$inEga%wFqT9zd#u< z$82}oxj`=WAu>cf-#r|IKjO)|mM^Ru5n(jN@YCdcFn17`rCJ%%3EG&@rh1^vvrV(Z zU+i*l#0JXAWq16XhZ@w!AN`OVGuSKBK4}|TU-<|_)B-(Cno^R0Bcc}V9ih4+pRniR zt4IKT^F~OSCYPz-i9i|5SuAidiWY0*vW&^g@su?<=Ho~2hj(-v?RR^Bwh>VhICpNV`RwW5!|dqWY&o(i9IbXlI0c0f9{zCn5iCwgh*b-eU&LQjqmlz*R8H|BTPvZi7 zIWusHmy{hQRpTO#l7bk9l=F<;0&N|@7-TOSJB(7TSROhu3quV5NDYz8uE`5$T11Bg zh|Tg!)>2YXg$nCb?#Av|GN6=U;Ix)$X|Sj9k+B$7v0!aYWHg>XLozZ46Pz?}-I9Rrk^o0-SJh0R39EZ17P zu*s-GQmO@UE|A(`Z}zjD$3Wze6`Pp0_SY{pu7{uS;nW$>!?Wh2?frFwt|?KgFfhN? zZ5{Td@DU;*GZc1B90xA*Yk~;}>+W*waWmeQ5_E+E=KS0xFdtVr!l?2C_g1_4!P8%D zG|L&guqnEG@PGFRU39Gxb*oL%5vR|Yb)w=tx`PYzmo_ObyQ^rrd8xB~^w?Y$UkbR0 zfs0)sDwc}Gu%L3@U*Le~R|K!9#swWrnf!uLigV|Ty2YI1VsVQJs%jNHfhL}fi!g^= z{FNC03}i7ade8$6lZrgz8N{Rdca%>GWmeDmM>bUF>x869%bRXuLNwdX?hu_hCs_iS zIeq7_Gd&#{@=!^7DFT6gmPv*hxLBo&-3wi>vo0iIMYE!>$}j~@kSQrGODZ{F6w*1 zzWHG)BX+F^I~8-`V&eFJb7PS`)1_Uj16jzuH zaU5EOQ#8`9flF~YkT#(5885@_GnK}EbuoM&`YLA1% z-tj8#6w^yi3R|T7OF|Ye7J0Q{qhBWINofd%I|j>NQz>1;3$8DycN_mnDWWD=tj{59 zx<*tSfjGn5FgDBZ{F3NS$Sj2*Smg8lE3z|8pM;j-FKe;q8SW3;Z#x!rCObQfEE)CBqXPOpGXhhhTQ6udiFi(qY zH;FcB@r-_Qi#N62;nH~SGC|N)VB9s7@vrti93(rRawT>V3F&l0g)|541B}cjitTLS z7)dg0GiZGE#@j3sv21jl1}?0LxVjeHd#!CPIIrTz_DVlFJpASTpMLkX|6QNzVYspJ zpFE>xd*}YvC;VMme&zKGU#lI}KY#N1`sR)`SV`PoB$m0{wm7>#J-g4klD!mqcJH9p zX)e?bXMu~)%oRntRVukgaAx3AzJ`sWWnVNd1$G(Mz(w>fz!zi(^2J>nVkdN~-2vVJ z3sl{r4p%W=Cc!B!OWHqf{6QjFRLKhHXP8lh5$Rqgoj(W|J69IJGJ-M>@ z6=q+%o1zv$B;+CrN~F4xC&CaiEg6o%q#s4IAI1xrMvYrwnMkL+l!)?I&lFT`+*rM( zL=$ot%iQid5s<|Km)!})<+7bwF4TtH&Wt~&mvDv*jt`!^clYwUF6AkAa|X+I4>&4xQxjkhx z7jqr7J-9_r&P_F9P0Y*bz?P+}Zs}=U+&-Ks7BO&EQIrB4cx3^dlEpa#-t zS>f=C%LPNEGXu+9CgS#3xdgBh>F0Xl9=~#;u*_|3@9kSNm)7?F!35R0k{?AayqaOX z%~gdn2hUh!X)t(CEkB!T^p4r!cF7N(zK2$0?B~vTg**CdyVHL7?Ahwdx#&^F@LyhB zIJYwYWP97#=hiz*_0>*$dhg(X4b^RwE=N-v#WDYpUFe!THE>}^ZdY;<{U!+xdk70O&#QBCBqY;yD%xyxtSErpvbpA?46C3LiJk|Ty3 z*wB7t^>8$nV+)-b2vbWovyGXZ+Fpeeq?801RuUvbFybe~2-QJP914hNq?ytiwk1Pf zEe)EO(1GNM_NGyxO!Ht*mWOr)xa@BqOibo#uKIvWYYO1f-W2N)IWphZfF13gZ(Qs< z6z<{nXZ&4Ve)anDtG}@NQrj&K`!}ma?0nHx1D~}2oqD0xMBQSri?z&U zl>>kxhXn|5K~t#VJiUwhM=dSjA61PI3eLS6czfrVLdmxXA;K1 z77ay2NLUESQIx>rHpW*;6~BN;DiqGgu!#vMLs3v268jjlbNsAy@DS`m0>~B>Dk&Li z!hQUScVnd2FpF?~x><;LhGe7oIAzE!AO0W}<($Gv!U|ActshOZO8L|DQvxLu zD*s7RGU;ElAKO0E^@QSLsz4W$st3*JS$x$-oe3p!D7K6)sYSz~_>>`@xW>Y%5jQ>2 zO-yAHLr)CXJKWykfB@ zIljfD{M^#go442IyXV25@e#T_6d>7 z;6YgGOE^pp%D^8`ySZa_7h*0WP$mTmB{8S}R|eozI#bGn6n(~DnoyZxKEouF9@MJK zv5mQ-4EzkV?rFakMifI;s@w=ta=O8an82)%RkbuLKA@1b3|-8jrAJ@(DuOiBSryk{ z{SFO?H~JfwXFp-?jTnhn)IZRPsBw!o6}afwtP0sJMLS}ai7boH^Srt}3+WphU>JUX63>2T!hIHPYT#ZJhV-X6jOv_?N?UJLcMF{_NSfbpuw8 z>_Kw|I3-|Kmod!|sG&H9Gbi4A?>$s3&z|)q3B1CC=ck{3`X_(#C-1)7Gf(DD99>fY z1EI@tl{dtLBKuo!zS)iN?B8Aq7z3B)zPVD7MIr-V_RAZ%h*1l=F;?-+Z^LXU>aj*` z7SmTlV8%`#$y70$Kww2NRtDl^KDjB!ja;KCM)~tK#Ye^)kCmk#V0Lr-AVw1jTtiB# zsV`bgT7|3fRLapEJt%WfEWw;$#z)W2Kn{#>l(qf04s^)`Halz{>1_R+^uM@S2QR6*V|XmUAx#lE1in`*MI%jU;gr! zZna4xL%<44tYM&GvFXm8JK{stoE(ZZieA2VW8fm| zL~;NfLZw@(0}F$p4#+agN#+K%G^k8Em?|wmC%6HW$O7$Y2dut#=lU-H=rBpBXg78P zmUO2e4#DMVB;&m5@|@RS@WvdaE4x`)A;XNJ1Efr+6P zC?*JbrhKB^EhIKcO^uA*-V}zyhaMXB$CKVCpMVtN2opn&`-vJyt=Z|r)pHkK zRZhSA-S2+&t6xb2V(5J1jW=%JzJ1}s1$>@9eTuf`i!Z)_n9<_D{_DT4U%w8Z0phH$ zug`T44@GnH@BjYq{5G3S0bcUn&REr!a7_8W%u}>aOzT02ndA#X=T-S$Ysf zE}?p|iCajWvna&vi3vQT3rxx_OorEuLju<)g&SNN&y6@>*rpuZ$(BbWuL?e*0899U z0SV<5g3_>(f*^}>Q<@Z8C7^t8hhkI-#8JK&g;G{|sC3cE(Nrb`WmZ>K&fWd0%bdox z*xjV<<>Ksh5+#ss^ayQ{j zi(7tDge8-aC#$b)vcLpS(y9VY2Tts+PTECo`rY88W5433FEtU7Vbu331(K)$oc z)ZH~n=D^&Q#p0An2AJRc<~Jhi8A<>0FaPpuU;CO43?LG8EkF9vkFfBiURg-O$d@R8 z`qQ7Hh5@)}^iQ4?7<7Akn+2(t0m@Kl02k4??Cm#q_RL1;Ojp;k!U3@8p_ZAM*}734 z;Lnd1zKdGiu%4TMq(pmN>IhL~>jh7XCXcXqP2mRkM^z&PBW?1;IrjT%dR$p1BuulI zoQ3}V4Eo+w7DYqBP}DYraS3qaBcju)!HjOw!(lEBZmJ-}YA#PWn8C?DQc%+Az^q*; z)9Xz_Hm=|0#h5t;7k`{v+1T6~S1hNBPX;=is&tYVnoV??5mlo?kA$Hqii2!wb_BuD z(bPvAd4%B+>#Hu*t1J&%Pu!UEf?;n``tAg`*;O zn|n{To;}#Ozu(#Ift4~598Fn^8Drjy-etNo-)__9dKm|}Tv$2(l~-=6L}OK6I}fmf z-P95fyO3NQBc5nk{_M~G?2}JEVL1u&-piLSBZvVmtR=arV_krC4Qzz3UcI_9nG-VH z=#Jk_p$Tv)EOSvol|I3xFmPe1Xm*C73ka&ff^{RwOS`LX>FHp~WfFQ%<}$P^N$o^`>9)i! z>%SLXTqrZqG8`{+1dFx-mopO8eHAxQUfVg1GjD$?lr%ypLsqU2!vVz7!STn?dk(&Z2mbr5Shp?u)6|Ph{^^o^4?%()V?eFLU+z8|Q9=UFuVjcBwH_kxL7U z{9Rr>|M|uTk9WV+Prkzdmj+vt1inmn=Dd?m?I2?s?i;VZ`pVV#DvyizSrt-)7`9&P z5bMT^VunY3pjld4A|MVdW2AAjsPz5sfB(jf8%W7&?Na%l21jKB7uJ&L&)^kRy5OKd z6sefpIfA9nziQ6CTBAmyRX~Sl@vB-SWJ*WhL4q+E1LAR@&>`hE{YfU#57GQWS%w?3 z-X5-FCT3)lS40>^iUS|FY$fr~kU|&VC=Er#C&54(R?3Z6&_2KN5QR9jGhznb{Wy_- z(V_m~4}V}andu4}5{ZN1X(BPbSWHLMLr7r=lV~e#9kiEvv)W$SrD`Y2gjS~^UHrj# zj6W?l-|s{Tp=euyO9+*uL#4RELHmNHC-0CH3ZO|*0^p=Gx&#Ellcc)X$R!xvP0!VS zIxM$dS0`j2a2dkD#n}jr#$`+fE<@$ywexpgIsZn+LMp{=ab}r&0Js_8*`8U)=^41R zv7~8SSh#dy`5bM9t(7}_dpoT?q~lj!xqkEN6}R1^JoxbQ&++tP0kVkvb^Wn-p|+TY z;`!*&BaCA%UcBfMgl-b>!yo<-f2@6f@{^yi_Jo_hgu+IxXTngY*~h9|92=KrQ!FtD zrkP@=^Z+jCUHIdSPBB5CG|(GQS!1`cfR#*2=x@yM5iUwY;z^9Ys>7IN1W-m~lhR}y z+N)DRGOCgCgC@*Fv8Aa>MUhTYvHIr9dgX?LvO~~|k7Q6~u{z|d3>JAB`RZXHEjKq_ zb?b~A^vp;g=8gJwEDmNJAAIlu`xEcmbDq$x3X~ZO^V7*B109AL(m58v#MYu=l}(2Y>(fe~;NOF_JbO1U&$V=EAZO2EXWLY|}9Z$q<%>B!UZ+AyZ~V zJ@pU6i~twiRaC*ih2e+EGzf-*a*>J-ij)#Hn_24_Z#ika!j_7QLK#&6xUrMe40KRR z$Ph77`|9aA$g&Dq?^8Fp=N)-Pgpr+8l2TFNPxGrb-cU`T4Qaiu;>1fFf_@;41R*hA z*vu<61-;~#RpynY$W_Ui;Q3E9?AX-hO89YxK2@vZMk)iN-b1Q@}w;)^3~85Pt~5uda_y+q6l$U!(3+q(V#= z%+x}Z;Xu#E!Q-oa`gb=3>qKnQk^Mv*J=Zus0~a?HW!#PFVv3CHL)C%oz+jdK2Uf8t zGw^q-0eJECuYa9`TVw*aG{5-v?Kc@OU0q8iUaA3v1kb3E3R>k~|N7SiN8R$LfBL5$ z9|q-beB&EPI;l$%$u=dAhFA2`92;}z&Kt}@2UBh6UWq1?XA5?BVNXuQ(SUE$y|N8m7hihix!LD2L{C3R2wFE&E6P87NP z)=kZ+av!oXG-UuL*0TTb5C0&Oxl9VdH~;Y;|G`M}o$q`{$n@|!Hz&d~Z*ME&BNxmwS zA#DIPFUT>!S_2nQOLtchxTTz;h&E@mEHr1cP6SFZ=gv{iuEs@{W;I9dC-v-;Fvlfr z=z-u!_aL9txiu+d?5wkER(ywu7-Wrnpz|**%zJVNaZFQBNd!egKI_=KQFp~yWkiz1 zPAqN$04QKElAXW*vajM|>6xgX8L=$Frs<9z5xp3(Ls#XO(r_7~Rb}47ghX2lt=g+Z zm;QNlQ~Q!^7r>qJjIbgcg)&h!>S@l)B-9(-+62HASyw4ER8eH0WQq^HqjD>1)K}Kc zI#GI?aVpl+;}48^v~~a5xtk;jO-5K2h-v)A#+G#-lr&I6#ytS+VP0EXbMt~gM!)Q_{A@{UcjASf^sq;XuPAS@ zl_3@q10|1iFw&s8`1I3H0X?eSK|>>RU$`k|QqB`~bk~V`8ke#LE^HgIX1StnA^iXs z51Mq?z8*YU2*H=agA&sLyW8(lv}5y^p@?4<;=``KtBe?!CY=wtZA?RvhNwh_Kt2(X za?nswhq7{U2~d;bO#v^M14P}yTk=&VcT}9T`DkJ$?MZ8tC`N=bWC0xvAO?L5eb!Aj z3&iMszxvg$B6eK=x#t7Fw;kc|SdF)>fjZ1<4#HGNXhDiN!~nx7(Fc zl&-%PDW0zRT_yqfh(tC}tS3YuJBjS+bLP$?vm^Rw`jegYYi}7S!^#ng5ZSkk5Ml2CGKJwEf6xrY#PH84 zy7%l&Ml2F>|IwNQW$@<^UW`#(eF?w?X~k;PJMX+h6i6tR!(~G?pa%|j@7~qSqVLgN z(|{HA_Z*}|BprAN^h1-P7xCavL&1}?XW%TMSh4z}Kl&q)iC`%lf|elj*pBO!j>J~g z;-vrX$+;z&lM99lCcXk+MD;>g`W3lj$i(g8m?&r4VWMC9JRJ+PQi~~lfk$}pumv?3 z?fHPV5a@_37%K9Cawp1-MCP?4ZYXMpI^uCfFrF@r>y})|uMBd8g`h(2T(-yHR%86i zP=@Mewu50Wom4j@O3D#9qKWZ93}4wgz*^)nWN;EuFw%eks9a%=pb|&5Df=W+=7 zLd<+aUtNc;^$6C)2-E$FJ6bXx&2heJf~!RuFNJEn#viKx1eXH1xI1gRQOcQDydgdq z>;+69urM^yr5T}R-5O883c3({KsLxg<(aD1fT$b*Z=?k zeEk*_ji9M*1_n9 z#E2Lg$)G?P5|4%{l$b87GH%zv1>p{eDR1Cn)``%#Sm45Hk(ukTR>`sm5W~v4!_MJ> zHE^L=WWXzvBxpoWkdXyKqkXEkVq8+O-d4m>Wyv;W`h*~lvgUQUumc$Nk;|<5~hsmrDP?lM1?KcOeSd1htmXQ z%vI8bqQx9tV@~~#sQaQhQlm@8RG*zyJHc1;_9e z9Sn;~C>Sum#VnU$7y@pw24TSA?%liSZ$xVX+JFYFi6l%Heb58(h-d1T`J8BCLIO|} zl2M=xLSIJ<=rNa(O`a@HvBJd$DAGojS(1;MA$!b$DS}sYOA%1Uqlvy2C%9PDBJhPt zjC6kR3PB8lu^Jb3xP0hT`M&KEi@VfdTucs42s(mvjDgZ2j4SHnb~C90ewmv>Orq9 z;_s!$4Tzhhre>2K#xS=17%*G`V~eN`+N_9mv&39nyvM)pcb|M7opmNNtH^Xn>TODJQ5)VG9X%BIeJdkl6VE9@adjikOEkMbwEPMZWJ@9 zc4S(HV&?Yk+X5pL%A{<5;mL{>SVXL3UVH7eZ++`qVRlKpq=!#Lr&=FgNi*OH2Tg&S zm{<{m7~KpR51|aGMgQckqM;02SRN9+i#Ui>gL7gd2*w>RWvHM4sSbBoB@~Yx;UWex z@-_NfM(zW!WP~vMB}Ipa^bopYlxN1%?P(rxArw2o`DG3yshW4L48$KeND+n1(Nu+= z_z3C>ODRf>Cy|P_54Wb10+;fqk`N6l`UP8ndUfzlv5oo@N^ph*Hw7C5UL@WFG0LsX z@WdObrXYldGpOT(ZqyZ4>I5jze@}A z)CDbvMlu!^otuDTb5CMyn{?voAE}{HghrSEjt38+OomU$L45|QC14v{(J~B>Khx7Q zB5HW8mHSI7`yC`E9CIZ!x%?|a`v-l_dc=29dyE?69s9>StcVM>Pv zNMppopd}_d;>o6N-H(mW+S&l6Kw7^V%tiCWtH3F;#^nZI`N~%$$ge-VCkRGf2mT^z zQM51^%P;Un3JtIVFfmG(qvB#k)ws|`4Y2O`D#4U01%|_pUN(r&-^+_T%N0aReS0*~ zSM6hb9SB^Y@m7>1ZBj~nMbKl!6h@>yHvBY{5By;z2t!g!aC|fYZbTG-zAC;M7#&f- zKgF{=pHxIz;EF9$lokAyr#hqrKzPbcYEa-8?Yw|8d(GOQYuVsHnKJ`%aSS?F5DeCM znVxPp=+(iVng)i+&+k9b*XPSI(UH$9ib==i+SR&IOBZu}D!WBQWIB!v?UnhL33!xP zv?&8jGgUAUrAgW-0Tr88RvF1$8MS!%#oCFR4P}POrwKrr(grSG%6Mf2?cx;!TtG0< zJ2y9ULtH1gy0)j9g<0}>_=x?~q5%U+} zk2vEKW_|LC!UpLkY8cecEc75fB`l6m8ziClB`&l$sHt(2o`3%5e})yFB$e2Smz69w zE=fa&6;^~yA~iTNlnqe-_HX}2@`MH;LUit_!H>He!ZnoZa1|}8ZV>`mDnjEjRX5EJ z;KDz2Z^iXGR2cf$x%iZ!u=0N4KwdH(+oR_dR(;Wh6xIiX+=0;l#w|{rBIe8zM%~$}s1F zCZ9XjFD_m<|8#v)2K#QB&)k_3V2vrNF`Y@MQ8TPg_7iq6+84rkWsgMdo^^iTg}E6AMfq3Z}j&r%o5@ETSeEK7l1zWnk_I3Pf=N9NTNwL-~wM(3pB zQN%?JTp$BvNLzF_7D@MzIZAZ)Akf517_TyphW^!jqEWl7SYi=njO&ReM|+nGT!eM$g;K0pI)hKQXtw1dnu^`?#rNrq# zao)p02h4J70GICFiscPl$oayYtPu6qiAZrgQKR`{dB-DA#^Xec$WzK)7k9uAyt3~A zN<9DNU;YIgJP_}@Kd-v|4LBWUl8Ny3|2o5Bgl7$YG(trNve@=9+ z%15QY(4%F6KTt*s%FHCJ#RdfA5j{}I86OU;WJL;GI9;2PnFoRxI}*9ufx3`TnoXcC zEd`Zhj9X6xhhO2Oqo#g^e|khT+5)8<=paetJ=IGI4wy*s+hgItJ|S??j1Npep1_Nm z-Yl0ud7+|E#-mBSx;P`BYzoS4KPlYcG9*%X3S0TL$%yw#B@lg87&Hpi&o7#FONIbp@;x62oOX80)c&wckbNLAZLz~ zErI>k!Ak7Pis+arZ6+g#!n}a9kxnXXLjrvA3Kcg<26G@J-8q#T3O8R7{$)m5S2C25 z(o!Z89qww&Mhs_&N26-#p_bf;S=fyE{aUpPNTV#jA~ZH=`gFbB#T5RWiq^#?(wa-6vS_>cb> z8(vtUkKr&F37*oCxLJcgsUk*B*&+&p3ujbH68qh|cU?Thh1&N%`~2eh^H(qC*7mXO zeen3n(p;ZK5j|nLR+m|9D2Tzl-l(kU6tKc#h5ERTXh(IMxJ!)Ne)9ZAe2sz!qaD$+ zal`zM7^McMaNLK%RU3xu4^nhr#Z6I=Fi$wT(gZRHc*G&0qWt9(zae^%x)8Q5D{&J9 zhQd>Rm6hkc#3;qT!5Z2A2q1DI&;JvqIq~**PDEY6%=mF~g}H2DQ|&TL3Z+ z72Jt7?(7QL5e!@q3c8bMao#9hbZc}x&I$WcKxzSl8;y%+YXVR}B=HIRU(&+b5SkU% zXvBC0A7IT7fA~YJaV4doMlE!N7jrLWTAB$gb}{`E41{zOe+{c-;-LS)it3bCB1Ja? zL(r9=8P!qKo!qc2JALxyeWWJfizatrWrcU6GDLl5E)F)IS>CD2{_p@6KnJ4-*de zRowy~J)GfI6Iqko$*%@1@1QhPRpYX%z_3D)^6AV|%F1|Di01=FzuHD?wxQ8lWIWs1 zD+Oifk_Z-+Eih-m1F6t+72L=XPy%k;s)U%;C@`736)~E;Gfyc2Du^B(6(d6x5yNvz zVE}((3Ar)o?(Pk@*D_>+4{P6X4QG@(@GK7;$w&~|_YgUwz8XZz8Gjt9g3?fB9H11V zXfc?Dbpi7*end*S46k8m8tu&sRSjI&5p95r4$Q;EJ6T$^9TEW*MtM@MUVN1A+S(dw z7^zXFO>F-`3<()`5x7`{y+Vj8`GfVivJ@DzhpV zVUDVC)aq>%^ax2-*TAJfElBF2#Hh#c*j^Q95ThatFLt-kaib2=tO09e(=}}!yI{_4 zVLBzjnTK&=9xX#JMZzBxf<+64FG7Q~Qk!3_6hHd%i|t)=>ytceb@~0rA8+mM+`Mun zzds8Ev%a}?U=9m6&AQ8=%D-eV1KiD5t7(t2&T3iWY)PhX; zln*jjjBF_9p5^bpKWfC^M5#qiVuVp@U{7>qMjtw<|M6fY37eG#0&!wPx=Pm#3jL$Zv1P2C7dNM0W8V_b`;96pu=fbI@}_6KtCKOBio(s-MfeM0iZCoVwVtZ zh8%e6nm3+=mBt~7SzBAoU^dU~a^sHTJo>uM*ITaSUJus~QY=p&@pZF+7qCKB06$(SorsAO=%kK#$k9 zTty{|Q@W(Zx)KGu!Xj7q06M|QH?Lla=8?GQVBV*ULdB!ZyaI{n(oq6Ez&H98&tdx{ znge%QkYZcL-$q@A&}=EE^m?R~z*#SN;8NMa7|BO|sVS*Vr8TSLG3-ejXxsbPl~Noq zfrDyX@bsjTN6%}FeMt2}`OpTmQ&3`VMQB|}hAB*Wc$L=PvR7(^#etqiC*R>}LP#I= zAyuT!?faO{pnzdA)7KP(z|H>4n}Y9W9>-AvY@}GK^{gH>%IH=CfkaAE#!(?i$d(4C zo-}C%!MI%+>yjz`7#*C5y}SsB84t*-mM}&y^2~!et=(xOHd*4(L9OvhVoa?T*(nKy zf|tENEK!plb{_rYCqF^xfN8)n;dTSrm;fdF3n1foaE#rEprLrOeM!Hf#J=IYsz3D+Z5GTDRB8(`ZIpe~8nCh>)z%ppFoi)JYnH<(2%A7b zEPt3uj~9gAM+QAld9|#3`Y5G%4yDL(dc7<(Wf%|mq~j%YruSIjV*fRVG2kgfrdNr; zWw!f=tl7l0(_3TgeYY0X!$}7zz*KGaSie{6di3K)oV%C<4G$M90 z)X&Q&L>mi6qIW?z!>t0*lp}`j+_}TaxvE6Lo)?>6)Hc}b(ZXPYibXAN5KQ4AAeJ?2yvyeew}U1?9_rmZyXASuybmpq@)i7=!dR@uWm2udYgZv zY^|qD)pKV)^@yswddg(Eo2ewH3~+%1#X}Lv$fxP&l|Mw4TaRcvb=ks=IzLBuDbL(m z0u(O-OM1=mK&^%qBk0!gsOY5L^AJFmkTTp|C`QZAP>%f*%QY*@ zOOpmMrjuhs(CHvN>EQIo=vw^1+`X7khHNYT2#Wx;!4wL}0*+x|>ajac-|#FkDF~@(GLms8&{CA%?dh)DBX)s{=)m|@(CGme!csD+(a|e3nnZL&Oo@X`BE2;0 ztH{1%7HS&%F+1p+G70v|pV|V5NMiJpItC`PX!G`_6ooREy4xP}!O_RC^HCPBl@j2B zGUhwq`3_=-1!zzXjT|x*Hfw8ZkkJ5CKvQ=*cq@nJ$RRkUT7os>idx{Kz=dk9#{ENx zudsqAt5L`@d1WmYdfBGt#)Z4pK3J$l6xz`-Z!A#UVva<+L4#q$YXs;>vh7zd2ff#! znxjd^kj)oKS3U}OD?X5TRAi81nbz~GLQ_UWMnMuLSt3-)L6KRhCx()nn8vD}9kTp- zHT8VCx)l;nwNz#NTM1ubPDkFcHcaKsWq>k*V-PP)gop~Q48I?K_~Gr_w~;Mqc{#5E z%`Rk|!^yc*qJz19=@P94x9I}0NkxfNpDvPtL#%dN1uiFuTB2pgu*y1R_{p2!3cfm)2j9fe_;urCOd0YRf8 z1~)7%%&(p^hp(V?`TqC6FTe$af%QxVW741>KU=5%fTAc%tgJc0G;eEn7sZ!Xj;8fn zD1%f&a`8)BggMF>PX5(9uBpzg?HxwSs8MZdnO3Bp7bEGB*6;Zb^_tO?$XZMS=9oxw zVNKd131O&6rg_Nqvht$eP#QpHKnZRp$CRfFTtq^-vZEwwiR93FdG(d)vC>XFJ|L=S z>3L+{YkrLPh@aoru{8Ts_GuOL&0+UrBMmsIL3m;c^MfD!fL#Ju*MVL5gm(7MojYh^ zIA-P_|M4H8WE%lX)v_@gtHe+5KhX0R7~VwTluF_A~K}lLe}K5 zR)uDDo*MwI529JV*niBMIIO%jPNL%fBLpdbsBOyU{rQ73vq@LXDGcoP|Sqrr^0}z3?{DU^djtM*|x0YdNklyOH{g#lq6mbMFA zaEGBP`_S`XDE&{FkW|k{J~7=1j}jT`99tD_HyTE=jlw6}wdii+GO-Y*HdOT-M7Afqimtq((9uh{>5hB+;m-P7VBh#9q{17QlW-V z6(Qg(>r-xM+LaEFu0NZYf)hlM11?FQTO}sG()ReZ2$(HY=AObn>KE~adZ!7Mt@q(e z0L6@IWvDg!wJSiQ{8+7Kj)Zv}{YbkKs#zW&3kn#vNy_ndXL6? zYCWZ8p4#L|!a!Fk3+2>`a8xpbOWeUifeZeb5{R;L=~HY8m`6V@lVRNmMtT-DF$3Ft ziZh~XVAfJ$hw``Oz_LfN=7oaC3yzdv#5`S41|TB9Ww%)Xmx0hkbA>(zT#0Pj+S%cV zI`K!8u=Nq1DtDA#99AMRvF;%i{IR|Dv?lJT%rX{Wh~or3R{F|K1sj_MjwxcXS~DdO zM{>;L29SOz1AQETcpL}4rdl5Ua&LC3lwb@^>T8N^hCcNvngb9+W|HIuaj}8x_Q=Nd z8X`l$cNEG*Cp`j@UDQItXly(T682wH^I{B+7_~(`#T;l{=|AOs!r~oof@z1;iy(}h zW^b~y9qBxRx)xG-#^co*!# zFi@uK5FfNNP>aDX;^1z@Zb(*k`0Kv){#8KD2qC^wqt?Ht^8o!>|71##O;6T082iyo zLWvw?eG0P}S7!BM73gY|9-6@7Bl0df=0!chGPJ}I6%0sSy0n`%al@9;F@GRFWv=Ds zap04ecbn9G?!Kzo%WjljG-1Z7f5?Zz^P)&Gki_r{L71>qsLK8pa7??p8Rq(G58<-a zS%vE(yn&?WP9BAOfC%w&$2HffzKORHN%;)0ltCj#F zQS~e8iGzVZgfcF{X?8O#g3Hka3vdxJa+(u7dfJW&%FvCG6y3i<<5F^P0$ETo2DMn= zf`h+Q&Q<7#oM7#%P;ET^V7cP-ZML9VTJ1 z6sfg9D?dht#Ui5u{#xw9&0?b&;1^ZJCyi7tRwNnuh{6IKsw=vsJ#0i_)B}B_T`5`X zfMfOhHpj`Q%+WoRy%eBilQetfsm#SOmd4=md{JK&xR62V`}~T|m1eoPxPWXyAH&zs zk||mytSNI^%#VNkV~&ma(T{%ghd=y*8&24-B)x;{P$SvSyy)-^E5i$@Tt!qGFS1};|PVt`Be zJ^EAyRbn(Q_7_KHI;#?2G^9g@Z9w>(q9X2AgK7R9J znRcaE2kVO=dd>mCqp9r+Iq1cvBu>;#TvA^mVd*dm{&1s#FzDpSoDAVB)TYc?8k8hm zi$5<`uP(f=;j4{3nKqZ+Ep6O(LzDY`oNgH=y}S&y`c7(4l~F#OPVZi!aVGIO=T*Mm zC8JU!;ubkzaEo)7B%cr(u*HF3VUL^6i%<+pz=6M*^kVGK!M-d{+_O(K2xmaN`|i7H z)wFAOeFJFb?EXiBxV$ zj9o2mYR3!6COfc~e1*V!q6Om7=qsFIr42y+Q;t67=^UkkNBv2I`ZG3)yJ-hM(l$SD zwi+q{KJKgf&(FnqHdF}<$VCBCxiD5hF-X#UuDRT21|~4v179*E&B}rus&?M z1x%nnU})(>ElRHrJJ%#ow9I>jkU$u&K!n&dhN)r%iYR`1?0PO!+TC+tjjxli9?>9| zn+yRi;TUOnTbTlmp&_}z0@xR|F$B1WP^N-hk^$b0aZrYy@9$Ix)mo-fXfRqVt|Uq2 zpH@nx$X8Z>m|f^=DhU28A&FJ5(3qX5_R=>jX0Z8X1&VVS*nsV+lW$$WZf=w5;@}Mb z=i-xAhxBxQY4(zGx+)GNHl9*w%BJD+o`W*XSJ z>_Z3OUl~7K`X1~Ua&V$4^uoFv6T>Y+Go`xd4?V8%vRZ5w1pfKSH5MjuW`4|(kGEjyP!XNB{6)>k_vO^m* zqyEv@8J}LiapQL%eI#GI36IjAc29Du1unpaiipDZW6p`&L3Ef@j1^6x%BwJ`WHTIz zLb6eO7_&(;iaO$AEMW8=h1+<;Y5~#*`A;5mx(mzp=2REs;@1dm``{RF0^mmZ&?PAz zx(@{;{hf$SMB4dntUY+aq$4l|ZvX&507*naR7A8aX0=ET&&{6TVuKey)B}I2ZXs?` z;1WdL(itcYh*d32nM8@zlgch~qF#ANf}V1a0?CK2@Rg>?@a6@i?88QC$GpgjEY@3I za9&AmlygX#@j>oHOOFKGzGTkECAh94;nq*WmRwMA5V#E&%%QK|xE@UmHSS6ffhM_Lz<`$XOXK`hTzej7!5dSPq(FovMU;U6s&ucjB`=+;E`2+)nsc)y1lhL#!_+N zrG#EQb|`atHbo=lKqTDaNK>T!bAyKwi58)FP=dgq%^v$Al> zlKtxW^Zb&+#`~XqYV|HyD-JkZPV-|>Qg=U*z?YI(Qrj8j1vin!wo5DT!H!`?075Vd z0_d?MfX)zh-C?89M1ux!)B4>-VxlnhWQRwk6bJATu<3d7iXD3B8G%9(q5)oHO$tAx zBiW4XjXLH^#_+kXWE>blq4AaA9_H{~L;jvm8N}lTagyMA8@Ea{`Ji%*SII8~q#57> ze&SyqK9La~9JXc*dmP$Cc`g5VfC=ldrP@LmT%z;*wMN`rhydkRAwF|90@|zk|v(p-kC3I6tP{}w68jVRGN#T*!W8t%vD#5{h%J!@-g zQX|85lS$O0+iaw>@XHWJTyzb-h9Yqi$rzTWCR;nW_EyFBWdK$fFT%kaL4{_vF|$+K z3+c=IFjm^tB3UdNZpEa0EF~$aTykm_QdSX*NcWYpr^nLO`J=MgpT-C@us3Q8gOv;$IBbG63nmiz zL<4mv=;lNALA1$Gnx*P}B=b>m)1&Bj8GQo_1T|l)q#X%zuRw(X1#NSLqP0#5Xst+T zMEjT#(2;$+wJ0>qjOG0~81U9t2mQ2kJjsH@MV6yQJ+J}va~;>4nZ>%bAbd%oCK8u; zx;TmQmj*^NK<7gSwLM4+99R03k9!`pdg7qzy05OA<`DuHQm#Ry6%j-o+Q3{s&z)PU zfK0hnc5JzzVGu7uO=2twWgylq*0`xS4#xws$br8b8yh%y<(ywWLBJxELYeEAFQJ%0 zoKmyoo%S3RCX$}9{JLF6N}FGCz+V=)Nz72{69yhSqc+a5q|;-f$yRx#Eq_Gd;zh(O z0zV36Wd0D+r+i>SvdvWg6l{v7+$gbwP8&;ehJ4XGrc!>K{-jEPOEglgZV%+b{R0V#^s?OvOe4^f%Wl7T_()=udLM75RBFLi%8g%f;G?CT zDeyAsp(`N+2T}^+8At|!Cfjx$6GFSd*nvx!o}_j>YbHUOmIcADla)q0|AalED=pqC2d`A(7I%4oRfz zBkt%vZ6T&3Iep1!Xh0+aN~jn<37M2hC>JvD#Y=`%x#!6%;NF|uQ_Z8xKBKbm?m*ihK9&aY|kaySM?_&Gg!9ubFwj zjio+i&Ifl1MszC((4rOxY(*~dD~|u4y?6V)>p1fLNQ#t5krXLWmPRs6oX7Kafcymkf&c*m1+dtH%RMenKWL-W+0t;yfnb?HstBkWTwd4Go~e1z#h|yV>6f7 zDaa#Bq0>uI0~4)$sW^vb2x55CjBfGoHe+7Dx|km`a5zHTewFA5-^m)kj)LCC?@6hf zn8ogH;8It=@U$M`)X5WA2j;OW#%Yo;Ob`t-8NhgM+~f@Gx&whx9+R+!)3S<+C_q6i zD96H-f*OjegA#T20#mopX^p%pg(1}hRhG5)nNlnf@-U$9epW-vB>^Y;Qpl3BVUcik z#M8{_`5bhr!$S*U$P(%_1JOy3iQIMMff}TZfMhWtKe0t{z6Nzp1{ z4Yzi&^2Fi}$7P;;^2z6(dycIr-a~Wt>{*`NMtIi0H~0_}O2!y=zM;{fZ`n?x(CCJ# z!4Krn6LyH~KvruHExvfuXbzZGdRkGANG+U|X;JrZ`6GV0S^_mgmQ=(Oo27|(m-;yG&N{3E z>iM{3OH`hhFD`{*OeM|b6$q_c>#-nMbjj?|=Vu zpZlD0kGMBS8~)0P(4($QO{y;1$kZ#c_);#5OP2E5gMkYH3N21o(t=#e@Rn9>BM7vh z9*QQ$#W-6BC^y2ZLxeU}t}VULSx}Lb!*A$3wS`m|jOfUgYL1MpkPVA~Y+}>}@j1Rn z7YLI>8DD;=yN9K8s}8&_wzWmlslY&;Flga8!T=xlHyX(lwbVMzO?U{A)QTYk3tT`J zf@#@2DR9eWf4ug0AmHDR9tj@Y4aYn!6`5yAQ48jm&%;{OVh4|)5E7wMCRJE9nzb>e zgy`=OU_46Bg*UANQVa6S#7Gz#_Gn_-T~;CE*Y1f_>aC@ex zBq0=Jb+(CPW*Hir=Qt(}J8VpvD;O!F3W-P?VOGmy&=Xe{n1Y2iL<-?0107jjSdEy? zJJpE<>S9a-!JYga_4xv{apugKu#N^K+o=tT!-EgLe&s5| zXh%^-q?PFCzg1)sTvjKytX~`9P-DxCC$ZQWWQ0wD3z5t0Jm~HVuWqGdE<5~Cw3-sl zt2I*}+0O&B+Mt}hti{@8OqawM=tNT&n_0(BEH`>h4rL0bgT>2Dc&RWJQ`sUM4SK*V zo$&*>2Qj#s9|Yh0l*ehMkx-7fM#yBVm6;Tc)wr|0Gi5-~9H=0ZL^A4=#ymn38?>OX zG-@#}MIxy1fRWpRMvCe`;Jg$67WJ|CKy_i40VAQ&)x*^@EouQr!=42Sg$9aFL9VTh z6`0&I5#%II4L69%CIjPF5tT+_(7X+_L<$YqSd34ETSa4vH#`HH>{wq+SpB^wC`DyY zn*5kLAiqlZ*b53Es1ZXRwlX^YdF+r*3&?}nykkb8%!%X2FTMI2ij_!py;?*J?&Fx2 zXEWrf33O#fg~?G|+8ci|W-7-G;?ubZT+ojmhu*kyRuC0~N1wa+P_(rs!mB|^$hXLl zygvymh*xa2eqL&gwvjTgR%dVRJ;8n4X_G+A$)QYQHVg}vCPjV(Tt0uE6si={|QTJAC^*Z@(xaCl4SEE?CHoT?r^0$?cKiy6=; zYi)+*D;7_iRijvA4S-VYjF?+D`o9GUv_Zd`4SspCfl8q+*)X{{K)R)r<~#q&b*KNE zhEOm+e z=}Fa(w1%ysy6VMrt1uVG1D#HvEvOZ@bVf$27V!evZfQhc9fOnTM>(s6G7z;IhCVAR z$jh*hj_WprM+>O#23;?#cQpoMS7ITVMuSLJM2+FN%LM}IW}Tjr<>w_m!SIIZhmPsa zLwDAp3}O_43lJ^O=!4bVGAi@iyBgZ2f|@M$%Dyx6XlNVfP?xseYy+;gJLvkUiMreSTR%l%XKDXE*zosR&gYjho*2t;jRI$FH z4K*;pEJ3N3s+DDRFG~*MNgg4~Ym;6_Q81!7?>?utBF@6hJ$WanmZ1ZoUYz#j?J}&s z@Uodpmo7c?%ritYDxxnb7`D+)9kK`>((g;DBHna;IwV*Clc=pwCVH@~jGSiVnvS?&7vAz-8X|TaQIU%$ z4ULIanF5nrEEpoi@Fo{*$W#`HHIuj+QT59^ZXgo^|Um2nr5s{3f;Dz@^>W)k<9i-N$FBPV-bCyy2swi$rFKN~C!c>o66Ws)av3Um`iZ)+_OHu7Z+0jzVV*s~kMvE&Ug+9=T zjHE!nHiAe_+GgDbS3=#n0NQPy@Y~%i0dZ(@wY*0#Se7*Ed%X5AQbyrHU0@E$5k(OF zXe5~9HBywcVR#a2=$n0b+8w@i->D&<)Y3GP2Q_CN{AOB+tBdnFq#B68>D_Bl_+`in z8CBnKv#C?-P(q{pTb7_j?id~$Ub$-O!1S?#0uNFi**ANeh|jX6AP;0hUlH*6LE0P# z&0S|(ZfN#3J`k+JkHNC`j#QnjmVwDKYwp-TBgDe8YlUP%jB?=Ka%xr4B>=b+U@_xY zD8pBEmlVj^EWmu@8{c^P>8EMC4nAUk-~%7{(1$)`IImr~;#Or=nH{O6_%)jE=mZfz z<1VX}v-OrCTHPa+V$p@@bE^+U%X=_{b1}>lI#`Utt?9wgfY4Qamf=_eYOMnzT_IlZ>yu1)dE2$ z7b)naTi~q-&alB*T!b$N55ueznQs$6Y$S+KpzszQ_gyoEYym9Xv2t4*=XR>MAksSN z;?ZnOve?|`lD3MJLN=9D5cuu5ojj13x^!+1E$CaYxR|NZx$J9qBv*|YX;1-?K0!ppC~ zF~84-w_`RH<*RDa0$glakM+(-^YYL14+Z6oqQZ3dU>#_w%UAWi(G5$dAyQi^)*Xrf zg+Renr1-!*517_lSCfq5bntMb4hecY1c8EFNX12h-y(S87Ww6%ymRa9BGr5;p1CY> zVylEQ$Yg$p5fQO!g{p3~SX1Ez1s_}3U|isIZfiNIOE|QEiTW&Z63r}p;Gl~J1{s~q ze}{c>e9*C@!TYhBV_s{lSQxgN)smj-h>(R&ln^jZTrkgN^};T(c_w0e|D_DHW!}S3ky)9MR_Mrp5$;0&nwlR&VKgA7j>e7 zg_$G6;bN~SFRG+9nI#^glF+Xpd-j)RJv@638pBK`={v~oicRZd^9s|yAWld2HYUo12vmQ3rEDni@|)zA zCj47K= zHe}u@9noJP=x$me3n-G`JP0ZVsNZ@}XUH*3(87=fxDH9ErnaHLH?&ZcwF+puaD_v% z{L8$B<;?=xk7N{}P{hWha5OSAl6WR$!RxpFmNt@pXc}|1O9L0wA`3D7U|_YL!{(+4 z{=FD4u{6w}UaK(r4F8B{eTRh7l3C7$w7Fe!xwYa;6Ig8ME^|i5Gf3F07_T2 zV2BaY6t6;8(3vVWbfh0sm+AsgaQykwS(>#Oy%IlXwBVf|Uo^Ul5I-97{=Td6Bh`<(6+9yhHaLFIqjojC+h=oNLSC6s|jCQYB8wXryPv9dJHs(DO9!eIImXTRwL-aqZ!U#%c{ zG@7#$oYr2?2La|TtrqRqpv0*>$hH2&O=% z-oz<*`CAM|96eBJd@(v97r}f8MJ`#yF)*5>u@*1Yu@;~Yk-ES!`H_|jh<=r&T;yy~ zBP)%{hi2b!y>{b`F`-P0S_gje`0;07co78ue)>s`)givUth7&*;ug%A$YthXw#RNf zWkOH<8{6gV5V23h%F6h%1!iZr1wUN87Xwd=gZ0lsLrozmY9j4}n1WGpi#j_4AL=&S zE(&TyD}Z*305-1mSy+)e;fd6_D?=n0-i)gb2E?@Rby^DQRK!IFZMk5kO!1aSQ-c9V zp~+<*OrFlf!ZqMZ?AB-tZnr*>8phv;X%`>6WQe)|L=v<{#2}9;<1lBpfVy}CrlHy7 zX%S`YUA8=is6cS$5L)0VXoWsbbkrz{SCUEOeKG!~4W?mOus6*>7W|AHa4(qtyS*LM zwxR;+AeAL$UWQSVV>qaRG%FWy6N7<+9#?efx?l*Yg$dCN2-CW^Di{0b!nA4x6V>Qg zf+C@VmIpw*H{Mt{OSDvA1Q2l&P^N20Dt>|MS2+GxSw#?LLiz-C;pDG2fQs!ukG5v| z_^{YhZyc{lc~iyFB#Xfe-U?h&*s`>3HpP1x9a#w!>bgJa!UT0sdM;alTN^iFPPTvyq==+bleX!5{;Lkx?^*3#5cBCUdgXO*UR zHyE1Y80yvEs0u~uXd?(^(5Z2i3*eW30Mi<5db?OzZ9zibM#>WO3#wx^ zrMJ)B;$-ek#?F|pPiWb1l+QINGJw6; z2;%x%(7>vT6$Y|YeTKY{m=8<~;1zB< z!9?>RriK6j0DfmlE+-qmq86*WC1UY5SC^RnI}@shgUqfrSc%qhw~KZHZvEV#Km=0n z8*lR+rUR*nO&gY7WUwwv33%0>Vc;^eQCYI@#YIFymRx)Xr!8HaGxd4wm`WE)^*;CU zj}<7Kmc9SplP|rp^=O8W1zuWkNj{|0>V=3~zQrDJ;R;-EhFTljGS7f~b4R#ZM#Wq) zNE@L8S`|nZ8y4vw;OzuP47sfs$n#%8T3>v#X@n6$8lAyK3i3D` zAH}VS00CbeC(LaDeJ^9(m{B1QRsA-f6I+cbEIOjLW_n>M1n}Aml{ObQr+g4oWUX)u zN89Ax-Ud@kFk296Axwo+oxD#(;KIraD&I>7T;3vZc{82N&HF?h?>Dv9eSEW3E%0#5 zsNpS*p)lMLW_0OO9+}$-N=8yB(E2fucA$I(i{iTNZ&ZyW5>ghhwZwv880Nvd79KU1 zAJe?W+6y{rvYeQGh`R_1lN0wVE**h<77mh?6?2nf41zyR!m0_k^dse32tv{NtbjS< zLO##5NW)z#69qioE^hpTxft36CEB1>#ucbpjYy*bRi93a&kAjeW((o^UDMC`pteYkz^xFh%jkx_f`t}7AQ|F?g3pni_suVM5g))7<%Jp2}I|wk_ z&|&NvLu4cl2170Q^`1p#0d{tg2;A!;Ev5=3HR={7+A6YHI851G;2D7vA*qXpJNU~Z6vpv7eBehr~hWfNzsUU?dvjAcqJy2gXS?K8Y zn{g;(3jhT^x0tj#h_aB!b07Hfcg`A2xLaRHnoo4btUZg#oM~NsAljdmh0F@%Kb>79 zk5;5{op=K(Rr6wIC1g`VjZ;wD)UB#XO|>m}?Z)*@g)$7@y!iggl`HzvBp+%^NVS$Tu z;)lRm0CLfyhqrcw!9mkS5C#j++SBP|c{EGYigo82lS?;g$v|;m!M;eHjVe#XM4FmF z$UL$HUsHyZ{F^G`ofzp>_b*}~h?Jgpyoi1-i_;8W;GGtH2H)f<<7(yi<(C;t=#_Xe z4zPN(e!A0r$r61i$gTHD^>ckq{h%Vsm>{k>M=gvW`Rx?B%DFn6F`9`vSSkms;y{5} zOB~8XGi>ZK?FZ5L(XL^qIt6zK&~Uzjxo@P3bcobhGbK}qw^0qddm5H-0X6qM?1r`@Lt=WcrJ^j`cI=HPV zEuB|}YV9BfKGd87$|?k#bgSA~MHIC_fj*q0wDjgsE(VWcpDr9u23-Yh24(h=YS~($ zfMP_tT~WkTY6Fr%z{Hupy)P+54{wtgG(RKLX|)+f^oPo#1aiEymIgMs%oB0m08Gs% z`O$_o9N#Dqkmy0?WX5LJRkJVbE&KN)HJT{baO18lQS;nu*6K|Zw6Y@JVo@_SUQmEO z24lvfELmA$Dwfsq&Zw)H$hKH}xN)gW+hc7d4M#iq%NGPk@*o`H6WM$jTNe=w5Tcne zbyv`%P=+_zT)uJ@8Z5u=EM%p1M;;BU`cXX$ODgbb@*00>E;a_uRzVfluSv@-Vsq88pvT{A zx?{$L!!*7vUD+xTEhX2-DgbAORt#mt4|PaH^FAhr5=*+_{&LA=3H~B=#_%A38gN<) z8uFWet=pg}Au+KY7FYHY(+KVZ7sG54br~&PvBh>g`a)Cd!CfQi31*vS08S6r(U;UZ zI3NWs0CgaSvOSs0=*U<#6O5WDycqw4ox9NFWu7Ld?PS=fPc6`lZa4DAJdQ+!BDeZB z+_AAxlOY{-X0ni3VuxrWfl%<~RFs<3Jt>RRL7$jvAxmeAhdMGUwR(5Ipw|yRN24220+)ZS3lrnL&>stF5h?T@piu>E zQeKpESU`g2@#H#bQJEpMU%ZPn3z&`~>O-^GsDlybcH$F4&hTvV{-<2>0;8k@(eB{or1Xm835iR9>~ z*}|=GrBliT=r9c>Sqikk1xz)ub!XF|t;&plh=~tLcH$UR3IgAiB*FO@)@)2p7GFO4 z(U1P#@BN-Zb|rxU;611Ub2g$+{~F>QkSDv`#HUy!(2I1pEr6!}Seh}yB*Gox#c|5e zCns8wM;Q7{rd|~&D!5uL3L+Jgod#ekh(w?Di*u`oG7MiVQOOAAhOk&EZz791v%5mG zSX9gR)x}d-;0`6!2&+K~1+7M;Q_A(45{q6PYK-RtZ@9N5S}`<$v~tHJxa6Su#cLC? zs9kJThJrRo8<9GJ3@u4&O1E89=qQfYQQ$ToZ2`dT%xYUjZ)7Q$3wGs%>8OU>w4h*AH z%4$Tyq%D|^xvc{is2M@32@xt@kUBJ+?Zck0-*_YZzF<*=&qm`Hqz(xcT&_KmCCZe83<(lVB(%Y~eW~nv(M^^-FBGEruLL5xDpjRN*W>qYz&A2I(j$96lAXk%JJE1MMsxv1`1TCu}vF?GDLE`6i7}P?p_-fKwV3~|A^(%UFR=kUZNG-worF>mRy4Nv*3l-<` z#OpMAwAC^eX2ygvd{L6cm1D<_5x5Y<96fsUuDjC5yo@-DF;71E~<{M_e0 zcjn9)!`Vgx|IBQY#=XTSiqi8$w>VX>4MyW>A`Bh84qR#qekDNZ8fSe7k`xaywcgH$ zVPMR~gsmeOvvlu}*A%rwt(MC3qJnhWRzTn}m&Oeqd9&$4s}|;RoSc^ojO4X?D3ba_%#u&@F-em0eD?^TJiF_r%{b{k0`=#>4fRd{v=o#r;J)3dQm?cI(0RtsXF zpZmtN(=8O~_S=Q%Z5Fto>ioVvyP$);+g(@IInvU-2E6_7Y`wIl?|;^omMG|Sa8)8@q~%AG{GK|R?7%wPVGCf6#u^a?)%JVKGQLA1CZZKU8 z;mAMul9CCJW$-=o5}NO2kc^38t_QYyL?>9GxJtog3=7Y0YP#rIYFzzJB{dR1DSX(D zC}LbYkXn#Z1X(oP>Y)tO&0LeB^QMMa%0=pz7AoZE-!^+dE=B}RchzV&m2#i&Ja_T+ zdUN>ZQuGy5ou@kK!Cffia}}GPW)(rIm#~wrV_8E+RE(8*VHVf|m-#YMZd3c0qjapmslWovcR zh2-L1)V$^bFMBeail#w(rD3~Z)VWn7h6vrP=Jr#ols7+cxP0}wrFFQJNZG@Y=S^uK zeJ1I8`X2rG<1$%_;D=|hzxK7S{o)tDusoJEJ}vo0yOkp^OBh%GnpCSEtxu+>%+tuxF<< z3#Cj&F!eB4foyA{(jr*1SPCgx7JM}>by-?=9R%o`-aH-Y&_k34xi+)4LK*xnl~+9p zTx^mjpHevVTA&a@Sq1}|t=^RvesbGe)$Dd#Esa&Jm8v`!47O=E<)cG|$G{bo&<+7* zku0aFO*IbHeEk?!=cW*3m@W;=Imz}cOi>XLm!a3}`Yeno3db+Qt*}Esrl#REjU`;O zXi}>z>ikBEM03fyVaALU#t7bP8LoF zWwso2LCtDyo&*GxEHq0%kPD!G3nJ^>GFEYbiFSV_AI@DflzHi;mxyD2^{Zc*NN3NU zW&K8vUK?;sg1QfZOWG%5&NHUe2623gVBz7wBX;31W0Fv|WnhM52|w-jX+zjjf^E1v zqfo{+1Uz3kH|qkjVcLso(oSa5RzzKOWRI{?BwFW%mlBlDO+ru8rx~wpG#|4e<;zY@ z%LWt*lSaZ&ArdLfQd!S;l~Bf-2O);RB{_Xhcbzo5^5(V*I>~NuZGC@Sl$m(D!XQ48 zLvvrK^(On!3IVdt!3>h$kpfu5g@M22Lan9$9;2?}u#+)Y-LQEPC2jfBleOMxu?qsr zS=7}*Id(3gHJfULR5qODKWY zjcDm{2#-oGerWLom!=U+ek8=CMy=dV!7$78MjLf_2~GCKuM!!57OVi-M&N?X!zYT; zoBm+|L~?4KkMugB%(Krv`_-?0m1t(5x&IIT;18a7;tBuswX%v|^pB}yy&P=G2V8D; z?58NZsax3qzv#r&f|BZv7ILJoZhI^Y`HlygaZ;r2N-2~Xp2_z#JFm5r#;7W| zzp`6T!Kb|pDo#VEVvVbHycaqM+$q?g7l5s;gS@ptUeEM49}V*%rjR^1owx!b(woZ0 zBs^WOaY@6kd7KU>Ph@I(Si%g-jT{t%lH))$r&rLpLKCq13jP>T(T@zkbXa0qRW>tpoGH;kekgNhNz33QCIt`u9 zL@zi~NVSB_jabVlIb(PYMYlPsnC*@eRltscSsk9b(h+?BtSJ}-QlY4<0o0)kr5Ny} zDC==Xs+Ex4O12ixQaHt17DZMoI#iY!l_>D5L|%iOuQN#oWo4AK=pyCttAv-chWOl( zX)NciLj;+6^IZClNZ89n?e4>~lZM&P#SPczd*Q+b)?@6sYpnMZpZLVbKmPHwb+znz z?!{U3vkY-F`POIsG*=@{y@tO&OH2ihBmBVntmYKVG6gcLQ|CgS9LLV5IB7@Nz3;~e zg{BA*ii6|FW|?=049AYf)C#5tK-&sJAS54`5sbzD|Rk#2V5Oj1SJixJ(3kaP`rQ&0{X(qy}|9$6_?IoL> z(qk3nP)Y%TmtW45Uk|L)s0b7bTtEP#9#JEE2$Yezpih&9oh3iSl#XTiOA>m>m~_au zE-186Ga%!R)2JWmjV!9r%3={qdtne!P5D&IT3 ztO;5T*CF_$AN}YX-}pveS4&tt&Ge~Hedk&Hi zSI#o!L&4H%lCU@ohxAd2@0B6WNZ|N28!@FVpgdjxOw=SnW-clVQ!c@=@YYJ95LyS1 zB#9BX1n}C=kP9Qzvmuj^FBG-K<*Qy$0zTAK%Hqy!swimg&5G)KzVF0zxE7@#8&%Mz z=8@7lBdei2HNW{P1DAsb51F@85e<-5e1nO3%Tz>{jX_m`sQ?r-c;2Z+N8_h9kWm&z znD~al#Id{QXK3&~%rAK{DDlm;>(`6dX)iQrUTd*1MZEBswD6jNOCh#y@fDuC@7`)q z^Cn?&fart?^V@GmT{>DV>o_>44X}{t=Psb;8?`u2BRoj}3TmV}Qs!zZt(khrY@aB{Em(Eftvvpi^r1WM zxS7wR@ElOsa3K+@$-_##JjVPa@0fY-d*92W*L*?}Yvh9l1TOlVq`q&!^G(1{ojP^; z^l9ES1KDi1A^EYu?7e5PBW0{ztQGt~-igi$UMZ`w7Of&DZS6aCOCa^i^&0{K`YS`; z+aL@Qa^>o$1Q47F2I1=q5QLWGg11&5$qiS>`_z={MMdYKays4&A_PWMN(C1Kpn05! zx^Oi{9D?F*kd~-Y7vq9|!*UCG+ikV)9SI$^r;jV@o5a%%_2B?{FBFz(Nzj~>lS=IbO1gHZBk%} zAg4fd@ge6rHmV^lE`7K-;yj41uq`~ee{Y3edm{?uhPC$eS$@Zf;Cv3>)*cxvlxuI7=Zu z1Qb(>sPF4nK=TGRY@_lPaXFS&?sz!EQVLu!`ZUDmM}C*aq~obOOukuh^GZ76^V*dw z$8&_?GUFuYTE6+sZ}RdOvvWd|-~avJXL;s_Kl~wq3u`dEKGAYL72+GB9ECDR4j(Qi zCmyp-(-77c%0=52p!leoSprwzglhVG3StI{8o6@SQ$j)pfy-O_#ysI!FBAc>IKXS5 zeywFE{$OlH{~Bl|WXoC2GA`qF$6tf1njS zJJL2!H9B=7WLKkw5Z|&wXg$P4eM1V;f!Pmr@w z}R??2DHj3cg(A82pDk zQE}2i)I#BLflJM$hOn6&o<*%+Yl$p$%)-eSK^q<=|40Q|XB3@0^zE(IsIs=0gj8NvT8lEVm1Vai3=%AQd%UG-YHPHXB9BLaCMN4! zRQ*%GRBt?~RWPS_d@m{-k&}z4g|t7{NwA`N@oNhMcx%EDZz~KK&pr3t`Sa)X#a&jR z@pR|}Q{!Et?|%2YdEdExx`pER96uI*$Tx))!_|s!JkESMhj=JbvXJc=qFjr83^(er zsnU5tNI{jMAp#mje(J@t4d;OXuI|U9kTr_ zb334^ruwB>Yk5Sf1uq!QO;#KE9j^Tw`oE#*S@q-zdsG0?8F5;Vi`?r7NEa3+~ z_(9cY8xiLb2_s?-r&_j{dP_QiSPry`MMT{HvI1EUx4St92D}?k8mp9+^-LqA&^|ly76BbhmTsSeKi@*hBmRC_gVI&Yw{zUVEVHL`U z)IQyk#KY+q<9m}Ys5C7z#-i$iospF)L$fyEnn(>BrIG2H@eRD6_!R+!?0BteW9Ev`nlSdd8@MuN14V+pJ!91$7O!%)Tw z`h>ck%)o?^y7W6T9I4|Z&t{v{ks@ywA8dgI1bKC%0^bk3DRNIVmKpZunys0V8Dl3zWwcQ8z~$jdr7Q3;}-Fc zz*&-c@x>Q^{No>UijZ*U```cm>C>mlf+@LNZSL{loxNLFD#nMtc}C;qBeObJXal2J zz5DS<9j{OvwG++Mb*%d&@tj6<5}0c(67C3K$0^a@6r;eQAHAclKhzSw6&_GK+QA7pa zyqP|!!yeO^P=Ua^wnKNeyVhT0@ z319yDum758=K1HJf9k2Hzyt@^i7PCS?bh6xK`aqQ72t=1eHJ^|-B5(0T%%kh78tb; zR%asVba3G@DURV0A{20Gvfw2(4$<}kXD|mjEuJh&r(2D|{NA`Re?^`m6^g5XZiB*6 zz{i1a*57JmGk`j)0~tBR?@-uC7Ew$3m*W-!7t_o}h_6G0&PCYEDhp#0n?$W+*Butr zif{*n@Dy5Ikad^GAAh`t(Z31;WN}>z>tT zvDzxgrUpMBOZDYkGq?>vc7F|Ak@zqMsdOK4S z;u4}0crmg2!WX{4dW`4m(|l9+BOmz)uM?&DpMLsjUWkrV_ntTa004jf(#x-UG@k~6 z#!AB1R}@u%spBt(uEln4*;iwMfz=MPr;Ia;%rMBXduZhbf%Ez0WGyXs0A_7YDjq&S zji{}VLiG(rDx;fR2iZBvT>aS*A`t=D;*yJ&KeeVAu8s#Q);TgROYg;d^uU*aY4=0v zMgNLhB6Hde*=e{GxbUX`+Z+2t5#gDta&3rZC)Es7=j%(HX?x*?7uXKQ?0MFj6Ta+2 zJ^JXQ@5+G-1UZm#=Anmv^o#STms*5^c78Oo2 z?mT$t>b`~7T1vyUR_QF*B)O}ddYPn2F9UohmECn@T&uznKc-kMJg^Ye4Q6ec8$F$&;w58+9nH$60|$(|#X`<3Fv_fDz52Bf3NHAdO0=~A^>-&k zj(W)rtwnv)g>mAu2ch#9idczkH|(Z)cj?hIoXn+1&_G&lu^_u!ZgS?G^H7HGVNJW} zm8`J-{O3QXZ(2!Ssc`AirSs>{vqAi^kA3XJAO0}yPVPzekso*fcZ#9b=5587CgfEL zQ!h#pg2D)E2f2?~6r6g?@MA+!T^4Ivxu)xsttII|u(2?d33r5B@fHeKD;p!LxKc|&-ICg#)b{ri}8wrYXpku^td;bpkD29=VwN$V*gChHvh<@WOB%ellp zd&-(yK1av!sYJJ#0=FW3Ufy7lhipJ0OCEa5 z6E*}ltJ|kpXhelC*orr+v6n*ha=`hGttGw zYy9)r!vFQJfBm=n3cHcisQY^S`-kfBXi7799`AVkJKb zKUI+bA&Yu}&o2Sfq?k#eLuj{NfI8h7DWQfWtv*|m@{o1PdOD<~909HG8xCMb!TJCI zKmbWZK~yG3$Fy5ZbcP1u7+LDbC7_Mj=u;5+rB1+S9H%A-0&Gx5fH9$x$t+$Hn_m+f z_(s;2pvfh3ni{P1^}vUDZxOQOZm?gmi@HR=n9rTh$USs#r@i4?eQi?Sp5!moO3lwu z3bZfv`o*j>4HO`(jrPLl_GERr>9-UQ0i5I&T_8xqHWz{3$N`jhBi zTI!euVZ-TQEq=f*9J$r3Rpc>jBrWnwohSLwHyI4E)Wyu%9RyQO9FWX#QV5j}%mxHl zqQ?b?SpjwiWv|!Fl$^O0$^{rd7_`dw;jl)r>am6igeusrCGO%_Ms7`mY&BsILZ>k; z58GR1H=cNY5SqY+^AZa6fW=p~oS?vv$&7>#UKZ5+t$7$Z9G}H-Xr@I% zm?XGtS;)pVUvO$#Va?Q1YvPM((Un%9X$n+X+J%d>AFVxEEbv(Rl0ECy2X_&0T1&Z#6`+A1GL-qrPkzFx45ZNWxpU{vo;~}spZ$zC zMbSxl3)Fkw^B#`QeB~=&;g=o_@*n^4AB!)Ydf$8l*~^mBv>^!4q%PQ4F@2Kp%aZxk zIKgN{>svQcl_?7Xa3Pm$qI;-mv?CJ%;AH|t=wo4Mc;#VoOj(5VqNL``y08Ho{cwTP z5~FieyjCF8P^k#Mxwtot-}aIeX|LWQYw9gBsE)p1hd%ai_((225LL6S#w%I9+xG<5 zOv4DK8!@3mlI3G|QJ}a*rmT)-)9s?z4&Hk4tOHvj6a)hwQy-1oY)`;~Axdp;QA?i% ze2YPyDH^9?*igTC@glyDuh4-5Sxy17#m>n=KIX!6o=oX@^$bohQP{u#fpKqD2Q$S1 zIg}{`Ba3ma4jgG$QKL*tBRxb`Q><~fJ*IlxG8~`a{dhXO&z>*mV040w z)mFs7RBYFY!*FEL&Gmsvy%*}f6Dd}rMg%1|6K`ykB?^Ry=J(vHUU*=uyDIL5X{BZG z3l2FEqQGni}4x=ZVSbpHy zCa!TKeoL^e!)YE3Ig>bL70sU_;Bpaz zf*wvf_vg3D<)#6N`ZBBJPV+*D%MgeB+20%-r*D1p9^@j6+sq=UNJuKYTO9dBuoKEVyuNXT>w&wTMhTeHYT*=*(V0zJMHt+9S-?o+w^FMmN72XplTCP6vnp`*!j;^~@H8(;DisW6 zT|u)=FylGEz+oOl4;}e+C7c!b>RfaU1 z?x#`Jv<AP$ zX$vpM4XiiFa6NI-p$Am-<7-E7CLfd)7`M+LNWmf9V%5^T*FOr(0z~0#KqCfGDbs+* zpuQY46a){F_K6VUj`Son<5*i&p2pVGcoL3D;W+RnX`krU&E4wz@TK{zZ*HUJ48yz^ zSd>S;C69Rp7i%q?>Sae*t1_&lY7K@^1~@L|m%scai>y#4$^l<26bl}{>n|{QNE9AHgUQe&p0?1K84XeiM>hUwx9t@AE*E;`3kV{;I! zbAfoMBAXBmAh{utRw*fDX3RPM!Xa0y#vOEQ?Nu>@`5o5QEKBm;qkDD!v`quSEBI3WvfzO97d2ls1eVx2h=#REil0f#2lxf|zX|@53~lO(m$c1t`$8#+3ra zMVbL(-MhS~8L$(=lrNDHCNxYgylyeNdkWsn zP!Q_`EQu2gc$}qa7%}!^g&vc|MhiPUTpax{X;BLuth?i7#W{U^=_Ob5r z+Ooq=ghhd1@eN zL9tM{6B(Kj11;7;HICLT&BIZ~;` z4H41dSA*2ZjUg))CI}G{Yj@42&D{sWA%(LI30e;gb2kOth+~Ys|0EHSgC^gIGzDK9 zc%)E^oe5(ZD(l#UR?Kf-n1u+UMya&T6fP7L{M;?o$xIg-xL#MF1U{G03RB2$=t*|~ z8D%9injvk3!@gk^fvF9vVDez+`Sa&_n3Gd7+_F5wn$2U6J%+o~Dm3`V?!J5IQO%VS zaR)i%PA*xYdRj#?em7WIj8Uxmuu@MOL`r`Z!O+$UP%LnfD$t%+pd&R)Djccd2B9HD z8OTy0<#=@8j~S_!7^23a}LVJf{r862YzYtqGB-*Q`t znhWZpO>2B&+`;kAG7*Ez2QFkRj2|_XEkIV&_T?*Ac!DVuhiGh!#ZY&O^NRqJWB{2` z>&Mm`2xU?QLLE#2`bikpqoPD1hY#O{IT}RpRC#c!9s(TySWNFI0^A0(kwU2x2FPi{ zs(i93Ek&nu1&Gax^sL_&G6$sQp#Ag;|Jh`=)xZ7iZxhE@^ad{ek?$BV)#Dv{pZ)A- zS(gH6r_w5A%&9Ad5`0(p*$gLi*U*?`pdOiY2cO(z(hc8*kmQ=EFtx@aU{T1@4_pdK zM&53mCTeHJCB1o$c@WgCN+Si@8XE1Dg2EiQ5Vf>c$hX1Y4Bis7FIS7#)B!d1`s^qn zn2mXP^wVNJ5>D^4mgOyZBTMnt$}fHCOT77s_jKcq&<3lmXU?2qLPCP62%$`|?t%ef zM8uj@5QCyqgq^W3fCVnnKflP&uX;Uy2(;BAQ#Ie`+sW;(rZjzQhvJYWJ7@L?06GGD zZ#f{Y`NE=Xz;DK@RH2)nAiycl`?d-1U4f5 z_yZXrZpcbtn(&?ERg)NR^Ge?|>WIjKouoh~1$@S6>6(gR?pA^t<>eM6&0khbam!r( z-I7Xtv54V8=(JB{TbbLI%Gw$D9KBS_Mnfj<_5~DC0Xmk|Nq86S! zWrVX^Q$aG0CD0u~up0+fU#{ZD*>$lo%u3 zvKOGBv%%Y%OY=PJh;Va*f^C(QYyd|chBDR#kijOX$-NIBaxZMA)8ZSfh1sn{;u{%Lt*fv<8F=_^r5sVbH|z3D0gR99_%#dd!v6$y01} zMu=KW8;llwa1PlJ_%omR46i@O8=9zm!v$m>j$pG1hp15I$l=2ZWkBou1^Eu6<`bmtF(HL5X@apw#6!1em{%iU4}1@W z6_>gdc3xEG59-vNVbV)An1F}P(=C&mV=SiV#eM?QC%#y8#XHQ~*OX|6FQSd7#dFs@ zl8tq-fJ$WvJ$cmvotHz9VZ%&k{~&n?K=(q>@|n+!zp=C?g5fVOdc;Uv?YmEy>`kDY1EZQYgP^ z(&qwXbQ`G|IZrFT@eYnhlNA-AhVdnr3js8^bI1W-X!2MB*Qk@AK+Hq3PC?h;HnbKi zJ2C+sNfP3lz~p9;lgx@DxV7WevrxukBO({ovvD~ez%`R7 zYSMxWjUofLRKvW> zz`PXvKO#U$7N&5gX&-qO1ijJ_ztz z9<5hehjoXbT6P7g>LRc}MOyYFA(;V6X8y9TJ}cFDpq<=Vzy|+#vj#PKHqV89Q}#D#C#h_5ZpEf?-WHyaTbicpT^xVW48d91mYJJ=5C0 zeaz3O1&)=q8Jry-bMcgcU%Yrxw#b7LK8tkLVF6pXO-fi4+q#_ah^Ug~4{sV(;G%`- z1wwo5hE&2GP02U5o>o97S#ok~Y_9GQp zG{zR0Ia~%Tf+9Z8Yp1-C43hS#T95 zZ|mlu8#wGY@hO9+o_gv7ANT;hp4@jo@UCmuZ_trje$03=5YjP=;m~r!#NeC5%mtt{ zhOdyjU<_8at=}wQcW>&|lrH*S%)}+qXKTqq$4D=>xgXj~BL$=W@cOG6k@k38b6FF@ z`ZE;x#iD%RQj^8zY39%ev0PNF%9yjlR0>zFggBLDbc>ek4@pSAl@qR5NA*|sAGfd!q@rz$ThY*JysDfY?I0)Cg zE2oIv(na|X#9|lHthMarfSY++LjA&zb{e5W7u=w_0G_I8eB8>s78tj0YENqBO(6?hY;^IyY97jrejc0MCA9+m_w%3sJPpAVMJ>y6%Oj6GLVUv!8J2C%pFhuAfSI?bJD)gq z?6u2RFzUKqwP3zw>)aY5hi0{|5rB|u+DKh1t7wG?CL~@1VW9!6&RPmtr)-NjYPaee z4#pFQGEsa(b!Nk`%4dJv?C{28ZzP!Qvz=MXl3Z>Tveam6Li(1ul=v#^%pp5=U&e^L%{osd8*qm4^Od(Ce2P@_Qi31e1 z?B&>n*X?MZ2ycRN)-?A?jnYRZ^dxM##ebfIWe=g+HSZKx*jghHqFuYbir=&F#Tpml zUF)rxFNfq#G|lY$5&sZNEN3kY1fZs710pViSJVR94fifP3tX(o3Occ2?3$z8mssc6 zV0z}v83mN!O9pP)_T-j?zMjnv6rVUyC<6|U%p5&(1h=*WgGX2k`dJ9~z)4|5y=7yh zs4qTkWKG3XYBUP#B+ONc2&R=T-Wam@Z4n-N@h|-{j^S5z5pOjKH(ooFb9{pHv3K1W zv_7YTAX2D{hU>KKc&0Tb3LI}0R(xZj3=|g~QyhXwN@H&c;8>B}T7t1Fgwxf{M+mv! zyM#Zo&xl}0R1l_lbgNGQ004kH!8r*+8S;4z=tn;C5td|#QFzA;moG%b_Wt+3|5Km( z6ygbPAq%&R_BNOirw9SyUJh2Qb_l7Hxr{(uc~000iLKC1Bxq}TEu$cxN@n1>agzXM zm4L%!C9*saeTtT#jr|2fo0OnCVB}+p$gs_R#uQl@XE4&3K&y+z*!e`iU*>^$ei|ql ziJ}$~zFsQ?E(L4Y9o#o_lDxKu|F%d|VES9REF`gKt+8hbMwS_m(D=1D3?iJ%;q0ZK z7JAC-qzSjFj@Qr1)F86LV6!s2u;5e~ijf$#b3xgRL@tN3umw9#;vWx=!=`Pc0+ZV< zjqWw0Z9oXxm`&A`v0j>6a4J|M6p;0mumXj&uwjE=A<*R8Y~SiCQ7b2U z*zDGnSY*qT4cMY=2vZZC=qEMnrjJ1SMJb-%WJQ|iHhJwYW2Yo%d4{L2*;aq-vB$72 zs}AFzrAc^S@8Nqb&5)4yiTH~TN!K2c5PQQ!^&m7;WcG<#7Pzv&ymiTjUQcA{cW8^g z<8R0JV)Yb$J?k;)jd!szObeXBqt3u~Jk|!J0)Ne0s*IZGZi+v69-BR&r8Mm=GHf1k zECzhcTMEaP6u4Zvbm^DB{3TfszxUpIMUz~;=Wu-E_z`+(EL&)AX+?GbVa%Xqbu4;f zr>qrG73eAIEM_MPT>KFbA=E)6PN1a+GmI9(csP>S}H-LCjdvdjL<%EreNV!DVpk zdqA%I7=M};>k~ycnSt$qRP08D4_>00K6kvWV!rW#OHGizwsO2nXT)nP9WsrnIvu|T z@d@A>KRmFX_LM}tkH3*zp2xnP*WuV>8WYOgcV9ZzP1P=5y!hVtzL!Y|XMPpIAT#T% zq`&*!@9MP+JgaEmo7DRc$IDDRN`d<27W43}VTaYt;u;Nk&E*(jH76d~@t-K@bi7QPl;8Mfahp3xC-)q&F z8hyCmZob708bKExA0!!<^%F&NLlDWi(&vK1O0K{%sf;DNTxY4TMPxijv`^;@@r%7D zG~M^JE9jl7prg7Lz*1J7u_}aW^7suW{_Z<*kH#t}X&FZE!4qLtXgD#0DR?>3EA~z}*sC$!yK@!ZUYX z0&Ih;c1a#*Ogb{^G36%XU<~M--&VBQgryb8o4xg{#h2e%n7Du6 zn>T|q9ufe-%xeiBfy1R`@IxK0RuL~S6eKf=nar6e?6`=^S7Q;E@-EV+4O^j!-TFki z%3^tK38|Q2btnsm+KxA9E8R!&gMG`7+W+*S*ojR%+Ti3BcOL@;Gw z@#Aa+6U5MzY!h>tRO~mA%PlK0bmVjA&T-7&a#@4LN8tpFqh-|zgi-`!S!o>2ufP!` zd4~LU^{h0*nk6>gG$n)Koe?EH>e#E^+iJAXKvEi*Pc`30l zD)CCeS$ad#e9>Bips%S()o*b_>n9{Izo1#*A`1axgCtow_wBU6DC|DnF}Z1s&qtkS z$c^W*(O<|B#fEUy9m4?2Ks3J-{(@XB%0i;1jBN`Amff_J10$}9#FjD3)$|8no_gvj z9%8ZwJL~ey?eK=|Jsm%Gln+wY2pfkWUjCoFmgS81Pk zEYNhQeN=M%_p$lp2=7z4aN&aI#>NvH$3QqtLj=Qwgiyu?FzojEOX*GD*zldz3)B3F zh=HL8E>B!(QIkO?Qr!pZA_6tZ7{Z_u3gEF#<~}Bl#FrvnLka}DWpoJpks(Y?gu^fj zZ=8oMB{z0dnc<&b)_?&@14Iv`cOdpMF~r&)4T1GMaEX>+2qJy|GCH{ZP|t)BtpzhH zyFvm3m}x9W1qx~{YJs323!xSBKt_QTn1w~=b0z487XL7(xWmu7BR>v3VWOhgH zy6cq!ZxgqB{6S~}7Y?1IxkCF~-X_$rga%!XOAZT(7;ZI7pjh?`%#4E*2@E#jJP-HR z31yauGCCW>M&{-Hr6Q<;6}Sf|47-Qg&7-F?qS(MM+)WYha8Bd#5E!#6Gg5DK(m(yv zKV_TgnP;A1N0``-7yf+9|Opj(oR-piU8%)tL+!}KfMD{&2MjW=28?KI|vXLmj%`*Bzv?!}o9s2aC zk()%S%sRtU(bC=%Y^}>!(Pn)6T5$|Au({4VwK(&u6M{_XScxfo`dWMgEWLz!aHl^frzg~t5gj~09CopS`9M3M)cp%$*#sXEakNXf?Q|%?&iq>H08*(8Qx3Y5(w?P}v$Pw2(G{(!oOJG(O>b&sfAR3V$<45tt~f1fBI z#*8+XDu)6WIs~O!pm0H`g}fy=+wmdg@FhAS<|H6$m-g)$cp4N6w%o$vKN_~xiVpFE z7=1t3=@cf*%mO-G%uVT33_WDAn080?jDCXS4To3b_leJQZIGXXQmU}yrIhKq>UE1` zns?3UCq-Rv;n}FZv|Jc8N;q}$#Id8Z2isuE1`wxu3r?mz!EJer12H^?E#N0V`AH^o z_`#y=I=6U9)=OE$&KpGt+gv7Hhsz3Ovt_3*gA%x4&D(eodZbhsGZwAIH|fX5iQ=|T zur&a)iD0u0Pa%wN3?W(gF#k4SD`D1^dS(}*qvx1J! z5|}=-J`xHVv$Pcf&D3i^5{9W27Zp!-o@Z8L;uTM=NT)Lo-DR5ve5(mid3JvJ$1MU8 zK#`C;Ai-PZO>}PUN-Z6&Xtd&nY#CO1F|jyFl?^RoEZl*xa6kP9?{@Er6UXi@0}EWw z)$2F#M0X!KTvLVbJ;#qR5w{fuwRHMrRcr|CY|@#XYMO5`Y2$@>YsN7ww)i)=tgnQ+ zf~!F=55fg>f)z1Nw5C3*5ns6!Qqh`d$=U_mmbHtfPcP*{n^L?+OVf_v4GzgQ)W`*7 zj90=hGlHtE5kOZ#XSLfpp6Js_nvB+^e5o-t0>AFQBJN4G(%yFsAxr9FK5$X5l+wsD zcMRY3eeArCIr8MMiNWWu`5-nY_y6KA{(}7`7Gu8hm9OaYBj7M;dG5LAI1l&5FMd(c zO!6&Au;|&0+FnZ(hgyo;9gtRvGW+qZjMZ@=!@M244>!>z6>H)F6yJFHaSGvf65e$O zc7(koTTOT338EQWvyq!JEA?tedt9L(15OcJaj}Znz-JIk&=6`wgR~Oq7+ovR%ZD{^ z;l%S|f3gpK$rGR=7$619T+aq=x1QlKa2d5ctq_NTDAzOXV2TSOd3?{hm8J+sMt<-9 zQw#RrD9jSlMiCcuF{s-87tD6*mWrgnCB4Cgs0CB%ZG7&OP%$6$=KI^E*rlLISsH=X zC>o;mg{A_npvG;xzs_*gZRtlfQ?n%{LY$go0g*w8OULn9DR4Tj3bds)GE%Js!W5Et z-(`V|k6Iwr3S2@i^eDl{pZo=%k4kdljk7W=w(-l%gdpbp`SYFytpJd7Z@d^&@WT60cB^fQkh!a3W;k7bmFL#oS^|R1ky?aTIWbr6__P>#Q)u0WGnJ@M{W!WRU{; zEqo06UH9F4p4 zq0IPI8SI}Y5Q$)@l(w1ZvllO3qzXU?Yv|)F(pSg#4b_nzagUcStn z1P?q?!+pJVawiSC9Xh+1Me9hV$bg08v=!INN;f4~3S}1Gt1imS7$>oip;{4yl$`34 zRHPFMSgENAXqt*TWhEQFk%@PWM)lc#s^LJ;c?jQ0AZKOR^+@Y!if1i$VbKM%K+As7 zMM@tn9|PfA4$W(@U{fQnpY=2;m6{EBor@D-WJZuL}M6$3G4iR;QuE`ZH&KsTvUy zo{?WXpxOf8$6NB)aqp?fsBb4hCqbCBPqZ5kLQkrbh0%oN6l8N$#chl?YU>Xn=CfK( zglLZ=ZN||OxQtFH0~*@aI){zi0M%Q4f?U;0U7IXFdE!vfac`QhL&uzea4-Na($*7gs`CSrWD5IleoyrzjqUi&pTB}8o@D^S5m8?=}-Uc4y5V1@4jQefTMM@8;j{&B5 zrGe)xZvlfM)OG=sZ@>@70~?vF$e8fck5WEuL^Mut>c#IF5mo%~hd+GgnPVjy@yoZWOTPr=e~K?Xt@gKRs2t+P?Y zSA+;$*eB8ff^9QhpMF|~NtX3Cjf>g%MoiE}qbqL5a5ul8cBcr5VMl}2?>lRor-|#m zMGERWv@NFeRui7!gMI-UhyzrIx4;Do<}q8;3!wGspkTn>l901RpIm26I)NtmsLZgtDge3Y2-i!;|#!>R@1F(2inT=8dBxmFOpU>YK-l(ERRlC7r#Yb}cDCouEkNGa$$AVEEW8y15{Ykr``g45XV0D$zI{{$ z1XgjtAwg)OkFy*-a`?)%`AQu=j-?s~u>3&LY-NvH@U~D&iJ<>wlE=oD&eK4!|ICXo zxI!8+a1*$121u3)2zgf^vh579$8R(j$wv$S#GWa|DJFm@Ko0)7F9rPbvxDKFK5@ zr5v2bP?r?ul4j%BYQa$|(vzxYW+@^>Q8cJGW4M50Y6p!=<4qy?JMNY#f%)()39qIM ziPMXV868?hx2W3BD<}&vq_AzE8r_6pbb}*60vFF(b!@#~lrG?rt&b~qks;Nsz;w%( z+Fp8--(aexv~E*m0k<*6XVLM}xLzIN1K$+q@k!%g$g*xsn&?F8%l>U{aHW^B9%kG&)c5;jqmP)QeY5?LTD9rKLZm;|cB zcOt6howP+5ZjK?fB^>$;+o37Yr`>aJBH`MfE*gq5V9s* zNLhz8y8>QEEdVWWF;kZbB|`3s;`a2Nilfmp_Tf^EBbGuI32eT}=dPBfrlI6ZsZo$H z4z21+CxFr_SGrV|#Ely%j*-l1mX>e)4>+jZkGsqGCgL-Sd4$-YDnizD4n`*(EGA zEtrQ;8u=$|@E*QFkg7PRrt? zYie}A(7I%h{Bl7`>l0vJzkUOV=+sdQ@WOG_90eI@EaVsc+478|LFxn*ZxyeR`w&%@ zT8Bb*$|e({VOY20MYJ49zkU1XH*fvxty{mk_14q3-+cby`0IweX=3BhMa^YzYkO3Yz5UeriVO~#-^qLV#L2c44!OOa7K9-uA`q#x*5k%PDyp81u4lJoD9S*R=bC2D;CnO-MD_` z>NU&^o$Gq%s(oqP&<|Wt4yH%-t+R*G3I3CgSvP=9a_X!-1!+y>Y9aB!;TCFoTsMa@ z<4M)Tw*)zequE*{lcr-Gf9O@o6F< z4xD3o)Q-XXjaxTaqq*nk{59bo+0wYudyX9=G`f8CDvv5?{olB--NT{_Z|yXECHx6Q z4)GDqFu3wLTuusuz*kq!ojX?)nRLtE7Q==jA<{qj$xm1)Vo{otgTzUNJk*zOg(3jU zODua*@r{qclZ0Q2oB|i3jvQUiwu<)8pDj}H9IPIw<1f6Atiom?!Ut~Qh!;Tk9^&!I z)h(W#1e9yc)ga<)^o)H;ei-ZrMTk#?|Zm|8IZwnP9C(ube@pS z-|p`zGiu-#1vz!^2?7Y8Yw7#%yZ6S;ThxS(W?MgDt?<0Ok0Fej*=~6I?euC@@0w{X z!UB%w0p}w}Dc&3|-u{AYSFc@HC_^qsRX}E;nqDR4j@Tk9>ym|WRrxA}Bg%q9Yh&qdFkFe+$!Yw=m0j)#*r>nh;fF71KX zn>vMghnmPnAcS$DF>BLjBP>M3oV&So49q%|`5K(H;e+Y>iwg34^Y-ok>($r)kJoR! zko)h-ag47WM80$N#&<6M`rW^J;lFv{-v9j219uGpO{gDV_IK%ZG(gb&!2S2%_vV`% z0DArM6|}8@=AEc^895!Fi=Jg)^doRF!;czO+&L zq|&O!5K;6oSIO;+G^SQB0Plz3WemLk4P_}}kd>%u^~>ym#$f8Ec!J~Btov~e*1rIz zmbI|9ix)3`_q*SP7i$}IT2A8s1Y5G6+?vh$#W+ZwZG&fcbjimiI3wH8b(pA$0W3kaN2s8>C~TQGh!6aakd zKOsT^%+^)F(rsvvm{ay#3+{u+cvBr!K8tFa9!xUUHp1Y${tm4bApsq)G@qrkIFdFr zDyS?vyVjmiDP#mJ96dnlZuXDnxiCD4{C}6P{;#iGc{+Myf=I3T`|PdT|NXNs{_iio z@;{t@@IRiqR}&2C%e5xu-xcp@fGPO>_uY5$o)a%#y2N1!`n9_DQnkxAa{KIN1L22k z)-hXG+PDAUA&ya}hvBUkbTlv~tL`RN3U^^$%z)+_tv`|_jgcU5Ax(mh74l1Oq!z4U zK#JS`rGmI(q0P2?_6MR-i&fQt;(0%8l+LICoVGHW)iNQGS_ zER~Mu`Er<_%^>&^niL-}qLCQ;c|(j|`9LWkyn~L5&7&`T;R^&V01=y4R2fY|3h-GG zsqIxbghYfI{QlXW{h5SeKS*`ga!w(JQT7RBCSXz=Ls@tc)__2lU}XrnWQMXnF!}7W z&$3`c{D)wuiy|P0&-Z#RQ`4w-?k4hdA$OtFaz5}-m|~|}SZm=d3*8c(u%afW0;YnE z6JF9-Eg|rhKMIRr%&-Wpy2jVA?L}H=-1J6HMQB7WOwrS~3MS_mo&RQLY&c;80001i zA855Rj#3f7vJ;vKr^7FSzxhXUk%TH+n}+lOYKDX4bPz1yl^bvT&zD~Rf8Pkt!?b9u z2)}Ui_J6+c?0vf}cg4nOfHNNtJ@^2t(J#F85-)ncBcK2C zc59wIdw@g~1KT6*qKWRfijKmfj`gUI2EzKX@J~0d>C)Yp67Xx?jlcz+fjJKs@`Pex zhFTMH5M1y!CJ8J^6AZt*A5!FHm~GXmKTtbqIN3eu)4S$~?#` z`P&z&g^J~~1j4EbJ1=@P5elbIpZ?$nKgcIegu|%MdW`A|ko61#2woe5VElgbo8SEN zKmT*zdsT{UqtAZ!vyVRdC^$TbMDgTYlkpHo-z21f2$)Yj_0-w3XCHg)G13GaREMw( zNw~&@G7x8XiLwykq%a3!zW@F2(?cG7@Ik&#z{^0nMUy;5g(RRo{`liOlFhOWaTo$f zT`O$dDhjcJsKPp)c7LqZEEa(~7gmibXo7_B_WW^WvQ#9u&V0UNbm$ME$${Up#1J1w z8m*Hwi&vLLY3(hhizLfC-o!77acQ0SQw3?a5`qO7FGK6pp+Ip|MWv(@M3PkU_Rz#pfxzP- z{L)_>cccyRs|<@|iPdjDjW5G8DKBVhJLNzxu1c(nb>Dh(Z|- z|8l{RWeKu~nG9bEJxRn%Bu|~3ZAB6BkVOE5Y@EE|1ToPJ@&JT8wMKHC%Mk^<4C*2c z7nG(@rqGEni(i_?wtkW|GqmlWed=78GI7$D5PWzXdPdLLdid4Y)ENp2DoL*ihs7M1 z41IpaB>kaM;MW~hSq&DkRcBJ=SneuxrmIr`06+jqL_t(y>}F@o%?VmZ0;3hRkY#=$ z5z4nfD2tGF)0pK8+5a+%(BdBA(|M0C0Wb_{QYr#s-A(wauUJb_;btW4(lkQsa`K+z^^DVw3otOVD1y%-Orc>s zU*77?5m$m0PKPiJB}!neg3k{zw5V&gE}z>DgdAOKua~8%>Dn_dlNXj zj_S@|YisLn?TcmENU|(!v)C+#*w`4%PFN;{NkV`D5+-2?VLpK*|4GO{naK=)CQKj+ z{2>XD3?Y+c0z<+C0twh)Ll`^Q#x}NvElctu$+C8}dQo?))$^_Ty?0){s=D{x_g;5f zmUN}h>$+8^PMtbcb?SFd)vZeaWCK0f*%>2G3HFgsp8#SWee_Yf5uTMSlpz-kxu{ks z7-1wq444zvK4Jp+OF(86N0wc?cHsenIpVP?SUUjHk4kFlLLS6}17xgr0cAjMG@Ewe z09kMgp&tm~tko#OME}E9$sRbs8K`_cfU4S_9sj#Yrw*~}8q2L=Ntnu}K(3wVp z*iyP-3w$t;0FSUE_;ny)-3`wZdw0NL05$DFMp~^hKuozSmi8Yw><}B5>#y~tA4Whe z#wYO;d0FbwZTz*KlYC$+G?h$07%N!<{^(2SyN*0%w# zl^R(P>+OyForXY^a{?G@Y#g*I^jM<`BWxXzw9r|gJP%a{RpSKw(?iETGd$M7$mQ9l zEfoQNZ~qbAFnsShG&5~V&N5!MbSVR2-+=>ePV)y_2*hWJPq#=cfJ9<06s*y0IBgL_ zlE%1=4v++SF$kPX8dVA>darxTj4v}6aY9G;0FLaMood0zoIAJizO9uI*3lv@K#kf$ zKU6;p+T@f~u-lMllUD)l#^yY!%5bMvn^jE?MkeD#}@8 zmXJ801rQVZs3h0hVd3{2W$O3?1p9-lIgr`Iw zuoWxd5l6^?RJer$z8@=s{Vr_F6#~;Q`T~Io%AhfM>V`)~`uuxOr~-w6W2l#^0A8U` z)P*w!zYf&_RG}hv=O787M`e+U4A)$9jeu0x5KMUnj5K0RyzT>x4f%DbI7?PphS-xx z)sT5rXBLcvOA7ep*QBzY#W+WT*{%F8WI;&Z5M>n%Ij7+olt~$w5abDfi<_?KvCI1V`D%2Pz6(wCZFHt# z@CQ3un1C@!I36}_+5|YzstTHthl43!-Vx}vjIw3Rmg}y&PIjLccG&eo*TM6F*#)m? zqY2`L?iOx0c%KacE{Z@N^eDU{l%piVN+Q)Df|B?Jlz<`Fxx%Q%Kg8x3pa%3n96$`W zYMYJzvRuHU7r*$$Y|Evx5aVZJ9SVU(z?Zi*Fos4>2+HtIIM@XogBJ=;WDyEc0O9%g zHmQ$2_81lC5+4+Zen4pi!mo3aij6Q~rYX?qIfdSonx{7upcJwc4oItV$cixfv9V!E zKGN=*0}Y{@(JCfsS@21dOx2p-SwbPk$}0L2leJn@N?I2PDAd4;Eh?dZ;>E`z zBW`Wo;wWM7N*&60El3&zE{MSt%Zt!aM?u*|+C&0?2tWa^240Y;+Ef7F1~>)+$qF(6 z2XNt2x&Hd=K_TRVIYk&B`7=b1krkAIl3lS(-q4c-nlbzVPZ6iTxIOS&0HMG=6smo) zBBMA8B@CDls3Ht2oF4>m>TqVvH^2E!GEx>OO1Z*cmZ(^JvIQn3v1JF;C2$7k(Ai^d zDwPX8bphxAR#-X0odXiuwQHC7ph+(9)5~7=G8{0V86?q`pi3{k^ebQa3NVYynr8i) z+8Wl8f#XO0-n~%N&cf;*A#x{%o?7dd1+yMvLy(rpWK<9jeM;_Pvh>7f2WpA;MK4}O zWl$IO{3zaTyPVdg2Y!vA0(==Kd+t`r5F=xeRwL$Z-J)Ll50lp8!z2HB=mal~wv~Mb zh%wgheRSWK7xrxE??VH+W}w`2MR1HBbKA&?G2US`BU4>1bS=Xrj8?9qyclwuVnc`{ zvv0XdI2errP{M~_b555`5K-RjEe4O>b7_)8TFu{Kq);l3VUf+0{UjriTmXptzHLZwEV--$74kL`Ii!7{|$g4r)vFn!Chn|KzAPAOPt~VVY3snE zQ#J8%2WT?`Wsq|trT6vZ@_owQV_YboDe_8??DXQ}OB1GNz3%V^NrXpS6(ir=U=i#sMor zbA?H0j6%yB5#vKy#>4`+KscFJx9D5}*Tgy0V!5Uyuxj}-5KNZUJbQc(lcO3c3H3$s z#BkQ!_U+s0MgSLl2{;BsOpgb+ut@aESH2P~LL@E9$AkPxn8k$sf)~61&kC3TaDbnN zzRRl06<1urv`suX273H4xHRy-;M;&XF$OqP3Ppo&IA;YKN?|FAc&)$Kw81uBmV{X1 z0mQH!7|a0~tPtw-%!z$1gH)5s!+v2s=FPZJCSY)%svatIwxpp$7(18qXLI zb1PQ?3PSBsB)9Uir18X1M0U!zc8qdSG)1t>hbCY=GpeEV)-z+FqP*#Cs6DF@_&%ki z6h=xam9>79h22!_Gm9d_+f=JzYFlB9AT0=(`Ob;4@A3B1X?)#0Jo=RbhhMjDHC+W| z@_QN!d*+D706G7>br0{}GjE=o0=ey`ZkkFlGU9XcWYf`$4lc~)L#Is;N5wH%Xmx`` zCWFSZ-G+g3m=#hQq{xC8QDQo>vuRc#6m4L@jKi$%j+QBbEQnn+9I7ip1`SrULjH{e zJV?bWdZ9k2HoSJ_imZ}VO3f=%R3z?!UAuOH0|-Ea9|csQU8~&Ep+Or!2f`2l8Yl@Y zLYrwxg&45Ti(d312=I%*hX6FZL=9dcjAdu$#t{N0;KH>-PsK4qMp8ix{4yWI0mK8E z(F`FI#!Sz&$~F;B$YrxFE*9;cK^`bK`9tK$&eD}$Bcfs8Pds3SjV}}gv;x6U3w1IA zEY{$CAr}_}>{n+yi$L#ur6fpbeBp80Fx+p{CF`vEJs&pvD8V?Gxa2UY3Wvh*0JchLd$`mOtG4C?E$zjy$rQNuJa~ReH%(jT?1IZ2_Q3(yRjm z3hLOhf|_Ee7m7;lSW_|n2CJ09-Cpc&+$YN{QB^x4mTHs=DvT#^7{v@I8$ zfgbsCg4Cka=ocpJO5x0J0Rl#a0@}BuaFivyJvK1NXQVWi_yy`A2^B$CVf!(X!6;N2 z)Piz!0bIb55R=-((*r?bV1jt`U961OiHJ0jC=Txmh{`G+@d8cz)R&t}OIi#}TyilEkVDPa_#w7M6uGCoZC^(+EIWOWxtBor^Q zDMf4*50c12nXDZ#R@faH(QK2&rvYdzQWfFXF7!&P(n6e@@P)w>hug<7&s(_g*EVnX zkrhk%#DEo4B``cOaqHn@AKJP5U%X|gl0`K8Cni6;|L}WydKeujzhq!m=Xs8@iUx4Z zJg{RYAJInVy24z<&>sA1@&=1D@cq2ov`aV4QWVxG3sdRs3|pAXnx*)FEM2Z~z&tE5 z8`h+dCRNFs=89rq0)UXKI7$j{Q*$a+OF5z>hW##~ROAAw2*fBURac1NFk;jCCGfCD z9F+R4F-Huy8Z3a@_ktC`o?TgofY7;Y>DYbeApaq6L;{VpsgDHrsn zKA;9GMA97xpWqr{eg#r+0UhXwSWgP}3N74H1c5;rCTz{PaycLjV$ho<{pQV^5mN3S zcoNUz5r~R;9XUBp2FX<-^Z*@Fm62UFpc$|NV2IOVu!gJ<;b<{$6J*T#tOJRj@X_PP zPmGQ7p=<{W{MJa`RU0`m8g?mqiJx6uCW)==6@L#O8(<+2nMIFOT!g6tFG+#PIBgGw zpiC+V|FGz^2*4r}WIdi)%B^?6++7K9F)h{U3;)u%{-x`}0iQJm;czn6f-F^LV#|V& zEE3f^p%E)ksHJ)h&_|TTGNNRY+{iqVbD0IIX!P(oCdJ`sk+V`)&zpY&~^Cw4+zhl)hVSSp(TB^LnbE#cw0EI7Kx|Cz9=$v#OQ#*ll zteHRC$fDBWVLdZS;uiK1PsOwgSyDb$mJJqSY#>{q2B&;QYbK*aVAkJl6N!o_DcWQp zV3QhQJz|BaMPUxsTaM8azT0949n0 zp9KJ&5FiE!0w0KRt4L<(g{yD~F}hf9VkHZ8a8U$xVc7_eOXvzhPJl~@T|!~VczkFG zRfduD(Wsk-sf4q$ctlfji${l4KC2ncYKY3#8MZ~2@a!5ea?wn{W@}L@(Tx#zHQ+`nu*$# zH)VCU=O|lhVD;)%dmndCfKoe}mrEd<(XApep%$1Nx*t#5*%6xMRvszbkoJUdn1meE z^NC@+aA}MXAjSs1=%c~QcoA{PjWBy?%IAoPKD;%tP1@9Ih4hk>7!7vAC4d!6GM>t) zTcZrQWy9G$i=xC~T#}mQRuVaO@+7lu4ZEQF#zS~56U8wjvv5(uWFA-nKp;%OiVTh z2e^OO+9FDR*@4T>U(g9J0kOk_jDQs^GQ?mP-hl#(0J*?GtXqL#C8C!y#?kVbBaaf*B;V z9BkLES}9|J=8YE>LAU5!4k|PZ$V16cUVZh|fV1>bp3ZIAryx)^`)hKI?G`g~s4^tfx#iHG(C!63ZTpR&gO8y$>u%0 zES@r)K?4y!FtKnXq=Pz(OW;rfn~Y&LV8fZ>WF)b%a)C@txItkcAe9ri5U#~wSTyLO zg3wG9gIcJ2TDyoWx{ZocYRv%p8;xrX^H4BRDn8=b*)76nxpAO>$54ibFn5dKOJwaS zal!og;6i>CkhWQR%Pz!IH8?ocS3g$)pD6jw!fG7BP5c_ALltzFN z2t=wu7UBhHL;w?;fQ32e@xT`rbRgKVV+SuWi2ySSl+jte>S4&hR86^zuocu<0Fh9LfHNyxeC+`~0F=#}H=D-=sE2;gr&?p6a%450T=ydbxTy=U@D_B* z_xZwHX7R1c1Q-CQn6a9^DQv^a0wK2!!uUIRTtHeu8QKC}W%oBwjCaC%(V|{iA%f zNXUv-k*5Iy$FmNk{JiF7*`guUsKhZRze9w*W$UEn5Um|C{x1I$}I_?98}6X zY~L84m^Z6!@7;^NO9uY89(A8k?%*QhE7v+tFs#~zGPL)Xjty?<@578xkuE!V2g0AV zS$dZ&>6yo_QkI8!WxDKvK`LSbE^3{Uq$2eev4S3M=B0oPE6Q(#t`J)bMisG3&9DU0 z;7i~wkRYNKl#eHh4@HWSxRq(O8Ak*dx-dpAf7RM*m$I6U80>Hs%3zF(ilaZ&mWt|| zU7}q9RK%Pv!Y%^DMGV9E!$;i;Pxh)o8Me6?ju9RH57uQJR`Gs20&KhZkF}V03`IYqvhy4 zpb6IIU^tiXLMnir2*5N3WzYsrV3=@~bBLH5Z~+XFL~o|A0s)R$mNX1uh@8C_YvR;-i@T%ptrO$63?a(Vj#^3V1ja9y+g4ll< zb{~l4LaW)~S&;8sbhjE-pGb*u&&(y{<@!oVtg0hLg9z*&;%G)6(hU*s@^M z(<21Kxvp8BT}IZJQcT2%mxDNVg-DirSi}KCupw8k0pp|rXR!1GG=TuXK@-v>23f>P zTV4$J0A+~hoob8@%<=2^R&=u?99Y|;6zd9*;jF9ZuLA?(aY@})5<|a06HSWNJmlgD zo+28Pr6;8=qZs3(YTB&@Yzkm@>}G&97nVA(42m=v%VF`@q>KbEjLk?c^dO+1V}wD;WOc@u9Z3{9t@y$h(K>9=jQeNFdS>&L(A1j_d;fJewsfwcH~T zQkH}zLs&tIE~4k7%GvD-5|v*vdZSdcl(3y)M~g`gUcu?hKhO)#D~qoZKx|Gx!BfCA zI)zS`Dn%F3)C{X$X*MFBa(4Nz|1g2E@Wkqd8j?jNF34yM_N=fU1p*)o23n8>vna>{ zjkdhVRReHgPcf0u^ECrrHDYrNn{%<$ICVJSPN^n93au;&o5k7~ZzQLV6VVuIu`J9J z22gB9q*pPCav7NgsGWtwK+(r9P!3s~irVWBA@5pPeVrTRl+Gg}9)oBCVM^B8*!IgF zYAwb=8NQPRrRB8>8UHMBp>>qS0^H)RldHqHl?NyywN@}h+g76xvV_1T!+CNR&j^tK zUg0$t5m~66jYJB97@lGaB~2V?!W~jfmKKG2IeaPko{*8VyC_ToullDvTFO~nNNak! zmR(pPEcLdrljCjglbQAM6>daxb-Yo=va?-=Fbvy;GQ4AX=itbT`}(L+Z48QO>F;lU z_!HY6*ilL{>#siZ(Q<;bJeA|}uyz<3vzF?L1;gK2$gIW$6gt2h6qhngVMj_cB{4;v z4P+2O8M*)2Vhmz1C1i!462Xd?xTT!B!v(9-y#Q_*#Gh$ibGp>G=w=_uilmyt_!^Xn z)`qbD;4Kv+rwd^s+0Z zwIfTBFF|F6zgaD-n(|qO#8tx15O`=35n~u(>tL(jR}`j3(|@@96q3zA*xDDxO1GGP zw4K@!8HH4&lrp8M5joXgMH?#L{vuQ&W9iE@9SN^ZcRxiIe6#@DEYi~t4nA~N-0n3U9y<1cyw%p(ZeTU zp7(6=w>-O25fAz-Wf3kROLdEs<=j>z#X*mdp$;)T;UbGM%vu|*78Ri%%R7Yu9^E}~ zK}HJC7@Y3QTDxKe6E1UWWN*9Y+!==&lmUV;HJUF36oQ+Cg(SKr2jy+ux|Oc;h`#_O zgxM%VDrkmxiy&t030DC-Hq2Zi4LampU{Wh~JEkShfGbBWswCaW_H7V@T~@hBhIEXp zNEg8O)XYIfMkbqxz9?QiQ$8*puZ(x1xV~QS@Bx)gZ00u_=2K1HlVd7EBo(Az-nUw^ z*gdQRWq3g;bhLzIG|J}9oB4J(+EzUNCjN&s7PcbLqD7Vma?d|SIpW7J=hVR~;O*RjDdM zA{$-K`WTf`y%_RH$Psya=?MUyKw-ag3it7;Aby2o2rQjH|NR%9ckzx>pZ(8=AEnXU z_{Bc_$dy;T{Y`J+Q6Z#%WcOnq`_$+5?0uX_5YM}Q=1tFfM*Ql)P5=Ba6wPe(fnWZ2 z>(;o<*KJ)qrVjhVHPF2JJbjF=o-#4;(e7f3@80=ksk9VgB48vil%;GpGQuvndh<}G z_`qxG(r%$u=wXW4rxD%6jIEp=;F3xLKFXd2oKntAj6-eAH27M0&^IW9(s|qH(MKNz zps*6eg@Wj>{DNJ0YlcJHu!Gud3I|>~70IyS9aMqkD9Lh#0jiTVb6JQJW{kp~PZZ~F=}ZO+49VEsX21nyG9Do3$S4*- z$jAp7#V)L!V!Q`vl65pe8T?*05(v#T*l8{XIqNfzvi0(1Lc3-!defHzk zjO;zfjvJbJZSbJ~)#pC_(AfB)(Xm70Cl3%98#^?1a^U2|F`T;$bML9_nKip-&g`Z0 z=Jn5;yRv8As-B)zJ@Z%2pSN;B&&v8kIl6+a)ef(Wg-Zf^+=0vP>4q9{O-D~FDZM=D z{s(t`;xm77;NW4Aff^%vjM&FN_2;+Ud5_}RbOQ8wboXN){OBLP=bdkP-gBNA(cg9N z4}brYf5wh};`u-^kHs8Db;C{n=kfgq-}ml!kX`ij*x&j6Pw~3P1?R6@+TVB2w(TGN z#GiinKmF=?Ya8m_fAH{U|LSiM>Fsa&u?}zy1ub%CxI68mc9RqRb88*a;!6TBp-)Dm z4EhL{L>!7>3LT+cz!Y)L-bT9z_;MX*`=*q9Q!0&|!Wb+mx)pF?8g+)X+Tfi+8DQ14 zW?s$8PDfP%_XSfi}W1fBa(_ZnCYg56h#4KLC2pm&`kiI_`!3%L?zeo{VCgrRX*?Mx6k%AOs zb|xawE!~NlmeXW2YRFp>wM0U@CBVvBU;Lcz(!mxXS(jl9h2NRWDh^HuTCz!oE}3_n zo#Dn2FCAx}l8iRkt%uCRv!d-Uypa@@!7D|42b(RWpd2PnW>aQR(b$HVC=0ig!G{$Y zV?6mORW5;$lAaOX+8!61El6eB<~=o=GeUaTL38iv(Tl8xF@4U=!H01eQYxI?-V1)h zDrwVbn1y)cXUb4tx84TM;P5g%YLGF^QYB1ATM>Ys^}g$`zrJNg3c}@!FDIeQgR_Jz z6QNNJXVjHR&P7Fp85QSporZB#gd?ZHpvY#Zh2CqbhZAetg0$JcTg|XZ_eD zS*K!{NDOD{Ja94o^zI@F87W+j$>ii<)rOt*#%28X-iE1_-Xb>bb9Z#f$!*|MWq~Z`|~MWKVwS-EV)|B^MLl z*SqAcKl%CthmPF#{U6-?-P?ZR$6n3;72NT1sN{w^_7%F8R zC(59DX38u&0qAg*3&h0969Dzpu+eV_N4XQVhIH-OaSqdxy;X4!RF%rB{S4QUZ$! z?SgBo3Ad*&1*1k^5U4#2!GZq;G*6Cb+?KMxEv;L{`e3W@Xo7SjdLm~n%s4iRT-F*# z;dn;EwuDp{#ZK`aP$W#z?f-Yl=4r(-DwiTC=nJ>FZ`!xKSZhHQGe6wQ1>;*h?B4y^ zx4iM{=ReyPnA~b>aDDr`w+#-tr;b-#e~lRsZrS;J$;F#_$Lbq5efJHoeK{S5Nb2}c zH++WxYevE`gt@RkuYAe1KpBA1jW^%Ib{rywiETYg0mI_#w)w)BzDCAh__uEc40$%4 z{P3(*SG-d{4B^6T$8#N9^-_)^NaLBd$)4Khlu|JUIJhOFkrmAsMxcP{GqiQ$W8BP) zM|s0rh_f}qk1{-xnV!PDglVG%ya+AaLV3-7BO;#RTZR+P2;f@BpOorSV00_>W;G1+ zG=3gCbAd8kVc7tY&?OKifm--FGrJ!Y$pEudg~OP7lAG8lnaDR6kji=>@UMiS^_EdHt#^9 zhD{c+&ISnyGBkLjj3L6rS~i*}-*UY`n3)8x&b&II#cbZs;p&D2e8wrslaM_+c`>Q#+pxRl%WoevYqQ}`9hhFo^Z0A*N~ z+PiQ6#tYAfjF+3Ry#${BoXaCtcwayy>>A#_;~^yhh6vnu|APYqg9{e++* zwl*5g`ZbO1dlpHFQ9Of(|Lij#7;;RY6lY}#u?vmsCPps*aR9?E#N$7ptHE6Kdf>A{ zivktNin5=<@iO=5Gpb{WQyTL(ef#Wasmaky$Bx9y-tHeA`}H60{2Jd;TH1#nr8@o) zw=T1biCZD7Po-HQOCr-%BqO%vq!JnnaYNaSFwB1sske;UDA(g%UoYOJJ%ZuYD=^M-XYnw*G zf)JP*;O7e?tB0*u2%2zl+33uTlp=@&MG-5x9GIjVTneC44YDw_nu*0c%x>Xk!)4KNAcPmB zA&hg4Og7Ff2-ju%mMrc|-V2L4Hs8}Jm(QKc7r%!mJZIpEuYxR#g~{Yonp8m~k8w~E zaJuSl@Hfl#B)Fr?qLT>zcQ3bGR#Cgd)=dMsK|%|j9Em^PmLqH}niWdDux#um1VSyC zoXe-PT4zouz%km<;(mX)^D~!Ul8}@|beUbOS(C#`=qfAh^h-PJk%zvs7D>0XuePi& z8d48?+(Upjt0Q6;=_e#`kCGU$zy7{=efBTEc;^qcvAKZ-sh@r88}Z!S`@`+*5eC-0 z=jYy{L7lRy9;00Zk>=el#wHhkRenM(MbzC`9`Yh2oC{~5qEbuasXl8-DG3l}MeqVm zN-#4q3~;6rW^>NJWRtQQD=M0em02hQ8Ls_`P)52XOXyQkK~`wC`G{mzjYJA>Q@j$U zM&WsT_aCq*XGz_p)q0)JvQ!CRBWuqk9@C^*FyH7sji=`op#id(2E&YKhj~J1I8>8o z)p$CxEH(Qbyv|xn${BVVX3nWRkav&N>Cq{(8*j;4i8hxgM!VaKW zHS5Wv7tP6i*}%EDVkG12a&`!Wf>~#?h9;n}ej%p6Eu1_xJ}cj`LvCppe~d+jVT&ve zgjvFHd9EmRQQf*k@u&YSkB$hrq<%b4C@?Pv>Gs$_O~ZVfMKJ)8kTQ&fAzeZfHn!py zf9|c^atXDtFXxkg@|WEH+}nO~RsE#qlvVYZDfARFX#r(av~^nDB5-w)iYTR%qSWf~ zZm`sM=4OX*byibL$#BNc!K(v2d9qYp;^K|U1>-Q=M3LN@A1h3SgZ>dK_z+&y_vxl z;v|8mv~F;vd$}IZyRP1`;d+~YvCDTnrwrl|Sf{Ya;tP*?UHW3#baCyUZ@W ztK7jwwX3kC(=q|H!EPA#SEkZ&%9kR0>)Uc6R!q7NgZSZLM-M7O5hByC^rG+|fA)Xk zwt4Y2&u1eJ6W-ta-Pi88>s~g}ZM|sYTYmC&9e^8lS;09hLbq9CP7=?VB|R2CWMl?a z_HeR{mJ(E*8TjQ1(61D^M@tN~2F?tWTV4bf*qzfcF)@B}!ULDuC-cg46{YGM%xNk! zAhibQSQ3+$!A&zPmRcU5HKRr>cfyr(BQ?$53}spw$7})7yq?myrJ4F$rdfpTJ8_(k zT^Tl`Eq@(?rjo( z2V81L$h(8`L~f_ag}I?;qWbd=f0q6n=b8KnU%|zsa*MTA{lg2@XFv2nuy@*-~4CZa$2)`<-d8;zar^( z|NlR|``-KMSDZDXp%4~CYayhXP|!$Ya&!7E^quv->oC*FFjj5*xME1uEJ zSHfhfl9;*up}F%xFkEJDr;2}Pd{78DzylYzZ31t+10J!I#d-&=nAMAvl1$cWuQ{1Zm z(iRBA>T8PFsxx^qQkL|zwyL9npe%F^8$KZuzc`(FIW`47bw2JdoYl?vRe;E%EXt@~ zs^;wV?AhxkPR^QF`{YGP&@#+E-*)%Mggm>;)Jc9rF#IwAAZKP;Gnr-X6J+!+dd z;6UvNGD9#cR@B~aYrNWB&p>xN;EyZ=8`a~Q{_+unKmVIAp`UmE>`!w>Fh>T1V*oK9 z{Ec5)wzU7lANw?C%>3`K-uUK!{o1B%t!{>fhIxz5{SP$HY*%C=Xe0Wk4FqQ){X89( z6S4~9r#$RmDMC``aKSjwSh?jD@d|Orx40K>#vE`dr=OD4wEKxIidna6C8(N1`Oy!u zMRRnQrKhf%l%b}}bhRs$Cx$Xizg5Jg3qYxh-JpKfpJXEiUBaXh6o>#pBiZPDfU$t4 z!Z^T3!`wHeG^kQheGT!llzB26`8_0(Qo=~W*+}9kkr_P_Re6KqTw}&4pXg%ak!c`Q z49*zg7|P(tA3zL&!-o&^ktUVOmzcJ0-3sElPxNN!%DGxpfbxdpHND(dU}B2z8=6>uug(mZ*=cEY3Rz;vYZ)~%7aECAs(!Ta*PJMMn{t6vh}LXHU=n3)dCMFp#Um%ipC(Wi;pu1;U_-c| zu^B;mXU6-&I+2sn!IsktxL{W?3=DjlDSW-7rSiKWuqF_bkSVA8mp%}{4dt;u18DAz>dV~>q)o_#u?+l*;=PF)SH6(NK zMSB%<1vlanUyi&iCO{bA-7C7RJ)T+;t%5e~Rsr!TYMyX3s`>rzBo87HA5l`Mjb~q6 zRdXD1YutL{VB70}&xT{RZryt2l~=OH1TiNy3)ApT12)I#R72L44jedu=Z3W>zWvE} znxHJIsY(p%t35sXQa4)5esH8A=b0O#9ck7gy@eV>2T*beUg%9gA{oYv1@#||Aaq-V zIf@26wpix_MVhuD8O67}RYyfKM(8DRcP`BRPmdpZ&3W<5z=hOZBv4Sr+|TF{#&&hE z(N{6=6HE4@Yo7o4zxx_c=7yWT8$y}=2M+Ne0%UvP)mJWBSo4-K1;6w~SM!;I9S=Ra z>*3uxBu4VzaI-ry*b`ip*64G8{dapFd;BREod3qxzf!4k&Gy$1-tYBqL`I)FN%^EP zM~@xr?dx-vfnFQBcUYOdQn?TQN3x_VNX%!q0q+dt-2d@19NA zyU;Tu15KlXtS$Tpq!t(=;T^XkD5H!RpS7!2@=8CD3p<97gn?$+tJDIRmU>oNW(=*X z)uJd@3}v8;@`UWn1Ph?hHth3|`Jl(R?^1hbZ&6{y*Km76!BbUKu1IJF08KU*<)&HC zFFlxEoGKbVDZL32R+HA^KQ+>HE*fqLP;vSN>qbVeDN4T)ZbNv;Qc0}P@&IkGPRQ&i zN)FN2_ay);AQk&&memV$W^XOA?e~HUE&$5#H7MLRf-+%=Rs|weQ+_oK6Qem&wdNK{ zz^Mez!ZjwfLZ~jM2Y;2I7MoU`>gxNttVgN$8Vw9}$@^8mYy8DDXQ51kqRkLR)3{u` zV!wLc+_mH5kJlG5OE|slfn9GtbmYqZ-nU-3zJ#osq(6UT@An1<|Kd>X7?pBX>rb6p z+q2L=X}h|l`Yg}>#HMl_@O9Tb?;mgYHb>a~^%uYL49b{j-;oIN(&c8r*)sbc4BqWFw5hi8B47RXnQ=9{u z?voh}!89zXX;@j~Nv-|oU~AGEu@P8+?05|sXJI$8)HGlsImL695g&|ouCE4=V`q&2 zB#`?glYI{hK8#^;BcGaIxArj#zM`cVQdNp;R{t)QCSw5?vYSZ?bwystXluFxFj1_| zs$bKF0;my9)4p7&(K>vHTFUjKfnXVpn9hik!EP;3ZfK0GtpKIF3e25L>py*L?D1Kd zLoyG_4jci{@niJ zuH9*5QOvXFxB~)^pL(RqEXsBI#J}-%uXyO;-F!fs4>o=E>o;>;-oD4(=@``IZEyOq z@I%%_vajXm-~Lm7^xyxQ=i^`b%@4DOmo30@u{`C1_32I*P|;^T_cvtZLzNet?{>@S z`jIQI_?y4`DyhHup^vRyz4D)Ly@TRj*$kWNw1t21`0~``o*MmOsuA5ZwFM&%+~R=C z>GXNUsP4Kg`i4xFxZOw@d7I+}R-#9KbXEN+`my~7HmqAGJ|)8N_6hoDFEFSActA_g z&{m4gUvQ9wk(?10Auj~VMSzQpVWrfIqFhDd#nX}`b5pzbuV9Out*e7L<})U{ke8Ww zMOFdCHE&nQ#Sh)|3y~lIs^@JKD5UXLSiP(a`XNaQYGz-%gPRmbGYF{FSvl0g|7@-_ zvifxHv0ci*#aP1&xDZ31kUrf6qoFTDgM4(j&4n@0N~%e$*nhcJUe`Y{R(ST9Yx`ivUI(T#<4! zw3;S$977{Ayy*!{NH3TizM*4A%^9C}`@PK(nY*LcJueg6e$@5z=eT*zUsd{K^`m=J z$}q;x0&ZXArW~BG@PYTg3v_bp?RT?PLO6y)@Ho+qEi6r>{)R(@`Fi#r{pnwUW>|+J zs*b$?002M$Nklq1s6TD|`l-th;2 z{5d{!z<-bdu<7E>PYG#Sh9BGaINb)tPoE1dA|cDVkFJEbnHtEOA(U6NxN}S4<3Lh{eL1BLNG} zWtj;?w_%bG!@aRzBuVuV?JT<>3F2z@jkuwOuqKv@_OkKLUolx*Nnupbocy<3(-c5R z&H#XU1GqTk;$pxV6Q?F=J%r(s02UC9_sTRx!sW)+x?iWd4{iV$!L& z$1Q_##0XwCXLkR|@qzkAx2fPg?L3y9nz(#HkAq^t_gtsF)b)@dy5AJ$|{Vo@6ywGe*NRM&*?O%Iu7!!uK zY<|i|Klp2p?tY9_OFoQ{J$5gokHP~3$2ksX`HJOq9=Z?~CL-wImU-ti{JbJ_2GcXX zQtayJILGG3??Nx_?bWm$Rhiv7MPoUlOmA)eijhIxL!VW+ruJ-7R0K2>LAQyX#P;ml z&l_{u^b)6lo=vbF2a;ex(O=6s8JR&5U@#IrBiJ7Ik-u->9}#i%w_+qJS=`uLcpbQv`kSQ z@fp&tYBPR$%bNW$K$)XQkMhdWh7GkB7R(c4oq#PhyurjVdQ=DiWV>n@V5yQTR@y8k zqZ@!!G1nPJrdcyG0Tt_L3KYE_N20v`ee5XC-F7o7Gwgg6JQ;KV86L%W!Q;B2k-vXZ zL77*~;sb>4xm}Gi9V#kP-IT`zXr6lUrs`~0tz6Fk>hvikkJrGaG`>pA!;d~PpH4H6 zbso30S0zhCLvC8mtxkc4rU(p0MRahB{lpXlT=2MX*niPr3_0W9=W!s6QP^I8Nt4nT z+3jfNZrASu6CRU!$3Xl`Y!sY}rb58<(C{#ud|NgvzP+CLD-IqxN}*|us>j%z)n)ZF zZGhSIb5(U=nkZXB8RkGu>P^|4vCeo?Fi*xXnuEQc&3~q#ep)U=gGjP4IM8oI?^!(o zDtWH3~Qvnl=sKnB22>Z(m>k{GJ{&HN2 znqWM#ZxG_NLnAz!$x4X16yQU0WXGoDz09As%b@_K=T7-+Q35!Bd!{V40lO3 zCrWNYAl{-QZVUk!0tKx77#1`qsx+YBK&X4lbPt*k3owOztOJ$EHnmA8n$M7GH&%7{ z63Kv0P#Ap$C_@tOT5sRJoo&23ckW~h@cHMTf8@v!pp0?>bhPSZn}RtU?^(}!mNkFH z;Tq~q2n_Xxk&%#R+pSb#&pnZ5>X3!MZd;NrOdI2tu(bu78|agETPJh|&c>%j5@0fz zS|}r77%$jjyfSp1=bae5ZBeD~4_tHSwotZq!(C>lxNA?1U9e~gUK#C`N!6GYsbrxi zOMfmh)xh>0J3zm5m@F=#A>3DroX>{zY1~PZ3RWHi_GN=4Unjz#;cmh2Qchnn6>e>v z(5=b4%FLY#KrR%U#w&(Yr|?dEWVQVdHbo-j{zFHYahCS=1;`;^G7D1pXLRsPo}x6C z4r7M2l+eMQlImxm4D6UbvCc&Wgoa!599jI%4`-<{#O!4&mnrhfh#`|bE0RJjs4|`V zX{L}Zu5sO>Yv{?yTR%pFf_Q~r2F_T`usZ?47|)&c+IrQr)y6F|DTbGlF1h3qK3u>p zTVb>tMoGXIk`!ih3>PnBKli!MHCTflcmv8|G5TU!C=>O@Z- zwRbqCTa`x#lV(t(f4p>sIb}7Y79#1B>V9I$Z7bfjbe0RP8;4o44}T#+2Vo=x%D6SA z9#Fx8*Pb|j3oYIOqnXXZEc6reX5)ZFX8I>p2vt3^vYcI|aSF~OkM73%ONY_xOT5)m z$1MPticY<0R~oiX9v2?o0514Wrm4u$an6g&oY0-^kQf1mcG1LIMZ%)z9OX@IdljCH zAXz7dk?3WA-0QNVqnynMCN1ZK|7LlAKU-(Y$)+_mZ?&ZEaE6l*0xta8>)FAIAl@xk zVep3G8#K!l7&R)lEJ%vEG{~>ehM^M#kT%20(~8zqo@Z^=!jOqiNDKj&n53*i%4rPy zns&y&q5KH<&6|M|~fyLPQ^*Q{Cds#m>g<;tcdPdG8Kg;ODO zTKDrSLreN6Qow~ZI*LKbuzW)vAPGW+n+(x7BZDUYOd8XC^bMhg}$+&VJyoRPu17WJ0rdcsq$nHYUq z|019akN-5sIVdw@EwXLf4|#=Z&Fa<5mo4LTD_mk`C}vECs32?r6AFWl??QXv(#Ch8 zBUUB1ntEgd!!c`RErriC94lnEPYk5+V2nR^gm460P=Rf^2-RVtSY*~BLq@lgxz{j2k4369o&+>) zFvpYESE=Eo$!5<+h76}W%(S22kbId9;F6qHM_uLR;@LurmpqAHbImn)TpoGk5w`cD zLyo_@=%R}NF5

    _ip0pBCA(79n7kgRL(w^$AXMp%3=X)yGYO{7Q+~DG4b?nS7a$H zb!Mc+gO1)he#RnW*4KqOUNUP@q@k%3}LGS2yeyNkssR*^pfL&>~T#eDJVHSQVSel0Nz zFvLd+SxF5{Hq$DGI;*-8CSg)oi$W-ak*=R3f}^G8Uox{8vMURFw?ryy)`FMu@oDf8 zx+*ftEji3Qfw@2^+B%H^7mvxDcY%6Yr`JP2s#Z0PnEteS9e5Frp+(^#+9x#1Xfd(WmS8=yCRJQxWC1lH3i{X_7W9+S;@; zRn(Uan{pR@L$0Vgp*)1uZ7j0oV1X?(OiKWndGmXoGJoEyhK~JXZ~nuCO@cl_H*c62 zy?80Fn>$hL{w36(QO{eP&WHjBht2RZ33QJz}y)IYD@B| zB?dIqom*_Ja2F#}^B)7itu1?)XfqI{+ax4OFc$O)exW}$aGZTuHq0PMO$lRpTYZL&4dD$Z=FAD5nHB%)urh!^c;UQaNm9R(NFY_Bwb}XTrzZgtQ@wBC%cO8LbuyA zer&l+(fmqGTNWlP7lE@-Ci@Z-Iz)z!CvSvg`j>YnWunOCdZ z^cDIpte9{7Ml=o~sJXbb%0q0+g1k$@QMnl|>2(YwJTXHLjKAU_V_Thn=m}NLafj+H!Mz3 zy?7J_e zY57ZsfQg>cSspU;!Oq`ZyLPdV1Z2VQ!nt|+ICjX;M)JXf2OoRvF}Bx`>KQtG)7Dio z@3zIKGvcCoq1EUK30yTka?O&3;269zat!D>;RzAu>?xF!HrbZP zyOZ6xWVFGBj!oa2!gryq71Wc#M&=;#kCD#gwwzFnNoN5ZNWHmtcAt>WX*R#Jx)kLy zwtx@!UP5k}DLk8A2B(UhEMGD!k|&C%AouQn_C>Xl$s=^Sh$A39#COjLD zBYLx(c->Uo+QI-Lr&N9GTi@EgeS67tNQu1G#GBasa`DV7w1kgn`%Nu)ah8`nE860 z<|RJ<_~Q>e@Bjt`OCrrzammohy~o9UrD!_dg$`#{DNxJq(I*u#R?%bjbZDCj7O`cl zp^7LKQQMU&G{~AzFecU4WkLarRmsFuq+WqS>bqo7?!AO&OVqK1p|oi@Vhiw4Mdsld zJ2?_>O>+5*Cl97Fn^RR1y_QdMSg9z2=cawqvaM~}20$h0Eg;!sFHP5d`NdVLdtPW$Wb1PE7g|PWxF)3r3!CnER2NN-pFYI zoX!%8VRZ>3qi|>tM6X|~encPMmcPV=eu@wbMbL1h7E`T%79uRV6o}phaU#Yu<#T*W0ZyVz^|auLf_@-$$4D- zB?18#!cZzE5FoQzM>Ny=%K+10Zl{#mcIkGqRH8*K2J#ryrX}0;=3SDtJ}<)&nUC-` zdMc0v{@ksMFnWJ2N}$C{lmma0)J3K^{_Tn< ze$&j`#)mKOUBp2qbnrv^M)Y7E+AcI0e-Rh&I3QCmpZdE zNbWNl&IFautYP6$nvqmEOr4T&ScEY|R9;NCTMM|+-GpQ;r4h&i7eg(oyUczSH%!Zy zn8Njwh7dl)E}J5l5>l3&ISz+*fh<*{vM9muLs(YzFpEWb7>iM(w~mgv2Q{&?)9`S8 zv(*&4N4!mP5L>CJBS6P=^h_HY@tGI!ZPVd%N!YE?3|i&Ct?aNUtCNUK?az76bNG}& zq(h#nS=i=i8OX3X=9OWP!-0v7Cny{T^$3V~}j!+pDj(q$1lF$>B#+S6XjK}kp)wo^)WrpD+wMGa;OOe-6h0~9-w~J0xh*o&p=aaCD+0IOe*5^z30}>|0Fps{z{olah!uIu z9&R#{)=Mh^F?AC67rTkuCyY5;!jldzco@g08|L$rL&d`uC5g*M2U^9L7q3QJMC zrFRNC;8IaM=fq&snQ0CkI;5EB_tHx*jbgA(wmq$|n@4$yZ%g_{ai-2w{4lGEx2%}3 zn$GPx>70l*bVcUXUxVhBQEKN_0X2=K5}^6y^`QmB_zuEUjZ*lH@^Tk606n+(e&}5s-^u&89Q5(-Bl|x*XZ_&?3mSQ5B((bE z$q$@5v3%(=!!Zmi#7osRBjTLlh45T-+Z}g2x_b|+csOI0_~krYyr7K^a7=x=V!|q1 zC&IT|(v*xc+PWL18?5PuNt!ohi)CJt*$C^-tV^>KQ&Q_JeOr+*NBKMerx=lmJB)Y8 zBe>Ff1&K{TYywNsO;P@4e(*hT6GJ`0&xW4J?ZqDdJN6V97PX593=M@^kH zsGHuFsS+st0n=G_W_5r;mH#I8^xlEpxxwZ%7nAngGlUN2!z0(lb zj+~IVz+gHO<1fn+=CUwJVc%1SbdDJk=FB-Ua$@bosdpcK>?5nzkIdi;O-m+D{>H@6 zdOrEn*B9>9u<>H@p9^%U0S>0RciXlHAKbwsQ~%QbC5zoZ@C?sOJc;p?kIqX5JEP15 zU}Pz*ImTslA6}iB!D6MHZUK8rj07uDT145wZ3*%yDL2J89Td$Tg$M?TN$7=Aui#g` zLzdP`&t`{-jJ&uRhp1Ee+TnX^>QoNO0J?2`ODyzTqK=R(8)g77h19o0cZIC8{7?T# znCysP980*!(2s&uo(-UmtTH)%UrlUhlWR@E%fBdKPj|ihfBaA z{V`4L*$KD;j}A%Dr^kZsU7Ly+Lh53V7hW-Gn{LVQpktH7SYliePo)%zWJJQ;Ab*jp z)(}Mm72`E-v&G?iUofNDR61IbBK%% z%D^HEWjtSg+P=^r0`W}gW{k7`Vz{brWyg6%_4vldVK5u`5A>{(izYa5_(%bz>pBHV zh0&UKF>O;mo!DG1i@>kSibTOCmY9r)*x#!AHEIf`VZ{@N3^v*{potuM93kuyN%<7@ zVhLFhSHU)_6wY2Q#K`KC4ce(B#AJzO3$pY?N`7ccw3l`V*K6H}Cg(7{IqPz2@~N{X zfAPSckFD7-o;%*AsPqovdrnP&W1i91D;%Slbvim;2eO?RSq>dKyl3y;haP^2Z=ujF zL90L)4`dbrVQ|PXDF9>WJ9G@X==jMod+oz!N_sEa5K<{IZjA11r){ap^7o2cW`{si zbrs6)X&7ADYO*3cRZvDIOZz5U){Y@t1p$N=FHx7-E@a?h^*PLFVN3?o9j2zbRa9QH zU<9g&or>z9OxBN0yyxCxgM!si0?8-OFa4k8b~q^h+;2Knw51bz2Bw@WM~)4wS-FC? zVOAa-9+6{n{hFpPV2g8!@@bZq@}wOkyxOw@W8CO~FUOw4zZ`=S`9ZUwqoSO3EoILHZZ`?{sRZ;ii|QYULbG|7`lb~0GGSm z=h1nA-;GVTg$oYwWPuw{o9#K61qM|0eiceso|oZ4m+OpkSjv=#HIGKU5rf9SOv@^o zUQ^02hKlRfTol|=E{&;)fLjE}>PPV*x1uoIXzVl{OK_r( zbfU=YZ>q!Uc_jvdg?+=#j^X-NRH{8L6K~ZctjUZ3eUbf%>h9bMx$Aaf7JGx-Fra}M z1_aL9%lECOxu;!KV01Wk4>dBM>^m55^`%j>{Q&!vT>t<8gv3qd2^$yLXjc9cFoePQ zu~sG?d5Q|HST#T{7Es19A73VRiqY}7qPP9Ji4t}&ma;7x+Ml?IE#Gx ztbt!TxcB2L*N^1({TW$jf%zv+yzJZGxZ$3=Z}P|6aAp$k;voRqGZj&n`ao=GuM5)9>PP0Y^#?o%kG+r#FoCDFy1BQW&TlCC1 zV}#i=Rx&9>MQ}?u&d%bZbXKbwd50V@Xhm}a6Rli6A$@t68bDxOg#f*!Xk3)DDoM>E zfTGQ9RWyl^D$all%|#3am55sDJbX6k1ly2ZoK5>5D7a% z#;t3j7jPoKc)2hb8XaLjk^wYOCGrsEaay*%u)I) zVn|%tJtCUUZr!tfrjK{V%;iGVFf$scvS49ZLff15LK$Tgz)`U%w||7WGNRNi`s@t2 z&_v`_HTew<3rR3n62(?&vPeJV6?1;U%3!JN6JOD^Lh1CVl2lVg77ki!l|UqU6NXLm z(<|uQn#KqiWPvi8+tR#^n5M4Ph(4=A&Eu<9b%qT+h8atpk50&gI#$KGxoq*JfVoBDraS<4ry4W4IWXbHC0UGr}nE0yzKJ;J+YJy^MA|4pE%h42e~a|MQ&Aqu1aCYVuWScXs;bY!F$_aXZF!3V zC}i2vKHh|Oz0~2k#+>ui*|R@5aQr{dTlCocg+g!#ybV)A(HZiH1^8YIga3OGV+&xv- zF1qO)_soe`hIXv~p=-Mf8kg)Zafp63eMXTLZ+Z4$%%;PzWp-zmihVXMvsWar5h1I> zuMmcNdJNW%Lo#SsaEYvI(FxrsHI+nVna?{Vs2)RGRwu4PiNJ`*m6hB$xTeWfjn&DP zP)5q62;$d()YwJ`?cjhWhS#D+3pL4g)34UynVX9e+1P=c zx;;C8hwF}UJ`}TzBY%R08+_)ePEZ<`)1F5vXpiZ~t@ry&srH*@x0rG`0>4la%Vh!j z9tGNM7?5~T$1?)G3uCt}1A<)Q*^(Fn_uOa?jdhoXyg0HO+Dbw=+ANYX=Q$ybR1CAb z9SK%MGv)CpK{HM`qN|recAjKP=y}-Y_^Fftl}08vob{AsI&aHimX;O9)Syg}Q>c2M z2$@?js_b_TE~w4d~;Vb9o30d-pl#xzNv%YLe~gqu3LacDQ-&_?@PC3xJ?hc>-k z!@?FWV>|0xe0kw(52M9YE~Tgg%jBhbQ|N#VAE)^IS?dO^>q88@irfuK#%a_@_sXe`8VSXy&p9 zfB43MLl<0rInJ0}yLQ2or6qcoXJ6|GNREew^(IbiOBHhV#BgTdp}|4wi;4hzniw?Y z6fHNQM(9nM3WT>6wKq);5=J71F>--KA{7Chh>TlQA@E^IMI#*o*iv+Agq0T+k;+BD z2^k<2)?BjIkLG~binc({{GKU;q*_S<0CHMlEYlrWS}Y&@i-R6q&u1=pg_^O$Zt~rL!5&l1Mbk zrD2mDJd7Gsg;tm702nNCS$t98M8Q|)%k!pFR}ud-p60IDF~Yo5g#~-&Lgn> z8v_i068S6ogy3MKC@hJ14YM$^DBO*rig>D;N-ff4_pb>=rK{H91eIvz(hy-=@BoUl z(D{UdwST^leCw^ZvQY-gi~MIXd?w)d+;<;8e$mj8PcK@^qjywd`7OZe?E?p2b>Vsa z{ZHla7<&8Oy?b#E!4pxr$j)9FKJd;*4OgvN#Q?NGOTTY9!!tg0Y5!8R)2D6;%lV=qfnNzn+C)o^<5mgFfHhA}UzN;P4w%8s2p$xal0K~6k7@=q{v-Kv!< zmo=aRZW#9bs+8g3VXZN73lpwa%{hMI@R5%$=sPqoXWr5VVCya)R~kM3w57d(7%qGa z^7K$;mYKF~+onugw{Csbv!0bzLXPVh9@o2g5!zNI=|#)|{94QtRe8h!?lW@J?uQXm zA7+jxkP=8{+BZ$rL@TqIrWRE;nuEpJ;Jevg*vgb~s5Q*trn!~?(^fdqW(&%K0A}|* zlqpyd){qaM|FdPCK9Mw^2~%`h1VF}=oCPk%q5DAC)^#XTA08?9qDNBSDfw=;TP+ZU0kLQsBo9!)8YXOvXp+k|;)S(-X)9ksyI zL=}RjxavsD*$CH-;%7(ZK^YN~nNbb@5X2Y;lBde;A#zsl6oD!xz#B4S-v|(&Sy1uM ztnAfj(A7f>P8uSeGcb{8CRAgnK(xdq)!9-y6@ZUMJ7TB=Zl&0IfwjM6&pu`VBGYrX ziiWE3L|PnpJY!;p9B?@aaA_b*$N;`i-MDehishEY0(_H)#T`HlG9N$A+t9-#u_2e* zv4sU8pE-B#e;XY9!;=fYw=lCPW_%R5;`p(*4IVy^O~rkEWQRHD;NfQAiyW}py?gie z?c1d{V3uhqVsd)kqF(;cME*^|G7Wm>sjsOVpC3w@7RVZP9Ud<3k{= zMVM;VOiiy}vOrVrGp0X;+75Z9;VG$34a$@#1!HSN#VRIgIE5hW!Hx-E?DIS7*&**} z;>jzm#n~7mau-cN7J9v;YHZp2uE=(s{GBP<8s@Stpo9Y1tN&=cf z2pei4Y|PCB5Lppv`T5$tWKNdwq9P%;T9S9wKn&0!MjjgTPC^A z+LVPdixw^%7#xa-qgybc_q8}ji-1eyC}&IWB^#f@3rZ$i#KCTXcSnyNWvhx13_E{s zyzxeyG(Z`B4h$jD1J|z(4t{Ou=w}!8b8xa{Zwic$KmU$fFWK|(eLX#o^!A>2-g#TL zY~lPEn3ElCAq+1o0hrVz?)%6^*NpxEIPqkJ2LGwApo#-TJewxYlP>02(ECQ13G zfS^nSL#L^@kS#MA1AzwWVB&{Q`K%chWMRu<0ZVEtK)))X@2om0Lr&=K%Y8qdKAjTJ zKn#OP;3Hd>EPvJ(L5~>>lVC-p425)A1Z5!OqmtPN#jF_JN2(%?d5(>CMPmb@)fKSF za<`~>x>s*~TVhyk6Yhy=Kr8-q4OHyd7)8CvW79Tm#w3|Vh~pFa=@#fyqz2v&7#XI}6A|XX7@K!Bj_C=qJN5i6TqM zcuvT@|0sz?m{3Keqb1lf$0MO$%Opry8VJ&=P)l}bL?ysHd@3LnaImbemyNd(rEWn^ z(ST*}Vo6V)nqaiTYwgMvE7@7%oV^oFvB!so_a8Yz{4+1!l4Tf1k_BG~Xp$8ls(Igi z_wC%d^WedQIAcV1G0vh-~ayic~j|yFMJ{2MwQ-Jy<)vdP=-R0q_#mMl=6uPgCPJbb>QLxS({1x z^hpPbo#o%h2B%Vrjfjp*OowfDWYIrqaWzmh`ZQ%0O`Kh#kap`OF(jwuof#QQW_Lyh z!^-4Q0F`D{9g%f>ixOxuHCEWl8o4d)k}Q&lkpUet=n0_Va`49s(QOR@xOoHEHeNtN zt3_j;qxkHwbS9f;%G#FWQ#E&s*Dkv|G~f8@HJv^0)A^Y)KUkgNnen#_EQd8T5Ti&3 zZt9pLBqPiyTAX{iLtc%DShpBK-p5v_j1WVXK8ke0u)I>=`@&>nmM)^?){TJV@*}O` z^HaJ^bC%u{_#Tz8Dv5}Uno&}ajZ%vwP!tauW4|(~f_l=JhBsz{TXxBjG%-;LV1*@S z!|aNPPP1i3#|y$*jOYPBM+XOoMnAA;fg85tQ- zd?@D(gfYj#|55xdZn?9<#VQ{CLH(oxd3z*_>wB>^aca7%$ReE2$f7pYukXo@4U%i} zi+ExvSW_-3PD$CkVwJ@@crk(Hry8an*ebR@!QcJ;*FZ}voX<;pQSCs1-98-OOr8W*Ql$v`Cf%;NPk1(o@jAprP zmP!%X&PjYUVl7Ki0QA79)^k8OUIa0-mb!>l6pumY#3{q6$QI%lmUVXQ*um5eZm=(+ z_b=(KvNmJ|g*XNm3*2z1pnr=3{@;5 zB(omMa3ExCE@?N>7-HZ1~5s-I=Td<=cs;T3O1q~N}Yp=Bu#z#jr0)Nqbs<4k5I@|$kD3BO1rtv!xp z+2Y9nsgMOsz>eC8=KlNdXIY0LNCg|QnqvgS_>Mv1Bshck^Upv3`s=R;W&wb1xZwr~ z1{t`@a?v8>il7XBmqm+Ce8laM>Y4wd>$pV{$^ys8B?Cme?Y7(WvJz~mYP$ifam_sgfL=Cik#Gf!*#FzEjyqoX<*VfvtqeXjt` z(7x!LU%IP=w@yO9!X&A8(ME(TPH9EjU;>LcFyVRc8Urd$3Yn;1r6Wr;C8;tU)h8h2 z!4H9UN+z{XFomT1469sI@qB-BWF)Jz4nS(yz91w_BnM8EfEbkv8TJUW z2mz$SjE?Si2<6w{pl=t)cx`8EpFvU3A*#0SQqyoS!>0rcnKg+JP)1C*v_wDlfA>z7S1IOzOyxee5G1u^|S;{NM*a;4C|GAu}$JjT<-eK68jy zT&sC22@S57Fo|6+NWx+kr3=bH%;sEf;Rb))B!sn*MG`70MKdfsL5x%oz>`~D_+z+* zE$=Qp^O?`Y;e^`;8dZ~c!nk2zD24CezyFd;E|LDx0{|L=>er~-nOonM>zpolFykHQ zS#Ffr3|w5f2Hfje8mL?JbtvOrGMbKy=X<2mW&j*Byefspq-2Vd_7t#iTVk~9z-Y-_ z3{ei0=?qsCX>6Il=kl1(^H|f%c9xzGXx6thN~gn@j7>VE0F&la=mpovMVE6cL4M7f zcnHjh>GR1}3IR6;bNkz}4<3>VwA56Df3bli26TrqU@3;N|m4%sRpk7);~OX?tN_2 zPZ;RjE7P!?AwL(!?z2P@$NHC;hVn?p8RqgUY-0BeIKh4qy`ke?um=9RIf)$_6)w80 zvk1)>ofxjoaZV`gUWtlIOj5*(Ti^(#q**X_*?8!gD*%Q4y-OCYTFF4;3I5R0qt2uz zFE?3n-t;(-5uzVUC4c}-KTM*`tS)fuBrgzcK7W0xUB1x361sicI{ubaCD1#(qBn&dc ze**xb`gnubARLve?E1woq7@?lN|6g^U6NrIg_%KU_rT*aKfl8(%^AcP038{f#+|=F z-eZGqo})YIt#3L>AVpU}nvX_L#|unp-t0tBULFI7*{hrewipLsBIg67l%#T{@omLK z(=!#c>|##EEhY-+1yV&8yT4sJqkGA$MNxKc84_uvi}%{Lf#a;lse&~ppPvCcwOfm_ zQdNxPwT~<%m2%d;`HK(&7#IdMG`E07G+(0jEc2qsrU8H{(PL0Vt-`GB5mD0*COLee zNf1>@4IfWo_lOF4(%)LkQ4^bebPnSrPET z+Z9Wf?mu*>+?90=`&H&s()>!`d~rQV@!fhJh>wW#n-YH~<+i zspC-L_TGE%g*g+yHlUS?36UrtK3a@~Z|+pM%50AbkF_e6g&*Z~f|3Y|m7=%r}E0BkZ9)dVFwTXy}4< zYoBu7c@%BpDS&RHS_2nwNB|uKEFhz4zz3oy5)=ZIVb%vCki-HF7pb^yHf`F3!-MYt z?AofjU+CHRA~QYb?zWV$E< zG8poJL`9Hl^zM*tt1y?8c_$(oOZyfm?Nj)n|7)KIg+l6on-7--zX%boDPkZYWcUm)cb+~^x5=`K%qJ}sMozetV>`3J zf7a<0EuH()wP^G)8wyKHHFM1r#OGS>Y2h{q%q?QGNzF|$Q!3ud>*MF3OnAy#)U2ym z!|D*bl_45NgeZh5$ih65z=Mx8}VSjkCm6Dwtbq{>v;06(3f~%=H!X=`9oi{!dOqb zHm^rAfXKYd`Bs1e)9?pB_(4tHAP-(b%tI=$pt7J79%N!XGne4xr(PsI{_rCpn0mvA zN%Z9LZzwBEiZJ@OI*Czph{OuqWnuj2V23CO}vPzDGB8UPb0o+@K{tO(nF!tVlGyM@4@43Gk( z#dnb`R}nzS4}IuE7cX9X;e{7S0{0*Z`UFMMxZI*-U$tNRwO{j4hAen-{`imo80f~s zR!E4z6nFOQSu2zWxQaq`iyh-I4kn9h`pci!knv?QgQmbSA(JA~MqfP>drI@lP#kS- zPaAof-G`0s-S^6@Jn_(1S@(ux5QWe#9EWLXhE(&Kv}mTp!(`|HZsno^BxI;&E8 za5NFr49l2c_9#i-VfWUY$ZcK<&T`XJ!h zkdG(K%x9wdB>Ez6+)@!CfhTT-G42{>Eds?;WemMciKir9(~OTK+=_42rO3{0!Vo7O zIC_7%2~ty{2kWRDGX3kn{%huGDurP7@H4O0$IpSR2M-+a{q)oJybsg=*4CDw3>?5`WF!mIJlO#ggvrR34Zz4`fSbb9j?&MZ zIb%scnPk864-f{hu%tSGV4wcCJ&8A-Oq|#1qQtJ=_mK<>JbZdNXy^eb~gN8({}Px5RM7 z$}oo!tR-;&q2cr3DrhY{r!!IOyAhMJN+(2S2jQ^doz4@=&gUvgMfX+jSil~UJkCHi zB&TKjU~~b~D!ImXENnQ5T@l6~)2_)nF@?@Ml)FjtiZTVFI(XvEDmb@r8^dtzsxFEy zZl^<;G?I(VlWyrijk6t-vfpDwv?oW}Srtnz(+O*F3wx29(|lG7l-_89QM6tpmvJ+c zV20jj@nsRF!-d@)-zICsf>^iajR;exL?RE8FQh~;tCS}W1%{v%Pm;!!XHtj3$(4DXxf}-uQ+QDjQzlb8MKFVE4i>+xO8><$3K4wXV|$j zXK=cB8NdgW0v{|p=s^Gg0ENB~PXLbL!RCwO?hlPiL!%!AW6J;0kAB2V{F%>u1|Y>V zK8Vdm3=H7_xWR$pkp~&6i(V)Pfp?;C3-p1xH19WS%)f#p_(%$dCaTu}k$@-kqX&)< z9zP0Iqq6Y#h{v)6s=oB4FY&}RzL~o95sW9jKl;&+0*MT!Fg>$)^_Y(m`58|Im@s%( z^;4%#;}0Xo5WiL$nBaOWV2!7kSJv)`YSL=lapkwL!3%yz9M6-lPmm1SEhV~sPG%Dx(Lf-+Tig%vov z!?2_CPOgn6F<59X+LTgst&2;K&DOE`4Ioi;5T}Z__y-vpQFBlxbc-n?yC;nBu=_SR z57DS$@hsP8aWAD(9W0vJO)pw&@Xyx!jvC0qqy;OfR3khY%Ms37pdS3RI%S1z52OfP zYiTBEKpBLZV&9$Yb3seu9RF`V8#@xXD9V?YCJ zRq&(_fPf`F)bMBiX19W=6xW62Cla`z*_w&GrE0`@=)?m&;Hms_TAd@$$Eoug1N!S}xRJ={X@Q5x~f2MSi%^8<9bi#h&cQrL!+hx7A#2A)1 ztn$sBlTGCe&RQ?0kG8n@cw`6>5=Y9zj)mvlXZPWSE$fMW7!U)3NrP&%-9DADTr~_n zx;6SqsnN2Slvb^4`(@qCk9mt!uVY1yarf5b;>C;K|Ni%1e)(lDA%y}9_;JLQ*RFi( zQ=d{RF!AGi(5z1?m?rHj zj;EA=_ji9+JlRhH4InKV17nd_d=S9Eikv9m9xH-?;S$1hGoQpB6F;F7zz{{NnlQA% z&JGlqN%0i=(n~KH2Q&af!zctUT)2QHB|L5?QDs-%%m4sD07*naR06*MixQHf&6l^g z`IZ8YZYz~soSRV?0mvI#I*NYzwbxlEoO^(H8;nSMN%l zi~`c>j=@f|@POW%pd$OaZfVLXtZ+dM#&MonC$;C}W_PATDmRPWU1$!1BM@Wq$v z+^w?EtU8Sv0Qs0s$U@)ckG0CaePMlD{O;}e_T*0s&0)A)4|PJcftJvQ>Lx|4R?plP zn9)EE^c_A<9L^kL=}l+yND%x_O{q)r)s1hl6mWsm&Qy}htuJ~Uk8=!jb>?Dpqj;}U zIu$cV_TtO{pVw+aR~e2UA5VL53uxdo&P=pc23cT^QP4nwC-{Sn61H-nVM1cRM#Q)f z@RUFg7Qs!z;Sw^kEp_(n*{!WD!p4&TkK26fTi=47Fj;U^;1R*A!8A_{M_fte94oK` zFAESsd65CE0KIPUc@PFm`5hmU46Hy*UOW1#TnLPwHRTt66kr70kRM891AKsN2m?F7 zLsH8#&pbn=*e!xNhjsXgt+D`v49XCL4+(B~l?-7}G~BGAv0~5v?4=i9c~zbjZjBp( z5GbI8{PG^K%bp_#ldZs>T))wJ8`6v)^lHReR1Pr=S6jB`UN@ULJX^*rot!3TRx{v| z7Zs@+5ReVzM2~Xue7MiP-mrNbwVAa`=B7izGI0xE@zMtz*n|#P=?f{%`|%Dvx5{Of z(=)MDMXDCM`il503&Yx)wCvPZSttw6{8Bd_u31H1+)iec4y|oT4@AN+N$Kvv}h4DOH16|GVG)uHhIaY-VE4XV8xLU3g{w#e7-?QP~y3WdZ>i4L5)}@K|up zsDz-ezWOSUA9DhR zb1>iuIerj;0fIjU`A3bVj}{T>53ZUM1wMYCNFr$$N!2V;F%xo@KnVdqK^f2w66(b* z2>*}&_>Y`u!B)y#q6&O7#Pb6H8McE7g5h4mi^B#J`k}H24{ozzE-xJ$AJ6^tMcgw_ zo;rQv_%Z*`mSlzizl;Ac4P8a0i(r@6!d}5mlV!-(`WWh^6=Yl09K_J;6hqbMmYL50 zTxxDIdc?C}r9<+~%$jERG3oo*`PVt@-zr7*A~n}ESq7W1Y3^1o#WV0%1}kvDPTG)Z z6{NO6?GWVVm{~jDOm(WC7sH3iArRYE(OOZ^zCJs*h>fKq00$2*q)Ga1!4M>5D)mV` z*Hc3oMB)c?D1FoTj76Ac;>k;8DU$B;ZCxD+AlalDn;cCih0BNPD;H`m{M^&4Q$iWF zWt|_%7~|?mxn0v+U-_3P@9+%8oYRFy;gib{s9|`@&YG&`eD`CdS;@v#m7??UCNsU2 z9BCP@)=|(2s>g&uN#4{Rqv}m~_&_robC!_i+3~bcw7ud8rv{Ov)lBVJA}E(cUfV|;M-5J?>YE&y&M zBAr+M7kRfvp9;Cy@sU%6@R>7bc&8jkG!nZ#dvI)URs)BP&; z47*w!(1ER~mrkyE2=Q>?@XNxMm#f#Vv$e#m&#+-4zjAeZ`&#<&g7F~(d>CT%WS<#t z2ZM;dSHydoA`BnT)~D8;Ep^4bD`eeUw_H=_erwpyvzbYT0%8cr%db_IFBkhj)nP{@ zCx15tWo-YHvEWOu!>S|k7BDc8D>!p-)_KDi8nU@Cng&*ktu=(jNax&Y+C%3;6?6eApU1N$|8>2yaU@{vO*i&MVkPeLTRev&DHb^m601FE}krk5JgD%n-s1x#w^VLGt z7}-T7N0Dk4^pbisLdMM0^tV-x+z`0j_x8{u)wsTiYcVXQ0A7)X65PoW&NjJW4kc42 zz=c=k3cfIGT3F4BBfz84x&?6PBhTEz3YcOzMg;gLcm`O`59WJAFyIE8jkI6GEn7d} z63)SB3keBv!<;*JPT7GMIyeHVusI$9fH-VRkylWL>_97Cukw+Pe1t5#fmd^$KE~gJM^ouo25N`urbCmkd(@>^3<9GH zyPXnX2wMjRzQ~~YIgB3X`DoNDOOfQsER0ATmr=8_$5cGpW@Nhz*z?#3hGo`TRzkwr z0)z!zyyRy6b}7SB*##O9gPvvvmaxrd;#N$1zKBkeCz}$MFlb4N(s`8ham0P;{R`q? zg3&|zI0H)W#UVQ_BHv^ojP@>yNR3TInm$b6P#0RTy=%89ES%aHXa;nAmown9E(vL} zX)5Bm7V*E7TZBjtYK_|>Nvhlw5^@j; zyYB?{ax)ZjOZd2yN%!L@sA@Kn52K_?Up4~o5$zYM6jl34&NwpzwV(_%_R<Zp#J6>L(@N8CHR^CgKBg20vlcdz1GtW?u_2HWC&V$I$`SsXV00)fTKA^01kk zog@FHA!EqQ{Re;W2ZhGK0U#1P&H@Sq@!)^~wXjLVtKRf(H*g6+M~)K;k`ZJM%co8L zj~E;t01L!0yh2SmXabZ$&z$xJ^gR3QvtS_dqHrQn5r=BUAGZyxbb<#N04u^(luHuN zLotg}3SJiS8V-XSg?cDMMqrRO$b`eJ`bYw5VXFwv$OhzsEyNJ$YLo<+cQ^#|_^C&D z#LG5}s2UHYU%Ng#iey=^4AzS*Qh_||g3-{5FS6S$a||jy<{7tpy&AHiG$S}b;Q(3F8pE-QEFZRUL{tIBl#6~wFDMn%x z{ed+6hMNbQVTwmfB*9Kwz{Aio1C`ztLl$avXFCm+-Cjykg6~mJHWS zKvux?)WUj>dW$OxLlP2=m0|2w3Upej`IY(cU};?-;;|uUAhjmgWy~D#x-%TV$G?Ih z7HYvs&JScgr6APE=kyYAIdu5`BZpa@aaXxHv7fKbAjGiSVDgn=yQ z&YdeF>swZ?G!_sK*uozKOinACC#qw5sLNU^CLB^A5BL`or`U#(3rqBKUZ0qTW^pf? z*2|pw944kR3It^sN}4#S+AindDMeF3YdeE1WVA>Rp0orf)lkBeA~s4x-)Pyob!m_F z7~bK!7O1X{BxYF`3u^aD4tcIU(%Khk#hk`PW7zF*OvzKYb}?EEORo%cw#8NC@jbXm z>fh3Dyru3Fw^G$|tf&|=Oe&%7T6v3j-<_xwlW4K|D}hB;n=n$t(lMzqkZ~X;G`od( z6K`SVD`L4gz{KG)yR|@P>kt90n;QLE0zl{~qoDDQqm5*QfAd0Gsfm;MxI309N?HP~H(DVT%sH z7GMs9B*qUAuo2t@Wwd)GF}Ak0*pLFBaSMpyM*vBHJAyJ0!xnC$Q7*0^v(J6*bENuG zEVUJ2ta0iEx032kK`qKoJeij2T8ylv=vzgb>!n4Y_$hVrvo*Oi3o3h&M4|j>Py^N* zg)%_-OMB9DaEvCdG!UgruuWfSBW)59@DrQLy?0Q{ru88H%;@OB50HA+Fi9AL^bot9 z5-7SEW$`nNIEBNqH1JmzYg}#xTxwR>*unuL8vlJp^7?^OGf_;f$rfc1kDLLN2~Sxo z=UBml&*IxDCZoe8HQk;&xAVC?+I8acy~og{%qGLz^g^))GzeKsq*0JI=DZb6N$qn9X!g9+8UH$0}BmnE@8)qT_K*6 z0#yJYR44-;&kdd)XyCvu(x3g=pAp8ifoXUcN~i^o3#WjIp&%Fnn@kKCa)Ov=seDHz zyF5=6%AsZ;6w;c9#_|?Oi+JR@w7tz%5pOZh-RaKtot?{9wlyzWMgkOpoVDtvbelSt zI8!xhQ4bdAmqnlTV5ErjtjYXC;J!xF!>r)drgl{)=awH;$o~($n*mOtEV}H42nYuZS|;$wbNudk$55*o(VhsV_90( zhUwLhU!%8xI+$*);@ldlpbFEKAP&k)7?im%FJ$~g))!Sm;!Zc=eE>Oi%ZRYBC#b`r zCTp@VCV(=XQ`Tv=p7!(YK@Pe;bNLk8*J7V+#GbUr2~g1MLqf{I?Y4K1b|r^f2>=*M zW+hdb?*S@1+yIX>aE(7`htZK%7KNdtv5VMF1?d)9bzF-~tKYUb@nzquZq1}+0?AsnLnI^)C`5CaYgoe{x@!LV%YG1Uw` z8n9g|kpT<%8I(bFbWWfQKkWxm3QqvxhB3C3{^x)G=UjmWpZLTlICg{U1)7T&FT$MX zz&V1$ITgGq9NiU;Aun&jwG+f*#gQE{k_!lh48Rv?w3h_B;)4cOVn4v)me($)?;>q) z4^NnP=ouPIofPq`&`j91;7O9FR2W;vU|ecGhEF{hYtCUz9+<6>G&{CTUXxbvMKMHT zVQgeEx@B;{F4!NfxNyuo;J$Aaim_TG<3$;5^|D6uBF=>wm!37xS*=$SzLU#ZQxh4!mjTLUYG=jmZM9mo&p(746iyw5+bSb zmPzXaDvoQbzMhycM=*~?-?H=6T6`7Sm zjEP;u^Dn|yToJEZ#16YoYwM6)EwRN=?MtDIPaauMD@}mQ)hn#v35GHhk;ub#emb1X z=@w4r5$e zf6@3-&}~2CMpI1>5>Ktnwg6B-f*Ao~&{gi|CUN+C3F*JeqM=xFn`I;(FZ-`oq zz!XKfevJVEKedjgJS$Xzb-}@cZEHGPwx39=RH5KMql`iG3*UdmTxwdOQg(><4LbJ?U-P5ty$mc0utgVjd0$+C1`c(;&BIpD-SM>d700+3C17+wcI7kF{KoZ`g zqvwXKNGf7{*fRno0cA+VDe~NN&*}R_-}%mWDEG{nGjusX3{Xbd@v;!9Fb7=z=#T!0 zC%SoJ93KyT49>tWygQsM=2>XMqGWh8U3ptsPqCt;>G{Ya4^2@WOmOIK6y@%(NbAQ} z$WVhWOrnRbX0{4$h*9rJ5ou<^fUZ+JinvKbfSwZpgd=RE-4YlaD$e7Jm5x3yh zDu$Io7uKT6Mu`NpH{^DT2cAn=$yDD6f53~5i#emp1pp$8HNa40?nZ!s%z-SzXr63+X^48n8xukdIUQS1J>pF&cv8Tz=ayU6!a)4)x=3bc?=DItP zwogQd;dlyrI(4~J6Xd}b51<4X!HatJG8L}!=zxKeO5J;0j4i6dF~dd=Y;nxsX!-ir zzs`wW=z%YWU{om29Py?WZ-B`7g)e*odU{e>DTMO{w^<(Ls2Ia4Xk8QpqgPMcDQtHaR z_fDrlIdCt87Q@mP-ZIWf2oV846|?7k&tT<1hwO1(0D`@XClS z^nUwkYisKd|L_la7#mNFA00pwyeyPnyrU0>@L{`(pE36V_%m1CxqathK61pMk6Jy1 zt)9v5!>VjudVf%>+!izu&ssJHzS^r!njQml^j`~X958V*VrEh;Ndd2EYf1}1nyOdh{dsm;ogma761Qg)TA0=49;#aNS>0o*-sSxu56mjq)uYSvE# zwU*QqpwHthEj{Z>wWdX~KhKmbFUjJJ4*Sh<7&S|@&DDAPS@&PH{RH}e04j)mk}w~d5ahxZy6jd<5rQ`=z{XzyydAMJRf*m z5RdomKKtym7cN{VL?vFYq$3_;^N83k61zXRXFQYvd4P3v92lRCXL#n!8JGZN^xiq9 zOwRM_aBk{OJ#{V-!4nTP3IO))t5AmM{OshyDxiRKtHh|JoWhRr(7kw!PxvTQK541JVu zxww1)F=fH`1K34%ey)|+ToqW3^&;wevRP`ixrqIW>DE!r{%h>mqzGS{)x%J=vhQ^{ zZ|Y9UOTcS2l#II9Q*5iVTRL z{qv6%ns26>xQL0NOzV_2nVoC}s|B~SIt}g|d@!>UqZl0&6p9YU2~C?kz^U4A-zKle zvj}NjxfUy|Lcw7!7g%R}_|W2MBpWssi40+jCW6d_RP$_GuGIor0Cw5DUK1zw&Usx4 z*oD!O|L}B9IztD;bS!s-EJ85N>Z~U8UC+g_*>mU43Chrm@RzWC1HLgq033YlQ5_5o z;Ki{dgEAO0@Crv;EQ!4&j^)1i;)?*9;$$u~#GK8)mesg)_3BHn{(=XgPd;$`@S#KW za86QRyK#d*?*J@};|kBFnZOGJ-aJ7}mH9D<%$jSs6?`<5I%5YIQ4bR_!TMv}>bx3R zb$n6u!dn@WQ0#?yMPR_i0uwVr29!}n2r~?6>*;x?Q$F;-iHk4(40_fl%C(#Nii6rq zU6(4fgds_8LT`9m#G8n>e&tQQx@!%p3bkO?=zEg9o?PhpD+r7j#r9n5%wodU)ko9& z=pmGcYErMF(2#Q3NIwR>Ww5?sI+wy(8yj}_W%c`pxS@X(#d{3M2sgDIrjOLn2-JF3 zi7}LsU&zbk!>jofq@8hWXrVcSGVm7;2&K1PYhpl#snU9j;WoD-ORyop87c1wN<6*F zHO@W&A4;L$*PXlB^BQBHXcfAe_PkUUh82BCTSXSAN2byH0F^3G3%8!&T@&WPBAhWg z{EPR6_vCJEZ2?(up%KaVCOPV>%JLR}|2#7XVz3l6J(PYI31ZIqax8|&s&UT%Yg)P* zd;2UMKLk%fU%#<)i1fI8z+=ttw4Ytc6lRrpE0j_ai>S6K!V?@MG+y)z!GC0@h?JU8UQ$ncO# z;l)tA=e95$Lz%Dv#4BrjmAA`Klk6=|;EV8ltp_=YB&lf5Tw+iWzTjvgkVPoImJ<6zwKs1NE(mJl?++}g~T5I`hb859-tWMLS3;$fTc%J}xVH!r7sqOh!* z34=!mToQaqFZ(})GoU7WSH|F6;Sm4SGPJLeI7f7Dq4t2U3UAEjlJ%et9 zGMjpc$#*lRjfuzY=@m(~eBMz|riP(~M=-2uYkeFNuPahrcUf*)d0IDUE<~5*+oi`o zhi4WIK6Z02PGnpc{=zlZO9KZX2$65<5I0;P;Za-9jHN^s&>8J9@ zQ&g2mLk94iM1dSB~?^#Z}ha7=n)BF>INV+wBXhQQhCKMPZQ&0QKZdorAbV! zp_bRSuc8+IW<=c(=Ww&fW%hZ+a71-^ysHvHBwzgE7uj9XG2WtXbfoj=&+{4>&bas_ zJT5#eU33*sP=r~0^X?kHtN8k!D}{+EC@0=(2>6k;)H+Y4nCV{#TtcaA7?SEooF}Hw zx4?=9=EUJ?JeP$y%*5edl`#whg-Ho%R*p=|%JHjbJ2$KCgq8VL8ISRei|kg!Ef+!= z18o+7$IY9AF{wd}N+5m;nyJKjXGF+Kuh0QB7{lqHKuaisFU%c{_7&4wI{NjYq1ge4 zCwPY|4gwl>I1sjSy&`djWq<*fG;gMJd*vfI>L>VM{_DAmw{E|6`k{vo>>J*Z?b#xm zzg;<8>shQ~C_@?&`>sD%uzS0V^hhcu4+jPlzbG{Uu*S75N#f0_W{uCW)D4wo{F6%S z%q2%kFwJCc^Yr6tY>r93p;C2Y&_d11)+};Ny9z82OJT%=N@Nr`bK6+&WQyV~6v8WS zF7xU+IFAQhX27L5tKX=>dn+0=!$$zvPWtIjf66u!9vZp?#lbsV1_f|z(s+$`w{*Vxx|%fZ3R*V1dmPoF$#+$_*hI4Z3ztz|3%R-BJV=Hwg> zHQPI7y?4)zo#EBXNT4^$5a8#zE9{%xQi+5(PdnRRR9~vyxt_T(7jV#z9=YGk57%&v7z$cz4U}W&hGZQJwd1 zfrglp!v|@B;kk4kLE>}^Peg-bIL6D9N*n3{4=4OwLLsCYf6 zOSc>jgL{2wZ&HyJ5l)bf0wG839&+vHCS1gWu=eB+=2b0 zV&FU&-Mw?rBs6UhV+T#2Ep*F)rI-kzIL6Cw6pUD&JUVQLxT=h^e*zkC!B_Bw!4YRJ#)6$K%|fxWUcsc z6cof}yA|&%i}#ow3;%GTVtg9qCuc3Dxg`T*BHS3FEQU;IG_AxU5RPlngrlt`aKW~7 zyHGry166ja&!hDlI-O=Vq27SreH}a1CrO=ip&t57?zL1pJX^6EP{J-q=m82n*8G|R z84!B{Un81695~6mG(MK6>>jwZP>U6$NlG$jX#<~v5v$egcBw$$eIo2mKeQRv5FRlm z-oz3YA}9EG$i)L1@rPSER@^MIy=Iz@U_#S_4HYIR3^Q7=-eXc>2O-vebiFtxONbcg zShZoL+_1w@R^n6ac8wBP6%OVnHSi=c3^?cqeBp}<>Gds_(%a`o@&*3`X-AKXunQ() z?lF@E`QJ0iG)D$5HywOwu6mh5{^!R(xpM8=lc!JDjuz>RVaB_3b=clI($4L4RCDkC zfXtF=orE!{lyTwt zd$LHi!^4c8Y+)Fw!e%04IHOae7JXP2I<$DzWg*yNg0V)qv3V#{uZGbHqSBhytE~!C z0>uP5CCfcaL-Q3gh-&8rwk8Iw&^>%o5r&|MY2C7*3df6i?23#K`-Mc2I{mh;o$@l4 zrH2;wf=olBWi$ZLKrg>KGO+MNeyYr$2N`6+0&s1OxYk+KPFZzQGJp0-dY{}mWlbXo zrrl?r5N?{1y~EdKeT%k;u_oxK=%cg38&ZY}O}J#1b1vlRt-E6*Sj69a;|&}wS9j7^ zmlJlG3|xRII+=@qSbp@mj?g*<)fmDgTp z+lZLdYI*OeXz$#S=H3o4v6PLHWzX%L-K67%#*uxr>D^B<8!H%ko(w3hNgzM~9mIiv z8PU*BQR~(S6+&_D>{(}6QNj57j_84$}%ogQF(2`fy=G6jb%+pLCq>F{`t>4&%d^FH~64P6mSQg=n`v2_xLs5Q!@ za9`j3nDygFgBN3fOFf+r(^T~<<2=EXaAFeDA>*C2a}*}lk%>>VvXi5w)=s9c*(4}R zk1oc5=#t}V|9;MIW0h`fZ?pO#z@N4-0$%e`aK;~SK^NKtReRxWLnrHK#xI?$z z*8*^<*P5Xs=&ZC60}0P5v{B1wkc5dS8j)Mj ziC0t@Ht2>)Ev#xXRIOTNUKC-|*ybK$LMpbdgzuR{Y+|tL6k=Qa!oX4!4#{TX|t{%v!S$FCs}qMNCqme=%jNc?QcyLVcQ$K zW$m}`Z8CXODI8;zi=YLPY2gy&=_JkL!a?>HJ;ETE)mq1Ld9)13!aAO|nPT`T13q%J z@Rgz*IKtJ~ngZVspaJ%D1YGdDD1fS`XofLikR_p(J$vxDl;eMd;wZm6*7OpTMFU&dL?3q}YB5vLe&gC#R>z~X@ z9X}<8@#5zO%c6Cj-7XB!Qm~q63dN1)UP!Nz8;)Nht#zbc6VmjocbF2t(TA9@Fa~An zRcY8{CTc678ih^M%Cd?0Lb1rh5By>AilJzaD%4(6aLL3ar4WxQDBR;G(N4v0-UOSvQDXOD`1^WOpuQsWwV1OH-^5a%>eUH`iPios#3ICO7!(qW7(nr z6J95a$q6juTi-m;n9k&mFVF2{^hL2@G42y3;KE^-)`1M4>pd7opICD~0>zcBB5fFj zhnZ^Suz~@&;Bn!{P&v47)`|6+#Bg*OpB8vE0tEOnOwxos%g`-Du-Y43hJl>k!TWkH?nczIvnlRg9%u1jg_g_<-S8YP`X zCH4WqvWT-&3zAF>ks*xaDPRifHSrKYow+Y(zuZo$1fX%5Vy6s>!aJfhL&*Q&0sIJ4 zPf`{fyrQy_l5c?kQzugrVdm)V2R#6*Pe^*H)K zLM`)7mx)Tz0T+M^J%?*LNS3Ez*%Xaig<+_^MDMkju$1ZZXq~;2myRa^>RhcD>xUvB zJ3m7$GTGP>Qt7uEP`1aREUlMSC|6i6kOduLeZc_x5 zY$M`rc%llJWR)Zwg9d7zra%!JJ%P^G%|bl7uo7lQyyVi71S2dl2+&Ms-%ZcvKf~Ja zXSa2|b`xXAWx^?>=4?77Nmb+O`yTPWW7Hhh64Mbw{5vpZbK+TB7YbRq$}kMa%fSN& zYbYZ?P?Y5r<;Dn%6N2H)EO3qhSRouT1-Gz>f@bAgP51OeWVYd8+$cH(NgzcvsLYGy z?I0(Hm>-E0k&Fe0K0+wd8F(m^Wr#jE3SN<{RD%)0S%rQ31{*|Sh*(z%dLr%11Ij+T zM%!1plEL0K)kYW^RqZV!;>|I;)QEcZ#&tG{Q1Qeq41{3^I_(f0;?;A9^D&p+cZ_Gk zzxP6D)g5q2TScwuw$=?;knTcH%fN-e0mdcm#64HhYxL5-G^<8$!AAq2i1fFiDe(jf z(_KUUHKk&Tfme{JLs}%Y;711}CI?e5XJAt(KlNM5sd?A>aN$(wbYRAsO`=vVfp8)h zfv5LjpWTO%5aA1bF2n?IP)5&6VeEhw8{DD?T@|1p(;;EeOMymQ(2Hi}Yf&6!soc&C zVWNhGg3I~IVZ*pMaqL(~w#!KSK6cA1W13WTxGF%ovi!78%d4RgVaxqOR5Hr;hDP2K zn{J5|Pp(*Q(Flll#PF=v8TrfKV5spmVxB^- zDj#EEj3YQkik7d1B;6J+H8VYy*8*@*H?kN43F1V1-lzcn*2Yk(b#+x^W98{L9B|=> zHW}F5dgiS#%-I<7TSbIB4c6lGUWf;#jKF0$;4*P7h?29fC2tbtts)-UORp~)dk%qQ z^lzsr4QEU-8d@ELTpAu7qUdYskJu8H%d#MN{5@Fvhl>{GtWMnufyP+1DA}?Rv1OWp=Mt5ga*x< z^{~MhQi@?mj8FrjSKHB8FwvC;58``lwMa#G4%PJd;)BPP-cAH6y^>aSleyW zq}0e&fm&wk>c!NqRclR8OgQ)W5h0#jOP+1~6c*HvEF`BXTUbGqUYG*7)CFOV$kpn- zHNB5XI|F&s$43%o30K5$ilufqZr^9!v~U)R2P)4Pu(j2%(GQM@Wo zRWayhQ%D+63ukikBSl;xDOiQK$PQA;FL9Z{myq)PNbIkj$rXZ`hz{uIXSxjegpo9N0hMSpSkWhCXS}r$ z2QR7$wMMUr$-=aRW!EcRv0@^fPz+AZHq~9wSrobw*<~pV|*mGD8k>ScFdurJsshA2z+D z&1QE?I+L3M@1>7I*V^dB00epaMS6G3&KvB?W#DpiVk?6V(X;+i7`OF(=@kO>HkyxS zu%tSYlSJjvJC+(QUMfv0`HSJ z9=uvSeT~PHttD)w_v;9m_55YarDf?hbuKF!H{=aK{HNKD}}Z6rBip@sEj|V?=@!bD5~t~TjBmpvqs=j3!u(6QBKR=7ud+A z2l6C2oqR^g6gIn=57{{?i`L-kSR12k1%O=U{gM(w%7yyrSZn?`>g#?Atqp$S_87l~OGBVH9>7s8x_-7 zn2Sj4yRd%)$s}(=0X7q$+P%P>~ni zQsQ(Ksg7jfN7Jwnujg9P@cm+yh4UNYDZ&)8O}XU(1(6lwntCy2Ylzm-VOSg-3THz| zHZc;7i89S?c`eP1W!<}ALVPQ!p!BybfmfcPJ@bCpg9%ak!Rzxfz24XFXnKmyj=a&WZZ!2o4QJ{Xl@-qE6X z1|-9>h+KF}-GEU-QhXGeLiu9RL_U-_p3I#ca9N>?FBI}!K*0O5(u2_K7Ud5sa&0w# zQCZB1fJ@#a0*55vQqU}SJ0Of0g3x^Q+K{0cJD&=DIu{)M!XxB!gk7v-lZp!L%TEgTZKqV;dP?`^$FSmm%4H<-F2|Mt zyNPENr|gASW;Z<7mDf6?4R-K^m|Iubs9$F-71_;qf*2ZlQml}KSsyE1M6T=B)V>-+ zS&|TrFeK^rEw(eSOhnOPo4Uu|lw1xCyFqajGQT&0k1HY=y_am zgY(C--X4LT!eJqeES9as3wlk8MI^VmyVudp_%TZ`g&P;9lPP0cBh7Ltfc&kzssh&{ zi{0iiAHXj^^Fd6L@x!un&9|v8SbVZGan^n0II;)rd^wA8j@^Qu5A^ibFleH$#mdy^hiGW zn$Ewb_vv%6WPmbY4#V}nGObs?AT8L$+LZu3Siprr%jVT`AB8?}VDz|1z9g9!xrR@|S?i__F_r%3+ez9voj(pdZkmigSp>cxyh9?IN-PK!i(PjklTu!;e8|y~_w% z@enXb>XBm^3AD=cG$N}VKL}$6x}ZlSxgv^q-BPHeqAs2Q$ik19G~BaaN~pyqax#*N z((}PhRf}RM{15gjisMGt!C{AUGkg* z)ZR>wpl|LWCapa51MvmN@h~dz))b$3aI6WDj)Osn-HoYyCYc=8(%2GF=^(nEo zONAJku;~&O&tMN?&iRA(HZ zOuZ5{Qv5{%Q`#Yt>!m|)841w#qq}8%7W(jEbAEct_rqWdbF|3sf=Qa97L-gI@%%IP ziz^N-dIOQld*b-9qep_529c#;PL4hrDCj5NGD#=S6IL^xVe9NmOGxV5hZLD$(p+Bi zA#bO{kDB)4&%&A@$B8icEu>_I{fuZ)h%DBiqGd3Kp34y5kcI3vPcJHMak`XQh_pCc zgF@UIiOWUzon#An0bkToM#(MWaYeB(r*8mE)q*xyykZ4UExQ8dw_`83NLu49%asAj zj0cUyT6j1;)Ovx5(&&RNHRQ3hX2e%U|Rij9n#?EM%tF!$cM^b(hw zoypQ`49m(sJ&;9DL9^iVpoC6V?BX+JhES$3*%U#a20Z(+mJQ1eYGmr1BbAao^o`{A zcCVlibB2T{i?U!+j200vmxS?onz_TrhC22IVfq9rBFj97^8`Cu#)S%Cjye{hR`tXM zuH@0|h*kAPu%ak5rrXYZgPg4@gseJ|YGN->hj>cTQVQuaqXr?%Ru10s=tK^Z-E?9*4Hi zL@dsnDO!6{VGm{mhVgY-GIKIpnuo}H?b>zX#X-JP?<8QuOZL%b1=vE&n5g+PPcZdH z@w|_#iMKjh^@Y}KeM}O`-{)|L^RkNo004&@>1Qd^?A0jIIOJc+m?FeHOu`@3h!3LG zzAdFOJz&08JsVRNx0FI8n3|*E*-FdYt{zGO+Ir-)j_jrh`z zV?8m?;evn`EEe}HNwIpx1g6PD1He!VpNzB#LlbS@*8=0G4HP;%ulQ+5I2R2x3x^ga z_U$_XWJ!-i@}B4DCrA;cjB(R;&?p+aGv?XQ|8W(TD$Mj>SRo#`m|z)`rEd;Q@v$u_OzG{PlHChwP{3!TXR;a* z!eAk5n8VZTK5T3?U3Gv6V;t>aXgGmMd+xqy-~%cg-#EkiKhpp@}sZhCDlpIv2;Fw54N-;bfO3*f?I=M&X3`dSiX!J)+> z2+jMv*zRSG!aRe4S!+QMz5g)107J{8K5AixGiilIbY)~Rw7^aXZv<8;Vu-g}0y!pv zEZJKVaL8v(>Udab0DI;|82uKd7X-QuArU3Eyp<%OtEDk#SoZj)T9w6jCZU4)&6_um z9xdNT0?odty|HTzDATMyO~%|N#7p(LP4#^{o!>;Oz*fW{Mjb<`4e{3*4MfI}3b?@6 z1RKkk>qui{A`APT5v(NuaEA{C3HC`yjK1vyl7xI}LGVr5V9f;=yFY6YMoci;lpITT7oi>Pl7k4PbpM1 zjKPy99^m+6m<3Pm_O)v?{UZ;Z49g-Hv-!bmv)4IN7XXj}mlZrN_E2=I#8A{tM5YP! z@WDd}#51}HwWOE09J-r5coVhS5KsT=x%`!)n_6itEG|t0$=$-|71L8i(3{U0+lQq) zaPUBAS+YG`$bLp3161rsv=#)oe`Yyz2pqzc#*hGyhza7gP)m_lw|Pe7%_1@IMGr-d zh+#_h&+LhhR<|{hYsHfb`_f-PNI9X{K9Uojv;{>=R9%^|ID(H(R0OGHF#;?Ct0T{3 zQ8?+rnAi_mazg+BKmbWZK~$WVQ442F2Nak=;U4-10gE)wND?~j1UQV$0-EFPwg}X# zLz*T5)BQ;s5L5R}nuW4sPz$Q8PFRRK-j-PukJu|C%f5=na`$M=W`zu}Pf2tGW;pBQ z1k{2D53wL0W-JX5W3}D@27LQEAHd-urduA$ph-YsT4n4TK5n|O+?DrMP=Zx``|1tOXWm@)jLW?PTzmx;-v7HF|9BnyeheCryJftl z6VQ3aTC5wo%YHtlc#t_L1D8ALToHRkd<~_}%-o!8U*lYe9ENqSPRzX5BM~+i1QFn1 z_F^ZWtA^{uDi`u-C>Hb3&dwXKEf`XFR*8oWM;__+evphyQD|rHNt8%61$r`bBf0ld zkevoZROSPwSicY_iTSSu-3kdMHdmD3r!<@MglLma@{cK*|LrR1V?3!#xDukX8BISR zhCoR#jL(7~RC|okYJR+1>;E-|KneZMUuTg-45*^xO_!8HrR`Q0L!b1AqS5IaDUx%P z?yV};b{GWlp4z7aGWQlU-HL9v4e+`iS|0Rrq&Uny_|5K@$XM@aI5bky6D ze6{%9Ad+zpW$BVtJEjopmWK9#pR^HD(R{fJ)xC%>C(n+}7Gxbv$I1jc-ZE|i4%`L`sn%d=a0<4bmPjEE8qO) zH-GYzpD=9icc06klk+=%|NT!tbp|N&4h1f?{sVhm6TQn~Sk7kPa+AlkgkV~a`P3B$ zk>r!P>1F?P0{#kLi*{t_WGttBc8!N{G(sGD3l{E}c>W4wf|+QG_{PbJv{ox9bxS7OUA)5S5|I(pUXp;<45oJ zIOfF{U;Nj9{a0{Ifr?&w=_On*|M!3Y_nFUp=E*0YH15C`wwBaaFJHb)u3|aF6!zJV zeT=t|S(bNn;9XLUP8)Cz7rX*$8NOA-JQj@efC2M7s{sKQR=VjuF1#RVe)=zPjB!y1 zvfClh*fD`8=Cj~TmW4YeCI7J)O84A48={zOR_XI6jMD;qHlWe6MxUF~U#a6Zi0bz&W7w;N@U?`Ixkz<1r zPB6NIoC*&0ZEl^`x%k~Q-`+R#VP|9$+EdZUuaV++9<^-fAQ%%HN*h*u>h;+C0@}!S z8L$u4;gvyP-+`$PF|`vS-g?T>zl-wXc2cD_{A_!w)~KXzcI<4?KYX zhTCh`uD$ZgD~~+#2-{MGAA9UE(Y$ML4AptJK^gaczhSFr;wqS74{D(^@yAS%t}A`( z3qJg05!7Am+S)OZDXhnp=*`?1pMGE-YYnt5lf-~|>#d!FA@X;oNfFETiA<9sb0Mc; zxE?)P0zPF41tSS79~PIySn_%7#b2*&pvgi5vik^7#P8---0D`|4bM)qHlR%0GpERa z{513m8x9!(upUjWAllkb{ELv&iil*F%|{y{Bpc!TD+*sL#$tD$L1&CEFqC1KjR#zY*AsI)aqJ~8OZK=N?rQ6KiB_Wy@?BD4z8dr5lX}sQ&dmC6pnxkiP&f*uL<+ zGPrZ0WPq`E1(V{?h8bBaU4a~5dWJ|!RY-D_c!GO$QdCf^C^41Z{&DuPPteY~mXx#_ zUig!?)$Y2E&Wti^t65u)dd=}Am+_ulwBUGG{?F_#Cq$Vr;U3SnM=%p|B$5e;WOZcL zlA*7nR<4EdRG(#opbTbeA^pk(pc&rJPImT~Jd_~@i)U=(HLzp;1ie4}S0ipbQm+%%IHn&W)E}d!5L~ zPd%c#llpJ}_HP0!7`;z?;uF9A>%V^N*z9@ibLY?#G^1p1A5+vGSbE`;R;sG`$QvZxyhbUdfmm8pBybf78XVr6aoMjpHcfnnl^m= zYGHjps9u+Jc1Btbn>5WYDFj*Q{Y9p9-qRT}OT~m)*a8_Pq_@k+qS5tnw~(6S(?hvB z52Rb-Rh+IG>Lj7z`_g-xWU zAK}z%7Azr20>t~q?J(aEIOvqPo90vA4)c|h%*%UspiFr3mjTGEmb=g}FlimO%{`7; zxq|PJj52f!D~ly8RutY*>W}F1oDq#8p!wwK(}FU*B}heZdKXZlFsS9Xe(Sg7bTI+W zo;?fDdG^_7Isg0MgAd}f0mb6TA*0a{pkveSlmdabA)e-)8&1&t-jtqJXTZBZ##;QQ z_F8_7JAe6%%K_FUR1&kRcVmdSz%hzkqruJIgu<_p3ZaNwZ@pc=LnSB0-U9kx_?)(6 z4zDRoRXFdNII?H9^J*Cj$BD%gU_N77BOu^nNsQ$FU`_xCS84^45R6$F?`yUe~6jD!J6a*btl6XA@H-JlY#Vyj( zc0e2&PC&=6?`PZ_A@YVgZ;;QTm9YaTkye_V<;fxIx<&kyTMC7Y{!puEO7;$oolBVh z`tJ_6RuXRoQ&I!Uutb@?Aq~oU3E?@@VHgN^ZRYC~rz9`i#Bht}$_yE#6N?sEI-0q6 zFWxea*_twWh?;{e^2*>lVFO5RlEZm#2uj3Lb`XheErC=D93z@v{ncN^uVYylo^a#L zFT<6?F{0t14DK9G$>6g&-VJl5jN@Fcwq{6>B|{2)LSmSjhdHu_VlAH2wQ)A)ZW7PIQiOArD_VgQGLScA>+62jGl7}*((PO()y>I)M~m4L!|yZ;U}^c zz`;U90_VCfjS>ajV@z83|8DX&nVVOJxsAady3?AOCnwlLOs$6-CbpUitX&IJ1ku=^ zLOGpAJXh#Nt5spTV4~E3B8=M8U;eBit&FxGd*qSF9)1XP;&~F!VV8>+FA@okxq9`g zpbRMFw}1U(zHfLF`ugjy15Iim0ylofAGq_$PkxdZ4#)h{KmC&c6OkYM;0M7mM)pn# zguta1KAtLSx;4fKwdCvYI5eho3V(Vt&k)J!f?Xhh&zrX4iGxn|iD&@k{RK*=h$1QX zs$jjSbzV3cQ{EcjKbYu{egdVZyF_Ln&ic zPBB&N2<1NEu!2~8WM#E*T%n_qKPzbIC_(QBR1b|>J5Kw4XR>rW49PFwf>Lph$ zsMLItbpyW)Uy`R6$lZc0tzz@kJ_k}eN7}J~t^SO9rH$Mcsrvl!^YVaWKnX3NKt__r zbz@6jA3xWKK4DR~mr?Q;%{?+q15gBG%=G_*!8<*3ixQRESi}0AaK{~5SyqTQD8m$9 zWEX~(6)KWCw>j5buj>%+GU@KX4hczzr)rJP)2s*ddOn{3*#Rq@f8zT3wQURwZ=XB! z=%buru(bqss^$3x%BUFlu*YQ2QF|N%0oz8*aXJbE^!dg&zH#Bg1#k()F~BLDA7nUP zU}z|Zcj6IA5)Wyc??=Vm<5#r7=)l+FA3B~Q^Jbxp#NrLf248Tl%8V`)jvg>WEeG}= zOb_{{&n%G9Z0>#RA1#7Gm@{U{g~cu0n^?$UMv&*pu$l-H&hS~t;9Ll`UCAN`cD%)h zfk*4igwG+3^CEKMZCXZvVtDO+a^m>$GpA4K@a15VtfVnem>S$9?E6qI=!C1S zH-Iu@j`Dx@q0XN_|Ih#Y&r0~8|M{Q){onspSp7|5CP&cBujQXPazH%nNr?d84|wQa z^U9zE0hfdjcJfxyxFaU9TUU%8wWE9E?n-~uzeT!2Jgu9ah0X%;er|>!A#67(R$9skmL%L$iz^zckv%PoLtg>tXR!A7u09l{r7R zX+v4mth6aQWJco;Lwe^rt@s%}@l7 zNdq#Nf3*e!$`IMIRGe|) z*Lm++%x-{-APWs4;6k7fySy)wJGYFJgrsJFQ(rv?Pvl544c7y#AZbOWZMqtLhzet% z-;BOkRLFzDg1(3>ZYQDvjcU5}?uR!V@E*W8Gwa)pGtmGKRd8b@3M$}tLM)}=6m zhEN8bkNIZ*=Rws|tj51e0Xk?v>Om*C2w2S6MIo~w7<$7i77(n-19B#Y;hTaV7D01K zf-h8ZnH6Ng>aN_*YP9>}c)~MmK|7hT%OccFY9YU_0D^|bmu{9zR2>tlr(+}GeBP-- zO+X|`jG7%Cm~OdRM^N6Hr()=n__T6Yq`RdG(&6%WQF>awvrbGy!X26xnGHak=c3-k zl^5j+$}kPr{B5u>cnkkrO-u}xO(SYvmFS!wgN{XKm<#4bmXK@{ku{D%PFu7y5mFo5 zQXec>-YQC{<)~pg z4T>3X!8((QkuKgVBkZDfBuwAHU4~6>po+bk3?wA8f(%Wb5AF>96(H)^VkQOzv|}bS z8Ha$Gsxsl-a<3*x)8qVMYK$+Rx~*%;^ixL?gZ9*jVJeXnq`|_KM##{FmLON!n~?HJ z;(Rr9U)z%&#AUS^GS^_qRSwgKNOd{!k)lwQmJ?JE4YZZe zW7|)ICxV5XmDJDfQ*lx71tLz0uoJ;CSotTICg~WAB9ya}A2;Fbyv=32VE62kPjci1 zGSAAwRGi18?WHfovvI>CNNgK{U3mN4kAC!{|N5{00+(?1g~x>`8d&3T40wgN!thX% zj=zYrUS8LNGSDFW7r*$$kA3W8xMwJf7#dMOL;?vt_uO+rDroON|MNeee)?&Oh71^l zUqPX3ioNpj9ZHYZ2eNok-uZcLm$kKtsVqx6}ZA$x3(3FZYQ!Uc;)^-EaB0|>qTIk;N(vCkS|PQWXMQ5t5u+Q!HC8-~RTu ziJ@^h1}i8-=i~rQ>Y{j+XiZ!!+uN_aeu?)AvN3o515br#nCLuVuLgqf9$sJssXP(= zAOG&RLJIA)lyJ)1>a2Ce^z70?`j*3^V5p%|M6Pz5 z`hA*%=8P$L@}jsLrDn6eUPOL#Xoz zObqZG6M8BAb9p(4y|XOm)S=mDqBtFOMw zP7qHU;4pan@yFRS5+qXT_)!2%Ko)MnA{Q@SlsuG661V{-dVmN5d^Vh7QFide$3OmY z+&Or0#Hw@hR|Nelzy`mL}iPLN3s!&Fn%L@;;GLZ-ChSI*kKZ| zLU*6bxY66SRV0MKwJ`5cq9Tl(>^yqoR{kVo;sd5$AF1&EZ;h&~(~20JZ*2Y#UzZ^)DX5yNbe)f zt>PmstaTJ!3{m;aJpaH8`IyTsTw#z=>)*{#hBvh^RqOq79?BRi3t#}xJbK!02>?p) zrf||$Q=5|b05yo=w}1P$x3;zvLp3?Q3mLbd1g^x8`jL-(gm^FnV8zbFfFV2#Lf60X z8^1w8BIrOFd@3Lhpb~phr%#_gd-kkK_g88SKv4|MhZqV|3j196jkpEkeEsWRM+O*z zw0`gReh-m66NQ<^2h^e`c+lX;xhD286l#z~2&Qv-!DmEX>u=fS42e{VA2(`l0#v7k zb>d!52E1+V?+{^F{`}Ph?)(o*&guFX3zLK#TrFlw0C*7_hvpfM!Yn z004-&<#wY|^2&ILVXL@%Fn%0_sdMHos$QCUmw-ZuT9{h;bwMG}jFu|Vwwe|HK?BO9 zM_1ru!xQttpBz6D!1*egyMdvct?nHXPm7$%*`SYyKQ&U%Y2>P-=L({~2?o_ILa#=* z23$;6HOC@`ECyvZck-8tgJL!P=;@n64Be`Ks=csOxih4x0({f5MIoQN7MUPRdixyj zpiA)O`aMW}69!V4FCUB>_mPoef|eu#un)NQFtdc3O}TzYbqn z64rs9qU{lDQuV`u^uh}-C=7=41Y28MoCO9{kxJJE6%jxx>S9pl=dZnHhjXU`m*mvY z<2$^bc+cMZkHp88B~|OHepsiX4b)DP6}^$TnwXdbWeiM7GPYU^h^n073{TfjkSY2} zf@OjE6lmg0%R_OI_0Lc}iQ4^%U|E4fmh60GjR%^cg00329XV2CGfP-}Mz3Tkstnww zbJRJ)@l%sckHOG`jhG)%d066fR#39!0^QTI8y#&aW*a9)?KBxKdK!Vkgj(nfHuIST z^&DwQodA3amA0C-wH!wzJgcl{t$U1;gqsL+6MRRo4JB!=HBqBdl7vxw97kK=T8Y!f zSc)5UGDgk+U$^Fbdh^a2g_DR)qFpDj^3;UH+|M$|^BeuFXe{+lv{BC%p1uM46j zBj^w&g^{*aVZ0+;MlC#2l-``n`u6lg4?TJM6d7?CP=yo6kJT%FT8*s(UQ#Fi;0dsT zW^N{OP64y+0!(@F#TS{#sWm`{xtvFx4VRD+@S%@L6NUiC2^%qtIGi+`=Oq#c4^Je0 z<};sBDIPRH4>!Xx5NItYO7oiNmMa2Vb|eHmA+V)dfG3jdL@@Y+(>Z)pl8i_Ne@+4O z9z4K`Z7Ojh$A9CAk1p}$CUWV#u-GE1m-Byr{1YoK3>Zk@g#tXdgVP25BfsGcdP117 zh-9d0v@&EhA=8>3VPX9+6Vad&_#;5~+rECI^$iWn;sclnyG=9O`1Uzi;c?-- z3ukZjln{qkhNCTGhVWSKm^k-8jc6_tP{Q}V_dU>z{4vl`aX<+G1!VJuFMNT6Cd$ll zUHLy4!@u)8zhh4|f9g}8!aD*7$nbw~dKUu1fDZzig9v+6L@J1Z)C4FqNa9-j45NUq zaLRWRNA-Wt8cc{eP}#YNK&mlW@|WW{45J1&z2l!Fe|ASoE^4a0q8nlfX5|4kgSh z?_xFy35Q5^yotj*M~ALl2(77gDEDBjS103P7YzB}OKKfSQSiU-DindqPN)^F!AFb|CmTLfDZtRN*2+O9hCFsFMnBH z3MP93n6I;E&lZ;XFqF2_<5W|HvEj(2k0cIJ?+Vi@6QFefIMJ0 zEbsYX+<^gqv}{2OVfcce@gPP?%IL{f3nyI3*uHh^4NmnNi=|#6iV+V@3EYyDjgvH1 zRuP~#3=ex235{FPA37YI`|~*_K4_hAMr0N}t0`f5+rqshCK!rHVpl&R`E+y@os9Le z28bS0d;BmUHFIJ@VH96zLsp4VM?4qCRoe2;vw6bA`G=vv4Tb~q9$B4-Rh|;5y6c+t zulcfh%(GVblu}lrnd?HW1#zocbBV#+-DtfijP}e+WT8}B1 zD>%O$l#wrmUf+3xcgPk5Yq@QGA3Jx6RlH5dj@}>Q7)i^_$IFdsD1)J3PypJJyCtI* zrpzZ!pL+1vF(jcCh-X{n%J#J@*RJtGm)0~%Da_n>AV48DPvcWz)8v_Fo}m$(ph|U99Ubd%sE6$T_&UAk@1nH75k(fY&d&b^& zEfrrgfhvSFQGA#M~m&tc?X0?_d9(m!A*J&S1hu&DG5*5Gup^3*wNim z&6@c%C8SLuu*w>7ZqT%7;YXxd%uG;Rn#>Ej$+x}njU+T#XfcqPu~V0lJL=pp*D+ou zu$p+iG070`->-ci=J<_4nE@eDQ|7ABZZB0YHM+87JFvsS3uX--Fjgc-CkS9X{TUaQ z`{^LpefRNo=yOk<;qd}rD6NA4vOrD08{pv+C-{T1z%i7lF89()FY&$>uAl_`C7fGH=niLV>~%-@(=&;5BN^(G%Itzc40)r5fje1sOz%Hf(wUtv1rTb-~avJpMLsj z^5WWo7`q3)pJ0Wj$yCY&x1dnf}j$ceKo0v`Yo%GJAJ;0b?a zlz4b$tk#P0SG2*)W45-ofHIU$WkF8t7EudM!{C%EdhbtPdFA<^y##jrz+;c1VV{br zzjEz5byU5iXJ1w)jN_S%H9-qu)RaXG8KZT5K{a>7>^hmu%v6eu_<+FtcJX_7mj&R+q(2GMY3=OSe zLO{*OZQki03>i#5dLggMmCpkLumbZvUos+| z8J!-8lLoMYk3{ED@Z4|!_RN_x5I_$!fk5YBnf!?NQy}Mgx3;!)m=})-sN($j^W=h_ zm)G&mT#W?@hUWvwV&Dldp?I#gtA%nv7yt`PB5?NXS-m}vFu>?9{^Bnv6jp=kR}R#|tG8fc)hyz<)l^=@cM2*fbvv_AY3dzq(^7AS#h#(} zkb7cC%90k3T^^JYqn7b878rw0D3mU1Vuvy)62o-st;L`U^?5yX81|DWF12eS3N(Yj z2AIqULP{4z0L+0-IWTEh?dWjUdwdo;0g!^cx3b+_s1^oivHD3erUwPBCnzFK=M=v; zKO3x(rt6SA>A!_D&?GK*lZd7X$JJ6YEHw)*#aYA%IlmQ>mWgq*j)zPamO`hZC#6Qu zuN8rwFujf`nJGVY%QuJjH-hcxEuCSq>FO`6ixH#+z&vEJBwwR3a&D+f$zxLRzt$UR z__@zXQg=u_h}US9g=ATf8ZH|y$oS@Nz;{hi>@f*g6#G7_wT_K_^oHYsNf$Ah&H*%R zuMh@2kyOZzOMv(1`V9`$CD#RWHW&yO1@o)Vh1xmP!pT-5Vffs0&ryUYAk66&u25dM zaDfdY1OQ?D?ce?_f)Ni40{ZCqEfYVE8SU@jz%U<@7{Y-=vVt`LGgD@5&4!*B?o={q&`*TISMO&vgb>}KBbN{I`nX9QR{{Ujlg zaY0WQJ{61gDcZXha$$_2JL4v!hW5rug83l5TXTky!7ePI;>Kh4y3I4R7*0biSvd*r z8*uP5+&8glJJoL?|`AQm=R zVBirgo}c2}F?(lh;dpBUr1-%Pet`1>G=qw09k2zi5jKp>lYv4F+<;>!g2^7Q24Dg= z3{yTCB`WR~HjDs6+_Iy@NfD0D5C-~yu>@sk7sDB;sj5at0Gv7i2r>dPxKbk?*j9JK zE%g8X-~Z#;AL98@cbF&)tjRz>O`!fEChx5gC0B&uJ--~<1<+U|0dNvkICt(GwLlDn z(fON1WAg_h?d<&b^FQX5#E(7laPdeN-J4@ZYGP{FpSBhfc-cDPY#+*{Z--txL)3^$O8YMCf7C^4ZiPDkjaon2P9&&0&^QM0=-0 zS=7efqJ^wdB$&r_qb6B5A*)XCE<=$0bEt&@#i)P*gE>@k%^PhD&}2S~L`@ndgoVy! zYQW;u!Jx9H_T1?732Nk_S~|7GLd-z#t?xDGD(kC-LcHUwN$@k+PxRn zsYx*OVfTZ+CPt;`d44=Ldje#1Z?jR@pK&!cjCvK}6-$XIjX$0hQR#Q-A*T704T#ND zRCLa?N56N^fLhq9;e=z`2HJiKsDc??hf7e%`KLaBLNMHsZuj75;oHvsWGkH+Zwfz7 zrSMugoFB?){J}A><#Y=#Yf1dipC^mCG$_{q5E+GO2+)WgPZ*TJ4+Mm=Q^P8Y-5gA@ zpbQv@y!d8>X&^Xz_N?I;ZgH!?K^cK%cy2CSxBx@I91a!bqUfp@r5u1QSUvmfv!EF$ zbsTtWYfEBt2u5t}%FCefX#oU*hQP%1O~d={ySjaiKUBdF%06&0Rtgkw!BS&_F}bfk5R6VHFc;bv#|3+)<`%iHl}IEruY3ww??D-TJ0h1C-`pDWD8w2oGMNAVWM7l~HDH9^eR+2xe^ILoV2oou|Hm zVnz%w!o!3}z$|bH-V{L@upL=o0)G%8?R$KDfCz#4v^77|q-3bC*i70*PZg=M*cJt9 z;tj%_&X|i7cvt*vKBG2sO)%7MZV=Tq_SvN_ zXqG}PHBVwX&3cgUP{!v^dx$Mh)v5WSI))+?kv--G>B3uN=no=#n#UFk8A71(00ilVuB|JbeD$-%~Vd^Zhcm=~{JzmDW`x-d`R z!u1tzh4Bi2hxF%R3ZOyr92q@mXz^ic=l!|DF({3>oXsHc0Unxv`ImpeB|}C)22Kuq zGlYQ!>@n#WFR;em=0XxE3fv&qhyf#&3z^QEa0|e)rbJq}Ap`L^MR4sPys~gb1{FkD zuU(-;oIUu8h~XFwr4R!{&KeVD`ojk!0Eg3v%`%`2))nnfhB{B0p(>=(bmnZXlQ6ze#9`2 zBp$jYF!Rb7wE`f@#+zYh{lK!oOWZBS0wn!^_RjR%j^ir(k|kNzWLc8u*@~h-n8M2< zOaVdy3;4hX{#WvW1zE5XSOgLv%mha3qx=iIBo_gL;* zUA1f1u4(V5cU4#4yEnbi?o~V$<6p&3X^fM=w8w?UqJffZ`7Mot>CNNk#^f-f!9lGj zEC89@Ei?ivVm1e`D-6fl^LLFooQ;EMY6JA}q2Z%5#tL6?UZQ#mCWr^62QCb81{E?h zJ+uG<4fLa_HpUNJK<&?!-j_+sMFi>r)Z*A+B88p*`SEKmSC|o+ctjEwpdXte_=hP- zW-{p@$7DvZ)~y^eUV$0HZ&}(^Fvf))~-LmWDD_{AF=-~s-_{KNBp>4TuzWF8) z2gi(FJ1T-CzzV5?GB|a7(Kte2s9ZQm%r)X64jYQ`51l=GR>HvN2S4}$-OMc_$zekg zoJ<3>3d8^IU0yP>il7X^Vc-=+rBakAHxdM#XTz7S@w-4{^w`krH?}Wd`!Vkmz4Yv} ztU_5*Er5l1wsnh6mbS@>;9u+OoR}Dilqac(2CG^|SjETPwC+g}vf#nS z#E~hnO*IXfxlih;okR&QZi|A#T>~PgCy9puzlD@uflTxZbGUtz*S6_M#6VO(Aab60 zOu!8hspUx)6C^1eKxYIBL^1|ltl=ns8ge1}o-Wbr2B++6Xk23Gn%T_Ns5$!yV z{9y2~ZGq_sLv5-mvi}-3l-vrhH}B|n8Qc`?3C*RVg1p}}Vwb`1Vzticlb8fg;Hv;G zBsBgO&xdpZMc@>X-Vgy$fHfmlYPjXiAUq$$fRlg=0ws7pXmc|M_*Xzb?Ei%xDC3J} z@Z+Mep==65QpyOyNtjToG27`;lc&LjU?fa7<<2oSBgMFyvL-Ml|(=t`E~(G z$j?4yDutZ37Dkw#DDAqnz0Ef-+3doS;+3mmn~No#ICj()o-C38K-u3aOzRb=c23!j zNi=htxRJ_?U zs}I;$P>WVBG^}L~j~sr2yf$iQH36ka!!~k3)7HPr8(Gcx5;ek;F;Qxvn^`e^e9^o$ z!InH9%g>Hcw}#_z5{Oe{mBiEi=;9=jTb>n)Tk{TO=YuhBu3g)L32owgN<1|&HZ?tR zIX4@lVJYmvkfcfBPoA0M^aQ92WR${>sVb|_Sc>x^z!wH2_*n5ZhLJ4T{$2dFH9!hmBUZ)?P7&jlsjhgcmk*aq-aAK zZ6YBnlM5J>6wMnj29`|uKn@f<#QNJEHTpxun1 zcH9Xn#%MMkkYjijThu061+|vsT2t*y$%toAG+`4$D1vz1CdCzR=_W76!q&niK@u=6 z>TX<@iO&YI1EXh*K4Zv^k1}^}Y;Pk61_K((7HT=Le^9RyMOV~iTR#@-qez(hS`{f} zv^21a1d0>@TnzJ(RIRVnF^j;k;w||3pDQW+Hj;IcYS-WR5O{+Mh)Av`Yk;|SA1DCW` z(9XTxQ7FS#jh;PyiY+f|$y&;6c!JTwMpw*yiE4-gSSZAp5fJpmpalFGI8lfM6={|k zD8cUnDDhCnlJcTWDwz27DT~LW!^otpagYZ=@X+9HvG=D;Hsbl&Z6iQ&7{p5-Unw3( zsezYhq{M)F=C&;8BX=U~=YEkt3Ny};V&brk4E^ANj^G8?VjiWUGc^IFq-h!A**m4O zbZgm(G;YeC+?tYEK$+b7;z!{T)tFiUy^!|=nh*l)2%=yxP=DMCxL8KS;%B!>0OAM> z%J?ZEPH%&;Oyi3847*~ykE99-848X{v4@8v6TD7D`2J4-BAW(a9on3*c4C*FZfQ!SA&u(yDTo}3BvU53nB{*8{9s%MUyF(Wz zz>d5m`59_63RKa)?5o0^Zr&U&1V@;+f+DJM5H*fzWkFZV>$!&PyJiaxZ7*QCaf@#1!-gWeb z=O*506yxo?cdfI+Zrt0qc{t1^Uq1%tYtjF@K4-%du=1dx$eA4^il?dll8qvEq+hFR^gDw!EZXn~wdK0VYZ=9Zv=)MVChIg=!Y((z`aTZ_G$5a+kiNKSty zt*GxP8is>Wj8+jZb1;MMhg6J3x?g0Lg(ebwW2&h2umt3Tw6h{RVBZ&V(<4}O=7twW zI{_C&E|fnIkWp23RI`IH=^qK5+-YqA7wD4(IF^qDJxRioFO|_>5iFVMRujh1xy2Az zbMARoc^I*&AVn-g=LKOR(^4(4#p8C^3!dK?yW?XjtE2b%}72#5xgcKpfvkx8lwTV>R7E?>R20001qbt9Cx@(%@wQSjOG7^Skg zZELwG+GJDulQv=6a+PlJ@)W}=8he*$p$&>uEH{ai!6mZM4htwl<&ufbj<@0*!%ie6 zkukK*8b4YJwuyFLgI_r-I0HFp7p~?$Su%?IgFBs{HJKVw&;4jWhBb;_s$6Q&8f`V< z*KfLVRmWI*Fz;EaQ}n^)4+JZVr*@-gemv;(ywp94T>XnBpxa2+ShGIL7vL~R;zE}} z7A9V>)xASBJhBvaL-b~^R$xTTvA;Ra8o`5ieXOd>%zwgrkT!N?P_O0*< zXc~3+R$sz1zXi&$sU?qpkYhZaz%`;NRuhvM=sq$PB71M6eXW8ir4CHryxl zhaSzLH`JmLCTzE|kcoKQ!iuu;_+pGzhg7rHMM{f=zlMUv5Wr6Jl9-QCILx%=2ZDa_ zkd1az)6s7D*a-8?AGX+*w&mxgw_|vwg`XyWXWd~)7Hk_2BFs8dtOJ6fr}!1;CaK|7YF5(SDRW(nBM}b_oSDu^uJQW#Nw>Pu z&*c760vf;v!V`Lvh})V-0E^dOf1R&0LI7~#j5{{fY7Z>?YB^d)qX-2H3K0|5fLQb~ zCSc{b2iT+o{ zQy7TY!gvh|rMogg0m+~ma4{g#04}*y6e^R+HK}ZJo9CSy6B%|j9W%ikNN8BhbIqcg z9!Hpf-7@xgyo;@xFCEszQxTDQa3s)o;aI%Td0L4(aOluthX?qtVe>j$3`v-SwJO(` zaM(1R7z|Q3UWAo!40T+7#E+lgh^>k4!-+U|-rBO4cYZ`zGnh;tj~G*EV6eDW_x^5G zmMQ+mI1Olatly_8---LQzBxGq5;)F)9AyjWFaY#?4#doE&B2)f06+jqL_t*E5a!(C z;NQo7ld!nJ*o(l0YjD8y{dCIQiK9muO98kXI+U#T_OW^3sDvkYs~O2~x3B}I24(0G zrU_0F4s?-YMxSBARYM=~nvxEcfe&wG^EQ*J$^c`jNT<=TYZ%~S`if5Z>Q}#t!U0bC zcY>5rU8ZnyMG0I-0z5hKE8nP7;|ZlqayI1?9-F*nAQjmawThatNIxqQK58OHzUBm` zmJ*AFdd^b#iivp_MrAUu=d*L+1(adHB(RZc*9vA3jLKp`(lZX!B5Dh4EZ?mq%qs>u zdj_SWhGrr}qMIiCere6~IJrl~7}lA^iBeQ1|)JO62Le zrI_L)ayu`e1aX^Z*_9cPD@j0m5<`8tt}r}mxS`<)J*W9*H%cE+v!D^>(4nIzv-s>g7xoRcfHI-H zxaGx9Kk85v8t*8h){96ksWu;}zEneChxmbrS>Xv_BmPi-3JADFTb1Ca=|?du(JZ~i zJW7GYFGySY4`utBiZa^baA=)RQaHXqQ8?AA*w+jT_Ueb@N%+uAKrUfB5zj;FGS~<7 zR7bse=}F9B5&1K&iP~#No|17AcaZqF-f%uLdvfNv&_{Y82fESz8*!#qJU~Ifxj5|B zZQQ8+-5Mq#r8Lln*Tu1ahQp2p8t8Nl7@&g?Ue>CGv6sAL`s%-c>;Z(J^!@&2qQcX?S{W^J@fv#C8oE1k8q$xCP%}XKOmu8r{M*$&& zhf`9W#e9s4ijiKljg7Za7cZ7+;0aivH0wcVsF9VpL2Or)pGb;c4L(Mh!;2fNFTjPt zAAn0-Evl83#Ir)m@wlAfdF%-AC7d#62g4+kpPgI13Z$U|j^S6VJLW+9cIgF{nRxS= zWg~t>@;HRY<>i-O_U~F3nJ6+?7VOdf$3D4pnp}JJq%g#F`FsLqr3@V0bXL-4$Jk6A3S?1wa8EjAz+aYQ@fJmp^09G zGT|r=RNJC)QNH>92`YzqORC67y}orLsMh$@PO4vY;FcCl)*TWK#aq}SQdCC8^hY65 zgPFOZSs{~yi$Zonsln1Ozo~9Uj1F2ng)Hv~VRqHVXsuO?4+N}Ib%78<95GlKoDCBapSNvczYRJ-*s z&w0a1Weag)2tcXc(N1l+N$t`C#6zNC$#wK?s1{*0!B|zW-75WMJd;2yqF3Q!^9IOr z=T3O5h`H3g!3E$R&hxIhp|gnHu-hzWP3X{V9jzSRHIMGl3P~9G%S<&wQpyD?5F_4I^5cYPB5r< z>!Avi3AG5Q1w|Z>F2O zg=h4DUF31$39JveFf3UZ3ceN&^$+fruwW$3SS@TXA+`W8g(V?D8JdyziHHHU@MAd% zpA7*Bh%dHhuH5LeE7z{miywS6{qf87JAr}{Y=NAh^BlM^Z5Pht$~F;b@){*VLX$KF zBUZ1(CX~7ABO}>!2$E!+yrtHf#gmkqB9I2)DkFjpr;!;IMgH-zDkz!36vjV-UqyN! zxddfMpk*o3dWBC#cxnqLT|#`!lIk*}Up)}KGOOo)SaK$lYNpt2gAr1#Lya?vqX=d4 z2LkdkqWVmOu@3DV{}~r z6~g*R(Zzytsd<1JNmK}SiDC-voIyY+^KMmpAQf{L1!pUUaNu-YvGu58g#l1&a#;&? zCD#a>f`Su0Enf#BVE_oYfLhG&f|jq9<>Pq()7BQh$Hf!uh1)H_9y_+AoQhr+_PB6} z3p;!TTyW9|xCCWU`O$aG!>|T3{s5p?uW!|sibkq=e;Ew?;*c(9)bJw>vV;O1C7+69 zq%OIoiMrlbs_A#|CmRSMQFG)PN=mj)$62HFcPZ-8gKidu^Odjpq_Oq{2 zbN#|B;_cA9W%36C@;3B>aWMN76bTkvZ#gm5!v?IdiOMK_pomPOw1rM59@aj4PZ+&` z0CQhrLNSr6!N1n9%0k{TI|wH1E8@b0EJBvXn@WwOqHLVZRz9qvgl~!*i0tX^Qr^(c zexwn`FwpgC3SAi+qgDx%n`V@1vy6U65l&)mIm89{0&vl_)hkXc(3^mZeFeJMGA_qn zaH$2@gvSnEunSvIw{G4dpppDL|L>PY$6no~49y#0&_|cAboO17Q<|u8W#flr45zK~ zc+CSPzo?!D2$J&3UQSdN$fOJ~&nn2<=A21q%&g;15PK48SY;7A%DhxrBo_x>Zig~Q z44q>4kQEV0PsSomt?uedRV0NnD4Jv+42|MPiIs$2uubD*WYA?}c$L4tCz5BiRoLxT zo>~*_PWki>Jz6WPmikF}+of=-RsKK#2k;FVz_f$PQfE;#@ub?Bcwk(n3|Z_gCn$>& z#&J~`FbvHia)*9}0j7bzLdIH?Djs2|xZ5?jAjjmQ`lL0eNZrRUWNE*|1W`@z=7qDr~< z;`X7;-M;`_igT8hqIZfL416Op=6MksCYzmi;>Oj01%)!45S6QD99O11J2gpyjwFc9 zLm(P2Y7!QGWE)b%Ryri1oO?^rF!us*TVuj=W)0|A7H=+zq_R@c9&Z`31rWf?VDT#l z)EQi@Q+N){eelMg(vx;blI*r8fId+(rcfp}$P#v8;Few1d;)EG&lkO3uuFAu%ofrH zj5kJqcvU+NN}gXCnPkNx!nV$1w^P(zf>}syorfHa&f94zB}T23Vrp&au-MuRmpgaD zPyggBCNhqEG!@(*gD#IBKqgbAFAuh|#46uT9=7$1CQ>nrOVS4ocAykH1vYm2QD z;dCj8UWzi*qW6iooiwf`HlNWrM%0bqWdUjg$fAFZVdk3&fOz5J+n;~+6+fcD?$>T? zRW@V!+_S^rU>O3#BCx;~=EK#mK`@?Gow+uf;ux+u^VxEDXQ&xix4fV(W46&L%f zYK_#MM(hLBF6nEfKEbCwZ>0x4(?h&kFM3S!@OoMVnRIJ>x~SSAN$87q;j*J;v+$MC zMMt_qyMl;4m8(43Wz_RB=nH9qJc*bUl3*AXt(G74YTb(8q6Tz|^308-xe{FEIRv~C zUnUZK;i^I7X^LU`E&`X~l_J9I(k)W%MK)RhnE3X4?;CJwQ2HdcPJ&(dbhQG90(K8` z{wMFfFIB*megpy3HgbAytA$amD_{$Ww_1ril#6v+kGE6`o&rXAUSjT3#8PX@sA|Pr zIiF$-c{^vHvO~;|Tvl|uM<9g0STvEvcBm06UIOP;R=l9k;FW7l=a8Y6Sa#k| z_d(`0TY(18I}x6!tpv)@gEWYZq}W$^3sl8n+}EI94YFvAmc%PVpK94L0d7>GO_QhA z5Q(EKcRCY6Bi~U@1j$l{Me)(1mIPCk<&`0xq~c)}9BWyDGOILcQXfruMItS)6D>S0 z@vWi;Q1h(N;5xx2z?UOWaNs|$Mtg$2@M9Ga)WQLrgLQ~%Fd!HP zThWGXu&3NqxPdSvGuLA8=K?_Kta+XuoEk|x z7*Qk1Xp(?*%kZi~&C-yEm539C6GRKUtQqJ$xC0)|-J<>wYB{iffIg~ZqpCIYmQ-LP zw{aoAwnmv6NeCrm!ICWmH8q$I8^LxXeC!PfyVl5)fCF2BUY zM4(VTD953ZnpHt6t8K6V_3 zow@hId(la)YquOU7dO$M?RAxrH2B@3+rVmr_7BOIgj_3pmJR1lsjv~kHq zBUX|VJPMvD0)k?Zg-cyt%yOjccE7hsV(qcYNG{c zc0rj_Cr+F>c~X>gAmfK=)rndf{C6U$@u*|PF{k+1?K**;;@07x=dCzOg99ul?uyN6{%#}&oA1GF;Kf9-dm72~+Zah46Q|P78P4q53#jiaBl?quR4@aOLD;;Z)_aL?7 ztYHepDE(YJBL>0Wg?GS2(z@`(>CywyCq(S4;6VKdzkFe zv|E5}w#5hfS}ywH(!MLCS|?)USU_K1I+X67KHMUV8C{T#o z^cxawi47$tCb{t>zynFmk6=v48tE?pD5NmaD999bqDU?8tUx06th}>`)kL$hi1?s9 zC}R_ZcW4>es5WiF6_HG4&YiYSHdWAwL!;)@-7%3#H}%?tH6zhxOfCqhEVh*ZUVUw# zZs%Gd6}=w$ndLb*0QiWPBf63hHF98{&D#Q^13 z%tgB~2IbWma^ z8t25+CJr2GNk!Ry>FaTF|X1&=9_TyHR(~3g?O-i@i_uS^Ku4Z;f3G z^C&V8${ZfHOM3&!_#MwCTwQP`!hKxgK?mv)ivgavA5cT2qIpPSoD(n&R#Znsl4UiE zuyXS;%YuB_uLxxj4?^j4Rf=0*uZ+$8iI7>Wm92Izc0n!6Wc;uxdZZg3xfqvdPt$$< zn<~gMOYM&3=6_ePJ2{h{m}v`V78-T|6-39CK|tFV+*8|lWfT%j-M-v9TXZ$ z0pwKU^Y9!X*1b>Jx};QWRbDj21`(3fd=^2Pj67==lF%2FsMoXY1KKb@bf~bAJSmG? z#+zX>OQizLRRJA~)YhdS_sk!{3lYxB7sm61AEGRYkQq68XK9b4t+BqY>A(KQ3$IPt`^kh_17(+$c?ZyM3 zM@d`c+`zsPEbsAREj;tIv4*su!52CjjoiDbVmYHPsXxrH%Y9-f-)OM=*>q6`G~Bd{ zNMfi3jsO>cMGO>;#YCae$}I4ZD&^fd0|9@c1qGC(IL4LW8ww`KDR6)1ZrCkx@Zj_* zy*PXh#MjCk*AS$;6Wd1P^Sq9m0nr3p>`Xi!co34Gory<_Qh_3VN($0#?AgV5QzR`9 z8e76}F#+O~w8(Thl9>Q5T#lQ*)AG$UU5P@~SBI9;(>Ur?^MW*zXrK6CjZ<);4H-N< zfm#9hY1kye{{1W0u5E2^3&B`wJ7C{d)PfP_uxEo^o9ABYMp~fwVrhdjJ*ZS{40C}A z+aR8slpD*r9BTAC$GKSI+~V{^2P@6=TwmEEpJ;OasB1rYO{#n+*=qQsfg7x>$-rtw z=WMOHXooyiF?kc!D1Cex$}rNseVwtXf~V#tGVo>RVbznGFw^*HaE$yuMLXxcn=_di z(|RrmjeujoS%sO*2Xe3=Au1xMAv~l(&z8H^64K$vbrfv9+#r910!!bKM^E)Uh|tKz z1(HJt)9t_vWdMYD2H4`x#6vc^ERM`2tPn8AC|h0rMGC#|Wv09D-6^~a6WBVOy~y7T zt@aWVwFXTlf-RTRsw0h(gYp_K3DB(qwi-zY1G1z$OezrPM^~Ym{k@;c%IksGjT)6VoMtI0tB_1tQOz)gSAsTOQa=f5xj_wei6n}9y%1f z8cXA8B#u6#MMpReLvZY(Bqem8kD_0EhguS)jqNG0BK(qH08nhCrg&i#6&$ z?t~H>)lnn#UlEV0(E!EFLuV2BYF zx6NML{nt+Ik%ZY>Y&zu)!#Rn@swQ!oSgZSL{uK?#IFQqV*10dXsuTE%U|S%c(QQ%b`peg@LBkn9T%|o4>ZQ%i zr-~IYli^xoxNR@Hd*8zF>T`D^6diUyYRoLL-xwp#{WFVu>l1vclUgMLs4H0i>dI z1WUlEr%@QP*uvp1msyeddL;wEXB4ZRYrsHxV|C=L>D*jnKMTh&S09R9^g%0#{s zKks9b>_nhgbg`fYG*P|0nOkRQ^^0V3mIt5Uuy5|L<+Fsi^F4s{^o<+an2nmdg&OiR z3Hk#8U}-4z=jo&L9pH1UFj9SX7q0G9#o;=!T$14uvBiRN><6$tpL>i0wXkM5^8~b0 zG~$hppl4acbyWyKI7enl^x`%?e%*!)KQfq=zm`Tu;gawy6X6%73)G5p{ty$2%eKYT zyfs!(Ex>?m3t!BrDOyY-vbYi_Vua6YM3P)D$&kZC$rR(j+^t(Tw{P7d-2XIYN6+!h z&9+>wjEb7Td-0D_3uI3*6P06Zh$5fb6FJvN&W&6@GgO2(LwQEwr{Y8taeMwk(k7gpS>TK*;+n*-eOtvDk@E%$9Y9z~(8=Wz)_Q6Ucrd`2ve80S zVb9bHDz^5W0001r6yM8UK>TereV3SFpNoNmNWPCWiv&TzHxM&v1xLU!l&(1(v!t3i zu4ffcFT}aGW?78F9ZGEiH5M}AG_ImI#6X9Z5Po2!Mkuxwv+3TgTQ|0EYLSR`wo}VW zA}r$IX)i)!mh?{rEr|9)pPd#+XUs&+S!5IiLyj3V?CF@u)SFz>B)$3P)A8Wc20E}5 zlqpWbo&w44wP-Pm^s`hP1U2`P^1>~5U!f4nP$oN$AB|6Ojp~p@L3(E6$`1{UY)GY~ zVig|zNGgJm4PBQ45vvkih|lX5N|wmr4jwa{JCb_JLK>%h8lod*%a>6%~+U z6gr5{5@~}A3JVj$wG+5#XKvi%G8~v&oP(~oz2Il71+eAGbZgh2H<)bu1xFyVe!&#m zA$9E~p@^cAQR!_Nl$smw91!>tcP-3h241w`OCn6(8mNWh-nH7EMPrx%7dQ)eN$1ma z{Lo;C*H{}eZW{@hNHRt%^VG03fJiOSo%%*Wk!KakKoN z0P8keQo#fOfHkFWOWsJW8DKv;W$zcg4m1fzxGujw6JZ2~ltbHmU5Lq72_dNYdo)RK zs30@b7`vh7ydIw#Ac1TXTbG%de(MsTc_9BEU<|01+I{IpmUWi_n!^8gEy^lgyn`$p%(E^+o zWM|(kV(TGB*R`!J(ix&f^I6Zj`4qV*m}1zi9IQ~Dl5*SMLQZ;#~n&-CDVIUnP%0M7YP52%$gkw}Yqi>_J zB`9MWADg5>W?UMcd4u^Pjy6Bl@5X1HfH&Uj@JaI0=xVqmUbm!Tl8Z^TNJbb*vgHKA z-Tr;-eSlRlODLk45FuB7G@LiS!Gv%A=A%Bnuw(5zM0u;(1A!MMYJ3;IYEe zl`s?7g&Of6GY3q=P!U5$0?aj37|EpC&hCY5E|hd=XoqE}TH6-GBmp8gPD?=>#>7TI zwK&?rS9~c?{iacc@c#3iJ2xX_5q6;|h^#YPq_AA8v-@?%ItTOhEJx1NHckBW%-t;psE8Y``aXZXemV^l;K{r=y1t8?a&~GK%SetxcCh0GiLaC zGIzTa?`f990lwHsD^@d)44~)UkgEY)C@9-~oT8;=VG4Kfm)i+3!U-;H$c^8H#t`+t zQnYktE~n4!?aVE-^rIHVfVmM+%XYlp1itVuAIw&5U=9D+%m2AoUbe`|K<8qm@v${Z zJcf#7&ThoQ!KB8jQEO$XWi+vOG;n`QSJh}DQ-i*;m{+i`#YohC1Y;Q=u7Ji;Vlf*7 zjM{}S`O$(9;jrSZcx$6*v6l8CVK^bmTZB(VY^8fDW*dy0Z80YJHNYJe_eL?xWMs71 zOR(2x`DD&2BP~fY@+1*CEZOqlTd5!>8lSfHg(l%(xs#~zmX~w^qjHvvan-+gQ0QOT zek0=1(85Uoh;67vNyW*QN-Cu<1Qpe}PqEELUdkGfwi1IxU5dcna9Y==mtj zld6X@$~##^&gY?vnTs!nGbhLv2Tawf(GaNe%BG4G-!x3`Y7MGU2oyld8hTxgv*p^z z;Gp7aM`LRN;9?EROuobv+H={*Xlx0DLP7LPTbq3PQW($V(tW&X_}h5P#?uE$DuB$B z^@lYxqf{(crN{|BwQVsdN3bCo5ovC5qPIcCtv0xDy}WguEB`tlb`fs?E{Ay$I=EYo zm5v1brdI~$MTWIV1~5`# z3$@dW?48!S#?Z$zkE|j-z7baGTpPAO&)&9bIlbvUcK2zr(+CvGH<+0H1oJHYG4hMU zO*{#-^J3s~g~J(`439ixZtvian;0guS}f8IbB=OdCPl?bx@%ZCxuPJ_yu*L!WO}$8EQXpiFY*X>I zsV)9!`?j}0*|}~|9?!~9j*pxb7OpBv=nb6I4q6U+ew@DMOQA3JEypOexIYz}n41{S z?S6%&!?8u9`3@$LmO)zDnOX}ql1g~iw>(uN_!rxm)EVQL_OCS%&CMc(rA9MjcZ-1a ztG20vTBwh!b{MR?09+OVjUigri9g1Ue;W>!k!1QWZNiDJwPm2tVs#!N@3_mgNEMc- z8WnJPG^AWa2-34fRhUom*s~2u6UNiGUY=qNYCfmfCg~zNjj%v1!Y+MA2tk1<^0)vM zLF&H5Ygj7kw?otQ+@p9xRD8heVJV;hrI`=Ho$9WKf19RL_{79=i>rpKH*m7S z7&vqqsY$v0-;jZAlJ^0*m0-Nw6dOqg(Itiu@CK5Uj_=f>bqg&wrS{s znMd-cPNv$YS@FPHy?me{i6`q0n>>Yf6O&wX(PDUpSsUVs87MZmUg~H&5oYhO|D-`a zBe%iJ65oY3;L^D%3Y;O23r9!tq61;n*Jc|H=sZH1Pfi}6!MpL0S>$40Vp7IVYh7fO zM2eMcc9PV%6@6Q)h%-!rB8?CF4ThUd!a_G{gxD14?YBhbD%4`agr)8JuK`ea%JK`E z;@@trVmT&QF?FXSDIH)}EJbyfk)?ap#Vk`m-(SrIlu?&pGxQ67&QES*Tl}*r)4urR z!P7|sWmw3dcLjSIz=g7$hbBF}tyt}yhzv-gj#gsJR;_F%PnngVXsr|+KeR-~YAK?Y z7a~SUaYM;c{_#egGTw#1HUBv}qtr6x3VMdK!d{-@zzs6+L3JK+co&-g;~UXv;Z7q& zc00SpJT9?MXNkE-{E)Q(^JUh%(7t*oy|6swwz=dx0zLgk!W62#!*jRGbWQ{ll4Vnc zZQ{4BwPlc-(HW#}uCPoY-O=6T(G_N=<=0c^_fToGJen6^T zd`uW0nH0g}YIsxC{VbP@8-n3n8T#V@)9A6KbMEQ3efRe9rl5BU@#Ws)&c|qnQs(lf z0bC5VKmkS)u@+5Yp1~V|(AfF=24r|+E3JXQ52-z}fmcG)m45VD4a&f|1}4Ob-l?&L z0L@GG`r-NuX_x>-KPSwKod|sbWf~)IQOwMc)``RJ%DZ=Ttu<7_m`NTTE#oUidx!le z4fKfKf^H4Ctne=Mu*YS5vFJWNKKcGJi^X0UA3qr`9?adyb@cE6WtjD}q(P`gmi{Do zq9Xd~dnl!IHqN%EXlSf-G^ClWq81fHbXTYPN(8`i+Zgakxn{;F=aD{3ExZ%Gn-{>y%eL&6-A31R*aLto0BsSz)EZ*mrxH@{w0(;#`X#_kNCvdnqb zV#vY@mroV8)n*zmhNoFAY@DOh=u;XLDAj<{$VO^j&06WjwJHWUX1tb#InWY-%`{Dm zA6su45+vBvgh8Wq`rBe7Ocx~1)M)Rpe{1BuKu-%`mF1Zu0D}4O@|Bv}Nw_hKSsoI0 znfoqu!s@=<+WXj4yr!>)v7i)?RyoN(r#1eb7>iyvl{Od*<)nRr|_yHL_7dWVw2 zQ)76X3rc|PGX2L!(+(e9y?XNajJKXxWBPdCH45SxhHJmIUajtv{H5EAT16$IenqpI z0Bh#jozfd-J38JLeu1zVYx-lt$p}Y6MD*>nbViK!pTKrcknUj_Sofr=yJrmXd9#&T1oH(KD#Qzto- zP0xgU9pdAwR~y9lE2-uwVDPh1)l0?GH9sG7-@_OI3~pm(O=BYwTU}qY?^qPzz2P1L z)Uh_yC!h>D+1#LAFKVd}F74{Fg?x zm}t!1#};$kusi&gU@qT7-YJ%Gk5Q>|GbSJ(U{@1T%0bq zg1d$Da~lKLw?WhcD6z-TD!fB??8uR#&hc3ujWG2cpv=sjzgmUwZv>{Kh&TQcQ*AM* z2dvc8CN?ZlZv8bC<#T6F+fy8h6eM@((CPOteKeQPPSbQ%PcijFx^13EKl6V9UF#Kvs(+;K(QD`Ol@cyO%e#! zy7XjEe85z5el=F`h)D^zLDX7n&MCRI8pT<5HKl{Ef+g};({gDfHI|Sa^=c}3l~5vzx>O;JffLTd8`2#eem(eSGTr&ULR(& z!ro#3zCk`CVFpzIF1LoIA~{_;>;8be3*9O0j*{5};oOf(&Xvlb49_P$AY(57etLV< zMppsEv$|Sd!Ef*Z6G1zK6SLB-{DBJ@ccIhYlV9lH^Lb)@Wg+Zv0LHju~8E z=-#L^YdL1bH;ko#i+EA@SpDFtljLSHh>=bvre?#GUFL#TgsetM?TXUF{Pf9_TQ|0^ zT)$o3a+(U?QMc$c^YSycQSybuaB5%B!Q8p3X+5=z-{rUl|aCCID5 zo=_tYLnHj~hd=z+fBo0@-+w=6{>(GaeCbPH`ob5!VDx0+*$5m%0Niu!+BHELZuO%I zUwG}+m!5qF__D!gg^~T<-v_P*aKy5eYAe17%_0#Vm(I6^8C3GPV4)x9(~1WU@PDkH zJc3~}z8`oGT+KHpkft8j(J71i35`Gl;FCwcOUJJ4l?g{#-n@DIXld(yr54OzxmW4m znz65BT`^j^9Ti)HDc;Z|WvBreEimDyk;Bzn#3ak&R>N&^zZ5!l^a!}_!;dd7#V+4a z5QU;zt+?g%;f}6^OhcNw)Uuetg&^U>>lY_VpT)|LJ0UME*_J0^zSFmArO8rgA1}66 zov04kC-XK4P%j6rZ`}YCW8C8_@f0)wVHT*A6DOn@tL zCux}dF@@(s)B;!JCy6l>qxbXrmfRccVIH>eklQx4->upiHe^AAIn^U;p)Allrqi z`?DtSlfmy2e#BqCJj`&y;!iwd?#W}N2^VwiT^{Ndz{!`K_pjX>la)f-+AGjt7p(HA zG|(r(m@t0Exfz(DUZRhElJP@Hz^_jRmpb8kp#Wj^10tGz)gGo#*LX! z=CGhlXaAbas|BoTJ=tU9h1QeGMfWmzcq)^|L;rX~Gs%!8B*TbBVzldXPoKH;@ntMs zk)S^^x5oxtV4`{ng$U0joEv??Y)Zrva!NQ%-Xh`pxM8xCA^}aoM+J&Wwa9*H!;wA| zKr?wQLsem|E2$g_=}W3L#Nk7a=Oc{l9)fv3c^J9rY%`gjARvkH06iQV++wg%g%C$q z9)J1y9KqtkZ7E7Ofo=)4Q1{qmuw7>1GLytRJC6nFsx(FpO|j^ZcU%TCVhe|jX#|FxLe+N=N*6! zNkF3Se)qdiKm9Zw8d1^|=p7UXw-iL`_3PK!0{q%*ul>x={ETS!u8&d+FjOwQ{S$3) z;TgTBY7COY*oOn*92d05V2dd=I$x+L8g(3Lc$Ta5F7v;bF+=qj?w@FrhBqc1X*Kd2Uu} zRtYA&ddWFD?ZHNQ&zw1Z_1blgGAg!VgTK+|6(^UWG05m;)yuNvftm$mHTI5^t=0}X z!&xyhTU_adahGH-1Bt{ViUvG=WH~iKXbpOStHmpj#~6WpHg;PJz#lDi0I6-V<)jp& zhbl{AQMTA0=rp4l0u_s%l8yHoxcM+8ok4K#-d%7GV}t(=9SEOXAf6USp^5=C>IvN< zcCn2>A}o{fVuZ+ag_1rX-geIVRKgS|twc48)nBF$lE|&)+g26yLi${cb1mxmNWvbE zfhzv-AODd^(8e2Yydfw<#ozw$1K7U&?6W4@#fumJ`@jENtRVaHm%n`W?AgPI+3^w{ z4lZ4~^f!O=H_&hkrnzw80#N3E{^x(dE&v@9(VASkqASo3tTK1z?Ig1z;2*Pa zod;aBXZRJcv^YD9@K6?7pQ@L;3Q(_l*TLPL{?`bCn+glt{#lDouFdT}gE11`1lm&mD zFpK80QHp^B8^#c0V)TSg%X157ehntIByz!4NI(j~*oq-nDwxZx_!`?EksQ?{qh+#j?_rL%B zqIeiG_RVPA7@xhsBhvyrqkl4Pe#DxFJudurFa)^OSAO(J!{A}|Nl(o|Eybn^b0N&T zRexmXr`*g4CW|JpM2&cB1N$XaiU%%~ND=TiMYMKPz%o>XMjxQeC!d^D#dhXuUt(%3 zYV1tOt8+!E)-uZ$#sN?!VK>ZECr(TrP7&VIK6t9;;zA*dyG9+?qQNdp&=*VZm!Zso z%u^6``&?9q6hbqaceGfML!3K(5-(H1R-BikC+^gJMI6#FI_hp!L9H{PN(8b@mN1?M zKyPs&knge%wt0APS)y#*fUit9c`}+CrOGdFcN&hJE+QV)TDU{k0K>{&mJ(nR=LC6p z83_BblBDETjRpp_>ZqS$pOw*&>W&3LKk|soU^;g2$cdxJc(cKn17&Cgv^Fsw%INTN zoYJDit%Bc0;U}JW;`!&FHx3qf;e{9e^iTgZHtH}*ShNDNu;gSiL;Ui~FY}@kZ!?`b zbxK3WIP3);kQQLJ$K|10S|sB7;xo^@_{`J&;_-~G_c%@-J9hHeaXOmm!!MZXPs8gN zu-b&R?w6=QsbR@Aq6$r-;0|FrXc(KRGf{)rc_vzdo*%_0rAWDN6uTsK464t}Sgz<2 z>f{#BSrXH}#b!rs7HSHb@lQeRjFYLI&wDjKj66Mq)d*IOzkKZ)8j{_FRJ_52vBZ1Y zA6>cX-*F)_K`n4V)CQl`lJFEHM`MUjjx99oS1hFt3Rh#;pDTwZ8|m?A!%B7?$%H_e zUCB!~zJq-QP<{TEF!zmZ!U?f%(M;phPnKSh6FQC%Wwlsd5X%v7 z{ldG`01g}^WM?r5R+^Sy`oejhp8XUxb#Uv}E$H)?uHgX6@p1!MxMhZX^wCFb7A6cs zb_DOOEBRKs?_r+X46@X|3(fm1v*fhnU-7r#hXE598kogr7BMKq25>PWsr*P9QN@0i zU3joYt$Roj%s;N#afPeMsxva`I(?KaocHBR>Ey5`8E!Cf;ETKa7NA5>hHG3a4O;<{B{Pb{iSpB*{*)wb?ES@G{6)@^p%glZ?k6Kj$BrGt&118g z?K1p`XVZ+J42DD%Cvxw1Us`~n5??6_r{xO4nD4D2&s;-jCXk21>a#?nyp@vTXk@87 z&CIA{@-hLLaKIgs4OIxQ8^W-hnzp(9n?y^-!2(Q&oWG^+TtK2Opv=s7J?KGjt@UG% zoDd7j*mjwoT+qly5D?JhY90&vbbb40_Ngt8HX~9x^!-nm(6e<0q*8Q#_!4;|49?eY zEN@Zq6gv>+$+N~43+U@9M-hh4oRPJR4|qKCYZ0R;r;PRFpwbgS7z!v3#shZlM%*Ti z-vaIoOStD~lm^XxFi>LnZ)`8U?i3>Dyu`#z(DcY_6&*GM&PY=$4x1V`v<8oz36tZ; zj&jm}5^1;ZU%JF>LBr;)VKhEKEl>~xaESpr?5QV@zw+F3Af#gJ`RqQ-QW0xO4Dq8! zj{+L4g@!D&{x~q$?NGAK7al^hy)zNE&FCJUc3klLMncAH$UQu0lU2Z`s+XU zb3cd2$d~|nm?r`;ei_RM_5wT90)XAo<1(xkb($GQlpd_fj%=WxSrQ(N`@zW)iz}as zG>c&mF^Iunw5MmMNLtVY(}!eZm0zUX%7M(xF{pnUH)O7P-4i;Z-t_H zI^_%tzD(E7i>}5^qV{Q1ZYq`GO*=Cfa)w~9QEJ%(70T>`{?J zrz8Q;VIxr+v>juDaZHRj(nbdlhEWoA#NhT+629EWGOa-p^N_V3(TvwBG#Lq&{vt-L zBN304m?i4*20c!$@ow>#EXDXxN;ng5F_2ltqPoHN03Z)an@nYAuZt#-GxmR8(e(h*1C;j{3haYmf9S#zlC~6ka%*!vo zEIO?mv5O_m7Vlqr=_LTlzx>O;s0EM^-)cfh3=rq-x8Hv6z4yNIm9OBW5di_#o_Je| z+dU|gG};DlwLCOnmw4(w9ge_z{8K=3wnbeVxU>2DQO%CI+?FSR_^;{j<*)8zD1C)*E}_;23%;KONlo1>t`i{EU{;;|72Tm~GiS9N% zvk`%fTL8AGEuD%>n4d2|&*iy7WOqmY07ORK()8I0JG79blyB85MVQHeyUjs%rOhu^ zpM)vTSVh~Q3E)fdPIVS;u;N^wd+s^>6Yzu&Dh6yG@lrUOF9H|72tBM8(S|QQ^Yly4 zJ)68gNkKqq{&C*_^Jh-iT$(&q{`ki~#&<$leD+9%0x!P#&2QT7U6Rl&yg2=XAN)Yo z1CcV2$a-yyIUvW-a*A?<{ZU>XC2_F8TEW`5^sz%s?Peb%W8JJe8UoFm7qrBIFF(xa3B#fnM=1nJ1 zsAdBugF#$0&%#)$>Dyk2X?Y zDJV0(>QlK(7y}mX%Obv3P2(1j2VLb2xo0tkQ6Ed7gy**69Lqru%;%1|S{CAK+jyCD zbpI&r;xF}#Xl&tqQJUt77i{as4SoDV2jBuA00I9m{*;B~r$diF&W2phj>HIEyRn7d z7YDY)f9~a%i=U=ih!R%c7DooLLWDa6T*8hP027}*0!&0d`N7YB{_{W?+%SLt_kV9V z2AlyIB7tv&FvPj-GGYDbH-6(cKKHrL;dfytFFf(*+Yf-kSDA~z=aJi_~hh$>CB75^6nPGwP{>r2)#ZmfB^HL%;6^lW$YQf z$bZw3K|h44-S=Z;;=L&9yP!Avm`qV^h|N?nrS#Am^xyzxwr|Eyo|OnoaYg%AA{^oj z$^atp=gF~0+N|-`;6FDB^HD@F;)CZ=4l@P|eZ4^;Kltclwk_Ju_grj79mmqNKW>oc zS~&(6Babe5cErddy%oz-AJ`bgrb7`=eY$>c23~N%kJzYl)H6))g}U)5-e+Wd`CGz_ zIbr-HzHu9~6tqdpVN-eUI%v0L5N72ji{dN*ojDa&YJdy88HAbVN5JSgc*C8o6Fm96 zt@qOpKA?!tzxryjY{b$J=ASFsSpdqnv*3W?lZ|vIz~x6j`VsqcH6j6CctKbj!b!tV zrE^H{Z~yjh12QNJ|(}iBni|CJml}bmF{#;Pn@vl^8*Yu;N zVP55AdRj%mF*Vs>!g7dFy1+cNgwm=N;dt&~kRAm7QUJqgRxvy*v0~yMncCUW{Cs^$ zqXm_2P^O)0>0u|a7^?zrp9H1l5i~EC%2DqL|%<2onoK5tI=#Kp1vraf0HkS z(P%sXg9&U~$fjg~56m0xkaY@zGgFM~I!r9DgcOu1ufiB9AdwYhAfchcDwK)X#VdlK zUkb3qcoza{!9s$7QHfnpg-cj#$lX9c(UEhH*RrWg_;=^d>-%0L8=F!1X+;K0U+YVz zJ#X}#jvt`*4?~n9nFDP# zch5=<{nXG>O|}}J8vO?2RkZcs_RROO@v^Wc)emKm9Q-OMv%9Xir8bjE(jC|-U55v{X`19-H^Dww(KhfzjF7yXnO?E@51tV_+> zGB#>SR;9r!Q`mz!7{ z;>---1y>{oh@5%qDFW=R!>?|KRkJ7qn9#BdrX9};8%L}il7N4Xp{@VtDCST?{B_wTR)!7pi$*n*FwjMBB2?B_`k-oHU*xjuXCRO+iGqSAR$a z>+qx2EFKjXi99axVK5U-0d}Djmb$0{@E?4})*PUfm*>$AGd#@WA_UVojKDVqk5Jeo zzEZ@FT=tMLRQM;Ks&uy}-e8#J32~eIOmE8#ST$ChcSkv*#2Nhgw-4@RH(@bcwT(B~Fy*&YVdUC#s+CJU{>R8RdqL;S4PI#~*)8R#uu=g~3TfDsTiJ30{iC zAaUeBCSO~2KtHVMaAoBPBmrkui~jRJ|C0|PsT5o_%o+Max41^|wZL4r#M_3LU=6b+ zQl0(+F}@ini>p5@kny!9TtvVTdL3cTo;@r6cBLSex6CjAUo43*m`OX4A@h5U`HW>! zcgyv#2L^Y`_D%N8Vo11UocC0UK4Ks-v;t}g*oE;{SlI4iwI+=L)@&M1Ft$a~xO1Ys zuYZEYiphTBdKN*~`+J3D)r#@V_XPdu@rKBpz81qYEJC6h{RZRXOH7X$7zI;eI1SlM z76j$^mgOYvKwxIO)3eyicRpQXbqQv>W>znKeC5EI#~Plk)m~_lj^!#4j;3drF_P(V zH5G4?_)#j9leZ#o(&j#!8gZWeA&s%#N2_X_5U{#PAp|JXa%qg@7&A2Vco+Tx5pokt zd_qPH-8OV!$QOQOMBVd7chRdEEPCbh(Ku}K^I%|zFd*5jTQ>WSmW&c5`L`DtUB zfyO&g6lqt#3~5jXH1O72Z(+{amJ6&gV&um!!uvtyWx;u)eY?=GllS+2@AtH|1!u;$ zzx{1(ZMksa0)7`Z@IvF?c7_`}a}CF+6l*c6lPh%mM(RJ3fJ(OfWD*jGPv86C3UdJ$!t`uSKX}^= zCFZO+Vrx>Fc$*E(nmFqhO_giCT#L6t2XsRB4E<>-%K;I@Nj@Yn^o!6nhYPg+sgoS7 zm~P4DIe@L>21~6#b#_r6iNPe-VgEcn;upn7`q~RGu&{;h^N7S4D&Pf!Inc!16~0~& zv!#Iqo!jV1sHTrY+R@NKXnBPfG|2k(wPhlG#B z-gd@ilDJi<2>W$Z9CGqYoM{wlz3%rWn}iB*t_V3i;8;=ufP8KAO7JVQd4c*0Y4%9Yp=cbFya`-jKB)l+F}2`?mo-_=AZ3xIj}!` z;FAXhp7v5wVOiEBa^ttm1g#g$KK^xtGBj6l0&ZN?$S^3MWDcqz0YvX; z!Q)LEatv0#B+OQvJIM^{&%W!Fp*841gED*sv0nz3;QNW8G*=wO?Xumf$?2UFGzC8> zHN|RK@^}!579)7J^<8iAZFuqaJMX>r(hJP!oHH>D%i;@7Vh(41jAydffJ@Gn3VL4w z{>36{k-15-Q&fLJN!|zHcI@K2YH&Z_d&HCC9iU9O5j3r2m1+0trsj~uapHM|1s&%L z@<}{xaNgpjPZndi*p< z%O|GIsRIYL$kf_qc8%*FBUcfe<|F?eNIH!s&>~?g+9_ zFEsPGRl)Okpu>m_0<&I5R%+39y=a`MRtj^qTZ1wa%frmBq!`}YC^l81FOnW&uwsJ| zT6sCj1$vEOV#3bc2w50>>~dkV3&Z90mtM>#7@KyPepk1)PRAqcijn{$fE`$R_@6y{ z7LyDaww$FFZ~pP70B*kawXXqI#0QTEs6|kQ7?2I`Lcj6G8#Elk|JQ&07cVdqfGzuc z$%UWe>8GD&vkU7ucsuaE@Lm#72}cOn#rVL=muu(*0%S-$A^=~ z3`HPJuwJDfOINh^KmF4`ktOLt$azcr+_`gK{NfjjpUyUZ)?XI$Km}Ml9z8C@YEh@R zTsw26%~9wFA3MMnU3wXNX%%G35vGN?^3o_zc%yzalAs(Jv49&*uth=)3F`>rLzzsF zgm~rKIJ3ge5{jTk+9)&keQbC9>u!2w%9W-@G&S9#1~;Pkn6a}*%LrXri5m>$z(oVh z7r_S)8I6izVEd%WFfZ|vh0TAHltw_OU%4IzIS&B2rZuu14KQ)&ZmzXbNL5l}`iO=r zwBAvn7G_@5m>1*GDwjUKtP?tl1ibu(wel}CNq{2p+{oIVr&{&%C#bn47U`wX8vRnt z)fq{TWK(+>_Bn?{5>#}uCE1`%`6xN#7y*af4FP(t*s^hJQhJ0oJ5KlsSb!U}%LLtj z>&|W7g2VQ(B}4{8+)o}q{<&9P=H#NZ)bXC#jss-83m;7cLx3bO*cfKaKl^a)Wg=Ed zSm*(8uwVp@7M~p@R{5?2|v@%5z)CJcOfCd^Z}NHXb^ln zS_PAb27HDCiLEoXgV<+zki%LY8nDaE!~PjFJhleRv2TAk5o=J7p}IU2#_y*dPG*-i zMZk-rC&nTbXgg*YGfdjzOiB2xcFQ!>b0?)B33A$YnH64vkqmf1ciMqum8E5nKeuAU zgJb9{uNKHf9cwm&7C?y@XA86)KSs9kKoPh^Lz@@HdPMMNYn<@bgMPE2%;CeAc@JO? zl;KNESK{}dJ0AdY(Kiy)m>?)Ur4nE+Q5*w6V?YSUKip&Uic^>|#zBB#gp~G@7puT$ zvDq

    }d53R$geL(XDt{#lDcsS&G#JAr0$#9(6VL_l3r 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 A_y7O^ diff --git a/platform/ios/resources/Base.lproj/Localizable.strings b/platform/ios/resources/Base.lproj/Localizable.strings deleted file mode 100644 index e1bfc0b256d..00000000000 --- a/platform/ios/resources/Base.lproj/Localizable.strings +++ /dev/null @@ -1,111 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Shows more info"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Cancel"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Returns to the map"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Rotates the map to face due north"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Compass"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "N"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "To display a Mapbox-hosted map here, set %1$@ to your access token in %2$@\n\nFor detailed instructions, see:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "docs.mapbox.com/help/tutorials/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Shows credits, a feedback form, and more"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "About this map"; - -/* List separator */ -"LIST_SEPARATOR" = ", "; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "The map failed to load because an unknown error occurred."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "The map failed to load because the style can't be loaded."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Map"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld annotation(s) visible."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "Places visible: %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld road(s) visible."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "Zoom %dx."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "The map failed to load because the style is corrupted."; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ to %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "Divided road"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "One way"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "Route %@"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK for iOS version %@ is now available:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "The map failed to load because the style can’t be found or is incompatible."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "You can help make OpenStreetMap and Mapbox maps better by contributing anonymous usage data."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Don’t Participate"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Participate"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "You are helping to make OpenStreetMap and Mapbox maps better by contributing anonymous usage data."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Stop Participating"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Keep Participating"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Tell Me More"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Mapbox Telemetry"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Make Mapbox Maps Better"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "You Are Here"; - diff --git a/platform/ios/resources/Images.xcassets/Compass.imageset/Contents.json b/platform/ios/resources/Images.xcassets/Compass.imageset/Contents.json deleted file mode 100644 index 6065a93b4ee..00000000000 --- a/platform/ios/resources/Images.xcassets/Compass.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "compass.pdf" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/ios/resources/Images.xcassets/Compass.imageset/compass.pdf b/platform/ios/resources/Images.xcassets/Compass.imageset/compass.pdf deleted file mode 100644 index 2048f9608994805313abf62586008828b3786e60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4574 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 diff --git a/platform/ios/resources/Images.xcassets/mapbox_helmet.imageset/Contents.json b/platform/ios/resources/Images.xcassets/mapbox_helmet.imageset/Contents.json deleted file mode 100644 index 86d3b9b1691..00000000000 --- a/platform/ios/resources/Images.xcassets/mapbox_helmet.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "mapbox_helmet.pdf" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/ios/resources/Images.xcassets/mapbox_helmet.imageset/mapbox_helmet.pdf b/platform/ios/resources/Images.xcassets/mapbox_helmet.imageset/mapbox_helmet.pdf deleted file mode 100644 index 699b2ff293210ed88bed2831ab8ba713e83acfac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65112 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≻WZmp({3kFZOUw1M+DL{9$u2wgm*v8=s3);U4ahIE9sM zF&#wu#RJ&Ct5-iN^w||&48jc(g>Puls2UcuTV#vMa5is>4tRDL^XnP-m-wCUo>oAB zV`~gloZ;n(kq4S8(VYWb9T9TfhlxPoK>w|$9?;o` zJi;AwMxV`r7rN8(fa!L$O8zW*2_!C0cpq^2TsIg*RjR;TGHJcT*Wc|oo))L<0u5{Da`QBp7E0c`>FJLG9BQw6DrAR9 z%@P>U_qmViSM)nBbo&OesA7)Vtz%Hn>C%CGs#mHi5e=B{x@bYw(M}F8nM#iJ zbEm?j+n_c6ns|S;GduD^EEP<>^Oc9`hA$|PNGVs3a1-4N{#+h=Xz;ymYk#6$c8|IU z`HKsr&|^!-c~W5$>pJt*n%@*ZIG$QSx_}m%$q&pjRIMNO+XfdqZ0@poL+&;BB!}Yg zbL4c(F$+w=(a=W6=O_bQ#B!Cr4%~{%l#}>tVM3S8PHe%UDw-$LA-&WQl7?6j;vTW~ z-Z?uwHYIL)a7P78&mHGekiht+nAZ3XG)99qlX@#gf`(C4s;hHVKMUZz?MRl2pIx+fh%3p@f2JthoZgeuu#O2T7R0n4jGlhQE z)X`TMvThc5N*Q*Etz0CKZyf>uIW|Zbzkm~mxbCX`8h^1Bb#5g$} z{98Z+qu=#7Tyy7ROH1I0&Mdtp{!5M199e;7K@#$`C+6M)qR{9S=DOK6PpgN+=OH!n z5w%kAMsW*si!4W*VQ~Jd91lgF)0L9=`ywIH!}{#g!^e{TnO&tx3{Qk~7rI&SSVRA_ zuRq`G8n81f+i>^mR?Y$``OHM}=$FeU-y*6?L^@btEc1T)FV%WU5}o)s)_G7}au^-uVX=nkHYUsb0#TFp4#tm=!k{ zD72c?!2*eM8G+Mca|{3;!Y`D#&rzxV!5`@ySWnHIEm(#2XSutI6Le|rbXz-GK9Q(m zP&*IeHaU-)H!@~2=#0cWU^4={&|CQ91=6_Lgj7O^A%0-RQ^}eY6>%5zy^;`;?t)? zbKwJMSuuf$jU#DiJ`O& z3toKv;^a?u^Bt+P{tUVY92=_hru_Whl@xuvd1J{THQ#%%lbpg%4|ktL=VT*=96|_y zj|5rFE)++;1@-XRvOKVk@V@Q~F83fLO5gURf6ev^ckSo-E|YlU55C;KiC5WYmfA(& ztZ0WTf}@~mMd(K#v*z#-^~@tj4jM7;OpPT8SD5WtKx>gs@*YTzqmo~hFIdk&JTW|^ zlctQB_|8KY9pDKUwxnlpKqfJe;SCeLkRAuX`E4>6W4LhLoP(3`=^d0E-4Jy|GQ)dp zmxn4qUcsO*+pc>U8`VM|mhA8JC zX5rTIwq}v32=Sn30VgpiW_w95U|s4_gDAQVZRD)5@D)P68a$FjoRLHY@;g)v)R|V; z#mMcqci;9q$%zPI<|Wq?KriwzL~Jxi<|D;OoIAdKEIgA(8s69qgSM-7-D@^dK;6#b z(;wyPPyd)0@$(kaCCWg8VugmGH28vSs8i#+y!*fl)WRI^rW-ji?_@tIX1F)Z0(@E} z;}^^w6P4|t#i3*VNxFr1r3yh4*HwlPAZi0dO3c+oK=)STL zN^SRwfHe`r;A7&6-H$EPk%AqszlN0fuUaw3pp(Mtz6%LZQL9Reug~aLLZX{D!9b-& z+1C`bzT?HRh~WMO=(`i9c!8p4iN(h%jmJgLQc>|;DFZ`^A;s)ckFKJ>O1}$lyKIIg zf%)u2ABX<7pF2kdt6yhBLWtr+OyqFtHMV?QJ0=_`G?n*SuH>5GA}Dd;lIB9AlNsjr zqYg+E9a)Fm$n_Z<846LWbW{UR-UbQ*)WVDCvX7Hp9g{=Y9+7uZ|F%bPqgo09$jnxd z4c#6p_aQ-PQag4gg$gST?~yxctI;{;bq?BvL80~tmao2|z-!S$FVGGkL1GFnZ!uWF zQr3PSgQPsU;$I12`$~v?aEQjR$p{-lEP15m5Pd78d}gkZ zQs2wEl18e~@TA3+k`r=}1vT_C$S^;qq~Y76Xn?FrNl^2uyMpTen6nS*doS0&e(i}e zgV$L?M`9N_@|p$3+nvF%8{t^D;R#kRbZtE*gdN?I>Vo^=e==}z71s~j znpR~p>Pz~m+NPk!lK^QJS1zbjeeU;CWEnIj-?wqy8g6x6#}2|*2(tD@ypNVi-;VtU zc@Lfhgyo~3v5F5aJ_bIS_qIk>3Wg2^IGMUW&?QCIkha#mYRvuN~tWZLt`oqw>x7=-1lWJ;4Xr!7<4a5W%L$sg&Bu3ql*jNOM}(Msn-g%PypC zww#*C&mj-H{TK2XCxiBaBWuvWG6a>US?{dkU(Q-FsHcKT)vFUwJf)eVy_Gn>x>k*; z6`l;go*UZMMK)qiG`NwRP4Z!Dbkd`j8*0U_vZxz%uV8UT9lQ&q3%bAbyyGc188I-b?4vih$2H zXW3Tj1bb`I(f7WO1&Q`YU+!>-Tj{&cj__sB5yxIkSNsae8}wTW9lQ~ZETruQk%$H? ztVp9DzdLyqus!T=sF-$W8`Mf6S2qw^E_o}dysaqBq8)9>ppMagHkLh;=tNBOz+*Yo%*{?cy55x!GUpo@zSP zdad7~=6%au@gWDT`t-CVZY^Iz*T%8&9oONMNfOcidY39Ye6lwD>;i)%-Q~O4BXq(i z+km1}e}@-j_OdNM+ChpG8?k_67UsT*h#U@mzAEu=PLG6~jb|<)VbvIxQyy*?@KG$0 zmxi%*+EU8{x?7o+12&8XS3H&`y(s>Rbk$9pIt2KP%!Q_c{FR@ZJ{SE;VJvQ*9Z<{* z1WcS^MiW{TTEG{)a3JWpy*?QS~`X!j`oe~pNy-C5^Y%cUn$>jLjOnAp)wtLZVkXu*G zp_nKlG*zFO)W*ERAuQ-8T;IvZV`)0=Wk$r}6A)5buDcFq)``02PhuJN^6;#g1kt)w zMC23|!pd~G0(2RV3kYhJGIA@}NnXNTy(*~gwegP0h3*3R-?2)w@S{+%iU2C+3=v6* zcle<&^n;xU6nLU1g}*5S5M$04SXz;J`tow!+5?S

  1. p5;k1 z_f^11;q9;Rk7l3Q?ml=I5=F&a6Lr@Reb3KCVnq2UiFmv&5Qj}g%76oe{7h!8S||sM zb@}RF3edKr!Anhwmn%<1lpBPOtqEj-ilj=%(jgFm*EkCKsw}wblFDRZlcm``sn*kb zs))Q>5Djy_0{oeHF;M{*cmc^prywnQQz%C*3elLEM>k}}CBau15tWPvu&IRioBtNw z6%8tGb&eKS`{E&6H#GT#us10E_UUB}GK6fydNCJ zSJ!s9Fua*LS``@?Z_}ey>p5iblgZfGxx2c#{JBrY24s2TRdY9S`$H|_ z;^yh-Vk`Jo{sIND|2L=}2=vFBf3tD${Ef}p(c$g*Q*%0TUN!)b3kU>q0(dxp96)9O zH!T1_OaFiHLQIV8j}4hVor1BcwS$|ZtCc=IJ*$GF+20U>0027&+h2(P(@QTGa|=`e z87BZ0@K<3ccU^41^RfA0@Y5C@R$|B=|U0oXx* z9|v##@%&x(Hg!1OK0y3a{ykoRT%do9T{ZwW*I%*vYdo_7IN9Fj>wnm?0l3)z!NL7@ z-2313fZSZ5f6N6QHuitYxc+2<|KND@?;o)Ta&dtEK9AmH-2e0s#Pya7{{!zW8G!yC z12zB%_;+4502{~O`>nfC2k zT#sLbhl7iq4agw^;^JYK5ar~N5EtW+WE0_$?*R diff --git a/platform/ios/resources/README b/platform/ios/resources/README deleted file mode 100644 index 34dedaeb0c7..00000000000 --- a/platform/ios/resources/README +++ /dev/null @@ -1,5 +0,0 @@ -When adding new image resources, make sure that you've reduced the file size as much as possible using a tool such as: - -ImageOptim — https://imageoptim.com - -See also: https://github.com/mapbox/mapbox-gl-native/pull/2227 \ No newline at end of file diff --git a/platform/ios/resources/ar.lproj/Localizable.stringsdict b/platform/ios/resources/ar.lproj/Localizable.stringsdict deleted file mode 100644 index 9cbc2c2d7a2..00000000000 --- a/platform/ios/resources/ar.lproj/Localizable.stringsdict +++ /dev/null @@ -1,78 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - zero - لا ملاحظات ظاهرة - one - ملاحظة واحدة ظاهرة - two - ملاحظتان ظاهرتان - few - %d ملاحظات ظاهرة - many - %d ملاحظة ظاهرة - other - %d ملاحظة ظاهرة - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - zero - لا طرق ظاهرة - one - طريق واحد ظاهر - two - طريقان ظاهران - few - %d طرق ظاهرة - many - %d طريقا ظاهرا - other - %d طريق ظاهر - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - zero - لا تكبير - one - %dx تكبير - two - %dx تكبير - few - %dx تكبير - many - %dx تكبير - other - %dx تكبير - - - - diff --git a/platform/ios/resources/bg.lproj/Localizable.strings b/platform/ios/resources/bg.lproj/Localizable.strings deleted file mode 100644 index 9b77111d302..00000000000 --- a/platform/ios/resources/bg.lproj/Localizable.strings +++ /dev/null @@ -1,114 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Показва повече инфо"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "Незавършена сесия от данни. Оригинална заявка:%@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "Статус код %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Отказ"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Обратно към картата"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Завърта картата в посока север"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Компас"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "С"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "За да покажеш Mapbox-хоствана карта тук, задай %1$@ към своя токен за достъп в %2$@\nЗа повече детайли, виж:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Показва благодарности, форма за обратна връзка и още"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "За тази карта"; - -/* List separator */ -"LIST_SEPARATOR" = ","; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Картата не се зареди поради неизвестна грешка."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Картата не се зареди поради незареждане на стила."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Карта"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld видима анотация(и)."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "Видими места: %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld видим път(я)."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "Мащаб %dx."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Картата не се зареди поради повреден стил."; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "Разделен път"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "Еднопосочно"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "Маршрут %@"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK за iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK за iOS версия %@ е вече налична:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Картата не се зареди поради неоткрит или несъвместим стил."; - -/* Telemetry prompt message */ -/* OpenStreetMap full name attribution */ - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Не участвам"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Участвам"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Ти помагаш OpenStreetMap и Mapbox картите да стават по-добри, като предоставяш анонимни данни за употреба."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Спирам участие"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Продължавам да участвам"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Покажи ми още"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Mapbox телеметрия"; - -/* Telemetry prompt title */ -"OSM_FULL_NAME" = "OpenStreetMap"; - -/* OpenStreetMap short name attribution */ -"OSM_SHORT_NAME" = "OSM"; - diff --git a/platform/ios/resources/bg.lproj/Localizable.stringsdict b/platform/ios/resources/bg.lproj/Localizable.stringsdict deleted file mode 100644 index 8f2afce0342..00000000000 --- a/platform/ios/resources/bg.lproj/Localizable.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d видими анотации - other - %d видими анотации - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d път видимост - other - %d пътища видимост - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Мащаб %dx - other - Мащаб %dx - - - - diff --git a/platform/ios/resources/ca.lproj/Localizable.strings b/platform/ios/resources/ca.lproj/Localizable.strings deleted file mode 100644 index 41996b191ff..00000000000 --- a/platform/ios/resources/ca.lproj/Localizable.strings +++ /dev/null @@ -1,93 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Mostra més informació"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "La tasca de dades de la sessió ha fallat. La petició original era: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "El codi d’estat era %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Cancel·lar"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Torna al mapa"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Orienta el mapa amb rumb nord"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Brúixola"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "N"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "Per mostrar aquí un mapa allotjat a Mapbox posa %1$@ al teu token d’accés a %2$@\n\nPer obtenir instruccions detallades, consulteu:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Mostra els crèdits, el formulari de contacte i més"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Sobre aquest mapa"; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "El mapa no s’ha carregat a causa d’un error desconegut."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "El mapa no s’ha carregat perquè l’estil no es pot carregar."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Mapa"; - -/* Map accessibility value */ -"MAP_A11Y_VALUE" = "Zoom %1$dx\n%2$ld anotació (ns) visibles"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "El mapa no s’ha carregat perquè s’ha corromput l’estil."; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "La versió %@ del Mapbox Maps SDK for iOS està disponible:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "El mapa no s’ha carregat perquè no es troba l’estil o bé és incompatible."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Pots ajudar a millorar els mapes d’OpenStreetMap i de Mapbox aportant dades d’ús anònimes."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "No vull participar"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Participar"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Estàs ajudant a millorar els mapes d’OpenStreetMap i de Mapbox aportant dades d’ús anònimes."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Aturar la participació"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Continuar la participació"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Vull saber-ne més"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Telemetria de Mapbox"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Millora els mapes de Mapbox"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Ets aquí"; - diff --git a/platform/ios/resources/ca.lproj/Localizable.stringsdict b/platform/ios/resources/ca.lproj/Localizable.stringsdict deleted file mode 100644 index 45d4842ff62..00000000000 --- a/platform/ios/resources/ca.lproj/Localizable.stringsdict +++ /dev/null @@ -1,34 +0,0 @@ - - - - - MAP_A11Y_VALUE - - NSStringLocalizedFormatKey - %#@level@ -%#@count@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Zoom %dx - other - Zoom %dx - - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d anotació visible - other - %d anotacions visibles - - - - diff --git a/platform/ios/resources/cs.lproj/Localizable.strings b/platform/ios/resources/cs.lproj/Localizable.strings deleted file mode 100644 index 587e67a0549..00000000000 --- a/platform/ios/resources/cs.lproj/Localizable.strings +++ /dev/null @@ -1,111 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Shows more info"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Cancel"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Returns to the map"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Rotates the map to face due north"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Compass"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "N"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "To display a Mapbox-hosted map here, set %1$@ to your access token in %2$@\n\nFor detailed instructions, see:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Shows credits, a feedback form, and more"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "About this map"; - -/* List separator */ -"LIST_SEPARATOR" = ", "; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "The map failed to load because an unknown error occurred."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "The map failed to load because the style can't be loaded."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Map"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld annotation(s) visible."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "Places visible: %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld road(s) visible."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "Zoom %dx."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "The map failed to load because the style is corrupted."; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ to %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "Divided road"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "One way"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "Route %@"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK for iOS version %@ is now available:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "The map failed to load because the style can’t be found or is incompatible."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "You can help make OpenStreetMap and Mapbox maps better by contributing anonymous usage data."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Don’t Participate"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Participate"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "You are helping to make OpenStreetMap and Mapbox maps better by contributing anonymous usage data."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Stop Participating"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Keep Participating"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Tell Me More"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Mapbox Telemetry"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Make Mapbox Maps Better"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "You Are Here"; - diff --git a/platform/ios/resources/cs.lproj/Localizable.stringsdict b/platform/ios/resources/cs.lproj/Localizable.stringsdict deleted file mode 100644 index 435b7bdfe8f..00000000000 --- a/platform/ios/resources/cs.lproj/Localizable.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d annotation visible - other - %d annotations visible - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d road visible - other - %d roads visible - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Zoom %dx - other - Zoom %dx - - - - diff --git a/platform/ios/resources/da.lproj/Localizable.strings b/platform/ios/resources/da.lproj/Localizable.strings deleted file mode 100644 index f1af0c39db8..00000000000 --- a/platform/ios/resources/da.lproj/Localizable.strings +++ /dev/null @@ -1,117 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Vis mere info"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "Denne session kunne ikke gennemføres pga. data fejl. Den oprindelige forespørgsel var: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "Status koden var %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Fortryd"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Retur til kortet"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Fast nord"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Kompas"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "N"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "For at vise et Mapbox-hosted kort her, angiv %1$@ til din access token i %2$@\n\nFor yderligere instruktion se:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Vis credits, feedback formular med mere"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Om kortet"; - -/* List separator */ -"LIST_SEPARATOR" = ", "; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Kortet kunne ikke hentes på grund af en ukendt fejl"; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Kortet kunne ikke hentes på grund af en fejl i kort formatteringen"; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Kort"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld synlige kommentarer."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "Synlige steder: %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld synlige veje."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "Zoom %dx."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Kortet kunne ikke hentes på grund af en fejl"; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ til %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "Delt vej"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "Ensrettet"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "Rute %@"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK for iOS version %@ er nu tilgængelig:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Kortet kunne ikke hentes fordi det enten ikke findes, eller ikke er kompatibelt."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Du kan hjælpe med at gøre OpenStreetMap og Mapbox kort bedre ved at bidrage med annonyme bruger data."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Deltag ikke"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Deltag"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Du hjælper med at gøre OpenStreetMap og Mapbox kort bedre ved at bidrage med annonyme bruger data."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Stop deltagelse"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Fortsæt deltagelse"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Fortæl mig mere"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Mapbox Telemetry"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Gør Mapbox kort bedre"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Du er her"; - diff --git a/platform/ios/resources/da.lproj/Localizable.stringsdict b/platform/ios/resources/da.lproj/Localizable.stringsdict deleted file mode 100644 index 296b8c88dd1..00000000000 --- a/platform/ios/resources/da.lproj/Localizable.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %ld synlig kommentar - other - %ld synlige kommentarer - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %ld synlig vej - other - %ld synlige veje - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Zoom %dx - other - Zoom %dx. - - - - diff --git a/platform/ios/resources/de.lproj/Localizable.strings b/platform/ios/resources/de.lproj/Localizable.strings deleted file mode 100644 index c340a787704..00000000000 --- a/platform/ios/resources/de.lproj/Localizable.strings +++ /dev/null @@ -1,93 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Mehr Infos anzeigen"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "Der Data-Task der Sitzung ist fehlgeschlagen. Die ursprüngliche Anfrage war: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "Der Statuscode ist %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Abbrechen"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Zurück zur Karte "; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Dreht die Karte nach Norden"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Kompass"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "N"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "Um hier eine von Mapbox-Karte anzuzeigen, muss das Zugriffs-Token als %1$@ in %2$@ eingetragen werden.\n\nFür detaillierte Informationen, siehe:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Zeigt Danksagunen, ein Kontakformular und mehr an"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Über diese Karte"; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Die Karte konnte nicht geladen werden, da ein unbekannter Fehler aufgetreten ist."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Die Karte konnte nicht geladen werden, da diese Form nicht geladen werden kann"; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Karte"; - -/* Map accessibility value */ -"MAP_A11Y_VALUE" = "Zoomstufe %1$d\n%2$ld Anmerkung(en) sichtbar"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Die Karte konnte nicht geladen werden, da diese Form beschädigt ist."; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK for iOS Version %@ ist ab sofort verfügbar."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Die Karte konnte nicht geladen werden, da diese Form nicht gefunden werden kann oder nicht kompatibel ist."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Durch anonymisierte Nutzungsdaten können Sie helfen, OpenStreetMap- und Mapbox-Karten zu verbessern."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Nicht teilnehmen"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Teilnehmen"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Durch anonymisierte Nutzungsdaten helfen Sie, OpenStreetMap- und Mapbox-Karten zu verbessern."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Teilnahme beenden"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Weiterhin teilnehmen"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Mehr Informationen"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Mapbox-Telemetrie"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Mapbox-Karten verbessern"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Sie sind hier"; - diff --git a/platform/ios/resources/de.lproj/Localizable.stringsdict b/platform/ios/resources/de.lproj/Localizable.stringsdict deleted file mode 100644 index 7d334c77f8c..00000000000 --- a/platform/ios/resources/de.lproj/Localizable.stringsdict +++ /dev/null @@ -1,34 +0,0 @@ - - - - - MAP_A11Y_VALUE - - NSStringLocalizedFormatKey - %#@level@ -%#@count@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Zoomstufe %d - other - Zoomstufe %d - - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d Anmerkung sichtbar - other - %d Anmerkungen sichtbar - - - - diff --git a/platform/ios/resources/en.lproj/Localizable.stringsdict b/platform/ios/resources/en.lproj/Localizable.stringsdict deleted file mode 100644 index 435b7bdfe8f..00000000000 --- a/platform/ios/resources/en.lproj/Localizable.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d annotation visible - other - %d annotations visible - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d road visible - other - %d roads visible - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Zoom %dx - other - Zoom %dx - - - - diff --git a/platform/ios/resources/es.lproj/Localizable.strings b/platform/ios/resources/es.lproj/Localizable.strings deleted file mode 100644 index b2da706d8ce..00000000000 --- a/platform/ios/resources/es.lproj/Localizable.strings +++ /dev/null @@ -1,117 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Muestra más información"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "Error en la tarea de datos de sesión. La solicitud original fue: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "El código de estado fue %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Cancelar"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Regresa al mapa"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Gira el mapa para hacer frente al norte"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Brújula"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "N"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "Para mostrar un mapa alojado en Mapbox aquí, establezca %1$@ con su token de acceso en %2$@\n\nPara obtener instrucciones detalladas, consulte:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Muestra créditos, un formulario de comentarios y más"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Acerca de este mapa"; - -/* List separator */ -"LIST_SEPARATOR" = ", "; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "No se pudo cargar el mapa debido a un error desconocido."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "No se pudo cargar el mapa debido a un error de carga en el estilo."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Mapa"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld anotacion(es) visible(s)."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "Lugares visibles: %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld camino(s) visible(s)."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "Zoom %dx."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "No se pudo cargar el mapa debido a que el estilo está dañado."; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ a %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "Vía de doble carril"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "Unidireccional"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "Ruta %@"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK para iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "La versión %@ de Mapbox Maps SDK para iOS está disponible:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "No se pudo cargar el mapa debido a que no se encuentra el estilo o está incompleto."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Ayudas a mejorar los mapas de OpenStreetMap y Mapbox al aportar datos de uso anónimos."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "No participar"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Participar"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Ayudas a mejorar los mapas de OpenStreetMap y Mapbox al aportar datos de uso anónimos."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Dejar de participar"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Seguir participando"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Cuéntame más"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Telemetría Mapbox"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Mejorar los mapas de Mapbox"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Usted está aquí"; - diff --git a/platform/ios/resources/es.lproj/Localizable.stringsdict b/platform/ios/resources/es.lproj/Localizable.stringsdict deleted file mode 100644 index 91a49b067fe..00000000000 --- a/platform/ios/resources/es.lproj/Localizable.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d anotación visible - other - %d anotaciones visibles - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d camino visible - other - %d caminos visibles - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Zoom %dx - other - Zoom %dx - - - - diff --git a/platform/ios/resources/fr.lproj/Localizable.strings b/platform/ios/resources/fr.lproj/Localizable.strings deleted file mode 100644 index 17a0240517d..00000000000 --- a/platform/ios/resources/fr.lproj/Localizable.strings +++ /dev/null @@ -1,111 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Afficher plus d’informations"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Annuler"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Retourne à la carte"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Réoriente la carte vers le nord"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Compas"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "N"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "Pour afficher ici une carte hébergée par Mapbox, indiquez %1$@ à votre jeton d’accès dans %2$@\n\nPour des instructions détaillées, voyez :"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Affiche les crédits d’auteurs, un formulaire de retour d’avis et plus encore"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "À propos de cette carte"; - -/* List separator */ -"LIST_SEPARATOR" = ";"; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Le chargement de la carte a échoué car une erreur inconnue est survenue."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Le chargement de la carte a échoué car le style n’a pas pu être chargé."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Carte"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld annotation(s) visible(s)."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "Lieux visibles : %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld route(s) visible(s)."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "Zoom %d×."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Le chargement de la carte a échoué car le style est corrompu."; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ à %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "Route à chaussées séparées"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "Route en sens unique"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "Route %@"; - -/* Action sheet title */ -"SDK_NAME" = "SDK Mapbox Maps pour iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Le SDK Mapbox Maps pour iOS en version %@ est maintenant disponible :"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Le chargement de la carte a échoué car le style n’a pas été trouvé ou est incompatible."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Vous pouvez aider à améliorer OpenStreetMap et Mapbox en contribuant des données anonymes d’utilisation."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Ne pas participer"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Participer"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Vous aidez à améliorer OpenStreetMap et Mapbox en contribuant des données anonymes d’utilisation."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Arrêter de participer"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Continuer à participer"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Dites m’en plus"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Télémétrie Mapbox"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Améliorez les cartes Mapbox"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Vous êtes ici"; - diff --git a/platform/ios/resources/fr.lproj/Localizable.stringsdict b/platform/ios/resources/fr.lproj/Localizable.stringsdict deleted file mode 100644 index 12dde71a38c..00000000000 --- a/platform/ios/resources/fr.lproj/Localizable.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d annotation visible - other - %d annotations visibles - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d route visible - other - %d routes visibles - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Zoom %d× - other - Zoom %d× - - - - diff --git a/platform/ios/resources/gl.lproj/Localizable.strings b/platform/ios/resources/gl.lproj/Localizable.strings deleted file mode 100644 index 083423d4348..00000000000 --- a/platform/ios/resources/gl.lproj/Localizable.strings +++ /dev/null @@ -1,111 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Amosa máis información"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Desbotar"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Voltar ó mapa"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Xira o mapa para pórse cara o norte"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Compás"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "N"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "Para amosar un mapa aloxado no Mapbox aquí, estabelece %1$@ co teu 'token' de acceso en %2$@\n\nPara obter instrucións detalladas, olla:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Amosa os cretos, un formulario de opinións e máis"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Acerca deste mapa"; - -/* List separator */ -"LIST_SEPARATOR" = ", "; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Non se puido cargar o mapa por mor dun error descoñecido."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Non se puido cargar o mapa por mor dun erro de carga no estilo."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Mapa"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld anotación(s) visíbel(s)."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "Lugares visíbeis: %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld estrada(s) visíbel(s)."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "Achegamento %dx."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Non se puido cargar o mapa por mor de que o estilo está danado."; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ a %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "Estrada de duplo carril"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "Un só sentido"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "Rota %@"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK para o iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "A versión %@ do Mapbox Maps SDK para o iOS está dispoñíbel:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Non se puido cargar o mapa por mor de que non se atopa o estilo ou non está completo."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Axudas a mellorar os mapas do OpenStreetMap e o Mapbox ó contribuír con datos de emprego anónimos."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Non participar"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Participar"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Axudas a mellorar os mapas do OpenStreetMap e o Mapbox ó contribuír con datos de emprego anónimos."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Deixar de participar"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Seguir participando"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Cóntame máis"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Telemetría do Mapbox"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Mellorar os mapas do Mapbox"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Ti estás aquí"; - diff --git a/platform/ios/resources/gl.lproj/Localizable.stringsdict b/platform/ios/resources/gl.lproj/Localizable.stringsdict deleted file mode 100644 index 859f8424d9a..00000000000 --- a/platform/ios/resources/gl.lproj/Localizable.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d anotación visíbel - other - %d anotacións visíbeis - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d estrada visíbel - other - %d estradas visíbeis - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Achegamento %dx - other - Achegamento %dx - - - - diff --git a/platform/ios/resources/he.lproj/Localizable.strings b/platform/ios/resources/he.lproj/Localizable.strings deleted file mode 100644 index 2e4c9a17fbb..00000000000 --- a/platform/ios/resources/he.lproj/Localizable.strings +++ /dev/null @@ -1,117 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "מציג מידע נוסף"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "המידע של המשימה נכשל, הבקשה המקורית הייתה: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "סטטוס הקוד היה %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "ביטול"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "חזרה אל המפה"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "קיבוע המפה לצד צפון"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "מצפן"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "צ"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "בכדי להציג את המפות המאוכסנות של Mapbox כאן, הגדר %1$@ את אסימון הגישה ב %2$@\n\nלהוראות מפורטות, ראה:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "מציג קרדיטים, טופס משוב ועוד"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "אודות המפה"; - -/* List separator */ -"LIST_SEPARATOR" = ", "; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "טעינת המפה נכשלה עכב שגיאה לא ידועה."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "טעינת המפה נכשלה - לא ניתן לטעון את הסגנון."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "מפה"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld נקודה(ות) ציון מוצגות."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "מקומות מוצגים: %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld דרך(ים) מוצגות."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "זום x%d."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "טעינת המפה נכשלה - הסגנון פגום."; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ אל %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "דרך מחולקת"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "חד סטרי"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "כביש %@"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK for iOS version %@ is now available:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "טעינת המפה נכשלה - לא ניתן למצוא את הסגנון או שהסגנון אינו תואם."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "אתם מסייעים לשפר את המפות של OpenStreetMap ו Mapbox באמצעות שיתוף אנונימי של נתוני השימוש."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "אל תשתף"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "שתף"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "אתם מסייעים לשפר את המפות של OpenStreetMap ו Mapbox באמצעות שיתוף אנונימי של נתוני השימוש."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "הפסק שיתוף"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "המשך לשתף"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "ספר לי עוד"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Mapbox Telemetry"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "הפוך את המפות של Mapbox לטובות יותר"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "אתה נמצא כאן"; - diff --git a/platform/ios/resources/hu.lproj/Localizable.strings b/platform/ios/resources/hu.lproj/Localizable.strings deleted file mode 100644 index bac747b4a2c..00000000000 --- a/platform/ios/resources/hu.lproj/Localizable.strings +++ /dev/null @@ -1,93 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Több infót mutat"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "The session data task failed. Original request was: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "A státuszkód %ld volt"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Mégse"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Visszatér a térképhez"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Elforgatja a térképet, hogy észak felé nézzen"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Iránytű"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "É"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "To display a Mapbox-hosted map here, set %1$@ to your access token in %2$@\n\nFor detailed instructions, see:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Shows credits, a feedback form, and more"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Erről a térképről"; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Nem sikerült betölteni a térképet, mert ismeretlen hiba történt."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Nem sikerült betölteni a térképet, mert a stílust nem lehetett betölteni."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Térkép"; - -/* Map accessibility value */ -"MAP_A11Y_VALUE" = "Zoom %1$dx\n%2$ld annotation(s) visible"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Nem sikerült betölteni a térképet, mert a stílus sérült."; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK for iOS %@ mostantól elérhető:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Nem sikerült betölteni a térképet, mert a stílus nem található vagy inkompatibilis."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "You can help make OpenStreetMap and Mapbox maps better by contributing anonymous usage data."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Nem veszek részt"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Részt veszek"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "You are helping to make OpenStreetMap and Mapbox maps better by contributing anonymous usage data."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Részvétel befejezése"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Részvétel folytatása"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Többet akarok tudni"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Mapbox telemetria"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Tedd jobbá a Mapbox térképeket"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Itt vagy"; - diff --git a/platform/ios/resources/hu.lproj/Localizable.stringsdict b/platform/ios/resources/hu.lproj/Localizable.stringsdict deleted file mode 100644 index c83b759ff22..00000000000 --- a/platform/ios/resources/hu.lproj/Localizable.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d annotáció látható - other - %d annotáció látható - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d út látható - other - %d út látható - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - %dx nagyítás - other - %dx nagyítás - - - - diff --git a/platform/ios/resources/ja.lproj/Localizable.strings b/platform/ios/resources/ja.lproj/Localizable.strings deleted file mode 100644 index 0b5429b4876..00000000000 --- a/platform/ios/resources/ja.lproj/Localizable.strings +++ /dev/null @@ -1,78 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "詳細を伝える"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "The session data task failed. Original request was: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "The status code was %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "キャンセル"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "地図を真北に回転させる"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "磁針"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "北"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "To display a Mapbox-hosted map here, set %1$@ to your access token in %2$@\n\nFor detailed instructions, see:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Shows credits, a feedback form, and more"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "この地図について"; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "地図"; - -/* Map accessibility value */ -"MAP_A11Y_VALUE" = "ズーム %1$d倍\n%2$ld ピン現れる"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "現在Mapbox Maps SDK for iOS %1$@が入手できる:"; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "You can help make OpenStreetMap and Mapbox maps better by contributing anonymous usage data."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "参加しない"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "参加する"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "You are helping to make OpenStreetMap and Mapbox maps better by contributing anonymous usage data."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "参加をやめる"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "参加を続ける"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "詳細"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Mapboxテレメトリー"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Mapboxの地図を改善する"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "現在位置"; - diff --git a/platform/ios/resources/ko.lproj/Localizable.strings b/platform/ios/resources/ko.lproj/Localizable.strings deleted file mode 100644 index 6374fc72df7..00000000000 --- a/platform/ios/resources/ko.lproj/Localizable.strings +++ /dev/null @@ -1,117 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "추가 정보 보기"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "세션 데이타 작업 실패. 초기 요청: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "상태 코드 %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "취소"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "지도로 복귀"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "정북쪽으로 지도 회전"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "나침반"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "북"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "맵박스에의한 지도를 출력하기 위해, %1$@ 를 %2$@에 당신의 접근 토큰으로 으로 설정하십시오. \n\n자세한 정보를 찾으시는 경우, 확인:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "크레딧, 피드백 폼, 기타 보기"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "이 맵에 관하여"; - -/* List separator */ -"LIST_SEPARATOR" = ", "; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "알수 없는 에러로 인해 맵 로드에 실패하였습니다."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "형식이 로드되지 않아, 맵 로드에 실패하였습니다."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "맵박스"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "지도"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld 주석 볼 수 있는."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "가시거리 범위: %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld 도로 볼 수 있는."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "확대 %dx."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "형식에 오류가 발생하여 맵 로드에 실패하였습니다."; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ to %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "분리 도로"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "일방 통행"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "경로 %@"; - -/* Action sheet title */ -"SDK_NAME" = "iOS를 위한 맵박스 지도 SDK"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "iOS버전 맵박스 지도 %@가 사용 가능합니다:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "형식을 찾을 수 없거나 호환이 되지 않아, 맵 로드에 실패하였습니다."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "당신은 익명의 사용 데이타를 제공함으로써, 오픈스트리트맵과 맵박스의 향상에 기여하고 있습니다."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "참여하지 마십시오"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "참여"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "당신은 익명의 사용 데이타를 제공함으로써, 오픈스트리트맵과 맵박스의 향상에 기여하고 있습니다."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "참여 중지"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "참여 계속"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "좀 더 말해보세요"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "맵박스 텔레메트리"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "더 나은 맵박스 지도 만들기"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "당신의 위치"; - diff --git a/platform/ios/resources/ko.lproj/Localizable.stringsdict b/platform/ios/resources/ko.lproj/Localizable.stringsdict deleted file mode 100644 index fdde2639c67..00000000000 --- a/platform/ios/resources/ko.lproj/Localizable.stringsdict +++ /dev/null @@ -1,48 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - other - %d 주석 보이기 - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - other - %d 도로 보이기 - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - other - 확대 %dx - - - - diff --git a/platform/ios/resources/lt.lproj/Localizable.strings b/platform/ios/resources/lt.lproj/Localizable.strings deleted file mode 100644 index 2f2e30f9663..00000000000 --- a/platform/ios/resources/lt.lproj/Localizable.strings +++ /dev/null @@ -1,93 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Rodo daugiau informacijos"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "Užklausa nepavyko. Pradinė užklausa buvo: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "Būklės kodas: %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Atšaukti"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Grįžta į žemėlapį."; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Pasuka žemėlapį šiaure į viršų"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Kompasas"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "Š"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "Nustatykite %1$@ kaip jūsų prieigos raktą %2$@ byloje tam, kad atvaizduoti žemėlapį patalpintą Mapbox.\n\nDaugiau informacijos:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Rodo kūrėjų sąrašą, grįžtamo ryšio formą ir daugiau."; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Apie šį žemėlapį"; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Nepavyko užkrauti žemėlapio dėl nežinomos klaidos."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Nepavyko užkrauti žemėlapio, nes nepavyko užkrauti stiliaus."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Žemėlapis"; - -/* Map accessibility value */ -"MAP_A11Y_VALUE" = "Priartinimas: %1$dx\nMatomos anotacijos: %2$ld"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Nepavyko užkrauti žemėlapio, nes stilius yra netinkamo formato."; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK for iOS versija %@ jau prieinama."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Nepavyko užkrauti žemėlapio, nes neįmanoma rasti stiliaus arba jis nėra suderinamas."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Padėkite padaryti OpenStreetMap ir Mapbox žemėlapius geresniais dalindamiesi anoniminiais naudojimosi duomenimis."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Nesidalinti"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Dalintis"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Jūs padedate padaryti OpenStreetMap ir Mapbox žemėlapius geresniais dalindamiesi anoniminiais naudojimosi duomenimis."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Stabdyti dalinimąsi"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Tęsti dalinimąsi"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Daugiau informacijos"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Mapbox Telemetrija"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Padaryti Mapbox žemėlapius geresniais"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Jūs esate čia"; - diff --git a/platform/ios/resources/lt.lproj/Localizable.stringsdict b/platform/ios/resources/lt.lproj/Localizable.stringsdict deleted file mode 100644 index 732a8d23acf..00000000000 --- a/platform/ios/resources/lt.lproj/Localizable.stringsdict +++ /dev/null @@ -1,38 +0,0 @@ - - - - - MAP_A11Y_VALUE - - NSStringLocalizedFormatKey - %#@level@ -%#@count@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Priartinimas %dx - few - Priartinimas %dx - other - Priartinimas %dx - - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d matoma anotacija - few - %d matomos anotacijos - other - %d matomų anotacijų - - - - diff --git a/platform/ios/resources/pt-BR.lproj/Localizable.strings b/platform/ios/resources/pt-BR.lproj/Localizable.strings deleted file mode 100644 index d80c943c7e1..00000000000 --- a/platform/ios/resources/pt-BR.lproj/Localizable.strings +++ /dev/null @@ -1,93 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Mostrar mais informações"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "Tarefa de dados da sessão falhou. Requisição original: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "O código de status foi %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Cancelar"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Retornar ao mapa"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Rotaciona o mapa com face ao norte"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Compasso"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "N"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "Para exibir um mapa hospedado no Mapbox aqui, insira %1$@ para seu token de acesso %2$@\n\nPara maiores detalhes, veja:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Mostra os créditos, um formulário de avaliação, e mais"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Sobre este mapa"; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Falha ao carregar mapa devido a um erro desconhecido"; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Falha ao carregar mapa porque o estilo não pode ser carregado"; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Mapa"; - -/* Map accessibility value */ -"MAP_A11Y_VALUE" = "Zoom %1$dx\n%2$ld anotações visíveis"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Falha ao carregar mapa porque o estilo está corrompido."; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "SDK Mapbox para iOS versão %@ está disponível:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Falha ao carregar mapa porque o estilo não pode ser encontrado ou é incompatível."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Você pode ajudar a tornar o OpenStreetMap e Mapbox ainda melhor contribuindo anonimamente com seus dados de uso."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Não Participar"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Participar"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Você está ajudando a tornar o OpenStreetMap e Mapbox ainda melhor contribuindo anonimamente com seus dados de uso."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Parar de Participar"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Continuar Participando"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Me Diga Mais"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Telemetria do Mapbox"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Melhorar os Mapas do Mapbox"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Você Está Aqui"; - diff --git a/platform/ios/resources/pt-BR.lproj/Localizable.stringsdict b/platform/ios/resources/pt-BR.lproj/Localizable.stringsdict deleted file mode 100644 index c3185c41686..00000000000 --- a/platform/ios/resources/pt-BR.lproj/Localizable.stringsdict +++ /dev/null @@ -1,34 +0,0 @@ - - - - - MAP_A11Y_VALUE - - NSStringLocalizedFormatKey - %#@level@ -%#@count@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Zoom %dx - other - Zoom %dx - - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d anotação visível - other - %d anotações visíveis - - - - diff --git a/platform/ios/resources/pt-PT.lproj/Localizable.strings b/platform/ios/resources/pt-PT.lproj/Localizable.strings deleted file mode 100644 index 8104ef58429..00000000000 --- a/platform/ios/resources/pt-PT.lproj/Localizable.strings +++ /dev/null @@ -1,117 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Mostra mais informação"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "A tarefa de dados da sessão falhou. O pedido original era: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "O código de estado era %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Cancelar"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Voltar ao mapa"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Rodar o mapa virado para Norte"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Compasso"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "N"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "Para mostrar aqui um mapa alojado na Mapbox, configure %1$@ para o seu token de acesso em %2$@\n\nPara instruções detalhadas, ver:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Mostra os créditos, um formulário de resposta e mais"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Sobre este mapa"; - -/* List separator */ -"LIST_SEPARATOR" = ", "; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Não foi possível carregar o mapa porque ocorreu um erro desconhecido."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Não foi possível carregar o mapa porque o estilo não pode ser carregado."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Mapa"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld erro(s) reportado(s) visível(is)."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "Locais visíveis: %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld estrada(s) visivel(is)."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "Zoom %dx."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Não foi possível carregar o mapa porque o estilo está corrompido."; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ para %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "Estrada dividida"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "Sentido único"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "Rota %@"; - -/* Action sheet title */ -"SDK_NAME" = "Mapas Mapbox SDK para iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapas Mapbox SDK para iOS na versão %@ está agora disponível:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Não foi possível carregar o mapa porque o estilo não foi encontrado ou é incompatível."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Pode ajudar a tornar os mapas OpenStreetMap e Mapbox melhores contribuindo com dados de utilização anónimos."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Não Participar"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Participar"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Está a ajudar a tornar os mapas OpenStreetMap e Mapbox melhores contribuindo com dados de utilização anónimos."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Parar de Participar"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Continuar a Participar"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Quero Saber Mais"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Telemetria Mapbox"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Torne Melhores os Mapas Mapbox"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Você Está Aqui"; - diff --git a/platform/ios/resources/pt-PT.lproj/Localizable.stringsdict b/platform/ios/resources/pt-PT.lproj/Localizable.stringsdict deleted file mode 100644 index f342bd58b5b..00000000000 --- a/platform/ios/resources/pt-PT.lproj/Localizable.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d erro reportado visível - other - %d erros reportados visíveis - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d estrada visível - other - %d estradas visíveis - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Zoom %dx - other - Zoom %dx - - - - diff --git a/platform/ios/resources/ru.lproj/Localizable.strings b/platform/ios/resources/ru.lproj/Localizable.strings deleted file mode 100644 index 5bb987489e2..00000000000 --- a/platform/ios/resources/ru.lproj/Localizable.strings +++ /dev/null @@ -1,117 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Дополнительная информация"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "Во время обмена данными произошла ошибка. Оригинал запроса: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "Код ответа %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Отмена"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Вернуться к карте"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Развернуть карту на север"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Компас"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "С"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "Для отображения здесь карт Mapbox, задайте %1$@ для вашего токена доступа в %2$@\n\nПодробные инструкции:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Показать благодарности, форму отправки отзыва и другое"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Об этой карте"; - -/* List separator */ -"LIST_SEPARATOR" = ", "; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Не удалось загрузить карту из-за неизвестной ошибки."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Не удалось загрузить карту из-за ошибки загрузки стиля."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Карта"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "Показано %ld аннотаций."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "Показано мест: %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "Показано %ld дорог."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "Масштаб %dx."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Не удалось загрузить карту из-за ошибки в стиле."; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ на %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "Двусторонняя дорога"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "Односторонняя дорога"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "Трасса %@"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK для iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Доступна версия Mapbox Maps SDK %@ для iOS:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Не удалось загрузить карту, так как стиль не найден или несовместим."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Вы поможете улучшить карты OpenStreetMap и Mapbox, предоставляя обезличенные данные об использовании."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Не участвовать"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Участвовать"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Вы помогаете улучшать карты OpenStreetMap и Mapbox, предоставляя обезличенные данные об использовании."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Прекратить участие"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Продолжить участие"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Узнать больше"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Телеметрия Mapbox"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Сделать карты Mapbox лучше"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Вы здесь"; - diff --git a/platform/ios/resources/ru.lproj/Localizable.stringsdict b/platform/ios/resources/ru.lproj/Localizable.stringsdict deleted file mode 100644 index fabd557780d..00000000000 --- a/platform/ios/resources/ru.lproj/Localizable.stringsdict +++ /dev/null @@ -1,66 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - Показана %d аннотация - few - Показано %d аннотации - many - Показано %d аннотаций - other - Показано %d аннотаций - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - Показана %d дорога - few - Показано %d дороги - many - Показано %d дорог - other - Показано %d дорог - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Масштаб %dx - few - Масштаб %dx - many - Масштаб %dx - other - Масштаб %dx - - - - diff --git a/platform/ios/resources/sv.lproj/Localizable.strings b/platform/ios/resources/sv.lproj/Localizable.strings deleted file mode 100644 index db189f141f6..00000000000 --- a/platform/ios/resources/sv.lproj/Localizable.strings +++ /dev/null @@ -1,117 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Visa mer information"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "Förfrågan misslyckades. Originalförfrågan var: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "Statuskoden var %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Avbryt"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Återgår till kartan"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Roterar kartan mot norr"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Kompass"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "N"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "För att visa Mapbox-karta här, fyll i %1$@ till din access token i %2$@\n\nFör detaljerad information, se:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Visa mer"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Om den här kartan"; - -/* List separator */ -"LIST_SEPARATOR" = ", "; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Misslyckades med att ladda kartan på grund av ett okänt fel."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Misslyckades med att ladda kartan på grund av att kartstilen kunde inte laddas."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Karta"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld annotering(ar) synliga."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "Synliga platser: %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld väg(ar) synliga."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "Zoom %dx."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Misslyckades med att ladda kartan för att kartstilen är korrupt."; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ till %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "Delad väg"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "Enkelriktad väg"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "Rutt %@"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK for iOS version %@ är nu tillgänglig:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Kartan kunde inte laddas för att kartstilen kunde inte hittas eller för att den är inkompatibel."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Du kan göra OpenStreetMap och Mapbox kartor bättre genom att bidra med anonym data."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Delta Inte"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Delta"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Du kan göra OpenStreetMap och Mapbox kartor bättre genom att bidra med anonym data."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Sluta delta"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Fortsätt delta"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Berätta mer"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Mapbox Telemetri"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Gör Mapbox Kartor Bättre"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Du är här"; - diff --git a/platform/ios/resources/sv.lproj/Localizable.stringsdict b/platform/ios/resources/sv.lproj/Localizable.stringsdict deleted file mode 100644 index 5f44d19b37d..00000000000 --- a/platform/ios/resources/sv.lproj/Localizable.stringsdict +++ /dev/null @@ -1,54 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d annotering synlig - other - %d annoteringar synliga - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %d väg synlig - other - %d vägar synliga - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Zooma %dx - other - Zooma %dx - - - - diff --git a/platform/ios/resources/uk.lproj/Localizable.strings b/platform/ios/resources/uk.lproj/Localizable.strings deleted file mode 100644 index f413b963c17..00000000000 --- a/platform/ios/resources/uk.lproj/Localizable.strings +++ /dev/null @@ -1,117 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Показати більше інформації"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "The session data task failed. Original request was: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "Код стану %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Скасувати"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Повернення до мапи"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Обертає мапу в напрмяку на північ"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "Компас"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "Пн"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "Для показу мапи від Mapbox тут, встановіть %1$@ для вашої мітки доступу в %2$@\n\n\nДля отримання докладних інструкцій дивіться:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Показує інформацію про розробників, форму зворотнього відгуку та інше"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Про цю мапу"; - -/* List separator */ -"LIST_SEPARATOR" = ", "; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Через невідому помилку неможливо завантажити мапу"; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Збій мапи через те, що неможливо завантажити стиль"; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Мапа"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld підпис(ів) видно."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "Показано місць: %@"; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld доріг видно."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "Масштаб %d."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Неможливо завантажити мапу через пошкоджений стиль."; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ до %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "Дорога з розподілювачем"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "Односторонній рух"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "Маршрут %@"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK для iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK для iOS версія %@ наявна:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Мапу неможливо завантажити через відсутність стилю або його невідповідність."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Ви можете допомогти зробити мапи OpenStreetMap та Mapbox кращими надаючи анонімізовані дані про користування застосунком."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Відмовитись"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Брати участь"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Ви допомагаєте робити мапи OpenStreetMap та Mapbox краще пощирюючи анонімні дані про користування мапами."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Припинити участь"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Продовжити участь"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Докладніше"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Телеметрія Mapbox"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Допоможіть зробити мапи Mapbox краще"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Ви тут"; - diff --git a/platform/ios/resources/uk.lproj/Localizable.stringsdict b/platform/ios/resources/uk.lproj/Localizable.stringsdict deleted file mode 100644 index 29861f0d236..00000000000 --- a/platform/ios/resources/uk.lproj/Localizable.stringsdict +++ /dev/null @@ -1,60 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - Показано %d підпис - few - Показано %d підписи - other - Показано %d підписів - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - one - %ld дорігу видно - few - %ld доріги видно - other - %ld доріг видно - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - one - Масштаб %dx - few - Масштаб %dx - other - Масштаб %dx - - - - diff --git a/platform/ios/resources/vi.lproj/Localizable.strings b/platform/ios/resources/vi.lproj/Localizable.strings deleted file mode 100644 index 0a6d937d2c2..00000000000 --- a/platform/ios/resources/vi.lproj/Localizable.strings +++ /dev/null @@ -1,117 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "Hiển thị thêm thông tin"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "Tác vụ lấy dữ liệu của phiên làm việc bị thất bại. Yêu cầu ban đầu là: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "Mã trạng thái là %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "Hủy bỏ"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Quay lại bản đồ"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "Quay bản đồ về hướng bắc"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "La bàn"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "B"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "Để hiển thị bản đồ do Mapbox phục vụ tại đây, đặt %1$@ là dấu hiệu truy cập của bạn trong %2$@\n\nXem hướng dẫn chi tiết tại:"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "Hiển thị lời ghi công, biểu mẫu phản hồi, và thêm nữa"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "Giới thiệu về bản đồ này"; - -/* List separator */ -"LIST_SEPARATOR" = ", "; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Bản đồ bị thất bại khi tải vì lỗi không rõ."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Bản đồ bị thất bại khi tải vì không thể tải bảng kiểu."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "Bản đồ"; - -/* Map accessibility value; {number of visible annotations} */ -"MAP_A11Y_VALUE_ANNOTATIONS" = "%ld chú thích đang xuất hiện."; - -/* Map accessibility value; {list of visible places} */ -"MAP_A11Y_VALUE_PLACES" = "Địa điểm đang xuất hiện: %@."; - -/* Map accessibility value; {number of visible roads} */ -"MAP_A11Y_VALUE_ROADS" = "%ld con đường đang xuất hiện."; - -/* Map accessibility value; {zoom level} */ -"MAP_A11Y_VALUE_ZOOM" = "Thu phóng gấp %d lần."; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Bản đồ bị thất bại khi tải vì bảng kiểu bị hỏng."; - -/* String format for accessibility value for road feature; {starting compass direction}, {ending compass direction} */ -"ROAD_DIRECTION_A11Y_FMT" = "%1$@ sang %2$@"; - -/* Accessibility value indicating that a road is a divided road (dual carriageway) */ -"ROAD_DIVIDED_A11Y_VALUE" = "Đường phân làn"; - -/* Accessibility value indicating that a road is a one-way road */ -"ROAD_ONEWAY_A11Y_VALUE" = "Một chiều"; - -/* String format for accessibility value for road feature; {route number} */ -"ROAD_REF_A11Y_FMT" = "Đường số %@"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK cho iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK cho iOS mới ra phiên bản %@:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Bản đồ bị thất bại khi tải vì không tìm thấy bảng kiểu hoặc bảng kiểu không tương thích."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "Hãy giúp cải tiến các bản đồ OpenStreetMap và Mapbox bằng cách đóng góp dữ liệu vô danh hóa về cách sử dụng."; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "Không Tham gia"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "Tham gia"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "Bạn đang giúp cải tiến các bản đồ OpenStreetMap và Mapbox bằng cách đóng góp dữ liệu vô danh hóa về cách sử dụng."; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "Ngừng Tham gia"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "Tiếp tục Tham gia"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "Tìm hiểu Thêm"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Trình viễn trắc Mapbox"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "Cải tiến các Bản đồ Mapbox"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "Bạn ở Đây"; - diff --git a/platform/ios/resources/vi.lproj/Localizable.stringsdict b/platform/ios/resources/vi.lproj/Localizable.stringsdict deleted file mode 100644 index f4f7c400459..00000000000 --- a/platform/ios/resources/vi.lproj/Localizable.stringsdict +++ /dev/null @@ -1,48 +0,0 @@ - - - - - MAP_A11Y_VALUE_ANNOTATIONS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - other - %d chú thích đang xuất hiện - - - MAP_A11Y_VALUE_ROADS - - NSStringLocalizedFormatKey - %#@count@ - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - other - %d con đường đang xuất hiện - - - MAP_A11Y_VALUE_ZOOM - - NSStringLocalizedFormatKey - %#@level@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - other - Thu phóng gấp %d lần - - - - diff --git a/platform/ios/resources/zh-Hans.lproj/Localizable.strings b/platform/ios/resources/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index 98d4e345fa8..00000000000 --- a/platform/ios/resources/zh-Hans.lproj/Localizable.strings +++ /dev/null @@ -1,93 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "显示信息"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "The session data task failed. Original request was: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "The status code was %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "取消"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "Returns to the map"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "旋转地图使正北朝上"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "指南针"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "北"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "在%2$@中将你的access token设为%1$@可在这里显示Mapbox上的地图\n\n更多说明请见"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "显示致谢、用户反馈及更多"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "关于这个地图"; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "The map failed to load because an unknown error occurred."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "The map failed to load because the style can't be loaded."; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "地图"; - -/* Map accessibility value */ -"MAP_A11Y_VALUE" = "地图缩放%1$d倍\n有%2$ld处标记可见"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "The map failed to load because the style is corrupted."; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK for iOS version %@ is now available:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "The map failed to load because the style can’t be found or is incompatible."; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "你可以提供匿名数据来帮助OpenStreetMap和Mapbox的地图变得更好。"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "暂不参与"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "我要参与"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "你的匿名数据在帮助OpenStreetMap和Mapbox的地图变得更好。"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "不再参与"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "继续参与"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "详细信息"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Mapbox传感数据"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "让Mapbox地图变得更好"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "你在这里"; - diff --git a/platform/ios/resources/zh-Hant.lproj/Localizable.strings b/platform/ios/resources/zh-Hant.lproj/Localizable.strings deleted file mode 100644 index abdee6d3ab6..00000000000 --- a/platform/ios/resources/zh-Hant.lproj/Localizable.strings +++ /dev/null @@ -1,93 +0,0 @@ -/* Accessibility hint */ -"ANNOTATION_A11Y_HINT" = "顯示信息"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_DESC" = "The session data task failed. Original request was: %@"; - -/* No comment provided by engineer. */ -"API_CLIENT_400_REASON" = "The status code was %ld"; - -/* Title of button for dismissing attribution action sheet */ -"CANCEL" = "取消"; - -/* Accessibility hint for closing the selected annotation’s callout view and returning to the map */ -"CLOSE_CALLOUT_A11Y_HINT" = "回到地圖"; - -/* Accessibility hint */ -"COMPASS_A11Y_HINT" = "旋轉地圖使正北朝上"; - -/* Accessibility label */ -"COMPASS_A11Y_LABEL" = "指南針"; - -/* Compass abbreviation for north */ -"COMPASS_NORTH" = "北"; - -/* Instructions in Interface Builder designable; {key}, {plist file name} */ -"DESIGNABLE" = "在%2$@中將你的access token設爲%1$@即可顯示Mapbox上的地圖\n\n更多說明請見"; - -/* Setup documentation URL display string; keep as short as possible */ -"FIRST_STEPS_URL" = "mapbox.com/help/first-steps-ios-sdk"; - -/* Accessibility hint */ -"INFO_A11Y_HINT" = "顯示致謝、用戶意見表及更多"; - -/* Accessibility label */ -"INFO_A11Y_LABEL" = "關於這個地圖"; - -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "發生不知名的錯誤,無法載入地圖。"; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "載入樣式表時發生錯誤,無法載入地圖。"; - -/* Accessibility label */ -"LOGO_A11Y_LABEL" = "Mapbox"; - -/* Accessibility label */ -"MAP_A11Y_LABEL" = "地圖"; - -/* Map accessibility value */ -"MAP_A11Y_VALUE" = "縮放地圖%1$d倍\n可顯示%2$ld處標記"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "樣式表有毀損,無法載入地圖。"; - -/* Action sheet title */ -"SDK_NAME" = "Mapbox Maps SDK for iOS"; - -/* Developer-only SDK update notification; {latest version, in format x.x.x} */ -"SDK_UPDATE_AVAILABLE" = "Mapbox Maps SDK for iOS %@版現已開放下載:"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "找不到樣式表或樣式表不兼容,無法載入地圖。"; - -/* Telemetry prompt message */ -"TELEMETRY_DISABLED_MSG" = "你可以提供匿名數據來幫助OpenStreetMap和Mapbox的地圖變得更好。"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_OFF" = "暫不參與"; - -/* Telemetry prompt button */ -"TELEMETRY_DISABLED_ON" = "我要參與"; - -/* Telemetry prompt message */ -"TELEMETRY_ENABLED_MSG" = "你的匿名數據正在改善OpenStreetMap和Mapbox地圖。"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_OFF" = "不再參與"; - -/* Telemetry prompt button */ -"TELEMETRY_ENABLED_ON" = "繼續參與"; - -/* Telemetry prompt button */ -"TELEMETRY_MORE" = "詳細信息"; - -/* Action in attribution sheet */ -"TELEMETRY_NAME" = "Mapbox遙測"; - -/* Telemetry prompt title */ -"TELEMETRY_TITLE" = "讓Mapbox地圖變得更好"; - -/* Default user location annotation title */ -"USER_DOT_TITLE" = "你在這裡"; - diff --git a/platform/ios/resources/zh-Hant.lproj/Localizable.stringsdict b/platform/ios/resources/zh-Hant.lproj/Localizable.stringsdict deleted file mode 100644 index fc44e2e5019..00000000000 --- a/platform/ios/resources/zh-Hant.lproj/Localizable.stringsdict +++ /dev/null @@ -1,30 +0,0 @@ - - - - - MAP_A11Y_VALUE - - NSStringLocalizedFormatKey - %#@level@ -%#@count@ - level - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - d - other - 縮放層級%dx - - count - - NSStringFormatSpecTypeKey - NSStringPluralRuleType - NSStringFormatValueTypeKey - ld - other - 可見%d處標示 - - - - diff --git a/platform/ios/scripts/check-events-symbols.sh b/platform/ios/scripts/check-events-symbols.sh deleted file mode 100755 index c76d5e26934..00000000000 --- a/platform/ios/scripts/check-events-symbols.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env bash - -set -eu -o pipefail - -function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; } -function finish { >&2 echo -en "\033[0m"; } -trap finish EXIT - -find_framework() { - step "Looking for Mapbox.framework…" - echo $( find ./build -name Mapbox | tail -n 1 ) -} - -FRAMEWORK=$(find_framework) - -if [[ -z "${FRAMEWORK}" || ! -f "${FRAMEWORK}" ]]; then - echo "No framework found — building dynamic Mapbox.framework…" - make iframework BUILD_DEVICE=false - FRAMEWORK=$(find_framework) -fi - -echo "Found framework: ${FRAMEWORK}" - -step "Checking for un-namespaced symbols from mapbox-events-ios…" - -# Symbols from mapbox-events-ios are prefixed MME. To avoid duplicate symbol -# warnings when multiple copes of mapbox-events-ios are included in a project, -# the maps SDK prefixes these symbols with MGL_. -SYMBOLS=$( nm "$FRAMEWORK" | grep \$_MME || true ) - -if [ -z "${SYMBOLS}" ]; then - echo "✅ No un-namespaced symbols found." -else - echo "❗️ Found un-namespaced symbols:" - echo "${SYMBOLS}" - exit 1 -fi diff --git a/platform/ios/scripts/deploy-packages.sh b/platform/ios/scripts/deploy-packages.sh deleted file mode 100755 index b33a25df86e..00000000000 --- a/platform/ios/scripts/deploy-packages.sh +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -o pipefail -set -u - -# dynamic environment variables: -# VERSION_TAG={determined automatically}: Version tag in format ios-vX.X.X-pre.X -# GITHUB_RELEASE=true: Upload to github - -# environment variables and dependencies: -# - You must run "mbx auth ..." before running -# - Set GITHUB_TOKEN to a GitHub API access token in your environment to use GITHUB_RELEASE -# - The "github-release" command is required to use GITHUB_RELEASE - -function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; } -function finish { >&2 echo -en "\033[0m"; } -trap finish EXIT - -buildPackageStyle() { - local package=$1 style="" - if [[ ${#} -eq 2 ]]; then - style="$2" - fi - step "Building: make ${package} ${style}" - make ${package} - step "Publishing ${package} with ${style}" - local file_name="" - if [ -z ${style} ] - then - ./platform/ios/scripts/publish.sh "${PUBLISH_VERSION}" - file_name=mapbox-ios-sdk-${PUBLISH_VERSION}.zip - else - ./platform/ios/scripts/publish.sh "${PUBLISH_VERSION}" ${style} - file_name=mapbox-ios-sdk-${PUBLISH_VERSION}-${style}.zip - fi - if [[ "${GITHUB_RELEASE}" == true ]]; then - step "Uploading ${file_name} to GitHub" - github-release upload \ - --tag "ios-v${PUBLISH_VERSION}" \ - --name ${file_name} \ - --file "${BINARY_DIRECTORY}/${file_name}" > /dev/null - fi -} - -export TRAVIS_REPO_SLUG=mapbox-gl-native -export GITHUB_USER=mapbox -export GITHUB_REPO=mapbox-gl-native -export BUILDTYPE=Release - -VERSION_TAG=${VERSION_TAG:-''} -PUBLISH_VERSION= -BINARY_DIRECTORY='build/ios' -GITHUB_RELEASE=${GITHUB_RELEASE:-true} -PUBLISH_PRE_FLAG='' - -if [[ -z `which github-release` ]]; then - step "Installing github-release…" - brew install github-release - if [ -z `which github-release` ]; then - echo "Unable to install github-release. See: https://github.com/aktau/github-release" - exit 1 - fi -fi - -if [[ ${GITHUB_RELEASE} = "true" ]]; then - GITHUB_RELEASE=true # Assign bool, not just a string -fi - -if [[ -z ${VERSION_TAG} ]]; then - step "Determining version number from most recent relevant git tag…" - VERSION_TAG=$( git describe --tags --match=ios-v*.*.* --abbrev=0 ) - echo "Found tag: ${VERSION_TAG}" -fi - -if [[ $( echo ${VERSION_TAG} | grep --invert-match ios-v ) ]]; then - echo "Error: ${VERSION_TAG} is not a valid iOS version tag" - echo "VERSION_TAG should be in format: ios-vX.X.X-pre.X" - exit 1 -fi - -if github-release info --tag ${VERSION_TAG} | grep --quiet "draft: ✗"; then - echo "Error: ${VERSION_TAG} has already been published on GitHub" - echo "See: https://github.com/${GITHUB_USER}/${GITHUB_REPO}/releases/tag/${VERSION_TAG}" - exit 1 -fi - -PUBLISH_VERSION=$( echo ${VERSION_TAG} | sed 's/^ios-v//' ) -git checkout ${VERSION_TAG} - -step "Deploying version ${PUBLISH_VERSION}…" - -npm install --ignore-scripts -mkdir -p ${BINARY_DIRECTORY} - -if [[ "${GITHUB_RELEASE}" == true ]]; then - step "Create GitHub release…" - if [[ $( echo ${PUBLISH_VERSION} | awk '/[0-9]-/' ) ]]; then - PUBLISH_PRE_FLAG='--pre-release' - fi - RELEASE_NOTES=$( ./platform/ios/scripts/release-notes.js github ) - github-release release \ - --tag "ios-v${PUBLISH_VERSION}" \ - --name "ios-v${PUBLISH_VERSION}" \ - --draft ${PUBLISH_PRE_FLAG} \ - --description "${RELEASE_NOTES}" -fi - -buildPackageStyle "iframework" "dynamic" -buildPackageStyle "iframework SYMBOLS=NO" "stripped-dynamic" - -step "Finished deploying ${PUBLISH_VERSION} in $(($SECONDS / 60)) minutes and $(($SECONDS % 60)) seconds" diff --git a/platform/ios/scripts/deploy-snapshot.sh b/platform/ios/scripts/deploy-snapshot.sh deleted file mode 100755 index d0d5d59d2e5..00000000000 --- a/platform/ios/scripts/deploy-snapshot.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; } -function finish { >&2 echo -en "\033[0m"; } -trap finish EXIT - -DATE=`date +%Y-%m-%d` -PROJ_VERSION=$(git rev-list --count HEAD) -SNAPSHOT_TYPE="snapshot-dynamic" - -step "Uploading ${SNAPSHOT_TYPE} build for ${DATE}-${PROJ_VERSION} to s3…" - -./platform/ios/scripts/publish.sh "${SNAPSHOT_TYPE}" "${DATE}-${PROJ_VERSION}" - -step "Finished deploying ${SNAPSHOT_TYPE} build in $(($SECONDS / 60)) minutes and $(($SECONDS % 60)) seconds" diff --git a/platform/ios/scripts/deploy-to-cocoapods.sh b/platform/ios/scripts/deploy-to-cocoapods.sh deleted file mode 100755 index 27eb1fbabe6..00000000000 --- a/platform/ios/scripts/deploy-to-cocoapods.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash - -# This relies on either: -# 1. You being authenticated locally with CocoaPods trunk. -# 2. The `COCOAPODS_TRUNK_TOKEN` environment variable being set. - -set -euo pipefail - -function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; } -function finish { >&2 echo -en "\033[0m"; } -trap finish EXIT - -CIRCLE_TAG=${CIRCLE_TAG:-""} - -step "Pushing release to CocoaPods trunk…" - -if [[ $CIRCLE_TAG ]]; then - pod trunk push platform/ios/Mapbox-iOS-SDK.podspec --allow-warnings -else - echo "Skipping push to CocoaPods trunk for untagged build" -fi - -step "Pushing release/builds to Mapbox podspecs repo…" - -if [[ -z $(pod repo list | grep -i mapbox-public) ]]; then - pod repo add mapbox-public https://github.com/mapbox/pod-specs -else - echo "Found existing mapbox-public podspecs repo" -fi - -if [[ -z $(git config --global user.email) && $CI ]]; then - echo "Setting machine user as git committer" - git config --global user.email "MapboxCI@users.noreply.github.com" -fi - -if [[ $CIRCLE_TAG ]]; then - pod repo push mapbox-public platform/ios/Mapbox-iOS-SDK.podspec --allow-warnings - pod repo push mapbox-public platform/ios/Mapbox-iOS-SDK-stripped.podspec --allow-warnings -else - echo "Skipping push of release podspecs to mapbox-public for untagged build" - - # pod repo push mapbox-public platform/ios/Mapbox-iOS-SDK-snapshot-dynamic.podspec --allow-warnings - echo "Skipping push of snapshot to mapbox-public until we have a way to update the versions in the snapshot podspec" -fi diff --git a/platform/ios/scripts/document.sh b/platform/ios/scripts/document.sh deleted file mode 100755 index bb1c63dc6c7..00000000000 --- a/platform/ios/scripts/document.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; } -function finish { >&2 echo -en "\033[0m"; } -trap finish EXIT - -if [ -z `which jazzy` ]; then - ./platform/ios/scripts/install-packaging-dependencies.sh -fi - -DEFAULT_THEME="platform/darwin/docs/theme" -THEME=${JAZZY_THEME:-$DEFAULT_THEME} -CUSTOM_HEAD=${JAZZY_CUSTOM_HEAD:-''} -OUTPUT=${OUTPUT:-documentation} - -BRANCH=$( git describe --tags --match=ios-v*.*.* --abbrev=0 ) -SHORT_VERSION=$( echo ${BRANCH} | sed 's/^ios-v//' ) -RELEASE_VERSION=$( echo ${SHORT_VERSION} | sed -e 's/^ios-v//' -e 's/-.*//' ) - -rm -rf /tmp/mbgl -mkdir -p /tmp/mbgl/ - -step "Generating readme and release notes" -README=/tmp/mbgl/README.md -npm install --ignore-scripts -node platform/ios/scripts/release-notes.js jazzy >> "${README}" - -rm -rf ${OUTPUT} -mkdir -p ${OUTPUT} - -cp -r platform/darwin/docs/img "${OUTPUT}" -cp -r platform/ios/docs/img "${OUTPUT}" - -step "Generating jazzy docs for ${SHORT_VERSION}…" - -jazzy \ - --config platform/ios/jazzy.yml \ - --sdk iphonesimulator \ - --github-file-prefix https://github.com/mapbox/mapbox-gl-native/tree/${BRANCH} \ - --module-version ${SHORT_VERSION} \ - --readme ${README} \ - --documentation="platform/{darwin,ios}/docs/guides/*.md" \ - --root-url https://docs.mapbox.com/ios/api/maps/${RELEASE_VERSION}/ \ - --theme ${THEME} \ - --head "${CUSTOM_HEAD}" \ - --output ${OUTPUT} \ - --title "Maps SDK for iOS" \ - --module-version ${SHORT_VERSION} diff --git a/platform/ios/scripts/install-packaging-dependencies.sh b/platform/ios/scripts/install-packaging-dependencies.sh deleted file mode 100755 index 558223bad45..00000000000 --- a/platform/ios/scripts/install-packaging-dependencies.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -COCOAPODS_VERSION="1.7.5" -JAZZY_VERSION="0.11.1" -CIRCLECI=${CIRCLECI:-false} - -function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; } -function finish { >&2 echo -en "\033[0m"; } -trap finish EXIT - -step "Installing packaging dependencies…" - -## -## aws -## -if [ -z `which aws` ]; then - brew install awscli -else - echo "Found awscli" -fi - -## -## cocoapods -## -if [[ -z `which pod` || $(pod --version) != "${COCOAPODS_VERSION}" ]]; then - step "Installing cocoapods…" - - if [[ "${CIRCLECI}" == true ]]; then - sudo gem install cocoapods -v $COCOAPODS_VERSION --no-document - else - gem install cocoapods -v $COCOAPODS_VERSION --no-document - fi - - if [ -z `which pod` ]; then - echo "Unable to install cocoapods ($COCOAPODS_VERSION)." - exit 1 - fi -else - echo "Found cocoapods (${COCOAPODS_VERSION})" -fi - -## -## jazzy -## -if [[ -z `which jazzy` || $(jazzy -v) != "jazzy version: ${JAZZY_VERSION}" ]]; then - step "Installing jazzy…" - - if [[ "${CIRCLECI}" == true ]]; then - sudo gem install jazzy -v $JAZZY_VERSION --no-document - else - gem install jazzy -v $JAZZY_VERSION --no-document - fi - - if [ -z `which jazzy` ]; then - echo "Unable to install jazzy ($JAZZY_VERSION). See https://github.com/mapbox/mapbox-gl-native/blob/master/platform/ios/INSTALL.md" - exit 1 - fi -else - echo "Found jazzy (${JAZZY_VERSION})" -fi - -step "Finished installing packaging dependencies" diff --git a/platform/ios/scripts/ios-code-coverage.sh b/platform/ios/scripts/ios-code-coverage.sh deleted file mode 100755 index 8b8adb423a2..00000000000 --- a/platform/ios/scripts/ios-code-coverage.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -o pipefail - -# -# Get code coverage report, then convert it to JSON. -# The coverage reports end up in different locations based on whether coverage -# is generated via CI or locally. -# -cov_result=""; -if [ -f build/ios/Logs/Test/*.xcresult/*_Test/*.xccovreport ]; then - cov_result=build/ios/Logs/Test/*.xcresult/*_Test/*.xccovreport -elif [ -f build/ios/ios/Logs/Test/*.xcresult/*_Test/*.xccovreport ]; then - cov_result=build/ios/ios/Logs/Test/*.xcresult/*_Test/*.xccovreport -else - echo "Coverage file does not exist. Please run tests before executing" - exit 1 -fi - -xcrun xccov view $cov_result --json > output.json - -# -# Convert the line coverage for the dynamic target to a percentage. Currently, -# only CI tests are included when calculated code coverage. -# -percentage=`node -e "console.log(require('./output.json').lineCoverage)"` -cov=$(printf "%.2f" $(echo "$percentage*100" | bc -l)) - -# Generate a formatted JSON file and upload it to S3. -./././scripts/code-coverage.sh $cov "iOS" "$1" diff --git a/platform/ios/scripts/lint-podspecs.js b/platform/ios/scripts/lint-podspecs.js deleted file mode 100755 index 1381acacff5..00000000000 --- a/platform/ios/scripts/lint-podspecs.js +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env node - -const fs = require('fs'); -const execSync = require('child_process').execSync; -const _ = require('lodash'); -const semver = require('semver'); - -console.step = _.partial(console.log, '\n\033[1m\033[36m*', _, '\033[0m'); -process.exitCode = 0; - -const podspecsPath = 'platform/ios'; - -/* - Step 1. Run the official CocoaPods linter against all of our podspecs. -*/ -console.step(`Running CocoaPods linter against podspecs in '${podspecsPath}'`) -execSync(`pod spec lint ${podspecsPath}/*.podspec --quick`, {stdio: 'inherit'}); - -/* - Step 2. Check that our podspecs contain properly formatted version strings. -*/ -console.step('Checking Mapbox SDK version strings in podspecs') -const podspecs = fs.readdirSync(podspecsPath).filter(fn => fn.endsWith('.podspec')); - -let matchedVersions = []; - -for (const podspecFilename of podspecs) { - console.log(podspecFilename); - const podspecContents = fs.readFileSync(`${podspecsPath}/${podspecFilename}`, 'utf8'); - - /* - This regular expression: - - Matches single lines in the format: version = '9.9.9' - - Groups the version number inside the single quotes. - - Ignores whitespace at the start of the line and between parts of the definition using: \s*? - */ - const regex = /^\s*?version\s*?=\s*?'(.*)'$/gmi; - - const match = regex.exec(podspecContents); - if (!match) { - console.error(' ❌ No version string found'); - process.exitCode = 1; - continue; - } - - const matchedVersion = match[1]; - matchedVersions.push(matchedVersion); - - if (!semver.valid(matchedVersion)) { - console.error(` ❌ ${matchedVersion} is not a valid semantic version`); - process.exitCode = 1; - continue; - } - - console.log(` ✅ ${matchedVersion} is a valid semantic version`); -} - -/* - Step 3. Check that versions are consistent across our podspecs. -*/ -console.step('Checking version consistency') -const uniqueVersions = _.uniq(matchedVersions); -if (uniqueVersions.length != 1) { - console.error('❌ Versions in podspecs do not match:', uniqueVersions); - process.exitCode = 1; -} else { - console.log(`✅ ${uniqueVersions[0]} is set in all podspecs`); -} - -/* - Step 4. Finish up and summarize the results. -*/ -process.on('exit', (code) => { - if (code == 0) { - console.log('\nPodspec linting completed successfully! 🕵️‍♀️'); - } else { - console.log('\nPodspec linting failed. 💥'); - } -}); diff --git a/platform/ios/scripts/metrics.sh b/platform/ios/scripts/metrics.sh deleted file mode 100755 index 080dce74277..00000000000 --- a/platform/ios/scripts/metrics.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -o pipefail - -# Generate stripped versions for every architecture -xcrun bitcode_strip build/ios/pkg/dynamic/Mapbox.framework/Mapbox -r -o build/ios/pkg/dynamic/Mapbox-stripped -strip -Sx build/ios/pkg/dynamic/Mapbox-stripped -lipo build/ios/pkg/dynamic/Mapbox-stripped -extract armv7 -output build/ios/pkg/dynamic/Mapbox-stripped-armv7 -lipo build/ios/pkg/dynamic/Mapbox-stripped -extract arm64 -output build/ios/pkg/dynamic/Mapbox-stripped-arm64 -lipo build/ios/pkg/dynamic/Mapbox-stripped -extract x86_64 -output build/ios/pkg/dynamic/Mapbox-stripped-x86_64 - -# Track individual architectures -scripts/check_binary_size.js "build/ios/pkg/dynamic/Mapbox-stripped-armv7" "iOS armv7" -scripts/check_binary_size.js "build/ios/pkg/dynamic/Mapbox-stripped-arm64" "iOS arm64" -scripts/check_binary_size.js "build/ios/pkg/dynamic/Mapbox-stripped-x86_64" "iOS x86_64" - -# Track overall library size -scripts/check_binary_size.js "build/ios/pkg/dynamic/Mapbox-stripped" "iOS Dynamic" - -if [[ $CIRCLE_BRANCH == master ]]; then - # Build source data for http://mapbox.github.io/mapbox-gl-native/metrics/binary-size/ - # and log binary sizes to metrics warehouse - scripts/publish_binary_size.js -fi - diff --git a/platform/ios/scripts/package.sh b/platform/ios/scripts/package.sh deleted file mode 100755 index 5475632c245..00000000000 --- a/platform/ios/scripts/package.sh +++ /dev/null @@ -1,249 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -o pipefail -set -u - -NAME=Mapbox -OUTPUT=build/ios/pkg -DERIVED_DATA=build/ios -PRODUCTS=${DERIVED_DATA} -LOG_PATH=build/xcodebuild-$(date +"%Y-%m-%d_%H%M%S").log - -BUILD_FOR_DEVICE=${BUILD_DEVICE:-true} -BUILD_DOCS=${BUILD_DOCS:-true} -SYMBOLS=${SYMBOLS:-YES} - -BUILDTYPE=${BUILDTYPE:-Debug} -if [[ ${SYMBOLS} == YES && ${BUILDTYPE} == Release ]]; then - BUILDTYPE='RelWithDebInfo' -fi - -FORMAT=${FORMAT:-dynamic} -BUILD_DYNAMIC=true -BUILD_STATIC=false -if [[ ${FORMAT} == "static" ]]; then - BUILD_STATIC=true - BUILD_DYNAMIC=false -elif [[ ${FORMAT} != "dynamic" ]]; then - echo "Error: FORMAT must be dynamic or static." - exit 1 -fi - -SDK=iphonesimulator -if [[ ${BUILD_FOR_DEVICE} == true ]]; then - SDK=iphoneos -fi -IOS_SDK_VERSION=`xcrun --sdk ${SDK} --show-sdk-version` - -function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; } -function finish { >&2 echo -en "\033[0m"; } -trap finish EXIT - -step "Configuring ${FORMAT} framework for ${SDK} ${IOS_SDK_VERSION} (symbols: ${SYMBOLS}, buildtype: ${BUILDTYPE})" - -xcodebuild -version - -rm -rf ${OUTPUT} -if [[ ${BUILD_STATIC} == true ]]; then - mkdir -p "${OUTPUT}"/static -fi -if [[ ${BUILD_DYNAMIC} == true ]]; then - mkdir -p "${OUTPUT}"/dynamic -fi - -step "Recording library version…" -VERSION="${OUTPUT}"/version.txt -echo -n "https://github.com/mapbox/mapbox-gl-native/commit/" > ${VERSION} -HASH=`git log | head -1 | awk '{ print $2 }' | cut -c 1-10` && true -echo -n "mapbox-gl-native " -echo ${HASH} -echo ${HASH} >> ${VERSION} - -PROJ_VERSION=$(git rev-list --count HEAD) -SEM_VERSION=$( git describe --tags --match=ios-v*.*.* --abbrev=0 | sed 's/^ios-v//' ) -SHORT_VERSION=${SEM_VERSION%-*} - -step "Building targets (build ${PROJ_VERSION}, version ${SEM_VERSION})" - -SCHEME='dynamic' -if [[ ${BUILD_STATIC} == true ]]; then - SCHEME='static' -fi - -CI_XCCONFIG='' -if [[ ! -z "${CI:=}" ]]; then - xcconfig='platform/darwin/ci.xcconfig' - echo "CI environment, using ${xcconfig}" - CI_XCCONFIG="-xcconfig ./${xcconfig}" -fi - -step "Building ${FORMAT} framework for iOS Simulator using ${SCHEME} scheme" -xcodebuild \ - CURRENT_PROJECT_VERSION=${PROJ_VERSION} \ - CURRENT_SHORT_VERSION=${SHORT_VERSION} \ - CURRENT_SEMANTIC_VERSION=${SEM_VERSION} \ - CURRENT_COMMIT_HASH=${HASH} \ - ONLY_ACTIVE_ARCH=NO \ - ${CI_XCCONFIG} \ - -derivedDataPath ${DERIVED_DATA} \ - -workspace ./platform/ios/ios.xcworkspace \ - -scheme ${SCHEME} \ - -configuration ${BUILDTYPE} \ - -sdk iphonesimulator \ - -jobs ${JOBS} | tee ${LOG_PATH} | xcpretty - -if [[ ${BUILD_FOR_DEVICE} == true ]]; then - step "Building ${FORMAT} framework for iOS devices using ${SCHEME} scheme" - xcodebuild \ - CURRENT_PROJECT_VERSION=${PROJ_VERSION} \ - CURRENT_SHORT_VERSION=${SHORT_VERSION} \ - CURRENT_SEMANTIC_VERSION=${SEM_VERSION} \ - CURRENT_COMMIT_HASH=${HASH} \ - ONLY_ACTIVE_ARCH=NO \ - ${CI_XCCONFIG} \ - -derivedDataPath ${DERIVED_DATA} \ - -workspace ./platform/ios/ios.xcworkspace \ - -scheme ${SCHEME} \ - -configuration ${BUILDTYPE} \ - -sdk iphoneos \ - -jobs ${JOBS} | tee ${LOG_PATH} | xcpretty -fi - -LIBS=(Mapbox.a) - -# https://medium.com/@syshen/create-an-ios-universal-framework-148eb130a46c -if [[ ${BUILD_FOR_DEVICE} == true ]]; then - if [[ ${BUILD_STATIC} == true ]]; then - step "Assembling static framework for iOS Simulator and devices…" - mkdir -p ${OUTPUT}/static/${NAME}.framework - libtool -static -no_warning_for_no_symbols \ - -o ${OUTPUT}/static/${NAME}.framework/${NAME} \ - ${LIBS[@]/#/${PRODUCTS}/${BUILDTYPE}-iphoneos/lib} \ - ${LIBS[@]/#/${PRODUCTS}/${BUILDTYPE}-iphonesimulator/lib} \ - `cmake -LA -N ${DERIVED_DATA} | grep MASON_PACKAGE_icu_LIBRARIES | cut -d= -f2` - - cp -rv ${PRODUCTS}/${BUILDTYPE}-iphoneos/${NAME}.bundle ${OUTPUT}/static - fi - - if [[ ${BUILD_DYNAMIC} == true ]]; then - step "Copying dynamic framework into place for iOS devices" - cp -r \ - ${PRODUCTS}/${BUILDTYPE}-iphoneos/${NAME}.framework \ - ${OUTPUT}/dynamic/ - - if [[ -e ${PRODUCTS}/${BUILDTYPE}-iphoneos/${NAME}.framework.dSYM ]]; then - step "Copying dSYM" - cp -r ${PRODUCTS}/${BUILDTYPE}-iphoneos/${NAME}.framework.dSYM \ - ${OUTPUT}/dynamic/ - if [[ -e ${PRODUCTS}/${BUILDTYPE}-iphonesimulator/${NAME}.framework.dSYM ]]; then - step "Merging device and simulator dSYMs…" - lipo \ - ${PRODUCTS}/${BUILDTYPE}-iphoneos/${NAME}.framework.dSYM/Contents/Resources/DWARF/${NAME} \ - ${PRODUCTS}/${BUILDTYPE}-iphonesimulator/${NAME}.framework.dSYM/Contents/Resources/DWARF/${NAME} \ - -create -output ${OUTPUT}/dynamic/${NAME}.framework.dSYM/Contents/Resources/DWARF/${NAME} - lipo -info ${OUTPUT}/dynamic/${NAME}.framework.dSYM/Contents/Resources/DWARF/${NAME} - fi - fi - - step "Merging simulator dynamic library into device dynamic library…" - lipo \ - ${PRODUCTS}/${BUILDTYPE}-iphoneos/${NAME}.framework/${NAME} \ - ${PRODUCTS}/${BUILDTYPE}-iphonesimulator/${NAME}.framework/${NAME} \ - -create -output ${OUTPUT}/dynamic/${NAME}.framework/${NAME} | echo - fi - - cp -rv platform/ios/app/Settings.bundle ${OUTPUT} -else - if [[ ${BUILD_STATIC} == true ]]; then - step "Assembling static library for iOS Simulator…" - mkdir -p ${OUTPUT}/static/${NAME}.framework - libtool -static -no_warning_for_no_symbols \ - -o ${OUTPUT}/static/${NAME}.framework/${NAME} \ - ${LIBS[@]/#/${PRODUCTS}/${BUILDTYPE}-iphonesimulator/lib} \ - `cmake -LA -N ${DERIVED_DATA} | grep MASON_PACKAGE_icu_LIBRARIES | cut -d= -f2` - - cp -rv ${PRODUCTS}/${BUILDTYPE}-iphonesimulator/${NAME}.bundle ${OUTPUT}/static - fi - - if [[ ${BUILD_DYNAMIC} == true ]]; then - step "Copying dynamic framework into place for iOS Simulator…" - cp -r \ - ${PRODUCTS}/${BUILDTYPE}-iphonesimulator/${NAME}.framework \ - ${OUTPUT}/dynamic/${NAME}.framework - if [[ -e ${PRODUCTS}/${BUILDTYPE}-iphonesimulator/${NAME}.framework.dSYM ]]; then - step "Copying dSYM" - cp -r ${PRODUCTS}/${BUILDTYPE}-iphonesimulator/${NAME}.framework.dSYM \ - ${OUTPUT}/dynamic/ - fi - fi - - cp -rv platform/ios/app/Settings.bundle ${OUTPUT} -fi - -function get_comparable_uuid { - echo $(dwarfdump --uuid ${1} | sed -n 's/.*UUID:\([^\"]*\) .*/\1/p' | sort) -} - -function validate_dsym { - step "Validating dSYM and framework UUIDs…" - DSYM_UUID=$(get_comparable_uuid "${1}") - FRAMEWORK_UUID=$(get_comparable_uuid "${2}") - echo -e "${1}\n ${DSYM_UUID}\n${2}\n ${FRAMEWORK_UUID}" - if [[ ${DSYM_UUID} != ${FRAMEWORK_UUID} ]]; then - echo "Error: dSYM and framework UUIDs do not match." - exit 1 - fi -} - -if [[ ${BUILD_DYNAMIC} == true && ${BUILDTYPE} == Release ]]; then - validate_dsym \ - "${OUTPUT}/dynamic/${NAME}.framework.dSYM/Contents/Resources/DWARF/${NAME}" \ - "${OUTPUT}/dynamic/${NAME}.framework/${NAME}" - - step "Removing i386 slice from dSYM" - lipo -remove i386 "${OUTPUT}/dynamic/${NAME}.framework.dSYM/Contents/Resources/DWARF/${NAME}" -o "${OUTPUT}/dynamic/${NAME}.framework.dSYM/Contents/Resources/DWARF/${NAME}" - lipo -info "${OUTPUT}/dynamic/${NAME}.framework.dSYM/Contents/Resources/DWARF/${NAME}" -fi - -if [[ ${BUILD_STATIC} == true ]]; then - step "Copying static library headers…" - cp -rv "${PRODUCTS}/${BUILDTYPE}-iphoneos/Headers" "${OUTPUT}/static/${NAME}.framework/Headers" - cat platform/ios/framework/Mapbox-static.h > "${OUTPUT}/static/${NAME}.framework/Headers/Mapbox.h" - cat "${PRODUCTS}/${BUILDTYPE}-iphoneos/Headers/Mapbox.h" >> "${OUTPUT}/static/${NAME}.framework/Headers/Mapbox.h" -fi - -step "Copying library resources…" -cp -pv LICENSE.md ${OUTPUT} -if [[ ${BUILD_STATIC} == true ]]; then - cp -pv "${OUTPUT}/static/${NAME}.bundle/Info.plist" "${OUTPUT}/static/${NAME}.framework/Info.plist" - plutil -replace CFBundlePackageType -string FMWK "${OUTPUT}/static/${NAME}.framework/Info.plist" - mkdir "${OUTPUT}/static/${NAME}.framework/Modules" - cp -pv platform/ios/framework/modulemap "${OUTPUT}/static/${NAME}.framework/Modules/module.modulemap" -fi -if [[ ${BUILD_DYNAMIC} == true && ${BUILD_FOR_DEVICE} == true ]]; then - step "Copying bitcode symbol maps…" - find "${PRODUCTS}/${BUILDTYPE}-iphoneos" -name '*.bcsymbolmap' -type f -exec cp -pv {} "${OUTPUT}/dynamic/" \; -fi -sed -n -e '/^## /,$p' platform/ios/CHANGELOG.md > "${OUTPUT}/CHANGELOG.md" - -rm -rf /tmp/mbgl -mkdir -p /tmp/mbgl/ -README=/tmp/mbgl/README.md -cp platform/ios/docs/pod-README.md "${README}" -if [[ ${BUILD_DYNAMIC} == false ]]; then - sed -i '' -e '/{{DYNAMIC}}/,/{{\/DYNAMIC}}/d' "${README}" -fi -if [[ ${BUILD_STATIC} == false ]]; then - sed -i '' -e '/{{STATIC}}/,/{{\/STATIC}}/d' "${README}" -fi -sed -i '' \ - -e '/{{DYNAMIC}}/d' -e '/{{\/DYNAMIC}}/d' \ - -e '/{{STATIC}}/d' -e '/{{\/STATIC}}/d' \ - "${README}" -cp ${README} "${OUTPUT}" - -if [ ${BUILD_DOCS} == true ]; then - step "Generating API documentation for ${BUILDTYPE} Build…" - make idocument OUTPUT="${OUTPUT}/documentation" -fi diff --git a/platform/ios/scripts/publish.sh b/platform/ios/scripts/publish.sh deleted file mode 100755 index 1a4652a5099..00000000000 --- a/platform/ios/scripts/publish.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; } -function finish { >&2 echo -en "\033[0m"; } -trap finish EXIT - -# -# iOS release tag format is `vX.Y.Z`; `X.Y.Z` gets passed in -# In the case of stripped builds, we also append the `-stripped`. -# -PUBLISH_VERSION="$1" - -if [[ ${#} -eq 2 ]]; then - PUBLISH_STYLE="-$2" -else - PUBLISH_STYLE="" -fi - -GITHUB_REPO=${GITHUB_REPO:-'mapbox-gl-native'} - -# -# zip -# -cd build/ios/pkg -ZIP_FILENAME="mapbox-ios-sdk-${PUBLISH_VERSION}${PUBLISH_STYLE}.zip" -step "Compressing ${ZIP_FILENAME}…" -rm -f ../${ZIP_FILENAME} -zip -yr ../${ZIP_FILENAME} * -cd .. - -# -# report file sizes -# -step "Echoing file sizes…" -du -sh ${ZIP_FILENAME} -du -sch pkg/* -du -sch pkg/dynamic/* - -# -# upload -# -PROGRESS="" -if [ -n "${CI:-}" ]; then - PROGRESS="--no-progress" -fi - -step "Uploading ${ZIP_FILENAME} to s3…" -aws s3 cp ${ZIP_FILENAME} s3://mapbox/${GITHUB_REPO}/ios/builds/ --acl public-read ${PROGRESS} -S3_URL=https://mapbox.s3.amazonaws.com/${GITHUB_REPO}/ios/builds/${ZIP_FILENAME} -echo "URL: ${S3_URL}" - -# -# upload & update snapshot -# -if [[ ${PUBLISH_VERSION} =~ "snapshot" ]]; then - step "Updating ${PUBLISH_VERSION} to ${PUBLISH_STYLE}…" - GENERIC_ZIP_FILENAME="mapbox-ios-sdk-${PUBLISH_VERSION}.zip" - aws s3 cp \ - s3://mapbox/$GITHUB_REPO/ios/builds/${ZIP_FILENAME} \ - s3://mapbox/$GITHUB_REPO/ios/builds/${GENERIC_ZIP_FILENAME} --acl public-read ${PROGRESS} -fi - -# -# verify upload integrity -# - -step "Validating local and remote checksums…" -curl --output remote-${ZIP_FILENAME} ${S3_URL} -LOCAL_CHECKSUM=$( shasum -a 256 -b ${ZIP_FILENAME} | cut -d ' ' -f 1 ) -REMOTE_CHECKSUM=$( shasum -a 256 -b remote-${ZIP_FILENAME} | cut -d ' ' -f 1 ) - -if [ "${LOCAL_CHECKSUM}" == "${REMOTE_CHECKSUM}" ]; then - echo "Checksums match: ${LOCAL_CHECKSUM}" -else - echo "Checksums did not match: ${LOCAL_CHECKSUM} != ${REMOTE_CHECKSUM}" - exit 1 -fi diff --git a/platform/ios/scripts/release-notes-github.md.ejs b/platform/ios/scripts/release-notes-github.md.ejs deleted file mode 100644 index 53c7c842fe6..00000000000 --- a/platform/ios/scripts/release-notes-github.md.ejs +++ /dev/null @@ -1,9 +0,0 @@ -[Changes](https://github.com/mapbox/mapbox-gl-native/compare/ios-v<%-PREVIOUSVERSION%>...ios-v<%-CURRENTVERSION%>) since [Mapbox Maps SDK for iOS v<%-PREVIOUSVERSION%>](https://github.com/mapbox/mapbox-gl-native/releases/tag/ios-v<%-PREVIOUSVERSION%>): - -<%-CHANGELOG-%> - -<% if (isPrerelease) { %> -To install this pre-release via a dependency manager, see our [CocoaPods](https://github.com/mapbox/mapbox-gl-native/blob/ios-v<%-CURRENTVERSION%>/platform/ios/INSTALL.md#CocoaPods) or [Carthage](https://github.com/mapbox/mapbox-gl-native/blob/ios-v<%-CURRENTVERSION%>/platform/ios/INSTALL.md#Carthage) instructions. -<% } -%> - -Documentation is [available online](https://www.mapbox.com/ios-sdk/api/<%-CURRENTVERSION%>/) or as part of the download. diff --git a/platform/ios/scripts/release-notes-jazzy.md.ejs b/platform/ios/scripts/release-notes-jazzy.md.ejs deleted file mode 100644 index 12b7480a2b1..00000000000 --- a/platform/ios/scripts/release-notes-jazzy.md.ejs +++ /dev/null @@ -1,23 +0,0 @@ -# [Mapbox Maps SDK for iOS](https://www.mapbox.com/ios-sdk/) - -The Mapbox Maps SDK for iOS is an open-source framework for embedding interactive map views with scalable, customizable vector maps into Cocoa Touch applications on iOS 9.0 and above using Objective-C, Swift, or Interface Builder. It takes stylesheets that conform to the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/), applies them to vector tiles that conform to the [Mapbox Vector Tile Specification](https://www.mapbox.com/developers/vector-tiles/), and renders them using OpenGL. - -![Mapbox Maps SDK for iOS screenshots](img/screenshot.png) - -For setup information, check out the [Mapbox Maps SDK for iOS homepage](https://www.mapbox.com/ios-sdk/). For detailed usage instructions, read “[First steps with the Mapbox Maps SDK for iOS](https://www.mapbox.com/help/first-steps-ios-sdk/)” and consult the [online examples](https://www.mapbox.com/ios-sdk/examples/). - -If you have any questions, please see [our help page](https://www.mapbox.com/help/). We welcome your [bug reports, feature requests, and contributions](https://github.com/mapbox/mapbox-gl-native/issues/). - -## Changes in version <%-CURRENTVERSION%> - -<%-CURRENTCHANGELOG%> - -## Recent changes - -<% OTHERRELEASES.forEach(function(release) { %> -### <%-release.version%> - -<%-release.changelog%> -<% }) -%> - -See the [full changelog](https://github.com/mapbox/mapbox-gl-native/blob/ios-v<%-CURRENTVERSION%>/platform/ios/CHANGELOG.md) for previous releases. diff --git a/platform/ios/scripts/release-notes.js b/platform/ios/scripts/release-notes.js deleted file mode 100755 index 41caff7fa49..00000000000 --- a/platform/ios/scripts/release-notes.js +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env node - -const fs = require('fs'); -const execSync = require('child_process').execSync; -const ejs = require('ejs'); -const _ = require('lodash'); -const semver = require('semver'); - -const changelogPath = 'platform/ios/CHANGELOG.md'; -const changelog = fs.readFileSync(changelogPath, 'utf8'); - -let outputMode = {}; -switch(process.argv[2]) { - case "jazzy": - outputMode.isJazzy = true; break; - case "github": - default: - outputMode.isGitHub = true; -} - -/* - Find current and immediately previous releases by parsing git tags. -*/ -let currentVersion = execSync('git describe --tags --match=ios-v*.*.* --abbrev=0') - .toString() - .trim() - .replace('ios-v', ''); - -let gitTags = execSync('git tag --list ios-v*.*.*') - .toString() - .split('\n') - .map(function (tag) { - tag = tag.replace('ios-v', '').trim(); - return semver.clean(tag); - }); -let previousVersion = semver.maxSatisfying(gitTags, "<" + currentVersion); - -/* - Parse the raw changelog text and split it into individual releases. - - This regular expression: - - Matches lines starting with "## x.x.x". - - Groups the version number. - - Skips the (optional) release date. - - Groups the changelog content. - - Ends when another "## x.x.x" is found. -*/ -const regex = /^## (\d+\.\d+\.\d+).*?\n(.+?)(?=\n^## \d+\.\d+\.\d+.*?\n)/gms; - -let releaseNotes = []; -while (match = regex.exec(changelog)) { - releaseNotes.push({ - 'version': match[1], - 'changelog': match[2].trim(), - }); -} - -/* - Match the current tag with the most appropriate release notes. -*/ -const versionsInReleaseNotes = _.map(releaseNotes, 'version'); -const bestReleaseNotesForCurrentVersion = semver.minSatisfying(versionsInReleaseNotes, ">=" + currentVersion); -const currentReleaseNotes = _.find(releaseNotes, { version: bestReleaseNotesForCurrentVersion }); - -if (!currentReleaseNotes) { - console.error('Could not find a release section satisfying %s in %s — did you forget to rename the "master" section to %s?', currentVersion, changelogPath, currentVersion.split("-")[0]); - process.exit(1); -} - -/* - Fill and print the release notes template. -*/ -let templatedReleaseNotes; - -if (outputMode.isGitHub) { - templatedReleaseNotes = ejs.render(fs.readFileSync('platform/ios/scripts/release-notes-github.md.ejs', 'utf8'), { - 'CURRENTVERSION': currentVersion, - 'PREVIOUSVERSION': previousVersion, - 'CHANGELOG': currentReleaseNotes.changelog, - 'isPrerelease': semver.prerelease(currentVersion) - }); -} - -if (outputMode.isJazzy) { - const minorReleaseSeries = semver.major(currentVersion) + "." + semver.minor(currentVersion) + ".0"; - const range = ">=" + minorReleaseSeries + " <" + currentVersion; - const otherReleasesInSeries = _.filter(releaseNotes, function(release) { - return semver.satisfies(release.version, range); - }); - - otherReleasesInSeries.forEach(function(release) { - // Bump section headings from h3 to h4. - release.changelog = release.changelog.replace(/^### /gm, '#### '); - }); - - templatedReleaseNotes = ejs.render(fs.readFileSync('platform/ios/scripts/release-notes-jazzy.md.ejs', 'utf8'), { - 'CURRENTVERSION': currentVersion, - 'CURRENTCHANGELOG': currentReleaseNotes.changelog, - 'OTHERRELEASES': otherReleasesInSeries - }); -} - -process.stdout.write(templatedReleaseNotes); diff --git a/platform/ios/scripts/validate-framework-zip.sh b/platform/ios/scripts/validate-framework-zip.sh deleted file mode 100755 index 0bcd094b699..00000000000 --- a/platform/ios/scripts/validate-framework-zip.sh +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env bash -# Created by Cory Dolphin on 03/21/16. -# Copyright (c) 2016 Twitter. All rights reserved. - -# Verifies a zip archive submission of SDKs passes basic static checks for format and contents. -# This test is likely to generate false positives, e.g. even if your SDK passes this, you still must -# test integration of your code fully. - -# Usage: $ ./validate_zip.sh - -set -e - -if [ ! -f "$1" ]; then - printf "No file found at ${1}\n" - printf "Usage: $ ./validate_zip.sh \n"; exit 1; -fi - -function verifyFramework() { - # set -x - local FRAMEWORK_PATH=$1 - local FRAMEWORK_NAME=$(basename $FRAMEWORK_PATH) - local PRODUCT="${FRAMEWORK_NAME%.*}" - local BINARY_PATH="${FRAMEWORK_PATH}/${PRODUCT}" - local HEADER_PATH="${FRAMEWORK_PATH}/Headers" - printf "Found $FRAMEWORK_NAME. Verifying...\n" - - local MODULE_MAP=( $(find $FRAMEWORK_PATH -name "*.modulemap") ) - if [[ -z "$MODULE_MAP" ]]; then - printf "ERROR: No modulemap found in $FRAMEWORK_NAME\n"; - exit 3; - fi - printf "$FRAMEWORK_NAME contains modulemap: ✓\n" - - # Verify there is a modulemap so Swift can use the framework - if grep -q "link" "$MODULE_MAP"; then - printf "$FRAMEWORK_NAME modulemap contains dependent system frameworks ✓\n" - else - printf "Warning: ${FRAMEWORK_NAME} does not list any system library dependencies. Double check all dependent frameworks and libraries are listed. \n"; - fi - - # Verify there is at least one header listed in the module map - if grep -q ".*.h" "$MODULE_MAP"; then - printf "$FRAMEWORK_NAME modulemap contains headers ✓\n"; - else - printf "Error: ${FRAMEWORK_NAME} does not list any headers in the modulemap\n"; - exit 4; - fi - - # Verify there is at least a headers folder - if [[ ! -d "$HEADER_PATH" ]]; then - printf "ERROR: Headers not not found in ${FRAMEWORK_NAME}\n"; - exit 5; - fi - - # Verify the static lib at least has simulator and the two common ARM architectures - local PRESENT_ARCHITECTURES=$( xcrun lipo -info "${BINARY_PATH}" ) - for arch in "armv7" "arm64" "x86_64"; do - if [[ ! $PRESENT_ARCHITECTURES == *$arch* ]]; then - printf "ERROR: Architecture ${arch} not found in ${FRAMEWORK_NAME}\n"; - exit 6; - fi - done - printf "$FRAMEWORK_NAME contains simulator and device architectures: ✓\n" - - # Verify there are at least some bitcode segments in the rmv7 and arm64 slices - # Note, this is not conclusive, it is possible some symbols are missing the segment - for arch in "armv7" "arm64"; do - local SYMBOLS=$(otool -l -arch "${arch}" "${BINARY_PATH}") - if [[ ! $SYMBOLS == *"LLVM"* ]]; then - printf "ERROR: Bitcode segments not found in ${FRAMEWORK_NAME}. Users will fail to archive their builds \n"; - exit 7; - fi - done - printf "$FRAMEWORK_NAME contains bitcode: ✓\n" - - # Verify there is a plist file - local PLIST_PATH=( $(find $FRAMEWORK_PATH -name Info.plist) ) - if [[ -z "$PLIST_PATH" ]]; then - printf "ERROR: No Info.plist found in $FRAMEWORK_NAME\n" - exit 8; - fi - printf "$FRAMEWORK_NAME contains Info.plist: ✓\n" - - # Verify there is a bundle identifier in Info.plist - # And verify it does not contain any vestigial string templating - local BUNDLE_NAME=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "${PLIST_PATH}") - if [[ -z "$BUNDLE_NAME" ]]; then - printf "ERROR: Info.plist not found in $FRAMEWORK_NAME or CFBundleIdentifier not set\n"; - exit 9; - elif [[ "$BUNDLE_NAME" == *"$"* ]]; then - printf "ERROR: CFBundleIdentifier is invalid: $BUNDLE_NAME\n"; - exit 10; - else - printf "$FRAMEWORK_NAME has bundle: $BUNDLE_NAME ✓\n" - fi - - # Verify there is a bundle version in the Info.plist - local BUNDLE_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${PLIST_PATH}") - if [[ -z "$BUNDLE_VERSION" ]]; then - printf "ERROR: No CFBundleShortVersionString found in $FRAMEWORK_NAME\n"; - exit 11; - else - printf "$FRAMEWORK_NAME has version: $BUNDLE_VERSION ✓\n" - fi - - printf "===========================================\n" - printf "Analyzed $PRODUCT version $BUNDLE_VERSION. \n" - printf "Basic static verifications passed. 🚀🚀🚀 \n" - printf "Please perform final verification testing \n\n" -} - -# Extract the zip archive to a temporary location -TEMP_DIR=$(mktemp -d /tmp/fabric_framework_validation.XXXXX) -printf "Unzipping $(basename "$1") to $TEMP_DIR\n" -unzip "$1" -d "$TEMP_DIR" &> /dev/null - -# Find frameworks and ensure they are at the top level, e.g. NOT nested within a sub directory -printf "Scanning for frameworks...\n" -FRAMEWORKS=( $(find "$TEMP_DIR" -name "*.framework" -maxdepth 1) ) -if [ -z "$FRAMEWORKS" ]; then - printf "ERROR: No frameworks found at the top level within the zip archive."; - exit 2; -fi - -# Verify each framework found individually -for framework in "${FRAMEWORKS[@]}"; do - verifyFramework "$framework" - printf "" -done - -rm -r "$TEMP_DIR" diff --git a/platform/ios/src/MGLAnnotationContainerView.h b/platform/ios/src/MGLAnnotationContainerView.h deleted file mode 100644 index ccec3052a68..00000000000 --- a/platform/ios/src/MGLAnnotationContainerView.h +++ /dev/null @@ -1,17 +0,0 @@ -#import - -#import "MGLTypes.h" - -@class MGLAnnotationView; - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLAnnotationContainerView : UIView - -+ (instancetype)annotationContainerViewWithAnnotationContainerView:(MGLAnnotationContainerView *)annotationContainerView; - -- (void)addSubviews:(NSArray *)subviews; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLAnnotationContainerView.m b/platform/ios/src/MGLAnnotationContainerView.m deleted file mode 100644 index 6c82a1836d7..00000000000 --- a/platform/ios/src/MGLAnnotationContainerView.m +++ /dev/null @@ -1,52 +0,0 @@ -#import "MGLAnnotationContainerView.h" -#import "MGLAnnotationView.h" - -@interface MGLAnnotationContainerView () - -@property (nonatomic) NSMutableArray *annotationViews; - -@end - -@implementation MGLAnnotationContainerView - -- (instancetype)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) - { - _annotationViews = [NSMutableArray array]; - } - return self; -} - -+ (instancetype)annotationContainerViewWithAnnotationContainerView:(nonnull MGLAnnotationContainerView *)annotationContainerView -{ - MGLAnnotationContainerView *newAnnotationContainerView = [[MGLAnnotationContainerView alloc] initWithFrame:annotationContainerView.frame]; - [newAnnotationContainerView addSubviews:annotationContainerView.subviews]; - return newAnnotationContainerView; -} - -- (void)addSubviews:(NSArray *)subviews -{ - for (MGLAnnotationView *view in subviews) - { - [self addSubview:view]; - [self.annotationViews addObject:view]; - } -} - -#pragma mark UIAccessibility methods - -- (UIAccessibilityTraits)accessibilityTraits { - return UIAccessibilityTraitAdjustable; -} - -- (void)accessibilityIncrement { - [self.superview.superview accessibilityIncrement]; -} - -- (void)accessibilityDecrement { - [self.superview.superview accessibilityDecrement]; -} - -@end diff --git a/platform/ios/src/MGLAnnotationContainerView_Private.h b/platform/ios/src/MGLAnnotationContainerView_Private.h deleted file mode 100644 index 9dce54842d9..00000000000 --- a/platform/ios/src/MGLAnnotationContainerView_Private.h +++ /dev/null @@ -1,14 +0,0 @@ -#import "MGLAnnotationContainerView.h" -#import "MGLAnnotationView.h" - -@class MGLAnnotationView; - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLAnnotationContainerView (Private) - -@property (nonatomic) NSMutableArray *annotationViews; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLAnnotationImage.h b/platform/ios/src/MGLAnnotationImage.h deleted file mode 100644 index 10b13a58c38..00000000000 --- a/platform/ios/src/MGLAnnotationImage.h +++ /dev/null @@ -1,62 +0,0 @@ -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The `MGLAnnotationImage` class is responsible for presenting point-based - annotations visually on a map view. Annotation image objects wrap `UIImage` - objects and may be recycled later and put into a reuse queue that is maintained - by the map view. - - #### Related examples - See the - Mark a place on the map with an image example to learn how use an image - as a marker using `MGLAnnotationImage`. - */ -MGL_EXPORT -@interface MGLAnnotationImage : NSObject - -#pragma mark Initializing and Preparing the Image Object - -/** - Initializes and returns a new annotation image object. - - @param image The image to be displayed for the annotation. - @param reuseIdentifier The string that identifies that this annotation image is - reusable. - @return The initialized annotation image object or `nil` if there was a problem - initializing the object. - */ -+ (instancetype)annotationImageWithImage:(UIImage *)image reuseIdentifier:(NSString *)reuseIdentifier; - -#pragma mark Getting and Setting Attributes - -/** The image to be displayed for the annotation. */ -@property (nonatomic, strong, nullable) UIImage *image; - -/** - The string that identifies that this annotation image is reusable. (read-only) - - You specify the reuse identifier when you create the image object. You use this - type later to retrieve an annotation image object that was created previously - but which is currently unused because its annotation is not on screen. - - If you define distinctly different types of annotations (with distinctly - different annotation images to go with them), you can differentiate between the - annotation types by specifying different reuse identifiers for each one. - */ -@property (nonatomic, readonly) NSString *reuseIdentifier; - -/** - A Boolean value indicating whether the annotation is enabled. - - The default value of this property is `YES`. If the value of this property is - `NO`, the annotation image ignores touch events and cannot be selected. - */ -@property (nonatomic, getter=isEnabled) BOOL enabled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLAnnotationImage.m b/platform/ios/src/MGLAnnotationImage.m deleted file mode 100644 index 31b67c7a3ce..00000000000 --- a/platform/ios/src/MGLAnnotationImage.m +++ /dev/null @@ -1,77 +0,0 @@ -#import "MGLAnnotationImage_Private.h" -#import "MGLLoggingConfiguration_Private.h" - -@interface MGLAnnotationImage () - -@property (nonatomic, strong) NSString *reuseIdentifier; -@property (nonatomic, strong, nullable) NSString *styleIconIdentifier; - -@property (nonatomic, weak) id delegate; - -@end - -@implementation MGLAnnotationImage - -+ (instancetype)annotationImageWithImage:(UIImage *)image reuseIdentifier:(NSString *)reuseIdentifier -{ - return [[self alloc] initWithImage:image reuseIdentifier:reuseIdentifier]; -} - -- (instancetype)initWithImage:(UIImage *)image reuseIdentifier:(NSString *)reuseIdentifier -{ - MGLLogDebug(@"Initializing with image size: %@ reuseIdentifier: %@", NSStringFromCGSize(image.size), reuseIdentifier); - self = [super init]; - - if (self) - { - _image = image; - _reuseIdentifier = [reuseIdentifier copy]; - _enabled = YES; - } - - return self; -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder { - MGLLogInfo(@"Initializing with coder."); - if (self = [super init]) { - _image = [decoder decodeObjectOfClass:[UIImage class] forKey:@"image"]; - _reuseIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@"reuseIdentifier"]; - _enabled = [decoder decodeBoolForKey:@"enabled"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:_image forKey:@"image"]; - [coder encodeObject:_reuseIdentifier forKey:@"reuseIdentifier"]; - [coder encodeBool:_enabled forKey:@"enabled"]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) return YES; - if (![other isKindOfClass:[MGLAnnotationImage class]]) return NO; - - MGLAnnotationImage *otherAnnotationImage = other; - - return ((!_reuseIdentifier && !otherAnnotationImage.reuseIdentifier) - || [_reuseIdentifier isEqualToString:otherAnnotationImage.reuseIdentifier]) - && _enabled == otherAnnotationImage.enabled - && (_image == otherAnnotationImage.image || [UIImagePNGRepresentation(_image) isEqualToData:UIImagePNGRepresentation(otherAnnotationImage.image)]); -} - -- (NSUInteger)hash { - return _reuseIdentifier.hash + _enabled + _image.hash; -} - -- (void)setImage:(UIImage *)image { - MGLLogDebug(@"Setting image: %@", image); - _image = image; - [self.delegate annotationImageNeedsRedisplay:self]; -} - -@end diff --git a/platform/ios/src/MGLAnnotationImage_Private.h b/platform/ios/src/MGLAnnotationImage_Private.h deleted file mode 100644 index dcd8a49bf91..00000000000 --- a/platform/ios/src/MGLAnnotationImage_Private.h +++ /dev/null @@ -1,21 +0,0 @@ -#import "MGLAnnotationImage.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol MGLAnnotationImageDelegate - -@required -- (void)annotationImageNeedsRedisplay:(MGLAnnotationImage *)annotationImage; - -@end - -@interface MGLAnnotationImage (Private) - -/// Unique identifier of the sprite image used by the style to represent the receiver’s `image`. -@property (nonatomic, strong, nullable) NSString *styleIconIdentifier; - -@property (nonatomic, weak) id delegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLAnnotationView.h b/platform/ios/src/MGLAnnotationView.h deleted file mode 100644 index afedeb79082..00000000000 --- a/platform/ios/src/MGLAnnotationView.h +++ /dev/null @@ -1,286 +0,0 @@ -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol MGLAnnotation; - -/** These constants indicate the current drag state of an annotation view. */ -typedef NS_ENUM(NSUInteger, MGLAnnotationViewDragState) { - /** - The view is not involved in a drag operation. - */ - MGLAnnotationViewDragStateNone = 0, - /** - An action occurred that indicated the view should begin dragging. - - The map view automatically moves draggable annotation views to this state - in response to the dragging the view after pressing and holding on it. - */ - MGLAnnotationViewDragStateStarting, - /** - The view is in the midst of a drag operation and is actively tracking the - user’s gesture. - */ - MGLAnnotationViewDragStateDragging, - /** - An action occurred that indicated the view should cancel the drag - operation. - */ - MGLAnnotationViewDragStateCanceling, - /** - An action occurred that indicated the view was dropped by the user. - - The map view automatically moves annotation views to this state in response - to the user lifting their finger at the end of a drag gesture. - */ - MGLAnnotationViewDragStateEnding, -}; - -/** - The `MGLAnnotationView` class is responsible for marking a point annotation - with a view. Annotation views represent an annotation object, which is an - object that corresponds to the `MGLAnnotation` protocol. When an annotation’s - geographic coordinate is visible in the map view, the map view asks its - delegate to a corresponding annotation view. If an annotation view is created - with a reuse identifier, the map view may recycle the view when it goes - offscreen. - - Annotation views are compatible with UIKit, Core Animation, and other Cocoa - Touch frameworks. On the other hand, if you do not need animation or - interactivity such as dragging, you can use an `MGLAnnotationImage` instead to - conserve memory and optimize drawing performance. - */ -MGL_EXPORT -@interface MGLAnnotationView : UIView - -#pragma mark Initializing and Preparing the View - -/** - Initializes and returns a new annotation view object. - - The reuse identifier provides a way for you to improve performance by recycling - annotation views as they enter and leave the map’s viewport. As an annotation - leaves the viewport, the map view moves its associated view to a reuse queue. - When a new annotation becomes visible, you can request a view for that - annotation by passing the appropriate reuse identifier string to the - `-[MGLMapView dequeueReusableAnnotationViewWithIdentifier:]` method. - - @param reuseIdentifier A unique string identifier for this view that allows you - to reuse this view with multiple similar annotations. You can set this - parameter to `nil` if you don’t intend to reuse the view, but it is a good - idea in general to specify a reuse identifier to avoid creating redundant - views. - @return The initialized annotation view object. - */ -- (instancetype)initWithReuseIdentifier:(nullable NSString *)reuseIdentifier; - -/** - Initializes and returns a new annotation view object. - - Providing an annotation allows you to explicitly associate the annotation instance - with the new view and, in custom subclasses of `MGLAnnotationView`, customize the view - based on properties of the annotation instance in an overridden initializer. However, - annotation views that are reused will not necessarily be associated with the - same annotation they were initialized with. Also, annotation views that are in - the reuse queue will have a nil value for the annotation property. Passing an annotation - instance to the view is optional and the map view will automatically associate annotations - with views when views are provided to the map via the `-[MGLMapViewDelegate mapView:viewForAnnotation:]` - method. - - The reuse identifier provides a way for you to improve performance by recycling - annotation views as they enter and leave the map’s viewport. As an annotation - leaves the viewport, the map view moves its associated view to a reuse queue. - When a new annotation becomes visible, you can request a view for that - annotation by passing the appropriate reuse identifier string to the - `-[MGLMapView dequeueReusableAnnotationViewWithIdentifier:]` method. - - @param annotation The annotation object to associate with the new view. - @param reuseIdentifier A unique string identifier for this view that allows you - to reuse this view with multiple similar annotations. You can set this - parameter to `nil` if you don’t intend to reuse the view, but it is a good - idea in general to specify a reuse identifier to avoid creating redundant - views. - @return The initialized annotation view object. - */ -- (instancetype)initWithAnnotation:(nullable id)annotation reuseIdentifier:(nullable NSString *)reuseIdentifier; - -/** - Called when the view is removed from the reuse queue. - - The default implementation of this method does nothing. You can override it in - your custom annotation view implementation to put the view in a known state - before it is returned to your map view delegate. - */ -- (void)prepareForReuse; - -/** - The annotation object currently associated with the view. - - You should not change the value of this property directly. This property - contains a non-`nil` value while the annotation view is visible on the map. If - the view is queued, waiting to be reused, the value is `nil`. - */ -@property (nonatomic, nullable) id annotation; - -/** - The string that identifies that this annotation view is reusable. - - You specify the reuse identifier when you create the view. You use the - identifier later to retrieve an annotation view that was created previously but - which is currently unused because its annotation is not on-screen. - - If you define distinctly different types of annotations (with distinctly - different annotation views to go with them), you can differentiate between the - annotation types by specifying different reuse identifiers for each one. - */ -@property (nonatomic, readonly, nullable) NSString *reuseIdentifier; - -#pragma mark Configuring the Appearance - -/** - The offset, measured in points, at which to place the center of the view. - - By default, the center point of an annotation view is placed at the geographic - coordinate point of the associated annotation. If you do not want the view to - be centered, you can use this property to reposition the view. The offset’s - `dx` and `dy` values are measured in points. Positive offset values move the - annotation view down and to the right, while negative values move it up and to - the left. - - Set the offset if the annotation view’s visual center point is somewhere other - than the logical center of the view. For example, the view may contain an image - that depicts a downward-pointing pushpin or thumbtack, with the tip positioned - at the center-bottom of the view. In that case, you would set the offset’s `dx` - to zero and its `dy` to half the height of the view. - */ -@property (nonatomic) CGVector centerOffset; - -/** - A Boolean value that determines whether the annotation view grows and shrinks - as the distance between the viewpoint and the annotation view changes on a - tilted map. - - When the value of this property is `YES` and the map is tilted, the annotation - view appears smaller if it is towards the top of the view (closer to the - horizon) and larger if it is towards the bottom of the view (closer to the - viewpoint). This is also the behavior of `MGLAnnotationImage` objects. When the - value of this property is `NO` or the map’s pitch is zero, the annotation view - remains the same size regardless of its position on-screen. - - The default value of this property is `NO`. Keep this property set to `NO` if - the view’s legibility is important. - - @note Scaling many on-screen annotation views can contribute to poor map - performance. Consider keeping this property disabled if your use case - involves hundreds or thousands of annotation views. - */ -@property (nonatomic, assign) BOOL scalesWithViewingDistance; - -/** - A Boolean value that determines whether the annotation view rotates together - with the map. - - When the value of this property is `YES` and the map is rotated, the annotation - view rotates. This is also the behavior of `MGLAnnotationImage` objects. When the - value of this property is `NO` the annotation has its rotation angle fixed. - - The default value of this property is `NO`. Set this property to `YES` if the - view’s rotation is important. - */ -@property (nonatomic, assign) BOOL rotatesToMatchCamera; - -#pragma mark Managing the Selection State - -/** - A Boolean value indicating whether the annotation view is currently selected. - - You should not set the value of this property directly. If the property is set - to `YES`, the annotation view is displaying a callout. - - By default, this property is set to `NO` and becomes `YES` when the user taps - the view. Selecting another annotation, whether it is associated with an - `MGLAnnotationView` or `MGLAnnotationImage` object, deselects any currently - selected view. - - Setting this property changes the view’s appearance to reflect the new value - immediately. If you want the change to be animated, use the - `-setSelected:animated:` method instead. - */ -@property (nonatomic, assign, getter=isSelected) BOOL selected; - -/** - Sets the selection state of the annotation view with an optional animation. - - You should not call this method directly. A map view calls this method in - response to user interactions with the annotation. Subclasses may override this - method in order to customize the appearance of the view depending on its - selection state. - - @param selected `YES` if the view should display itself as selected; `NO` - if it should display itself as unselected. - @param animated `YES` if the change in selection state is animated; `NO` if the - change is immediate. - - #### Related examples - See the Annotation views example to learn how to modify an - `MGLAnnotationView`'s behavior when it is selected. - */ -- (void)setSelected:(BOOL)selected animated:(BOOL)animated; - -/* - A Boolean value indicating whether the annotation is enabled. - - The default value of this property is `YES`. If the value of this property is - `NO`, the annotation view ignores touch events and cannot be selected. - Subclasses may also customize the appearance of the view depending on its - enabled state. - */ -@property (nonatomic, assign, getter=isEnabled) BOOL enabled; - -#pragma mark Supporting Drag Operations - -/** - A Boolean value indicating whether the annotation view is draggable. - - If this property is set to `YES`, the user can drag the annotation after - pressing and holding the view, and the associated annotation object must also - implement the `-setCoordinate:` method. The default value of this property is - `NO`. - - Setting this property to `YES` lets the map view know that the annotation is - always draggable. In other words, you cannot conditionalize drag operations by - attempting to stop an operation that has already been initiated; doing so can - lead to undefined behavior. Once begun, the drag operation should always - continue to completion. - - #### Related examples - See the Draggable annotation views to learn how to enable users to drag - `MGLAnnotationView` objects on your map. - */ -@property (nonatomic, assign, getter=isDraggable) BOOL draggable; - -/** - The current drag state of the annotation view. - - All states are handled automatically when the `draggable` property is set to - `YES`. To perform a custom animation in response to a change to this property, - override the `-setDragState:animated:` method. - */ -@property (nonatomic, readonly) MGLAnnotationViewDragState dragState; - -/** - Sets the current drag state for the annotation view. - - You can override this method to animate a custom annotation view as the user - drags it. As the system detects user actions that would indicate a drag, it - calls this method to update the drag state. - */ -- (void)setDragState:(MGLAnnotationViewDragState)dragState animated:(BOOL)animated NS_REQUIRES_SUPER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLAnnotationView.mm b/platform/ios/src/MGLAnnotationView.mm deleted file mode 100644 index 3a2aa60f6c7..00000000000 --- a/platform/ios/src/MGLAnnotationView.mm +++ /dev/null @@ -1,387 +0,0 @@ -#import "MGLAnnotationView.h" -#import "MGLAnnotationView_Private.h" -#import "MGLMapView_Private.h" -#import "MGLCalloutView.h" -#import "MGLAnnotation.h" -#import "MGLPointAnnotation.h" -#import "MGLLoggingConfiguration_Private.h" - -#import "NSBundle+MGLAdditions.h" -#import "NSValue+MGLAdditions.h" - -#include - -@interface MGLAnnotationView () - -@property (nonatomic, readwrite, nullable) NSString *reuseIdentifier; -@property (nonatomic, readwrite) CATransform3D lastAppliedScaleTransform; -@property (nonatomic, readwrite) CGFloat lastPitch; -@property (nonatomic, readwrite) CATransform3D lastAppliedRotationTransform; -@property (nonatomic, readwrite) CGFloat lastDirection; -@property (nonatomic, weak) UIPanGestureRecognizer *panGestureRecognizer; -@property (nonatomic, weak) UILongPressGestureRecognizer *longPressRecognizer; -@property (nonatomic, weak) MGLMapView *mapView; - -@end - -@implementation MGLAnnotationView - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier { - MGLLogDebug(@"Initializing with identifier: %@", reuseIdentifier); - self = [super initWithFrame:CGRectZero]; - if (self) { - [self commonInitWithAnnotation:nil reuseIdentifier:reuseIdentifier]; - } - return self; -} - -- (instancetype)initWithAnnotation:(nullable id)annotation reuseIdentifier:(nullable NSString *)reuseIdentifier { - MGLLogDebug(@"Initializing with annotation: %@ reuseIdentifier: %@", annotation, reuseIdentifier); - self = [super initWithFrame:CGRectZero]; - if (self) { - [self commonInitWithAnnotation:annotation reuseIdentifier:reuseIdentifier]; - } - return self; -} - -- (void)commonInitWithAnnotation:(nullable id)annotation reuseIdentifier:(nullable NSString *)reuseIdentifier { - _lastAppliedScaleTransform = CATransform3DIdentity; - _lastAppliedRotationTransform = CATransform3DIdentity; - _annotation = annotation; - _reuseIdentifier = [reuseIdentifier copy]; - _enabled = YES; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder { - MGLLogInfo(@"Initializing with coder."); - if (self = [super initWithCoder:decoder]) { - _reuseIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@"reuseIdentifier"]; - _annotation = [decoder decodeObjectOfClass:[NSObject class] forKey:@"annotation"]; - _centerOffset = [decoder decodeCGVectorForKey:@"centerOffset"]; - _scalesWithViewingDistance = [decoder decodeBoolForKey:@"scalesWithViewingDistance"]; - _rotatesToMatchCamera = [decoder decodeBoolForKey:@"rotatesToMatchCamera"]; - _selected = [decoder decodeBoolForKey:@"selected"]; - _enabled = [decoder decodeBoolForKey:@"enabled"]; - self.draggable = [decoder decodeBoolForKey:@"draggable"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [super encodeWithCoder:coder]; - [coder encodeObject:_reuseIdentifier forKey:@"reuseIdentifier"]; - [coder encodeObject:_annotation forKey:@"annotation"]; - [coder encodeCGVector:_centerOffset forKey:@"centerOffset"]; - [coder encodeBool:_scalesWithViewingDistance forKey:@"scalesWithViewingDistance"]; - [coder encodeBool:_rotatesToMatchCamera forKey:@"rotatesToMatchCamera"]; - [coder encodeBool:_selected forKey:@"selected"]; - [coder encodeBool:_enabled forKey:@"enabled"]; - [coder encodeBool:_draggable forKey:@"draggable"]; -} - -- (void)prepareForReuse -{ - // Intentionally left blank. The default implementation of this method does nothing. -} - -- (void)setCenterOffset:(CGVector)centerOffset -{ - MGLLogDebug(@"Setting centerOffset: %@", NSStringFromCGVector(centerOffset)); - _centerOffset = centerOffset; - self.center = self.center; -} - -- (void)setSelected:(BOOL)selected -{ - MGLLogDebug(@"Setting selected: %@", MGLStringFromBOOL(selected)); - [self setSelected:selected animated:NO]; -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - MGLLogDebug(@"Setting selected: %@ animated: %@", MGLStringFromBOOL(selected), MGLStringFromBOOL(animated)); - [self willChangeValueForKey:@"selected"]; - _selected = selected; - [self didChangeValueForKey:@"selected"]; -} - -- (CGPoint)center -{ - CGPoint center = super.center; - center.x -= _centerOffset.dx; - center.y -= _centerOffset.dy; - return center; -} - -- (void)setCenter:(CGPoint)center -{ - MGLLogDebug(@"Setting center: %@", NSStringFromCGPoint(center)); - center.x += _centerOffset.dx; - center.y += _centerOffset.dy; - - super.center = center; - [self updateScaleTransformForViewingDistance]; - [self updateRotateTransform]; -} - -- (void)setScalesWithViewingDistance:(BOOL)scalesWithViewingDistance -{ - MGLLogDebug(@"Setting scaleWithViewingDistance: %@", MGLStringFromBOOL(scalesWithViewingDistance)); - if (_scalesWithViewingDistance != scalesWithViewingDistance) - { - _scalesWithViewingDistance = scalesWithViewingDistance; - [self updateScaleTransformForViewingDistance]; - } -} - -- (void)updateScaleTransformForViewingDistance -{ - if (self.scalesWithViewingDistance == NO || self.dragState == MGLAnnotationViewDragStateDragging) return; - - CGFloat superviewHeight = CGRectGetHeight(self.superview.frame); - if (superviewHeight > 0.0) { - // Find the maximum amount of scale reduction to apply as the view's center moves from the top - // of the superview to the bottom. For example, if this view's center has moved 25% of the way - // from the top of the superview towards the bottom then the maximum scale reduction is 1 - .25 - // or 75%. The range goes from a maximum of 100% to 0% as the view moves from the top to the bottom - // along the y axis of its superview. - CGFloat maxScaleReduction = 1.0 - self.center.y / superviewHeight; - - // Since it is possible for the map view to report a pitch less than 0 due to the nature of - // how the gesture information is captured, the value is guarded with MAX. - CGFloat pitch = MAX(self.mapView.camera.pitch, 0); - - // Return early if the map view currently has no pitch and was not previously pitched. - if (!pitch && !_lastPitch) return; - _lastPitch = pitch; - - // The pitch intensity represents how much the map view is actually pitched compared to - // what is possible. The value will range from 0% (not pitched at all) to 100% (pitched as much - // as the map view will allow). The map view's maximum pitch is defined in `mbgl::util::PITCH_MAX`. - CGFloat pitchIntensity = pitch / MGLDegreesFromRadians(mbgl::util::PITCH_MAX); - - // The pitch adjusted scale is the inverse proportion of the maximum possible scale reduction - // multiplied by the pitch intensity. For example, if the maximum scale reduction is 75% and the - // map view is 50% pitched then the annotation view should be reduced by 37.5% (.75 * .5). The - // reduction is then normalized for a scale of 1.0. - CGFloat pitchAdjustedScale = 1.0 - maxScaleReduction * pitchIntensity; - - // We keep track of each viewing distance scale transform that we apply. Each iteration, - // we can account for it so that we don't get cumulative scaling every time we move. - // We also avoid clobbering any existing transform passed in by the client or this SDK. - CATransform3D undoOfLastScaleTransform = CATransform3DInvert(_lastAppliedScaleTransform); - CATransform3D newScaleTransform = CATransform3DMakeScale(pitchAdjustedScale, pitchAdjustedScale, 1); - CATransform3D effectiveTransform = CATransform3DConcat(undoOfLastScaleTransform, newScaleTransform); - self.layer.transform = CATransform3DConcat(self.layer.transform, effectiveTransform); - _lastAppliedScaleTransform = newScaleTransform; - } -} - -- (void)setRotatesToMatchCamera:(BOOL)rotatesToMatchCamera -{ - MGLLogDebug(@"Setting rotatesToMatchCamera: %@", MGLStringFromBOOL(rotatesToMatchCamera)); - if (_rotatesToMatchCamera != rotatesToMatchCamera) - { - _rotatesToMatchCamera = rotatesToMatchCamera; - [self updateRotateTransform]; - } -} - -- (void)updateRotateTransform -{ - if (self.rotatesToMatchCamera == NO) return; - - CGFloat direction = -MGLRadiansFromDegrees(self.mapView.direction); - - // Return early if the map view has the same rotation as the already-applied transform. - if (direction == _lastDirection) return; - _lastDirection = direction; - - // We keep track of each rotation transform that we apply. Each iteration, - // we can account for it so that we don't get cumulative rotation every time we move. - // We also avoid clobbering any existing transform passed in by the client or this SDK. - CATransform3D undoOfLastRotationTransform = CATransform3DInvert(_lastAppliedRotationTransform); - CATransform3D newRotationTransform = CATransform3DMakeRotation(direction, 0, 0, 1); - CATransform3D effectiveTransform = CATransform3DConcat(undoOfLastRotationTransform, newRotationTransform); - self.layer.transform = CATransform3DConcat(self.layer.transform, effectiveTransform); - _lastAppliedRotationTransform = newRotationTransform; -} - -#pragma mark - Draggable - -- (void)setDraggable:(BOOL)draggable -{ - MGLLogDebug(@"Setting draggable: %@", MGLStringFromBOOL(draggable)); - [self willChangeValueForKey:@"draggable"]; - _draggable = draggable; - [self didChangeValueForKey:@"draggable"]; - - if (draggable) - { - [self enableDrag]; - } - else - { - [self disableDrag]; - } -} - -- (void)enableDrag -{ - if (!_longPressRecognizer) - { - UILongPressGestureRecognizer *recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; - recognizer.delegate = self; - [self addGestureRecognizer:recognizer]; - _longPressRecognizer = recognizer; - } - - if (!_panGestureRecognizer) - { - UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; - recognizer.delegate = self; - [self addGestureRecognizer:recognizer]; - _panGestureRecognizer = recognizer; - } -} - -- (void)disableDrag -{ - [self removeGestureRecognizer:_longPressRecognizer]; - [self removeGestureRecognizer:_panGestureRecognizer]; -} - -- (void)handleLongPress:(UILongPressGestureRecognizer *)sender -{ - switch (sender.state) { - case UIGestureRecognizerStateBegan: - self.dragState = MGLAnnotationViewDragStateStarting; - break; - case UIGestureRecognizerStateChanged: - self.dragState = MGLAnnotationViewDragStateDragging; - break; - case UIGestureRecognizerStateCancelled: - self.dragState = MGLAnnotationViewDragStateCanceling; - break; - case UIGestureRecognizerStateEnded: - self.dragState = MGLAnnotationViewDragStateEnding; - break; - case UIGestureRecognizerStateFailed: - self.dragState = MGLAnnotationViewDragStateNone; - break; - case UIGestureRecognizerStatePossible: - break; - } -} - -- (void)handlePan:(UIPanGestureRecognizer *)sender -{ - self.center = [sender locationInView:sender.view.superview]; - - if (sender.state == UIGestureRecognizerStateEnded) { - self.dragState = MGLAnnotationViewDragStateNone; - } -} - -- (void)setDragState:(MGLAnnotationViewDragState)dragState -{ - MGLLogDebug(@"Setting dragState: %lu", (unsigned long)dragState); - [self setDragState:dragState animated:YES]; -} - -- (void)setDragState:(MGLAnnotationViewDragState)dragState animated:(BOOL)animated -{ - MGLLogDebug(@"Setting dragState: %lu animated: %@", (unsigned long)dragState, MGLStringFromBOOL(animated)); - [self willChangeValueForKey:@"dragState"]; - _dragState = dragState; - [self didChangeValueForKey:@"dragState"]; - - if (dragState == MGLAnnotationViewDragStateStarting) - { - [self.mapView.calloutViewForSelectedAnnotation dismissCalloutAnimated:animated]; - [self.superview bringSubviewToFront:self]; - } - else if (dragState == MGLAnnotationViewDragStateCanceling) - { - if (!self.annotation) { - [NSException raise:NSInvalidArgumentException - format:@"Annotation property should not be nil."]; - } - self.panGestureRecognizer.enabled = NO; - self.longPressRecognizer.enabled = NO; - self.center = [self.mapView convertCoordinate:self.annotation.coordinate toPointToView:self.mapView]; - self.panGestureRecognizer.enabled = YES; - self.longPressRecognizer.enabled = YES; - self.dragState = MGLAnnotationViewDragStateNone; - } - else if (dragState == MGLAnnotationViewDragStateEnding) - { - if ([self.annotation respondsToSelector:@selector(setCoordinate:)]) - { - CLLocationCoordinate2D coordinate = [self.mapView convertPoint:self.center toCoordinateFromView:self.mapView]; - [(NSObject *)self.annotation setValue:[NSValue valueWithMGLCoordinate:coordinate] forKey:@"coordinate"]; - } - } -} - -- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer -{ - BOOL isDragging = self.dragState == MGLAnnotationViewDragStateDragging; - - if (gestureRecognizer == _panGestureRecognizer && !(isDragging)) - { - return NO; - } - - return YES; -} - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer -{ - return otherGestureRecognizer == _longPressRecognizer || otherGestureRecognizer == _panGestureRecognizer; -} - -#pragma mark UIAccessibility methods - -- (BOOL)isAccessibilityElement { - return !self.hidden; -} - -- (UIAccessibilityTraits)accessibilityTraits { - return UIAccessibilityTraitButton | UIAccessibilityTraitAdjustable; -} - -- (NSString *)accessibilityLabel { - return [self.annotation respondsToSelector:@selector(title)] ? self.annotation.title : super.accessibilityLabel; -} - -- (NSString *)accessibilityValue { - return [self.annotation respondsToSelector:@selector(subtitle)] ? self.annotation.subtitle : super.accessibilityValue; -} - -- (NSString *)accessibilityHint { - return NSLocalizedStringWithDefaultValue(@"ANNOTATION_A11Y_HINT", nil, nil, @"Shows more info", @"Accessibility hint"); -} - -- (CGRect)accessibilityFrame { - CGRect accessibilityFrame = self.frame; - CGRect minimumFrame = CGRectInset({ self.center, CGSizeZero }, - -MGLAnnotationAccessibilityElementMinimumSize.width / 2, - -MGLAnnotationAccessibilityElementMinimumSize.height / 2); - accessibilityFrame = CGRectUnion(accessibilityFrame, minimumFrame); - return accessibilityFrame; -} - -- (void)accessibilityIncrement { - [self.superview accessibilityIncrement]; -} - -- (void)accessibilityDecrement { - [self.superview accessibilityDecrement]; -} - -@end diff --git a/platform/ios/src/MGLAnnotationView_Private.h b/platform/ios/src/MGLAnnotationView_Private.h deleted file mode 100644 index c4695051c50..00000000000 --- a/platform/ios/src/MGLAnnotationView_Private.h +++ /dev/null @@ -1,15 +0,0 @@ -#import "MGLAnnotationView.h" -#import "MGLAnnotation.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MGLMapView; - -@interface MGLAnnotationView (Private) - -@property (nonatomic, readwrite, nullable) NSString *reuseIdentifier; -@property (nonatomic, weak) MGLMapView *mapView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLCalloutView.h b/platform/ios/src/MGLCalloutView.h deleted file mode 100644 index 71bae71d07f..00000000000 --- a/platform/ios/src/MGLCalloutView.h +++ /dev/null @@ -1,140 +0,0 @@ -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol MGLCalloutViewDelegate; -@protocol MGLAnnotation; - -/** - A protocol for a `UIView` subclass that displays information about a selected - annotation near that annotation. - - To receive updates from an object that conforms to the `MGLCalloutView` protocol, - use the optional methods available in the `MGLCalloutViewDelegate` protocol. - - #### Related examples - See the - Display custom views as callouts example to learn how to customize an - `MGLCalloutView`. - */ -@protocol MGLCalloutView - -/** - An object conforming to the `MGLAnnotation` protocol whose details this callout - view displays. - */ -@property (nonatomic, strong) id representedObject; - -/** - A view that the user may tap to perform an action. This view is conventionally - positioned on the left side of the callout view. - */ -@property (nonatomic, strong) UIView *leftAccessoryView; - -/** - A view that the user may tap to perform an action. This view is conventionally - positioned on the right side of the callout view. - */ -@property (nonatomic, strong) UIView *rightAccessoryView; - -/** - An object conforming to the `MGLCalloutViewDelegate` method that receives - messages related to the callout view’s interactive subviews. - */ -@property (nonatomic, weak) id delegate; - -/** - Presents a callout view by adding it to `view` and pointing at the given rect - of `view`’s bounds. Constrains the callout to the bounds of the given view. - */ -- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToView:(UIView *)constrainedView animated:(BOOL)animated __attribute__((unavailable("Use `-presentCalloutFromRect:inView:constrainedToRect:animated:` instead."))); - - -/** - Presents a callout view by adding it to `view` and pointing at the given rect - of `view`’s bounds. Constrains the callout to the rect in the space of `view`. - */ -- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToRect:(CGRect)constrainedRect animated:(BOOL)animated; - -/** - Dismisses the callout view. - */ -- (void)dismissCalloutAnimated:(BOOL)animated; - -@optional - -/** - If implemented, should provide margins to expand the rect the callout is presented from. - - These are used to determine positioning. Currently only the top and bottom properties of the return - value are used. For example, `{ .top = -50.0, .left = -10.0, .bottom = 0.0, .right = -10.0 }` indicates - a 50 point margin above the presentation origin rect (and 10 point margins to the left and the right) - in which the callout is assumed to be displayed. - - There are no assumed defaults for these margins, as they should be calculated from the callout that - is to be presented. For example, `SMCalloutView` generates the top margin from the callout height, but - the left and right margins from a minimum width that the callout should have. - - @param rect Rect that the callout is presented from. This should be the same as the one passed in - `-[MGLCalloutView presentCalloutFromRect:inView:constrainedToRect:animated:]` - @return `UIEdgeInsets` representing the margins. Values should be negative. - */ -- (UIEdgeInsets)marginInsetsHintForPresentationFromRect:(CGRect)rect NS_SWIFT_NAME(marginInsetsHintForPresentation(from:)); - -/** - A Boolean value indicating whether the callout view should be anchored to - the corresponding annotation. You can adjust the callout view’s precise location by - overriding -[UIView setCenter:]. The callout view will not be anchored to the - annotation if this optional property is unimplemented. - */ -@property (nonatomic, readonly, assign, getter=isAnchoredToAnnotation) BOOL anchoredToAnnotation; - -/** - A Boolean value indicating whether the callout view should be dismissed automatically - when the map view’s viewport changes. Note that a single tap on the map view - still dismisses the callout view regardless of the value of this property. - The callout view will be dismissed if this optional property is unimplemented. - */ -@property (nonatomic, readonly, assign) BOOL dismissesAutomatically; - -@end - -/** - The `MGLCalloutViewDelegate` protocol defines a set of optional methods that - you can use to receive messages from an object that conforms to the - `MGLCalloutView` protocol. The callout view uses these methods to inform the - delegate that the user has interacted with the the callout view. - */ -@protocol MGLCalloutViewDelegate - -@optional -/** - Returns a Boolean value indicating whether the entire callout view “highlights” - when tapped. The default value is `YES`, which means the callout view - highlights when tapped. - - The return value of this method is ignored unless the delegate also responds to - the `-calloutViewTapped` method. - */ -- (BOOL)calloutViewShouldHighlight:(UIView *)calloutView; - -/** - Tells the delegate that the callout view has been tapped. - */ -- (void)calloutViewTapped:(UIView *)calloutView; - -/** - Called before the callout view appears on screen, or before the appearance - animation will start. - */ -- (void)calloutViewWillAppear:(UIView *)calloutView; - -/** - Called after the callout view appears on screen, or after the appearance - animation is complete. - */ -- (void)calloutViewDidAppear:(UIView *)calloutView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLCameraChangeReason.h b/platform/ios/src/MGLCameraChangeReason.h deleted file mode 100644 index f439d3e7ea6..00000000000 --- a/platform/ios/src/MGLCameraChangeReason.h +++ /dev/null @@ -1,65 +0,0 @@ -#import "MGLFoundation.h" - -/** - :nodoc: - Bitmask values that describe why a camera move occurred. - - Values of this type are passed to the `MGLMapView`'s delegate in the following methods: - - - `-mapView:shouldChangeFromCamera:toCamera:reason:` - - `-mapView:regionWillChangeWithReason:animated:` - - `-mapView:regionIsChangingWithReason:` - - `-mapView:regionDidChangeWithReason:animated:` - - It's important to note that it's almost impossible to perform a rotate without zooming (in or out), - so if you'll often find `MGLCameraChangeReasonGesturePinch` set alongside `MGLCameraChangeReasonGestureRotate`. - - Since there are several reasons why a zoom or rotation has occurred, it is worth considering - creating a combined constant, for example: - - ``` - static const MGLCameraChangeReason anyZoom = MGLCameraChangeReasonGesturePinch | - MGLCameraChangeReasonGestureZoomIn | - MGLCameraChangeReasonGestureZoomOut | - MGLCameraChangeReasonGestureOneFingerZoom; - - static const MGLCameraChangeReason anyRotation = MGLCameraChangeReasonResetNorth | MGLCameraChangeReasonGestureRotate; - ``` - */ -typedef NS_OPTIONS(NSUInteger, MGLCameraChangeReason) -{ - /// :nodoc: The reason for the camera change has not be specified. - MGLCameraChangeReasonNone = 0, - - /// :nodoc: Set when a public API that moves the camera is called. This may be set for some gestures, - /// for example MGLCameraChangeReasonResetNorth. - MGLCameraChangeReasonProgrammatic = 1 << 0, - - /// :nodoc: The user tapped the compass to reset the map orientation so North is up. - MGLCameraChangeReasonResetNorth = 1 << 1, - - /// :nodoc: The user panned the map. - MGLCameraChangeReasonGesturePan = 1 << 2, - - /// :nodoc: The user pinched to zoom in/out. - MGLCameraChangeReasonGesturePinch = 1 << 3, - - // :nodoc: The user rotated the map. - MGLCameraChangeReasonGestureRotate = 1 << 4, - - /// :nodoc: The user zoomed the map in (one finger double tap). - MGLCameraChangeReasonGestureZoomIn = 1 << 5, - - /// :nodoc: The user zoomed the map out (two finger single tap). - MGLCameraChangeReasonGestureZoomOut = 1 << 6, - - /// :nodoc: The user long pressed on the map for a quick zoom (single tap, then long press and drag up/down). - MGLCameraChangeReasonGestureOneFingerZoom = 1 << 7, - - // :nodoc: The user panned with two fingers to tilt the map (two finger drag). - MGLCameraChangeReasonGestureTilt = 1 << 8, - - // :nodoc: Cancelled - MGLCameraChangeReasonTransitionCancelled = 1 << 16 - -}; diff --git a/platform/ios/src/MGLCompactCalloutView.h b/platform/ios/src/MGLCompactCalloutView.h deleted file mode 100644 index 5cecf37ff6d..00000000000 --- a/platform/ios/src/MGLCompactCalloutView.h +++ /dev/null @@ -1,14 +0,0 @@ -#import "SMCalloutView.h" -#import "MGLCalloutView.h" - -/** - A concrete implementation of `MGLCalloutView` based on - SMCalloutView. This - callout view displays the represented annotation’s title, subtitle, and - accessory views in a compact, two-line layout. - */ -@interface MGLCompactCalloutView : MGLSMCalloutView - -+ (instancetype)platformCalloutView; - -@end diff --git a/platform/ios/src/MGLCompactCalloutView.m b/platform/ios/src/MGLCompactCalloutView.m deleted file mode 100644 index e499b7832f7..00000000000 --- a/platform/ios/src/MGLCompactCalloutView.m +++ /dev/null @@ -1,39 +0,0 @@ -#import "MGLCompactCalloutView.h" - -#import "MGLAnnotation.h" - -@implementation MGLCompactCalloutView -{ - id _representedObject; -} - -@synthesize representedObject = _representedObject; - -+ (instancetype)platformCalloutView -{ - return [[self alloc] init]; -} - -- (BOOL)isAnchoredToAnnotation { - return YES; -} - -- (BOOL)dismissesAutomatically { - return NO; -} - -- (void)setRepresentedObject:(id )representedObject -{ - _representedObject = representedObject; - - if ([representedObject respondsToSelector:@selector(title)]) - { - self.title = representedObject.title; - } - if ([representedObject respondsToSelector:@selector(subtitle)]) - { - self.subtitle = representedObject.subtitle; - } -} - -@end diff --git a/platform/ios/src/MGLCompassButton.h b/platform/ios/src/MGLCompassButton.h deleted file mode 100644 index 9c3d9d1c77c..00000000000 --- a/platform/ios/src/MGLCompassButton.h +++ /dev/null @@ -1,22 +0,0 @@ -#import - -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - A specialized view that displays the current compass heading for its associated map. - */ -MGL_EXPORT -@interface MGLCompassButton : UIImageView - -/** - The visibility of the compass button. - - You can configure a compass button to be visible all the time or only when the compass heading changes. - */ -@property (nonatomic, assign) MGLOrnamentVisibility compassVisibility; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLCompassButton.mm b/platform/ios/src/MGLCompassButton.mm deleted file mode 100644 index 5bbd9bf923d..00000000000 --- a/platform/ios/src/MGLCompassButton.mm +++ /dev/null @@ -1,135 +0,0 @@ -#import "MGLCompassButton_Private.h" -#import "MGLCompassDirectionFormatter.h" - -#import "MGLGeometry.h" - -#import "MGLMapView_Private.h" -#import "UIImage+MGLAdditions.h" -#import "NSBundle+MGLAdditions.h" - -#include - -@interface MGLCompassButton () - -@property (nonatomic, weak) MGLMapView *mapView; -@property (nonatomic) MGLCompassDirectionFormatter *accessibilityCompassFormatter; - -@end - -@implementation MGLCompassButton - -+ (instancetype)compassButtonWithMapView:(MGLMapView *)mapView { - return [[MGLCompassButton alloc] initWithMapView:mapView]; -} - -- (instancetype)initWithMapView:(MGLMapView *)mapView { - if (self = [super init]) { - self.mapView = mapView; - [self commonInit]; - } - return self; -} - -- (void)commonInit { - self.image = self.compassImage; - - self.compassVisibility = MGLOrnamentVisibilityAdaptive; - - self.alpha = 0; - self.userInteractionEnabled = YES; - self.translatesAutoresizingMaskIntoConstraints = NO; - - UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)]; - [self addGestureRecognizer:tapGesture]; - - self.accessibilityTraits = UIAccessibilityTraitButton; - self.accessibilityLabel = NSLocalizedStringWithDefaultValue(@"COMPASS_A11Y_LABEL", nil, nil, @"Compass", @"Accessibility label"); - self.accessibilityHint = NSLocalizedStringWithDefaultValue(@"COMPASS_A11Y_HINT", nil, nil, @"Rotates the map to face due north", @"Accessibility hint"); - - self.accessibilityCompassFormatter = [[MGLCompassDirectionFormatter alloc] init]; - self.accessibilityCompassFormatter.unitStyle = NSFormattingUnitStyleLong; - - [self sizeToFit]; -} - -- (void)setCompassVisibility:(MGLOrnamentVisibility)compassVisibility { - if (_compassVisibility == compassVisibility) { return; } - _compassVisibility = compassVisibility; - - [self updateCompassAnimated:NO]; -} - -- (UIImage *)compassImage { - UIImage *scaleImage = [UIImage mgl_resourceImageNamed:@"Compass"]; - UIGraphicsBeginImageContextWithOptions(scaleImage.size, NO, UIScreen.mainScreen.scale); - [scaleImage drawInRect:{CGPointZero, scaleImage.size}]; - - UIFont *northFont; - if (@available(iOS 13.0, *)) { - northFont = [UIFont systemFontOfSize:11 weight:UIFontWeightLight]; - } else { - northFont = [UIFont systemFontOfSize:11 weight:UIFontWeightUltraLight]; - } - - NSAttributedString *north = [[NSAttributedString alloc] initWithString:NSLocalizedStringWithDefaultValue(@"COMPASS_NORTH", nil, nil, @"N", @"Compass abbreviation for north") attributes:@{ - NSFontAttributeName: northFont, - NSForegroundColorAttributeName: [UIColor whiteColor], - }]; - CGRect stringRect = CGRectMake((scaleImage.size.width - north.size.width) / 2, - scaleImage.size.height * 0.435, - north.size.width, north.size.height); - [north drawInRect:stringRect]; - - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -- (void)handleTapGesture:(__unused UITapGestureRecognizer *)sender { - [self.mapView resetNorth]; -} - -- (void)updateCompass { - [self updateCompassAnimated:YES]; -} - -- (void)updateCompassAnimated:(BOOL)animated { - CLLocationDirection direction = self.mapView.direction; - CLLocationDirection plateDirection = mbgl::util::wrap(-direction, 0., 360.); - self.transform = CGAffineTransformMakeRotation(MGLRadiansFromDegrees(plateDirection)); - - self.isAccessibilityElement = direction > 0; - self.accessibilityValue = [self.accessibilityCompassFormatter stringFromDirection:direction]; - - switch (self.compassVisibility) { - case MGLOrnamentVisibilityAdaptive: - if (direction > 0 && self.alpha < 1) { - [self showCompass:animated]; - } else if (direction == 0 && self.alpha > 0) { - [self hideCompass:animated]; - } - break; - case MGLOrnamentVisibilityVisible: - [self showCompass:animated]; - break; - case MGLOrnamentVisibilityHidden: - [self hideCompass:animated]; - break; - } -} - -- (void)showCompass:(BOOL)animated { - animated ? [self animateToAlpha:1] : [self setAlpha:1]; -} - -- (void)hideCompass:(BOOL)animated { - animated ? [self animateToAlpha:0] : [self setAlpha:0]; -} - -- (void)animateToAlpha:(CGFloat)alpha { - [UIView animateWithDuration:MGLAnimationDuration delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ - self.alpha = alpha; - } completion:nil]; -} - -@end diff --git a/platform/ios/src/MGLCompassButton_Private.h b/platform/ios/src/MGLCompassButton_Private.h deleted file mode 100644 index 9ef55cfa5b9..00000000000 --- a/platform/ios/src/MGLCompassButton_Private.h +++ /dev/null @@ -1,19 +0,0 @@ -#import - -#import "MGLCompassButton.h" - -@class MGLMapView; - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLCompassButton (Private) - -+ (instancetype)compassButtonWithMapView:(MGLMapView *)mapView; - -@property (nonatomic, weak) MGLMapView *mapView; - -- (void)updateCompass; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLFaux3DUserLocationAnnotationView.h b/platform/ios/src/MGLFaux3DUserLocationAnnotationView.h deleted file mode 100644 index 35fb31a342c..00000000000 --- a/platform/ios/src/MGLFaux3DUserLocationAnnotationView.h +++ /dev/null @@ -1,15 +0,0 @@ -#import -#import "MGLUserLocationAnnotationView.h" - -extern const CGFloat MGLUserLocationAnnotationDotSize; -extern const CGFloat MGLUserLocationAnnotationHaloSize; - -extern const CGFloat MGLUserLocationAnnotationPuckSize; -extern const CGFloat MGLUserLocationAnnotationArrowSize; - -// Threshold in radians between heading indicator rotation updates. -extern const CGFloat MGLUserLocationHeadingUpdateThreshold; - -@interface MGLFaux3DUserLocationAnnotationView : MGLUserLocationAnnotationView - -@end diff --git a/platform/ios/src/MGLFaux3DUserLocationAnnotationView.m b/platform/ios/src/MGLFaux3DUserLocationAnnotationView.m deleted file mode 100644 index a1d9fb1d488..00000000000 --- a/platform/ios/src/MGLFaux3DUserLocationAnnotationView.m +++ /dev/null @@ -1,469 +0,0 @@ -#import "MGLFaux3DUserLocationAnnotationView.h" - -#import "MGLMapView.h" -#import "MGLUserLocation.h" -#import "MGLUserLocationHeadingIndicator.h" -#import "MGLUserLocationHeadingArrowLayer.h" -#import "MGLUserLocationHeadingBeamLayer.h" - -const CGFloat MGLUserLocationAnnotationDotSize = 22.0; -const CGFloat MGLUserLocationAnnotationHaloSize = 115.0; - -const CGFloat MGLUserLocationAnnotationPuckSize = 45.0; -const CGFloat MGLUserLocationAnnotationArrowSize = MGLUserLocationAnnotationPuckSize * 0.5; - -const CGFloat MGLUserLocationHeadingUpdateThreshold = 0.01; - -@implementation MGLFaux3DUserLocationAnnotationView -{ - BOOL _puckModeActivated; - - CALayer *_puckDot; - CAShapeLayer *_puckArrow; - - CALayer *_headingIndicatorLayer; - CALayer *_accuracyRingLayer; - CALayer *_dotBorderLayer; - CALayer *_dotLayer; - CALayer *_haloLayer; - - CLLocationDirection _oldHeadingAccuracy; - CLLocationAccuracy _oldHorizontalAccuracy; - double _oldZoom; - double _oldPitch; -} - -- (CALayer *)hitTestLayer -{ - // Only the main dot should be interactive (i.e., exclude the accuracy ring and halo). - return _dotBorderLayer ?: _puckDot; -} - -- (void)update -{ - if (CGSizeEqualToSize(self.frame.size, CGSizeZero)) - { - CGFloat frameSize = (self.mapView.userTrackingMode == MGLUserTrackingModeFollowWithCourse) ? MGLUserLocationAnnotationPuckSize : MGLUserLocationAnnotationDotSize; - [self updateFrameWithSize:frameSize]; - } - - if (CLLocationCoordinate2DIsValid(self.userLocation.coordinate)) - { - (self.mapView.userTrackingMode == MGLUserTrackingModeFollowWithCourse) ? [self drawPuck] : [self drawDot]; - [self updatePitch]; - } - - _haloLayer.hidden = ! CLLocationCoordinate2DIsValid(self.mapView.userLocation.coordinate) || self.mapView.userLocation.location.horizontalAccuracy > 10; -} - -- (void)setTintColor:(UIColor *)tintColor -{ - CGColorRef newTintColor = [tintColor CGColor]; - - if (_puckModeActivated) - { - _puckArrow.fillColor = newTintColor; - _puckArrow.strokeColor = newTintColor; - } - else - { - _accuracyRingLayer.backgroundColor = newTintColor; - _haloLayer.backgroundColor = newTintColor; - _dotLayer.backgroundColor = newTintColor; - [_headingIndicatorLayer updateTintColor:newTintColor]; - } -} - -- (void)updatePitch -{ - if (self.mapView.camera.pitch != _oldPitch) - { - // disable implicit animation - [CATransaction begin]; - [CATransaction setDisableActions:YES]; - - CATransform3D t = CATransform3DRotate(CATransform3DIdentity, MGLRadiansFromDegrees(self.mapView.camera.pitch), 1.0, 0, 0); - self.layer.sublayerTransform = t; - - [self updateFaux3DEffect]; - - [CATransaction commit]; - - _oldPitch = self.mapView.camera.pitch; - } -} - -- (void)updateFaux3DEffect -{ - CGFloat pitch = MGLRadiansFromDegrees(self.mapView.camera.pitch); - - if (_puckDot) - { - _puckDot.shadowOffset = CGSizeMake(0, fmaxf(pitch * 10.f, 1.f)); - _puckDot.shadowRadius = fmaxf(pitch * 5.f, 0.75f); - } - - if (_dotBorderLayer) - { - _dotBorderLayer.shadowOffset = CGSizeMake(0.f, pitch * 10.f); - _dotBorderLayer.shadowRadius = fmaxf(pitch * 5.f, 3.f); - } - - if (_dotLayer) - { - _dotLayer.zPosition = pitch * 2.f; - } -} - -- (void)updateFrameWithSize:(CGFloat)size -{ - CGSize newSize = CGSizeMake(size, size); - if (CGSizeEqualToSize(self.frame.size, newSize)) - { - return; - } - - // Update frame size, keeping the existing center point. - CGPoint oldCenter = self.center; - CGRect newFrame = self.frame; - newFrame.size = newSize; - [self setFrame:newFrame]; - [self setCenter:oldCenter]; -} - -- (void)drawPuck -{ - if ( ! _puckModeActivated) - { - self.layer.sublayers = nil; - - _headingIndicatorLayer = nil; - _accuracyRingLayer = nil; - _haloLayer = nil; - _dotBorderLayer = nil; - _dotLayer = nil; - - [self updateFrameWithSize:MGLUserLocationAnnotationPuckSize]; - } - - // background dot (white with black shadow) - // - if ( ! _puckDot) - { - _puckDot = [self circleLayerWithSize:MGLUserLocationAnnotationPuckSize]; - _puckDot.backgroundColor = [[UIColor whiteColor] CGColor]; - _puckDot.shadowColor = [[UIColor blackColor] CGColor]; - _puckDot.shadowOpacity = 0.25; - _puckDot.shadowPath = [[UIBezierPath bezierPathWithOvalInRect:_puckDot.bounds] CGPath]; - - if (self.mapView.camera.pitch) - { - [self updateFaux3DEffect]; - } - else - { - _puckDot.shadowOffset = CGSizeMake(0, 1); - _puckDot.shadowRadius = 0.75; - } - - [self.layer addSublayer:_puckDot]; - } - - // arrow - // - if ( ! _puckArrow) - { - _puckArrow = [CAShapeLayer layer]; - _puckArrow.path = [[self puckArrow] CGPath]; - _puckArrow.fillColor = [self.mapView.tintColor CGColor]; - _puckArrow.bounds = CGRectMake(0, 0, round(MGLUserLocationAnnotationArrowSize), round(MGLUserLocationAnnotationArrowSize)); - _puckArrow.position = CGPointMake(CGRectGetMidX(super.bounds), CGRectGetMidY(super.bounds)); - _puckArrow.shouldRasterize = YES; - _puckArrow.rasterizationScale = [UIScreen mainScreen].scale; - _puckArrow.drawsAsynchronously = YES; - - _puckArrow.lineJoin = @"round"; - _puckArrow.lineWidth = 1.f; - _puckArrow.strokeColor = _puckArrow.fillColor; - - [self.layer addSublayer:_puckArrow]; - } - if (self.userLocation.location.course >= 0) - { - _puckArrow.affineTransform = CGAffineTransformRotate(CGAffineTransformIdentity, -MGLRadiansFromDegrees(self.mapView.direction - self.userLocation.location.course)); - } - - if ( ! _puckModeActivated) - { - _puckModeActivated = YES; - - [self updateFaux3DEffect]; - } -} - -- (UIBezierPath *)puckArrow -{ - CGFloat max = MGLUserLocationAnnotationArrowSize; - - UIBezierPath *bezierPath = UIBezierPath.bezierPath; - [bezierPath moveToPoint: CGPointMake(max * 0.5, 0)]; - [bezierPath addLineToPoint: CGPointMake(max * 0.1, max)]; - [bezierPath addLineToPoint: CGPointMake(max * 0.5, max * 0.65)]; - [bezierPath addLineToPoint: CGPointMake(max * 0.9, max)]; - [bezierPath addLineToPoint: CGPointMake(max * 0.5, 0)]; - [bezierPath closePath]; - - return bezierPath; -} - -- (void)drawDot -{ - if (_puckModeActivated) - { - self.layer.sublayers = nil; - - _puckDot = nil; - _puckArrow = nil; - - [self updateFrameWithSize:MGLUserLocationAnnotationDotSize]; - } - - // heading indicator (tinted, beam or arrow) - // - BOOL headingTrackingModeEnabled = self.mapView.userTrackingMode == MGLUserTrackingModeFollowWithHeading; - BOOL showHeadingIndicator = self.mapView.showsUserHeadingIndicator || headingTrackingModeEnabled; - - if (showHeadingIndicator) - { - _headingIndicatorLayer.hidden = NO; - CLLocationDirection headingAccuracy = self.userLocation.heading.headingAccuracy; - - if (([_headingIndicatorLayer isMemberOfClass:[MGLUserLocationHeadingBeamLayer class]] && ! headingTrackingModeEnabled) || - ([_headingIndicatorLayer isMemberOfClass:[MGLUserLocationHeadingArrowLayer class]] && headingTrackingModeEnabled)) - { - [_headingIndicatorLayer removeFromSuperlayer]; - _headingIndicatorLayer = nil; - _oldHeadingAccuracy = -1; - } - - if ( ! _headingIndicatorLayer && headingAccuracy) - { - if (headingTrackingModeEnabled) - { - _headingIndicatorLayer = [[MGLUserLocationHeadingBeamLayer alloc] initWithUserLocationAnnotationView:self]; - [self.layer insertSublayer:_headingIndicatorLayer below:_dotBorderLayer]; - } - else - { - _headingIndicatorLayer = [[MGLUserLocationHeadingArrowLayer alloc] initWithUserLocationAnnotationView:self]; - [self.layer addSublayer:_headingIndicatorLayer]; - _headingIndicatorLayer.zPosition = 1; - } - } - - if (_oldHeadingAccuracy != headingAccuracy) - { - [_headingIndicatorLayer updateHeadingAccuracy:headingAccuracy]; - _oldHeadingAccuracy = headingAccuracy; - } - - if (self.userLocation.heading.trueHeading >= 0) - { - CGFloat rotation = -MGLRadiansFromDegrees(self.mapView.direction - self.userLocation.heading.trueHeading); - - // Don't rotate if the change is imperceptible. - if (fabs(rotation) > MGLUserLocationHeadingUpdateThreshold) - { - [CATransaction begin]; - [CATransaction setDisableActions:YES]; - - _headingIndicatorLayer.affineTransform = CGAffineTransformRotate(CGAffineTransformIdentity, rotation); - - [CATransaction commit]; - } - } - } - else - { - [_headingIndicatorLayer removeFromSuperlayer]; - _headingIndicatorLayer = nil; - } - - // update accuracy ring (if zoom or horizontal accuracy have changed) - // - if (_accuracyRingLayer && (_oldZoom != self.mapView.zoomLevel || _oldHorizontalAccuracy != self.userLocation.location.horizontalAccuracy)) - { - CGFloat accuracyRingSize = [self calculateAccuracyRingSize]; - - // only show the accuracy ring if it won't be obscured by the location dot - if (accuracyRingSize > MGLUserLocationAnnotationDotSize + 15) - { - _accuracyRingLayer.hidden = NO; - - // disable implicit animation of the accuracy ring, unless triggered by a change in accuracy - BOOL shouldDisableActions = _oldHorizontalAccuracy == self.userLocation.location.horizontalAccuracy; - - [CATransaction begin]; - [CATransaction setDisableActions:shouldDisableActions]; - - _accuracyRingLayer.bounds = CGRectMake(0, 0, accuracyRingSize, accuracyRingSize); - _accuracyRingLayer.cornerRadius = accuracyRingSize / 2.0; - - // match the halo to the accuracy ring - _haloLayer.bounds = _accuracyRingLayer.bounds; - _haloLayer.cornerRadius = _accuracyRingLayer.cornerRadius; - _haloLayer.shouldRasterize = NO; - - [CATransaction commit]; - } - else - { - _accuracyRingLayer.hidden = YES; - - _haloLayer.bounds = CGRectMake(0, 0, MGLUserLocationAnnotationHaloSize, MGLUserLocationAnnotationHaloSize); - _haloLayer.cornerRadius = MGLUserLocationAnnotationHaloSize / 2.0; - _haloLayer.shouldRasterize = YES; - _haloLayer.rasterizationScale = [UIScreen mainScreen].scale; - } - - // store accuracy and zoom so we're not redrawing unchanged location updates - _oldHorizontalAccuracy = self.userLocation.location.horizontalAccuracy; - _oldZoom = self.mapView.zoomLevel; - } - - // accuracy ring (circular, tinted, mostly-transparent) - // - if ( ! _accuracyRingLayer && self.userLocation.location.horizontalAccuracy) - { - CGFloat accuracyRingSize = [self calculateAccuracyRingSize]; - _accuracyRingLayer = [self circleLayerWithSize:accuracyRingSize]; - _accuracyRingLayer.backgroundColor = [self.mapView.tintColor CGColor]; - _accuracyRingLayer.opacity = 0.1; - _accuracyRingLayer.shouldRasterize = NO; - _accuracyRingLayer.allowsGroupOpacity = NO; - - [self.layer addSublayer:_accuracyRingLayer]; - } - - // expanding sonar-like pulse (circular, tinted, fades out) - // - if ( ! _haloLayer) - { - _haloLayer = [self circleLayerWithSize:MGLUserLocationAnnotationHaloSize]; - _haloLayer.backgroundColor = [self.mapView.tintColor CGColor]; - _haloLayer.allowsGroupOpacity = NO; - _haloLayer.zPosition = -0.1f; - - // set defaults for the animations - CAAnimationGroup *animationGroup = [self loopingAnimationGroupWithDuration:3.0]; - - // scale out radially with initial acceleration - CAKeyframeAnimation *boundsAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale.xy"]; - boundsAnimation.values = @[@0, @0.35, @1]; - boundsAnimation.keyTimes = @[@0, @0.2, @1]; - - // go transparent as scaled out, start semi-opaque - CAKeyframeAnimation *opacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"]; - opacityAnimation.values = @[@0.4, @0.4, @0]; - opacityAnimation.keyTimes = @[@0, @0.2, @1]; - - animationGroup.animations = @[boundsAnimation, opacityAnimation]; - - [_haloLayer addAnimation:animationGroup forKey:@"animateTransformAndOpacity"]; - - [self.layer addSublayer:_haloLayer]; - } - - // background dot (white with black shadow) - // - if ( ! _dotBorderLayer) - { - _dotBorderLayer = [self circleLayerWithSize:MGLUserLocationAnnotationDotSize]; - _dotBorderLayer.backgroundColor = [[UIColor whiteColor] CGColor]; - _dotBorderLayer.shadowColor = [[UIColor blackColor] CGColor]; - _dotBorderLayer.shadowOpacity = 0.25; - _dotBorderLayer.shadowPath = [[UIBezierPath bezierPathWithOvalInRect:_dotBorderLayer.bounds] CGPath]; - - if (self.mapView.camera.pitch) - { - [self updateFaux3DEffect]; - } - else - { - _dotBorderLayer.shadowOffset = CGSizeMake(0, 0); - _dotBorderLayer.shadowRadius = 3; - } - - [self.layer addSublayer:_dotBorderLayer]; - } - - // inner dot (pulsing, tinted) - // - if ( ! _dotLayer) - { - _dotLayer = [self circleLayerWithSize:MGLUserLocationAnnotationDotSize * 0.75]; - _dotLayer.backgroundColor = [self.mapView.tintColor CGColor]; - - // set defaults for the animations - CAAnimationGroup *animationGroup = [self loopingAnimationGroupWithDuration:1.5]; - animationGroup.autoreverses = YES; - animationGroup.fillMode = kCAFillModeBoth; - - // scale the dot up and down - CABasicAnimation *pulseAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale.xy"]; - pulseAnimation.fromValue = @0.8; - pulseAnimation.toValue = @1; - - // fade opacity in and out, subtly - CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; - opacityAnimation.fromValue = @0.8; - opacityAnimation.toValue = @1; - - animationGroup.animations = @[pulseAnimation, opacityAnimation]; - - [_dotLayer addAnimation:animationGroup forKey:@"animateTransformAndOpacity"]; - - [self.layer addSublayer:_dotLayer]; - } - - if (_puckModeActivated) - { - _puckModeActivated = NO; - - [self updateFaux3DEffect]; - } -} - -- (CALayer *)circleLayerWithSize:(CGFloat)layerSize -{ - layerSize = round(layerSize); - - CALayer *circleLayer = [CALayer layer]; - circleLayer.bounds = CGRectMake(0, 0, layerSize, layerSize); - circleLayer.position = CGPointMake(CGRectGetMidX(super.bounds), CGRectGetMidY(super.bounds)); - circleLayer.cornerRadius = layerSize / 2.0; - circleLayer.shouldRasterize = YES; - circleLayer.rasterizationScale = [UIScreen mainScreen].scale; - circleLayer.drawsAsynchronously = YES; - - return circleLayer; -} - -- (CAAnimationGroup *)loopingAnimationGroupWithDuration:(CGFloat)animationDuration -{ - CAAnimationGroup *animationGroup = [CAAnimationGroup animation]; - animationGroup.duration = animationDuration; - animationGroup.repeatCount = INFINITY; - animationGroup.removedOnCompletion = NO; - animationGroup.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]; - - return animationGroup; -} - -- (CGFloat)calculateAccuracyRingSize -{ - // diameter in screen points - return round(self.userLocation.location.horizontalAccuracy / [self.mapView metersPerPointAtLatitude:self.userLocation.coordinate.latitude] * 2.0); -} - -@end diff --git a/platform/ios/src/MGLMapAccessibilityElement.h b/platform/ios/src/MGLMapAccessibilityElement.h deleted file mode 100644 index 6c5fad62ce8..00000000000 --- a/platform/ios/src/MGLMapAccessibilityElement.h +++ /dev/null @@ -1,54 +0,0 @@ -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol MGLFeature; - -/// Unique identifier representing a single annotation in mbgl. -typedef uint64_t MGLAnnotationTag; - -/** An accessibility element representing something that appears on the map. */ -MGL_EXPORT -@interface MGLMapAccessibilityElement : UIAccessibilityElement - -@end - -/** An accessibility element representing a map annotation. */ -@interface MGLAnnotationAccessibilityElement : MGLMapAccessibilityElement - -/** The tag of the annotation represented by this element. */ -@property (nonatomic) MGLAnnotationTag tag; - -- (instancetype)initWithAccessibilityContainer:(id)container tag:(MGLAnnotationTag)identifier NS_DESIGNATED_INITIALIZER; - -@end - -/** An accessibility element representing a map feature. */ -MGL_EXPORT -@interface MGLFeatureAccessibilityElement : MGLMapAccessibilityElement - -/** The feature represented by this element. */ -@property (nonatomic, strong) id feature; - -- (instancetype)initWithAccessibilityContainer:(id)container feature:(id )feature NS_DESIGNATED_INITIALIZER; - -@end - -/** An accessibility element representing a place feature. */ -MGL_EXPORT -@interface MGLPlaceFeatureAccessibilityElement : MGLFeatureAccessibilityElement -@end - -/** An accessibility element representing a road feature. */ -MGL_EXPORT -@interface MGLRoadFeatureAccessibilityElement : MGLFeatureAccessibilityElement -@end - -/** An accessibility element representing the MGLMapView at large. */ -MGL_EXPORT -@interface MGLMapViewProxyAccessibilityElement : UIAccessibilityElement -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLMapAccessibilityElement.mm b/platform/ios/src/MGLMapAccessibilityElement.mm deleted file mode 100644 index 240eab15450..00000000000 --- a/platform/ios/src/MGLMapAccessibilityElement.mm +++ /dev/null @@ -1,195 +0,0 @@ -#import "MGLMapAccessibilityElement.h" -#import "MGLDistanceFormatter.h" -#import "MGLCompassDirectionFormatter.h" -#import "MGLFeature.h" - -#import "MGLGeometry_Private.h" -#import "MGLVectorTileSource_Private.h" - -#import "NSBundle+MGLAdditions.h" -#import "NSOrthography+MGLAdditions.h" -#import "NSString+MGLAdditions.h" - -@implementation MGLMapAccessibilityElement - -- (UIAccessibilityTraits)accessibilityTraits { - return super.accessibilityTraits | UIAccessibilityTraitAdjustable; -} - -- (void)accessibilityIncrement { - [self.accessibilityContainer accessibilityIncrement]; -} - -- (void)accessibilityDecrement { - [self.accessibilityContainer accessibilityDecrement]; -} - -@end - -@implementation MGLAnnotationAccessibilityElement - -- (instancetype)initWithAccessibilityContainer:(id)container tag:(MGLAnnotationTag)tag { - if (self = [super initWithAccessibilityContainer:container]) { - _tag = tag; - self.accessibilityHint = NSLocalizedStringWithDefaultValue(@"ANNOTATION_A11Y_HINT", nil, nil, @"Shows more info", @"Accessibility hint"); - } - return self; -} - -- (UIAccessibilityTraits)accessibilityTraits { - return super.accessibilityTraits | UIAccessibilityTraitButton; -} - -@end - -@implementation MGLFeatureAccessibilityElement - -- (instancetype)initWithAccessibilityContainer:(id)container feature:(id)feature { - if (self = [super initWithAccessibilityContainer:container]) { - _feature = feature; - - NSString *languageCode = [MGLVectorTileSource preferredMapboxStreetsLanguage]; - NSString *nameAttribute = [NSString stringWithFormat:@"name_%@", languageCode]; - NSString *name = [feature attributeForKey:nameAttribute]; - - // If a feature hasn’t been translated into the preferred language, it - // may be in the local language, which may be written in another script. - // Attempt to transform to the script of the preferred language, keeping - // the original string if no transform exists or if transformation fails. - NSString *dominantScript = [NSOrthography mgl_dominantScriptForMapboxStreetsLanguage:languageCode]; - name = [name mgl_stringByTransliteratingIntoScript:dominantScript]; - - self.accessibilityLabel = name; - } - return self; -} - -- (UIAccessibilityTraits)accessibilityTraits { - return super.accessibilityTraits | UIAccessibilityTraitStaticText; -} - -@end - -@implementation MGLPlaceFeatureAccessibilityElement - -- (instancetype)initWithAccessibilityContainer:(id)container feature:(id)feature { - if (self = [super initWithAccessibilityContainer:container feature:feature]) { - NSDictionary *attributes = feature.attributes; - NSMutableArray *facts = [NSMutableArray array]; - - // Announce the kind of place or POI. - NSString *languageCode = [MGLVectorTileSource preferredMapboxStreetsLanguage]; - NSString *categoryAttribute = [NSString stringWithFormat:@"category_%@", languageCode]; - if (attributes[categoryAttribute]) { - [facts addObject:attributes[categoryAttribute]]; - } else if (attributes[@"type"]) { - // FIXME: Unfortunately, these types aren’t a closed set that can be - // localized, since they’re based on OpenStreetMap tags. - NSString *type = [attributes[@"type"] stringByReplacingOccurrencesOfString:@"_" - withString:@" "]; - [facts addObject:type]; - } - // Announce the kind of airport, rail station, or mountain based on its - // Maki image name. - else if (attributes[@"maki"]) { - [facts addObject:attributes[@"maki"]]; - } - - // Announce the peak’s elevation in the preferred units. - if (attributes[@"elevation_m"] ?: attributes[@"elevation_ft"]) { - NSLengthFormatter *formatter = [[NSLengthFormatter alloc] init]; - formatter.unitStyle = NSFormattingUnitStyleLong; - - NSNumber *elevationValue; - NSLengthFormatterUnit unit; - BOOL usesMetricSystem = ![[formatter.numberFormatter.locale objectForKey:NSLocaleMeasurementSystem] - isEqualToString:@"U.S."]; - if (usesMetricSystem) { - elevationValue = attributes[@"elevation_m"]; - unit = NSLengthFormatterUnitMeter; - } else { - elevationValue = attributes[@"elevation_ft"]; - unit = NSLengthFormatterUnitFoot; - } - [facts addObject:[formatter stringFromValue:elevationValue.doubleValue unit:unit]]; - } - - if (facts.count) { - NSString *separator = NSLocalizedStringWithDefaultValue(@"LIST_SEPARATOR", nil, nil, @", ", @"List separator"); - self.accessibilityValue = [facts componentsJoinedByString:separator]; - } - } - return self; -} - -@end - -@implementation MGLRoadFeatureAccessibilityElement - -- (instancetype)initWithAccessibilityContainer:(id)container feature:(id)feature { - if (self = [super initWithAccessibilityContainer:container feature:feature]) { - NSDictionary *attributes = feature.attributes; - NSMutableArray *facts = [NSMutableArray array]; - - // Announce the route number. - if (attributes[@"ref"]) { - // TODO: Decorate the route number with the network name based on the shield attribute. - NSString *ref = [NSString stringWithFormat:NSLocalizedStringWithDefaultValue(@"ROAD_REF_A11Y_FMT", nil, nil, @"Route %@", @"String format for accessibility value for road feature; {route number}"), attributes[@"ref"]]; - [facts addObject:ref]; - } - - // Announce whether the road is a one-way road. - if ([attributes[@"oneway"] isEqualToString:@"true"]) { - [facts addObject:NSLocalizedStringWithDefaultValue(@"ROAD_ONEWAY_A11Y_VALUE", nil, nil, @"One way", @"Accessibility value indicating that a road is a one-way road")]; - } - - // Announce whether the road is a divided road. - MGLPolyline *polyline; - if ([feature isKindOfClass:[MGLMultiPolylineFeature class]]) { - [facts addObject:NSLocalizedStringWithDefaultValue(@"ROAD_DIVIDED_A11Y_VALUE", nil, nil, @"Divided road", @"Accessibility value indicating that a road is a divided road (dual carriageway)")]; - polyline = [(MGLMultiPolylineFeature *)feature polylines].firstObject; - } - - // Announce the road’s general direction. - if ([feature isKindOfClass:[MGLPolylineFeature class]]) { - polyline = (MGLPolylineFeature *)feature; - } - if (polyline) { - NSUInteger pointCount = polyline.pointCount; - if (pointCount) { - CLLocationCoordinate2D *coordinates = polyline.coordinates; - CLLocationDirection startDirection = MGLDirectionBetweenCoordinates(coordinates[pointCount - 1], coordinates[0]); - CLLocationDirection endDirection = MGLDirectionBetweenCoordinates(coordinates[0], coordinates[pointCount - 1]); - - MGLCompassDirectionFormatter *formatter = [[MGLCompassDirectionFormatter alloc] init]; - formatter.unitStyle = NSFormattingUnitStyleLong; - - NSString *startDirectionString = [formatter stringFromDirection:startDirection]; - NSString *endDirectionString = [formatter stringFromDirection:endDirection]; - NSString *directionString = [NSString stringWithFormat:NSLocalizedStringWithDefaultValue(@"ROAD_DIRECTION_A11Y_FMT", nil, nil, @"%@ to %@", @"String format for accessibility value for road feature; {starting compass direction}, {ending compass direction}"), startDirectionString, endDirectionString]; - [facts addObject:directionString]; - } - } - - if (facts.count) { - NSString *separator = NSLocalizedStringWithDefaultValue(@"LIST_SEPARATOR", nil, nil, @", ", @"List separator"); - self.accessibilityValue = [facts componentsJoinedByString:separator]; - } - } - return self; -} - -@end - -@implementation MGLMapViewProxyAccessibilityElement - -- (instancetype)initWithAccessibilityContainer:(id)container { - if (self = [super initWithAccessibilityContainer:container]) { - self.accessibilityTraits = UIAccessibilityTraitButton; - self.accessibilityLabel = [self.accessibilityContainer accessibilityLabel]; - self.accessibilityHint = NSLocalizedStringWithDefaultValue(@"CLOSE_CALLOUT_A11Y_HINT", nil, nil, @"Returns to the map", @"Accessibility hint for closing the selected annotation’s callout view and returning to the map"); - } - return self; -} - -@end diff --git a/platform/ios/src/MGLMapView+IBAdditions.h b/platform/ios/src/MGLMapView+IBAdditions.h deleted file mode 100644 index 64016e83196..00000000000 --- a/platform/ios/src/MGLMapView+IBAdditions.h +++ /dev/null @@ -1,51 +0,0 @@ -#import - -@class MGLMapView; - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLMapView (IBAdditions) - -// Core properties that can be manipulated in the Attributes inspector in -// Interface Builder. These redeclarations merely add the IBInspectable keyword. -// They appear here to ensure that they appear above the convenience properties; -// inspectables declared in MGLMapView.h are always sorted before those in -// MGLMapView+IBAdditions.h, due to ASCII sort order. - -#if TARGET_INTERFACE_BUILDER - -// HACK: We want this property to look like a URL bar in the Attributes -// inspector, but just calling it styleURL would violate Cocoa naming -// conventions and conflict with the existing NSURL property. Fortunately, IB -// strips out the two underscores for display. -@property (nonatomic, nullable) IBInspectable NSString *styleURL__; - -#endif // TARGET_INTERFACE_BUILDER - -// Convenience properties related to the initial viewport. These properties -// are not meant to be used outside of Interface Builder. latitude and longitude -// are backed by properties of type CLLocationDegrees, but these declarations -// must use the type double because Interface Builder is unaware that -// CLLocationDegrees is a typedef for double. - -@property (nonatomic) IBInspectable double latitude; -@property (nonatomic) IBInspectable double longitude; -@property (nonatomic) IBInspectable double zoomLevel; -@property (nonatomic) IBInspectable double minimumZoomLevel; -@property (nonatomic) IBInspectable double maximumZoomLevel; - -// Renamed properties. Interface Builder derives the display name of each -// inspectable from the runtime name, but runtime names don’t always make sense -// in UI. - -@property (nonatomic) IBInspectable BOOL allowsZooming; -@property (nonatomic) IBInspectable BOOL allowsScrolling; -@property (nonatomic) IBInspectable BOOL allowsRotating; -@property (nonatomic) IBInspectable BOOL allowsTilting; -@property (nonatomic) IBInspectable BOOL showsUserLocation; -@property (nonatomic) IBInspectable BOOL showsHeading; -@property (nonatomic) IBInspectable BOOL showsScale; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLMapView+Impl.h b/platform/ios/src/MGLMapView+Impl.h deleted file mode 100644 index 232215bd1b9..00000000000 --- a/platform/ios/src/MGLMapView+Impl.h +++ /dev/null @@ -1,77 +0,0 @@ -#import -#import -#import - -#import -#import -#import - -@class MGLMapView; - -class MGLMapViewImpl : public mbgl::MapObserver { -public: - static std::unique_ptr Create(MGLMapView*); - - MGLMapViewImpl(MGLMapView*); - virtual ~MGLMapViewImpl() = default; - - virtual mbgl::gfx::RendererBackend& getRendererBackend() = 0; - - // Returns a handle to the OpenGL context object if this view is rendered with OpenGL. - virtual EAGLContext* getEAGLContext() { - return nullptr; - } - - // Gets called when the opaqueness of the view changes. - virtual void setOpaque(bool) = 0; - - // Triggers an immediate render of the underlying view. - virtual void display() = 0; - - // We update the transaction mode when the user adds annotation views that need to be layered on - // top of the view. - virtual void setPresentsWithTransaction(bool) = 0; - - // Called when initially creating the rendering view, and when resuming rendering after returning - // from the background. - virtual void createView() = 0; - - // We expose the underlying UIView because we need it in order to add annotation views above it. - virtual UIView* getView() = 0; - - // Called when the application goes to the background and we've replaced the interactively - // rendered map view with a static image. - virtual void deleteView() = 0; - - // called before the application goes to the background. The resulting image is used as a place - // holder instead of the regular view. This allows us to drop the framebuffers associated with - // the rendering context and reduce memory while in the background. - virtual UIImage* snapshot() = 0; - - // Called when UIView's layout has changed. - virtual void layoutChanged() {}; - - // Called by the view delegate when it's time to render. - void render(); - - // mbgl::MapObserver implementation - void onCameraWillChange(mbgl::MapObserver::CameraChangeMode) override; - void onCameraIsChanging() override; - void onCameraDidChange(mbgl::MapObserver::CameraChangeMode) override; - void onWillStartLoadingMap() override; - void onDidFinishLoadingMap() override; - void onDidFailLoadingMap(mbgl::MapLoadError mapError, const std::string& what) override; - void onWillStartRenderingFrame() override; - void onDidFinishRenderingFrame(mbgl::MapObserver::RenderFrameStatus) override; - void onWillStartRenderingMap() override; - void onDidFinishRenderingMap(mbgl::MapObserver::RenderMode) override; - void onDidFinishLoadingStyle() override; - void onSourceChanged(mbgl::style::Source& source) override; - void onDidBecomeIdle() override; - void onStyleImageMissing(const std::string& imageIdentifier) override; - bool onCanRemoveUnusedStyleImage(const std::string& imageIdentifier) override; - -protected: - /// Cocoa map view that this adapter bridges to. - __weak MGLMapView *mapView = nullptr; -}; diff --git a/platform/ios/src/MGLMapView+Impl.mm b/platform/ios/src/MGLMapView+Impl.mm deleted file mode 100644 index 0b9ab75699d..00000000000 --- a/platform/ios/src/MGLMapView+Impl.mm +++ /dev/null @@ -1,114 +0,0 @@ -#import "MGLMapView+Impl.h" -#import "MGLMapView+OpenGL.h" -#import "MGLStyle_Private.h" -#import "NSBundle+MGLAdditions.h" - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -#import "MMEEventsManager.h" -#endif - -std::unique_ptr MGLMapViewImpl::Create(MGLMapView* nativeView) { - return std::make_unique(nativeView); -} - -MGLMapViewImpl::MGLMapViewImpl(MGLMapView* nativeView_) : mapView(nativeView_) { -} - -void MGLMapViewImpl::render() { - [mapView renderSync]; -} - -void MGLMapViewImpl::onCameraWillChange(mbgl::MapObserver::CameraChangeMode mode) { - bool animated = mode == mbgl::MapObserver::CameraChangeMode::Animated; - [mapView cameraWillChangeAnimated:animated]; -} - -void MGLMapViewImpl::onCameraIsChanging() { - [mapView cameraIsChanging]; -} - -void MGLMapViewImpl::onCameraDidChange(mbgl::MapObserver::CameraChangeMode mode) { - bool animated = mode == mbgl::MapObserver::CameraChangeMode::Animated; - [mapView cameraDidChangeAnimated:animated]; -} - -void MGLMapViewImpl::onWillStartLoadingMap() { - [mapView mapViewWillStartLoadingMap]; -} - -void MGLMapViewImpl::onDidFinishLoadingMap() { - [mapView mapViewDidFinishLoadingMap]; -} - -void MGLMapViewImpl::onDidFailLoadingMap(mbgl::MapLoadError mapError, const std::string& what) { - NSString *description; - MGLErrorCode code; - switch (mapError) { - case mbgl::MapLoadError::StyleParseError: - code = MGLErrorCodeParseStyleFailed; - description = NSLocalizedStringWithDefaultValue(@"PARSE_STYLE_FAILED_DESC", nil, nil, @"The map failed to load because the style is corrupted.", @"User-friendly error description"); - break; - case mbgl::MapLoadError::StyleLoadError: - code = MGLErrorCodeLoadStyleFailed; - description = NSLocalizedStringWithDefaultValue(@"LOAD_STYLE_FAILED_DESC", nil, nil, @"The map failed to load because the style can't be loaded.", @"User-friendly error description"); - break; - case mbgl::MapLoadError::NotFoundError: - code = MGLErrorCodeNotFound; - description = NSLocalizedStringWithDefaultValue(@"STYLE_NOT_FOUND_DESC", nil, nil, @"The map failed to load because the style can’t be found or is incompatible.", @"User-friendly error description"); - break; - default: - code = MGLErrorCodeUnknown; - description = NSLocalizedStringWithDefaultValue(@"LOAD_MAP_FAILED_DESC", nil, nil, @"The map failed to load because an unknown error occurred.", @"User-friendly error description"); - } - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: description, - NSLocalizedFailureReasonErrorKey: @(what.c_str()), - }; - NSError *error = [NSError errorWithDomain:MGLErrorDomain code:code userInfo:userInfo]; -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR - [[MMEEventsManager sharedManager] reportError:error]; -#endif - [mapView mapViewDidFailLoadingMapWithError:error]; -} - -void MGLMapViewImpl::onWillStartRenderingFrame() { - [mapView mapViewWillStartRenderingFrame]; -} - -void MGLMapViewImpl::onDidFinishRenderingFrame(mbgl::MapObserver::RenderFrameStatus status) { - bool fullyRendered = status.mode == mbgl::MapObserver::RenderMode::Full; - [mapView mapViewDidFinishRenderingFrameFullyRendered:fullyRendered]; -} - -void MGLMapViewImpl::onWillStartRenderingMap() { - [mapView mapViewWillStartRenderingMap]; -} - -void MGLMapViewImpl::onDidFinishRenderingMap(mbgl::MapObserver::RenderMode mode) { - bool fullyRendered = mode == mbgl::MapObserver::RenderMode::Full; - [mapView mapViewDidFinishRenderingMapFullyRendered:fullyRendered]; -} - -void MGLMapViewImpl::onDidFinishLoadingStyle() { - [mapView mapViewDidFinishLoadingStyle]; -} - -void MGLMapViewImpl::onSourceChanged(mbgl::style::Source& source) { - NSString *identifier = @(source.getID().c_str()); - MGLSource * nativeSource = [mapView.style sourceWithIdentifier:identifier]; - [mapView sourceDidChange:nativeSource]; -} - -void MGLMapViewImpl::onDidBecomeIdle() { - [mapView mapViewDidBecomeIdle]; -} - -void MGLMapViewImpl::onStyleImageMissing(const std::string& imageIdentifier) { - NSString *imageName = [NSString stringWithUTF8String:imageIdentifier.c_str()]; - [mapView didFailToLoadImage:imageName]; -} - -bool MGLMapViewImpl::onCanRemoveUnusedStyleImage(const std::string &imageIdentifier) { - NSString *imageName = [NSString stringWithUTF8String:imageIdentifier.c_str()]; - return [mapView shouldRemoveStyleImage:imageName]; -} diff --git a/platform/ios/src/MGLMapView+OpenGL.h b/platform/ios/src/MGLMapView+OpenGL.h deleted file mode 100644 index b1c13724cbc..00000000000 --- a/platform/ios/src/MGLMapView+OpenGL.h +++ /dev/null @@ -1,60 +0,0 @@ -#import "MGLMapView+Impl.h" -#import "MGLMapView_Private.h" - -#include -#include - -@class MGLMapViewImplDelegate; - -/// Adapter responsible for bridging calls from mbgl to MGLMapView and Cocoa. -class MGLMapViewOpenGLImpl final : public MGLMapViewImpl, - public mbgl::gl::RendererBackend, - public mbgl::gfx::Renderable { -public: - MGLMapViewOpenGLImpl(MGLMapView*); - ~MGLMapViewOpenGLImpl() override; - -public: - void restoreFramebufferBinding(); - -#ifdef MGL_RECREATE_GL_IN_AN_EMERGENCY -private: - void emergencyRecreateGL(); -#endif - - // Implementation of mbgl::gfx::RendererBackend -public: - mbgl::gfx::Renderable& getDefaultRenderable() override { - return *this; - } - -private: - void activate() override; - void deactivate() override; - // End implementation of mbgl::gfx::RendererBackend - - // Implementation of mbgl::gl::RendererBackend -public: - void updateAssumedState() override; - -private: - mbgl::gl::ProcAddress getExtensionFunctionPointer(const char* name) override; - // End implementation of mbgl::gl::Rendererbackend - - // Implementation of MGLMapViewImpl -public: - mbgl::gfx::RendererBackend& getRendererBackend() override { - return *this; - } - - EAGLContext* getEAGLContext() override; - void setOpaque(bool) override; - void display() override; - void setPresentsWithTransaction(bool) override; - void createView() override; - UIView* getView() override; - void deleteView() override; - UIImage* snapshot() override; - void layoutChanged() override; - // End implementation of MGLMapViewImpl -}; diff --git a/platform/ios/src/MGLMapView+OpenGL.mm b/platform/ios/src/MGLMapView+OpenGL.mm deleted file mode 100644 index ad30b608e57..00000000000 --- a/platform/ios/src/MGLMapView+OpenGL.mm +++ /dev/null @@ -1,277 +0,0 @@ -#import "MGLFoundation_Private.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLMapView+OpenGL.h" - -#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR -#import "MMEConstants.h" -#import "MGLMapboxEvents.h" -#endif - -#include - -#import -#import -#import - -@interface MGLMapViewImplDelegate : NSObject -@end - -@implementation MGLMapViewImplDelegate { - MGLMapViewOpenGLImpl* _impl; -} - -- (instancetype)initWithImpl:(MGLMapViewOpenGLImpl*)impl { - if (self = [super init]) { - _impl = impl; - } - return self; -} - -- (void)glkView:(nonnull GLKView*)view drawInRect:(CGRect)rect { - _impl->render(); -} - -@end - -namespace { -CGFloat contentScaleFactor() { - return [UIScreen instancesRespondToSelector:@selector(nativeScale)] - ? [[UIScreen mainScreen] nativeScale] - : [[UIScreen mainScreen] scale]; -} -} // namespace - -class MGLMapViewOpenGLRenderableResource final : public mbgl::gl::RenderableResource { -public: - MGLMapViewOpenGLRenderableResource(MGLMapViewOpenGLImpl& backend_) - : backend(backend_), - delegate([[MGLMapViewImplDelegate alloc] initWithImpl:&backend]), - atLeastiOS_12_2_0([NSProcessInfo.processInfo - isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){ 12, 2, 0 }]) { - } - - void bind() override { - backend.restoreFramebufferBinding(); - } - - mbgl::Size framebufferSize() { - assert(glView); - return { static_cast(glView.drawableWidth), - static_cast(glView.drawableHeight) }; - } - -private: - MGLMapViewOpenGLImpl& backend; - -public: - MGLMapViewImplDelegate* delegate = nil; - GLKView *glView = nil; - EAGLContext *context = nil; - const bool atLeastiOS_12_2_0; - - // We count how often the context was activated/deactivated so that we can truly deactivate it - // after the activation count drops to 0. - NSUInteger activationCount = 0; -}; - -MGLMapViewOpenGLImpl::MGLMapViewOpenGLImpl(MGLMapView* nativeView_) - : MGLMapViewImpl(nativeView_), - mbgl::gl::RendererBackend(mbgl::gfx::ContextMode::Unique), - mbgl::gfx::Renderable({ 0, 0 }, std::make_unique(*this)) { -} - -MGLMapViewOpenGLImpl::~MGLMapViewOpenGLImpl() { - auto& resource = getResource(); - if (resource.context && [[EAGLContext currentContext] isEqual:resource.context]) { - [EAGLContext setCurrentContext:nil]; - } -} - -void MGLMapViewOpenGLImpl::setOpaque(const bool opaque) { - auto& resource = getResource(); - resource.glView.opaque = opaque; - resource.glView.layer.opaque = opaque; -} - -void MGLMapViewOpenGLImpl::setPresentsWithTransaction(const bool value) { - auto& resource = getResource(); - CAEAGLLayer* eaglLayer = MGL_OBJC_DYNAMIC_CAST(resource.glView.layer, CAEAGLLayer); - eaglLayer.presentsWithTransaction = value; -} - -void MGLMapViewOpenGLImpl::display() { - auto& resource = getResource(); - - // See https://github.com/mapbox/mapbox-gl-native/issues/14232 - // glClear can be blocked for 1 second. This code is an "escape hatch", - // an attempt to detect this situation and rebuild the GL views. - if (mapView.enablePresentsWithTransaction && resource.atLeastiOS_12_2_0) { - CFTimeInterval before = CACurrentMediaTime(); - [resource.glView display]; - CFTimeInterval after = CACurrentMediaTime(); - - if (after - before >= 1.0) { -#ifdef MGL_RECREATE_GL_IN_AN_EMERGENCY - dispatch_async(dispatch_get_main_queue(), ^{ - emergencyRecreateGL(); - }); -#else - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSError *error = [NSError errorWithDomain:MGLErrorDomain - code:MGLErrorCodeRenderingError - userInfo:@{ NSLocalizedFailureReasonErrorKey : - @"https://github.com/mapbox/mapbox-gl-native/issues/14232" }]; - [[MMEEventsManager sharedManager] reportError:error]; - }); -#endif - } - } else { - [resource.glView display]; - } -} - -void MGLMapViewOpenGLImpl::createView() { - auto& resource = getResource(); - if (resource.glView) { - return; - } - - if (!resource.context) { - resource.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; - assert(resource.context); - } - - resource.glView = [[GLKView alloc] initWithFrame:mapView.bounds context:resource.context]; - resource.glView.delegate = resource.delegate; - resource.glView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - resource.glView.contentScaleFactor = contentScaleFactor(); - resource.glView.contentMode = UIViewContentModeCenter; - resource.glView.drawableStencilFormat = GLKViewDrawableStencilFormat8; - resource.glView.drawableDepthFormat = GLKViewDrawableDepthFormat16; - resource.glView.opaque = mapView.opaque; - resource.glView.layer.opaque = mapView.opaque; - resource.glView.enableSetNeedsDisplay = NO; - CAEAGLLayer* eaglLayer = MGL_OBJC_DYNAMIC_CAST(resource.glView.layer, CAEAGLLayer); - eaglLayer.presentsWithTransaction = NO; - - [mapView insertSubview:resource.glView atIndex:0]; -} - -UIView* MGLMapViewOpenGLImpl::getView() { - auto& resource = getResource(); - return resource.glView; -} - -void MGLMapViewOpenGLImpl::deleteView() { - auto& resource = getResource(); - [resource.glView deleteDrawable]; -} - -#ifdef MGL_RECREATE_GL_IN_AN_EMERGENCY -// See https://github.com/mapbox/mapbox-gl-native/issues/14232 -void MGLMapViewOpenGLImpl::emergencyRecreateGL() { - auto& resource = getResource(); - MGLLogError(@"Rendering took too long - creating GL views"); - - CAEAGLLayer* eaglLayer = MGL_OBJC_DYNAMIC_CAST(resource.glView.layer, CAEAGLLayer); - eaglLayer.presentsWithTransaction = NO; - - [mapView pauseRendering:nil]; - - // Just performing a pauseRendering:/resumeRendering: pair isn't sufficient - in this case - // we can still get errors when calling bindDrawable. Here we completely - // recreate the GLKView - - [mapView.userLocationAnnotationView removeFromSuperview]; - [resource.glView removeFromSuperview]; - - // Recreate the view - resource.glView = nil; - createView(); - - if (mapView.annotationContainerView) { - [resource.glView insertSubview:mapView.annotationContainerView atIndex:0]; - } - - [mapView updateUserLocationAnnotationView]; - - // Do not bind...yet - - if (mapView.window) { - [mapView resumeRendering:nil]; - eaglLayer = MGL_OBJC_DYNAMIC_CAST(resource.glView.layer, CAEAGLLayer); - eaglLayer.presentsWithTransaction = mapView.enablePresentsWithTransaction; - } else { - MGLLogDebug(@"No window - skipping resumeRendering"); - } -} -#endif - -mbgl::gl::ProcAddress MGLMapViewOpenGLImpl::getExtensionFunctionPointer(const char* name) { - static CFBundleRef framework = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.opengles")); - if (!framework) { - throw std::runtime_error("Failed to load OpenGL framework."); - } - - return reinterpret_cast(CFBundleGetFunctionPointerForName( - framework, (__bridge CFStringRef)[NSString stringWithUTF8String:name])); -} - -void MGLMapViewOpenGLImpl::activate() { - auto& resource = getResource(); - if (resource.activationCount++) { - return; - } - - [EAGLContext setCurrentContext:resource.context]; -} - -void MGLMapViewOpenGLImpl::deactivate() { - auto& resource = getResource(); - if (--resource.activationCount) { - return; - } - - [EAGLContext setCurrentContext:nil]; -} - -/// This function is called before we start rendering, when iOS invokes our rendering method. -/// iOS already sets the correct framebuffer and viewport for us, so we need to update the -/// context state with the anticipated values. -void MGLMapViewOpenGLImpl::updateAssumedState() { - auto& resource = getResource(); - assumeFramebufferBinding(ImplicitFramebufferBinding); - assumeViewport(0, 0, resource.framebufferSize()); -} - -void MGLMapViewOpenGLImpl::restoreFramebufferBinding() { - auto& resource = getResource(); - if (!implicitFramebufferBound()) { - // Something modified our state, and we need to bind the original drawable again. - // Doing this also sets the viewport to the full framebuffer. - // Note that in reality, iOS does not use the Framebuffer 0 (it's typically 1), and we - // only use this is a placeholder value. - [resource.glView bindDrawable]; - updateAssumedState(); - } else { - // Our framebuffer is still bound, but the viewport might have changed. - setViewport(0, 0, resource.framebufferSize()); - } -} - -UIImage* MGLMapViewOpenGLImpl::snapshot() { - auto& resource = getResource(); - return resource.glView.snapshot; -} - -void MGLMapViewOpenGLImpl::layoutChanged() { - const auto scaleFactor = contentScaleFactor(); - size = { static_cast(mapView.bounds.size.width * scaleFactor), - static_cast(mapView.bounds.size.height * scaleFactor) }; -} - -EAGLContext* MGLMapViewOpenGLImpl::getEAGLContext() { - auto& resource = getResource(); - return resource.context; -} diff --git a/platform/ios/src/MGLMapView.h b/platform/ios/src/MGLMapView.h deleted file mode 100644 index 8f27adee9ed..00000000000 --- a/platform/ios/src/MGLMapView.h +++ /dev/null @@ -1,1968 +0,0 @@ -#import - -#import "MGLCompassButton.h" -#import "MGLFoundation.h" -#import "MGLGeometry.h" -#import "MGLMapCamera.h" -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MGLAnnotationView; -@class MGLAnnotationImage; -@class MGLUserLocation; -@class MGLPolyline; -@class MGLPolygon; -@class MGLShape; -@class MGLStyle; - -@protocol MGLMapViewDelegate; -@protocol MGLAnnotation; -@protocol MGLOverlay; -@protocol MGLCalloutView; -@protocol MGLFeature; -@protocol MGLLocationManager; - -/** Options for `MGLMapView.decelerationRate`. */ -typedef CGFloat MGLMapViewDecelerationRate NS_TYPED_EXTENSIBLE_ENUM; - -/** The default deceleration rate for a map view. */ -FOUNDATION_EXTERN MGL_EXPORT const MGLMapViewDecelerationRate MGLMapViewDecelerationRateNormal; - -/** A fast deceleration rate for a map view. */ -FOUNDATION_EXTERN MGL_EXPORT const MGLMapViewDecelerationRate MGLMapViewDecelerationRateFast; - -/** Disables deceleration in a map view. */ -FOUNDATION_EXTERN MGL_EXPORT const MGLMapViewDecelerationRate MGLMapViewDecelerationRateImmediate; - -/** - The vertical alignment of an annotation within a map view. Used with - `MGLMapView.userLocationVerticalAlignment`. - */ -typedef NS_ENUM(NSUInteger, MGLAnnotationVerticalAlignment) { - /** Aligns the annotation vertically in the center of the map view. */ - MGLAnnotationVerticalAlignmentCenter = 0, - /** Aligns the annotation vertically at the top of the map view. */ - MGLAnnotationVerticalAlignmentTop, - /** Aligns the annotation vertically at the bottom of the map view. */ - MGLAnnotationVerticalAlignmentBottom, -}; - -/** - The position of scale bar, compass, logo and attribution in a map view. Used with - `MGLMapView.scaleBarPosition`, - `MGLMapView.compassViewPosition`, - `MGLMapView.logoViewPosition`, - `MGLMapView.attributionButtonPosition`. - */ -typedef NS_ENUM(NSUInteger, MGLOrnamentPosition) { - /** Place the ornament in the top left of the map view. */ - MGLOrnamentPositionTopLeft = 0, - /** Place the ornament in the top right of the map view. */ - MGLOrnamentPositionTopRight, - /** Place the ornament in the bottom left of the map view. */ - MGLOrnamentPositionBottomLeft, - /** Place the ornament in the bottom right of the map view. */ - MGLOrnamentPositionBottomRight, -}; - -/** - The mode used to track the user location on the map. Used with - `MGLMapView.userTrackingMode`. - - #### Related examples - See the - Switch between user tracking modes example to learn how to toggle modes and - how each mode behaves. - */ -typedef NS_ENUM(NSUInteger, MGLUserTrackingMode) { - /** The map does not follow the user location. */ - MGLUserTrackingModeNone = 0, - /** The map follows the user location. This tracking mode falls back - to `MGLUserTrackingModeNone` if the user pans the map view. */ - MGLUserTrackingModeFollow, - /** - The map follows the user location and rotates when the heading changes. - The default user location annotation displays a fan-shaped indicator with - the current heading. The heading indicator represents the direction the - device is facing, which is sized according to the reported accuracy. - - This tracking mode is disabled if the user pans the map view, but - remains enabled if the user zooms in. If the user rotates the map - view, this tracking mode will fall back to `MGLUserTrackingModeFollow`. - */ - MGLUserTrackingModeFollowWithHeading, - /** - The map follows the user location and rotates when the course changes. - Course represents the direction in which the device is traveling. - The default user location annotation shows a puck-shaped indicator - that rotates as the course changes. - - This tracking mode is disabled if the user pans the map view, but - remains enabled if the user zooms in. If the user rotates the map view, - this tracking mode will fall back to `MGLUserTrackingModeFollow`. - */ - MGLUserTrackingModeFollowWithCourse, -}; - -/** Options for `MGLMapView.preferredFramesPerSecond`. */ -typedef NSInteger MGLMapViewPreferredFramesPerSecond NS_TYPED_EXTENSIBLE_ENUM; - -/** - The default frame rate. This can be either 30 FPS or 60 FPS, depending on - device capabilities. - */ -FOUNDATION_EXTERN MGL_EXPORT const MGLMapViewPreferredFramesPerSecond MGLMapViewPreferredFramesPerSecondDefault; - -/** A conservative frame rate; typically 30 FPS. */ -FOUNDATION_EXTERN MGL_EXPORT const MGLMapViewPreferredFramesPerSecond MGLMapViewPreferredFramesPerSecondLowPower; - -/** The maximum supported frame rate; typically 60 FPS. */ -FOUNDATION_EXTERN MGL_EXPORT const MGLMapViewPreferredFramesPerSecond MGLMapViewPreferredFramesPerSecondMaximum; - -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLMissingLocationServicesUsageDescriptionException; -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLUserLocationAnnotationTypeException; - -/** - An interactive, customizable map view with an interface similar to the one - provided by Apple’s MapKit. - - Using `MGLMapView`, you can embed the map inside a view, allow users to - manipulate it with standard gestures, animate the map between different - viewpoints, and present information in the form of annotations and overlays. - - The map view loads scalable vector tiles that conform to the - Mapbox Vector Tile Specification. - It styles them with a style that conforms to the - Mapbox Style Specification. - Such styles can be designed in - Mapbox Studio and hosted on - mapbox.com. - - A collection of Mapbox-hosted styles is available through the `MGLStyle` - class. These basic styles use - Mapbox Streets - or Mapbox Satellite data - sources, but you can specify a custom style that makes use of your own data. - - Mapbox-hosted vector tiles and styles require an API access token, which you - can obtain from the - Mapbox account page. - Access tokens associate requests to Mapbox’s vector tile and style APIs with - your Mapbox account. They also deter other developers from using your styles - without your permission. - - Because `MGLMapView` loads asynchronously, several delegate methods are available - for receiving map-related updates. These methods can be used to ensure that certain operations - have completed before taking any additional actions. Information on these methods is located - in the `MGLMapViewDelegate` protocol documentation. - - Adding your own gesture recognizer to `MGLMapView` will block the corresponding - gesture recognizer built into `MGLMapView`. To avoid conflicts, define which - gesture takes precedence. For example, you can create your own - `UITapGestureRecognizer` that will be invoked only if the default `MGLMapView` - tap gesture fails: - - ```swift - let mapTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(myCustomFunction)) - for recognizer in mapView.gestureRecognizers! where recognizer is UITapGestureRecognizer { - mapTapGestureRecognizer.require(toFail: recognizer) - } - mapView.addGestureRecognizer(mapTapGestureRecognizer) - ``` - - @note You are responsible for getting permission to use the map data and for - ensuring that your use adheres to the relevant terms of use. - - #### Related examples - See the - Simple map view example to learn how to initialize a basic `MGLMapView`. - */ -MGL_EXPORT -@interface MGLMapView : UIView - -#pragma mark Creating Instances - -/** - Initializes and returns a newly allocated map view with the specified frame - and the default style. - - @param frame The frame for the view, measured in points. - @return An initialized map view. - */ -- (instancetype)initWithFrame:(CGRect)frame; - -/** - Initializes and returns a newly allocated map view with the specified frame - and style URL. - - @param frame The frame for the view, measured in points. - @param styleURL URL of the map style to display. The URL may be a full HTTP - or HTTPS URL, a Mapbox style URL - (`mapbox://styles/{user}/{style}`), or a path to a local file relative - to the application’s resource path. Specify `nil` for the default style. - @return An initialized map view. - - #### Related examples - See the - Apply a style designed in Mapbox Studio example to learn how to - initialize an `MGLMapView` with a custom style. See the - Apply a - style designed in Mapbox Studio Classic example to learn how to intialize - an `MGLMapView` with a Studio Classic style _or_ a custom style JSON. See the - Use - third-party vector tiles example to learn how to initialize an - `MGLMapView` with a third-party tile source. - */ -- (instancetype)initWithFrame:(CGRect)frame styleURL:(nullable NSURL *)styleURL; - -#pragma mark Accessing the Delegate - -/** - The receiver’s delegate. - - A map view sends messages to its delegate to notify it of changes to its - contents or the viewpoint. The delegate also provides information about - annotations displayed on the map, such as the styles to apply to individual - annotations. - */ -@property(nonatomic, weak, nullable) IBOutlet id delegate; - -#pragma mark Configuring the Map’s Appearance - -/** - The style currently displayed in the receiver. - - Unlike the `styleURL` property, this property is set to an object that allows - you to manipulate every aspect of the style locally. - - If the style is loading, this property is set to `nil` until the style finishes - loading. If the style has failed to load, this property is set to `nil`. - Because the style loads asynchronously, you should manipulate it in the - `-[MGLMapViewDelegate mapView:didFinishLoadingStyle:]` or - `-[MGLMapViewDelegate mapViewDidFinishLoadingMap:]` method. It is not possible - to manipulate the style before it has finished loading. - - @note The default styles provided by Mapbox contain sources and layers with - identifiers that will change over time. Applications that use APIs that - manipulate a style’s sources and layers must first set the style URL to an - explicitly versioned style using a convenience method like - `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL” - inspectable in Interface Builder, or a manually constructed `NSURL`. - */ -@property (nonatomic, readonly, nullable) MGLStyle *style; - -/** - URL of the style currently displayed in the receiver. - - The URL may be a full HTTP or HTTPS URL, a Mapbox - style URL (`mapbox://styles/{user}/{style}`), or a path to a local file - relative to the application’s resource path. - - If you set this property to `nil`, the receiver will use the default style - and this property will automatically be set to that style’s URL. - - If you want to modify the current style without replacing it outright, or if - you want to introspect individual style attributes, use the `style` property. - - #### Related examples - See the - Switch between map styles example to learn how to change the style of - a map at runtime. - */ -@property (nonatomic, null_resettable) NSURL *styleURL; - -/** - Reloads the style. - - You do not normally need to call this method. The map view automatically - responds to changes in network connectivity by reloading the style. You may - need to call this method if you change the access token after a style has - loaded but before loading a style associated with a different Mapbox account. - - This method does not bust the cache. Even if the style has recently changed on - the server, calling this method does not necessarily ensure that the map view - reflects those changes. - */ -- (IBAction)reloadStyle:(nullable id)sender; - -/** - A boolean value that indicates if whether the map view should automatically - adjust its content insets. - - When this property is set to `YES` the map automatically updates its - `contentInset` property to account for any area not covered by navigation bars, - tab bars, toolbars, and other ancestors that obscure the map view. - - */ -@property (assign) BOOL automaticallyAdjustsContentInset; - -/** - A Boolean value indicating whether the map may display scale information. - - The scale bar may not be shown at all zoom levels. The scale bar becomes visible - when the maximum distance visible on the map view is less than 400 miles (800 - kilometers). The zoom level where this occurs depends on the latitude at the map - view’s center coordinate, as well as the device screen width. At latitudes - farther from the equator, the scale bar becomes visible at lower zoom levels. - - The unit of measurement is determined by the user's device locale. - - The view controlled by this property is available at `scaleBar`. The default value - of this property is `NO`. - */ -@property (nonatomic, assign) BOOL showsScale; - -/** - A control indicating the scale of the map. The scale bar is positioned in the - upper-left corner. Enable the scale bar via `showsScale`. - */ -@property (nonatomic, readonly) UIView *scaleBar; - -/** - The position of the scale bar. The default value is `MGLOrnamentPositionTopLeft`. - */ -@property (nonatomic, assign) MGLOrnamentPosition scaleBarPosition; - -/** - A `CGPoint` indicating the position offset of the scale bar. - */ -@property (nonatomic, assign) CGPoint scaleBarMargins; - -/** - A control indicating the map’s direction and allowing the user to manipulate - the direction, positioned in the upper-right corner. - */ -@property (nonatomic, readonly) MGLCompassButton *compassView; - -/** - The position of the compass view. The default value is `MGLOrnamentPositionTopRight`. - */ -@property (nonatomic, assign) MGLOrnamentPosition compassViewPosition; - -/** - A `CGPoint` indicating the position offset of the compass. - */ -@property (nonatomic, assign) CGPoint compassViewMargins; - -/** - The Mapbox logo, positioned in the lower-left corner. - - @note The Mapbox terms of service, which governs the use of Mapbox-hosted - vector tiles and styles, - requires most Mapbox - customers to display the Mapbox logo. If this applies to you, do not - hide this view or change its contents. - */ -@property (nonatomic, readonly) UIImageView *logoView; - -/** - The position of the logo view. The default value is `MGLOrnamentPositionBottomLeft`. - */ -@property (nonatomic, assign) MGLOrnamentPosition logoViewPosition; - -/** - A `CGPoint` indicating the position offset of the logo. - */ -@property (nonatomic, assign) CGPoint logoViewMargins; - - -/** - A view showing legally required copyright notices and telemetry settings, - positioned at the bottom-right of the map view. - - If you choose to reimplement this view, assign the `-showAttribution:` method - as the action for your view to present the default notices and settings. - - @note The Mapbox terms of service, which governs the use of Mapbox-hosted - vector tiles and styles, - requires these - copyright notices to accompany any map that features Mapbox-designed styles, - OpenStreetMap data, or other Mapbox data such as satellite or terrain - data. If that applies to this map view, do not hide this view or remove - any notices from it. - - @note You are additionally - required - to provide users with the option to disable anonymous usage and location - sharing (telemetry). If this view is hidden, you must implement this - setting elsewhere in your app or via `Settings.bundle`. See our - website for - implementation help. - */ -@property (nonatomic, readonly) UIButton *attributionButton; - -/** - The position of the attribution button. The default value is `MGLOrnamentPositionBottomRight`. - */ -@property (nonatomic, assign) MGLOrnamentPosition attributionButtonPosition; - -/** - A `CGPoint` indicating the position offset of the attribution. - */ -@property (nonatomic, assign) CGPoint attributionButtonMargins; - -/** - Show the attribution and telemetry action sheet. - - This action is performed when the user taps on the attribution button provided - by default via the `attributionButton` property. If you implement a custom - attribution button, you should add this action to the button. - */ -- (IBAction)showAttribution:(id)sender; - -/** - The preferred frame rate at which the map view is rendered. - - The default value for this property is - `MGLMapViewPreferredFramesPerSecondDefault`, which will adaptively set the - preferred frame rate based on the capability of the user’s device to maintain - a smooth experience. - - In addition to the provided `MGLMapViewPreferredFramesPerSecond` options, this - property can be set to arbitrary integer values. - - @see `CADisplayLink.preferredFramesPerSecond` - */ -@property (nonatomic, assign) MGLMapViewPreferredFramesPerSecond preferredFramesPerSecond; - -/** - A Boolean value indicating whether the map should prefetch tiles. - - When this property is set to `YES`, the map view prefetches tiles designed for - a low zoom level and displays them until receiving more detailed tiles for the - current zoom level. The prefetched tiles typically contain simplified versions - of each shape, improving the map view’s perceived performance. - - The default value of this property is `YES`. - */ -@property (nonatomic, assign) BOOL prefetchesTiles; - -#pragma mark Displaying the User’s Location - -/** - The object that this map view uses to start and stop the delivery of - location-related updates. - - To receive the current user location, implement the - `-[MGLMapViewDelegate mapView:didUpdateUserLocation:]` and - `-[MGLMapViewDelegate mapView:didFailToLocateUserWithError:]` methods. - - If setting this property to `nil` or if no custom manager is provided this - property is set to the default location manager. - - `MGLMapView` uses a default location manager. If you want to substitute your - own location manager, you should do so by setting this property before setting - `showsUserLocation` to `YES`. To restore the default location manager, - set this property to `nil`. - */ -@property (nonatomic, null_resettable) id locationManager; - -/** - A Boolean value indicating whether the map may display the user location. - - Setting this property to `YES` causes the map view to use the Core Location - framework to find the current location. As long as this property is `YES`, the - map view continues to track the user’s location and update it periodically. - - This property does not indicate whether the user’s position is actually visible - on the map, only whether the map view is allowed to display it. To determine - whether the user’s position is visible, use the `userLocationVisible` property. - The default value of this property is `NO`. - - Your app must specify a value for `NSLocationWhenInUseUsageDescription` or - `NSLocationAlwaysUsageDescription` in its `Info.plist` to satisfy the - requirements of the underlying Core Location framework when enabling this - property. - - If you implement a custom location manager, set the `locationManager` before - calling `showsUserLocation`. - */ -@property (nonatomic, assign) BOOL showsUserLocation; - -/** - A Boolean value indicating whether the device’s current location is visible in - the map view. - - Use `showsUserLocation` to control the visibility of the on-screen user - location annotation. - */ -@property (nonatomic, assign, readonly, getter=isUserLocationVisible) BOOL userLocationVisible; - -/** - Returns the annotation object indicating the user’s current location. - */ -@property (nonatomic, readonly, nullable) MGLUserLocation *userLocation; - -/** - The mode used to track the user location. The default value is - `MGLUserTrackingModeNone`. - - Changing the value of this property updates the map view with an animated - transition. If you don’t want to animate the change, use the - `-setUserTrackingMode:animated:` method instead. - - #### Related examples - See the - Customize the user location annotation to learn how to customize the - default user location annotation shown by `MGLUserTrackingMode`. - */ -@property (nonatomic, assign) MGLUserTrackingMode userTrackingMode; - -/** - Deprecated. Sets the mode used to track the user location, with an optional transition. - - To specify a completion handler to execute after the animation finishes, use - the `-setUserTrackingMode:animated:completionHandler:` method. - - @param mode The mode used to track the user location. - @param animated If `YES`, there is an animated transition from the current - viewport to a viewport that results from the change to `mode`. If `NO`, the - map view instantaneously changes to the new viewport. This parameter only - affects the initial transition; subsequent changes to the user location or - heading are always animated. - */ -- (void)setUserTrackingMode:(MGLUserTrackingMode)mode animated:(BOOL)animated __attribute__((deprecated("Use `-setUserTrackingMode:animated:completionHandler:` instead."))); - -/** - Sets the mode used to track the user location, with an optional transition and - completion handler. - - @param mode The mode used to track the user location. - @param animated If `YES`, there is an animated transition from the current - viewport to a viewport that results from the change to `mode`. If `NO`, the - map view instantaneously changes to the new viewport. This parameter only - affects the initial transition; subsequent changes to the user location or - heading are always animated. - @param completion The block executed after the animation finishes. - */ -- (void)setUserTrackingMode:(MGLUserTrackingMode)mode animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion; - -/** - The vertical alignment of the user location annotation within the receiver. The - default value is `MGLAnnotationVerticalAlignmentCenter`. - - Changing the value of this property updates the map view with an animated - transition. If you don’t want to animate the change, use the - `-setUserLocationVerticalAlignment:animated:` method instead. - */ -@property (nonatomic, assign) MGLAnnotationVerticalAlignment userLocationVerticalAlignment __attribute__((deprecated("Use `-[MGLMapViewDelegate mapViewUserLocationAnchorPoint:]` instead."))); - -/** - Sets the vertical alignment of the user location annotation within the - receiver, with an optional transition. - - @param alignment The vertical alignment of the user location annotation. - @param animated If `YES`, the user location annotation animates to its new - position within the map view. If `NO`, the user location annotation - instantaneously moves to its new position. - */ -- (void)setUserLocationVerticalAlignment:(MGLAnnotationVerticalAlignment)alignment animated:(BOOL)animated __attribute__((deprecated("Use `-[MGLMapViewDelegate mapViewUserLocationAnchorPoint:]` instead."))); - -/** - Updates the position of the user location annotation view by retreiving the user's last - known location. - */ -- (void)updateUserLocationAnnotationView; - -/** - Updates the position of the user location annotation view by retreiving the user's last - known location with a specified duration. - @param duration The duration to animate the change in seconds. -*/ -- (void)updateUserLocationAnnotationViewAnimatedWithDuration:(NSTimeInterval)duration; - -/** - A Boolean value indicating whether the user location annotation may display a - permanent heading indicator. - - Setting this property to `YES` causes the default user location annotation to - appear and always show an arrow-shaped heading indicator, if heading is - available. This property does not rotate the map; for that, see - `MGLUserTrackingModeFollowWithHeading`. - - This property has no effect when `userTrackingMode` is - `MGLUserTrackingModeFollowWithHeading` or - `MGLUserTrackingModeFollowWithCourse`. - - The default value of this property is `NO`. - */ -@property (nonatomic, assign) BOOL showsUserHeadingIndicator; - -/** - Whether the map view should display a heading calibration alert when necessary. - The default value is `YES`. - */ -@property (nonatomic, assign) BOOL displayHeadingCalibration; - -/** - The geographic coordinate that is the subject of observation as the user - location is being tracked. - - By default, this property is set to an invalid coordinate, indicating that - there is no target. In course tracking mode, the target forms one of two foci - in the viewport, the other being the user location annotation. Typically, this - property is set to a destination or waypoint in a real-time navigation scene. - As the user annotation moves toward the target, the map automatically zooms in - to fit both foci optimally within the viewport. - - This property has no effect if the `userTrackingMode` property is set to a - value other than `MGLUserTrackingModeFollowWithCourse`. - - Changing the value of this property updates the map view with an animated - transition. If you don’t want to animate the change, use the - `-setTargetCoordinate:animated:` method instead. - */ -@property (nonatomic, assign) CLLocationCoordinate2D targetCoordinate; - -/** - Deprecated. Sets the geographic coordinate that is the subject of observation as - the user location is being tracked, with an optional transition animation. - - By default, the target coordinate is set to an invalid coordinate, indicating - that there is no target. In course tracking mode, the target forms one of two - foci in the viewport, the other being the user location annotation. Typically, - the target is set to a destination or waypoint in a real-time navigation scene. - As the user annotation moves toward the target, the map automatically zooms in - to fit both foci optimally within the viewport. - - This method has no effect if the `userTrackingMode` property is set to a value - other than `MGLUserTrackingModeFollowWithCourse`. - - To specify a completion handler to execute after the animation finishes, use - the `-setTargetCoordinate:animated:completionHandler:` method. - - @param targetCoordinate The target coordinate to fit within the viewport. - @param animated If `YES`, the map animates to fit the target within the map - view. If `NO`, the map fits the target instantaneously. - */ -- (void)setTargetCoordinate:(CLLocationCoordinate2D)targetCoordinate animated:(BOOL)animated __attribute__((deprecated("Use `-setTargetCoordinate:animated:completionHandler:` instead."))); - -/** - Sets the geographic coordinate that is the subject of observation as the user - location is being tracked, with an optional transition animation and completion - handler. - - By default, the target coordinate is set to an invalid coordinate, indicating - that there is no target. In course tracking mode, the target forms one of two - foci in the viewport, the other being the user location annotation. Typically, - the target is set to a destination or waypoint in a real-time navigation scene. - As the user annotation moves toward the target, the map automatically zooms in - to fit both foci optimally within the viewport. - - This method has no effect if the `userTrackingMode` property is set to a value - other than `MGLUserTrackingModeFollowWithCourse`. - - @param targetCoordinate The target coordinate to fit within the viewport. - @param animated If `YES`, the map animates to fit the target within the map - view. If `NO`, the map fits the target instantaneously. - @param completion The block executed after the animation finishes. - */ -- (void)setTargetCoordinate:(CLLocationCoordinate2D)targetCoordinate animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion; - -#pragma mark Configuring How the User Interacts with the Map - -/** - A Boolean value that determines whether the user may zoom the map in and - out, changing the zoom level. - - When this property is set to `YES`, the default, the user may zoom the map - in and out by pinching two fingers or by double tapping, holding, and moving - the finger up and down. - - This property controls only user interactions with the map. If you set the - value of this property to `NO`, you may still change the map zoom - programmatically. - */ -@property(nonatomic, getter=isZoomEnabled) BOOL zoomEnabled; - -/** - A Boolean value that determines whether the user may scroll around the map, - changing the center coordinate. - - When this property is set to `YES`, the default, the user may scroll the map - by dragging or swiping with one finger. - - This property controls only user interactions with the map. If you set the - value of this property to `NO`, you may still change the map location - programmatically. - */ -@property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled; - -/** - A Boolean value that determines whether the user may rotate the map, - changing the direction. - - When this property is set to `YES`, the default, the user may rotate the map - by moving two fingers in a circular motion. - - This property controls only user interactions with the map. If you set the - value of this property to `NO`, you may still rotate the map - programmatically. - */ -@property(nonatomic, getter=isRotateEnabled) BOOL rotateEnabled; - -/** - A Boolean value that determines whether the user may change the pitch (tilt) of - the map. - - When this property is set to `YES`, the default, the user may tilt the map by - vertically dragging two fingers. - - This property controls only user interactions with the map. If you set the - value of this property to `NO`, you may still change the pitch of the map - programmatically. - - The default value of this property is `YES`. - */ -@property(nonatomic, getter=isPitchEnabled) BOOL pitchEnabled; - -/** - A Boolean value that determines whether the user will receive haptic feedback - for certain interactions with the map. - - When this property is set to `YES`, the default, a `UIImpactFeedbackStyleLight` - haptic feedback event be played when the user rotates the map to due north - (0°). - - This feature requires a device that supports haptic feedback, running iOS 10 or - newer. - */ -@property(nonatomic, getter=isHapticFeedbackEnabled) BOOL hapticFeedbackEnabled; - -/** - A floating-point value that determines the rate of deceleration after the user - lifts their finger. - - Your application can use the `MGLMapViewDecelerationRateNormal` and - `MGLMapViewDecelerationRateFast` constants as reference points for reasonable - deceleration rates. `MGLMapViewDecelerationRateImmediate` can be used to - disable deceleration entirely. - */ -@property(nonatomic) CGFloat decelerationRate; - -#pragma mark Manipulating the Viewpoint - -/** - The geographic coordinate at the center of the map view. - - Changing the value of this property centers the map on the new coordinate - without changing the current zoom level. - - Changing the value of this property updates the map view immediately. If you - want to animate the change, use the `-setCenterCoordinate:animated:` method - instead. - */ -@property (nonatomic) CLLocationCoordinate2D centerCoordinate; - -/** - Changes the center coordinate of the map and optionally animates the change. - - Changing the center coordinate centers the map on the new coordinate without - changing the current zoom level. For animated changes, wait until the map view has - finished loading before calling this method. - - @param coordinate The new center coordinate for the map. - @param animated Specify `YES` if you want the map view to scroll to the new - location or `NO` if you want the map to display the new location - immediately. - - @note The behavior of this method is undefined if called in response to - `UIApplicationWillTerminateNotification`. - */ -- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated; - -/** - Changes the center coordinate and zoom level of the map and optionally animates - the change. For animated changes, wait until the map view has - finished loading before calling this method. - - @param centerCoordinate The new center coordinate for the map. - @param zoomLevel The new zoom level for the map. - @param animated Specify `YES` if you want the map view to animate scrolling and - zooming to the new location or `NO` if you want the map to display the new - location immediately. - - @note The behavior of this method is undefined if called in response to - `UIApplicationWillTerminateNotification`. - */ -- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(double)zoomLevel animated:(BOOL)animated; - -/** - Changes the center coordinate, zoom level, and direction of the map and - optionally animates the change. For animated changes, wait until the map view has - finished loading before calling this method. - - @param centerCoordinate The new center coordinate for the map. - @param zoomLevel The new zoom level for the map. - @param direction The new direction for the map, measured in degrees relative to - true north. A negative value leaves the map’s direction unchanged. - @param animated Specify `YES` if you want the map view to animate scrolling, - zooming, and rotating to the new location or `NO` if you want the map to - display the new location immediately. - - @note The behavior of this method is undefined if called in response to - `UIApplicationWillTerminateNotification`. - */ -- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(double)zoomLevel direction:(CLLocationDirection)direction animated:(BOOL)animated; - -/** - Changes the center coordinate, zoom level, and direction of the map, calling a - completion handler at the end of an optional animation. For animated changes, - wait until the map view has finished loading before calling this method. - - @param centerCoordinate The new center coordinate for the map. - @param zoomLevel The new zoom level for the map. - @param direction The new direction for the map, measured in degrees relative to - true north. A negative value leaves the map’s direction unchanged. - @param animated Specify `YES` if you want the map view to animate scrolling, - zooming, and rotating to the new location or `NO` if you want the map to - display the new location immediately. - @param completion The block executed after the animation finishes. - - @note The behavior of this method is undefined if called in response to - `UIApplicationWillTerminateNotification`. - */ -- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(double)zoomLevel direction:(CLLocationDirection)direction animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion; - -/** The zoom level of the receiver. - - In addition to affecting the visual size and detail of features on the map, - the zoom level affects the size of the vector tiles that are loaded. At zoom - level 0, each tile covers the entire world map; at zoom level 1, it covers ¼ - of the world; at zoom level 2, 1⁄16 of the world, and - so on. - - Changing the value of this property updates the map view immediately. If you - want to animate the change, use the `-setZoomLevel:animated:` method instead. - */ -@property (nonatomic) double zoomLevel; - -/** - Changes the zoom level of the map and optionally animates the change. - - Changing the zoom level scales the map without changing the current center - coordinate. - - @param zoomLevel The new zoom level for the map. - @param animated Specify `YES` if you want the map view to animate the change - to the new zoom level or `NO` if you want the map to display the new - zoom level immediately. - */ -- (void)setZoomLevel:(double)zoomLevel animated:(BOOL)animated; - -/** - * The minimum zoom level at which the map can be shown. - * - * Depending on the map view’s aspect ratio, the map view may be prevented - * from reaching the minimum zoom level, in order to keep the map from - * repeating within the current viewport. - * - * If the value of this property is greater than that of the - * maximumZoomLevel property, the behavior is undefined. - * - * The default minimumZoomLevel is 0. - */ -@property (nonatomic) double minimumZoomLevel; - -/** - * The maximum zoom level the map can be shown at. - * - * If the value of this property is smaller than that of the - * minimumZoomLevel property, the behavior is undefined. - * - * The default maximumZoomLevel is 22. The upper bound for this property - * is 25.5. - */ -@property (nonatomic) double maximumZoomLevel; - -/** - The heading of the map, measured in degrees clockwise from true north. - - The value `0` means that the top edge of the map view corresponds to true - north. The value `90` means the top of the map is pointing due east. The - value `180` means the top of the map points due south, and so on. - - Changing the value of this property updates the map view immediately. If you - want to animate the change, use the `-setDirection:animated:` method instead. - */ -@property (nonatomic) CLLocationDirection direction; - -/** - Changes the heading of the map and optionally animates the change. - - @param direction The heading of the map, measured in degrees clockwise from - true north. - @param animated Specify `YES` if you want the map view to animate the change - to the new heading or `NO` if you want the map to display the new - heading immediately. - - Changing the heading rotates the map without changing the current center - coordinate or zoom level. - */ -- (void)setDirection:(CLLocationDirection)direction animated:(BOOL)animated; - -/** - Resets the map rotation to a northern heading — a `direction` of `0` degrees. - */ -- (IBAction)resetNorth; - -/** - Resets the map to the current style’s default viewport. - - If the style doesn’t specify a default viewport, the map resets to a minimum - zoom level, a center coordinate of (0, 0), and a northern heading. - */ -- (IBAction)resetPosition; - -/** - The coordinate bounds visible in the receiver’s viewport. - - Changing the value of this property updates the receiver immediately. If you - want to animate the change, call `-setVisibleCoordinateBounds:animated:` - instead. - - If a longitude is less than −180 degrees or greater than 180 degrees, the - visible bounds straddles the antimeridian or international date line. For - example, if both Tokyo and San Francisco are visible, the visible bounds might - extend from (35.68476, −220.24257) to (37.78428, −122.41310). - */ -@property (nonatomic) MGLCoordinateBounds visibleCoordinateBounds; - -/** - Changes the receiver’s viewport to fit the given coordinate bounds, - optionally animating the change. - - To bring both sides of the antimeridian or international date line into view, - specify some longitudes less than −180 degrees or greater than 180 degrees. For - example, to show both Tokyo and San Francisco simultaneously, you could set the - visible bounds to extend from (35.68476, −220.24257) to (37.78428, −122.41310). - - @param bounds The bounds that the viewport will show in its entirety. - @param animated Specify `YES` to animate the change by smoothly scrolling - and zooming or `NO` to immediately display the given bounds. - */ -- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds animated:(BOOL)animated; - -/** - Deprecated. Changes the receiver’s viewport to fit the given coordinate bounds with - some additional padding on each side. - - To bring both sides of the antimeridian or international date line into view, - specify some longitudes less than −180 degrees or greater than 180 degrees. For - example, to show both Tokyo and San Francisco simultaneously, you could set the - visible bounds to extend from (35.68476, −220.24257) to (37.78428, −122.41310). - - To specify a completion handler to execute after the animation finishes, use - the `-setVisibleCoordinateBounds:edgePadding:animated:completionHandler:` method. - - @param bounds The bounds that the viewport will show in its entirety. - @param insets The minimum padding (in screen points) that will be visible - around the given coordinate bounds. - @param animated Specify `YES` to animate the change by smoothly scrolling and - zooming or `NO` to immediately display the given bounds. - */ -- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated __attribute__((deprecated("Use `-setVisibleCoordinateBounds:edgePadding:animated:completionHandler:` instead."))); - -/** - Changes the receiver’s viewport to fit the given coordinate bounds with some - additional padding on each side, optionally calling a completion handler. - - To bring both sides of the antimeridian or international date line into view, - specify some longitudes less than −180 degrees or greater than 180 degrees. For - example, to show both Tokyo and San Francisco simultaneously, you could set the - visible bounds to extend from (35.68476, −220.24257) to (37.78428, −122.41310). - - @param bounds The bounds that the viewport will show in its entirety. - @param insets The minimum padding (in screen points) that will be visible - around the given coordinate bounds. - @param animated Specify `YES` to animate the change by smoothly scrolling and - zooming or `NO` to immediately display the given bounds. - @param completion The block executed after the animation finishes. - */ -- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion; - -/** - Changes the receiver’s viewport to fit all of the given coordinates with some - additional padding on each side. - - To bring both sides of the antimeridian or international date line into view, - specify some longitudes less than −180 degrees or greater than 180 degrees. For - example, to show both Tokyo and San Francisco simultaneously, you could set the - visible coordinates to (35.68476, −220.24257) and (37.78428, −122.41310). - - @param coordinates The coordinates that the viewport will show. - @param count The number of coordinates. This number must not be greater than - the number of elements in `coordinates`. - @param insets The minimum padding (in screen points) that will be visible - around the given coordinate bounds. - @param animated Specify `YES` to animate the change by smoothly scrolling and - zooming or `NO` to immediately display the given bounds. - */ -- (void)setVisibleCoordinates:(const CLLocationCoordinate2D *)coordinates count:(NSUInteger)count edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated; - -/** - Changes the receiver’s viewport to fit all of the given coordinates with some - additional padding on each side, optionally calling a completion handler. - - To bring both sides of the antimeridian or international date line into view, - specify some longitudes less than −180 degrees or greater than 180 degrees. For - example, to show both Tokyo and San Francisco simultaneously, you could set the - visible coordinates to (35.68476, −220.24257) and (37.78428, −122.41310). - - @param coordinates The coordinates that the viewport will show. - @param count The number of coordinates. This number must not be greater than - the number of elements in `coordinates`. - @param insets The minimum padding (in screen points) that will be visible - around the given coordinate bounds. - @param direction The direction to rotate the map to, measured in degrees - relative to true north. A negative value leaves the map’s direction - unchanged. - @param duration The duration to animate the change in seconds. - @param function The timing function to animate the change. - @param completion The block executed after the animation finishes. - */ -- (void)setVisibleCoordinates:(const CLLocationCoordinate2D *)coordinates count:(NSUInteger)count edgePadding:(UIEdgeInsets)insets direction:(CLLocationDirection)direction duration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function completionHandler:(nullable void (^)(void))completion; - -/** - Sets the visible region so that the map displays the specified annotations. - - Calling this method updates the value in the `visibleCoordinateBounds` property - and potentially other properties to reflect the new map region. A small amount - of padding is reserved around the edges of the map view. To specify a different - amount of padding, use the `-showAnnotations:edgePadding:animated:` method. - - @param annotations The annotations that you want to be visible in the map. - @param animated `YES` if you want the map region change to be animated, or `NO` - if you want the map to display the new region immediately without animations. - */ -- (void)showAnnotations:(NSArray> *)annotations animated:(BOOL)animated; - -/** - Deprecated. Sets the visible region so that the map displays the specified - annotations with the specified amount of padding on each side. - - Calling this method updates the value in the `visibleCoordinateBounds` property - and potentially other properties to reflect the new map region. - - To specify a completion handler to execute after the animation finishes, use - the `-showAnnotations:edgePadding:animated:completionHandler:` method. - - @param annotations The annotations that you want to be visible in the map. - @param insets The minimum padding (in screen points) around the edges of the - map view to keep clear of annotations. - @param animated `YES` if you want the map region change to be animated, or `NO` - if you want the map to display the new region immediately without animations. - */ -- (void)showAnnotations:(NSArray> *)annotations edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated __attribute__((deprecated("Use `-showAnnotations:edgePadding:animated:completionHandler:` instead."))); - -/** - Sets the visible region so that the map displays the specified annotations with - the specified amount of padding on each side and an optional completion - handler. - - Calling this method updates the value in the `visibleCoordinateBounds` property - and potentially other properties to reflect the new map region. - - @param annotations The annotations that you want to be visible in the map. - @param insets The minimum padding (in screen points) around the edges of the - map view to keep clear of annotations. - @param animated `YES` if you want the map region change to be animated, or `NO` - if you want the map to display the new region immediately without animations. - @param completion The block executed after the animation finishes. - */ -- (void)showAnnotations:(NSArray> *)annotations edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion; - -/** - A camera representing the current viewpoint of the map. - */ -@property (nonatomic, copy) MGLMapCamera *camera; - -/** - Moves the viewpoint to a different location with respect to the map with an - optional transition animation. For animated changes, wait until the map view has - finished loading before calling this method. - - @param camera The new viewpoint. - @param animated Specify `YES` if you want the map view to animate the change to - the new viewpoint or `NO` if you want the map to display the new viewpoint - immediately. - - #### Related examples - See the - Camera animation example to learn how to trigger an animation that - rotates around a central point. - */ -- (void)setCamera:(MGLMapCamera *)camera animated:(BOOL)animated; - -/** - Moves the viewpoint to a different location with respect to the map with an - optional transition duration and timing function. For animated changes, wait - until the map view has finished loading before calling this method. - - @param camera The new viewpoint. - @param duration The amount of time, measured in seconds, that the transition - animation should take. Specify `0` to jump to the new viewpoint - instantaneously. - @param function A timing function used for the animation. Set this parameter to - `nil` for a transition that matches most system animations. If the duration - is `0`, this parameter is ignored. - - #### Related examples - See the - Camera animation example to learn how to create a timed animation that - rotates around a central point for a specific duration. - */ -- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function; - -/** - Moves the viewpoint to a different location with respect to the map with an - optional transition duration and timing function. For animated changes, wait - until the map view has finished loading before calling this method. - - @param camera The new viewpoint. - @param duration The amount of time, measured in seconds, that the transition - animation should take. Specify `0` to jump to the new viewpoint - instantaneously. - @param function A timing function used for the animation. Set this parameter to - `nil` for a transition that matches most system animations. If the duration - is `0`, this parameter is ignored. - @param completion The block to execute after the animation finishes. - */ -- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function completionHandler:(nullable void (^)(void))completion; - -/** - Moves the viewpoint to a different location with respect to the map with an - optional transition duration and timing function, and optionally some additional - padding on each side. For animated changes, wait until the map view has - finished loading before calling this method. - - @param camera The new viewpoint. - @param duration The amount of time, measured in seconds, that the transition - animation should take. Specify `0` to jump to the new viewpoint - instantaneously. - @param function A timing function used for the animation. Set this parameter to - `nil` for a transition that matches most system animations. If the duration - is `0`, this parameter is ignored. - @param edgePadding The minimum padding (in screen points) that would be visible - around the returned camera object if it were set as the receiver’s camera. - @param completion The block to execute after the animation finishes. - */ -- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function edgePadding:(UIEdgeInsets)edgePadding completionHandler:(nullable void (^)(void))completion; - -/** - Moves the viewpoint to a different location using a transition animation that - evokes powered flight and a default duration based on the length of the flight - path. - - The transition animation seamlessly incorporates zooming and panning to help - the user find his or her bearings even after traversing a great distance. - - @param camera The new viewpoint. - @param completion The block to execute after the animation finishes. - */ -- (void)flyToCamera:(MGLMapCamera *)camera completionHandler:(nullable void (^)(void))completion; - -/** - Moves the viewpoint to a different location using a transition animation that - evokes powered flight and an optional transition duration. - - The transition animation seamlessly incorporates zooming and panning to help - the user find his or her bearings even after traversing a great distance. - - @param camera The new viewpoint. - @param duration The amount of time, measured in seconds, that the transition - animation should take. Specify `0` to jump to the new viewpoint - instantaneously. Specify a negative value to use the default duration, which - is based on the length of the flight path. - @param completion The block to execute after the animation finishes. - */ -- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration completionHandler:(nullable void (^)(void))completion; - -/** - Moves the viewpoint to a different location using a transition animation that - evokes powered flight and an optional transition duration and peak altitude. - - The transition animation seamlessly incorporates zooming and panning to help - the user find his or her bearings even after traversing a great distance. - - @param camera The new viewpoint. - @param duration The amount of time, measured in seconds, that the transition - animation should take. Specify `0` to jump to the new viewpoint - instantaneously. Specify a negative value to use the default duration, which - is based on the length of the flight path. - @param peakAltitude The altitude, measured in meters, at the midpoint of the - animation. The value of this parameter is ignored if it is negative or if - the animation transition resulting from a similar call to - `-setCamera:animated:` would have a midpoint at a higher altitude. - @param completion The block to execute after the animation finishes. - */ -- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration peakAltitude:(CLLocationDistance)peakAltitude completionHandler:(nullable void (^)(void))completion; - -/** - Returns the camera that best fits the given coordinate bounds. - - @param bounds The coordinate bounds to fit to the receiver’s viewport. - @return A camera object centered on the same location as the coordinate - bounds with zoom level as high (close to the ground) as possible while still - including the entire coordinate bounds. The camera object uses the current - direction and pitch. - - @note The behavior of this method is undefined if called in response to - `UIApplicationWillTerminateNotification`; you may receive a `nil` return value - depending on the order of notification delivery. - */ -- (MGLMapCamera *)cameraThatFitsCoordinateBounds:(MGLCoordinateBounds)bounds; - -/** - Returns the camera that best fits the given coordinate bounds with some - additional padding on each side. - - @param bounds The coordinate bounds to fit to the receiver’s viewport. - @param insets The minimum padding (in screen points) that would be visible - around the returned camera object if it were set as the receiver’s camera. - @return A camera object centered on the same location as the coordinate bounds - with zoom level as high (close to the ground) as possible while still - including the entire coordinate bounds. The camera object uses the current - direction and pitch. - - @note The behavior of this method is undefined if called in response to - `UIApplicationWillTerminateNotification`; you may receive a `nil` return value - depending on the order of notification delivery. - */ -- (MGLMapCamera *)cameraThatFitsCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(UIEdgeInsets)insets; - -/** - Returns the camera that best fits the given coordinate bounds with some - additional padding on each side, matching an existing camera as much as - possible. - - @param camera The camera that the return camera should adhere to. All values - on this camera will be manipulated except for pitch and direction. - @param bounds The coordinate bounds to fit to the receiver’s viewport. - @param insets The minimum padding (in screen points) that would be visible - around the returned camera object if it were set as the receiver’s camera. - @return A camera object centered on the same location as the coordinate bounds - with zoom level as high (close to the ground) as possible while still - including the entire coordinate bounds. The initial camera's pitch and - direction will be honored. - - @note The behavior of this method is undefined if called in response to - `UIApplicationWillTerminateNotification`; you may receive a `nil` return value - depending on the order of notification delivery. - */ -- (MGLMapCamera *)camera:(MGLMapCamera *)camera fittingCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(UIEdgeInsets)insets; - -/** - Returns the camera that best fits the given shape with some additional padding - on each side, matching an existing camera as much as possible. - - @param camera The camera that the return camera should adhere to. All values - on this camera will be manipulated except for pitch and direction. - @param shape The shape to fit to the receiver’s viewport. - @param insets The minimum padding (in screen points) that would be visible - around the returned camera object if it were set as the receiver’s camera. - @return A camera object centered on the shape's center with zoom level as high - (close to the ground) as possible while still including the entire shape. - The initial camera's pitch and direction will be honored. - - @note The behavior of this method is undefined if called in response to - `UIApplicationWillTerminateNotification`; you may receive a `nil` return value - depending on the order of notification delivery. - */ -- (MGLMapCamera *)camera:(MGLMapCamera *)camera fittingShape:(MGLShape *)shape edgePadding:(UIEdgeInsets)insets; - -/** - Returns the camera that best fits the given shape with some additional padding - on each side while looking in the specified direction. - - @param shape The shape to fit to the receiver’s viewport. - @param direction The direction of the viewport, measured in degrees clockwise - from true north. - @param insets The minimum padding (in screen points) that would be visible - around the returned camera object if it were set as the receiver’s camera. - @return A camera object centered on the shape's center with zoom level as high - (close to the ground) as possible while still including the entire shape. - The camera object uses the current pitch. - - @note The behavior of this method is undefined if called in response to - `UIApplicationWillTerminateNotification`; you may receive a `nil` return value - depending on the order of notification delivery. - */ -- (MGLMapCamera *)cameraThatFitsShape:(MGLShape *)shape direction:(CLLocationDirection)direction edgePadding:(UIEdgeInsets)insets; - -/** - Returns the point in this view’s coordinate system on which to “anchor” in - response to a user-initiated gesture. - - For example, a pinch-to-zoom gesture would anchor the map at the midpoint of - the pinch. - - If the `userTrackingMode` property is not `MGLUserTrackingModeNone`, the - user annotation is used as the anchor point. - - Subclasses may override this method to provide specialized behavior - for - example, anchoring on the map’s center point to provide a "locked" zooming - mode. - - @param gesture An anchorable user gesture. - @return The point on which to anchor in response to the gesture. - */ -- (CGPoint)anchorPointForGesture:(UIGestureRecognizer *)gesture; - -/** - The distance from the edges of the map view’s frame to the edges of the map - view’s logical viewport. - - When the value of this property is equal to `UIEdgeInsetsZero`, viewport - properties such as `centerCoordinate` assume a viewport that matches the map - view’s frame. Otherwise, those properties are inset, excluding part of the - frame from the viewport. For instance, if the only the top edge is inset, the - map center is effectively shifted downward. - - When the map view’s superview is an instance of `UIViewController` whose - `automaticallyAdjustsScrollViewInsets` property is `YES`, the value of this - property may be overridden at any time. - - The usage of `automaticallyAdjustsScrollViewInsets` has been deprecated - use the map view’s property `MGLMapView.automaticallyAdjustsContentInset`instead. - - Changing the value of this property updates the map view immediately. If you - want to animate the change, use the `-setContentInset:animated:completionHandler:` - method instead. - */ -@property (nonatomic, assign) UIEdgeInsets contentInset; - -/** - Deprecated. Sets the distance from the edges of the map view’s frame to the edges - of the map view’s logical viewport with an optional transition animation. - - When the value of this property is equal to `UIEdgeInsetsZero`, viewport - properties such as `centerCoordinate` assume a viewport that matches the map - view’s frame. Otherwise, those properties are inset, excluding part of the - frame from the viewport. For instance, if the only the top edge is inset, the - map center is effectively shifted downward. - - When the map view’s superview is an instance of `UIViewController` whose - `automaticallyAdjustsScrollViewInsets` property is `YES`, the value of this - property may be overridden at any time. - - The usage of `automaticallyAdjustsScrollViewInsets` has been deprecated - use the map view’s property `MGLMapView.automaticallyAdjustsContentInset`instead. - - To specify a completion handler to execute after the animation finishes, use - the `-setContentInset:animated:completionHandler:` method. - - @param contentInset The new values to inset the content by. - @param animated Specify `YES` if you want the map view to animate the change to - the content inset or `NO` if you want the map to inset the content - immediately. - */ -- (void)setContentInset:(UIEdgeInsets)contentInset animated:(BOOL)animated __attribute__((deprecated("Use `-setContentInset:animated:completionHandler:` instead."))); - -/** - Sets the distance from the edges of the map view’s frame to the edges of the - map view’s logical viewport with an optional transition animation and - completion handler. - - When the value of this property is equal to `UIEdgeInsetsZero`, viewport - properties such as `centerCoordinate` assume a viewport that matches the map - view’s frame. Otherwise, those properties are inset, excluding part of the - frame from the viewport. For instance, if the only the top edge is inset, the - map center is effectively shifted downward. - - When the map view’s superview is an instance of `UIViewController` whose - `automaticallyAdjustsScrollViewInsets` property is `YES`, the value of this - property may be overridden at any time. - - The usage of `automaticallyAdjustsScrollViewInsets` has been deprecated - use the map view’s property `MGLMapView.automaticallyAdjustsContentInset`instead. - - @param contentInset The new values to inset the content by. - @param animated Specify `YES` if you want the map view to animate the change to - the content inset or `NO` if you want the map to inset the content - immediately. - @param completion The block executed after the animation finishes. - */ -- (void)setContentInset:(UIEdgeInsets)contentInset animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion; - -#pragma mark Converting Geographic Coordinates - -/** - Converts a point in the given view’s coordinate system to a geographic - coordinate. - - @param point The point to convert. - @param view The view in whose coordinate system the point is expressed. - @return The geographic coordinate at the given point. - - #### Related examples - See the - Point conversion example to learn how to convert a `CGPoint` to a map - coordinate. - */ -- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(nullable UIView *)view; - -/** - Converts a geographic coordinate to a point in the given view’s coordinate - system. - - @param coordinate The geographic coordinate to convert. - @param view The view in whose coordinate system the returned point should be - expressed. If this parameter is `nil`, the returned point is expressed - in the window’s coordinate system. If `view` is not `nil`, it must - belong to the same window as the map view. - @return The point (in the appropriate view or window coordinate system) - corresponding to the given geographic coordinate. - - #### Related examples - See the - Point conversion example to learn how to convert a map coordinate to a - `CGPoint` object. - */ -- (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(nullable UIView *)view; - -/** - Converts a rectangle in the given view’s coordinate system to a geographic - bounding box. - - If the returned coordinate bounds contains a longitude is less than −180 degrees - or greater than 180 degrees, the bounding box straddles the antimeridian or - international date line. - - @param rect The rectangle to convert. - @param view The view in whose coordinate system the rectangle is expressed. - @return The geographic bounding box coextensive with the given rectangle. - */ -- (MGLCoordinateBounds)convertRect:(CGRect)rect toCoordinateBoundsFromView:(nullable UIView *)view; - -/** - Converts a geographic bounding box to a rectangle in the given view’s - coordinate system. - - To bring both sides of the antimeridian or international date line into view, - specify some longitudes less than −180 degrees or greater than 180 degrees. For - example, to show both Tokyo and San Francisco simultaneously, you could set the - visible bounds to extend from (35.68476, −220.24257) to (37.78428, −122.41310). - - @param bounds The geographic bounding box to convert. - @param view The view in whose coordinate system the returned rectangle should - be expressed. If this parameter is `nil`, the returned rectangle is - expressed in the window’s coordinate system. If `view` is not `nil`, it must - belong to the same window as the map view. - */ -- (CGRect)convertCoordinateBounds:(MGLCoordinateBounds)bounds toRectToView:(nullable UIView *)view; - -/** - Returns the distance spanned by one point in the map view’s coordinate system - at the given latitude and current zoom level. - - The distance between points decreases as the latitude approaches the poles. - This relationship parallels the relationship between longitudinal coordinates - at different latitudes. - - @param latitude The latitude of the geographic coordinate represented by the - point. - @return The distance in meters spanned by a single point. - */ -- (CLLocationDistance)metersPerPointAtLatitude:(CLLocationDegrees)latitude; - -#pragma mark Annotating the Map - -/** - The complete list of annotations associated with the receiver. (read-only) - - The objects in this array must adopt the `MGLAnnotation` protocol. If no - annotations are associated with the map view, the value of this property is - `nil`. - */ -@property (nonatomic, readonly, nullable) NSArray> *annotations; - -/** - Adds an annotation to the map view. - - @note `MGLMultiPolyline`, `MGLMultiPolygon`, `MGLShapeCollection`, and - `MGLPointCollection` objects cannot be added to the map view at this time. - Any multipoint, multipolyline, multipolygon, shape or point collection - object that is specified is silently ignored. - - @param annotation The annotation object to add to the receiver. This object - must conform to the `MGLAnnotation` protocol. The map view retains the - annotation object. - - #### Related examples - See the - Annotation models and - Add a line annotation from GeoJSON examples to learn how to add an - annotation to an `MGLMapView` object. - */ -- (void)addAnnotation:(id )annotation; - -/** - Adds an array of annotations to the map view. - - @note `MGLMultiPolyline`, `MGLMultiPolygon`, and `MGLShapeCollection` objects - cannot be added to the map view at this time. Nor can `MGLMultiPoint` - objects that are not instances of `MGLPolyline` or `MGLPolygon`. Any - multipoint, multipolyline, multipolygon, or shape collection objects that - are specified are silently ignored. - - @param annotations An array of annotation objects. Each object in the array - must conform to the `MGLAnnotation` protocol. The map view retains each - individual annotation object. - */ -- (void)addAnnotations:(NSArray> *)annotations; - -/** - Removes an annotation from the map view, deselecting it if it is selected. - - Removing an annotation object dissociates it from the map view entirely, - preventing it from being displayed on the map. Thus you would typically call - this method only when you want to hide or delete a given annotation. - - @param annotation The annotation object to remove. This object must conform - to the `MGLAnnotation` protocol - */ -- (void)removeAnnotation:(id )annotation; - -/** - Removes an array of annotations from the map view, deselecting any selected - annotations in the array. - - Removing annotation objects dissociates them from the map view entirely, - preventing them from being displayed on the map. Thus you would typically - call this method only when you want to hide or delete the given annotations. - - @param annotations The array of annotation objects to remove. Objects in the - array must conform to the `MGLAnnotation` protocol. - */ -- (void)removeAnnotations:(NSArray> *)annotations; - -/** - Returns an `MGLAnnotationView` if the given annotation is currently associated - with a view, otherwise nil. - - @param annotation The annotation associated with the view. - Annotation must conform to the `MGLAnnotation` protocol. - */ -- (nullable MGLAnnotationView *)viewForAnnotation:(id )annotation; - -/** - Returns a reusable annotation image object associated with its identifier. - - For performance reasons, you should generally reuse `MGLAnnotationImage` - objects for identical-looking annotations in your map views. Dequeueing - saves time and memory during performance-critical operations such as - scrolling. - - @param identifier A string identifying the annotation image to be reused. - This string is the same one you specify when initially returning the - annotation image object using the `-mapView:imageForAnnotation:` method. - @return An annotation image object with the given identifier, or `nil` if no - such object exists in the reuse queue. - - #### Related examples - See the - Add annotation views and images example learn how to most efficiently - reuse an `MGLAnnotationImage`. - */ -- (nullable __kindof MGLAnnotationImage *)dequeueReusableAnnotationImageWithIdentifier:(NSString *)identifier; - -/** - Returns a reusable annotation view object associated with its identifier. - - For performance reasons, you should generally reuse `MGLAnnotationView` - objects for identical-looking annotations in your map views. Dequeueing - saves time and memory during performance-critical operations such as - scrolling. - - @param identifier A string identifying the annotation view to be reused. - This string is the same one you specify when initially returning the - annotation view object using the `-mapView:viewForAnnotation:` method. - @return An annotation view object with the given identifier, or `nil` if no - such object exists in the reuse queue. - */ -- (nullable __kindof MGLAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier; - -/** - The complete list of annotations associated with the receiver that are - currently visible. - - The objects in this array must adopt the `MGLAnnotation` protocol. If no - annotations are associated with the map view or if no annotations associated - with the map view are currently visible, the value of this property is `nil`. - */ -@property (nonatomic, readonly, nullable) NSArray> *visibleAnnotations; - -/** - Returns the list of annotations associated with the receiver that intersect with - the given rectangle. - - @param rect A rectangle expressed in the map view’s coordinate system. - @return An array of objects that adopt the `MGLAnnotation` protocol or `nil` if - no annotations associated with the map view are currently visible in the - rectangle. - */ -- (nullable NSArray> *)visibleAnnotationsInRect:(CGRect)rect; - -#pragma mark Managing Annotation Selections - -/** - The currently selected annotations. - - Assigning a new array to this property selects only the first annotation in - the array. - - If the annotation is of type `MGLPointAnnotation` and is offscreen, the camera - will animate to bring the annotation and its callout just on screen. If you - need finer control, consider using `-selectAnnotation:animated:`. - - @note In versions prior to `4.0.0` if the annotation was offscreen it was not - selected. - */ -@property (nonatomic, copy) NSArray> *selectedAnnotations; - -/** - Deprecated. Selects an annotation and displays its callout view. - - The `animated` parameter determines whether the selection is animated including whether the map is - panned to bring the annotation into view, specifically: - - | `animated` parameter | Effect | - |------------------|--------| - | `NO` | The annotation is selected, and the callout is presented. However the map is not panned to bring the annotation or callout into view. The presentation of the callout is NOT animated. | - | `YES` | The annotation is selected, and the callout is presented. If the annotation is not visible (or is partially visible) *and* is of type `MGLPointAnnotation`, the map is panned so that the annotation and its callout are brought into view. The annotation is *not* centered within the viewport. | - - Note that a selection initiated by a single tap gesture is always animated. - - To specify a completion handler to execute after the animation finishes, use - the `-selectAnnotation:animated:completionHandler:` method. - - @param annotation The annotation object to select. - @param animated If `YES`, the annotation and callout view are animated on-screen. - - @note In versions prior to `4.0.0` selecting an offscreen annotation did not - change the camera. - */ -- (void)selectAnnotation:(id )annotation animated:(BOOL)animated __attribute__((deprecated("Use `-selectAnnotation:animated:completionHandler:` instead."))); - -/** - Selects an annotation and displays its callout view with an optional completion - handler. - - The `animated` parameter determines whether the selection is animated including whether the map is - panned to bring the annotation into view, specifically: - - | `animated` parameter | Effect | - |------------------|--------| - | `NO` | The annotation is selected, and the callout is presented. However the map is not panned to bring the annotation or callout into view. The presentation of the callout is NOT animated. | - | `YES` | The annotation is selected, and the callout is presented. If the annotation is not visible (or is partially visible) *and* is of type `MGLPointAnnotation`, the map is panned so that the annotation and its callout are brought into view. The annotation is *not* centered within the viewport. | - - Note that a selection initiated by a single tap gesture is always animated. - - @param annotation The annotation object to select. - @param animated If `YES`, the annotation and callout view are animated on-screen. - @param completion The block executed after the animation finishes. - - @note In versions prior to `4.0.0` selecting an offscreen annotation did not - change the camera. - */ -- (void)selectAnnotation:(id )annotation animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion; - -/** - :nodoc: - Selects an annotation and displays its callout view with an optional completion - handler. This method should be considered "alpha" and as such is subject to - change. - - @param annotation The annotation object to select. - @param moveIntoView If the annotation is not visible (or is partially visible) *and* is of type `MGLPointAnnotation`, the map is panned so that the annotation and its callout are brought into view. The annotation is *not* centered within the viewport. - @param animateSelection If `YES`, the annotation's selection state and callout view's presentation are animated. - @param completion The block executed after the animation finishes. - */ -- (void)selectAnnotation:(id )annotation moveIntoView:(BOOL)moveIntoView animateSelection:(BOOL)animateSelection completionHandler:(nullable void (^)(void))completion; - -/** - Deselects an annotation and hides its callout view. - - @param annotation The annotation object to deselect. - @param animated If `YES`, the callout view is animated offscreen. - */ -- (void)deselectAnnotation:(nullable id )annotation animated:(BOOL)animated; - -#pragma mark Overlaying the Map - -/** - The complete list of overlays associated with the receiver. (read-only) - - The objects in this array must adopt the `MGLOverlay` protocol. If no - overlays are associated with the map view, the value of this property is - empty array. - */ -@property (nonatomic, readonly, nonnull) NSArray> *overlays; - -/** - Adds a single overlay object to the map. - - To remove an overlay from a map, use the `-removeOverlay:` method. - - @param overlay The overlay object to add. This object must conform to the - `MGLOverlay` protocol. */ -- (void)addOverlay:(id )overlay; - -/** - Adds an array of overlay objects to the map. - - To remove multiple overlays from a map, use the `-removeOverlays:` method. - - @param overlays An array of objects, each of which must conform to the - `MGLOverlay` protocol. - */ -- (void)addOverlays:(NSArray> *)overlays; - -/** - Removes a single overlay object from the map. - - If the specified overlay is not currently associated with the map view, this - method does nothing. - - @param overlay The overlay object to remove. - */ -- (void)removeOverlay:(id )overlay; - -/** - Removes one or more overlay objects from the map. - - If a given overlay object is not associated with the map view, it is ignored. - - @param overlays An array of objects, each of which conforms to the `MGLOverlay` - protocol. - */ -- (void)removeOverlays:(NSArray> *)overlays; - -#pragma mark Accessing the Underlying Map Data - -/** - Returns an array of rendered map features that intersect with a given point. - - This method may return features from any of the map’s style layers. To restrict - the search to a particular layer or layers, use the - `-visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:` method. For more - information about searching for map features, see that method’s documentation. - - @param point A point expressed in the map view’s coordinate system. - @return An array of objects conforming to the `MGLFeature` protocol that - represent features in the sources used by the current style. - - #### Related examples - See the - Select a feature within a layer example to learn how to query an - `MGLMapView` object for visible `MGLFeature` objects. - */ -- (NSArray> *)visibleFeaturesAtPoint:(CGPoint)point NS_SWIFT_NAME(visibleFeatures(at:)); - -/** - Returns an array of rendered map features that intersect with a given point, - restricted to the given style layers. - - This method returns all the intersecting features from the specified layers. To - filter the returned features, use the - `-visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:predicate:` method. For - more information about searching for map features, see that method’s - documentation. - - @param point A point expressed in the map view’s coordinate system. - @param styleLayerIdentifiers A set of strings that correspond to the names - of layers defined in the current style. Only the features contained in - these layers are included in the returned array. - @return An array of objects conforming to the `MGLFeature` protocol that - represent features in the sources used by the current style. - */ -- (NSArray> *)visibleFeaturesAtPoint:(CGPoint)point inStyleLayersWithIdentifiers:(nullable NSSet *)styleLayerIdentifiers NS_SWIFT_NAME(visibleFeatures(at:styleLayerIdentifiers:)); - -/** - Returns an array of rendered map features that intersect with a given point, - restricted to the given style layers and filtered by the given predicate. - - Each object in the returned array represents a feature rendered by the - current style and provides access to attributes specified by the relevant map - content sources. The returned array includes features loaded by - `MGLShapeSource` and `MGLVectorTileSource` objects but does not include - anything from `MGLRasterTileSource` objects, or from video or canvas sources, - which are unsupported by this SDK. - - The returned features are drawn by a style layer in the current style. For - example, suppose the current style uses the - Mapbox Streets source, - but none of the specified style layers includes features that have the `maki` - property set to `bus`. If you pass a point corresponding to the location of a - bus stop into this method, the bus stop feature does not appear in the - resulting array. On the other hand, if the style does include bus stops, an - `MGLFeature` object representing that bus stop is returned and its - `featureAttributes` dictionary has the `maki` key set to `bus` (along with - other attributes). The dictionary contains only the attributes provided by the - tile source; it does not include computed attribute values or rules about how - the feature is rendered by the current style. - - The returned array is sorted by z-order, starting with the topmost rendered - feature and ending with the bottommost rendered feature. A feature that is - rendered multiple times due to wrapping across the antimeridian at low zoom - levels is included only once, subject to the caveat that follows. - - Features come from tiled vector data or GeoJSON data that is converted to tiles - internally, so feature geometries are clipped at tile boundaries and features - may appear duplicated across tiles. For example, suppose the specified point - lies along a road that spans the screen. The resulting array includes those - parts of the road that lie within the map tile that contain the specified - point, even if the road extends into other tiles. - - To find out the layer names in a particular style, view the style in - Mapbox Studio. - - Only visible features are returned. To obtain features regardless of - visibility, use the - `-[MGLVectorTileSource featuresInSourceLayersWithIdentifiers:predicate:]` and - `-[MGLShapeSource featuresMatchingPredicate:]` methods on the relevant sources. - - The returned features may also include features corresponding to annotations. - These features are not object-equal to the `MGLAnnotation` objects that were - originally added to the map. To query the map for annotations, use - `visibleAnnotations` or `-[MGLMapView visibleAnnotationsInRect:]`. - - @note Layer identifiers are not guaranteed to exist across styles or different - versions of the same style. Applications that use this API must first set - the style URL to an explicitly versioned style using a convenience method - like `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL” - inspectable in Interface Builder, or a manually constructed `NSURL`. This - approach also avoids layer identifer name changes that will occur in the - default style’s layers over time. - - @param point A point expressed in the map view’s coordinate system. - @param styleLayerIdentifiers A set of strings that correspond to the names of - layers defined in the current style. Only the features contained in these - layers are included in the returned array. - @param predicate A predicate to filter the returned features. - @return An array of objects conforming to the `MGLFeature` protocol that - represent features in the sources used by the current style. - */ -- (NSArray> *)visibleFeaturesAtPoint:(CGPoint)point inStyleLayersWithIdentifiers:(nullable NSSet *)styleLayerIdentifiers predicate:(nullable NSPredicate *)predicate NS_SWIFT_NAME(visibleFeatures(at:styleLayerIdentifiers:predicate:)); - -/** - Returns an array of rendered map features that intersect with the given - rectangle. - - This method may return features from any of the map’s style layers. To restrict - the search to a particular layer or layers, use the - `-visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:` method. For more - information about searching for map features, see that method’s documentation. - - @param rect A rectangle expressed in the map view’s coordinate system. - @return An array of objects conforming to the `MGLFeature` protocol that - represent features in the sources used by the current style. - */ -- (NSArray> *)visibleFeaturesInRect:(CGRect)rect NS_SWIFT_NAME(visibleFeatures(in:)); - -/** - Returns an array of rendered map features that intersect with the given - rectangle, restricted to the given style layers. - - This method returns all the intersecting features from the specified layers. To - filter the returned features, use the - `-visibleFeaturesAtPoint:inStyleLayersWithIdentifiers:predicate:` method. For - more information about searching for map features, see that method’s - documentation. - - @param rect A rectangle expressed in the map view’s coordinate system. - @param styleLayerIdentifiers A set of strings that correspond to the names of - layers defined in the current style. Only the features contained in these - layers are included in the returned array. - @return An array of objects conforming to the `MGLFeature` protocol that - represent features in the sources used by the current style. - */ -- (NSArray> *)visibleFeaturesInRect:(CGRect)rect inStyleLayersWithIdentifiers:(nullable NSSet *)styleLayerIdentifiers NS_SWIFT_NAME(visibleFeatures(in:styleLayerIdentifiers:)); - -/** - Returns an array of rendered map features that intersect with the given - rectangle, restricted to the given style layers and filtered by the given - predicate. - - Each object in the returned array represents a feature rendered by the - current style and provides access to attributes specified by the relevant map - content sources. The returned array includes features loaded by - `MGLShapeSource` and `MGLVectorTileSource` objects but does not include - anything from `MGLRasterTileSource` objects, or from video or canvas sources, - which are unsupported by this SDK. - - The returned features are drawn by a style layer in the current style. For - example, suppose the current style uses the - Mapbox Streets source, - but none of the specified style layers includes features that have the `maki` - property set to `bus`. If you pass a rectangle containing the location of a bus - stop into this method, the bus stop feature does not appear in the resulting - array. On the other hand, if the style does include bus stops, an `MGLFeature` - object representing that bus stop is returned and its `featureAttributes` - dictionary has the `maki` key set to `bus` (along with other attributes). The - dictionary contains only the attributes provided by the tile source; it does - not include computed attribute values or rules about how the feature is - rendered by the current style. - - The returned array is sorted by z-order, starting with the topmost rendered - feature and ending with the bottommost rendered feature. A feature that is - rendered multiple times due to wrapping across the antimeridian at low zoom - levels is included only once, subject to the caveat that follows. - - Features come from tiled vector data or GeoJSON data that is converted to tiles - internally, so feature geometries are clipped at tile boundaries and features - may appear duplicated across tiles. For example, suppose the specified - rectangle intersects with a road that spans the screen. The resulting array - includes those parts of the road that lie within the map tiles covering the - specified rectangle, even if the road extends into other tiles. The portion of - the road within each map tile is included individually. - - To find out the layer names in a particular style, view the style in - Mapbox Studio. - - Only visible features are returned. To obtain features regardless of - visibility, use the - `-[MGLVectorTileSource featuresInSourceLayersWithIdentifiers:predicate:]` and - `-[MGLShapeSource featuresMatchingPredicate:]` methods on the relevant sources. - - @note Layer identifiers are not guaranteed to exist across styles or different - versions of the same style. Applications that use this API must first set the - style URL to an explicitly versioned style using a convenience method like - `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL” - inspectable in Interface Builder, or a manually constructed `NSURL`. This - approach also avoids layer identifer name changes that will occur in the - default style’s layers over time. - - @note Layer identifiers are not guaranteed to exist across styles or different - versions of the same style. Applications that use this API must first set - the style URL to an explicitly versioned style using a convenience method - like `+[MGLStyle outdoorsStyleURLWithVersion:]`, `MGLMapView`’s “Style URL” - inspectable in Interface Builder, or a manually constructed `NSURL`. This - approach also avoids layer identifer name changes that will occur in the - default style’s layers over time. - - @param rect A rectangle expressed in the map view’s coordinate system. - @param styleLayerIdentifiers A set of strings that correspond to the names of - layers defined in the current style. Only the features contained in these - layers are included in the returned array. - @param predicate A predicate to filter the returned features. - @return An array of objects conforming to the `MGLFeature` protocol that - represent features in the sources used by the current style. - */ -- (NSArray> *)visibleFeaturesInRect:(CGRect)rect inStyleLayersWithIdentifiers:(nullable NSSet *)styleLayerIdentifiers predicate:(nullable NSPredicate *)predicate NS_SWIFT_NAME(visibleFeatures(in:styleLayerIdentifiers:predicate:)); - -#pragma mark Debugging the Map - -/** - The options that determine which debugging aids are shown on the map. - - These options are all disabled by default and should remain disabled in - released software for performance and aesthetic reasons. - */ -@property (nonatomic) MGLMapDebugMaskOptions debugMask; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm deleted file mode 100644 index 1f4e2ffa745..00000000000 --- a/platform/ios/src/MGLMapView.mm +++ /dev/null @@ -1,7010 +0,0 @@ -#import "MGLMapView_Private.h" -#import "MGLMapView+Impl.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#import "Mapbox.h" -#import "MGLShape_Private.h" -#import "MGLFeature_Private.h" -#import "MGLGeometry_Private.h" -#import "MGLMultiPoint_Private.h" -#import "MGLOfflineStorage_Private.h" -#import "MGLVectorTileSource_Private.h" -#import "MGLFoundation_Private.h" -#import "MGLRendererFrontend.h" -#import "MGLRendererConfiguration.h" - -#import "NSBundle+MGLAdditions.h" -#import "NSDate+MGLAdditions.h" -#import "NSException+MGLAdditions.h" -#import "NSPredicate+MGLPrivateAdditions.h" -#import "NSString+MGLAdditions.h" -#import "NSURL+MGLAdditions.h" -#import "UIDevice+MGLAdditions.h" -#import "UIImage+MGLAdditions.h" -#import "UIViewController+MGLAdditions.h" -#import "UIView+MGLAdditions.h" - -#import "MGLFaux3DUserLocationAnnotationView.h" -#import "MGLUserLocationAnnotationView.h" -#import "MGLUserLocationAnnotationView_Private.h" -#import "MGLUserLocation_Private.h" -#import "MGLAnnotationImage_Private.h" -#import "MGLAnnotationView_Private.h" -#import "MGLCompassButton_Private.h" -#import "MGLScaleBar.h" -#import "MGLStyle_Private.h" -#import "MGLStyleLayer_Private.h" -#import "MGLMapboxEvents.h" -#import "MGLSDKUpdateChecker.h" -#import "MGLCompactCalloutView.h" -#import "MGLAnnotationContainerView.h" -#import "MGLAnnotationContainerView_Private.h" -#import "MGLAttributionInfo_Private.h" -#import "MGLMapAccessibilityElement.h" -#import "MGLLocationManager_Private.h" -#import "MGLLoggingConfiguration_Private.h" -#import "MGLNetworkIntegrationManager.h" -#import "MMEConstants.h" - -#include -#include -#include -#include - -class MGLAnnotationContext; - -const MGLMapViewDecelerationRate MGLMapViewDecelerationRateNormal = UIScrollViewDecelerationRateNormal; -const MGLMapViewDecelerationRate MGLMapViewDecelerationRateFast = UIScrollViewDecelerationRateFast; -const MGLMapViewDecelerationRate MGLMapViewDecelerationRateImmediate = 0.0; - -const MGLMapViewPreferredFramesPerSecond MGLMapViewPreferredFramesPerSecondDefault = -1; -const MGLMapViewPreferredFramesPerSecond MGLMapViewPreferredFramesPerSecondLowPower = 30; -const MGLMapViewPreferredFramesPerSecond MGLMapViewPreferredFramesPerSecondMaximum = 0; - -const MGLExceptionName MGLMissingLocationServicesUsageDescriptionException = @"MGLMissingLocationServicesUsageDescriptionException"; -const MGLExceptionName MGLUserLocationAnnotationTypeException = @"MGLUserLocationAnnotationTypeException"; -const MGLExceptionName MGLUnderlyingMapUnavailableException = @"MGLUnderlyingMapUnavailableException"; - -const CGPoint MGLOrnamentDefaultPositionOffset = CGPointMake(8, 8); - -/// Indicates the manner in which the map view is tracking the user location. -typedef NS_ENUM(NSUInteger, MGLUserTrackingState) { - /// The map view is not yet tracking the user location. - MGLUserTrackingStatePossible = 0, - /// The map view has begun to move to the first reported user location. - MGLUserTrackingStateBegan, - /// The map view begins a significant transition. - MGLUserTrackingStateBeginSignificantTransition, - /// The map view has finished moving to the first reported user location. - MGLUserTrackingStateChanged, -}; - -const NSTimeInterval MGLAnimationDuration = 0.3; - -/// Duration of an animation due to a user location update, typically chosen to -/// match a typical interval between user location updates. -const NSTimeInterval MGLUserLocationAnimationDuration = 1.0; - -/// Distance between the map view’s edge and that of the user location -/// annotation view. -const UIEdgeInsets MGLUserLocationAnnotationViewInset = UIEdgeInsetsMake(50, 0, 50, 0); - -const CGSize MGLAnnotationUpdateViewportOutset = {150, 150}; -const CGFloat MGLMinimumZoom = 3; - -/// Minimum initial zoom level when entering user tracking mode. -const double MGLMinimumZoomLevelForUserTracking = 10.5; - -/// Initial zoom level when entering user tracking mode from a low zoom level. -const double MGLDefaultZoomLevelForUserTracking = 14.0; - -/// Tolerance for snapping to true north, measured in degrees in either direction. -const CLLocationDirection MGLToleranceForSnappingToNorth = 7; - -/// Distance threshold to stop the camera while animating. -const CLLocationDistance MGLDistanceThresholdForCameraPause = 500; - -/// Rotation threshold while a pinch gesture is occurring. -static NSString * const MGLRotationThresholdWhileZoomingKey = @"MGLRotationThresholdWhileZooming"; - -/// Reuse identifier and file name of the default point annotation image. -static NSString * const MGLDefaultStyleMarkerSymbolName = @"default_marker"; - -/// Reuse identifier and file name of the invisible point annotation image used -/// by annotations that are visually backed by MGLAnnotationView objects -static NSString * const MGLInvisibleStyleMarkerSymbolName = @"invisible_marker"; - -/// Prefix that denotes a sprite installed by MGLMapView, to avoid collisions -/// with style-defined sprites. -NSString * const MGLAnnotationSpritePrefix = @"com.mapbox.sprites."; - -/// Slop area around the hit testing point, allowing for imprecise annotation selection. -const CGFloat MGLAnnotationImagePaddingForHitTest = 5; - -/// Distance from the callout’s anchor point to the annotation it points to. -const CGFloat MGLAnnotationImagePaddingForCallout = 1; - -const CGSize MGLAnnotationAccessibilityElementMinimumSize = CGSizeMake(10, 10); - -/// The number of view annotations (excluding the user location view) that must -/// be descendents of `MGLMapView` before presentsWithTransaction is enabled. -static const NSUInteger MGLPresentsWithTransactionAnnotationCount = 0; - -/// An indication that the requested annotation was not found or is nonexistent. -enum { MGLAnnotationTagNotFound = UINT32_MAX }; - -/// The threshold used to consider when a tilt gesture should start. -const CLLocationDegrees MGLHorizontalTiltToleranceDegrees = 45.0; - -/// Mapping from an annotation tag to metadata about that annotation, including -/// the annotation itself. -typedef std::unordered_map MGLAnnotationTagContextMap; - -/// Mapping from an annotation object to an annotation tag. -typedef std::map, MGLAnnotationTag> MGLAnnotationObjectTagMap; - -mbgl::util::UnitBezier MGLUnitBezierForMediaTimingFunction(CAMediaTimingFunction *function) -{ - if ( ! function) - { - function = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]; - } - float p1[2], p2[2]; - [function getControlPointAtIndex:0 values:p1]; - [function getControlPointAtIndex:1 values:p2]; - return { p1[0], p1[1], p2[0], p2[1] }; -} - -/// Lightweight container for metadata about an annotation, including the annotation itself. -class MGLAnnotationContext { -public: - id annotation; - /// The annotation’s image’s reuse identifier. - NSString *imageReuseIdentifier; - MGLAnnotationAccessibilityElement *accessibilityElement; - MGLAnnotationView *annotationView; - NSString *viewReuseIdentifier; -}; - -#pragma mark - Private - - -@interface MGLMapView () - -@property (nonatomic) UIImageView *glSnapshotView; - -@property (nonatomic) NSMutableArray *scaleBarConstraints; -@property (nonatomic, readwrite) MGLScaleBar *scaleBar; -@property (nonatomic, readwrite) MGLCompassButton *compassView; -@property (nonatomic) NSMutableArray *compassViewConstraints; -@property (nonatomic, readwrite) UIImageView *logoView; -@property (nonatomic) NSMutableArray *logoViewConstraints; -@property (nonatomic, readwrite) UIButton *attributionButton; -@property (nonatomic) NSMutableArray *attributionButtonConstraints; -@property (nonatomic, weak) UIAlertController *attributionController; - -@property (nonatomic, readwrite) MGLStyle *style; - -@property (nonatomic) UITapGestureRecognizer *singleTapGestureRecognizer; -@property (nonatomic) UITapGestureRecognizer *doubleTap; -@property (nonatomic) UITapGestureRecognizer *twoFingerTap; -@property (nonatomic) UIPanGestureRecognizer *pan; -@property (nonatomic) UIPinchGestureRecognizer *pinch; -@property (nonatomic) UIRotationGestureRecognizer *rotate; -@property (nonatomic) UILongPressGestureRecognizer *quickZoom; -@property (nonatomic) UIPanGestureRecognizer *twoFingerDrag; - -@property (nonatomic) UIInterfaceOrientation currentOrientation; -@property (nonatomic) UIInterfaceOrientationMask applicationSupportedInterfaceOrientations; - -@property (nonatomic) MGLCameraChangeReason cameraChangeReasonBitmask; - -/// Mapping from reusable identifiers to annotation images. -@property (nonatomic) NSMutableDictionary *annotationImagesByIdentifier; - -/// Currently shown popover representing the selected annotation. -@property (nonatomic) UIView *calloutViewForSelectedAnnotation; - -/// Anchor coordinate from which to present callout views (for example, for shapes this -/// could be the touch point rather than its centroid) -@property (nonatomic) CLLocationCoordinate2D anchorCoordinateForSelectedAnnotation; - -@property (nonatomic) MGLUserLocationAnnotationView *userLocationAnnotationView; - -/// Indicates how thoroughly the map view is tracking the user location. -@property (nonatomic) MGLUserTrackingState userTrackingState; -@property (nonatomic) CGFloat scale; -@property (nonatomic) CGFloat angle; -@property (nonatomic) CGFloat quickZoomStart; -@property (nonatomic, getter=isDormant) BOOL dormant; -@property (nonatomic, readonly, getter=isRotationAllowed) BOOL rotationAllowed; -@property (nonatomic) CGFloat rotationThresholdWhileZooming; -@property (nonatomic) CGFloat rotationBeforeThresholdMet; -@property (nonatomic) BOOL isZooming; -@property (nonatomic) BOOL isRotating; -@property (nonatomic) BOOL shouldTriggerHapticFeedbackForCompass; -@property (nonatomic) MGLMapViewProxyAccessibilityElement *mapViewProxyAccessibilityElement; -@property (nonatomic) MGLAnnotationContainerView *annotationContainerView; -@property (nonatomic) MGLUserLocation *userLocation; -@property (nonatomic) NSMutableDictionary *> *annotationViewReuseQueueByIdentifier; -@property (nonatomic, readonly) BOOL enablePresentsWithTransaction; -@property (nonatomic) UIImage *lastSnapshotImage; -@property (nonatomic) NSMutableArray *pendingCompletionBlocks; - -/// Experimental rendering performance measurement. -@property (nonatomic) BOOL experimental_enableFrameRateMeasurement; -@property (nonatomic) CGFloat averageFrameRate; -@property (nonatomic) CFTimeInterval frameTime; -@property (nonatomic) CFTimeInterval averageFrameTime; - -/// Residual properties (saved on app termination) -@property (nonatomic) BOOL terminated; -@property (nonatomic, copy) MGLMapCamera *residualCamera; -@property (nonatomic) MGLMapDebugMaskOptions residualDebugMask; -@property (nonatomic, copy) NSURL *residualStyleURL; - -/// Tilt gesture recognizer helper -@property (nonatomic, assign) CGPoint dragGestureMiddlePoint; - -/// This property is used to keep track of the view's safe edge insets -/// and calculate the ornament's position -@property (nonatomic, assign) UIEdgeInsets safeMapViewContentInsets; -@property (nonatomic, strong) NSNumber *automaticallyAdjustContentInsetHolder; - -- (mbgl::Map &)mbglMap; - -@end - -@implementation MGLMapView -{ - mbgl::Map *_mbglMap; - std::unique_ptr _mbglView; - std::unique_ptr _rendererFrontend; - - BOOL _opaque; - - MGLAnnotationTagContextMap _annotationContextsByAnnotationTag; - MGLAnnotationObjectTagMap _annotationTagsByAnnotation; - - /// Tag of the selected annotation. If the user location annotation is selected, this ivar is set to `MGLAnnotationTagNotFound`. - MGLAnnotationTag _selectedAnnotationTag; - - BOOL _userLocationAnnotationIsSelected; - /// Size of the rectangle formed by unioning the maximum slop area around every annotation image and annotation image view. - CGSize _unionedAnnotationRepresentationSize; - CGSize _largestAnnotationViewSize; - std::vector _annotationsNearbyLastTap; - CGPoint _initialImplicitCalloutViewOffset; - NSDate *_userLocationAnimationCompletionDate; - /// True if a willChange notification has been issued for shape annotation layers and a didChange notification is pending. - BOOL _isChangingAnnotationLayers; - BOOL _isWaitingForRedundantReachableNotification; - - CLLocationDegrees _pendingLatitude; - CLLocationDegrees _pendingLongitude; - - CADisplayLink *_displayLink; - BOOL _needsDisplayRefresh; - - NSInteger _changeDelimiterSuppressionDepth; - - /// Center of the pinch gesture on the previous iteration of the gesture. - CGPoint _previousPinchCenterPoint; - NSUInteger _previousPinchNumberOfTouches; - - CLLocationDistance _distanceFromOldUserLocation; - - BOOL _delegateHasAlphasForShapeAnnotations; - BOOL _delegateHasStrokeColorsForShapeAnnotations; - BOOL _delegateHasFillColorsForShapeAnnotations; - BOOL _delegateHasLineWidthsForShapeAnnotations; - - NSArray> *_visiblePlaceFeatures; - NSArray> *_visibleRoadFeatures; - NSMutableSet *_featureAccessibilityElements; - BOOL _accessibilityValueAnnouncementIsPending; - - MGLReachability *_reachability; - - /// Experimental rendering performance measurement. - CFTimeInterval _frameCounterStartTime; - NSInteger _frameCount; - CFTimeInterval _frameDurations; -} - -#pragma mark - Setup & Teardown - - -- (instancetype)initWithFrame:(CGRect)frame -{ - if (self = [super initWithFrame:frame]) - { - MGLLogInfo(@"Starting %@ initialization.", NSStringFromClass([self class])); - MGLLogDebug(@"Initializing frame: %@", NSStringFromCGRect(frame)); - [self commonInit]; - self.styleURL = nil; - MGLLogInfo(@"Finalizing %@ initialization.", NSStringFromClass([self class])); - } - return self; -} - -- (instancetype)initWithFrame:(CGRect)frame styleURL:(nullable NSURL *)styleURL -{ - if (self = [super initWithFrame:frame]) - { - MGLLogInfo(@"Starting %@ initialization.", NSStringFromClass([self class])); - MGLLogDebug(@"Initializing frame: %@ styleURL: %@", NSStringFromCGRect(frame), styleURL); - [self commonInit]; - self.styleURL = styleURL; - MGLLogInfo(@"Finalizing %@ initialization.", NSStringFromClass([self class])); - } - return self; -} - -- (instancetype)initWithCoder:(nonnull NSCoder *)decoder -{ - if (self = [super initWithCoder:decoder]) - { - MGLLogInfo(@"Starting %@ initialization.", NSStringFromClass([self class])); - [self commonInit]; - self.styleURL = nil; - MGLLogInfo(@"Finalizing %@ initialization.", NSStringFromClass([self class])); - } - return self; -} - -+ (void)initialize -{ - if (self == [MGLMapView class]) - { - [MGLSDKUpdateChecker checkForUpdates]; - } -} - -+ (NSSet *)keyPathsForValuesAffectingStyle -{ - return [NSSet setWithObject:@"styleURL"]; -} - -+ (NSSet *)keyPathsForValuesAffectingStyleURL -{ - return [NSSet setWithObjects:@"styleURL__", nil]; -} - -- (nonnull NSURL *)styleURL -{ - if (!_mbglMap) - { - NSAssert(self.terminated, @"_mbglMap should only be unavailable during app termination"); - return self.residualStyleURL; - } - - NSString *styleURLString = @(self.mbglMap.getStyle().getURL().c_str()).mgl_stringOrNilIfEmpty; - MGLAssert(styleURLString, @"Invalid style URL string %@", styleURLString); - return styleURLString ? [NSURL URLWithString:styleURLString] : nil; -} - -- (void)setStyleURL:(nullable NSURL *)styleURL -{ - if ( ! styleURL) - { - styleURL = [MGLStyle streetsStyleURLWithVersion:MGLStyleDefaultVersion]; - } - MGLLogDebug(@"Setting styleURL: %@", styleURL); - styleURL = styleURL.mgl_URLByStandardizingScheme; - self.style = nil; - self.mbglMap.getStyle().loadURL([[styleURL absoluteString] UTF8String]); -} - -- (IBAction)reloadStyle:(__unused id)sender { - MGLLogInfo(@"Reloading style."); - NSURL *styleURL = self.styleURL; - self.mbglMap.getStyle().loadURL(""); - self.styleURL = styleURL; -} - -- (mbgl::Map &)mbglMap -{ - if (!_mbglMap) - { - [NSException raise:MGLUnderlyingMapUnavailableException - format:@"The underlying map is not available - this happens during app termination"]; - } - return *_mbglMap; -} - -- (mbgl::Renderer *)renderer -{ - return _rendererFrontend->getRenderer(); -} - -- (void)commonInit -{ - _opaque = NO; - - // setup accessibility - // -// self.isAccessibilityElement = YES; - MGLNativeNetworkManager.sharedManager.delegate = MGLNetworkIntegrationManager.sharedManager; - self.accessibilityLabel = NSLocalizedStringWithDefaultValue(@"MAP_A11Y_LABEL", nil, nil, @"Map", @"Accessibility label"); - self.accessibilityTraits = UIAccessibilityTraitAllowsDirectInteraction | UIAccessibilityTraitAdjustable; - self.backgroundColor = [UIColor clearColor]; - self.clipsToBounds = YES; - if (@available(iOS 11.0, *)) { self.accessibilityIgnoresInvertColors = YES; } - - self.preferredFramesPerSecond = MGLMapViewPreferredFramesPerSecondDefault; - - // setup mbgl view - _mbglView = MGLMapViewImpl::Create(self); - - BOOL background = [UIApplication sharedApplication].applicationState == UIApplicationStateBackground; - if (!background) - { - _mbglView->createView(); - } - // Delete the pre-offline ambient cache at ~/Library/Caches/cache.db. - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); - NSString *fileCachePath = [paths.firstObject stringByAppendingPathComponent:@"cache.db"]; - [[NSFileManager defaultManager] removeItemAtPath:fileCachePath error:NULL]; - - // setup mbgl map - MGLRendererConfiguration *config = [MGLRendererConfiguration currentConfiguration]; - - auto renderer = std::make_unique(_mbglView->getRendererBackend(), config.scaleFactor, config.localFontFamilyName); - BOOL enableCrossSourceCollisions = !config.perSourceCollisions; - _rendererFrontend = std::make_unique(std::move(renderer), self, _mbglView->getRendererBackend()); - - mbgl::MapOptions mapOptions; - mapOptions.withMapMode(mbgl::MapMode::Continuous) - .withSize(self.size) - .withPixelRatio(config.scaleFactor) - .withConstrainMode(mbgl::ConstrainMode::None) - .withViewportMode(mbgl::ViewportMode::Default) - .withCrossSourceCollisions(enableCrossSourceCollisions); - - mbgl::ResourceOptions resourceOptions; - resourceOptions.withCachePath([[MGLOfflineStorage sharedOfflineStorage] mbglCachePath]) - .withAssetPath([NSBundle mainBundle].resourceURL.path.UTF8String); - - NSAssert(!_mbglMap, @"_mbglMap should be NULL"); - _mbglMap = new mbgl::Map(*_rendererFrontend, *_mbglView, mapOptions, resourceOptions); - - // start paused if in IB - if (background) { - self.dormant = YES; - } - - // Notify map object when network reachability status changes. - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(reachabilityChanged:) - name:kMGLReachabilityChangedNotification - object:nil]; - - _reachability = [MGLReachability reachabilityForInternetConnection]; - if ([_reachability isReachable]) - { - _isWaitingForRedundantReachableNotification = YES; - } - [_reachability startNotifier]; - - // setup default location manager - self.locationManager = nil; - - // Set up annotation management and selection state. - _annotationImagesByIdentifier = [NSMutableDictionary dictionary]; - _annotationContextsByAnnotationTag = {}; - _annotationTagsByAnnotation = {}; - _annotationViewReuseQueueByIdentifier = [NSMutableDictionary dictionary]; - _selectedAnnotationTag = MGLAnnotationTagNotFound; - _annotationsNearbyLastTap = {}; - - // TODO: This warning should be removed when automaticallyAdjustsScrollViewInsets is removed from - // the UIViewController api. - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSLog(@"%@ WARNING UIViewController.automaticallyAdjustsScrollViewInsets is deprecated use MGLMapView.automaticallyAdjustContentInset instead.", - NSStringFromClass(self.class)); - }); - - // setup logo - // - UIImage *logo = [UIImage mgl_resourceImageNamed:@"mapbox"]; - _logoView = [[UIImageView alloc] initWithImage:logo]; - _logoView.accessibilityTraits = UIAccessibilityTraitStaticText; - _logoView.accessibilityLabel = NSLocalizedStringWithDefaultValue(@"LOGO_A11Y_LABEL", nil, nil, @"Mapbox", @"Accessibility label"); - _logoView.translatesAutoresizingMaskIntoConstraints = NO; - [self addSubview:_logoView]; - _logoViewConstraints = [NSMutableArray array]; - _logoViewPosition = MGLOrnamentPositionBottomLeft; - _logoViewMargins = MGLOrnamentDefaultPositionOffset; - - // setup attribution - // - _attributionButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; - _attributionButton.accessibilityLabel = NSLocalizedStringWithDefaultValue(@"INFO_A11Y_LABEL", nil, nil, @"About this map", @"Accessibility label"); - _attributionButton.accessibilityHint = NSLocalizedStringWithDefaultValue(@"INFO_A11Y_HINT", nil, nil, @"Shows credits, a feedback form, and more", @"Accessibility hint"); - [_attributionButton addTarget:self action:@selector(showAttribution:) forControlEvents:UIControlEventTouchUpInside]; - _attributionButton.translatesAutoresizingMaskIntoConstraints = NO; - [self addSubview:_attributionButton]; - _attributionButtonConstraints = [NSMutableArray array]; - [_attributionButton addObserver:self forKeyPath:@"hidden" options:NSKeyValueObservingOptionNew context:NULL]; - - UILongPressGestureRecognizer *attributionLongPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(showAttribution:)]; - [_attributionButton addGestureRecognizer:attributionLongPress]; - _attributionButtonPosition = MGLOrnamentPositionBottomRight; - _attributionButtonMargins = MGLOrnamentDefaultPositionOffset; - - // setup compass - // - _compassView = [MGLCompassButton compassButtonWithMapView:self]; - [self addSubview:_compassView]; - _compassViewConstraints = [NSMutableArray array]; - _compassViewPosition = MGLOrnamentPositionTopRight; - _compassViewMargins = MGLOrnamentDefaultPositionOffset; - - // setup scale control - // - _scaleBar = [[MGLScaleBar alloc] init]; - _scaleBar.translatesAutoresizingMaskIntoConstraints = NO; - [self addSubview:_scaleBar]; - _scaleBarConstraints = [NSMutableArray array]; - _scaleBarPosition = MGLOrnamentPositionTopLeft; - _scaleBarMargins = MGLOrnamentDefaultPositionOffset; - - [self installConstraints]; - - // setup interaction - // - _pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; - _pan.delegate = self; - _pan.maximumNumberOfTouches = 1; - [self addGestureRecognizer:_pan]; - _scrollEnabled = YES; - - _pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)]; - _pinch.delegate = self; - [self addGestureRecognizer:_pinch]; - _zoomEnabled = YES; - - _rotate = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotateGesture:)]; - _rotate.delegate = self; - [self addGestureRecognizer:_rotate]; - _rotateEnabled = YES; - _rotationThresholdWhileZooming = 3; - - _doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTapGesture:)]; - _doubleTap.numberOfTapsRequired = 2; - [self addGestureRecognizer:_doubleTap]; - - _twoFingerDrag = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleTwoFingerDragGesture:)]; - _twoFingerDrag.minimumNumberOfTouches = 2; - _twoFingerDrag.maximumNumberOfTouches = 2; - _twoFingerDrag.delegate = self; - [_twoFingerDrag requireGestureRecognizerToFail:_pan]; - [self addGestureRecognizer:_twoFingerDrag]; - _pitchEnabled = YES; - - _twoFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTwoFingerTapGesture:)]; - _twoFingerTap.numberOfTouchesRequired = 2; - [_twoFingerTap requireGestureRecognizerToFail:_pinch]; - [_twoFingerTap requireGestureRecognizerToFail:_rotate]; - [_twoFingerTap requireGestureRecognizerToFail:_twoFingerDrag]; - [self addGestureRecognizer:_twoFingerTap]; - - _hapticFeedbackEnabled = YES; - - _decelerationRate = MGLMapViewDecelerationRateNormal; - - _quickZoom = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleQuickZoomGesture:)]; - _quickZoom.numberOfTapsRequired = 1; - _quickZoom.minimumPressDuration = 0; - [_quickZoom requireGestureRecognizerToFail:_doubleTap]; - [self addGestureRecognizer:_quickZoom]; - - _singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTapGesture:)]; - [_singleTapGestureRecognizer requireGestureRecognizerToFail:_doubleTap]; - _singleTapGestureRecognizer.delegate = self; - [_singleTapGestureRecognizer requireGestureRecognizerToFail:_quickZoom]; - [self addGestureRecognizer:_singleTapGestureRecognizer]; - - // observe app activity - // - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willTerminate) name:UIApplicationWillTerminateNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willResignActive:) name:UIApplicationWillResignActiveNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; - - // Pending completion blocks are called *after* annotation views have been updated - // in updateFromDisplayLink. - _pendingCompletionBlocks = [NSMutableArray array]; - - - // As of 3.7.5, we intentionally do not listen for `UIApplicationWillResignActiveNotification` or call `pauseRendering:` in response to it, as doing - // so causes a loop when asking for location permission. See: https://github.com/mapbox/mapbox-gl-native/issues/11225 - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; - - // Device orientation management - self.currentOrientation = UIInterfaceOrientationUnknown; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil]; - [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; - - // set initial position - // - mbgl::CameraOptions options; - options.center = mbgl::LatLng(0, 0); - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.contentInset); - options.padding = padding; - options.zoom = 0; - - _cameraChangeReasonBitmask = MGLCameraChangeReasonNone; - - _mbglMap->jumpTo(options); - _pendingLatitude = NAN; - _pendingLongitude = NAN; - _targetCoordinate = kCLLocationCoordinate2DInvalid; - - if ([UIApplication sharedApplication].applicationState != UIApplicationStateBackground) { - [MGLMapboxEvents pushTurnstileEvent]; - [MGLMapboxEvents pushEvent:MMEEventTypeMapLoad withAttributes:@{}]; - } - -} - -- (mbgl::Size)size -{ - // check for minimum texture size supported by OpenGL ES 2.0 - // - CGSize size = CGSizeMake(MAX(self.bounds.size.width, 64), MAX(self.bounds.size.height, 64)); - return { static_cast(size.width), - static_cast(size.height) }; -} - -- (void)reachabilityChanged:(NSNotification *)notification -{ - MGLAssertIsMainThread(); - - MGLReachability *reachability = [notification object]; - if ( ! _isWaitingForRedundantReachableNotification && [reachability isReachable]) - { - mbgl::NetworkStatus::Reachable(); - } - _isWaitingForRedundantReachableNotification = NO; -} - - -- (void)destroyCoreObjects { - // Record the current state. Currently only saving a limited set of properties. - self.terminated = YES; - self.residualCamera = self.camera; - self.residualDebugMask = self.debugMask; - self.residualStyleURL = self.styleURL; - - // Tear down C++ objects, insuring worker threads correctly terminate. - // Because of how _mbglMap is constructed, we need to destroy it first. - delete _mbglMap; - _mbglMap = nullptr; - - _mbglView.reset(); - - _rendererFrontend.reset(); -} - -- (void)dealloc -{ - MGLLogInfo(@"Deallocating MGLMapView."); - [_reachability stopNotifier]; - - [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [_attributionButton removeObserver:self forKeyPath:@"hidden"]; - - // Removing the annotations unregisters any outstanding KVO observers. - NSArray *annotations = self.annotations; - if (annotations) - { - [self removeAnnotations:annotations]; - } - - [self validateDisplayLink]; - - [self destroyCoreObjects]; - - [self.compassViewConstraints removeAllObjects]; - self.compassViewConstraints = nil; - - [self.scaleBarConstraints removeAllObjects]; - self.scaleBarConstraints = nil; - - [self.logoViewConstraints removeAllObjects]; - self.logoViewConstraints = nil; - - [self.attributionButtonConstraints removeAllObjects]; - self.attributionButtonConstraints = nil; - - [_locationManager stopUpdatingLocation]; - [_locationManager stopUpdatingHeading]; - _locationManager.delegate = nil; -} - -- (void)setDelegate:(nullable id)delegate -{ - MGLLogDebug(@"Setting delegate: %@", delegate); - if (_delegate == delegate) return; - - _delegate = delegate; - - _delegateHasAlphasForShapeAnnotations = [_delegate respondsToSelector:@selector(mapView:alphaForShapeAnnotation:)]; - _delegateHasStrokeColorsForShapeAnnotations = [_delegate respondsToSelector:@selector(mapView:strokeColorForShapeAnnotation:)]; - _delegateHasFillColorsForShapeAnnotations = [_delegate respondsToSelector:@selector(mapView:fillColorForPolygonAnnotation:)]; - _delegateHasLineWidthsForShapeAnnotations = [_delegate respondsToSelector:@selector(mapView:lineWidthForPolylineAnnotation:)]; -} - -- (void)didReceiveMemoryWarning -{ - MGLAssertIsMainThread(); - - if ( ! self.dormant && _rendererFrontend) - { - _rendererFrontend->reduceMemoryUse(); - } - - self.lastSnapshotImage = nil; -} - -- (MGLMapViewImpl *)viewImpl -{ - return _mbglView.get(); -} - -#pragma mark - Layout - - -+ (BOOL)requiresConstraintBasedLayout -{ - return YES; -} - -- (void)setScaleBarPosition:(MGLOrnamentPosition)scaleBarPosition { - MGLLogDebug(@"Setting scaleBarPosition: %lu", scaleBarPosition); - _scaleBarPosition = scaleBarPosition; - [self installScaleBarConstraints]; -} - -- (void)setScaleBarMargins:(CGPoint)scaleBarMargins { - MGLLogDebug(@"Setting scaleBarMargins: (x:%f, y:%f)", scaleBarMargins.x, scaleBarMargins.y); - _scaleBarMargins = scaleBarMargins; - [self installScaleBarConstraints]; -} - -- (void)setCompassViewPosition:(MGLOrnamentPosition)compassViewPosition { - MGLLogDebug(@"Setting compassViewPosition: %lu", compassViewPosition); - _compassViewPosition = compassViewPosition; - [self installCompassViewConstraints]; -} - -- (void)setCompassViewMargins:(CGPoint)compassViewMargins { - MGLLogDebug(@"Setting compassViewOffset: (x:%f, y:%f)", compassViewMargins.x, compassViewMargins.y); - _compassViewMargins = compassViewMargins; - [self installCompassViewConstraints]; -} - -- (void)setLogoViewPosition:(MGLOrnamentPosition)logoViewPosition { - MGLLogDebug(@"Setting logoViewPosition: %lu", logoViewPosition); - _logoViewPosition = logoViewPosition; - [self installLogoViewConstraints]; -} - -- (void)setLogoViewMargins:(CGPoint)logoViewMargins { - MGLLogDebug(@"Setting logoViewMargins: (x:%f, y:%f)", logoViewMargins.x, logoViewMargins.y); - _logoViewMargins = logoViewMargins; - [self installLogoViewConstraints]; -} - -- (void)setAttributionButtonPosition:(MGLOrnamentPosition)attributionButtonPosition { - MGLLogDebug(@"Setting attributionButtonPosition: %lu", attributionButtonPosition); - _attributionButtonPosition = attributionButtonPosition; - [self installAttributionButtonConstraints]; -} - -- (void)setAttributionButtonMargins:(CGPoint)attributionButtonMargins { - MGLLogDebug(@"Setting attributionButtonMargins: (x:%f, y:%f)", attributionButtonMargins.x, attributionButtonMargins.y); - _attributionButtonMargins = attributionButtonMargins; - [self installAttributionButtonConstraints]; -} - -- (void)updateConstraintsForOrnament:(UIView *)view - constraints:(NSMutableArray *)constraints - position:(MGLOrnamentPosition)position - size:(CGSize)size - margins:(CGPoint)margins { - NSMutableArray *updatedConstraints = [NSMutableArray array]; - UIEdgeInsets inset = UIEdgeInsetsZero; - - BOOL automaticallyAdjustContentInset; - if (_automaticallyAdjustContentInsetHolder) { - automaticallyAdjustContentInset = _automaticallyAdjustContentInsetHolder.boolValue; - } else { - UIViewController *viewController = [self rootViewController]; - automaticallyAdjustContentInset = viewController.automaticallyAdjustsScrollViewInsets; - } - - if (! automaticallyAdjustContentInset) { - inset = UIEdgeInsetsMake(self.contentInset.top - self.safeMapViewContentInsets.top, - self.contentInset.left - self.safeMapViewContentInsets.left, - self.contentInset.bottom - self.safeMapViewContentInsets.bottom, - self.contentInset.right - self.safeMapViewContentInsets.right); - - // makes sure the insets don't have negative values that could hide the ornaments - // thus violating our ToS - inset = UIEdgeInsetsMake(fmaxf(inset.top, 0), - fmaxf(inset.left, 0), - fmaxf(inset.bottom, 0), - fmaxf(inset.right, 0)); - } - - switch (position) { - case MGLOrnamentPositionTopLeft: - [updatedConstraints addObject:[view.topAnchor constraintEqualToAnchor:self.mgl_safeTopAnchor constant:margins.y + inset.top]]; - [updatedConstraints addObject:[view.leadingAnchor constraintEqualToAnchor:self.mgl_safeLeadingAnchor constant:margins.x + inset.left]]; - break; - case MGLOrnamentPositionTopRight: - [updatedConstraints addObject:[view.topAnchor constraintEqualToAnchor:self.mgl_safeTopAnchor constant:margins.y + inset.top]]; - [updatedConstraints addObject:[self.mgl_safeTrailingAnchor constraintEqualToAnchor:view.trailingAnchor constant:margins.x + inset.right]]; - break; - case MGLOrnamentPositionBottomLeft: - [updatedConstraints addObject:[self.mgl_safeBottomAnchor constraintEqualToAnchor:view.bottomAnchor constant:margins.y + inset.bottom]]; - [updatedConstraints addObject:[view.leadingAnchor constraintEqualToAnchor:self.mgl_safeLeadingAnchor constant:margins.x + inset.left]]; - break; - case MGLOrnamentPositionBottomRight: - [updatedConstraints addObject:[self.mgl_safeBottomAnchor constraintEqualToAnchor:view.bottomAnchor constant:margins.y + inset.bottom]]; - [updatedConstraints addObject: [self.mgl_safeTrailingAnchor constraintEqualToAnchor:view.trailingAnchor constant:margins.x + inset.right]]; - break; - } - - if (!CGSizeEqualToSize(size, CGSizeZero)) { - [updatedConstraints addObject:[view.widthAnchor constraintEqualToConstant:size.width]]; - [updatedConstraints addObject:[view.heightAnchor constraintEqualToConstant:size.height]]; - } - - [NSLayoutConstraint deactivateConstraints:constraints]; - [constraints removeAllObjects]; - [NSLayoutConstraint activateConstraints:updatedConstraints]; - [constraints addObjectsFromArray:updatedConstraints]; -} - -- (void)installConstraints -{ - [self installCompassViewConstraints]; - [self installScaleBarConstraints]; - [self installLogoViewConstraints]; - [self installAttributionButtonConstraints]; -} - -- (void)installCompassViewConstraints { - // compass view - [self updateConstraintsForOrnament:self.compassView - constraints:self.compassViewConstraints - position:self.compassViewPosition - size:self.compassView.bounds.size - margins:self.compassViewMargins]; -} - -- (void)installScaleBarConstraints { - // scale bar view - [self updateConstraintsForOrnament:self.scaleBar - constraints:self.scaleBarConstraints - position:self.scaleBarPosition - size:CGSizeZero - margins:self.scaleBarMargins]; -} - -- (void)installLogoViewConstraints { - // logo view - [self updateConstraintsForOrnament:self.logoView - constraints:self.logoViewConstraints - position:self.logoViewPosition - size:self.logoView.bounds.size - margins:self.logoViewMargins]; -} - -- (void)installAttributionButtonConstraints { - // attribution button - [self updateConstraintsForOrnament:self.attributionButton - constraints:self.attributionButtonConstraints - position:self.attributionButtonPosition - size:self.attributionButton.bounds.size - margins:self.attributionButtonMargins]; -} - -- (BOOL)isOpaque -{ - return _opaque; -} - -- (void)setOpaque:(BOOL)opaque -{ - _opaque = opaque; - if (_mbglView) { - _mbglView->setOpaque(opaque); - } -} - -- (void)renderSync -{ - if ( ! self.dormant && _rendererFrontend) - { - _rendererFrontend->render(); - } -} - -// This gets called when the view dimension changes, e.g. because the device is being rotated. -- (void)layoutSubviews -{ - [super layoutSubviews]; - - // Calling this here instead of in the scale bar itself because if this is done in the - // scale bar instance, it triggers a call to this `layoutSubviews` method that calls - // `_mbglMap->setSize()` just below that triggers rendering update which triggers - // another scale bar update which causes a rendering update loop and a major performace - // degradation. - [self.scaleBar invalidateIntrinsicContentSize]; - - [self adjustContentInset]; - - if (_mbglView) { - _mbglView->layoutChanged(); - } - - if (_mbglMap) { - self.mbglMap.setSize([self size]); - } - - if (self.compassView.alpha) - { - [self updateCompass]; - } - - if (self.compassView.alpha || self.showsUserHeadingIndicator) - { - [self updateHeadingForDeviceOrientation]; - } - - [self updateUserLocationAnnotationView]; - - [self updateAttributionAlertView]; -} - -/// Updates `contentInset` to reflect the current window geometry. -- (void)adjustContentInset -{ - UIEdgeInsets adjustedContentInsets = UIEdgeInsetsZero; - UIViewController *viewController = [self rootViewController]; - BOOL automaticallyAdjustContentInset; - if (@available(iOS 11.0, *)) - { - adjustedContentInsets = self.safeAreaInsets; - - } else { - adjustedContentInsets.top = viewController.topLayoutGuide.length; - CGFloat bottomPoint = CGRectGetMaxY(viewController.view.bounds) - - (CGRectGetMaxY(viewController.view.bounds) - - viewController.bottomLayoutGuide.length); - adjustedContentInsets.bottom = bottomPoint; - - } - - if (_automaticallyAdjustContentInsetHolder) { - automaticallyAdjustContentInset = _automaticallyAdjustContentInsetHolder.boolValue; - } else { - automaticallyAdjustContentInset = viewController.automaticallyAdjustsScrollViewInsets; - } - - self.safeMapViewContentInsets = adjustedContentInsets; - if ( ! automaticallyAdjustContentInset) - { - return; - } - - self.contentInset = adjustedContentInsets; -} - -- (UIViewController *)rootViewController { - // We could crawl all the way up the responder chain using - // -viewControllerForLayoutGuides, but an intervening view means that any - // manual contentInset should not be overridden; something other than the - // top and bottom bars may be influencing the manual inset. - UIViewController *viewController; - if ([self.nextResponder isKindOfClass:[UIViewController class]]) - { - // This map view is the content view of a view controller. - viewController = (UIViewController *)self.nextResponder; - } - else if ([self.superview.nextResponder isKindOfClass:[UIViewController class]]) - { - // This map view is an immediate child of a view controller’s content view. - viewController = (UIViewController *)self.superview.nextResponder; - } - return viewController; -} - -- (void)setAutomaticallyAdjustsContentInset:(BOOL)automaticallyAdjustsContentInset { - MGLLogDebug(@"Setting automaticallyAdjustsContentInset: %@", MGLStringFromBOOL(automaticallyAdjustsContentInset)); - _automaticallyAdjustContentInsetHolder = [NSNumber numberWithBool:automaticallyAdjustsContentInset]; -} - -- (BOOL)automaticallyAdjustsContentInset { - return _automaticallyAdjustContentInsetHolder.boolValue; -} - -- (void)setContentInset:(UIEdgeInsets)contentInset -{ - [self setContentInset:contentInset animated:NO completionHandler:nil]; -} - -- (void)setContentInset:(UIEdgeInsets)contentInset animated:(BOOL)animated -{ - [self setContentInset:contentInset animated:animated completionHandler:nil]; -} - -- (void)setContentInset:(UIEdgeInsets)contentInset animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion -{ - MGLLogDebug(@"Setting contentInset: %@ animated:", NSStringFromUIEdgeInsets(contentInset), MGLStringFromBOOL(animated)); - if (UIEdgeInsetsEqualToEdgeInsets(contentInset, self.contentInset)) - { - if (completion) { - completion(); - } - return; - } - - if (self.userTrackingMode == MGLUserTrackingModeNone) - { - // Don’t call -setCenterCoordinate:, which resets the user tracking mode. - [self _setCenterCoordinate:self.centerCoordinate edgePadding:contentInset zoomLevel:self.zoomLevel direction:self.direction duration:animated ? MGLAnimationDuration : 0 animationTimingFunction:nil completionHandler:completion]; - _contentInset = contentInset; - } - else - { - _contentInset = contentInset; - [self didUpdateLocationWithUserTrackingAnimated:animated completionHandler:completion]; - } - - // Compass, logo and attribution button constraints needs to be updated.z - [self installConstraints]; -} - -/// Returns the frame of inset content within the map view. -- (CGRect)contentFrame -{ - return UIEdgeInsetsInsetRect(self.bounds, self.contentInset); -} - -/// Returns the center point of the inset content within the map view. -- (CGPoint)contentCenter -{ - CGRect contentFrame = self.contentFrame; - return CGPointMake(CGRectGetMidX(contentFrame), CGRectGetMidY(contentFrame)); -} - -#pragma mark - Pending completion blocks - -- (void)processPendingBlocks -{ - NSArray *blocks = self.pendingCompletionBlocks; - self.pendingCompletionBlocks = [NSMutableArray array]; - - for (dispatch_block_t block in blocks) - { - block(); - } -} - -- (BOOL)scheduleTransitionCompletion:(dispatch_block_t)block -{ - // Only add a block if the display link (that calls processPendingBlocks) is - // running, otherwise fall back to calling immediately. - if (_displayLink && !_displayLink.isPaused) - { - [self willChangeValueForKey:@"pendingCompletionBlocks"]; - [self.pendingCompletionBlocks addObject:block]; - [self didChangeValueForKey:@"pendingCompletionBlocks"]; - return YES; - } - - return NO; -} - -#pragma mark - Life Cycle - - -- (void)updateFromDisplayLink:(CADisplayLink *)displayLink -{ - MGLAssertIsMainThread(); - - // Not "visible" - this isn't a full definition of visibility, but if - // the map view doesn't have a window then it *cannot* be visible. - if (!self.window) { - return; - } - - // Mismatched display link - if (displayLink && displayLink != _displayLink) { - return; - } - - // Check to ensure rendering doesn't occur in the background - if (([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) && - ![self supportsBackgroundRendering]) - { - return; - } - - if (_needsDisplayRefresh || (self.pendingCompletionBlocks.count > 0)) - { - _needsDisplayRefresh = NO; - - // Update UIKit elements, prior to rendering - [self updateUserLocationAnnotationView]; - [self updateAnnotationViews]; - [self updateCalloutView]; - - // Call any pending completion blocks. This is primarily to ensure - // that annotations are in the expected position after core rendering - // and map update. - // - // TODO: Consider using this same mechanism for delegate callbacks. - [self processPendingBlocks]; - - _mbglView->display(); - } - - if (self.experimental_enableFrameRateMeasurement) - { - CFTimeInterval now = CACurrentMediaTime(); - - self.frameTime = now - _displayLink.timestamp; - _frameDurations += self.frameTime; - - _frameCount++; - - CFTimeInterval elapsed = now - _frameCounterStartTime; - - if (elapsed >= 1.0) { - self.averageFrameRate = _frameCount / elapsed; - self.averageFrameTime = (_frameDurations / _frameCount) * 1000; - - _frameCount = 0; - _frameDurations = 0; - _frameCounterStartTime = now; - } - } -} - -- (void)setNeedsRerender -{ - MGLAssertIsMainThread(); - - _needsDisplayRefresh = YES; -} - -- (void)willTerminate -{ - MGLAssertIsMainThread(); - - if ( ! self.dormant) - { - [self validateDisplayLink]; - self.dormant = YES; - _mbglView->deleteView(); - } - - [self destroyCoreObjects]; -} - -- (void)validateDisplayLink -{ - BOOL isVisible = self.superview && self.window; - if (isVisible && ! _displayLink) - { - if (_mbglMap && self.mbglMap.getMapOptions().constrainMode() == mbgl::ConstrainMode::None) - { - self.mbglMap.setConstrainMode(mbgl::ConstrainMode::HeightOnly); - } - - _displayLink = [self.window.screen displayLinkWithTarget:self selector:@selector(updateFromDisplayLink:)]; - [self updateDisplayLinkPreferredFramesPerSecond]; - [_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; - _needsDisplayRefresh = YES; - [self updateFromDisplayLink:_displayLink]; - } - else if ( ! isVisible && _displayLink) - { - [_displayLink invalidate]; - _displayLink = nil; - [self processPendingBlocks]; - } -} - -- (void)updateDisplayLinkPreferredFramesPerSecond -{ - if (!_displayLink) - { - return; - } - - NSInteger newFrameRate; - if (_preferredFramesPerSecond == MGLMapViewPreferredFramesPerSecondDefault) - { - // On legacy devices that cannot maintain a reasonable frame rate, set - // a lower limit to avoid jank. - newFrameRate = UIDevice.currentDevice.mgl_isLegacyDevice ? MGLMapViewPreferredFramesPerSecondLowPower : MGLMapViewPreferredFramesPerSecondMaximum; - } - else - { - newFrameRate = _preferredFramesPerSecond; - } - - if (@available(iOS 10.0, *)) - { - _displayLink.preferredFramesPerSecond = newFrameRate; - } - else - { - // CADisplayLink.frameInterval does not support more than 60 FPS (and - // no device that supports >60 FPS ever supported iOS 9). - NSInteger maximumFrameRate = 60; - - // `0` is an alias for maximum frame rate. - newFrameRate = newFrameRate ?: maximumFrameRate; - - _displayLink.frameInterval = maximumFrameRate / MIN(newFrameRate, maximumFrameRate); - } -} - -- (void)setPreferredFramesPerSecond:(MGLMapViewPreferredFramesPerSecond)preferredFramesPerSecond -{ - MGLLogDebug(@"Setting preferredFramesPerSecond: %ld", preferredFramesPerSecond); - if (_preferredFramesPerSecond == preferredFramesPerSecond) - { - return; - } - - _preferredFramesPerSecond = preferredFramesPerSecond; - [self updateDisplayLinkPreferredFramesPerSecond]; -} - -- (void)updatePresentsWithTransaction -{ - BOOL hasEnoughViewAnnotations = (self.annotationContainerView.annotationViews.count > MGLPresentsWithTransactionAnnotationCount); - BOOL hasAnAnchoredCallout = [self hasAnAnchoredAnnotationCalloutView]; - - _enablePresentsWithTransaction = (hasEnoughViewAnnotations || hasAnAnchoredCallout); - - // If the map is visible, change the layer property too - if (self.window) { - _mbglView->setPresentsWithTransaction(_enablePresentsWithTransaction); - } -} - -- (void)willMoveToWindow:(UIWindow *)newWindow { - [super willMoveToWindow:newWindow]; - [self refreshSupportedInterfaceOrientationsWithWindow:newWindow]; - - if (!newWindow) - { - // See https://github.com/mapbox/mapbox-gl-native/issues/14232 - // In iOS 12.2, CAEAGLLayer.presentsWithTransaction can cause dramatic - // slow down. The exact cause of this is unknown, but this work around - // appears to lessen the effects. - _mbglView->setPresentsWithTransaction(NO); - - // Moved from didMoveToWindow - [self validateDisplayLink]; - } -} - -- (void)didMoveToWindow -{ - [super didMoveToWindow]; - - if (self.window) - { - // See above comment - _mbglView->setPresentsWithTransaction(self.enablePresentsWithTransaction); - - [self validateDisplayLink]; - } -} - -- (void)didMoveToSuperview -{ - [self validateDisplayLink]; - if (self.superview) - { - [self installConstraints]; - } - [super didMoveToSuperview]; -} - -- (void)refreshSupportedInterfaceOrientationsWithWindow:(UIWindow *)window { - - // "The system intersects the view controller'€™s supported orientations with - // the app's supported orientations (as determined by the Info.plist file or - // the app delegate's application:supportedInterfaceOrientationsForWindow: - // method) and the device's supported orientations to determine whether to rotate. - - UIApplication *application = [UIApplication sharedApplication]; - - if (window && [application.delegate respondsToSelector:@selector(application:supportedInterfaceOrientationsForWindow:)]) { - self.applicationSupportedInterfaceOrientations = [application.delegate application:application supportedInterfaceOrientationsForWindow:window]; - return; - } - - // If no delegate method, check the application's plist. - static UIInterfaceOrientationMask orientationMask = UIInterfaceOrientationMaskAll; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // No application delegate - NSArray *orientations = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UISupportedInterfaceOrientations"]; - - // Application's info plist provided supported orientations. - if (orientations.count > 0) { - orientationMask = 0; - - NSDictionary *lookup = - @{ - @"UIInterfaceOrientationPortrait" : @(UIInterfaceOrientationMaskPortrait), - @"UIInterfaceOrientationPortraitUpsideDown" : @(UIInterfaceOrientationMaskPortraitUpsideDown), - @"UIInterfaceOrientationLandscapeLeft" : @(UIInterfaceOrientationMaskLandscapeLeft), - @"UIInterfaceOrientationLandscapeRight" : @(UIInterfaceOrientationMaskLandscapeRight) - }; - - for (NSString *orientation in orientations) { - UIInterfaceOrientationMask mask = ((NSNumber*)lookup[orientation]).unsignedIntegerValue; - orientationMask |= mask; - } - } - }); - - self.applicationSupportedInterfaceOrientations = orientationMask; -} - -- (void)deviceOrientationDidChange:(__unused NSNotification *)notification -{ - UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation]; - - // The docs for `UIViewController.supportedInterfaceOrientations` states: - // - // When the user changes the device orientation, the system calls this method - // on the root view controller or the topmost presented view controller that - // fills the window. If the view controller supports the new orientation, the - // window and view controller are rotated to the new orientation. This method - // is only called if the view controller'€™s shouldAutorotate method returns YES. - // - // We want to match similar behaviour. However, it may be preferable to look - // at the owning view controller (in cases where the map view may be covered - // by another view. - - UIViewController *viewController = [self.window.rootViewController mgl_topMostViewController]; - - if (![viewController shouldAutorotate]) { - return; - } - - if ((self.currentOrientation == (UIInterfaceOrientation)deviceOrientation) && - (self.currentOrientation != UIInterfaceOrientationUnknown)) { - return; - } - - // "The system intersects the view controller'€™s supported orientations with - // the app's supported orientations (as determined by the Info.plist file or - // the app delegate's application:supportedInterfaceOrientationsForWindow: - // method) and the device's supported orientations to determine whether to rotate. - - UIInterfaceOrientationMask supportedOrientations = viewController.supportedInterfaceOrientations; - supportedOrientations &= self.applicationSupportedInterfaceOrientations; - - // Interface orientations are defined by device orientations - UIInterfaceOrientationMask interfaceOrientation = 1 << deviceOrientation; - UIInterfaceOrientationMask validOrientation = interfaceOrientation & UIInterfaceOrientationMaskAll; - - if (!(validOrientation & supportedOrientations)) { - return; - } - - self.currentOrientation = (UIInterfaceOrientation)deviceOrientation; - - // Q. Do we need to re-layout if we're just going from Portrait -> Portrait - // Upside Down (or from Left to Right)? - [self setNeedsLayout]; -} - -#pragma mark - Application lifecycle -- (void)willResignActive:(NSNotification *)notification -{ - if ([self supportsBackgroundRendering]) - { - return; - } - - self.lastSnapshotImage = _mbglView->snapshot(); - - // For OpenGL this calls glFinish as recommended in - // https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/ImplementingaMultitasking-awareOpenGLESApplication/ImplementingaMultitasking-awareOpenGLESApplication.html#//apple_ref/doc/uid/TP40008793-CH5-SW1 - // reduceMemoryUse(), calls performCleanup(), which calls glFinish - if (_rendererFrontend) - { - _rendererFrontend->reduceMemoryUse(); - } -} - -- (void)didEnterBackground:(NSNotification *)notification -{ - [self pauseRendering:notification]; -} - -- (void)willEnterForeground:(NSNotification *)notification -{ - // Do nothing, currently if resumeRendering is called here it's a no-op. -} - -- (void)didBecomeActive:(NSNotification *)notification -{ - [self resumeRendering:notification]; - self.lastSnapshotImage = nil; -} - -#pragma mark - GL / display link wake/sleep - -- (EAGLContext *)context { - return _mbglView->getEAGLContext(); -} - -- (BOOL)supportsBackgroundRendering -{ - // If this view targets an external display, such as AirPlay or CarPlay, we - // can safely continue to render OpenGL content without tripping - // gpus_ReturnNotPermittedKillClient in libGPUSupportMercury, because the - // external connection keeps the application from truly receding to the - // background. - return (self.window.screen != [UIScreen mainScreen]); -} - -- (void)pauseRendering:(__unused NSNotification *)notification -{ - // If this view targets an external display, such as AirPlay or CarPlay, we - // can safely continue to render OpenGL content without tripping - // gpus_ReturnNotPermittedKillClient in libGPUSupportMercury, because the - // external connection keeps the application from truly receding to the - // background. - if ([self supportsBackgroundRendering]) - { - return; - } - - MGLLogInfo(@"Entering background."); - MGLAssertIsMainThread(); - - // Ideally we would wait until we actually received a memory warning but the bulk of the memory - // we have to release is tied up in GL buffers that we can't touch once we're in the background. - // Compromise position: release everything but currently rendering tiles - // A possible improvement would be to store a copy of the GL buffers that we could use to rapidly - // restart, but that we could also discard in response to a memory warning. - if (_rendererFrontend) - { - _rendererFrontend->reduceMemoryUse(); - } - - if ( ! self.dormant) - { - self.dormant = YES; - - [self validateLocationServices]; - - [MGLMapboxEvents flush]; - - _displayLink.paused = YES; - [self processPendingBlocks]; - - if ( ! self.glSnapshotView) - { - self.glSnapshotView = [[UIImageView alloc] initWithFrame: _mbglView->getView().frame]; - self.glSnapshotView.autoresizingMask = _mbglView->getView().autoresizingMask; - self.glSnapshotView.contentMode = UIViewContentModeCenter; - [self insertSubview:self.glSnapshotView aboveSubview:_mbglView->getView()]; - } - - self.glSnapshotView.image = self.lastSnapshotImage; - self.glSnapshotView.hidden = NO; - - if (self.debugMask && [self.glSnapshotView.subviews count] == 0) - { - UIView *snapshotTint = [[UIView alloc] initWithFrame:self.glSnapshotView.bounds]; - snapshotTint.autoresizingMask = self.glSnapshotView.autoresizingMask; - snapshotTint.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.25]; - [self.glSnapshotView addSubview:snapshotTint]; - } - - _mbglView->deleteView(); - } -} - -- (void)resumeRendering:(__unused NSNotification *)notification -{ - MGLLogInfo(@"Entering foreground."); - MGLAssertIsMainThread(); - - if (self.dormant && [UIApplication sharedApplication].applicationState != UIApplicationStateBackground) - { - self.dormant = NO; - - _mbglView->createView(); - - self.glSnapshotView.hidden = YES; - - [self.glSnapshotView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; - - _displayLink.paused = NO; - - [self validateLocationServices]; - - [MGLMapboxEvents pushTurnstileEvent]; - [MGLMapboxEvents pushEvent:MMEEventTypeMapLoad withAttributes:@{}]; - } -} - -- (void)setHidden:(BOOL)hidden -{ - super.hidden = hidden; - _displayLink.paused = hidden; - - if (hidden) - { - [self processPendingBlocks]; - } -} - -- (void)tintColorDidChange -{ - for (UIView *subview in self.subviews) [self updateTintColorForView:subview]; -} - -- (void)updateTintColorForView:(UIView *)view -{ - // Don't update: - // - annotation views - // - attribution button (handled automatically) - if ([view isEqual:self.annotationContainerView] || [view isEqual:self.attributionButton]) return; - - if ([view respondsToSelector:@selector(setTintColor:)]) view.tintColor = self.tintColor; - - for (UIView *subview in view.subviews) [self updateTintColorForView:subview]; -} - -- (BOOL)canBecomeFirstResponder { - return YES; -} - -#pragma mark - Gestures - - -- (void)touchesBegan:(__unused NSSet *)touches withEvent:(__unused UIEvent *)event -{ - if (!self.zoomEnabled && !self.pitchEnabled && !self.rotateEnabled && !self.scrollEnabled) - { - return; - }; - - self.mbglMap.setGestureInProgress(false); - if (self.userTrackingState == MGLUserTrackingStateBegan) - { - [self setUserTrackingMode:MGLUserTrackingModeNone animated:NO completionHandler:nil]; - } - - [self cancelTransitions]; -} - -- (void)notifyGestureDidBegin { - BOOL animated = NO; - - [self cameraWillChangeAnimated:animated]; - self.mbglMap.setGestureInProgress(true); - _changeDelimiterSuppressionDepth++; -} - -- (void)notifyGestureDidEndWithDrift:(BOOL)drift { - _changeDelimiterSuppressionDepth--; - MGLAssert(_changeDelimiterSuppressionDepth >= 0, - @"Unbalanced change delimiter suppression/unsuppression"); - if (_changeDelimiterSuppressionDepth == 0) { - self.mbglMap.setGestureInProgress(false); - } - if ( ! drift) - { - BOOL animated = NO; - [self cameraDidChangeAnimated:animated]; - } -} - -- (BOOL)isSuppressingChangeDelimiters { - return _changeDelimiterSuppressionDepth > 0; -} - -- (BOOL)_shouldChangeFromCamera:(nonnull MGLMapCamera *)oldCamera toCamera:(nonnull MGLMapCamera *)newCamera -{ - // Check delegates first - if ([self.delegate respondsToSelector:@selector(mapView:shouldChangeFromCamera:toCamera:reason:)]) - { - return [self.delegate mapView:self shouldChangeFromCamera:oldCamera toCamera:newCamera reason:self.cameraChangeReasonBitmask]; - } - else if ([self.delegate respondsToSelector:@selector(mapView:shouldChangeFromCamera:toCamera:)]) - { - return [self.delegate mapView:self shouldChangeFromCamera:oldCamera toCamera:newCamera]; - } - else - { - return YES; - } -} - -- (void)handlePanGesture:(UIPanGestureRecognizer *)pan -{ - if ( ! self.isScrollEnabled) return; - - [self cancelTransitions]; - - MGLMapCamera *oldCamera = self.camera; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonGesturePan; - - if (pan.state == UIGestureRecognizerStateBegan) - { - self.userTrackingMode = MGLUserTrackingModeNone; - - [self notifyGestureDidBegin]; - } - else if (pan.state == UIGestureRecognizerStateChanged) - { - CGPoint delta = [pan translationInView:pan.view]; - - MGLMapCamera *toCamera = [self cameraByPanningWithTranslation:delta panGesture:pan]; - - if ([self _shouldChangeFromCamera:oldCamera toCamera:toCamera]) - { - self.mbglMap.moveBy({ delta.x, delta.y }); - [pan setTranslation:CGPointZero inView:pan.view]; - } - - [self cameraIsChanging]; - } - else if (pan.state == UIGestureRecognizerStateEnded || pan.state == UIGestureRecognizerStateCancelled) - { - CGPoint velocity = [pan velocityInView:pan.view]; - if (self.decelerationRate == MGLMapViewDecelerationRateImmediate || sqrtf(velocity.x * velocity.x + velocity.y * velocity.y) < 100) - { - // Not enough velocity to overcome friction - velocity = CGPointZero; - } - - BOOL drift = ! CGPointEqualToPoint(velocity, CGPointZero); - if (drift) - { - CGPoint offset = CGPointMake(velocity.x * self.decelerationRate / 4, velocity.y * self.decelerationRate / 4); - MGLMapCamera *toCamera = [self cameraByPanningWithTranslation:offset panGesture:pan]; - - if ([self _shouldChangeFromCamera:oldCamera toCamera:toCamera]) - { - self.mbglMap.moveBy({ offset.x, offset.y }, MGLDurationFromTimeInterval(self.decelerationRate)); - } - } - - [self notifyGestureDidEndWithDrift:drift]; - } - -} - -- (void)handlePinchGesture:(UIPinchGestureRecognizer *)pinch -{ - if ( ! self.isZoomEnabled) return; - - [self cancelTransitions]; - - CGPoint centerPoint = [self anchorPointForGesture:pinch]; - MGLMapCamera *oldCamera = self.camera; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonGesturePinch; - - if (pinch.state == UIGestureRecognizerStateBegan) - { - self.scale = powf(2, [self zoomLevel]); - - if (abs(pinch.velocity) > abs(self.rotate.velocity)) { - self.isZooming = YES; - } - [self notifyGestureDidBegin]; - } - else if (pinch.state == UIGestureRecognizerStateChanged) - { - // Zoom limiting happens at the core level. - CGFloat newScale = self.scale * pinch.scale; - double newZoom = log2(newScale); - - // Calculates the final camera zoom, has no effect within current map camera. - MGLMapCamera *toCamera = [self cameraByZoomingToZoomLevel:newZoom aroundAnchorPoint:centerPoint]; - - if ([self _shouldChangeFromCamera:oldCamera toCamera:toCamera]) - { - self.mbglMap.jumpTo(mbgl::CameraOptions() - .withZoom(newZoom) - .withAnchor(mbgl::ScreenCoordinate { centerPoint.x, centerPoint.y }) - .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInset))); - - // The gesture recognizer only reports the gesture’s current center - // point, so use the previous center point to anchor the transition. - // If the number of touches has changed, the remembered center point is - // meaningless. - if (self.userTrackingMode == MGLUserTrackingModeNone && pinch.numberOfTouches == _previousPinchNumberOfTouches) - { - self.mbglMap.moveBy({centerPoint.x - _previousPinchCenterPoint.x, centerPoint.y - _previousPinchCenterPoint.y}); - } - } - [self cameraIsChanging]; - } - else if (pinch.state == UIGestureRecognizerStateEnded || pinch.state == UIGestureRecognizerStateCancelled) - { - CGFloat velocity = pinch.velocity; - if (isnan(velocity)) - { - // UIPinchGestureRecognizer sometimes returns NaN for the velocity - velocity = 0; - } - if (velocity > -0.5 && velocity < 3) - { - velocity = 0; - } - - NSTimeInterval duration = (velocity > 0 ? 1 : 0.25) * self.decelerationRate; - - CGFloat scale = self.scale * pinch.scale; - CGFloat newScale = scale; - if (velocity >= 0) - { - newScale += scale * velocity * duration * 0.1; - } - else - { - newScale += scale / (velocity * duration) * 0.1; - } - - if (newScale <= 0 || log2(newScale) < *self.mbglMap.getBounds().minZoom) - { - velocity = 0; - } - - BOOL drift = velocity && duration; - - // Calculates the final camera zoom, this has no effect within current map camera. - double zoom = log2(newScale); - MGLMapCamera *toCamera = [self cameraByZoomingToZoomLevel:zoom aroundAnchorPoint:centerPoint]; - - if ( ! [self _shouldChangeFromCamera:oldCamera toCamera:toCamera]) - { - drift = NO; - } - else - { - if (drift) - { - self.mbglMap.easeTo(mbgl::CameraOptions() - .withZoom(zoom) - .withAnchor(mbgl::ScreenCoordinate { centerPoint.x, centerPoint.y }) - .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInset)), MGLDurationFromTimeInterval(duration)); - } - } - - self.isZooming = NO; - [self notifyGestureDidEndWithDrift:drift]; - [self unrotateIfNeededForGesture]; - } - - _previousPinchCenterPoint = centerPoint; - _previousPinchNumberOfTouches = pinch.numberOfTouches; -} - -- (void)handleRotateGesture:(UIRotationGestureRecognizer *)rotate -{ - if ( ! self.isRotateEnabled) return; - - [self cancelTransitions]; - - CGPoint centerPoint = [self anchorPointForGesture:rotate]; - MGLMapCamera *oldCamera = self.camera; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonGestureRotate; - - if ([[NSUserDefaults standardUserDefaults] objectForKey:MGLRotationThresholdWhileZoomingKey]) { - self.rotationThresholdWhileZooming = [[[NSUserDefaults standardUserDefaults] objectForKey:MGLRotationThresholdWhileZoomingKey] floatValue]; - } - // Check whether a zoom triggered by a pinch gesture is occurring and if the rotation threshold has been met. - if (MGLDegreesFromRadians(self.rotationBeforeThresholdMet) < self.rotationThresholdWhileZooming && self.isZooming && !self.isRotating) { - self.rotationBeforeThresholdMet += fabs(rotate.rotation); - rotate.rotation = 0; - return; - } - - if (rotate.state == UIGestureRecognizerStateBegan || ! self.isRotating) - { - self.angle = MGLRadiansFromDegrees(*self.mbglMap.getCameraOptions().bearing) * -1; - - self.isRotating = YES; - if (self.userTrackingMode != MGLUserTrackingModeNone) - { - self.userTrackingMode = MGLUserTrackingModeFollow; - } - - self.shouldTriggerHapticFeedbackForCompass = NO; - [self notifyGestureDidBegin]; - } - if (rotate.state == UIGestureRecognizerStateChanged) - { - CGFloat newDegrees = MGLDegreesFromRadians(self.angle + rotate.rotation) * -1; - - // constrain to +/-30 degrees when merely rotating like Apple does - // - if ( ! self.isRotationAllowed && std::abs(self.pinch.scale) < 10) - { - newDegrees = fminf(newDegrees, 30); - newDegrees = fmaxf(newDegrees, -30); - } - - MGLMapCamera *toCamera = [self cameraByRotatingToDirection:newDegrees aroundAnchorPoint:centerPoint]; - - if ([self _shouldChangeFromCamera:oldCamera toCamera:toCamera]) - { - self.mbglMap.jumpTo(mbgl::CameraOptions() - .withBearing(newDegrees) - .withAnchor(mbgl::ScreenCoordinate { centerPoint.x, centerPoint.y}) - .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInset))); - } - - [self cameraIsChanging]; - - // Trigger a light haptic feedback event when the user rotates to due north. - if (@available(iOS 10.0, *)) - { - if (self.isHapticFeedbackEnabled && fabs(newDegrees) <= 1 && self.shouldTriggerHapticFeedbackForCompass) - { - UIImpactFeedbackGenerator *hapticFeedback = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleLight]; - [hapticFeedback impactOccurred]; - - self.shouldTriggerHapticFeedbackForCompass = NO; - } - else if (fabs(newDegrees) > 1) - { - self.shouldTriggerHapticFeedbackForCompass = YES; - } - } - } - else if ((rotate.state == UIGestureRecognizerStateEnded || rotate.state == UIGestureRecognizerStateCancelled)) - { - self.rotationBeforeThresholdMet = 0; - if (! self.isRotating) { return; } - self.isRotating = NO; - - CGFloat velocity = rotate.velocity; - CGFloat decelerationRate = self.decelerationRate; - if (decelerationRate != MGLMapViewDecelerationRateImmediate && fabs(velocity) > 3) - { - CGFloat radians = self.angle + rotate.rotation; - CGFloat newRadians = radians + velocity * decelerationRate * 0.1; - CGFloat newDegrees = MGLDegreesFromRadians(newRadians) * -1; - - MGLMapCamera *toCamera = [self cameraByRotatingToDirection:newDegrees aroundAnchorPoint:centerPoint]; - - if ([self _shouldChangeFromCamera:oldCamera toCamera:toCamera]) - { - self.mbglMap.easeTo(mbgl::CameraOptions() - .withBearing(newDegrees) - .withAnchor(mbgl::ScreenCoordinate { centerPoint.x, centerPoint.y }) - .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInset)), - MGLDurationFromTimeInterval(decelerationRate)); - - [self notifyGestureDidEndWithDrift:YES]; - __weak MGLMapView *weakSelf = self; - - [self animateWithDelay:decelerationRate animations:^ - { - [weakSelf unrotateIfNeededForGesture]; - }]; - } - } - else - { - [self notifyGestureDidEndWithDrift:NO]; - [self unrotateIfNeededForGesture]; - } - } -} - -- (void)handleSingleTapGesture:(UITapGestureRecognizer *)singleTap -{ - if (singleTap.state != UIGestureRecognizerStateRecognized) return; - - if (self.mapViewProxyAccessibilityElement.accessibilityElementIsFocused) - { - id nextElement; - if (_userLocationAnnotationIsSelected) - { - nextElement = self.userLocationAnnotationView; - } - else - { - if (_selectedAnnotationTag != MGLAnnotationTagNotFound) { - nextElement = _annotationContextsByAnnotationTag.at(_selectedAnnotationTag).accessibilityElement; - } - } - [self deselectAnnotation:self.selectedAnnotation animated:YES]; - UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nextElement); - - return; - } - - id annotation = [self annotationForGestureRecognizer:singleTap persistingResults:YES]; - if (annotation) - { - CGPoint calloutPoint = [singleTap locationInView:self]; - CGRect positionRect = [self positioningRectForAnnotation:annotation defaultCalloutPoint:calloutPoint]; - [self selectAnnotation:annotation moveIntoView:YES animateSelection:YES calloutPositioningRect:positionRect completionHandler:nil]; - } - else if (self.selectedAnnotation) - { - [self deselectAnnotation:self.selectedAnnotation animated:YES]; - } -} - -/** - Returns the annotation that would be selected by a tap gesture recognizer. - - This is used when a gesture is recognized, and to check if the gesture should be recognized. - - @param singleTap An in progress tap gesture recognizer. - @param persist True to remember the cycleable set of annotations. @see annotationTagAtPoint:persistingResults - */ -- (nullable id )annotationForGestureRecognizer:(UITapGestureRecognizer*)singleTap persistingResults:(BOOL)persist -{ - CGPoint tapPoint = [singleTap locationInView:self]; - - if (self.userLocationVisible) - { - CGPoint tapPointForUserLocation; - if (self.userLocationAnnotationView.hitTestLayer == self.userLocationAnnotationView.layer.presentationLayer) - { - tapPointForUserLocation = tapPoint; - } - else - { - // Get the tap point within the custom hit test layer. - tapPointForUserLocation = [singleTap locationInView:self.userLocationAnnotationView]; - } - - CALayer *hitLayer = [self.userLocationAnnotationView.hitTestLayer hitTest:tapPointForUserLocation]; - - if (hitLayer) - { - if ( ! _userLocationAnnotationIsSelected) - { - return self.userLocation; - } - return nil; - } - } - - MGLAnnotationTag hitAnnotationTag = [self annotationTagAtPoint:tapPoint persistingResults:persist]; - if (hitAnnotationTag != MGLAnnotationTagNotFound) - { - if (hitAnnotationTag != _selectedAnnotationTag) - { - id annotation = [self annotationWithTag:hitAnnotationTag]; - MGLAssert(annotation, @"Cannot select nonexistent annotation with tag %llu", hitAnnotationTag); - return annotation; - } - } - - return nil; -} - -- (void)handleDoubleTapGesture:(UITapGestureRecognizer *)doubleTap -{ - if (doubleTap.state != UIGestureRecognizerStateRecognized) return; - - if ( ! self.isZoomEnabled) return; - - [self cancelTransitions]; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonGestureZoomIn; - - MGLMapCamera *oldCamera = self.camera; - - double newZoom = round(self.zoomLevel) + 1.0; - - CGPoint gesturePoint = [self anchorPointForGesture:doubleTap]; - - MGLMapCamera *toCamera = [self cameraByZoomingToZoomLevel:newZoom aroundAnchorPoint:gesturePoint]; - - if ([self _shouldChangeFromCamera:oldCamera toCamera:toCamera]) - { - mbgl::ScreenCoordinate center(gesturePoint.x, gesturePoint.y); - self.mbglMap.easeTo(mbgl::CameraOptions() - .withZoom(newZoom) - .withAnchor(center) - .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInset)), MGLDurationFromTimeInterval(MGLAnimationDuration)); - - __weak MGLMapView *weakSelf = self; - - [self animateWithDelay:MGLAnimationDuration animations:^ - { - [weakSelf unrotateIfNeededForGesture]; - }]; - } - else - { - [self unrotateIfNeededForGesture]; - } -} - -- (void)handleTwoFingerTapGesture:(UITapGestureRecognizer *)twoFingerTap -{ - if (twoFingerTap.state != UIGestureRecognizerStateRecognized) return; - - if ( ! self.isZoomEnabled) return; - - if ([self zoomLevel] == *self.mbglMap.getBounds().minZoom) return; - - [self cancelTransitions]; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonGestureZoomOut; - - MGLMapCamera *oldCamera = self.camera; - - double newZoom = round(self.zoomLevel) - 1.0; - - CGPoint gesturePoint = [self anchorPointForGesture:twoFingerTap]; - - MGLMapCamera *toCamera = [self cameraByZoomingToZoomLevel:newZoom aroundAnchorPoint:gesturePoint]; - - if ([self _shouldChangeFromCamera:oldCamera toCamera:toCamera]) - { - mbgl::ScreenCoordinate center(gesturePoint.x, gesturePoint.y); - self.mbglMap.easeTo(mbgl::CameraOptions() - .withZoom(newZoom) - .withAnchor(center) - .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInset)), MGLDurationFromTimeInterval(MGLAnimationDuration)); - - __weak MGLMapView *weakSelf = self; - - [self animateWithDelay:MGLAnimationDuration animations:^ - { - [weakSelf unrotateIfNeededForGesture]; - }]; - } -} - -- (void)handleQuickZoomGesture:(UILongPressGestureRecognizer *)quickZoom -{ - if ( ! self.isZoomEnabled) return; - - [self cancelTransitions]; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonGestureOneFingerZoom; - - if (quickZoom.state == UIGestureRecognizerStateBegan) - { - self.scale = powf(2, [self zoomLevel]); - - self.quickZoomStart = [quickZoom locationInView:quickZoom.view].y; - - [self notifyGestureDidBegin]; - } - else if (quickZoom.state == UIGestureRecognizerStateChanged) - { - CGFloat distance = [quickZoom locationInView:quickZoom.view].y - self.quickZoomStart; - - CGFloat newZoom = MAX(log2f(self.scale) + (distance / 75), *self.mbglMap.getBounds().minZoom); - - if ([self zoomLevel] == newZoom) return; - - CGPoint centerPoint = [self anchorPointForGesture:quickZoom]; - - MGLMapCamera *oldCamera = self.camera; - MGLMapCamera *toCamera = [self cameraByZoomingToZoomLevel:newZoom aroundAnchorPoint:centerPoint]; - - if ([self _shouldChangeFromCamera:oldCamera toCamera:toCamera]) - { - self.mbglMap.jumpTo(mbgl::CameraOptions() - .withZoom(newZoom) - .withAnchor(mbgl::ScreenCoordinate { centerPoint.x, centerPoint.y }) - .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInset))); - } - - [self cameraIsChanging]; - } - else if (quickZoom.state == UIGestureRecognizerStateEnded || quickZoom.state == UIGestureRecognizerStateCancelled) - { - [self notifyGestureDidEndWithDrift:NO]; - [self unrotateIfNeededForGesture]; - } -} - -- (void)handleTwoFingerDragGesture:(UIPanGestureRecognizer *)twoFingerDrag -{ - if ( ! self.isPitchEnabled) return; - - [self cancelTransitions]; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonGestureTilt; - static CGFloat initialPitch; - - if (twoFingerDrag.state == UIGestureRecognizerStateBegan) - { - CGPoint midPoint = [twoFingerDrag translationInView:twoFingerDrag.view]; - // In the following if and for the first execution middlePoint - // will be equal to dragGestureMiddlePoint and the resulting - // gestureSlopeAngle will be 0º causing a small delay, - // initializing dragGestureMiddlePoint with the current midPoint - // but substracting one point from 'y' forces an initial 90º angle - // making the gesture avoid the delay - self.dragGestureMiddlePoint = CGPointMake(midPoint.x, midPoint.y-1); - initialPitch = *self.mbglMap.getCameraOptions().pitch; - [self notifyGestureDidBegin]; - } - - if (twoFingerDrag.state == UIGestureRecognizerStateBegan || twoFingerDrag.state == UIGestureRecognizerStateChanged) - { - if (twoFingerDrag.numberOfTouches != 2) - { - twoFingerDrag.state = UIGestureRecognizerStateEnded; - return; - } - - CGPoint leftTouchPoint = [twoFingerDrag locationOfTouch:0 inView:twoFingerDrag.view]; - CGPoint rightTouchPoint = [twoFingerDrag locationOfTouch:1 inView:twoFingerDrag.view]; - CLLocationDegrees fingerSlopeAngle = [self angleBetweenPoints:leftTouchPoint endPoint:rightTouchPoint]; - - CGPoint middlePoint = [twoFingerDrag translationInView:twoFingerDrag.view]; - - CLLocationDegrees gestureSlopeAngle = [self angleBetweenPoints:self.dragGestureMiddlePoint endPoint:middlePoint]; - self.dragGestureMiddlePoint = middlePoint; - if (fabs(fingerSlopeAngle) < MGLHorizontalTiltToleranceDegrees && fabs(gestureSlopeAngle) > 60.0 ) { - - CGFloat gestureDistance = middlePoint.y; - CGFloat slowdown = 2.0; - - CGFloat pitchNew = initialPitch - (gestureDistance / slowdown); - - CGPoint centerPoint = [self anchorPointForGesture:twoFingerDrag]; - - MGLMapCamera *oldCamera = self.camera; - MGLMapCamera *toCamera = [self cameraByTiltingToPitch:pitchNew]; - - if ([self _shouldChangeFromCamera:oldCamera toCamera:toCamera]) - { - self.mbglMap.jumpTo(mbgl::CameraOptions() - .withPitch(pitchNew) - .withAnchor(mbgl::ScreenCoordinate { centerPoint.x, centerPoint.y }) - .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInset))); - } - - [self cameraIsChanging]; - - } - - - } - else if (twoFingerDrag.state == UIGestureRecognizerStateEnded || twoFingerDrag.state == UIGestureRecognizerStateCancelled) - { - [self notifyGestureDidEndWithDrift:NO]; - [self unrotateIfNeededForGesture]; - self.dragGestureMiddlePoint = CGPointZero; - } - -} - -- (MGLMapCamera *)cameraByPanningWithTranslation:(CGPoint)endPoint panGesture:(UIPanGestureRecognizer *)pan -{ - MGLMapCamera *panCamera = [self.camera copy]; - - CGPoint centerPoint = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); - CGPoint endCameraPoint = CGPointMake(centerPoint.x - endPoint.x, centerPoint.y - endPoint.y); - CLLocationCoordinate2D panCoordinate = [self convertPoint:endCameraPoint toCoordinateFromView:pan.view]; - - panCamera.centerCoordinate = panCoordinate; - - return panCamera; -} - -- (MGLMapCamera *)cameraByZoomingToZoomLevel:(double)zoom aroundAnchorPoint:(CGPoint)anchorPoint -{ - mbgl::ScreenCoordinate anchor = mbgl::ScreenCoordinate { anchorPoint.x, anchorPoint.y }; - mbgl::EdgeInsets padding = mbgl::EdgeInsets(anchor.y, anchor.x, self.size.height - anchor.y, self.size.width - anchor.x); - mbgl::CameraOptions currentCameraOptions = self.mbglMap.getCameraOptions(padding); - - currentCameraOptions.zoom = mbgl::util::clamp(zoom, self.minimumZoomLevel, self.maximumZoomLevel); - currentCameraOptions.anchor = anchor; - MGLCoordinateBounds bounds = MGLCoordinateBoundsFromLatLngBounds(self.mbglMap.latLngBoundsForCamera(currentCameraOptions)); - - return [self cameraThatFitsCoordinateBounds:bounds]; -} - -- (MGLMapCamera *)cameraByRotatingToDirection:(CLLocationDirection)degrees aroundAnchorPoint:(CGPoint)anchorPoint -{ - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.contentInset); - mbgl::CameraOptions currentCameraOptions = self.mbglMap.getCameraOptions(padding); - - MGLMapCamera *camera; - - mbgl::ScreenCoordinate anchor = mbgl::ScreenCoordinate { anchorPoint.x, anchorPoint.y }; - currentCameraOptions.bearing = degrees; - currentCameraOptions.anchor = anchor; - camera = [self cameraForCameraOptions:currentCameraOptions]; - - return camera; -} - -- (MGLMapCamera *)cameraByTiltingToPitch:(CGFloat)pitch -{ - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.contentInset); - mbgl::CameraOptions currentCameraOptions = self.mbglMap.getCameraOptions(padding); - - MGLMapCamera *camera; - - currentCameraOptions.pitch = pitch; - camera = [self cameraForCameraOptions:currentCameraOptions]; - - return camera; -} - -- (CGPoint)anchorPointForGesture:(UIGestureRecognizer *)gesture { - if (self.userTrackingMode != MGLUserTrackingModeNone) - { - return self.userLocationAnnotationViewCenter; - } - - // Special case for two-finger drag and quickzoom - if ([gesture isKindOfClass:[UIPanGestureRecognizer class]] || [gesture isKindOfClass:[UILongPressGestureRecognizer class]]) - { - return self.contentCenter; - } - - return [gesture locationInView:gesture.view]; -} - -- (void)handleCalloutAccessoryTapGesture:(UITapGestureRecognizer *)tap -{ - if ([self.delegate respondsToSelector:@selector(mapView:annotation:calloutAccessoryControlTapped:)]) - { - MGLAssert([tap.view isKindOfClass:[UIControl class]], @"Tapped view %@ is not a UIControl", tap.view); - id selectedAnnotation = self.selectedAnnotation; - MGLAssert(selectedAnnotation, @"Selected annotation should not be nil."); - [self.delegate mapView:self annotation:selectedAnnotation - calloutAccessoryControlTapped:(UIControl *)tap.view]; - } -} - -- (BOOL)calloutViewShouldHighlight:(__unused MGLCompactCalloutView *)calloutView -{ - return [self.delegate respondsToSelector:@selector(mapView:tapOnCalloutForAnnotation:)]; -} - -- (void)calloutViewClicked:(__unused MGLSMCalloutView *)calloutView -{ - if ([self.delegate respondsToSelector:@selector(mapView:tapOnCalloutForAnnotation:)]) - { - id selectedAnnotation = self.selectedAnnotation; - MGLAssert(selectedAnnotation, @"Selected annotation should not be nil."); - [self.delegate mapView:self tapOnCalloutForAnnotation:selectedAnnotation]; - } -} - -- (void)calloutViewTapped:(__unused MGLCompactCalloutView *)calloutView -{ - if ([self.delegate respondsToSelector:@selector(mapView:tapOnCalloutForAnnotation:)]) - { - id selectedAnnotation = self.selectedAnnotation; - MGLAssert(selectedAnnotation, @"Selected annotation should not be nil."); - [self.delegate mapView:self tapOnCalloutForAnnotation:selectedAnnotation]; - } -} - -- (void)calloutViewDidAppear:(UIView *)calloutView -{ - UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil); - UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, calloutView); - - [self updatePresentsWithTransaction]; - - // TODO: Add sibling disappear method -} - -- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer -{ - if (gestureRecognizer == _twoFingerDrag) - { - UIPanGestureRecognizer *panGesture = (UIPanGestureRecognizer *)gestureRecognizer; - - if (panGesture.minimumNumberOfTouches == 2) - { - CGPoint leftTouchPoint = [panGesture locationOfTouch:0 inView:panGesture.view]; - CGPoint rightTouchPoint = [panGesture locationOfTouch:1 inView:panGesture.view]; - - CLLocationDegrees degrees = [self angleBetweenPoints:leftTouchPoint endPoint:rightTouchPoint]; - if (fabs(degrees) > MGLHorizontalTiltToleranceDegrees) { - return NO; - } - } - } - else if (gestureRecognizer == _singleTapGestureRecognizer) - { - // Gesture will be recognized if it could deselect an annotation - if(!self.selectedAnnotation) - { - id annotation = [self annotationForGestureRecognizer:(UITapGestureRecognizer*)gestureRecognizer persistingResults:NO]; - if (!annotation) { - return NO; - } - } - } - return YES; -} - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer -{ - NSArray *validSimultaneousGestures = @[ self.pan, self.pinch, self.rotate ]; - return ([validSimultaneousGestures containsObject:gestureRecognizer] && [validSimultaneousGestures containsObject:otherGestureRecognizer]); -} - -- (CLLocationDegrees)angleBetweenPoints:(CGPoint)originPoint endPoint:(CGPoint)endPoint -{ - if (originPoint.x > endPoint.x) { - CGPoint swap = originPoint; - originPoint = endPoint; - endPoint = swap; - } - - CGFloat x = (endPoint.x - originPoint.x); - CGFloat y = (endPoint.y - originPoint.y); - - CGFloat angleInRadians = atan2(y, x); - CLLocationDegrees angleInDegrees = MGLDegreesFromRadians(angleInRadians); - - return angleInDegrees; -} - -#pragma mark - Attribution - - -- (void)showAttribution:(id)sender -{ - BOOL shouldShowVersion = [sender isKindOfClass:[UILongPressGestureRecognizer class]]; - if (shouldShowVersion) - { - UILongPressGestureRecognizer *longPress = (UILongPressGestureRecognizer *)sender; - if (longPress.state != UIGestureRecognizerStateBegan) - { - return; - } - } - - NSString *actionSheetTitle = NSLocalizedStringWithDefaultValue(@"SDK_NAME", nil, nil, @"Mapbox Maps SDK for iOS", @"Action sheet title"); - UIAlertController *attributionController = [UIAlertController alertControllerWithTitle:actionSheetTitle - message:nil - preferredStyle:UIAlertControllerStyleActionSheet]; - - if (shouldShowVersion) - { - attributionController.title = [actionSheetTitle stringByAppendingFormat:@" %@", [NSBundle mgl_frameworkInfoDictionary][@"MGLSemanticVersionString"]]; - } - - NSArray *attributionInfos = [self.style attributionInfosWithFontSize:[UIFont buttonFontSize] - linkColor:nil]; - for (MGLAttributionInfo *info in attributionInfos) - { - UIAlertAction *action = [UIAlertAction actionWithTitle:[info.title.string mgl_titleCasedStringWithLocale:[NSLocale currentLocale]] - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull actionBlock) { - NSURL *url = info.URL; - if (url) - { - if (info.feedbackLink) - { - MGLMapCamera *camera = self.camera; - url = [info feedbackURLForStyleURL:self.styleURL - atCenterCoordinate:camera.centerCoordinate - zoomLevel:self.zoomLevel - direction:camera.heading - pitch:camera.pitch]; - } - [[UIApplication sharedApplication] openURL:url]; - } - }]; - [attributionController addAction:action]; - } - - NSString *telemetryTitle = NSLocalizedStringWithDefaultValue(@"TELEMETRY_NAME", nil, nil, @"Mapbox Telemetry", @"Action in attribution sheet"); - UIAlertAction *telemetryAction = [UIAlertAction actionWithTitle:telemetryTitle - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - [self presentTelemetryAlertController]; - }]; - [attributionController addAction:telemetryAction]; - - NSString *cancelTitle = NSLocalizedStringWithDefaultValue(@"CANCEL", nil, nil, @"Cancel", @"Title of button for dismissing attribution action sheet"); - UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelTitle - style:UIAlertActionStyleCancel - handler:NULL]; - [attributionController addAction:cancelAction]; - - attributionController.popoverPresentationController.sourceView = self; - attributionController.popoverPresentationController.sourceRect = self.attributionButton.frame; - - UIViewController *viewController = [self.window.rootViewController mgl_topMostViewController]; - [viewController presentViewController:attributionController animated:YES completion:NULL]; - self.attributionController = attributionController; -} - -- (void)presentTelemetryAlertController -{ - NSString *title = NSLocalizedStringWithDefaultValue(@"TELEMETRY_TITLE", nil, nil, @"Make Mapbox Maps Better", @"Telemetry prompt title"); - NSString *message; - NSString *participateTitle; - NSString *declineTitle; - if ([[NSUserDefaults standardUserDefaults] boolForKey:MGLMapboxMetricsEnabledKey]) - { - message = NSLocalizedStringWithDefaultValue(@"TELEMETRY_ENABLED_MSG", nil, nil, @"You are helping to make OpenStreetMap and Mapbox maps better by contributing anonymous usage data.", @"Telemetry prompt message"); - participateTitle = NSLocalizedStringWithDefaultValue(@"TELEMETRY_ENABLED_ON", nil, nil, @"Keep Participating", @"Telemetry prompt button"); - declineTitle = NSLocalizedStringWithDefaultValue(@"TELEMETRY_ENABLED_OFF", nil, nil, @"Stop Participating", @"Telemetry prompt button"); - } - else - { - message = NSLocalizedStringWithDefaultValue(@"TELEMETRY_DISABLED_MSG", nil, nil, @"You can help make OpenStreetMap and Mapbox maps better by contributing anonymous usage data.", @"Telemetry prompt message"); - participateTitle = NSLocalizedStringWithDefaultValue(@"TELEMETRY_DISABLED_ON", nil, nil, @"Participate", @"Telemetry prompt button"); - declineTitle = NSLocalizedStringWithDefaultValue(@"TELEMETRY_DISABLED_OFF", nil, nil, @"Don’t Participate", @"Telemetry prompt button"); - } - - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title - message:message - preferredStyle:UIAlertControllerStyleAlert]; - - NSString *moreTitle = NSLocalizedStringWithDefaultValue(@"TELEMETRY_MORE", nil, nil, @"Tell Me More", @"Telemetry prompt button"); - UIAlertAction *moreAction = [UIAlertAction actionWithTitle:moreTitle - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.mapbox.com/telemetry/"]]; - }]; - [alertController addAction:moreAction]; - - UIAlertAction *declineAction = [UIAlertAction actionWithTitle:declineTitle - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - [[NSUserDefaults standardUserDefaults] setBool:NO forKey:MGLMapboxMetricsEnabledKey]; - }]; - [alertController addAction:declineAction]; - - UIAlertAction *participateAction = [UIAlertAction actionWithTitle:participateTitle - style:UIAlertActionStyleCancel - handler:^(UIAlertAction * _Nonnull action) { - [[NSUserDefaults standardUserDefaults] setBool:YES forKey:MGLMapboxMetricsEnabledKey]; - }]; - [alertController addAction:participateAction]; - - UIViewController *viewController = [self.window.rootViewController mgl_topMostViewController]; - [viewController presentViewController:alertController animated:YES completion:NULL]; -} - -#pragma mark - Properties - - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - if ([keyPath isEqualToString:@"hidden"] && object == _attributionButton) - { - NSNumber *hiddenNumber = change[NSKeyValueChangeNewKey]; - BOOL attributionButtonWasHidden = [hiddenNumber boolValue]; - if (attributionButtonWasHidden) - { - [MGLMapboxEvents ensureMetricsOptoutExists]; - } - } - else if ([keyPath isEqualToString:@"coordinate"] && [object conformsToProtocol:@protocol(MGLAnnotation)] && ![object isKindOfClass:[MGLMultiPoint class]]) - { - id annotation = object; - MGLAnnotationTag annotationTag = (MGLAnnotationTag)(NSUInteger)context; - // We can get here because a subclass registered itself as an observer - // of the coordinate key path of a non-multipoint annotation but failed - // to handle the change. This check deters us from treating the - // subclass’s context as an annotation tag. If the context happens to - // match a valid annotation tag, the annotation will be unnecessarily - // but safely updated. - if (annotation == [self annotationWithTag:annotationTag]) - { - const mbgl::Point point = MGLPointFromLocationCoordinate2D(annotation.coordinate); - - if (annotationTag != MGLAnnotationTagNotFound) { - MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(annotationTag); - if (annotationContext.annotationView) - { - // Redundantly move the associated annotation view outside the scope of the animation-less transaction block in -updateAnnotationViews. - annotationContext.annotationView.center = [self convertCoordinate:annotationContext.annotation.coordinate toPointToView:self]; - } - - MGLAnnotationImage *annotationImage = [self imageOfAnnotationWithTag:annotationTag]; - NSString *symbolName = annotationImage.styleIconIdentifier; - - // Update the annotation’s backing geometry to match the annotation model object. Any associated annotation view is also moved by side effect. However, -updateAnnotationViews disables the view’s animation actions, because it can’t distinguish between moves due to the viewport changing and moves due to the annotation’s coordinate changing. - self.mbglMap.updateAnnotation(annotationTag, mbgl::SymbolAnnotation { point, symbolName.UTF8String }); - [self updateCalloutView]; - } - } - } - else if ([keyPath isEqualToString:@"coordinates"] && [object isKindOfClass:[MGLMultiPoint class]]) - { - MGLMultiPoint *annotation = object; - MGLAnnotationTag annotationTag = (MGLAnnotationTag)(NSUInteger)context; - // We can get here because a subclass registered itself as an observer - // of the coordinates key path of a multipoint annotation but failed - // to handle the change. This check deters us from treating the - // subclass’s context as an annotation tag. If the context happens to - // match a valid annotation tag, the annotation will be unnecessarily - // but safely updated. - if (annotation == [self annotationWithTag:annotationTag]) - { - // Update the annotation’s backing geometry to match the annotation model object. - self.mbglMap.updateAnnotation(annotationTag, [annotation annotationObjectWithDelegate:self]); - [self updateCalloutView]; - } - } -} - -+ (NSSet *)keyPathsForValuesAffectingZoomEnabled -{ - return [NSSet setWithObject:@"allowsZooming"]; -} - -+ (NSSet *)keyPathsForValuesAffectingScrollEnabled -{ - return [NSSet setWithObject:@"allowsScrolling"]; -} - -+ (NSSet *)keyPathsForValuesAffectingRotateEnabled -{ - return [NSSet setWithObject:@"allowsRotating"]; -} - -+ (NSSet *)keyPathsForValuesAffectingPitchEnabled -{ - return [NSSet setWithObject:@"allowsTilting"]; -} - -- (MGLMapDebugMaskOptions)debugMask -{ - if (!_mbglMap) - { - NSAssert(self.terminated, @"_mbglMap should only be unavailable during app termination"); - return self.residualDebugMask; - } - - mbgl::MapDebugOptions options = self.mbglMap.getDebug(); - MGLMapDebugMaskOptions mask = 0; - if (options & mbgl::MapDebugOptions::TileBorders) - { - mask |= MGLMapDebugTileBoundariesMask; - } - if (options & mbgl::MapDebugOptions::ParseStatus) - { - mask |= MGLMapDebugTileInfoMask; - } - if (options & mbgl::MapDebugOptions::Timestamps) - { - mask |= MGLMapDebugTimestampsMask; - } - if (options & mbgl::MapDebugOptions::Collision) - { - mask |= MGLMapDebugCollisionBoxesMask; - } - if (options & mbgl::MapDebugOptions::Overdraw) - { - mask |= MGLMapDebugOverdrawVisualizationMask; - } - return mask; -} - -- (void)setDebugMask:(MGLMapDebugMaskOptions)debugMask -{ - if (!_mbglMap) - { - return; - } - - mbgl::MapDebugOptions options = mbgl::MapDebugOptions::NoDebug; - if (debugMask & MGLMapDebugTileBoundariesMask) - { - options |= mbgl::MapDebugOptions::TileBorders; - } - if (debugMask & MGLMapDebugTileInfoMask) - { - options |= mbgl::MapDebugOptions::ParseStatus; - } - if (debugMask & MGLMapDebugTimestampsMask) - { - options |= mbgl::MapDebugOptions::Timestamps; - } - if (debugMask & MGLMapDebugCollisionBoxesMask) - { - options |= mbgl::MapDebugOptions::Collision; - } - if (debugMask & MGLMapDebugOverdrawVisualizationMask) - { - options |= mbgl::MapDebugOptions::Overdraw; - } - self.mbglMap.setDebug(options); -} - -- (void)resetNorth -{ - MGLLogInfo(@"Resetting the map rotation to a northern heading — a direction of 0 degrees."); - [self resetNorthAnimated:YES]; -} - -- (void)resetNorthAnimated:(BOOL)animated -{ - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonResetNorth; - - [self setDirection:0 animated:animated]; -} - -- (void)resetPosition -{ - MGLLogInfo(@"Resetting the map to the current style’s default viewport."); - auto camera = self.mbglMap.getStyle().getDefaultCamera(); - - double pitch = camera.pitch ? *camera.pitch : 0.0; - double bearing = camera.bearing ? *camera.bearing : 0.0; - double zoom = camera.zoom ? *camera.zoom : 0.0; - mbgl::LatLng center = camera.center ? *camera.center : mbgl::LatLng(); - - CLLocationDirection heading = mbgl::util::wrap(bearing, 0., 360.); - CLLocationDistance altitude = MGLAltitudeForZoomLevel(zoom, pitch, 0, self.frame.size); - self.camera = [MGLMapCamera cameraLookingAtCenterCoordinate:MGLLocationCoordinate2DFromLatLng(center) - altitude:altitude - pitch:pitch - heading:heading]; -} - -- (void)setZoomEnabled:(BOOL)zoomEnabled -{ - MGLLogDebug(@"Setting zoomEnabled: %@", MGLStringFromBOOL(zoomEnabled)); - _zoomEnabled = zoomEnabled; - self.pinch.enabled = zoomEnabled; - self.doubleTap.enabled = zoomEnabled; - self.quickZoom.enabled = zoomEnabled; - self.twoFingerTap.enabled = zoomEnabled; -} - -- (void)setScrollEnabled:(BOOL)scrollEnabled -{ - MGLLogDebug(@"Setting scrollEnabled: %@", MGLStringFromBOOL(scrollEnabled)); - _scrollEnabled = scrollEnabled; - self.pan.enabled = scrollEnabled; -} - -- (void)setRotateEnabled:(BOOL)rotateEnabled -{ - MGLLogDebug(@"Setting rotateEnabled: %@", MGLStringFromBOOL(rotateEnabled)); - _rotateEnabled = rotateEnabled; - self.rotate.enabled = rotateEnabled; -} - -- (void)setPitchEnabled:(BOOL)pitchEnabled -{ - MGLLogDebug(@"Setting pitchEnabled: %@", MGLStringFromBOOL(pitchEnabled)); - _pitchEnabled = pitchEnabled; - self.twoFingerDrag.enabled = pitchEnabled; -} - -- (void)setShowsScale:(BOOL)showsScale -{ - MGLLogDebug(@"Setting showsScale: %@", MGLStringFromBOOL(showsScale)); - _showsScale = showsScale; - self.scaleBar.hidden = !showsScale; - - if (showsScale) - { - [self updateScaleBar]; - } -} - -- (void)setPrefetchesTiles:(BOOL)prefetchesTiles -{ - _mbglMap->setPrefetchZoomDelta(prefetchesTiles ? mbgl::util::DEFAULT_PREFETCH_ZOOM_DELTA : 0); -} - -- (BOOL)prefetchesTiles -{ - return _mbglMap->getPrefetchZoomDelta() > 0 ? YES : NO; -} - -#pragma mark - Accessibility - - -- (NSString *)accessibilityValue -{ - NSMutableArray *facts = [NSMutableArray array]; - - double zoomLevel = round(self.zoomLevel + 1); - [facts addObject:[NSString stringWithFormat:NSLocalizedStringWithDefaultValue(@"MAP_A11Y_VALUE_ZOOM", nil, nil, @"Zoom %dx.", @"Map accessibility value; {zoom level}"), (int)zoomLevel]]; - - NSInteger annotationCount = self.accessibilityAnnotationCount; - if (annotationCount) { - [facts addObject:[NSString stringWithFormat:NSLocalizedStringWithDefaultValue(@"MAP_A11Y_VALUE_ANNOTATIONS", nil, nil, @"%ld annotation(s) visible.", @"Map accessibility value; {number of visible annotations}"), (long)self.accessibilityAnnotationCount]]; - } - - NSArray *placeFeatures = self.visiblePlaceFeatures; - if (placeFeatures.count) { - NSMutableArray *placesArray = [NSMutableArray arrayWithCapacity:placeFeatures.count]; - NSMutableSet *placesSet = [NSMutableSet setWithCapacity:placeFeatures.count]; - for (id placeFeature in placeFeatures.reverseObjectEnumerator) { - NSString *name = [placeFeature attributeForKey:@"name"]; - if (![placesSet containsObject:name]) { - [placesArray addObject:name]; - [placesSet addObject:name]; - } - if (placesArray.count >= 3) { - break; - } - } - NSString *placesString = [placesArray componentsJoinedByString:NSLocalizedStringWithDefaultValue(@"LIST_SEPARATOR", nil, nil, @", ", @"List separator")]; - [facts addObject:[NSString stringWithFormat:NSLocalizedStringWithDefaultValue(@"MAP_A11Y_VALUE_PLACES", nil, nil, @"Places visible: %@.", @"Map accessibility value; {list of visible places}"), placesString]]; - } - - NSArray *roadFeatures = self.visibleRoadFeatures; - if (roadFeatures.count) { - [facts addObject:[NSString stringWithFormat:NSLocalizedStringWithDefaultValue(@"MAP_A11Y_VALUE_ROADS", nil, nil, @"%ld road(s) visible.", @"Map accessibility value; {number of visible roads}"), roadFeatures.count]]; - } - - NSString *value = [facts componentsJoinedByString:@" "]; - return value; -} - -- (NSArray> *)visiblePlaceFeatures -{ - if (!_visiblePlaceFeatures) - { - NSArray *placeStyleLayerIdentifiers = [self.style.placeStyleLayers valueForKey:@"identifier"]; - _visiblePlaceFeatures = [self visibleFeaturesInRect:self.bounds inStyleLayersWithIdentifiers:[NSSet setWithArray:placeStyleLayerIdentifiers]]; - } - return _visiblePlaceFeatures; -} - -- (NSArray> *)visibleRoadFeatures -{ - if (!_visibleRoadFeatures) - { - NSArray *roadStyleLayerIdentifiers = [self.style.roadStyleLayers valueForKey:@"identifier"]; - _visibleRoadFeatures = [self visibleFeaturesInRect:self.bounds inStyleLayersWithIdentifiers:[NSSet setWithArray:roadStyleLayerIdentifiers]]; - } - return _visibleRoadFeatures; -} - -- (CGRect)accessibilityFrame -{ - CGRect frame = [super accessibilityFrame]; - UIViewController *viewController = self.mgl_viewControllerForLayoutGuides; - if (viewController) - { - CGFloat topInset = viewController.topLayoutGuide.length; - frame.origin.y += topInset; - frame.size.height -= topInset + viewController.bottomLayoutGuide.length; - } - return frame; -} - -- (UIBezierPath *)accessibilityPath -{ - UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.accessibilityFrame]; - - // Exclude any visible annotation callout view. - if (self.calloutViewForSelectedAnnotation) - { - UIBezierPath *calloutViewPath = [UIBezierPath bezierPathWithRect:self.calloutViewForSelectedAnnotation.frame]; - [path appendPath:calloutViewPath]; - } - - return path; -} - -- (NSInteger)accessibilityElementCount -{ - if (self.calloutViewForSelectedAnnotation) - { - return 2 /* calloutViewForSelectedAnnotation, mapViewProxyAccessibilityElement */; - } - return !!self.userLocationAnnotationView + self.accessibilityAnnotationCount + self.visiblePlaceFeatures.count + self.visibleRoadFeatures.count + 2 /* compass, attributionButton */; -} - -- (NSInteger)accessibilityAnnotationCount -{ - std::vector visibleAnnotations = [self annotationTagsInRect:self.bounds]; - return visibleAnnotations.size(); -} - -- (id)accessibilityElementAtIndex:(NSInteger)index -{ - if (self.calloutViewForSelectedAnnotation) - { - if (index == 0) - { - return self.calloutViewForSelectedAnnotation; - } - if (index == 1) - { - self.mapViewProxyAccessibilityElement.accessibilityFrame = self.accessibilityFrame; - self.mapViewProxyAccessibilityElement.accessibilityPath = self.accessibilityPath; - return self.mapViewProxyAccessibilityElement; - } - return nil; - } - - // Compass - NSInteger compassIndex = 0; - if (index == compassIndex) - { - return self.compassView; - } - - // User location annotation - NSRange userLocationAnnotationRange = NSMakeRange(compassIndex + 1, !!self.userLocationAnnotationView); - if (NSLocationInRange(index, userLocationAnnotationRange)) - { - return self.userLocationAnnotationView; - } - - CGPoint centerPoint = self.contentCenter; - if (self.userTrackingMode != MGLUserTrackingModeNone) - { - centerPoint = self.userLocationAnnotationViewCenter; - } - - // Visible annotations - std::vector visibleAnnotations = [self annotationTagsInRect:self.bounds]; - NSRange visibleAnnotationRange = NSMakeRange(NSMaxRange(userLocationAnnotationRange), visibleAnnotations.size()); - if (NSLocationInRange(index, visibleAnnotationRange)) - { - std::sort(visibleAnnotations.begin(), visibleAnnotations.end()); - std::sort(visibleAnnotations.begin(), visibleAnnotations.end(), [&](const MGLAnnotationTag tagA, const MGLAnnotationTag tagB) { - CLLocationCoordinate2D coordinateA = [[self annotationWithTag:tagA] coordinate]; - CLLocationCoordinate2D coordinateB = [[self annotationWithTag:tagB] coordinate]; - CGPoint pointA = [self convertCoordinate:coordinateA toPointToView:self]; - CGPoint pointB = [self convertCoordinate:coordinateB toPointToView:self]; - CGFloat deltaA = hypot(pointA.x - centerPoint.x, pointA.y - centerPoint.y); - CGFloat deltaB = hypot(pointB.x - centerPoint.x, pointB.y - centerPoint.y); - return deltaA < deltaB; - }); - - NSUInteger annotationIndex = index - visibleAnnotationRange.location; - MGLAnnotationTag annotationTag = visibleAnnotations[annotationIndex]; - MGLAssert(annotationTag != MGLAnnotationTagNotFound, @"Can’t get accessibility element for nonexistent or invisible annotation at index %li.", (long)index); - return [self accessibilityElementForAnnotationWithTag:annotationTag]; - } - - // Visible place features - NSArray *visiblePlaceFeatures = self.visiblePlaceFeatures; - NSRange visiblePlaceFeatureRange = NSMakeRange(NSMaxRange(visibleAnnotationRange), visiblePlaceFeatures.count); - if (NSLocationInRange(index, visiblePlaceFeatureRange)) - { - visiblePlaceFeatures = [visiblePlaceFeatures sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull featureA, id _Nonnull featureB) { - CGPoint pointA = [self convertCoordinate:featureA.coordinate toPointToView:self]; - CGPoint pointB = [self convertCoordinate:featureB.coordinate toPointToView:self]; - CGFloat deltaA = hypot(pointA.x - centerPoint.x, pointA.y - centerPoint.y); - CGFloat deltaB = hypot(pointB.x - centerPoint.x, pointB.y - centerPoint.y); - return [@(deltaA) compare:@(deltaB)]; - }]; - - id feature = visiblePlaceFeatures[index - visiblePlaceFeatureRange.location]; - return [self accessibilityElementForPlaceFeature:feature]; - } - - // Visible road features - NSArray *visibleRoadFeatures = self.visibleRoadFeatures; - NSRange visibleRoadFeatureRange = NSMakeRange(NSMaxRange(visiblePlaceFeatureRange), visibleRoadFeatures.count); - if (NSLocationInRange(index, visibleRoadFeatureRange)) - { - visibleRoadFeatures = [visibleRoadFeatures sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull featureA, id _Nonnull featureB) { - CGPoint pointA = [self convertCoordinate:featureA.coordinate toPointToView:self]; - CGPoint pointB = [self convertCoordinate:featureB.coordinate toPointToView:self]; - CGFloat deltaA = hypot(pointA.x - centerPoint.x, pointA.y - centerPoint.y); - CGFloat deltaB = hypot(pointB.x - centerPoint.x, pointB.y - centerPoint.y); - return [@(deltaA) compare:@(deltaB)]; - }]; - - id feature = visibleRoadFeatures[index - visibleRoadFeatureRange.location]; - return [self accessibilityElementForRoadFeature:feature]; - } - - // Attribution button - NSInteger attributionButtonIndex = NSMaxRange(visibleRoadFeatureRange); - if (index == attributionButtonIndex) - { - return self.attributionButton; - } - - MGLAssert(NO, @"Index %ld not in recognized accessibility element ranges. " - @"User location annotation range: %@; visible annotation range: %@; " - @"visible place feature range: %@; visible road feature range: %@.", - (long)index, NSStringFromRange(userLocationAnnotationRange), - NSStringFromRange(visibleAnnotationRange), NSStringFromRange(visiblePlaceFeatureRange), - NSStringFromRange(visibleRoadFeatureRange)); - return nil; -} - -/** - Returns an accessibility element corresponding to a visible annotation with the given tag. - - @param annotationTag Tag of the annotation represented by the accessibility element to return. - */ -- (id)accessibilityElementForAnnotationWithTag:(MGLAnnotationTag)annotationTag -{ - MGLAssert(_annotationContextsByAnnotationTag.count(annotationTag), @"Missing annotation for tag %llu.", annotationTag); - MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(annotationTag); - id annotation = annotationContext.annotation; - - // Let the annotation view serve as its own accessibility element. - MGLAnnotationView *annotationView = annotationContext.annotationView; - if (annotationView && annotationView.superview) - { - return annotationView; - } - - // Lazily create an accessibility element for the found annotation. - if ( ! annotationContext.accessibilityElement) - { - annotationContext.accessibilityElement = [[MGLAnnotationAccessibilityElement alloc] initWithAccessibilityContainer:self tag:annotationTag]; - } - - // Update the accessibility element. - MGLAnnotationImage *annotationImage = [self imageOfAnnotationWithTag:annotationTag]; - CGRect annotationFrame = [self frameOfImage:annotationImage.image centeredAtCoordinate:annotation.coordinate]; - CGPoint annotationFrameCenter = CGPointMake(CGRectGetMidX(annotationFrame), CGRectGetMidY(annotationFrame)); - CGRect minimumFrame = CGRectInset({ annotationFrameCenter, CGSizeZero }, - -MGLAnnotationAccessibilityElementMinimumSize.width / 2, - -MGLAnnotationAccessibilityElementMinimumSize.height / 2); - annotationFrame = CGRectUnion(annotationFrame, minimumFrame); - CGRect screenRect = UIAccessibilityConvertFrameToScreenCoordinates(annotationFrame, self); - annotationContext.accessibilityElement.accessibilityFrame = screenRect; - - if ([annotation respondsToSelector:@selector(title)]) - { - annotationContext.accessibilityElement.accessibilityLabel = annotation.title; - } - if ([annotation respondsToSelector:@selector(subtitle)]) - { - annotationContext.accessibilityElement.accessibilityValue = annotation.subtitle; - } - - return annotationContext.accessibilityElement; -} - -/** - Returns an accessibility element corresponding to the given place feature. - - @param feature The place feature represented by the accessibility element. - */ -- (id)accessibilityElementForPlaceFeature:(id )feature -{ - if (!_featureAccessibilityElements) - { - _featureAccessibilityElements = [NSMutableSet set]; - } - - MGLFeatureAccessibilityElement *element = [_featureAccessibilityElements objectsPassingTest:^BOOL(MGLFeatureAccessibilityElement * _Nonnull testElement, BOOL * _Nonnull stop) { - return testElement.feature.identifier && ![testElement.feature.identifier isEqual:@0] && [testElement.feature.identifier isEqual:feature.identifier]; - }].anyObject; - if (!element) - { - element = [[MGLPlaceFeatureAccessibilityElement alloc] initWithAccessibilityContainer:self feature:feature]; - } - CGPoint center = [self convertCoordinate:feature.coordinate toPointToView:self]; - CGRect annotationFrame = CGRectInset({center, CGSizeZero}, -MGLAnnotationAccessibilityElementMinimumSize.width / 2, -MGLAnnotationAccessibilityElementMinimumSize.width / 2); - CGRect screenRect = UIAccessibilityConvertFrameToScreenCoordinates(annotationFrame, self); - element.accessibilityFrame = screenRect; - - [_featureAccessibilityElements addObject:element]; - - return element; -} - -/** - Returns an accessibility element corresponding to the given road feature. - - @param feature The road feature represented by the accessibility element. - */ -- (id)accessibilityElementForRoadFeature:(id )feature -{ - if (!_featureAccessibilityElements) - { - _featureAccessibilityElements = [NSMutableSet set]; - } - - MGLFeatureAccessibilityElement *element = [_featureAccessibilityElements objectsPassingTest:^BOOL(MGLFeatureAccessibilityElement * _Nonnull testElement, BOOL * _Nonnull stop) { - return testElement.feature.identifier && ![testElement.feature.identifier isEqual:@0] && [testElement.feature.identifier isEqual:feature.identifier]; - }].anyObject; - if (!element) - { - element = [[MGLRoadFeatureAccessibilityElement alloc] initWithAccessibilityContainer:self feature:feature]; - } - - UIBezierPath *path; - if ([feature isKindOfClass:[MGLPointFeature class]]) - { - CGPoint center = [self convertCoordinate:feature.coordinate toPointToView:self]; - CGRect annotationFrame = CGRectInset({center, CGSizeZero}, -MGLAnnotationAccessibilityElementMinimumSize.width / 2, -MGLAnnotationAccessibilityElementMinimumSize.width / 2); - CGRect screenRect = UIAccessibilityConvertFrameToScreenCoordinates(annotationFrame, self); - element.accessibilityFrame = screenRect; - } - else if ([feature isKindOfClass:[MGLPolylineFeature class]]) - { - path = [self pathOfPolyline:(MGLPolyline *)feature]; - } - else if ([feature isKindOfClass:[MGLMultiPolylineFeature class]]) - { - path = [UIBezierPath bezierPath]; - for (MGLPolyline *polyline in [(MGLMultiPolylineFeature *)feature polylines]) - { - [path appendPath:[self pathOfPolyline:polyline]]; - } - } - - if (path) - { - CGPathRef strokedCGPath = CGPathCreateCopyByStrokingPath(path.CGPath, NULL, MGLAnnotationAccessibilityElementMinimumSize.width, kCGLineCapButt, kCGLineJoinMiter, 0); - UIBezierPath *strokedPath = [UIBezierPath bezierPathWithCGPath:strokedCGPath]; - CGPathRelease(strokedCGPath); - UIBezierPath *screenPath = UIAccessibilityConvertPathToScreenCoordinates(strokedPath, self); - element.accessibilityPath = screenPath; - } - - [_featureAccessibilityElements addObject:element]; - - return element; -} - -- (UIBezierPath *)pathOfPolyline:(MGLPolyline *)polyline -{ - CLLocationCoordinate2D *coordinates = polyline.coordinates; - NSUInteger pointCount = polyline.pointCount; - UIBezierPath *path = [UIBezierPath bezierPath]; - for (NSUInteger i = 0; i < pointCount; i++) - { - CGPoint point = [self convertCoordinate:coordinates[i] toPointToView:self]; - if (i) - { - [path addLineToPoint:point]; - } - else - { - [path moveToPoint:point]; - } - } - return path; -} - -- (NSInteger)indexOfAccessibilityElement:(id)element -{ - if (self.calloutViewForSelectedAnnotation) - { - return [@[self.calloutViewForSelectedAnnotation, self.mapViewProxyAccessibilityElement] - indexOfObject:element]; - } - - // Compass - NSUInteger compassIndex = 0; - if (element == self.compassView) - { - return compassIndex; - } - - // User location annotation - NSRange userLocationAnnotationRange = NSMakeRange(compassIndex + 1, !!self.userLocationAnnotationView); - if (element == self.userLocationAnnotationView) - { - return userLocationAnnotationRange.location; - } - - CGPoint centerPoint = self.contentCenter; - if (self.userTrackingMode != MGLUserTrackingModeNone) - { - centerPoint = self.userLocationAnnotationViewCenter; - } - - // Visible annotations - std::vector visibleAnnotations = [self annotationTagsInRect:self.bounds]; - NSRange visibleAnnotationRange = NSMakeRange(NSMaxRange(userLocationAnnotationRange), visibleAnnotations.size()); - MGLAnnotationTag tag = MGLAnnotationTagNotFound; - if ([element isKindOfClass:[MGLAnnotationView class]]) - { - id annotation = [(MGLAnnotationView *)element annotation]; - tag = [self annotationTagForAnnotation:annotation]; - } - else if ([element isKindOfClass:[MGLAnnotationAccessibilityElement class]]) - { - tag = [(MGLAnnotationAccessibilityElement *)element tag]; - } - - if (tag != MGLAnnotationTagNotFound) - { - std::sort(visibleAnnotations.begin(), visibleAnnotations.end()); - std::sort(visibleAnnotations.begin(), visibleAnnotations.end(), [&](const MGLAnnotationTag tagA, const MGLAnnotationTag tagB) { - CLLocationCoordinate2D coordinateA = [[self annotationWithTag:tagA] coordinate]; - CLLocationCoordinate2D coordinateB = [[self annotationWithTag:tagB] coordinate]; - CGPoint pointA = [self convertCoordinate:coordinateA toPointToView:self]; - CGPoint pointB = [self convertCoordinate:coordinateB toPointToView:self]; - CGFloat deltaA = hypot(pointA.x - centerPoint.x, pointA.y - centerPoint.y); - CGFloat deltaB = hypot(pointB.x - centerPoint.x, pointB.y - centerPoint.y); - return deltaA < deltaB; - }); - - auto foundElement = std::find(visibleAnnotations.begin(), visibleAnnotations.end(), tag); - if (foundElement == visibleAnnotations.end()) - { - return NSNotFound; - } - return visibleAnnotationRange.location + std::distance(visibleAnnotations.begin(), foundElement); - } - - // Visible place features - NSArray *visiblePlaceFeatures = self.visiblePlaceFeatures; - NSRange visiblePlaceFeatureRange = NSMakeRange(NSMaxRange(visibleAnnotationRange), visiblePlaceFeatures.count); - if ([element isKindOfClass:[MGLPlaceFeatureAccessibilityElement class]]) - { - visiblePlaceFeatures = [visiblePlaceFeatures sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull featureA, id _Nonnull featureB) { - CGPoint pointA = [self convertCoordinate:featureA.coordinate toPointToView:self]; - CGPoint pointB = [self convertCoordinate:featureB.coordinate toPointToView:self]; - CGFloat deltaA = hypot(pointA.x - centerPoint.x, pointA.y - centerPoint.y); - CGFloat deltaB = hypot(pointB.x - centerPoint.x, pointB.y - centerPoint.y); - return [@(deltaA) compare:@(deltaB)]; - }]; - - id feature = [(MGLPlaceFeatureAccessibilityElement *)element feature]; - NSUInteger featureIndex = [visiblePlaceFeatures indexOfObject:feature]; - if (featureIndex == NSNotFound) - { - featureIndex = [visiblePlaceFeatures indexOfObjectPassingTest:^BOOL (id _Nonnull visibleFeature, NSUInteger idx, BOOL * _Nonnull stop) { - return visibleFeature.identifier && ![visibleFeature.identifier isEqual:@0] && [visibleFeature.identifier isEqual:feature.identifier]; - }]; - } - if (featureIndex == NSNotFound) - { - return NSNotFound; - } - return visiblePlaceFeatureRange.location + featureIndex; - } - - // Visible road features - NSArray *visibleRoadFeatures = self.visibleRoadFeatures; - NSRange visibleRoadFeatureRange = NSMakeRange(NSMaxRange(visiblePlaceFeatureRange), visibleRoadFeatures.count); - if ([element isKindOfClass:[MGLRoadFeatureAccessibilityElement class]]) - { - visibleRoadFeatures = [visibleRoadFeatures sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull featureA, id _Nonnull featureB) { - CGPoint pointA = [self convertCoordinate:featureA.coordinate toPointToView:self]; - CGPoint pointB = [self convertCoordinate:featureB.coordinate toPointToView:self]; - CGFloat deltaA = hypot(pointA.x - centerPoint.x, pointA.y - centerPoint.y); - CGFloat deltaB = hypot(pointB.x - centerPoint.x, pointB.y - centerPoint.y); - return [@(deltaA) compare:@(deltaB)]; - }]; - - id feature = [(MGLRoadFeatureAccessibilityElement *)element feature]; - NSUInteger featureIndex = [visibleRoadFeatures indexOfObject:feature]; - if (featureIndex == NSNotFound) - { - featureIndex = [visibleRoadFeatures indexOfObjectPassingTest:^BOOL (id _Nonnull visibleFeature, NSUInteger idx, BOOL * _Nonnull stop) { - return visibleFeature.identifier && ![visibleFeature.identifier isEqual:@0] && [visibleFeature.identifier isEqual:feature.identifier]; - }]; - } - if (featureIndex == NSNotFound) - { - return NSNotFound; - } - return visibleRoadFeatureRange.location + featureIndex; - } - - // Attribution button - NSUInteger attributionButtonIndex = NSMaxRange(visibleRoadFeatureRange); - if (element == self.attributionButton) - { - return attributionButtonIndex; - } - - return NSNotFound; -} - -- (MGLMapViewProxyAccessibilityElement *)mapViewProxyAccessibilityElement -{ - if ( ! _mapViewProxyAccessibilityElement) - { - _mapViewProxyAccessibilityElement = [[MGLMapViewProxyAccessibilityElement alloc] initWithAccessibilityContainer:self]; - } - return _mapViewProxyAccessibilityElement; -} - -- (void)accessibilityIncrement -{ - // Swipe up to zoom out. - [self accessibilityScaleBy:0.5]; -} - -- (void)accessibilityDecrement -{ - // Swipe down to zoom in. - [self accessibilityScaleBy:2]; -} - -- (void)accessibilityScaleBy:(double)scaleFactor -{ - CGPoint centerPoint = self.contentCenter; - if (self.userTrackingMode != MGLUserTrackingModeNone) - { - centerPoint = self.userLocationAnnotationViewCenter; - } - double newZoom = round(self.zoomLevel) + log2(scaleFactor); - self.mbglMap.jumpTo(mbgl::CameraOptions() - .withZoom(newZoom) - .withAnchor(mbgl::ScreenCoordinate { centerPoint.x, centerPoint.y }) - .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInset))); - [self unrotateIfNeededForGesture]; - - _accessibilityValueAnnouncementIsPending = YES; -} - -#pragma mark - Geography - - -+ (NSSet *)keyPathsForValuesAffectingCenterCoordinate -{ - return [NSSet setWithObjects:@"latitude", @"longitude", @"camera", nil]; -} - -- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated -{ - MGLLogDebug(@"Setting centerCoordinate: %@ animated: %@", MGLStringFromCLLocationCoordinate2D(coordinate), MGLStringFromBOOL(animated)); - [self setCenterCoordinate:coordinate zoomLevel:self.zoomLevel animated:animated]; -} - -- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate -{ - MGLLogDebug(@"Setting centerCoordinate: %@", MGLStringFromCLLocationCoordinate2D(centerCoordinate)); - [self setCenterCoordinate:centerCoordinate animated:NO]; -} - -- (CLLocationCoordinate2D)centerCoordinate -{ - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.contentInset); - return MGLLocationCoordinate2DFromLatLng(*self.mbglMap.getCameraOptions(padding).center); -} - -- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(double)zoomLevel animated:(BOOL)animated -{ - MGLLogDebug(@"Setting centerCoordinate: %@ zoomLevel: %f animated: %@", - MGLStringFromCLLocationCoordinate2D(centerCoordinate), - zoomLevel, - MGLStringFromBOOL(animated)); - [self setCenterCoordinate:centerCoordinate zoomLevel:zoomLevel direction:self.direction animated:animated]; -} - -- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(double)zoomLevel direction:(CLLocationDirection)direction animated:(BOOL)animated -{ - MGLLogDebug(@"Setting centerCoordinate: %@ zoomLevel: %f direction: %f animated: %@", - MGLStringFromCLLocationCoordinate2D(centerCoordinate), - zoomLevel, - direction, - MGLStringFromBOOL(animated)); - [self setCenterCoordinate:centerCoordinate zoomLevel:zoomLevel direction:direction animated:animated completionHandler:nil]; -} - -- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(double)zoomLevel direction:(CLLocationDirection)direction animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion -{ - MGLLogDebug(@"Setting centerCoordinate: %@ zoomLevel: %f direction: %f animated: %@ completionHandler: %@", - MGLStringFromCLLocationCoordinate2D(centerCoordinate), - zoomLevel, - direction, - MGLStringFromBOOL(animated), - completion); - self.userTrackingMode = MGLUserTrackingModeNone; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonProgrammatic; - - [self _setCenterCoordinate:centerCoordinate edgePadding:self.contentInset zoomLevel:zoomLevel direction:direction duration:animated ? MGLAnimationDuration : 0 animationTimingFunction:nil completionHandler:completion]; -} - -- (void)_setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate edgePadding:(UIEdgeInsets)insets zoomLevel:(double)zoomLevel direction:(CLLocationDirection)direction duration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function completionHandler:(nullable void (^)(void))completion -{ - if (!_mbglMap) - { - if (completion) - { - completion(); - } - return; - } - - mbgl::CameraOptions cameraOptions; - cameraOptions.center = MGLLatLngFromLocationCoordinate2D(centerCoordinate); - cameraOptions.padding = MGLEdgeInsetsFromNSEdgeInsets(insets); - cameraOptions.zoom = zoomLevel; - if (direction >= 0) - { - cameraOptions.bearing = direction; - } - - mbgl::AnimationOptions animationOptions; - if (duration) - { - animationOptions.duration.emplace(MGLDurationFromTimeInterval(duration)); - animationOptions.easing.emplace(MGLUnitBezierForMediaTimingFunction(function)); - } - - dispatch_block_t pendingCompletion; - - if (completion) - { - __weak __typeof__(self) weakSelf = self; - - pendingCompletion = ^{ - if (![weakSelf scheduleTransitionCompletion:completion]) - { - completion(); - } - }; - - animationOptions.transitionFinishFn = [pendingCompletion]() { - // Must run asynchronously after the transition is completely over. - // Otherwise, a call to -setCenterCoordinate: within the completion - // handler would reenter the completion handler’s caller. - - dispatch_async(dispatch_get_main_queue(), pendingCompletion); - }; - } - - MGLMapCamera *camera = [self cameraForCameraOptions:cameraOptions]; - if ([self.camera isEqualToMapCamera:camera] && UIEdgeInsetsEqualToEdgeInsets(_contentInset, insets)) - { - if (pendingCompletion) - { - [self animateWithDelay:duration animations:pendingCompletion]; - } - return; - } - - [self cancelTransitions]; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonProgrammatic; - - self.mbglMap.easeTo(cameraOptions, animationOptions); -} - -+ (NSSet *)keyPathsForValuesAffectingZoomLevel -{ - return [NSSet setWithObject:@"camera"]; -} - -- (double)zoomLevel -{ - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.contentInset); - return *self.mbglMap.getCameraOptions(padding).zoom; -} - -- (void)setZoomLevel:(double)zoomLevel -{ - MGLLogDebug(@"Setting zoomLevel: %f", zoomLevel); - [self setZoomLevel:zoomLevel animated:NO]; -} - -- (void)setZoomLevel:(double)zoomLevel animated:(BOOL)animated -{ - MGLLogDebug(@"Setting zoomLevel: %f animated: %@", zoomLevel, MGLStringFromBOOL(animated)); - if (zoomLevel == self.zoomLevel) return; - [self cancelTransitions]; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonProgrammatic; - - CGFloat duration = animated ? MGLAnimationDuration : 0; - - self.mbglMap.easeTo(mbgl::CameraOptions() - .withZoom(zoomLevel) - .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInset)), - MGLDurationFromTimeInterval(duration)); -} - -- (void)setMinimumZoomLevel:(double)minimumZoomLevel -{ - MGLLogDebug(@"Setting minimumZoomLevel: %f", minimumZoomLevel); - self.mbglMap.setBounds(mbgl::BoundOptions().withMinZoom(minimumZoomLevel)); -} - -- (double)minimumZoomLevel -{ - return *self.mbglMap.getBounds().minZoom; -} - -- (void)setMaximumZoomLevel:(double)maximumZoomLevel -{ - MGLLogDebug(@"Setting maximumZoomLevel: %f", maximumZoomLevel); - self.mbglMap.setBounds(mbgl::BoundOptions().withMaxZoom(maximumZoomLevel)); -} - -- (double)maximumZoomLevel -{ - return *self.mbglMap.getBounds().maxZoom; -} - -- (MGLCoordinateBounds)visibleCoordinateBounds -{ - return [self convertRect:self.bounds toCoordinateBoundsFromView:self]; -} - -- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds -{ - [self setVisibleCoordinateBounds:bounds animated:NO]; -} - -- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds animated:(BOOL)animated -{ - [self setVisibleCoordinateBounds:bounds edgePadding:UIEdgeInsetsZero animated:animated completionHandler:nil]; -} - -- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated -{ - [self setVisibleCoordinateBounds:bounds edgePadding:insets animated:animated completionHandler:nil]; -} - -- (void)setVisibleCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion -{ - MGLLogDebug(@"Setting visibleCoordinateBounds: %@ edgePadding: %@ animated: %@", - MGLStringFromCoordinateBounds(bounds), - NSStringFromUIEdgeInsets(insets), - MGLStringFromBOOL(animated)); - CLLocationCoordinate2D coordinates[] = { - {bounds.ne.latitude, bounds.sw.longitude}, - bounds.sw, - {bounds.sw.latitude, bounds.ne.longitude}, - bounds.ne, - }; - [self setVisibleCoordinates:coordinates - count:sizeof(coordinates) / sizeof(coordinates[0]) - edgePadding:insets - direction:self.direction - duration:animated ? MGLAnimationDuration : 0 - animationTimingFunction:nil - completionHandler:completion]; -} - -- (void)setVisibleCoordinates:(const CLLocationCoordinate2D *)coordinates count:(NSUInteger)count edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated -{ - MGLLogDebug(@"Setting: %lu coordinates edgePadding: %@ animated: %@", - count, - NSStringFromUIEdgeInsets(insets), - MGLStringFromBOOL(animated)); - [self setVisibleCoordinates:coordinates count:count edgePadding:insets direction:self.direction duration:animated ? MGLAnimationDuration : 0 animationTimingFunction:nil]; -} - -- (void)setVisibleCoordinates:(const CLLocationCoordinate2D *)coordinates count:(NSUInteger)count edgePadding:(UIEdgeInsets)insets direction:(CLLocationDirection)direction duration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function { - MGLLogDebug(@"Setting: %lu coordinates edgePadding: %@ direction: %f duration: %f animationTimingFunction: %@", - count, - NSStringFromUIEdgeInsets(insets), - direction, - duration, - function); - [self setVisibleCoordinates:coordinates count:count edgePadding:insets direction:direction duration:duration animationTimingFunction:function completionHandler:NULL]; -} - -- (void)setVisibleCoordinates:(const CLLocationCoordinate2D *)coordinates count:(NSUInteger)count edgePadding:(UIEdgeInsets)insets direction:(CLLocationDirection)direction duration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function completionHandler:(nullable void (^)(void))completion -{ - MGLLogDebug(@"Setting: %lu coordinates edgePadding: %@ direction: %f duration: %f animationTimingFunction: %@ completionHandler: %@", count, NSStringFromUIEdgeInsets(insets), direction, duration, function, completion); - self.userTrackingMode = MGLUserTrackingModeNone; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonProgrammatic; - - [self _setVisibleCoordinates:coordinates count:count edgePadding:insets direction:direction duration:duration animationTimingFunction:function completionHandler:completion]; -} - -- (void)_setVisibleCoordinates:(const CLLocationCoordinate2D *)coordinates count:(NSUInteger)count edgePadding:(UIEdgeInsets)insets direction:(CLLocationDirection)direction duration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function completionHandler:(nullable void (^)(void))completion -{ - if (!_mbglMap) - { - if (completion) - { - completion(); - } - return; - } - - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(insets); - padding += MGLEdgeInsetsFromNSEdgeInsets(self.contentInset); - std::vector latLngs; - latLngs.reserve(count); - for (NSUInteger i = 0; i < count; i++) - { - latLngs.push_back({coordinates[i].latitude, coordinates[i].longitude}); - } - - CLLocationDirection cameraDirection = direction >= 0 ? direction : self.direction; - - mbgl::CameraOptions cameraOptions = self.mbglMap.cameraForLatLngs(latLngs, padding, cameraDirection); - - mbgl::AnimationOptions animationOptions; - if (duration > 0) - { - animationOptions.duration.emplace(MGLDurationFromTimeInterval(duration)); - animationOptions.easing.emplace(MGLUnitBezierForMediaTimingFunction(function)); - } - - dispatch_block_t pendingCompletion; - - if (completion) - { - __weak __typeof__(self) weakSelf = self; - - pendingCompletion = ^{ - if (![weakSelf scheduleTransitionCompletion:completion]) - { - completion(); - } - }; - - animationOptions.transitionFinishFn = [pendingCompletion]() { - dispatch_async(dispatch_get_main_queue(), pendingCompletion); - }; - } - - // Padding is baked in adjusted camera center (in cameraForLatLngs) and - // cameraOptions.padding at this point is (0, 0, 0, 0) and we don't need to - // check if cameraOptions.contentInsets are equal to contentInsets. - MGLMapCamera *camera = [self cameraForCameraOptions:cameraOptions]; - if ([self.camera isEqualToMapCamera:camera]) - { - if (pendingCompletion) - { - [self animateWithDelay:duration animations:pendingCompletion]; - } - return; - } - - [self willChangeValueForKey:@"visibleCoordinateBounds"]; - [self cancelTransitions]; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonProgrammatic; - - self.mbglMap.easeTo(cameraOptions, animationOptions); - [self didChangeValueForKey:@"visibleCoordinateBounds"]; -} - -+ (NSSet *)keyPathsForValuesAffectingDirection -{ - return [NSSet setWithObject:@"camera"]; -} - -- (CLLocationDirection)direction -{ - return mbgl::util::wrap(*self.mbglMap.getCameraOptions().bearing, 0., 360.); -} - -- (void)setDirection:(CLLocationDirection)direction animated:(BOOL)animated -{ - MGLLogDebug(@"Setting direction: %f animated: %@", direction, MGLStringFromBOOL(animated)); - if ( ! animated && ! self.rotationAllowed) return; - - if (self.userTrackingMode == MGLUserTrackingModeFollowWithHeading || - self.userTrackingMode == MGLUserTrackingModeFollowWithCourse) - { - self.userTrackingMode = MGLUserTrackingModeFollow; - } - - [self _setDirection:direction animated:animated]; -} - -- (void)_setDirection:(CLLocationDirection)direction animated:(BOOL)animated -{ - if (!_mbglMap) - { - return; - } - - if (direction == self.direction) return; - [self cancelTransitions]; - - CGFloat duration = animated ? MGLAnimationDuration : 0; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonProgrammatic; - - if (self.userTrackingMode == MGLUserTrackingModeNone) - { - self.mbglMap.easeTo(mbgl::CameraOptions() - .withBearing(direction) - .withPadding(MGLEdgeInsetsFromNSEdgeInsets(self.contentInset)), - MGLDurationFromTimeInterval(duration)); - } - else - { - CGPoint anchor = self.userLocationAnnotationViewCenter; - self.mbglMap.easeTo(mbgl::CameraOptions() - .withBearing(direction) - .withAnchor(mbgl::ScreenCoordinate { anchor.x, anchor.y }), - MGLDurationFromTimeInterval(duration)); - } -} - -- (void)setDirection:(CLLocationDirection)direction -{ - MGLLogDebug(@"Setting direction: %f", direction); - [self setDirection:direction animated:NO]; -} - -+ (NSSet *)keyPathsForValuesAffectingPitch -{ - return [NSSet setWithObject:@"camera"]; -} - -+ (NSSet *)keyPathsForValuesAffectingCamera -{ - return [NSSet setWithObjects:@"longitude", @"latitude", @"centerCoordinate", @"zoomLevel", @"direction", nil]; -} - -- (MGLMapCamera *)camera -{ - if (!_mbglMap) - { - NSAssert(self.terminated, @"_mbglMap should only be unavailable during app termination"); - return self.residualCamera; - } - - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.contentInset); - return [self cameraForCameraOptions:self.mbglMap.getCameraOptions(padding)]; -} - -- (void)setCamera:(MGLMapCamera *)camera -{ - MGLLogDebug(@"Setting camera: %@", camera); - [self setCamera:camera animated:NO]; -} - -- (void)setCamera:(MGLMapCamera *)camera animated:(BOOL)animated -{ - MGLLogDebug(@"Setting camera: %@ animated: %@", camera, MGLStringFromBOOL(animated)); - [self setCamera:camera withDuration:animated ? MGLAnimationDuration : 0 animationTimingFunction:nil]; -} - -- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function -{ - MGLLogDebug(@"Setting camera: %@ duration: %f animationTimingFunction: %@", camera, duration, function); - [self setCamera:camera withDuration:duration animationTimingFunction:function completionHandler:nil]; -} - -- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function completionHandler:(nullable void (^)(void))completion -{ - MGLLogDebug(@"Setting camera: %@ duration: %f animationTimingFunction: %@ completionHandler: %@", camera, duration, function, completion); - [self setCamera:camera withDuration:duration animationTimingFunction:function edgePadding:UIEdgeInsetsZero completionHandler:completion]; -} - -- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function edgePadding:(UIEdgeInsets)edgePadding completionHandler:(nullable void (^)(void))completion { - if (!_mbglMap) - { - if (completion) - { - completion(); - } - return; - } - - MGLLogDebug(@"Setting camera: %@ duration: %f animationTimingFunction: %@ edgePadding: %@ completionHandler: %@", camera, duration, function, NSStringFromUIEdgeInsets(edgePadding), completion); - - edgePadding = MGLEdgeInsetsInsetEdgeInset(edgePadding, self.contentInset); - - mbgl::AnimationOptions animationOptions; - if (duration > 0) - { - animationOptions.duration.emplace(MGLDurationFromTimeInterval(duration)); - animationOptions.easing.emplace(MGLUnitBezierForMediaTimingFunction(function)); - } - - dispatch_block_t pendingCompletion; - - if (completion) - { - __weak __typeof__(self) weakSelf = self; - - pendingCompletion = ^{ - if (![weakSelf scheduleTransitionCompletion:completion]) - { - completion(); - } - }; - - animationOptions.transitionFinishFn = [pendingCompletion]() { - dispatch_async(dispatch_get_main_queue(), pendingCompletion); - }; - } - - if ([self.camera isEqualToMapCamera:camera] && UIEdgeInsetsEqualToEdgeInsets(_contentInset, edgePadding)) - { - if (pendingCompletion) - { - [self animateWithDelay:duration animations:pendingCompletion]; - } - return; - } - - [self willChangeValueForKey:@"camera"]; - [self cancelTransitions]; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonProgrammatic; - - mbgl::CameraOptions cameraOptions = [self cameraOptionsObjectForAnimatingToCamera:camera edgePadding:edgePadding]; - self.mbglMap.easeTo(cameraOptions, animationOptions); - [self didChangeValueForKey:@"camera"]; -} - -- (void)flyToCamera:(MGLMapCamera *)camera completionHandler:(nullable void (^)(void))completion -{ - MGLLogDebug(@"Setting flyToCamera: %@ completionHandler: %@", camera, completion); - [self flyToCamera:camera withDuration:-1 completionHandler:completion]; -} - -- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration completionHandler:(nullable void (^)(void))completion -{ - MGLLogDebug(@"Setting flyToCamera: %@ withDuration: %f completionHandler: %@", camera, duration, completion); - [self flyToCamera:camera withDuration:duration peakAltitude:-1 completionHandler:completion]; -} - -- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration peakAltitude:(CLLocationDistance)peakAltitude completionHandler:(nullable void (^)(void))completion -{ - MGLLogDebug(@"Setting flyToCamera: %@ withDuration: %f peakAltitude: %f completionHandler: %@", camera, duration, peakAltitude, completion); - [self _flyToCamera:camera edgePadding:self.contentInset withDuration:duration peakAltitude:peakAltitude completionHandler:completion]; -} - -- (void)_flyToCamera:(MGLMapCamera *)camera edgePadding:(UIEdgeInsets)insets withDuration:(NSTimeInterval)duration peakAltitude:(CLLocationDistance)peakAltitude completionHandler:(nullable void (^)(void))completion -{ - if (!_mbglMap) - { - if (completion) - { - completion(); - } - return; - } - - mbgl::AnimationOptions animationOptions; - if (duration >= 0) - { - animationOptions.duration = MGLDurationFromTimeInterval(duration); - } - if (peakAltitude >= 0) - { - CLLocationDegrees peakLatitude = (self.centerCoordinate.latitude + camera.centerCoordinate.latitude) / 2; - CLLocationDegrees peakPitch = (self.camera.pitch + camera.pitch) / 2; - animationOptions.minZoom = MGLZoomLevelForAltitude(peakAltitude, peakPitch, - peakLatitude, self.frame.size); - } - - dispatch_block_t pendingCompletion; - - if (completion) - { - __weak __typeof__(self) weakSelf = self; - - pendingCompletion = ^{ - if (![weakSelf scheduleTransitionCompletion:completion]) - { - completion(); - } - }; - - animationOptions.transitionFinishFn = [pendingCompletion]() { - dispatch_async(dispatch_get_main_queue(), pendingCompletion); - }; - } - - if ([self.camera isEqualToMapCamera:camera] && UIEdgeInsetsEqualToEdgeInsets(_contentInset, insets)) - { - if (pendingCompletion) - { - [self animateWithDelay:duration animations:pendingCompletion]; - } - return; - } - - [self willChangeValueForKey:@"camera"]; - [self cancelTransitions]; - - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonProgrammatic; - - mbgl::CameraOptions cameraOptions = [self cameraOptionsObjectForAnimatingToCamera:camera edgePadding:insets]; - self.mbglMap.flyTo(cameraOptions, animationOptions); - [self didChangeValueForKey:@"camera"]; -} - -- (void)cancelTransitions { - if (!_mbglMap) - { - return; - } - self.cameraChangeReasonBitmask |= MGLCameraChangeReasonTransitionCancelled; - self.mbglMap.cancelTransitions(); - self.cameraChangeReasonBitmask &= ~MGLCameraChangeReasonTransitionCancelled; -} - -- (MGLMapCamera *)cameraThatFitsCoordinateBounds:(MGLCoordinateBounds)bounds -{ - return [self cameraThatFitsCoordinateBounds:bounds edgePadding:UIEdgeInsetsZero]; -} - -- (MGLMapCamera *)cameraThatFitsCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(UIEdgeInsets)insets -{ - if (!_mbglMap) - { - return self.residualCamera; - } - - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(insets); - padding += MGLEdgeInsetsFromNSEdgeInsets(self.contentInset); - mbgl::CameraOptions cameraOptions = self.mbglMap.cameraForLatLngBounds(MGLLatLngBoundsFromCoordinateBounds(bounds), padding); - return [self cameraForCameraOptions:cameraOptions]; -} - -- (MGLMapCamera *)camera:(MGLMapCamera *)camera fittingCoordinateBounds:(MGLCoordinateBounds)bounds edgePadding:(UIEdgeInsets)insets -{ - if (!_mbglMap) - { - return self.residualCamera; - } - - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(insets); - padding += MGLEdgeInsetsFromNSEdgeInsets(self.contentInset); - - MGLMapCamera *currentCamera = self.camera; - CGFloat pitch = camera.pitch < 0 ? currentCamera.pitch : camera.pitch; - CLLocationDirection direction = camera.heading < 0 ? currentCamera.heading : camera.heading; - - mbgl::CameraOptions cameraOptions = self.mbglMap.cameraForLatLngBounds(MGLLatLngBoundsFromCoordinateBounds(bounds), padding, direction, pitch); - return [self cameraForCameraOptions:cameraOptions]; -} - -- (MGLMapCamera *)camera:(MGLMapCamera *)camera fittingShape:(MGLShape *)shape edgePadding:(UIEdgeInsets)insets { - if (!_mbglMap) - { - return self.residualCamera; - } - - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(insets); - padding += MGLEdgeInsetsFromNSEdgeInsets(self.contentInset); - - MGLMapCamera *currentCamera = self.camera; - CGFloat pitch = camera.pitch < 0 ? currentCamera.pitch : camera.pitch; - CLLocationDirection direction = camera.heading < 0 ? currentCamera.heading : camera.heading; - - mbgl::CameraOptions cameraOptions = self.mbglMap.cameraForGeometry([shape geometryObject], padding, direction, pitch); - - return [self cameraForCameraOptions: cameraOptions]; -} - -- (MGLMapCamera *)cameraThatFitsShape:(MGLShape *)shape direction:(CLLocationDirection)direction edgePadding:(UIEdgeInsets)insets { - if (!_mbglMap) - { - return self.residualCamera; - } - - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(insets); - padding += MGLEdgeInsetsFromNSEdgeInsets(self.contentInset); - - mbgl::CameraOptions cameraOptions = self.mbglMap.cameraForGeometry([shape geometryObject], padding, direction); - - return [self cameraForCameraOptions:cameraOptions]; -} - -- (MGLMapCamera *)cameraForCameraOptions:(const mbgl::CameraOptions &)cameraOptions -{ - if (!_mbglMap) - { - return self.residualCamera; - } - - mbgl::CameraOptions mapCamera = self.mbglMap.getCameraOptions(); - CLLocationCoordinate2D centerCoordinate = MGLLocationCoordinate2DFromLatLng(cameraOptions.center ? *cameraOptions.center : *mapCamera.center); - double zoomLevel = cameraOptions.zoom ? *cameraOptions.zoom : self.zoomLevel; - CLLocationDirection direction = cameraOptions.bearing ? mbgl::util::wrap(*cameraOptions.bearing, 0., 360.) : self.direction; - CGFloat pitch = cameraOptions.pitch ? *cameraOptions.pitch : *mapCamera.pitch; - CLLocationDistance altitude = MGLAltitudeForZoomLevel(zoomLevel, pitch, centerCoordinate.latitude, self.frame.size); - return [MGLMapCamera cameraLookingAtCenterCoordinate:centerCoordinate altitude:altitude pitch:pitch heading:direction]; -} - -/// Returns a CameraOptions object that specifies parameters for animating to -/// the given camera. -- (mbgl::CameraOptions)cameraOptionsObjectForAnimatingToCamera:(MGLMapCamera *)camera edgePadding:(UIEdgeInsets)insets -{ - mbgl::CameraOptions options; - if (CLLocationCoordinate2DIsValid(camera.centerCoordinate)) - { - options.center = MGLLatLngFromLocationCoordinate2D(camera.centerCoordinate); - } - options.padding = MGLEdgeInsetsFromNSEdgeInsets(insets); - options.zoom = MGLZoomLevelForAltitude(camera.altitude, camera.pitch, - camera.centerCoordinate.latitude, - self.frame.size); - if (camera.heading >= 0) - { - options.bearing = camera.heading; - } - if (camera.pitch >= 0) - { - options.pitch = camera.pitch; - } - return options; -} - -- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(nullable UIView *)view -{ - return MGLLocationCoordinate2DFromLatLng([self convertPoint:point toLatLngFromView:view]); -} - -/// Converts a point in the view’s coordinate system to a geographic coordinate. -- (mbgl::LatLng)convertPoint:(CGPoint)point toLatLngFromView:(nullable UIView *)view -{ - CGPoint convertedPoint = [self convertPoint:point fromView:view]; - return self.mbglMap.latLngForPixel(mbgl::ScreenCoordinate(convertedPoint.x, convertedPoint.y)).wrapped(); -} - -- (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(nullable UIView *)view -{ - if ( ! CLLocationCoordinate2DIsValid(coordinate)) - { - return CGPointMake(NAN, NAN); - } - return [self convertLatLng:MGLLatLngFromLocationCoordinate2D(coordinate) toPointToView:view]; -} - -/// Converts a geographic coordinate to a point in the view’s coordinate system. -- (CGPoint)convertLatLng:(mbgl::LatLng)latLng toPointToView:(nullable UIView *)view -{ - mbgl::ScreenCoordinate pixel = self.mbglMap.pixelForLatLng(latLng); - return [self convertPoint:CGPointMake(pixel.x, pixel.y) toView:view]; -} - -- (MGLCoordinateBounds)convertRect:(CGRect)rect toCoordinateBoundsFromView:(nullable UIView *)view -{ - return MGLCoordinateBoundsFromLatLngBounds([self convertRect:rect toLatLngBoundsFromView:view]); -} - -- (CGRect)convertCoordinateBounds:(MGLCoordinateBounds)bounds toRectToView:(nullable UIView *)view -{ - return [self convertLatLngBounds:MGLLatLngBoundsFromCoordinateBounds(bounds) toRectToView:view]; -} - -/// Converts a geographic bounding box to a rectangle in the view’s coordinate -/// system. -- (CGRect)convertLatLngBounds:(mbgl::LatLngBounds)bounds toRectToView:(nullable UIView *)view { - auto northwest = bounds.northwest(); - auto northeast = bounds.northeast(); - auto southwest = bounds.southwest(); - auto southeast = bounds.southeast(); - - auto center = [self convertPoint:{ CGRectGetMidX(view.bounds), CGRectGetMidY(view.bounds) } toLatLngFromView:view]; - - // Extend bounds to account for the antimeridian - northwest.unwrapForShortestPath(center); - northeast.unwrapForShortestPath(center); - southwest.unwrapForShortestPath(center); - southeast.unwrapForShortestPath(center); - - auto correctedLatLngBounds = mbgl::LatLngBounds::empty(); - correctedLatLngBounds.extend(northwest); - correctedLatLngBounds.extend(northeast); - correctedLatLngBounds.extend(southwest); - correctedLatLngBounds.extend(southeast); - - CGRect rect = { [self convertLatLng:correctedLatLngBounds.southwest() toPointToView:view], CGSizeZero }; - rect = MGLExtendRect(rect, [self convertLatLng:correctedLatLngBounds.northeast() toPointToView:view]); - return rect; -} - -/// Converts a rectangle in the given view’s coordinate system to a geographic -/// bounding box. -- (mbgl::LatLngBounds)convertRect:(CGRect)rect toLatLngBoundsFromView:(nullable UIView *)view -{ - auto bounds = mbgl::LatLngBounds::empty(); - auto topLeft = [self convertPoint:{ CGRectGetMinX(rect), CGRectGetMinY(rect) } toLatLngFromView:view]; - auto topRight = [self convertPoint:{ CGRectGetMaxX(rect), CGRectGetMinY(rect) } toLatLngFromView:view]; - auto bottomRight = [self convertPoint:{ CGRectGetMaxX(rect), CGRectGetMaxY(rect) } toLatLngFromView:view]; - auto bottomLeft = [self convertPoint:{ CGRectGetMinX(rect), CGRectGetMaxY(rect) } toLatLngFromView:view]; - - // If the bounds straddles the antimeridian, unwrap it so that one side - // extends beyond ±180° longitude. - auto center = [self convertPoint:{ CGRectGetMidX(rect), CGRectGetMidY(rect) } toLatLngFromView:view]; - topLeft.unwrapForShortestPath(center); - topRight.unwrapForShortestPath(center); - bottomRight.unwrapForShortestPath(center); - bottomLeft.unwrapForShortestPath(center); - - bounds.extend(topLeft); - bounds.extend(topRight); - bounds.extend(bottomRight); - bounds.extend(bottomLeft); - - return bounds; -} - -- (CLLocationDistance)metersPerPointAtLatitude:(CLLocationDegrees)latitude -{ - return mbgl::Projection::getMetersPerPixelAtLatitude(latitude, self.zoomLevel); -} - -#pragma mark - Camera Change Reason - - -- (void)resetCameraChangeReason -{ - self.cameraChangeReasonBitmask = MGLCameraChangeReasonNone; -} - -#pragma mark - Annotations - - -- (nullable NSArray> *)annotations -{ - if (_annotationContextsByAnnotationTag.empty()) - { - return nil; - } - - // Map all the annotation tags to the annotations themselves. - std::vector> annotations; - std::transform(_annotationContextsByAnnotationTag.begin(), - _annotationContextsByAnnotationTag.end(), - std::back_inserter(annotations), - ^ id (const std::pair &pair) - { - return pair.second.annotation; - }); - - annotations.erase(std::remove_if(annotations.begin(), annotations.end(), - [](const id annotation) { return annotation == nullptr; }), - annotations.end()); - - return [NSArray arrayWithObjects:&annotations[0] count:annotations.size()]; -} - -- (nullable NSArray> *)visibleAnnotations -{ - return [self visibleAnnotationsInRect:self.bounds]; -} - -- (nullable NSArray> *)visibleAnnotationsInRect:(CGRect)rect -{ - if (_annotationContextsByAnnotationTag.empty()) - { - return nil; - } - - std::vector annotationTags = [self annotationTagsInRect:rect]; - std::vector shapeAnnotationTags = [self shapeAnnotationTagsInRect:rect]; - - if (shapeAnnotationTags.size()) { - annotationTags.insert(annotationTags.end(), shapeAnnotationTags.begin(), shapeAnnotationTags.end()); - } - - if (annotationTags.size()) - { - NSMutableArray *annotations = [NSMutableArray arrayWithCapacity:annotationTags.size()]; - - for (auto const& annotationTag: annotationTags) - { - if (!_annotationContextsByAnnotationTag.count(annotationTag) || - annotationTag == MGLAnnotationTagNotFound) - { - continue; - } - - MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag.at(annotationTag); - MGLAssert(annotationContext.annotation, @"Missing annotation for tag %llu.", annotationTag); - if (annotationContext.annotation) - { - [annotations addObject:annotationContext.annotation]; - } - } - - return [annotations copy]; - } - - return nil; -} - -/// Returns the annotation assigned the given tag. Cheap. -- (id )annotationWithTag:(MGLAnnotationTag)tag -{ - if ( ! _annotationContextsByAnnotationTag.count(tag) || - tag == MGLAnnotationTagNotFound) { - return nil; - } - - MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(tag); - return annotationContext.annotation; -} - -/// Returns the annotation tag assigned to the given annotation. -- (MGLAnnotationTag)annotationTagForAnnotation:(id )annotation -{ - if ( ! annotation || annotation == self.userLocation - || _annotationTagsByAnnotation.count(annotation) == 0) - { - return MGLAnnotationTagNotFound; - } - - return _annotationTagsByAnnotation.at(annotation); -} - -- (void)addAnnotation:(id )annotation -{ - MGLLogDebug(@"Adding annotation: %@", annotation); - if ( ! annotation) return; - - // The core bulk add API is efficient with respect to indexing and - // screen refreshes, thus we should defer to it even for individual adds. - // - [self addAnnotations:@[ annotation ]]; -} - -- (void)addAnnotations:(NSArray> *)annotations -{ - MGLLogDebug(@"Adding: %lu annotations", annotations.count); - if ( ! annotations) return; - [self willChangeValueForKey:@"annotations"]; - - NSMutableDictionary *annotationImagesForAnnotation = [NSMutableDictionary dictionary]; - NSMutableDictionary *annotationViewsForAnnotation = [NSMutableDictionary dictionary]; - - BOOL delegateImplementsViewForAnnotation = [self.delegate respondsToSelector:@selector(mapView:viewForAnnotation:)]; - BOOL delegateImplementsImageForPoint = [self.delegate respondsToSelector:@selector(mapView:imageForAnnotation:)]; - - NSMutableArray *newAnnotationViews = [[NSMutableArray alloc] initWithCapacity:annotations.count]; - - for (id annotation in annotations) - { - MGLAssert([annotation conformsToProtocol:@protocol(MGLAnnotation)], @"annotation should conform to MGLAnnotation"); - - // adding the same annotation object twice is a no-op - if (_annotationTagsByAnnotation.count(annotation) != 0) - { - continue; - } - - if ([annotation isKindOfClass:[MGLMultiPoint class]]) - { - // The polyline or polygon knows how to style itself (with the map view’s help). - MGLMultiPoint *multiPoint = (MGLMultiPoint *)annotation; - if (!multiPoint.pointCount) { - continue; - } - - _isChangingAnnotationLayers = YES; - MGLAnnotationTag annotationTag = self.mbglMap.addAnnotation([multiPoint annotationObjectWithDelegate:self]); - MGLAnnotationContext context; - context.annotation = annotation; - _annotationContextsByAnnotationTag[annotationTag] = context; - _annotationTagsByAnnotation[annotation] = annotationTag; - - [(NSObject *)annotation addObserver:self forKeyPath:@"coordinates" options:0 context:(void *)(NSUInteger)annotationTag]; - } - else if ( ! [annotation isKindOfClass:[MGLMultiPolyline class]] - && ![annotation isKindOfClass:[MGLMultiPolygon class]] - && ![annotation isKindOfClass:[MGLShapeCollection class]] - && ![annotation isKindOfClass:[MGLPointCollection class]]) - { - MGLAnnotationView *annotationView; - NSString *symbolName; - NSValue *annotationValue = [NSValue valueWithNonretainedObject:annotation]; - - if (delegateImplementsViewForAnnotation) - { - annotationView = [self annotationViewForAnnotation:annotation]; - if (annotationView) - { - annotationViewsForAnnotation[annotationValue] = annotationView; - annotationView.annotation = annotation; - annotationView.center = MGLPointRounded([self convertCoordinate:annotation.coordinate toPointToView:self]); - [newAnnotationViews addObject:annotationView]; - - MGLAnnotationImage *annotationImage = self.invisibleAnnotationImage; - symbolName = annotationImage.styleIconIdentifier; - annotationImagesForAnnotation[annotationValue] = annotationImage; - if ( ! self.annotationImagesByIdentifier[annotationImage.reuseIdentifier]) - { - [self installAnnotationImage:annotationImage]; - } - } - } - - if ( ! annotationView) { - MGLAnnotationImage *annotationImage; - - if (delegateImplementsImageForPoint) - { - annotationImage = [self.delegate mapView:self imageForAnnotation:annotation]; - } - if ( ! annotationImage) - { - annotationImage = [self dequeueReusableAnnotationImageWithIdentifier:MGLDefaultStyleMarkerSymbolName]; - } - if ( ! annotationImage) - { - annotationImage = self.defaultAnnotationImage; - } - - symbolName = annotationImage.styleIconIdentifier; - - if ( ! symbolName) - { - symbolName = [MGLAnnotationSpritePrefix stringByAppendingString:annotationImage.reuseIdentifier]; - annotationImage.styleIconIdentifier = symbolName; - } - if ( ! self.annotationImagesByIdentifier[annotationImage.reuseIdentifier]) - { - [self installAnnotationImage:annotationImage]; - } - - annotationImagesForAnnotation[annotationValue] = annotationImage; - } - - MGLAnnotationTag annotationTag = self.mbglMap.addAnnotation(mbgl::SymbolAnnotation { - MGLPointFromLocationCoordinate2D(annotation.coordinate), - symbolName.UTF8String - }); - - MGLAnnotationContext context; - context.annotation = annotation; - MGLAnnotationImage *annotationImage = annotationImagesForAnnotation[annotationValue]; - context.imageReuseIdentifier = annotationImage.reuseIdentifier; - - if (annotationView) { - context.annotationView = annotationView; - context.viewReuseIdentifier = annotationView.reuseIdentifier; - } - - _annotationTagsByAnnotation[annotation] = annotationTag; - _annotationContextsByAnnotationTag[annotationTag] = context; - - if ([annotation isKindOfClass:[NSObject class]]) { - MGLAssert(![annotation isKindOfClass:[MGLMultiPoint class]], @"Point annotation should not be MGLMultiPoint."); - [(NSObject *)annotation addObserver:self forKeyPath:@"coordinate" options:0 context:(void *)(NSUInteger)annotationTag]; - } - } - } - - [self updateAnnotationContainerViewWithAnnotationViews:newAnnotationViews]; - - [self didChangeValueForKey:@"annotations"]; - if (_isChangingAnnotationLayers) - { - [self.style willChangeValueForKey:@"layers"]; - } - - if ([self.delegate respondsToSelector:@selector(mapView:didAddAnnotationViews:)]) - { - [self.delegate mapView:self didAddAnnotationViews:newAnnotationViews]; - } - - UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); -} - -- (void)updateAnnotationContainerViewWithAnnotationViews:(NSArray *)annotationViews -{ - if (annotationViews.count == 0) return; - - MGLAnnotationContainerView *newAnnotationContainerView; - if (self.annotationContainerView) - { - // reload any previously added views - newAnnotationContainerView = [MGLAnnotationContainerView annotationContainerViewWithAnnotationContainerView:self.annotationContainerView]; - [self.annotationContainerView removeFromSuperview]; - } - else - { - newAnnotationContainerView = [[MGLAnnotationContainerView alloc] initWithFrame:self.bounds]; - } - newAnnotationContainerView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - newAnnotationContainerView.contentMode = UIViewContentModeCenter; - [newAnnotationContainerView addSubviews:annotationViews]; - [_mbglView->getView() insertSubview:newAnnotationContainerView atIndex:0]; - self.annotationContainerView = newAnnotationContainerView; - - [self updatePresentsWithTransaction]; -} - -/// Initialize and return a default annotation image that depicts a round pin -/// rising from the center, with a shadow slightly below center. The alignment -/// rect therefore excludes the bottom half. -- (MGLAnnotationImage *)defaultAnnotationImage -{ - UIImage *image = [UIImage mgl_resourceImageNamed:MGLDefaultStyleMarkerSymbolName]; - image = [image imageWithAlignmentRectInsets: - UIEdgeInsetsMake(0, 0, image.size.height / 2, 0)]; - MGLAnnotationImage *annotationImage = [MGLAnnotationImage annotationImageWithImage:image - reuseIdentifier:MGLDefaultStyleMarkerSymbolName]; - annotationImage.styleIconIdentifier = [MGLAnnotationSpritePrefix stringByAppendingString:annotationImage.reuseIdentifier]; - return annotationImage; -} - -- (MGLAnnotationImage *)invisibleAnnotationImage -{ - MGLAnnotationImage *annotationImage = [self dequeueReusableAnnotationImageWithIdentifier:MGLInvisibleStyleMarkerSymbolName]; - - if (!annotationImage) - { - UIGraphicsBeginImageContext(CGSizeMake(1, 1)); - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - annotationImage = [MGLAnnotationImage annotationImageWithImage:image - reuseIdentifier:MGLInvisibleStyleMarkerSymbolName]; - annotationImage.styleIconIdentifier = [MGLAnnotationSpritePrefix stringByAppendingString:annotationImage.reuseIdentifier]; - } - - return annotationImage; -} - -- (MGLAnnotationView *)annotationViewForAnnotation:(id)annotation -{ - MGLAnnotationView *annotationView = [self.delegate mapView:self viewForAnnotation:annotation]; - - if (annotationView) - { - // Make sure that the annotation views are selected/deselected correctly because - // annotations are not dismissed when they move out of the visible bounds - BOOL isViewForSelectedAnnotation = self.selectedAnnotation == annotation; - [annotationView setSelected:isViewForSelectedAnnotation]; - - annotationView.annotation = annotation; - annotationView.mapView = self; - CGRect bounds = UIEdgeInsetsInsetRect({ CGPointZero, annotationView.frame.size }, annotationView.alignmentRectInsets); - - // Take any offset into consideration - CGFloat adjustedAnnotationWidth = CGRectGetWidth(bounds) + fabs(annotationView.centerOffset.dx); - CGFloat adjustedAnnotationHeight = CGRectGetHeight(bounds) + fabs(annotationView.centerOffset.dx); - - _largestAnnotationViewSize = CGSizeMake(MAX(_largestAnnotationViewSize.width, adjustedAnnotationWidth), - MAX(_largestAnnotationViewSize.height, adjustedAnnotationHeight)); - - _unionedAnnotationRepresentationSize = CGSizeMake(MAX(_unionedAnnotationRepresentationSize.width, _largestAnnotationViewSize.width), - MAX(_unionedAnnotationRepresentationSize.height, _largestAnnotationViewSize.height)); - } - - return annotationView; -} - -- (nullable MGLAnnotationView *)viewForAnnotation:(id)annotation -{ - MGLLogDebug(@"Retrieving the annotation view for: %@", annotation); - if (annotation == self.userLocation) - { - return self.userLocationAnnotationView; - } - MGLAnnotationTag annotationTag = [self annotationTagForAnnotation:annotation]; - if (annotationTag == MGLAnnotationTagNotFound) { - return nil; - } - MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(annotationTag); - return annotationContext.annotationView; -} - -- (double)alphaForShapeAnnotation:(MGLShape *)annotation -{ - if (_delegateHasAlphasForShapeAnnotations) - { - return [self.delegate mapView:self alphaForShapeAnnotation:annotation]; - } - return 1.0; -} - -- (mbgl::Color)strokeColorForShapeAnnotation:(MGLShape *)annotation -{ - UIColor *color = (_delegateHasStrokeColorsForShapeAnnotations - ? [self.delegate mapView:self strokeColorForShapeAnnotation:annotation] - : self.tintColor); - return color.mgl_color; -} - -- (mbgl::Color)fillColorForPolygonAnnotation:(MGLPolygon *)annotation -{ - UIColor *color = (_delegateHasFillColorsForShapeAnnotations - ? [self.delegate mapView:self fillColorForPolygonAnnotation:annotation] - : self.tintColor); - return color.mgl_color; -} - -- (CGFloat)lineWidthForPolylineAnnotation:(MGLPolyline *)annotation -{ - if (_delegateHasLineWidthsForShapeAnnotations) - { - return [self.delegate mapView:self lineWidthForPolylineAnnotation:(MGLPolyline *)annotation]; - } - return 3.0; -} - -- (void)installAnnotationImage:(MGLAnnotationImage *)annotationImage -{ - NSString *iconIdentifier = annotationImage.styleIconIdentifier; - self.annotationImagesByIdentifier[annotationImage.reuseIdentifier] = annotationImage; - annotationImage.delegate = self; - - // add sprite - self.mbglMap.addAnnotationImage([annotationImage.image mgl_styleImageWithIdentifier:iconIdentifier]); - - // Create a slop area with a “radius” equal in size to the annotation - // image’s alignment rect, allowing the eventual tap to be on any point - // within this image. Union this slop area with any existing slop areas. - CGRect bounds = UIEdgeInsetsInsetRect({ CGPointZero, annotationImage.image.size }, - annotationImage.image.alignmentRectInsets); - _unionedAnnotationRepresentationSize = CGSizeMake(MAX(_unionedAnnotationRepresentationSize.width, bounds.size.width), - MAX(_unionedAnnotationRepresentationSize.height, bounds.size.height)); -} - -- (void)removeAnnotation:(id )annotation -{ - MGLLogDebug(@"Removing annotation: %@", annotation); - if ( ! annotation) return; - - // The core bulk deletion API is efficient with respect to indexing - // and screen refreshes, thus we should defer to it even for - // individual deletes. - // - [self removeAnnotations:@[ annotation ]]; -} - -- (void)removeAnnotations:(NSArray> *)annotations -{ - MGLLogDebug(@"Removing: %lu annotations", annotations.count); - if ( ! annotations) return; - - [self willChangeValueForKey:@"annotations"]; - - for (id annotation in annotations) - { - MGLAssert([annotation conformsToProtocol:@protocol(MGLAnnotation)], @"annotation should conform to MGLAnnotation"); - - MGLAnnotationTag annotationTag = [self annotationTagForAnnotation:annotation]; - if (annotationTag == MGLAnnotationTagNotFound) - { - continue; - } - - MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(annotationTag); - MGLAnnotationView *annotationView = annotationContext.annotationView; - - if (annotationContext.viewReuseIdentifier) - { - NSMutableArray *annotationViewReuseQueue = [self annotationViewReuseQueueForIdentifier:annotationContext.viewReuseIdentifier]; - if (![annotationViewReuseQueue containsObject:annotationView]) - { - [annotationViewReuseQueue removeObject:annotationView]; - } - } - - annotationView.annotation = nil; - [annotationView removeFromSuperview]; - [self.annotationContainerView.annotationViews removeObject:annotationView]; - - if (annotationTag == _selectedAnnotationTag) - { - [self deselectAnnotation:annotation animated:NO]; - } - - _annotationContextsByAnnotationTag.erase(annotationTag); - _annotationTagsByAnnotation.erase(annotation); - - if ([annotation isKindOfClass:[NSObject class]] && ![annotation isKindOfClass:[MGLMultiPoint class]]) - { - [(NSObject *)annotation removeObserver:self forKeyPath:@"coordinate" context:(void *)(NSUInteger)annotationTag]; - } - else if ([annotation isKindOfClass:[MGLMultiPoint class]]) - { - [(NSObject *)annotation removeObserver:self forKeyPath:@"coordinates" context:(void *)(NSUInteger)annotationTag]; - } - - _isChangingAnnotationLayers = YES; - self.mbglMap.removeAnnotation(annotationTag); - } - - [self updatePresentsWithTransaction]; - - [self didChangeValueForKey:@"annotations"]; - UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); - if (_isChangingAnnotationLayers) - { - [self.style willChangeValueForKey:@"layers"]; - } -} - -- (nonnull NSArray> *)overlays -{ - if (self.annotations == nil) { return @[]; } - - NSMutableArray> *mutableOverlays = [NSMutableArray array]; - - [self.annotations enumerateObjectsUsingBlock:^(id _Nonnull annotation, NSUInteger idx, BOOL * _Nonnull stop) { - if ([annotation conformsToProtocol:@protocol(MGLOverlay)]) - { - [mutableOverlays addObject:(id)annotation]; - } - }]; - - return [NSArray arrayWithArray:mutableOverlays]; -} - -- (void)addOverlay:(id )overlay -{ - MGLLogDebug(@"Adding overlay: %@", overlay); - [self addOverlays:@[ overlay ]]; -} - -- (void)addOverlays:(NSArray> *)overlays -{ - MGLLogDebug(@"Adding: %lu overlays", overlays.count); -#if DEBUG - for (id overlay in overlays) - { - MGLAssert([overlay conformsToProtocol:@protocol(MGLOverlay)], @"overlay should conform to MGLOverlay"); - } -#endif - - [self addAnnotations:overlays]; -} - -- (void)removeOverlay:(id )overlay -{ - MGLLogDebug(@"Removing overlay: %@", overlay); - [self removeOverlays:@[ overlay ]]; -} - -- (void)removeOverlays:(NSArray> *)overlays -{ - MGLLogDebug(@"Removing: %lu overlays", overlays.count); -#if DEBUG - for (id overlay in overlays) - { - MGLAssert([overlay conformsToProtocol:@protocol(MGLOverlay)], @"overlay should conform to MGLOverlay"); - } -#endif - - [self removeAnnotations:overlays]; -} - -- (nullable MGLAnnotationImage *)dequeueReusableAnnotationImageWithIdentifier:(NSString *)identifier -{ - return self.annotationImagesByIdentifier[identifier]; -} - -- (nullable MGLAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier -{ - NSMutableArray *annotationViewReuseQueue = [self annotationViewReuseQueueForIdentifier:identifier]; - MGLAnnotationView *reusableView = annotationViewReuseQueue.firstObject; - [reusableView prepareForReuse]; - [annotationViewReuseQueue removeObject:reusableView]; - - return reusableView; -} - -/** - Returns the tag of the annotation at the given point in the view. - - This is more involved than it sounds: if multiple point annotations overlap - near the point, this method cycles through them so that each of them is - accessible to the user at some point. - - @param persist True to remember the cycleable set of annotations, so that a - different annotation is returned the next time this method is called - with the same point. Setting this parameter to false is useful for - asking “what if?” - */ -- (MGLAnnotationTag)annotationTagAtPoint:(CGPoint)point persistingResults:(BOOL)persist -{ - // Look for any annotation near the tap. An annotation is “near” if the - // distance between its center and the tap is less than the maximum height - // or width of an installed annotation image or annotation view. - CGRect queryRect = CGRectInset({ point, CGSizeZero }, - -_unionedAnnotationRepresentationSize.width, - -_unionedAnnotationRepresentationSize.height); - queryRect = CGRectInset(queryRect, -MGLAnnotationImagePaddingForHitTest, - -MGLAnnotationImagePaddingForHitTest); - std::vector nearbyAnnotations = [self annotationTagsInRect:queryRect]; - std::vector nearbyShapeAnnotations = [self shapeAnnotationTagsInRect:queryRect]; - - if (nearbyShapeAnnotations.size()) { - nearbyAnnotations.insert(nearbyAnnotations.end(), nearbyShapeAnnotations.begin(), nearbyShapeAnnotations.end()); - } - - if (nearbyAnnotations.size()) - { - // Assume that the user is fat-fingering an annotation. - CGRect hitRect = CGRectInset({ point, CGSizeZero }, - -MGLAnnotationImagePaddingForHitTest, - -MGLAnnotationImagePaddingForHitTest); - - // Filter out any annotation whose image or view is unselectable or for which - // hit testing fails. - auto end = std::remove_if(nearbyAnnotations.begin(), nearbyAnnotations.end(), [&](const MGLAnnotationTag annotationTag) { - id annotation = [self annotationWithTag:annotationTag]; - MGLAssert(annotation, @"Unknown annotation found nearby tap"); - if ( ! annotation) - { - return true; - } - - MGLAnnotationContext annotationContext = _annotationContextsByAnnotationTag.at(annotationTag); - CGRect annotationRect; - - MGLAnnotationView *annotationView = annotationContext.annotationView; - - if (annotationView) - { - if ( ! annotationView.enabled) - { - return true; - } - - CGPoint calloutAnchorPoint = MGLPointRounded([self convertCoordinate:annotation.coordinate toPointToView:self]); - CGRect frame = CGRectInset({ calloutAnchorPoint, CGSizeZero }, -CGRectGetWidth(annotationView.frame) / 2, -CGRectGetHeight(annotationView.frame) / 2); - - // We need to take any offset into consideration. Note that a large offset will result in a - // large value for `_unionedAnnotationRepresentationSize` (and thus a larger feature query rect). - // Aim to keep the offset as small as possible. - frame = CGRectOffset(frame, annotationView.centerOffset.dx, annotationView.centerOffset.dy); - - annotationRect = UIEdgeInsetsInsetRect(frame, annotationView.alignmentRectInsets); - } - else - { - if ([annotation isKindOfClass:[MGLMultiPoint class]]) - { - if ([self.delegate respondsToSelector:@selector(mapView:shapeAnnotationIsEnabled:)]) { - return !!(![self.delegate mapView:self shapeAnnotationIsEnabled:(MGLMultiPoint *)annotation]); - } else { - return false; - } - } - - MGLAnnotationImage *annotationImage = [self imageOfAnnotationWithTag:annotationTag]; - if ( ! annotationImage.enabled) - { - return true; - } - - MGLAnnotationImage *fallbackAnnotationImage = [self dequeueReusableAnnotationImageWithIdentifier:MGLDefaultStyleMarkerSymbolName]; - UIImage *fallbackImage = fallbackAnnotationImage.image; - - annotationRect = [self frameOfImage:annotationImage.image ?: fallbackImage centeredAtCoordinate:annotation.coordinate]; - } - - // Filter out the annotation if the fattened finger didn’t land - // within the image’s alignment rect. - return !!!CGRectIntersectsRect(annotationRect, hitRect); - }); - - nearbyAnnotations.resize(std::distance(nearbyAnnotations.begin(), end)); - - } - - MGLAnnotationTag hitAnnotationTag = MGLAnnotationTagNotFound; - if (nearbyAnnotations.size()) - { - // The first selection in the cycle should be the one nearest to the - // tap. Also the annotation tags need to be stable in order to compare them with - // the remembered tags _annotationsNearbyLastTap. - CLLocationCoordinate2D currentCoordinate = [self convertPoint:point toCoordinateFromView:self]; - std::sort(nearbyAnnotations.begin(), nearbyAnnotations.end(), [&](const MGLAnnotationTag tagA, const MGLAnnotationTag tagB) { - CLLocationCoordinate2D coordinateA = [[self annotationWithTag:tagA] coordinate]; - CLLocationCoordinate2D coordinateB = [[self annotationWithTag:tagB] coordinate]; - CLLocationDegrees deltaA = hypot(coordinateA.latitude - currentCoordinate.latitude, - coordinateA.longitude - currentCoordinate.longitude); - CLLocationDegrees deltaB = hypot(coordinateB.latitude - currentCoordinate.latitude, - coordinateB.longitude - currentCoordinate.longitude); - return deltaA < deltaB; - }); - - if (nearbyAnnotations == _annotationsNearbyLastTap) - { - // The last time we persisted a set of annotations, we had the same - // set of annotations as we do now. Cycle through them. - if (_selectedAnnotationTag == MGLAnnotationTagNotFound - || _selectedAnnotationTag == nearbyAnnotations.back()) - { - // Either no annotation is selected or the last annotation in - // the set was selected. Wrap around to the first annotation in - // the set. - hitAnnotationTag = nearbyAnnotations.front(); - } - else - { - auto result = std::find(nearbyAnnotations.begin(), - nearbyAnnotations.end(), - _selectedAnnotationTag); - if (result == nearbyAnnotations.end()) - { - // An annotation from this set hasn’t been selected before. - // Select the first (nearest) one. - hitAnnotationTag = nearbyAnnotations.front(); - } - else - { - // Step to the next annotation in the set. - auto distance = std::distance(nearbyAnnotations.begin(), result); - hitAnnotationTag = nearbyAnnotations[distance + 1]; - } - } - } - else - { - // Remember the nearby annotations for the next time this method is - // called. - if (persist) - { - _annotationsNearbyLastTap = nearbyAnnotations; - } - - // Choose the first nearby annotation. - if (nearbyAnnotations.size()) - { - hitAnnotationTag = nearbyAnnotations.front(); - } - } - } - - return hitAnnotationTag; -} - -/// Returns the tags of the annotations coincident with the given rectangle. -- (std::vector)annotationTagsInRect:(CGRect)rect -{ - return _rendererFrontend->getRenderer()->queryPointAnnotations({ - { CGRectGetMinX(rect), CGRectGetMinY(rect) }, - { CGRectGetMaxX(rect), CGRectGetMaxY(rect) }, - }); -} - -- (std::vector)shapeAnnotationTagsInRect:(CGRect)rect -{ - return _rendererFrontend->getRenderer()->queryShapeAnnotations({ - { CGRectGetMinX(rect), CGRectGetMinY(rect) }, - { CGRectGetMaxX(rect), CGRectGetMaxY(rect) }, - }); -} - - -- (BOOL)isMovingAnnotationIntoViewSupportedForAnnotation:(id)annotation animated:(BOOL)animated { - // Consider delegating - return [annotation isKindOfClass:[MGLPointAnnotation class]]; -} - -- (id )selectedAnnotation -{ - if (_userLocationAnnotationIsSelected) - { - return self.userLocation; - } - - if ( ! _annotationContextsByAnnotationTag.count(_selectedAnnotationTag) || - _selectedAnnotationTag == MGLAnnotationTagNotFound) { - return nil; - } - - MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(_selectedAnnotationTag); - return annotationContext.annotation; -} - -- (void)setSelectedAnnotation:(id )annotation -{ - MGLLogDebug(@"Selecting annotation: %@", annotation); - [self willChangeValueForKey:@"selectedAnnotations"]; - _selectedAnnotationTag = [self annotationTagForAnnotation:annotation]; - _userLocationAnnotationIsSelected = annotation && annotation == self.userLocation; - [self didChangeValueForKey:@"selectedAnnotations"]; -} - -- (NSArray> *)selectedAnnotations -{ - id selectedAnnotation = self.selectedAnnotation; - return (selectedAnnotation ? @[ selectedAnnotation ] : @[]); -} - -- (void)setSelectedAnnotations:(NSArray> *)selectedAnnotations -{ - if ( ! selectedAnnotations.count) return; - - id firstAnnotation = selectedAnnotations[0]; - - MGLAssert([firstAnnotation conformsToProtocol:@protocol(MGLAnnotation)], @"annotation should conform to MGLAnnotation"); - - if ([firstAnnotation isKindOfClass:[MGLMultiPoint class]]) return; - - [self selectAnnotation:firstAnnotation animated:YES completionHandler:nil]; -} - -- (void)selectAnnotation:(id )annotation animated:(BOOL)animated -{ - [self selectAnnotation:annotation animated:animated completionHandler:nil]; -} - -- (void)selectAnnotation:(id )annotation animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion -{ - [self selectAnnotation:annotation moveIntoView:animated animateSelection:animated completionHandler:completion]; -} - -- (void)selectAnnotation:(id )annotation moveIntoView:(BOOL)moveIntoView animateSelection:(BOOL)animateSelection completionHandler:(nullable void (^)(void))completion -{ - MGLLogDebug(@"Selecting annotation: %@ moveIntoView: %@ animateSelection: %@", annotation, MGLStringFromBOOL(moveIntoView), MGLStringFromBOOL(animateSelection)); - CGRect positioningRect = [self positioningRectForAnnotation:annotation defaultCalloutPoint:CGPointZero]; - [self selectAnnotation:annotation moveIntoView:moveIntoView animateSelection:animateSelection calloutPositioningRect:positioningRect completionHandler:completion]; -} - -- (void)selectAnnotation:(id )annotation moveIntoView:(BOOL)moveIntoView animateSelection:(BOOL)animateSelection calloutPositioningRect:(CGRect)calloutPositioningRect completionHandler:(nullable void (^)(void))completion -{ - if ( ! annotation) return; - - if (annotation == self.selectedAnnotation) return; - - [self deselectAnnotation:self.selectedAnnotation animated:NO]; - - // Add the annotation to the map if it hasn’t been added yet. - MGLAnnotationTag annotationTag = [self annotationTagForAnnotation:annotation]; - if (annotationTag == MGLAnnotationTagNotFound && annotation != self.userLocation) - { - [self addAnnotation:annotation]; - annotationTag = [self annotationTagForAnnotation:annotation]; - if (annotationTag == MGLAnnotationTagNotFound) return; - } - - MGLAnnotationView *annotationView = nil; - - if (annotation != self.userLocation) - if (annotationTag != MGLAnnotationTagNotFound) { - MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(annotationTag); - annotationView = annotationContext.annotationView; - if (annotationView && annotationView.enabled) { - // Annotations represented by views use the view frame as the positioning rect. - calloutPositioningRect = annotationView.frame; - [annotationView.superview bringSubviewToFront:annotationView]; - - [annotationView setSelected:YES animated:animateSelection]; - } - } - - self.selectedAnnotation = annotation; - - // Determine if we're allowed to move this offscreen annotation on screen, even though we've asked it to - if (moveIntoView) { - moveIntoView = [self isMovingAnnotationIntoViewSupportedForAnnotation:annotation animated:animateSelection]; - } - - // If we have an invalid positioning rect, we need to provide a suitable default. - // This (currently) happens if you select an annotation that has NOT yet been - // added. See https://github.com/mapbox/mapbox-gl-native/issues/11476 - if (CGRectIsNull(calloutPositioningRect)) { - CLLocationCoordinate2D origin = annotation.coordinate; - CGPoint originPoint = [self convertCoordinate:origin toPointToView:self]; - calloutPositioningRect = { .origin = originPoint, .size = CGSizeZero }; - } - - CGRect expandedPositioningRect = calloutPositioningRect; - - // Used for callout positioning, and moving offscreen annotations onscreen. - CGRect constrainedRect = self.contentFrame; - CGRect bounds = constrainedRect; - - BOOL expandedPositioningRectToMoveCalloutIntoViewWithMargins = NO; - - UIView *calloutView = nil; - - if ([annotation respondsToSelector:@selector(title)] && - annotation.title && - [self.delegate respondsToSelector:@selector(mapView:annotationCanShowCallout:)] && - [self.delegate mapView:self annotationCanShowCallout:annotation]) - { - // build the callout - if ([self.delegate respondsToSelector:@selector(mapView:calloutViewForAnnotation:)]) - { - id providedCalloutView = [self.delegate mapView:self calloutViewForAnnotation:annotation]; - if (providedCalloutView) { - if (![providedCalloutView isKindOfClass:[UIView class]]) { - [NSException raise:NSInvalidArgumentException format:@"Callout view must be a kind of UIView"]; - } - MGLAssert([providedCalloutView conformsToProtocol:@protocol(MGLCalloutView)], @"callout view must conform to MGLCalloutView"); - calloutView = providedCalloutView; - } - } - if (!calloutView) - { - calloutView = [self calloutViewForAnnotation:annotation]; - } - self.calloutViewForSelectedAnnotation = calloutView; - - if (_userLocationAnnotationIsSelected) - { - calloutPositioningRect = [self.userLocationAnnotationView.layer.presentationLayer frame]; - - CGRect implicitAnnotationFrame = [self.userLocationAnnotationView.layer.presentationLayer frame]; - CGRect explicitAnnotationFrame = self.userLocationAnnotationView.frame; - _initialImplicitCalloutViewOffset = CGPointMake(CGRectGetMinX(explicitAnnotationFrame) - CGRectGetMinX(implicitAnnotationFrame), - CGRectGetMinY(explicitAnnotationFrame) - CGRectGetMinY(implicitAnnotationFrame)); - } - - // consult delegate for left and/or right accessory views - if ([self.delegate respondsToSelector:@selector(mapView:leftCalloutAccessoryViewForAnnotation:)]) - { - calloutView.leftAccessoryView = [self.delegate mapView:self leftCalloutAccessoryViewForAnnotation:annotation]; - - if ([calloutView.leftAccessoryView isKindOfClass:[UIControl class]]) - { - UITapGestureRecognizer *calloutAccessoryTap = [[UITapGestureRecognizer alloc] initWithTarget:self - action:@selector(handleCalloutAccessoryTapGesture:)]; - - [calloutView.leftAccessoryView addGestureRecognizer:calloutAccessoryTap]; - } - } - - if ([self.delegate respondsToSelector:@selector(mapView:rightCalloutAccessoryViewForAnnotation:)]) - { - calloutView.rightAccessoryView = [self.delegate mapView:self rightCalloutAccessoryViewForAnnotation:annotation]; - - if ([calloutView.rightAccessoryView isKindOfClass:[UIControl class]]) - { - UITapGestureRecognizer *calloutAccessoryTap = [[UITapGestureRecognizer alloc] initWithTarget:self - action:@selector(handleCalloutAccessoryTapGesture:)]; - - [calloutView.rightAccessoryView addGestureRecognizer:calloutAccessoryTap]; - } - } - - // set annotation delegate to handle taps on the callout view - calloutView.delegate = self; - - // If the callout view provides inset (outset) information, we can use it to expand our positioning - // rect, which we then use to help move the annotation on-screen if want need to. - if (moveIntoView && [calloutView respondsToSelector:@selector(marginInsetsHintForPresentationFromRect:)]) { - UIEdgeInsets margins = [calloutView marginInsetsHintForPresentationFromRect:calloutPositioningRect]; - expandedPositioningRect = UIEdgeInsetsInsetRect(expandedPositioningRect, margins); - expandedPositioningRectToMoveCalloutIntoViewWithMargins = YES; - } - } - - if (!expandedPositioningRectToMoveCalloutIntoViewWithMargins) - { - // We don't have a callout (OR our callout didn't implement - // marginInsetsHintForPresentationFromRect: - in this case we need to - // ensure that partially off-screen annotations are NOT moved into view. - // - // We may want to create (and fallback to) an `MGLMapViewDelegate` version - // of the `-[MGLCalloutView marginInsetsHintForPresentationFromRect:] - // protocol method. - bounds = CGRectInset(bounds, -calloutPositioningRect.size.width, -calloutPositioningRect.size.height); - } - - if (moveIntoView) - { - moveIntoView = NO; - - // Any one of these cases should trigger a move onscreen - CGFloat minX = CGRectGetMinX(expandedPositioningRect); - - if (minX < CGRectGetMinX(bounds)) { - constrainedRect.origin.x = minX; - moveIntoView = YES; - } - else { - CGFloat maxX = CGRectGetMaxX(expandedPositioningRect); - - if (maxX > CGRectGetMaxX(bounds)) { - constrainedRect.origin.x = maxX - CGRectGetWidth(constrainedRect); - moveIntoView = YES; - } - } - - CGFloat minY = CGRectGetMinY(expandedPositioningRect); - - if (minY < CGRectGetMinY(bounds)) { - constrainedRect.origin.y = minY; - moveIntoView = YES; - } - else { - CGFloat maxY = CGRectGetMaxY(expandedPositioningRect); - - if (maxY > CGRectGetMaxY(bounds)) { - constrainedRect.origin.y = maxY - CGRectGetHeight(constrainedRect); - moveIntoView = YES; - } - } - } - - // Remember, calloutView can be nil here. - [calloutView presentCalloutFromRect:calloutPositioningRect - inView:_mbglView->getView() - constrainedToRect:constrainedRect - animated:animateSelection]; - - // Save the anchor coordinate - if ([annotation isKindOfClass:[MGLPointAnnotation class]]) { - self.anchorCoordinateForSelectedAnnotation = annotation.coordinate; - } - else { - // This is used for features like polygons, so that if the map is dragged - // the callout doesn't ping to its coordinate. - CGPoint anchorPoint = CGPointMake(CGRectGetMidX(calloutPositioningRect), CGRectGetMidY(calloutPositioningRect)); - self.anchorCoordinateForSelectedAnnotation = [self convertPoint:anchorPoint toCoordinateFromView:self]; - } - - // notify delegate - if ([self.delegate respondsToSelector:@selector(mapView:didSelectAnnotation:)]) - { - [self.delegate mapView:self didSelectAnnotation:annotation]; - } - - if (annotationView && [self.delegate respondsToSelector:@selector(mapView:didSelectAnnotationView:)]) - { - [self.delegate mapView:self didSelectAnnotationView:annotationView]; - } - - if (moveIntoView) - { - CGPoint center = CGPointMake(CGRectGetMidX(constrainedRect), CGRectGetMidY(constrainedRect)); - CLLocationCoordinate2D centerCoord = [self convertPoint:center toCoordinateFromView:self]; - [self setCenterCoordinate:centerCoord zoomLevel:self.zoomLevel direction:self.direction animated:animateSelection completionHandler:completion]; - } - else if (completion) - { - completion(); - } -} - -- (MGLCompactCalloutView *)calloutViewForAnnotation:(id )annotation -{ - MGLCompactCalloutView *calloutView = [MGLCompactCalloutView platformCalloutView]; - calloutView.representedObject = annotation; - calloutView.tintColor = self.tintColor; - - return calloutView; -} - -/// Returns the rectangle that represents the annotation image of the annotation -/// with the given tag. This rectangle is fitted to the image’s alignment rect -/// and is appropriate for positioning a popover. -/// If a shape annotation is visible but its centroid is not, and a default point is specified, -/// the callout view is anchored to the default callout point. -- (CGRect)positioningRectForAnnotation:(id )annotation defaultCalloutPoint:(CGPoint)calloutPoint -{ - MGLAnnotationTag annotationTag = [self annotationTagForAnnotation:annotation]; - CGRect positioningRect = [self positioningRectForCalloutForAnnotationWithTag:annotationTag]; - - if (CGRectIsNull(positioningRect)) { - return positioningRect; - } - - // For annotations which `coordinate` falls offscreen it will use the current tap point as anchor instead. - if ( ! CGRectIntersectsRect(positioningRect, self.bounds) && annotation != self.userLocation) - { - if (!CGPointEqualToPoint(calloutPoint, CGPointZero)) { - positioningRect = CGRectMake(calloutPoint.x, calloutPoint.y, positioningRect.size.width, positioningRect.size.height); - } - } - - return positioningRect; -} - -/// Returns the rectangle that represents the annotation image of the annotation -/// with the given tag. This rectangle is fitted to the image’s alignment rect -/// and is appropriate for positioning a popover. -- (CGRect)positioningRectForCalloutForAnnotationWithTag:(MGLAnnotationTag)annotationTag -{ - id annotation = [self annotationWithTag:annotationTag]; - if ( ! annotation) - { - return CGRectNull; - } - - CLLocationCoordinate2D coordinate; - - if ((annotation == self.selectedAnnotation) && - CLLocationCoordinate2DIsValid(self.anchorCoordinateForSelectedAnnotation)) { - coordinate = self.anchorCoordinateForSelectedAnnotation; - } - else { - coordinate = annotation.coordinate; - } - - if ([annotation isKindOfClass:[MGLMultiPoint class]]) { - CLLocationCoordinate2D origin = coordinate; - CGPoint originPoint = [self convertCoordinate:origin toPointToView:self]; - return CGRectMake(originPoint.x, originPoint.y, MGLAnnotationImagePaddingForHitTest, MGLAnnotationImagePaddingForHitTest); - } - - UIImage *image = [self imageOfAnnotationWithTag:annotationTag].image; - if ( ! image) - { - image = [self dequeueReusableAnnotationImageWithIdentifier:MGLDefaultStyleMarkerSymbolName].image; - } - if ( ! image) - { - return CGRectZero; - } - - CGRect positioningRect = [self frameOfImage:image centeredAtCoordinate:coordinate]; - positioningRect.origin.x -= 0.5; - - return CGRectInset(positioningRect, -MGLAnnotationImagePaddingForCallout, - -MGLAnnotationImagePaddingForCallout); -} - -/// Returns the rectangle relative to the viewport that represents the given -/// image centered at the given coordinate. -- (CGRect)frameOfImage:(UIImage *)image centeredAtCoordinate:(CLLocationCoordinate2D)coordinate -{ - CGPoint calloutAnchorPoint = MGLPointRounded([self convertCoordinate:coordinate toPointToView:self]); - CGRect frame = CGRectInset({ calloutAnchorPoint, CGSizeZero }, -image.size.width / 2, -image.size.height / 2); - return UIEdgeInsetsInsetRect(frame, image.alignmentRectInsets); -} - -/// Returns the annotation image assigned to the annotation with the given tag. -- (MGLAnnotationImage *)imageOfAnnotationWithTag:(MGLAnnotationTag)annotationTag -{ - if (annotationTag == MGLAnnotationTagNotFound - || _annotationContextsByAnnotationTag.count(annotationTag) == 0) - { - return nil; - } - - NSString *customSymbol = _annotationContextsByAnnotationTag.at(annotationTag).imageReuseIdentifier; - NSString *symbolName = customSymbol.length ? customSymbol : MGLDefaultStyleMarkerSymbolName; - - return [self dequeueReusableAnnotationImageWithIdentifier:symbolName]; -} - -- (void)deselectAnnotation:(id )annotation animated:(BOOL)animated -{ - if ( ! annotation) return; - - if (self.selectedAnnotation == annotation) - { - MGLLogDebug(@"Deselecting annotation: %@ animated: %@", annotation, MGLStringFromBOOL(animated)); - // dismiss popup - [self.calloutViewForSelectedAnnotation dismissCalloutAnimated:animated]; - - // deselect annotation view - MGLAnnotationView *annotationView = nil; - MGLAnnotationTag annotationTag = [self annotationTagForAnnotation:annotation]; - - if (annotationTag != MGLAnnotationTagNotFound) - { - MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(annotationTag); - annotationView = annotationContext.annotationView; - [annotationView setSelected:NO animated:animated]; - } - - // clean up - self.calloutViewForSelectedAnnotation = nil; - self.selectedAnnotation = nil; - self.anchorCoordinateForSelectedAnnotation = kCLLocationCoordinate2DInvalid; - - // notify delegate - if ([self.delegate respondsToSelector:@selector(mapView:didDeselectAnnotation:)]) - { - [self.delegate mapView:self didDeselectAnnotation:annotation]; - } - - if (annotationView && [self.delegate respondsToSelector:@selector(mapView:didDeselectAnnotationView:)]) - { - [self.delegate mapView:self didDeselectAnnotationView:annotationView]; - } - - [self updatePresentsWithTransaction]; - } -} - -- (void)calloutViewWillAppear:(UIView *)calloutView -{ - if (_userLocationAnnotationIsSelected || - CGPointEqualToPoint(_initialImplicitCalloutViewOffset, CGPointZero)) - { - return; - } - - __weak __typeof__(self) weakSelf = self; - - // The user location callout view initially points to the user location - // annotation’s implicit (visual) frame, which is offset from the - // annotation’s explicit frame. Now the callout view needs to rendezvous - // with the explicit frame. Then, - // -updateUserLocationAnnotationViewAnimatedWithDuration: will take over the - // next time an updated location arrives. - [UIView animateWithDuration:_userLocationAnimationCompletionDate.timeIntervalSinceNow - delay:0 - options:(UIViewAnimationOptionCurveLinear | - UIViewAnimationOptionAllowUserInteraction | - UIViewAnimationOptionBeginFromCurrentState) - animations:^ - { - __typeof__(self) strongSelf = weakSelf; - if ( ! strongSelf) - { - return; - } - - calloutView.frame = CGRectOffset(calloutView.frame, - strongSelf->_initialImplicitCalloutViewOffset.x, - strongSelf->_initialImplicitCalloutViewOffset.y); - strongSelf->_initialImplicitCalloutViewOffset = CGPointZero; - } - completion:NULL]; -} - -- (void)showAnnotations:(NSArray> *)annotations animated:(BOOL)animated -{ - CGFloat maximumPadding = 100; - CGFloat yPadding = (self.frame.size.height / 5 <= maximumPadding) ? (self.frame.size.height / 5) : maximumPadding; - CGFloat xPadding = (self.frame.size.width / 5 <= maximumPadding) ? (self.frame.size.width / 5) : maximumPadding; - - UIEdgeInsets edgeInsets = UIEdgeInsetsMake(yPadding, xPadding, yPadding, xPadding); - - [self showAnnotations:annotations edgePadding:edgeInsets animated:animated completionHandler:nil]; -} - -- (void)showAnnotations:(NSArray> *)annotations edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated -{ - [self showAnnotations:annotations edgePadding:insets animated:animated completionHandler:nil]; -} - -- (void)showAnnotations:(NSArray> *)annotations edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion -{ - MGLLogDebug(@"Showing: %lu annotations edgePadding: %@ animated: %@", annotations.count, NSStringFromUIEdgeInsets(insets), MGLStringFromBOOL(animated)); - if ( ! annotations.count) - { - if (completion) { - completion(); - } - return; - } - - mbgl::LatLngBounds bounds = mbgl::LatLngBounds::empty(); - - for (id annotation in annotations) - { - if ([annotation conformsToProtocol:@protocol(MGLOverlay)]) - { - bounds.extend(MGLLatLngBoundsFromCoordinateBounds(((id )annotation).overlayBounds)); - } - else - { - bounds.extend(MGLLatLngFromLocationCoordinate2D(annotation.coordinate)); - } - } - - [self setVisibleCoordinateBounds:MGLCoordinateBoundsFromLatLngBounds(bounds) - edgePadding:insets - animated:animated - completionHandler:completion]; -} - - -#pragma mark Annotation Image Delegate - -- (void)annotationImageNeedsRedisplay:(MGLAnnotationImage *)annotationImage -{ - NSString *reuseIdentifier = annotationImage.reuseIdentifier; - NSString *iconIdentifier = annotationImage.styleIconIdentifier; - NSString *fallbackReuseIdentifier = MGLDefaultStyleMarkerSymbolName; - NSString *fallbackIconIdentifier = [MGLAnnotationSpritePrefix stringByAppendingString:fallbackReuseIdentifier]; - - if (annotationImage.image) - { - // Add the new icon to the style. - NSString *updatedIconIdentifier = [MGLAnnotationSpritePrefix stringByAppendingString:annotationImage.reuseIdentifier]; - annotationImage.styleIconIdentifier = updatedIconIdentifier; - [self installAnnotationImage:annotationImage]; - - if ([iconIdentifier isEqualToString:fallbackIconIdentifier]) - { - // Update any annotations associated with the annotation image. - [self applyIconIdentifier:updatedIconIdentifier toAnnotationsWithImageReuseIdentifier:reuseIdentifier]; - } - } - else - { - // Add the default icon to the style if necessary. - annotationImage.styleIconIdentifier = fallbackIconIdentifier; - if ( ! [self dequeueReusableAnnotationImageWithIdentifier:MGLDefaultStyleMarkerSymbolName]) - { - [self installAnnotationImage:self.defaultAnnotationImage]; - } - - // Update any annotations associated with the annotation image. - [self applyIconIdentifier:fallbackIconIdentifier toAnnotationsWithImageReuseIdentifier:reuseIdentifier]; - } -} - -- (void)applyIconIdentifier:(NSString *)iconIdentifier toAnnotationsWithImageReuseIdentifier:(NSString *)reuseIdentifier -{ - for (auto &pair : _annotationContextsByAnnotationTag) - { - if ([pair.second.imageReuseIdentifier isEqualToString:reuseIdentifier]) - { - const mbgl::Point point = MGLPointFromLocationCoordinate2D(pair.second.annotation.coordinate); - self.mbglMap.updateAnnotation(pair.first, mbgl::SymbolAnnotation { point, iconIdentifier.UTF8String ?: "" }); - } - } -} - -#pragma mark - User Location - - -- (void)setLocationManager:(nullable id)locationManager -{ - MGLLogDebug(@"Setting locationManager: %@", locationManager); - if (!locationManager) { - locationManager = [[MGLCLLocationManager alloc] init]; - } - [_locationManager stopUpdatingLocation]; - [_locationManager stopUpdatingHeading]; - _locationManager.delegate = nil; - - _locationManager = locationManager; - _locationManager.delegate = self; -} - -- (void)validateLocationServices -{ - BOOL shouldEnableLocationServices = self.showsUserLocation && !self.dormant; - - if (shouldEnableLocationServices) - { - if (self.locationManager.authorizationStatus == kCLAuthorizationStatusNotDetermined) { - BOOL hasWhenInUseUsageDescription = !![[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"]; - - if (@available(iOS 11.0, *)) { - // A WhenInUse string is required in iOS 11+ and the map never has any need for Always, so it's enough to just ask for WhenInUse. - if (hasWhenInUseUsageDescription) { - [self.locationManager requestWhenInUseAuthorization]; - } else { - [NSException raise:MGLMissingLocationServicesUsageDescriptionException - format:@"To use location services this app must have a NSLocationWhenInUseUsageDescription string in its Info.plist."]; - } - } else { - // We might have to ask for Always if the app does not provide a WhenInUse string. - BOOL hasAlwaysUsageDescription = !![[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"]; - - if (hasWhenInUseUsageDescription) { - [self.locationManager requestWhenInUseAuthorization]; - } else if (hasAlwaysUsageDescription) { - [self.locationManager requestAlwaysAuthorization]; - } else { - [NSException raise:MGLMissingLocationServicesUsageDescriptionException - format:@"To use location services this app must have a NSLocationWhenInUseUsageDescription and/or NSLocationAlwaysUsageDescription string in its Info.plist."]; - } - } - } - - [self.locationManager startUpdatingLocation]; - - [self validateUserHeadingUpdating]; - } - else if ( ! shouldEnableLocationServices && self.locationManager) - { - [self.locationManager stopUpdatingLocation]; - [self.locationManager stopUpdatingHeading]; - } -} - -- (void)setShowsUserLocation:(BOOL)showsUserLocation -{ - MGLLogDebug(@"Setting showsUserLocation: %@", MGLStringFromBOOL(showsUserLocation)); - if (showsUserLocation == _showsUserLocation) return; - - _showsUserLocation = showsUserLocation; - - if (showsUserLocation) - { - if ([self.delegate respondsToSelector:@selector(mapViewWillStartLocatingUser:)]) - { - [self.delegate mapViewWillStartLocatingUser:self]; - } - - self.userLocation = [[MGLUserLocation alloc] initWithMapView:self]; - - MGLUserLocationAnnotationView *userLocationAnnotationView; - - if ([self.delegate respondsToSelector:@selector(mapView:viewForAnnotation:)]) - { - userLocationAnnotationView = (MGLUserLocationAnnotationView *)[self.delegate mapView:self viewForAnnotation:self.userLocation]; - if (userLocationAnnotationView && ! [userLocationAnnotationView isKindOfClass:MGLUserLocationAnnotationView.class]) - { - [NSException raise:MGLUserLocationAnnotationTypeException - format:@"User location annotation view must be a kind of MGLUserLocationAnnotationView. %@", userLocationAnnotationView.debugDescription]; - } - } - - self.userLocationAnnotationView = userLocationAnnotationView ?: [[MGLFaux3DUserLocationAnnotationView alloc] init]; - self.userLocationAnnotationView.mapView = self; - self.userLocationAnnotationView.userLocation = self.userLocation; - - self.userLocationAnnotationView.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | - UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin); - - [self validateLocationServices]; - } - else - { - [self validateLocationServices]; - - if ([self.delegate respondsToSelector:@selector(mapViewDidStopLocatingUser:)]) - { - [self.delegate mapViewDidStopLocatingUser:self]; - } - - [self setUserTrackingMode:MGLUserTrackingModeNone animated:YES completionHandler:nil]; - - [self.userLocationAnnotationView removeFromSuperview]; - self.userLocationAnnotationView = nil; - } -} - -- (void)setUserLocationAnnotationView:(MGLUserLocationAnnotationView *)newAnnotationView -{ - if ( ! [newAnnotationView isEqual:_userLocationAnnotationView]) - { - _userLocationAnnotationView = newAnnotationView; - [self updateUserLocationAnnotationView]; - } -} - -+ (NSSet *)keyPathsForValuesAffectingUserLocation -{ - return [NSSet setWithObject:@"userLocationAnnotationView"]; -} - -- (BOOL)isUserLocationVisible -{ - if (self.userLocationAnnotationView) - { - CGPoint locationPoint = [self convertCoordinate:self.userLocation.coordinate toPointToView:self]; - - CGRect locationRect = CGRectMake(locationPoint.x - self.userLocation.location.horizontalAccuracy, - locationPoint.y - self.userLocation.location.horizontalAccuracy, - self.userLocation.location.horizontalAccuracy * 2, - self.userLocation.location.horizontalAccuracy * 2); - - return CGRectIntersectsRect([self bounds], locationRect); - } - - return NO; -} - -- (void)setUserTrackingMode:(MGLUserTrackingMode)mode -{ - [self setUserTrackingMode:mode animated:YES completionHandler:nil]; -} - -- (void)setUserTrackingMode:(MGLUserTrackingMode)mode animated:(BOOL)animated -{ - [self setUserTrackingMode:mode animated:animated completionHandler:nil]; -} - -- (void)setUserTrackingMode:(MGLUserTrackingMode)mode animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion -{ - MGLLogDebug(@"Setting userTrackingMode: %lu animated: %@", mode, MGLStringFromBOOL(animated)); - if (mode == _userTrackingMode) - { - if (completion) - { - completion(); - } - return; - } - - MGLUserTrackingMode oldMode = _userTrackingMode; - [self willChangeValueForKey:@"userTrackingMode"]; - _userTrackingMode = mode; - [self didChangeValueForKey:@"userTrackingMode"]; - - switch (_userTrackingMode) - { - case MGLUserTrackingModeNone: - { - self.userTrackingState = MGLUserTrackingStatePossible; - - // Immediately update the annotation view; other cases update inside - // the locationManager:didUpdateLocations: method. - [self updateUserLocationAnnotationView]; - - break; - } - case MGLUserTrackingModeFollow: - case MGLUserTrackingModeFollowWithCourse: - { - self.userTrackingState = animated ? MGLUserTrackingStatePossible : MGLUserTrackingStateChanged; - self.showsUserLocation = YES; - - break; - } - case MGLUserTrackingModeFollowWithHeading: - { - if (oldMode == MGLUserTrackingModeNone) - { - self.userTrackingState = animated ? MGLUserTrackingStatePossible : MGLUserTrackingStateChanged; - } - - self.showsUserLocation = YES; - - if (self.zoomLevel < self.currentMinimumZoom) - { - [self setZoomLevel:self.currentMinimumZoom animated:YES]; - } - - break; - } - } - - CLLocation *location; - if (_userTrackingMode != MGLUserTrackingModeNone && (location = self.userLocation.location) && self.userLocationAnnotationView) - { - [self locationManager:self.locationManager didUpdateLocations:@[location] animated:animated completionHandler:completion]; - } - else if (completion) - { - completion(); - } - - [self validateUserHeadingUpdating]; - - if ([self.delegate respondsToSelector:@selector(mapView:didChangeUserTrackingMode:animated:)]) - { - [self.delegate mapView:self didChangeUserTrackingMode:_userTrackingMode animated:animated]; - } -} - -- (void)setUserLocationVerticalAlignment:(MGLAnnotationVerticalAlignment)alignment -{ - [self setUserLocationVerticalAlignment:alignment animated:YES]; -} - -- (void)setUserLocationVerticalAlignment:(MGLAnnotationVerticalAlignment)alignment animated:(BOOL)animated -{ - _userLocationVerticalAlignment = alignment; - if (self.userTrackingMode != MGLUserTrackingModeNone) - { - CLLocation *location = self.userLocation.location; - if (location) - { - [self locationManager:self.locationManager didUpdateLocations:@[location] animated:animated completionHandler:nil]; - } - } -} - -- (void)setTargetCoordinate:(CLLocationCoordinate2D)targetCoordinate -{ - [self setTargetCoordinate:targetCoordinate animated:YES completionHandler:nil]; -} - -- (void)setTargetCoordinate:(CLLocationCoordinate2D)targetCoordinate animated:(BOOL)animated -{ - [self setTargetCoordinate:targetCoordinate animated:animated completionHandler:nil]; -} - -- (void)setTargetCoordinate:(CLLocationCoordinate2D)targetCoordinate animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion -{ - MGLLogDebug(@"Setting targetCoordinate: %@ animated: %@", MGLStringFromCLLocationCoordinate2D(targetCoordinate), MGLStringFromBOOL(animated)); - BOOL isSynchronous = YES; - if (targetCoordinate.latitude != self.targetCoordinate.latitude - || targetCoordinate.longitude != self.targetCoordinate.longitude) - { - _targetCoordinate = targetCoordinate; - if (self.userTrackingMode == MGLUserTrackingModeFollowWithCourse) - { - self.userTrackingState = MGLUserTrackingStatePossible; - - if (CLLocation *location = self.userLocation.location) - { - isSynchronous = NO; - [self locationManager:self.locationManager didUpdateLocations:@[location] animated:animated completionHandler:completion]; - } - } - } - if (isSynchronous && completion) - { - completion(); - } -} - -- (void)setShowsUserHeadingIndicator:(BOOL)showsUserHeadingIndicator -{ - MGLLogDebug(@"Setting showsUserHeadingIndicator: %@", MGLStringFromBOOL(showsUserHeadingIndicator)); - _showsUserHeadingIndicator = showsUserHeadingIndicator; - - if (_showsUserHeadingIndicator) - { - self.showsUserLocation = YES; - } - [self validateUserHeadingUpdating]; -} - -- (void)validateUserHeadingUpdating -{ - BOOL canShowPermanentHeadingIndicator = self.showsUserHeadingIndicator && self.userTrackingMode != MGLUserTrackingModeFollowWithCourse; - - if (canShowPermanentHeadingIndicator || self.userTrackingMode == MGLUserTrackingModeFollowWithHeading) - { - [self updateHeadingForDeviceOrientation]; - [self.locationManager startUpdatingHeading]; - } - else - { - [self.locationManager stopUpdatingHeading]; - } -} - -- (void)locationManager:(id)manager didUpdateLocations:(NSArray *)locations -{ - [self locationManager:manager didUpdateLocations:locations animated:YES completionHandler:nil]; -} - -- (void)locationManager:(__unused id)manager didUpdateLocations:(NSArray *)locations animated:(BOOL)animated completionHandler:(nullable void (^)(void))completion -{ - CLLocation *oldLocation = self.userLocation.location; - CLLocation *newLocation = locations.lastObject; - _distanceFromOldUserLocation = [newLocation distanceFromLocation:oldLocation]; - - if ( ! _showsUserLocation || ! newLocation || ! CLLocationCoordinate2DIsValid(newLocation.coordinate)) return; - - if (! oldLocation || ! CLLocationCoordinate2DIsValid(oldLocation.coordinate) || [newLocation distanceFromLocation:oldLocation] - || oldLocation.course != newLocation.course) - { - if ( ! oldLocation || ! CLLocationCoordinate2DIsValid(oldLocation.coordinate) || self.userTrackingState != MGLUserTrackingStateBegan) - { - self.userLocation.location = newLocation; - } - - if ([self.delegate respondsToSelector:@selector(mapView:didUpdateUserLocation:)]) - { - [self.delegate mapView:self didUpdateUserLocation:self.userLocation]; - } - } - - [self didUpdateLocationWithUserTrackingAnimated:animated completionHandler:completion]; - - NSTimeInterval duration = MGLAnimationDuration; - if (oldLocation && ! CGPointEqualToPoint(self.userLocationAnnotationView.center, CGPointZero)) - { - duration = MIN([newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp], MGLUserLocationAnimationDuration); - } - [self updateUserLocationAnnotationViewAnimatedWithDuration:duration]; - - if (self.userTrackingMode == MGLUserTrackingModeNone && - self.userLocationAnnotationView.accessibilityElementIsFocused && - [UIApplication sharedApplication].applicationState == UIApplicationStateActive) - { - UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self.userLocationAnnotationView); - } -} - -- (void)didUpdateLocationWithUserTrackingAnimated:(BOOL)animated completionHandler:(nullable void (^)(void))completion -{ - CLLocation *location = self.userLocation.location; - if ( ! _showsUserLocation || ! location - || ! CLLocationCoordinate2DIsValid(location.coordinate) - || self.userTrackingMode == MGLUserTrackingModeNone) - { - if (completion) - { - completion(); - } - return; - } - - // If the user location annotation is already where it’s supposed to be, - // don’t change the viewport. - CGPoint correctPoint = self.userLocationAnnotationViewCenter; - CGPoint currentPoint = [self convertCoordinate:self.userLocation.coordinate toPointToView:self]; - if (std::abs(currentPoint.x - correctPoint.x) <= 1.0 && std::abs(currentPoint.y - correctPoint.y) <= 1.0 - && self.userTrackingMode != MGLUserTrackingModeFollowWithCourse) - { - if (completion) - { - completion(); - } - return; - } - - if (self.userTrackingMode == MGLUserTrackingModeFollowWithCourse - && CLLocationCoordinate2DIsValid(self.targetCoordinate)) - { - if (self.userTrackingState != MGLUserTrackingStateBegan) - { - // Keep both the user and the destination in view. - [self didUpdateLocationWithTargetAnimated:animated completionHandler:completion]; - } - } - else if (self.userTrackingState == MGLUserTrackingStatePossible) - { - // The first location update is often a great distance away from the - // current viewport, so fly there to provide additional context. - [self didUpdateLocationSignificantlyAnimated:animated completionHandler:completion]; - } - else if (self.userTrackingState == MGLUserTrackingStateChanged) - { - // Subsequent updates get a more subtle animation. - [self didUpdateLocationIncrementallyAnimated:animated completionHandler:completion]; - } - [self unrotateIfNeededAnimated:YES]; -} - -/// Changes the viewport based on an incremental location update. -- (void)didUpdateLocationIncrementallyAnimated:(BOOL)animated completionHandler:(nullable void (^)(void))completion -{ - [self _setCenterCoordinate:self.userLocation.location.coordinate - edgePadding:self.edgePaddingForFollowing - zoomLevel:self.zoomLevel - direction:self.directionByFollowingWithCourse - duration:animated ? MGLUserLocationAnimationDuration : 0 - animationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear] - completionHandler:completion]; -} - -/// Changes the viewport based on a significant location update, such as the -/// first location update. -- (void)didUpdateLocationSignificantlyAnimated:(BOOL)animated completionHandler:(nullable void (^)(void))completion -{ - - if (_distanceFromOldUserLocation >= MGLDistanceThresholdForCameraPause) { - self.userTrackingState = MGLUserTrackingStateBeginSignificantTransition; - } else { - self.userTrackingState = MGLUserTrackingStateBegan; - } - - MGLMapCamera *camera = self.camera; - camera.centerCoordinate = self.userLocation.location.coordinate; - camera.heading = self.directionByFollowingWithCourse; - if (self.zoomLevel < MGLMinimumZoomLevelForUserTracking) - { - camera.altitude = MGLAltitudeForZoomLevel(MGLDefaultZoomLevelForUserTracking, - camera.pitch, - camera.centerCoordinate.latitude, - self.frame.size); - } - - __weak MGLMapView *weakSelf = self; - [self _flyToCamera:camera - edgePadding:self.edgePaddingForFollowing - withDuration:animated ? -1 : 0 - peakAltitude:-1 - completionHandler:^{ - MGLMapView *strongSelf = weakSelf; - if (strongSelf.userTrackingState == MGLUserTrackingStateBegan || - strongSelf.userTrackingState == MGLDistanceThresholdForCameraPause) - { - strongSelf.userTrackingState = MGLUserTrackingStateChanged; - } - if (completion) - { - completion(); - } - }]; -} - -/// Changes the viewport based on a location update in the presence of a target -/// coordinate that must also be displayed on the map concurrently. -- (void)didUpdateLocationWithTargetAnimated:(BOOL)animated completionHandler:(nullable void (^)(void))completion -{ - BOOL firstUpdate = self.userTrackingState == MGLUserTrackingStatePossible; - void (^animationCompletion)(void); - if (animated && firstUpdate) - { - self.userTrackingState = MGLUserTrackingStateBegan; - __weak MGLMapView *weakSelf = self; - animationCompletion = ^{ - MGLMapView *strongSelf = weakSelf; - if (strongSelf.userTrackingState == MGLUserTrackingStateBegan) - { - strongSelf.userTrackingState = MGLUserTrackingStateChanged; - } - if (completion) - { - completion(); - } - }; - } - - CLLocationCoordinate2D foci[] = { - self.userLocation.location.coordinate, - self.targetCoordinate, - }; - UIEdgeInsets inset = self.edgePaddingForFollowingWithCourse; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (self.userLocationVerticalAlignment == MGLAnnotationVerticalAlignmentCenter) - { - inset.bottom = CGRectGetMaxY(self.bounds) - CGRectGetMidY(self.contentFrame); - } -#pragma clang diagnostic pop - - [self _setVisibleCoordinates:foci - count:sizeof(foci) / sizeof(foci[0]) - edgePadding:inset - direction:self.directionByFollowingWithCourse - duration:animated ? MGLUserLocationAnimationDuration : 0 - animationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear] - completionHandler:animationCompletion]; -} - -/// Returns the edge padding to apply when moving the map to a tracked location. -- (UIEdgeInsets)edgePaddingForFollowing -{ - // Center on user location unless we're already centered there (or very close). - CGPoint correctPoint = self.userLocationAnnotationViewCenter; - - // Shift the entire frame upward or downward to accommodate a shifted user - // location annotation view. - CGRect bounds = self.bounds; - CGRect boundsAroundCorrectPoint = CGRectOffset(bounds, - correctPoint.x - CGRectGetMidX(bounds), - correctPoint.y - CGRectGetMidY(bounds)); - return UIEdgeInsetsMake(CGRectGetMinY(boundsAroundCorrectPoint) - CGRectGetMinY(bounds), - CGRectGetMaxX(boundsAroundCorrectPoint) - CGRectGetMaxX(bounds), - CGRectGetMaxY(bounds) - CGRectGetMaxY(boundsAroundCorrectPoint), - CGRectGetMaxX(bounds) - CGRectGetMaxX(boundsAroundCorrectPoint)); -} - -/// Returns the edge padding to apply during bifocal course tracking. -- (UIEdgeInsets)edgePaddingForFollowingWithCourse -{ - UIEdgeInsets inset = MGLUserLocationAnnotationViewInset; - inset.top += CGRectGetHeight(self.userLocationAnnotationView.frame); - inset.bottom += CGRectGetHeight(self.userLocationAnnotationView.frame); - return inset; -} - -/// Returns the direction the map should be turned to due to course tracking. -- (CLLocationDirection)directionByFollowingWithCourse -{ - CLLocationDirection direction = -1; - if (self.userTrackingMode == MGLUserTrackingModeFollowWithCourse) - { - if (CLLocationCoordinate2DIsValid(self.targetCoordinate)) - { - mbgl::LatLng userLatLng = MGLLatLngFromLocationCoordinate2D(self.userLocation.coordinate); - mbgl::LatLng targetLatLng = MGLLatLngFromLocationCoordinate2D(self.targetCoordinate); - mbgl::ProjectedMeters userMeters = mbgl::Projection::projectedMetersForLatLng(userLatLng); - mbgl::ProjectedMeters targetMeters = mbgl::Projection::projectedMetersForLatLng(targetLatLng); - double angle = atan2(targetMeters.easting() - userMeters.easting(), - targetMeters.northing() - userMeters.northing()); - direction = mbgl::util::wrap(MGLDegreesFromRadians(angle), 0., 360.); - } - else - { - direction = self.userLocation.location.course; - } - - if (direction >= 0) - { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (self.userLocationVerticalAlignment == MGLAnnotationVerticalAlignmentTop) - { - direction += 180; - } -#pragma clang diagnostic pop - } - } - return direction; -} - -- (BOOL)locationManagerShouldDisplayHeadingCalibration:(id)manager -{ - if (self.displayHeadingCalibration) [self performSelector:@selector(dismissHeadingCalibrationDisplay:) - withObject:manager - afterDelay:10.0]; - - return self.displayHeadingCalibration; -} - -- (void)dismissHeadingCalibrationDisplay:(id)manager -{ - [manager dismissHeadingCalibrationDisplay]; -} - -- (void)locationManager:(__unused id)manager didUpdateHeading:(CLHeading *)newHeading -{ - if ( ! _showsUserLocation || self.pan.state == UIGestureRecognizerStateBegan || newHeading.headingAccuracy < 0) return; - - self.userLocation.heading = newHeading; - - if (self.showsUserHeadingIndicator || self.userTrackingMode == MGLUserTrackingModeFollowWithHeading) - { - [self updateUserLocationAnnotationView]; - } - - if ([self.delegate respondsToSelector:@selector(mapView:didUpdateUserLocation:)]) - { - [self.delegate mapView:self didUpdateUserLocation:self.userLocation]; - - if ( ! _showsUserLocation) return; - } - - CLLocationDirection headingDirection = (newHeading.trueHeading >= 0 ? newHeading.trueHeading : newHeading.magneticHeading); - - if (headingDirection >= 0 && self.userTrackingMode == MGLUserTrackingModeFollowWithHeading - && self.userTrackingState != MGLUserTrackingStateBegan) - { - [self _setDirection:headingDirection animated:YES]; - } -} - -- (void)locationManager:(__unused id)manager didFailWithError:(NSError *)error -{ - if ([error code] == kCLErrorDenied) - { - self.userTrackingMode = MGLUserTrackingModeNone; - self.showsUserLocation = NO; - - if ([self.delegate respondsToSelector:@selector(mapView:didFailToLocateUserWithError:)]) - { - [self.delegate mapView:self didFailToLocateUserWithError:error]; - } - } -} - -- (void)updateHeadingForDeviceOrientation -{ - if (self.locationManager) - { - // note that right/left device and interface orientations are opposites (see UIApplication.h) - // - CLDeviceOrientation orientation; - switch ([[UIApplication sharedApplication] statusBarOrientation]) - { - case (UIInterfaceOrientationLandscapeLeft): - { - orientation = CLDeviceOrientationLandscapeRight; - break; - } - case (UIInterfaceOrientationLandscapeRight): - { - orientation = CLDeviceOrientationLandscapeLeft; - break; - } - case (UIInterfaceOrientationPortraitUpsideDown): - { - orientation = CLDeviceOrientationPortraitUpsideDown; - break; - } - case (UIInterfaceOrientationPortrait): - default: - { - orientation = CLDeviceOrientationPortrait; - break; - } - } - - // Setting the location manager's heading orientation causes it to send - // a heading event, which in turn makes us redraw, which kicks off a - // loop... so don't do that. rdar://34059173 - if (self.locationManager.headingOrientation != orientation) - { - self.locationManager.headingOrientation = orientation; - } - } -} - -#pragma mark Data - -- (NSArray> *)visibleFeaturesAtPoint:(CGPoint)point -{ - MGLLogDebug(@"Querying visibleFeaturesAtPoint: %@", NSStringFromCGPoint(point)); - return [self visibleFeaturesAtPoint:point inStyleLayersWithIdentifiers:nil]; -} - -- (NSArray> *)visibleFeaturesAtPoint:(CGPoint)point inStyleLayersWithIdentifiers:(NSSet *)styleLayerIdentifiers { - MGLLogDebug(@"Querying visibleFeaturesAtPoint: %@ inStyleLayersWithIdentifiers: %@", NSStringFromCGPoint(point), styleLayerIdentifiers); - return [self visibleFeaturesAtPoint:point inStyleLayersWithIdentifiers:styleLayerIdentifiers predicate:nil]; -} - -- (NSArray> *)visibleFeaturesAtPoint:(CGPoint)point inStyleLayersWithIdentifiers:(NSSet *)styleLayerIdentifiers predicate:(NSPredicate *)predicate -{ - MGLLogDebug(@"Querying visibleFeaturesAtPoint: %@ inStyleLayersWithIdentifiers: %@ predicate: %@", NSStringFromCGPoint(point), styleLayerIdentifiers, predicate); - mbgl::ScreenCoordinate screenCoordinate = { point.x, point.y }; - - mbgl::optional> optionalLayerIDs; - if (styleLayerIdentifiers) - { - __block std::vector layerIDs; - layerIDs.reserve(styleLayerIdentifiers.count); - [styleLayerIdentifiers enumerateObjectsUsingBlock:^(NSString * _Nonnull identifier, BOOL * _Nonnull stop) - { - layerIDs.push_back(identifier.UTF8String); - }]; - optionalLayerIDs = layerIDs; - } - - mbgl::optional optionalFilter; - if (predicate) { - optionalFilter = predicate.mgl_filter; - } - - std::vector features = _rendererFrontend->getRenderer()->queryRenderedFeatures(screenCoordinate, { optionalLayerIDs, optionalFilter }); - return MGLFeaturesFromMBGLFeatures(features); -} - -- (NSArray> *)visibleFeaturesInRect:(CGRect)rect { - MGLLogDebug(@"Querying visibleFeaturesInRect: %@", NSStringFromCGRect(rect)); - return [self visibleFeaturesInRect:rect inStyleLayersWithIdentifiers:nil]; -} - -- (NSArray> *)visibleFeaturesInRect:(CGRect)rect inStyleLayersWithIdentifiers:(NSSet *)styleLayerIdentifiers { - MGLLogDebug(@"Querying visibleFeaturesInRect: %@ inStyleLayersWithIdentifiers: %@", NSStringFromCGRect(rect), styleLayerIdentifiers); - return [self visibleFeaturesInRect:rect inStyleLayersWithIdentifiers:styleLayerIdentifiers predicate:nil]; -} - -- (NSArray> *)visibleFeaturesInRect:(CGRect)rect inStyleLayersWithIdentifiers:(NSSet *)styleLayerIdentifiers predicate:(NSPredicate *)predicate { - MGLLogDebug(@"Querying visibleFeaturesInRect: %@ inStyleLayersWithIdentifiers: %@ predicate: %@", NSStringFromCGRect(rect), styleLayerIdentifiers, predicate); - mbgl::ScreenBox screenBox = { - { CGRectGetMinX(rect), CGRectGetMinY(rect) }, - { CGRectGetMaxX(rect), CGRectGetMaxY(rect) }, - }; - - mbgl::optional> optionalLayerIDs; - if (styleLayerIdentifiers) { - __block std::vector layerIDs; - layerIDs.reserve(styleLayerIdentifiers.count); - [styleLayerIdentifiers enumerateObjectsUsingBlock:^(NSString * _Nonnull identifier, BOOL * _Nonnull stop) { - layerIDs.push_back(identifier.UTF8String); - }]; - optionalLayerIDs = layerIDs; - } - - mbgl::optional optionalFilter; - if (predicate) { - optionalFilter = predicate.mgl_filter; - } - - std::vector features = _rendererFrontend->getRenderer()->queryRenderedFeatures(screenBox, { optionalLayerIDs, optionalFilter }); - return MGLFeaturesFromMBGLFeatures(features); -} - -#pragma mark - Utility - - -- (void)animateWithDelay:(NSTimeInterval)delay animations:(void (^)(void))animations -{ - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), animations); -} - -- (CGFloat)currentMinimumZoom -{ - return fmaxf(*self.mbglMap.getBounds().minZoom, MGLMinimumZoom); -} - -- (BOOL)isRotationAllowed -{ - return (self.zoomLevel >= self.currentMinimumZoom); -} - -- (void)unrotateIfNeededForGesture -{ - // Avoid contention with in-progress gestures. - UIGestureRecognizerState state = self.pinch.state; - if (self.direction != 0 - && state != UIGestureRecognizerStateBegan - && state != UIGestureRecognizerStateChanged) - { - [self unrotateIfNeededAnimated:YES]; - - // Snap to north. - if ((self.direction < MGLToleranceForSnappingToNorth - || self.direction > 360 - MGLToleranceForSnappingToNorth) - && self.userTrackingMode != MGLUserTrackingModeFollowWithHeading - && self.userTrackingMode != MGLUserTrackingModeFollowWithCourse) - { - [self resetNorthAnimated:YES]; - } - } -} - -/// Rotate back to true north if the map view is zoomed too far out. -- (void)unrotateIfNeededAnimated:(BOOL)animated -{ - if (self.direction != 0 && ! self.isRotationAllowed - && self.userTrackingState != MGLUserTrackingStateBegan) - { - if (animated) - { - self.userInteractionEnabled = NO; - - __weak MGLMapView *weakSelf = self; - - [self animateWithDelay:0.1 animations:^ - { - [weakSelf resetNorthAnimated:YES]; - - [self animateWithDelay:MGLAnimationDuration animations:^ - { - weakSelf.userInteractionEnabled = YES; - }]; - - }]; - } - else - { - [self resetNorthAnimated:NO]; - } - } -} - -- (void)cameraWillChangeAnimated:(BOOL)animated { - if (!_mbglMap) - { - return; - } - - if ( ! _userLocationAnnotationIsSelected - || self.userTrackingMode == MGLUserTrackingModeNone - || self.userTrackingState != MGLUserTrackingStateChanged) - { - UIView *calloutView = self.calloutViewForSelectedAnnotation; - BOOL dismissesAutomatically = (calloutView - && [calloutView respondsToSelector:@selector(dismissesAutomatically)] - && calloutView.dismissesAutomatically); - // dismissesAutomatically is an optional property and we want to dismiss - // the callout view if it's unimplemented. - if (dismissesAutomatically || (calloutView && ![calloutView respondsToSelector:@selector(dismissesAutomatically)])) - { - [self deselectAnnotation:self.selectedAnnotation animated:NO]; - } - } - - if ( ! [self isSuppressingChangeDelimiters] ) - { - if ([self.delegate respondsToSelector:@selector(mapView:regionWillChangeWithReason:animated:)]) - { - [self.delegate mapView:self regionWillChangeWithReason:self.cameraChangeReasonBitmask animated:animated]; - } - else if ([self.delegate respondsToSelector:@selector(mapView:regionWillChangeAnimated:)]) - { - [self.delegate mapView:self regionWillChangeAnimated:animated]; - } - } -} - -- (void)cameraIsChanging { - if (!_mbglMap) - { - return; - } - - [self updateCompass]; - [self updateScaleBar]; - - if ([self.delegate respondsToSelector:@selector(mapView:regionIsChangingWithReason:)]) - { - [self.delegate mapView:self regionIsChangingWithReason:self.cameraChangeReasonBitmask]; - } - else if ([self.delegate respondsToSelector:@selector(mapViewRegionIsChanging:)]) - { - [self.delegate mapViewRegionIsChanging:self]; - } -} - -- (void)cameraDidChangeAnimated:(BOOL)animated { - if (!_mbglMap) - { - return; - } - - [self updateCompass]; - [self updateScaleBar]; - - if ( ! [self isSuppressingChangeDelimiters]) - { - BOOL respondsToSelector = [self.delegate respondsToSelector:@selector(mapView:regionDidChangeAnimated:)]; - BOOL respondsToSelectorWithReason = [self.delegate respondsToSelector:@selector(mapView:regionDidChangeWithReason:animated:)]; - - if ((respondsToSelector || respondsToSelectorWithReason) && - ([UIApplication sharedApplication].applicationState == UIApplicationStateActive)) - { - _featureAccessibilityElements = nil; - _visiblePlaceFeatures = nil; - _visibleRoadFeatures = nil; - if (_accessibilityValueAnnouncementIsPending) { - _accessibilityValueAnnouncementIsPending = NO; - [self performSelector:@selector(announceAccessibilityValue) withObject:nil afterDelay:0.1]; - } else { - UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); - } - } - - if (respondsToSelectorWithReason) - { - [self.delegate mapView:self regionDidChangeWithReason:self.cameraChangeReasonBitmask animated:animated]; - } - else if (respondsToSelector) - { - [self.delegate mapView:self regionDidChangeAnimated:animated]; - } - - [self resetCameraChangeReason]; - } -} - -- (void)announceAccessibilityValue -{ - UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, self.accessibilityValue); - UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); -} - -- (void)mapViewWillStartLoadingMap { - if (!_mbglMap) - { - return; - } - - if ([self.delegate respondsToSelector:@selector(mapViewWillStartLoadingMap:)]) - { - [self.delegate mapViewWillStartLoadingMap:self]; - } -} - -- (void)mapViewDidFinishLoadingMap { - if (!_mbglMap) - { - return; - } - - [self.style willChangeValueForKey:@"sources"]; - [self.style didChangeValueForKey:@"sources"]; - [self.style willChangeValueForKey:@"layers"]; - [self.style didChangeValueForKey:@"layers"]; - if ([self.delegate respondsToSelector:@selector(mapViewDidFinishLoadingMap:)]) - { - [self.delegate mapViewDidFinishLoadingMap:self]; - } -} - -- (void)mapViewDidFailLoadingMapWithError:(NSError *)error { - if (!_mbglMap) - { - return; - } - - if ([self.delegate respondsToSelector:@selector(mapViewDidFailLoadingMap:withError:)]) - { - [self.delegate mapViewDidFailLoadingMap:self withError:error]; - } -} - -- (void)mapViewWillStartRenderingFrame { - if (!_mbglMap) - { - return; - } - - if ([self.delegate respondsToSelector:@selector(mapViewWillStartRenderingFrame:)]) - { - [self.delegate mapViewWillStartRenderingFrame:self]; - } -} - -- (void)mapViewDidFinishRenderingFrameFullyRendered:(BOOL)fullyRendered { - if (!_mbglMap) - { - return; - } - - if (_isChangingAnnotationLayers) - { - _isChangingAnnotationLayers = NO; - [self.style didChangeValueForKey:@"layers"]; - } - - if ([self.delegate respondsToSelector:@selector(mapViewDidFinishRenderingFrame:fullyRendered:)]) - { - [self.delegate mapViewDidFinishRenderingFrame:self fullyRendered:fullyRendered]; - } -} - -- (void)mapViewWillStartRenderingMap { - if (!_mbglMap) - { - return; - } - - if ([self.delegate respondsToSelector:@selector(mapViewWillStartRenderingMap:)]) - { - [self.delegate mapViewWillStartRenderingMap:self]; - } -} - -- (void)mapViewDidFinishRenderingMapFullyRendered:(BOOL)fullyRendered { - if (!_mbglMap) - { - return; - } - - UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); - - if ([self.delegate respondsToSelector:@selector(mapViewDidFinishRenderingMap:fullyRendered:)]) - { - [self.delegate mapViewDidFinishRenderingMap:self fullyRendered:fullyRendered]; - } -} - -- (void)mapViewDidBecomeIdle { - if (!_mbglMap) { - return; - } - - if ([self.delegate respondsToSelector:@selector(mapViewDidBecomeIdle:)]) { - [self.delegate mapViewDidBecomeIdle:self]; - } -} - -- (void)mapViewDidFinishLoadingStyle { - if (!_mbglMap) - { - return; - } - - self.style = [[MGLStyle alloc] initWithRawStyle:&self.mbglMap.getStyle() mapView:self]; - if ([self.delegate respondsToSelector:@selector(mapView:didFinishLoadingStyle:)]) - { - [self.delegate mapView:self didFinishLoadingStyle:self.style]; - } -} - -- (void)sourceDidChange:(MGLSource *)source { - // no-op: we only show attribution after tapping the info button, so there's no - // interactive update needed. -} - -- (void)didFailToLoadImage:(NSString *)imageName { - - if ([self.delegate respondsToSelector:@selector(mapView:didFailToLoadImage:)]) { - MGLImage *imageToLoad = [self.delegate mapView:self didFailToLoadImage:imageName]; - if (imageToLoad) { - auto image = [imageToLoad mgl_styleImageWithIdentifier:imageName]; - _mbglMap->getStyle().addImage(std::move(image)); - } - } -} - -- (BOOL)shouldRemoveStyleImage:(NSString *)imageName { - if ([self.delegate respondsToSelector:@selector(mapView:shouldRemoveStyleImage:)]) { - return [self.delegate mapView:self shouldRemoveStyleImage:imageName]; - } - - return YES; -} - -- (void)updateUserLocationAnnotationView -{ - [self updateUserLocationAnnotationViewAnimatedWithDuration:0]; -} - -- (void)updateAnnotationViews -{ - BOOL delegateImplementsViewForAnnotation = [self.delegate respondsToSelector:@selector(mapView:viewForAnnotation:)]; - - if (!delegateImplementsViewForAnnotation) - { - return; - } - - // If the map is pitched consider the viewport to be exactly the same as the bounds. - // Otherwise, add a small buffer. - CGFloat largestWidth = MAX(_largestAnnotationViewSize.width, CGRectGetWidth(self.frame)); - CGFloat largestHeight = MAX(_largestAnnotationViewSize.height, CGRectGetHeight(self.frame)); - CGFloat widthAdjustment = self.camera.pitch > 0.0 ? 0.0 : -largestWidth * 2.0; - CGFloat heightAdjustment = self.camera.pitch > 0.0 ? 0.0 : -largestHeight * 2.0; - CGRect viewPort = CGRectInset(self.bounds, widthAdjustment, heightAdjustment); - - NSArray *visibleAnnotations = [self visibleAnnotationsInRect:viewPort]; - NSMutableArray *offscreenAnnotations = [self.annotations mutableCopy]; - [offscreenAnnotations removeObjectsInArray:visibleAnnotations]; - - // Update the center of visible annotation views - for (id annotation in visibleAnnotations) - { - // Defer to the shape/polygon styling delegate methods - if ([annotation isKindOfClass:[MGLMultiPoint class]]) - { - continue; - } - - // Get the annotation tag then use it to get the context. - MGLAnnotationTag annotationTag = [self annotationTagForAnnotation:annotation]; - MGLAssert(annotationTag != MGLAnnotationTagNotFound, @"-visibleAnnotationsInRect: returned unrecognized annotation"); - MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(annotationTag); - - MGLAnnotationView *annotationView = annotationContext.annotationView; - if (!annotationView) - { - // This will dequeue views if the delegate implements the dequeue call - annotationView = [self annotationViewForAnnotation:annotationContext.annotation]; - - if (annotationView) - { - annotationView.mapView = self; - annotationContext.annotationView = annotationView; - - // New annotation (created because there is nothing to dequeue) may not have been added to the - // container view yet. Add them here. - if (!annotationView.superview) { - [self.annotationContainerView insertSubview:annotationView atIndex:0]; - } - } - } - - if (annotationView) - { - annotationView.center = MGLPointRounded([self convertCoordinate:annotationContext.annotation.coordinate toPointToView:self]); - } - } - - MGLCoordinateBounds coordinateBounds = [self convertRect:viewPort toCoordinateBoundsFromView:self]; - - // Enqueue (and move if required) offscreen annotation views - for (id annotation in offscreenAnnotations) - { - // Defer to the shape/polygon styling delegate methods - if ([annotation isKindOfClass:[MGLMultiPoint class]]) - { - continue; - } - - MGLAnnotationTag annotationTag = [self annotationTagForAnnotation:annotation]; - MGLAssert(annotationTag != MGLAnnotationTagNotFound, @"-visibleAnnotationsInRect: returned unrecognized annotation"); - MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(annotationTag); - UIView *annotationView = annotationContext.annotationView; - - if (annotationView) - { - CLLocationCoordinate2D coordinate = annotation.coordinate; - // Every so often (1 out of 1000 frames?) the mbgl query mechanism fails. This logic spot checks the - // offscreenAnnotations values -- if they are actually still on screen then the view center is - // moved and the enqueue operation is avoided. This allows us to keep the performance benefit of - // using the mbgl query result. It also forces views that have just gone offscreen to be cleared - // fully from view. - if (MGLCoordinateInCoordinateBounds(coordinate, coordinateBounds)) - { - annotationView.center = [self convertCoordinate:annotationContext.annotation.coordinate toPointToView:self]; - } - else - { - if (annotationView.layer.animationKeys.count > 0) { - continue; - } - - // Move the annotation view far out of view to the left - CGPoint adjustedCenter = annotationView.center; - adjustedCenter.x = -CGRectGetWidth(self.frame) * 10.0; - annotationView.center = adjustedCenter; - - [self enqueueAnnotationViewForAnnotationContext:annotationContext]; - } - } - } -} - -- (BOOL)hasAnAnchoredAnnotationCalloutView -{ - // TODO: Remove duplicate code. - UIView *calloutView = self.calloutViewForSelectedAnnotation; - id annotation = calloutView.representedObject; - - BOOL isAnchoredToAnnotation = (calloutView - && annotation - && [calloutView respondsToSelector:@selector(isAnchoredToAnnotation)] - && calloutView.isAnchoredToAnnotation); - return isAnchoredToAnnotation; -} - -- (void)updateCalloutView -{ - UIView *calloutView = self.calloutViewForSelectedAnnotation; - id annotation = calloutView.representedObject; - - BOOL isAnchoredToAnnotation = (calloutView - && annotation - && [calloutView respondsToSelector:@selector(isAnchoredToAnnotation)] - && calloutView.isAnchoredToAnnotation); - - if (isAnchoredToAnnotation) - { - MGLAnnotationTag tag = [self annotationTagForAnnotation:annotation]; - MGLAnnotationView *annotationView = nil; - - if (tag != MGLAnnotationTagNotFound) { - MGLAnnotationContext &annotationContext = _annotationContextsByAnnotationTag.at(tag); - annotationView = annotationContext.annotationView; - } else if (annotation == self.userLocation) { - annotationView = self.userLocationAnnotationView; - } - - CGRect positioningRect = annotationView ? - annotationView.frame : - [self positioningRectForCalloutForAnnotationWithTag:tag]; - - MGLAssert( ! CGRectIsNull(positioningRect), @"Positioning rect should not be CGRectNull by this point"); - - CGPoint centerPoint = CGPointMake(CGRectGetMidX(positioningRect), CGRectGetMinY(positioningRect)); - - if ( ! CGPointEqualToPoint(calloutView.center, centerPoint)) { - calloutView.center = centerPoint; - } - } -} - -- (void)updateAttributionAlertView { - if (self.attributionController.presentingViewController) { - self.attributionController.popoverPresentationController.sourceRect = self.attributionButton.frame; - switch (self.attributionButtonPosition) { - case MGLOrnamentPositionTopLeft: - case MGLOrnamentPositionTopRight: - [self.attributionController.popoverPresentationController setPermittedArrowDirections:UIMenuControllerArrowUp]; - break; - case MGLOrnamentPositionBottomLeft: - case MGLOrnamentPositionBottomRight: - [self.attributionController.popoverPresentationController setPermittedArrowDirections:UIMenuControllerArrowDown]; - break; - } - [self.attributionController.popoverPresentationController.containerView setNeedsLayout]; - } -} - -- (void)enqueueAnnotationViewForAnnotationContext:(MGLAnnotationContext &)annotationContext -{ - MGLAnnotationView *annotationView = annotationContext.annotationView; - - if (!annotationView) return; - - if (annotationContext.viewReuseIdentifier) - { - annotationView.annotation = nil; - NSMutableArray *annotationViewReuseQueue = [self annotationViewReuseQueueForIdentifier:annotationContext.viewReuseIdentifier]; - if (![annotationViewReuseQueue containsObject:annotationView]) - { - [annotationViewReuseQueue addObject:annotationView]; - annotationContext.annotationView = nil; - } - } -} - -- (void)updateUserLocationAnnotationViewAnimatedWithDuration:(NSTimeInterval)duration -{ - MGLUserLocationAnnotationView *annotationView = self.userLocationAnnotationView; - if ( ! CLLocationCoordinate2DIsValid(self.userLocation.coordinate)) { - annotationView.hidden = YES; - return; - } - - CGPoint userPoint; - if (self.userTrackingMode != MGLUserTrackingModeNone - && self.userTrackingState == MGLUserTrackingStateChanged) - { - userPoint = self.userLocationAnnotationViewCenter; - } - else - { - userPoint = MGLPointRounded([self convertCoordinate:self.userLocation.coordinate toPointToView:self]); - } - - if ( ! annotationView.superview) - { - [_mbglView->getView() addSubview:annotationView]; - // Prevents the view from sliding in from the origin. - annotationView.center = userPoint; - } - - if (CGRectContainsPoint(CGRectInset(self.bounds, -MGLAnnotationUpdateViewportOutset.width, - -MGLAnnotationUpdateViewportOutset.height), userPoint)) - { - // Smoothly move the user location annotation view and callout view to - // the new location. - - dispatch_block_t animation = ^{ - if (self.selectedAnnotation == self.userLocation) - { - UIView *calloutView = self.calloutViewForSelectedAnnotation; - calloutView.frame = CGRectOffset(calloutView.frame, - userPoint.x - annotationView.center.x, - userPoint.y - annotationView.center.y); - } - annotationView.center = userPoint; - }; - - if (duration > 0) { - [UIView animateWithDuration:duration - delay:0 - options:(UIViewAnimationOptionCurveLinear | - UIViewAnimationOptionAllowUserInteraction | - UIViewAnimationOptionBeginFromCurrentState) - animations:animation - completion:NULL]; - } - else { - animation(); - } - _userLocationAnimationCompletionDate = [NSDate dateWithTimeIntervalSinceNow:duration]; - - annotationView.hidden = NO; - [annotationView update]; - } - else - { - // User has moved far enough outside of the viewport that showing it or - // its callout would be useless. - annotationView.hidden = YES; - - if (_userLocationAnnotationIsSelected) - { - [self deselectAnnotation:self.selectedAnnotation animated:YES]; - } - } -} - -/// Intended center point of the user location annotation view with respect to -/// the overall map view (but respecting the content inset). -- (CGPoint)userLocationAnnotationViewCenter -{ - if ([self.delegate respondsToSelector:@selector(mapViewUserLocationAnchorPoint:)]) - { - CGPoint anchorPoint = [self.delegate mapViewUserLocationAnchorPoint:self]; - return CGPointMake(anchorPoint.x + self.contentInset.left, anchorPoint.y + self.contentInset.top); - } - - CGRect contentFrame = UIEdgeInsetsInsetRect(self.contentFrame, self.edgePaddingForFollowingWithCourse); - - if (CGRectIsEmpty(contentFrame)) - { - contentFrame = self.contentFrame; - } - - CGPoint center = CGPointMake(CGRectGetMidX(contentFrame), CGRectGetMidY(contentFrame)); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - switch (self.userLocationVerticalAlignment) { - case MGLAnnotationVerticalAlignmentCenter: - break; - case MGLAnnotationVerticalAlignmentTop: - center.y = CGRectGetMinY(contentFrame); - break; - case MGLAnnotationVerticalAlignmentBottom: - center.y = CGRectGetMaxY(contentFrame); - break; - } -#pragma clang diagnostic pop - - return center; -} - -- (void)updateCompass -{ - [self.compassView updateCompass]; -} - -- (void)updateScaleBar -{ - // Use the `hidden` property (instead of `self.showsScale`) so that we don't - // break developers who still rely on the <4.0.0 approach of directly - // setting this property. - if ( ! self.scaleBar.hidden) - { - [(MGLScaleBar *)self.scaleBar setMetersPerPoint:[self metersPerPointAtLatitude:self.centerCoordinate.latitude]]; - } -} - -- (BOOL)isFullyLoaded -{ - return self.mbglMap.isFullyLoaded(); -} - -- (void)prepareForInterfaceBuilder -{ - [super prepareForInterfaceBuilder]; - - self.layer.borderColor = [UIColor colorWithRed:59/255. - green:178/255. - blue:208/255. - alpha:0.8].CGColor; - self.layer.borderWidth = 4; - self.layer.backgroundColor = [UIColor whiteColor].CGColor; - - UIView *diagnosticView = [[UIView alloc] init]; - diagnosticView.translatesAutoresizingMaskIntoConstraints = NO; - [self addSubview:diagnosticView]; - - // Headline - UILabel *headlineLabel = [[UILabel alloc] init]; - headlineLabel.text = NSStringFromClass([self class]); - headlineLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]; - headlineLabel.textAlignment = NSTextAlignmentCenter; - headlineLabel.numberOfLines = 1; - headlineLabel.translatesAutoresizingMaskIntoConstraints = NO; - [headlineLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultLow - forAxis:UILayoutConstraintAxisHorizontal]; - [diagnosticView addSubview:headlineLabel]; - - // Explanation - UILabel *explanationLabel = [[UILabel alloc] init]; - explanationLabel.text = [NSString stringWithFormat:NSLocalizedStringWithDefaultValue(@"DESIGNABLE", nil, nil, @"To display a Mapbox-hosted map here, set %@ to your access token in %@\n\nFor detailed instructions, see:", @"Instructions in Interface Builder designable; {key}, {plist file name}"), @"MGLMapboxAccessToken", @"Info.plist"]; - explanationLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; - explanationLabel.numberOfLines = 0; - explanationLabel.translatesAutoresizingMaskIntoConstraints = NO; - [explanationLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultLow - forAxis:UILayoutConstraintAxisHorizontal]; - [diagnosticView addSubview:explanationLabel]; - - // Link - UIButton *linkButton = [UIButton buttonWithType:UIButtonTypeSystem]; - [linkButton setTitle:NSLocalizedStringWithDefaultValue(@"FIRST_STEPS_URL", nil, nil, @"docs.mapbox.com/help/tutorials/first-steps-ios-sdk", @"Setup documentation URL display string; keep as short as possible") forState:UIControlStateNormal]; - linkButton.translatesAutoresizingMaskIntoConstraints = NO; - linkButton.titleLabel.numberOfLines = 0; - [linkButton setContentCompressionResistancePriority:UILayoutPriorityDefaultLow - forAxis:UILayoutConstraintAxisHorizontal]; - [diagnosticView addSubview:linkButton]; - - // Constraints - NSDictionary *views = @{ - @"container": diagnosticView, - @"headline": headlineLabel, - @"explanation": explanationLabel, - @"link": linkButton, - }; - [self addConstraint: - [NSLayoutConstraint constraintWithItem:diagnosticView - attribute:NSLayoutAttributeCenterYWithinMargins - relatedBy:NSLayoutRelationEqual - toItem:self - attribute:NSLayoutAttributeCenterYWithinMargins - multiplier:1 - constant:0]]; - [self addConstraint: - [NSLayoutConstraint constraintWithItem:diagnosticView - attribute:NSLayoutAttributeTopMargin - relatedBy:NSLayoutRelationGreaterThanOrEqual - toItem:self - attribute:NSLayoutAttributeTopMargin - multiplier:1 - constant:8]]; - [self addConstraint: - [NSLayoutConstraint constraintWithItem:self - attribute:NSLayoutAttributeBottomMargin - relatedBy:NSLayoutRelationGreaterThanOrEqual - toItem:diagnosticView - attribute:NSLayoutAttributeBottomMargin - multiplier:1 - constant:8]]; - [self addConstraints: - [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[container(20@20)]-|" - options:NSLayoutFormatAlignAllCenterY - metrics:nil - views:views]]; - [self addConstraints: - [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[headline]-[explanation]-[link]|" - options:0 - metrics:nil - views:views]]; - [self addConstraints: - [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[headline]|" - options:0 - metrics:nil - views:views]]; - [self addConstraints: - [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[explanation]|" - options:0 - metrics:nil - views:views]]; - [self addConstraints: - [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[link]|" - options:0 - metrics:nil - views:views]]; -} - -- (NSMutableArray *)annotationViewReuseQueueForIdentifier:(NSString *)identifier { - if (!_annotationViewReuseQueueByIdentifier[identifier]) - { - _annotationViewReuseQueueByIdentifier[identifier] = [NSMutableArray array]; - } - - return _annotationViewReuseQueueByIdentifier[identifier]; -} - -@end - -#pragma mark - IBAdditions methods - -@implementation MGLMapView (IBAdditions) - -+ (NSSet *)keyPathsForValuesAffectingStyleURL__ -{ - return [NSSet setWithObject:@"styleURL"]; -} - -- (nullable NSString *)styleURL__ -{ - return self.styleURL.absoluteString; -} - -- (void)setStyleURL__:(nullable NSString *)URLString -{ - URLString = [URLString stringByTrimmingCharactersInSet: - [NSCharacterSet whitespaceAndNewlineCharacterSet]]; - NSURL *url = URLString.length ? [NSURL URLWithString:URLString] : nil; - if (URLString.length && !url) - { - [NSException raise:MGLInvalidStyleURLException - format:@"“%@” is not a valid style URL.", URLString]; - } - self.styleURL = url; -} - -+ (NSSet *)keyPathsForValuesAffectingLatitude -{ - return [NSSet setWithObjects:@"centerCoordinate", @"camera", nil]; -} - -- (double)latitude -{ - return self.centerCoordinate.latitude; -} - -- (void)setLatitude:(double)latitude -{ - if ( ! isnan(_pendingLongitude)) - { - self.centerCoordinate = CLLocationCoordinate2DMake(latitude, _pendingLongitude); - _pendingLatitude = NAN; - _pendingLongitude = NAN; - } - else - { - // Not enough info to make a valid center coordinate yet. Stash this - // latitude away until the longitude is set too. - _pendingLatitude = latitude; - } -} - -+ (NSSet *)keyPathsForValuesAffectingLongitude -{ - return [NSSet setWithObjects:@"centerCoordinate", @"camera", nil]; -} - -- (double)longitude -{ - return self.centerCoordinate.longitude; -} - -- (void)setLongitude:(double)longitude -{ - if ( ! isnan(_pendingLatitude)) - { - self.centerCoordinate = CLLocationCoordinate2DMake(_pendingLatitude, longitude); - _pendingLatitude = NAN; - _pendingLongitude = NAN; - } - else - { - // Not enough info to make a valid center coordinate yet. Stash this - // longitude away until the latitude is set too. - _pendingLongitude = longitude; - } -} - -+ (NSSet *)keyPathsForValuesAffectingAllowsZooming -{ - return [NSSet setWithObject:@"zoomEnabled"]; -} - -- (BOOL)allowsZooming -{ - return self.zoomEnabled; -} - -- (void)setAllowsZooming:(BOOL)allowsZooming -{ - MGLLogDebug(@"Setting allowsZooming: %@", MGLStringFromBOOL(allowsZooming)); - self.zoomEnabled = allowsZooming; -} - -+ (NSSet *)keyPathsForValuesAffectingAllowsScrolling -{ - return [NSSet setWithObject:@"scrollEnabled"]; -} - -- (BOOL)allowsScrolling -{ - return self.scrollEnabled; -} - -- (void)setAllowsScrolling:(BOOL)allowsScrolling -{ - MGLLogDebug(@"Setting allowsScrolling: %@", MGLStringFromBOOL(allowsScrolling)); - self.scrollEnabled = allowsScrolling; -} - -+ (NSSet *)keyPathsForValuesAffectingAllowsRotating -{ - return [NSSet setWithObject:@"rotateEnabled"]; -} - -- (BOOL)allowsRotating -{ - return self.rotateEnabled; -} - -- (void)setAllowsRotating:(BOOL)allowsRotating -{ - MGLLogDebug(@"Setting allowsRotating: %@", MGLStringFromBOOL(allowsRotating)); - self.rotateEnabled = allowsRotating; -} - -+ (NSSet *)keyPathsForValuesAffectingAllowsTilting -{ - return [NSSet setWithObject:@"pitchEnabled"]; -} - -- (BOOL)allowsTilting -{ - return self.pitchEnabled; -} - -- (void)setAllowsTilting:(BOOL)allowsTilting -{ - MGLLogDebug(@"Setting allowsTilting: %@", MGLStringFromBOOL(allowsTilting)); - self.pitchEnabled = allowsTilting; -} - -+ (NSSet *)keyPathsForValuesAffectingShowsHeading -{ - return [NSSet setWithObject:@"showsUserHeadingIndicator"]; -} - -- (BOOL)showsHeading -{ - return self.showsUserHeadingIndicator; -} - -- (void)setShowsHeading:(BOOL)showsHeading -{ - MGLLogDebug(@"Setting showsHeading: %@", MGLStringFromBOOL(showsHeading)); - self.showsUserHeadingIndicator = showsHeading; -} - -@end diff --git a/platform/ios/src/MGLMapViewDelegate.h b/platform/ios/src/MGLMapViewDelegate.h deleted file mode 100644 index 3ddb7b007f0..00000000000 --- a/platform/ios/src/MGLMapViewDelegate.h +++ /dev/null @@ -1,775 +0,0 @@ -#import - -#import "Mapbox.h" -#import "MGLCameraChangeReason.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MGLMapView; - -/** - The `MGLMapViewDelegate` protocol defines a set of optional methods that you - can use to receive map-related update messages. Because many map operations - require the `MGLMapView` class to load data asynchronously, the map view calls - these methods to notify your application when specific operations complete. The - map view also uses these methods to request information about annotations - displayed on the map, such as the styles and interaction modes to apply to - individual annotations. - */ -@protocol MGLMapViewDelegate - -@optional - -#pragma mark Responding to Map Position Changes - -/** - Asks the delegate whether the map view should be allowed to change from the - existing camera to the new camera in response to a user gesture. - - This method is called as soon as the user gesture is recognized. It is not - called in response to a programmatic camera change, such as by setting the - `centerCoordinate` property or calling `-flyToCamera:completionHandler:`. - - This method is called many times during gesturing, so you should avoid performing - complex or performance-intensive tasks in your implementation. - - @param mapView The map view that the user is manipulating. - @param oldCamera The camera representing the viewpoint at the moment the - gesture is recognized. If this method returns `NO`, the map view’s camera - continues to be this camera. - @param newCamera The expected camera after the gesture completes. If this - method returns `YES`, this camera becomes the map view’s camera. - @return A Boolean value indicating whether the map view should stay at - `oldCamera` or change to `newCamera`. - - #### Related examples - See the - Restrict map panning to an area example to learn how to use this method - and `MGLMapCamera` objects to restrict a users ability to pan your map. - */ -- (BOOL)mapView:(MGLMapView *)mapView shouldChangeFromCamera:(MGLMapCamera *)oldCamera toCamera:(MGLMapCamera *)newCamera; - -/** - :nodoc: - Asks the delegate whether the map view should be allowed to change from the - existing camera to the new camera in response to a user gesture. - - This method is called as soon as the user gesture is recognized. It is not - called in response to a programmatic camera change, such as by setting the - `centerCoordinate` property or calling `-flyToCamera:completionHandler:`. - - This method is called many times during gesturing, so you should avoid performing - complex or performance-intensive tasks in your implementation. - - @param mapView The map view that the user is manipulating. - @param oldCamera The camera representing the viewpoint at the moment the - gesture is recognized. If this method returns `NO`, the map view’s camera - continues to be this camera. - @param newCamera The expected camera after the gesture completes. If this - method returns `YES`, the viewport of the map will transition to the new camera. Note that the new camera cannot be modified. - @param reason The reason for the camera change. - @return A Boolean value indicating whether the map view should stay at - `oldCamera` or transition to `newCamera`. - - @note If this method is implemented `-mapView:shouldChangeFromCamera:toCamera:` will not be called. - */ -- (BOOL)mapView:(MGLMapView *)mapView shouldChangeFromCamera:(MGLMapCamera *)oldCamera toCamera:(MGLMapCamera *)newCamera reason:(MGLCameraChangeReason)reason; - -/** - Tells the delegate that the viewpoint depicted by the map view is about to change. - - This method is called whenever the currently displayed map camera will start - changing for any reason. - - @param mapView The map view whose viewpoint will change. - @param animated Whether the change will cause an animated effect on the map. - */ -- (void)mapView:(MGLMapView *)mapView regionWillChangeAnimated:(BOOL)animated; - -/** - :nodoc: - Tells the delegate that the viewpoint depicted by the map view is about to change. - - This method is called whenever the currently displayed map camera will start - changing for any reason. - - @param mapView The map view whose viewpoint will change. - @param animated Whether the change will cause an animated effect on the map. - @param reason The reason for the camera change. - - @note If this method is implemented `-mapView:regionWillChangeAnimated:` will not be called. - */ -- (void)mapView:(MGLMapView *)mapView regionWillChangeWithReason:(MGLCameraChangeReason)reason animated:(BOOL)animated; - -/** - Tells the delegate that the viewpoint depicted by the map view is changing. - - This method is called as the currently displayed map camera changes as part of - an animation, whether due to a user gesture or due to a call to a method such - as `-[MGLMapView setCamera:animated:]`. This method can be called before - `-mapViewDidFinishLoadingMap:` is called. - - During the animation, this method may be called many times to report updates to - the viewpoint. Therefore, your implementation of this method should be as lightweight - as possible to avoid affecting performance. - - @param mapView The map view whose viewpoint is changing. - - #### Related examples - See the - Cluster point data example to learn how to trigger an action whenever - the map region changes. - */ -- (void)mapViewRegionIsChanging:(MGLMapView *)mapView; - -/** - :nodoc: - Tells the delegate that the viewpoint depicted by the map view is changing. - - This method is called as the currently displayed map camera changes as part of - an animation, whether due to a user gesture or due to a call to a method such - as `-[MGLMapView setCamera:animated:]`. This method can be called before - `-mapViewDidFinishLoadingMap:` is called. - - During the animation, this method may be called many times to report updates to - the viewpoint. Therefore, your implementation of this method should be as lightweight - as possible to avoid affecting performance. - - @param mapView The map view whose viewpoint is changing. - @param reason The reason for the camera change. - - @note If this method is implemented `-mapViewRegionIsChanging:` will not be called. - */ -- (void)mapView:(MGLMapView *)mapView regionIsChangingWithReason:(MGLCameraChangeReason)reason; - -/** - Tells the delegate that the viewpoint depicted by the map view has finished - changing. - - This method is called whenever the currently displayed map camera has finished - changing, after any calls to `-mapViewRegionIsChanging:` due to animation. Therefore, - this method can be called before `-mapViewDidFinishLoadingMap:` is called. - - @param mapView The map view whose viewpoint has changed. - @param animated Whether the change caused an animated effect on the map. - */ -- (void)mapView:(MGLMapView *)mapView regionDidChangeAnimated:(BOOL)animated; - -/** - :nodoc: - Tells the delegate that the viewpoint depicted by the map view has finished - changing. - - This method is called whenever the currently displayed map camera has finished - changing, after any calls to `-mapViewRegionIsChanging:` due to animation. Therefore, - this method can be called before `-mapViewDidFinishLoadingMap:` is called. - - @param mapView The map view whose viewpoint has changed. - @param animated Whether the change caused an animated effect on the map. - @param reason The reason for the camera change. - - @note If this method is implemented `-mapView:regionDidChangeAnimated:` will not be called. - */ -- (void)mapView:(MGLMapView *)mapView regionDidChangeWithReason:(MGLCameraChangeReason)reason animated:(BOOL)animated; - -#pragma mark Loading the Map - -/** - Tells the delegate that the map view will begin to load. - - This method is called whenever the map view starts loading, including when a - new style has been set and the map must reload. - - @param mapView The map view that is starting to load. - */ -- (void)mapViewWillStartLoadingMap:(MGLMapView *)mapView; - -/** - Tells the delegate that the map view has finished loading. - - This method is called whenever the map view finishes loading, either after the - initial load or after a style change has forced a reload. - - @param mapView The map view that has finished loading. - */ -- (void)mapViewDidFinishLoadingMap:(MGLMapView *)mapView; - -/** - Tells the delegate that the map view was unable to load data needed for - displaying the map. - - This method may be called for a variety of reasons, including a network - connection failure or a failure to fetch the style from the server. You can use - the given error message to notify the user that map data is unavailable. - - @param mapView The map view that is unable to load the data. - @param error The reason the data could not be loaded. - */ -- (void)mapViewDidFailLoadingMap:(MGLMapView *)mapView withError:(NSError *)error; - -// TODO -- (void)mapViewWillStartRenderingMap:(MGLMapView *)mapView; - -// TODO -- (void)mapViewDidFinishRenderingMap:(MGLMapView *)mapView fullyRendered:(BOOL)fullyRendered; - -/** - Tells the delegate that the map view is about to redraw. - - This method is called any time the map view needs to redraw due to a change in - the viewpoint or style property transition. This method may be called very - frequently, even moreso than `-mapViewRegionIsChanging:`. Therefore, your - implementation of this method should be as lightweight as possible to avoid - affecting performance. - - @param mapView The map view that is about to redraw. - */ -- (void)mapViewWillStartRenderingFrame:(MGLMapView *)mapView; - -/** - Tells the delegate that the map view has just redrawn. - - This method is called any time the map view needs to redraw due to a change in - the viewpoint or style property transition. This method may be called very - frequently, even moreso than `-mapViewRegionIsChanging:`. Therefore, your - implementation of this method should be as lightweight as possible to avoid - affecting performance. - - @param mapView The map view that has just redrawn. - */ -- (void)mapViewDidFinishRenderingFrame:(MGLMapView *)mapView fullyRendered:(BOOL)fullyRendered; - -/** - Tells the delegate that the map view is entering an idle state, and no more - drawing will be necessary until new data is loaded or there is some interaction - with the map. - - - No camera transitions are in progress - - All currently requested tiles have loaded - - All fade/transition animations have completed - - @param mapView The map view that has just entered the idle state. - */ -- (void)mapViewDidBecomeIdle:(MGLMapView *)mapView; - -/** - Tells the delegate that the map has just finished loading a style. - - This method is called during the initialization of the map view and after any - subsequent loading of a new style. This method is called between the - `-mapViewWillStartRenderingMap:` and `-mapViewDidFinishRenderingMap:` delegate - methods. Changes to sources or layers of the current style do not cause this - method to be called. - - This method is the earliest opportunity to modify the layout or appearance of - the current style before the map view is displayed to the user. - - @param mapView The map view that has just loaded a style. - @param style The style that was loaded. - - #### Related examples - See the - Dynamically style interactive points and - Add multiple shapes from a single shape source examples to learn how to - ensure a map's style has loaded before modifying it at runtime. - */ -- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style; - -- (nullable UIImage *)mapView:(MGLMapView *)mapView didFailToLoadImage:(NSString *)imageName; - -/** - Asks the delegate whether the map view should evict cached images. - - This method is called in two scenarios: when the cumulative size of unused images - exceeds the cache size or when the last tile that includes the image is removed from - memory. - - @param mapView The map view that is evicting the image. - @param imageName The image name that is going to be removed. - @return A Boolean value indicating whether the map view should evict - the cached image. - */ -- (BOOL)mapView:(MGLMapView *)mapView shouldRemoveStyleImage:(NSString *)imageName; - -#pragma mark Tracking User Location - -/** - Tells the delegate that the map view will begin tracking the user’s location. - - This method is called when the value of the `showsUserLocation` property - changes to `YES`. - - @param mapView The map view that is tracking the user’s location. - */ -- (void)mapViewWillStartLocatingUser:(MGLMapView *)mapView; - -/** - Tells the delegate that the map view has stopped tracking the user’s location. - - This method is called when the value of the `showsUserLocation` property - changes to `NO`. - - @param mapView The map view that is tracking the user’s location. - */ -- (void)mapViewDidStopLocatingUser:(MGLMapView *)mapView; - -/** - Tells the delegate that the location of the user was updated. - - While the `showsUserLocation` property is set to `YES`, this method is called - whenever a new location update is received by the map view. This method is also - called if the map view’s user tracking mode is set to - `MGLUserTrackingModeFollowWithHeading` and the heading changes, or if it is set - to `MGLUserTrackingModeFollowWithCourse` and the course changes. - - This method is not called if the application is currently running in the - background. If you want to receive location updates while running in the - background, you must use the Core Location framework. - - @param mapView The map view that is tracking the user’s location. - @param userLocation The location object representing the user’s latest - location. This property may be `nil`. - */ -- (void)mapView:(MGLMapView *)mapView didUpdateUserLocation:(nullable MGLUserLocation *)userLocation; - -/** - Tells the delegate that an attempt to locate the user’s position failed. - - @param mapView The map view that is tracking the user’s location. - @param error An error object containing the reason why location tracking - failed. - */ -- (void)mapView:(MGLMapView *)mapView didFailToLocateUserWithError:(NSError *)error; - -/** - Tells the delegate that the map view’s user tracking mode has changed. - - This method is called after the map view asynchronously changes to reflect the - new user tracking mode, for example by beginning to zoom or rotate. - - @param mapView The map view that changed its tracking mode. - @param mode The new tracking mode. - @param animated Whether the change caused an animated effect on the map. - */ -- (void)mapView:(MGLMapView *)mapView didChangeUserTrackingMode:(MGLUserTrackingMode)mode animated:(BOOL)animated; - -/** - Returns a screen coordinate at which to position the user location annotation. - This coordinate is relative to the map view’s origin after applying the map view’s - content insets. - - When unimplemented, the user location annotation is aligned within the center of - the map view with respect to the content insets. - - This method will override any values set by `MGLMapView.userLocationVerticalAlignment` - or `-[MGLMapView setUserLocationVerticalAlignment:animated:]`. - - @param mapView The map view that is tracking the user's location. - */ -- (CGPoint)mapViewUserLocationAnchorPoint:(MGLMapView *)mapView; - -#pragma mark Managing the Appearance of Annotations - -/** - Returns an annotation image object to mark the given point annotation object on - the map. - - Implement this method to mark a point annotation with a static image. If you - want to mark a particular point annotation with an annotation view instead, - omit this method or have it return `nil` for that annotation, then implement - `-mapView:viewForAnnotation:`. - - Static annotation images use less memory and draw more quickly than annotation - views. On the other hand, annotation views are compatible with UIKit, Core - Animation, and other Cocoa Touch frameworks. - - @param mapView The map view that requested the annotation image. - @param annotation The object representing the annotation that is about to be - displayed. - @return The annotation image object to display for the given annotation or - `nil` if you want to display the default marker image or an annotation view. - - #### Related examples - See the - Annotation models, - Add annotation views and images, and - Mark a place on the map with an image examples to learn to specify which - image should be used for `MGLAnnotation` objects that have been added to - your map. - */ -- (nullable MGLAnnotationImage *)mapView:(MGLMapView *)mapView imageForAnnotation:(id )annotation; - -/** - Returns the alpha value to use when rendering a shape annotation. - - A value of `0.0` results in a completely transparent shape. A value of `1.0`, - the default, results in a completely opaque shape. - - This method sets the opacity of an entire shape, inclusive of its stroke and - fill. To independently set the values for stroke or fill, specify an alpha - component in the color returned by `-mapView:strokeColorForShapeAnnotation:` or - `-mapView:fillColorForPolygonAnnotation:`. - - @param mapView The map view rendering the shape annotation. - @param annotation The annotation being rendered. - @return An alpha value between `0` and `1.0`. - */ -- (CGFloat)mapView:(MGLMapView *)mapView alphaForShapeAnnotation:(MGLShape *)annotation; - -/** - Returns the color to use when rendering the outline of a shape annotation. - - The default stroke color is the map view’s tint color. If a pattern color is - specified, the result is undefined. - - Opacity may be set by specifying an alpha component. The default alpha value is - `1.0` and results in a completely opaque stroke. - - @param mapView The map view rendering the shape annotation. - @param annotation The annotation being rendered. - @return A color to use for the shape outline. - - #### Related examples - See the - Annotation models example to learn how to modify the outline color of an - `MGLShape` object that has been added to your map as an annotation. - */ -- (UIColor *)mapView:(MGLMapView *)mapView strokeColorForShapeAnnotation:(MGLShape *)annotation; - -/** - Returns the color to use when rendering the fill of a polygon annotation. - - The default fill color is the map view’s tint color. If a pattern color is - specified, the result is undefined. - - Opacity may be set by specifying an alpha component. The default alpha value is - `1.0` and results in a completely opaque shape. - - @param mapView The map view rendering the polygon annotation. - @param annotation The annotation being rendered. - @return The polygon’s interior fill color. - - #### Related examples - See the Add - a polygon annotation example to learn how to modify the color of a an - `MGLPolygon` at runtime. - */ -- (UIColor *)mapView:(MGLMapView *)mapView fillColorForPolygonAnnotation:(MGLPolygon *)annotation; - -/** - Returns the line width in points to use when rendering the outline of a - polyline annotation. - - By default, the polyline is outlined with a line `3.0` points wide. - - @param mapView The map view rendering the polygon annotation. - @param annotation The annotation being rendered. - @return A line width for the polyline, measured in points. - - #### Related examples - See the - Add a line annotation from GeoJSON example to learn how to modify the - line width of an `MGLPolylineFeature` on your map. - */ -- (CGFloat)mapView:(MGLMapView *)mapView lineWidthForPolylineAnnotation:(MGLPolyline *)annotation; - -#pragma mark Managing Annotation Views - -/** - Returns a view object to mark the given point annotation object on the map. - - Implement this method to mark a point annotation with a view object. If you - want to mark a particular point annotation with a static image instead, omit - this method or have it return `nil` for that annotation, then implement - `-mapView:imageForAnnotation:` instead. - - Annotation views are compatible with UIKit, Core Animation, and other Cocoa - Touch frameworks. On the other hand, static annotation images use less memory - and draw more quickly than annotation views. - - The user location annotation view can also be customized via this method. When - `annotation` is an instance of `MGLUserLocation` (or equal to the map view’s - `userLocation` property), return an instance of `MGLUserLocationAnnotationView` - (or a subclass thereof). - - @param mapView The map view that requested the annotation view. - @param annotation The object representing the annotation that is about to be - displayed. - @return The view object to display for the given annotation or `nil` if you - want to display an annotation image instead. - - #### Related examples - See the - Add annotation views and images example to learn how to specify what - `MGLViewAnnotation` to use for a given `MGLPointAnnotation` object on your - map. - */ -- (nullable MGLAnnotationView *)mapView:(MGLMapView *)mapView viewForAnnotation:(id )annotation; - -/** - Tells the delegate that one or more annotation views have been added and - positioned on the map. - - This method is called just after the views are added to the map. You can - implement this method to animate the addition of the annotation views. - - @param mapView The map view to which the annotation views were added. - @param annotationViews An array of `MGLAnnotationView` objects representing the - views that were added. - */ -- (void)mapView:(MGLMapView *)mapView didAddAnnotationViews:(NSArray *)annotationViews; - -#pragma mark Selecting Annotations - -/** - Returns a Boolean value indicating whether the shape annotation can be selected. - - If the return value is `YES`, the user can select the annotation by tapping - on it. If the delegate does not implement this method, the default value is `YES`. - - @param mapView The map view that has selected the annotation. - @param annotation The object representing the shape annotation. - @return A Boolean value indicating whether the annotation can be selected. - */ -- (BOOL)mapView:(MGLMapView *)mapView shapeAnnotationIsEnabled:(MGLShape *)annotation; - -/** - Tells the delegate that one of its annotations was selected. - - You can use this method to track changes in the selection state of annotations. - - If the annotation is associated with an annotation view, you can also implement - `-mapView:didSelectAnnotationView:`, which is called immediately after this - method is called. - - @param mapView The map view containing the annotation. - @param annotation The annotation that was selected. - - #### Related examples - See the - Dynamically style interactive points example to learn how to remove an - annotation view if it has already been selected. - */ -- (void)mapView:(MGLMapView *)mapView didSelectAnnotation:(id )annotation; - -/** - Tells the delegate that one of its annotations was deselected. - - You can use this method to track changes in the selection state of annotations. - - If the annotation is associated with an annotation view, you can also implement - `-mapView:didDeselectAnnotationView:`, which is called immediately after this - method is called. - - @param mapView The map view containing the annotation. - @param annotation The annotation that was deselected. - */ -- (void)mapView:(MGLMapView *)mapView didDeselectAnnotation:(id )annotation; - -/** - Tells the delegate that one of its annotation views was selected. - - You can use this method to track changes in the selection state of annotation - views. - - This method is only called for annotation views. To track changes in the - selection state of all annotations, including those associated with static - annotation images, implement `-mapView:didSelectAnnotation:`, which is called - immediately before this method is called. - - @param mapView The map view containing the annotation. - @param annotationView The annotation view that was selected. - */ -- (void)mapView:(MGLMapView *)mapView didSelectAnnotationView:(MGLAnnotationView *)annotationView; - -/** - Tells the delegate that one of its annotation views was deselected. - - You can use this method to track changes in the selection state of annotation - views. - - This method is only called for annotation views. To track changes in the - selection state of all annotations, including those associated with static - annotation images, implement `-mapView:didDeselectAnnotation:`, which is called - immediately before this method is called. - - @param mapView The map view containing the annotation. - @param annotationView The annotation view that was deselected. - */ -- (void)mapView:(MGLMapView *)mapView didDeselectAnnotationView:(MGLAnnotationView *)annotationView; - -#pragma mark Managing Callout Views - -/** - Returns a Boolean value indicating whether the annotation is able to display - extra information in a callout bubble. - - This method is called after an annotation is selected, before any callout is - displayed for the annotation. - - If the return value is `YES`, a callout view is shown when the user taps on an - annotation, selecting it. The default callout displays the annotation’s title - and subtitle. You can add accessory views to either end of the callout by - implementing the `-mapView:leftCalloutAccessoryViewForAnnotation:` and - `-mapView:rightCalloutAccessoryViewForAnnotation:` methods. You can further - customize the callout’s contents by implementing the - `-mapView:calloutViewForAnnotation:` method. - - If the return value is `NO`, or if this method is absent from the delegate, or - if the annotation lacks a title, the annotation will not show a callout even - when selected. - - @param mapView The map view that has selected the annotation. - @param annotation The object representing the annotation. - @return A Boolean value indicating whether the annotation should show a - callout. - - #### Related examples - See the - Add annotation views and images, - Display custom views as callouts, and - Default callout usage examples to learn how to show callouts for - `MGLAnnotation` objects. - */ -- (BOOL)mapView:(MGLMapView *)mapView annotationCanShowCallout:(id )annotation; - -/** - Returns a callout view to display for the given annotation. - - If this method is present in the delegate, it must return a new instance of a - view dedicated to display the callout. The returned view will be configured by - the map view. - - If this method is absent from the delegate, or if it returns `nil`, a standard, - two-line, bubble-like callout view is displayed by default. - - @param mapView The map view that requested the callout view. - @param annotation The object representing the annotation. - @return A view conforming to the `MGLCalloutView` protocol, or `nil` to use the - default callout view. - - #### Related examples - See the - Display custom views as callouts example to learn how to customize an - `MGLAnnotation` object's `MGLCalloutView`. - */ -- (nullable id )mapView:(MGLMapView *)mapView calloutViewForAnnotation:(id )annotation; - -/** - Returns the view to display on the left side of the standard callout bubble. - - The left callout view is typically used to convey information about the - annotation or to link to custom information provided by your application. - - If the view you specify is a descendant of the `UIControl` class, you can use - the map view’s delegate to receive notifications when your control is tapped, - by implementing the `-mapView:annotation:calloutAccessoryControlTapped:` - method. If the view you specify does not descend from `UIControl`, your view is - responsible for handling any touch events within its bounds. - - If this method is absent from the delegate, or if it returns `nil`, the - standard callout view has no accessory view on its left side. The return value - of this method is ignored if `-mapView:calloutViewForAnnotation:` is present in - the delegate. - - To display a view on the callout’s right side, implement the - `-mapView:rightCalloutAccessoryViewForAnnotation:` method. - - @param mapView The map view presenting the annotation callout. - @param annotation The object representing the annotation with the callout. - @return The accessory view to display. - - #### Related examples - See the - Default callout usage example to learn how to modify the view that is - displayed on the left side of the standard callout bubble. - */ -- (nullable UIView *)mapView:(MGLMapView *)mapView leftCalloutAccessoryViewForAnnotation:(id )annotation; - -/** - Returns the view to display on the right side of the standard callout bubble. - - The right callout view is typically used to convey information about the - annotation or to link to custom information provided by your application. - - If the view you specify is a descendant of the `UIControl` class, you can use - the map view’s delegate to receive notifications when your control is tapped, - by implementing the `-mapView:annotation:calloutAccessoryControlTapped:` - method. If the view you specify does not descend from `UIControl`, your view is - responsible for handling any touch events within its bounds. - - If this method is absent from the delegate, or if it returns `nil`, the - standard callout view has no accessory view on its right side. The return value - of this method is ignored if `-mapView:calloutViewForAnnotation:` is present in - the delegate. - - To display a view on the callout’s left side, implement the - `-mapView:leftCalloutAccessoryViewForAnnotation:` method. - - @param mapView The map view presenting the annotation callout. - @param annotation The object representing the annotation with the callout. - @return The accessory view to display. - - #### Related examples - See the - Default callout usage example to learn how to modify the view that is - displayed on the right side of the standard callout bubble. - */ -- (nullable UIView *)mapView:(MGLMapView *)mapView rightCalloutAccessoryViewForAnnotation:(id )annotation; - -/** - Tells the delegate that the user tapped one of the accessory controls in the - annotation’s callout view. - - In a standard callout view, accessory views contain custom content and are - positioned on either side of the annotation title text. If an accessory view - you specify is a descendant of the `UIControl` class, the map view calls this - method as a convenience whenever the user taps your view. You can use this - method to respond to taps and perform any actions associated with that control. - For example, if your control displays additional information about the - annotation, you could use this method to present a modal panel with that - information. - - If your custom accessory views are not descendants of the `UIControl` class, - the map view does not call this method. If the annotation has a custom callout - view via the `-mapView:calloutViewForAnnotation:` method, you can specify the - custom accessory views using the `MGLCalloutView` protocol’s - `leftAccessoryView` and `rightAccessoryView` properties. - - @param mapView The map view containing the specified annotation. - @param annotation The annotation whose accessory view was tapped. - @param control The control that was tapped. - - #### Related examples - See the - Default callout usage example to learn how to trigger an action when the - standard callout bubble's accessory control is tapped. - */ -- (void)mapView:(MGLMapView *)mapView annotation:(id )annotation calloutAccessoryControlTapped:(UIControl *)control; - -/** - Tells the delegate that the user tapped on an annotation’s callout view. - - This method is called when the user taps on the body of the callout view, as - opposed to the callout’s left or right accessory view. If the annotation has a - custom callout view via the `-mapView:calloutViewForAnnotation:` method, this - method is only called whenever the callout view calls its delegate’s - `-[MGLCalloutViewDelegate calloutViewTapped:]` method. - - If this method is present on the delegate, the standard callout view’s body - momentarily highlights when the user taps it, whether or not this method does - anything in response to the tap. - - @param mapView The map view containing the specified annotation. - @param annotation The annotation whose callout was tapped. - - #### Related examples - See the - Display custom views as callouts example to learn how to trigger an - action when an `MGLAnnotation`s `MGLCalloutView` is tapped. - */ -- (void)mapView:(MGLMapView *)mapView tapOnCalloutForAnnotation:(id )annotation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLMapView_Experimental.h b/platform/ios/src/MGLMapView_Experimental.h deleted file mode 100644 index 94f8d67fb0c..00000000000 --- a/platform/ios/src/MGLMapView_Experimental.h +++ /dev/null @@ -1,32 +0,0 @@ -#import - -@interface MGLMapView (Experimental) - -#pragma mark Rendering Performance Measurement - -/** Enable rendering performance measurement. */ -@property (nonatomic) BOOL experimental_enableFrameRateMeasurement; - -/** - Average frames per second over the previous second, updated once per second. - - Requires `experimental_enableFrameRateMeasurement`. - */ -@property (nonatomic, readonly) CGFloat averageFrameRate; - -/** - Frame render duration for the previous frame, updated instantaneously. - - Requires `experimental_enableFrameRateMeasurement`. - */ -@property (nonatomic, readonly) CFTimeInterval frameTime; - -/** - Average frame render duration over the previous second, updated once per - second. - - Requires `experimental_enableFrameRateMeasurement`. - */ -@property (nonatomic, readonly) CFTimeInterval averageFrameTime; - -@end diff --git a/platform/ios/src/MGLMapView_Private.h b/platform/ios/src/MGLMapView_Private.h deleted file mode 100644 index 155527000f2..00000000000 --- a/platform/ios/src/MGLMapView_Private.h +++ /dev/null @@ -1,74 +0,0 @@ -#import "MGLMapView.h" -#import "MGLUserLocationAnnotationView.h" -#import "MGLAnnotationContainerView.h" - -#include - -namespace mbgl { - class Map; - class Renderer; -} - -class MGLMapViewImpl; -@class MGLSource; - -/// Standard animation duration for UI elements. -FOUNDATION_EXTERN const NSTimeInterval MGLAnimationDuration; - -/// Minimum size of an annotation’s accessibility element. -FOUNDATION_EXTERN const CGSize MGLAnnotationAccessibilityElementMinimumSize; - -/// Indicates that a method (that uses `mbgl::Map`) was called after app termination. -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const _Nonnull MGLUnderlyingMapUnavailableException; - -@interface MGLMapView (Private) - -/// The map view’s OpenGL rendering context. -@property (nonatomic, readonly, nullable) EAGLContext *context; - -/// Currently shown popover representing the selected annotation. -@property (nonatomic, nonnull) UIView *calloutViewForSelectedAnnotation; - -/// Map observers -- (void)cameraWillChangeAnimated:(BOOL)animated; -- (void)cameraIsChanging; -- (void)cameraDidChangeAnimated:(BOOL)animated; -- (void)mapViewWillStartLoadingMap; -- (void)mapViewDidFinishLoadingMap; -- (void)mapViewDidFailLoadingMapWithError:(nonnull NSError *)error; -- (void)mapViewWillStartRenderingFrame; -- (void)mapViewDidFinishRenderingFrameFullyRendered:(BOOL)fullyRendered; -- (void)mapViewWillStartRenderingMap; -- (void)mapViewDidFinishRenderingMapFullyRendered:(BOOL)fullyRendered; -- (void)mapViewDidBecomeIdle; -- (void)mapViewDidFinishLoadingStyle; -- (void)sourceDidChange:(nonnull MGLSource *)source; -- (void)didFailToLoadImage:(nonnull NSString *)imageName; -- (BOOL)shouldRemoveStyleImage:(nonnull NSString *)imageName; - -/** Triggers another render pass even when it is not necessary. */ -- (void)setNeedsRerender; - -/// Synchronously render a frame of the map. -- (void)renderSync; - -- (nonnull mbgl::Renderer *)renderer; - -/** Returns whether the map view is currently loading or processing any assets required to render the map */ -- (BOOL)isFullyLoaded; - -/** Empties the in-memory tile cache. */ -- (void)didReceiveMemoryWarning; - -/** Returns an instance of MGLMapView implementation. Used for integration testing. */ -- (nonnull MGLMapViewImpl *) viewImpl; - -- (void)pauseRendering:(nonnull NSNotification *)notification; -- (void)resumeRendering:(nonnull NSNotification *)notification; -@property (nonatomic, nonnull) MGLUserLocationAnnotationView *userLocationAnnotationView; -@property (nonatomic, nonnull) MGLAnnotationContainerView *annotationContainerView; -@property (nonatomic, readonly) BOOL enablePresentsWithTransaction; - -- (BOOL) _opaque; - -@end diff --git a/platform/ios/src/MGLMapboxEvents.h b/platform/ios/src/MGLMapboxEvents.h deleted file mode 100644 index a7d316cc061..00000000000 --- a/platform/ios/src/MGLMapboxEvents.h +++ /dev/null @@ -1,21 +0,0 @@ -#import -#import "MMEEventsManager.h" - -NS_ASSUME_NONNULL_BEGIN - -/// NSUserDefaults key that controls telemetry user opt-out status -FOUNDATION_EXTERN NSString * const MGLMapboxMetricsEnabledKey; - -@interface MGLMapboxEvents : NSObject - -+ (nullable instancetype)sharedInstance; - -+ (void)setupWithAccessToken:(NSString *)accessToken; -+ (void)pushTurnstileEvent; -+ (void)pushEvent:(NSString *)event withAttributes:(MMEMapboxEventAttributes *)attributeDictionary; -+ (void)flush; -+ (void)ensureMetricsOptoutExists; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLMapboxEvents.m b/platform/ios/src/MGLMapboxEvents.m deleted file mode 100644 index 808c3a88bfd..00000000000 --- a/platform/ios/src/MGLMapboxEvents.m +++ /dev/null @@ -1,200 +0,0 @@ -#import "MGLMapboxEvents.h" -#import "MBXSKUToken.h" -#import "NSBundle+MGLAdditions.h" -#import "MGLAccountManager_Private.h" - -// NSUserDefaults and Info.plist keys -NSString * const MGLMapboxMetricsEnabledKey = @"MGLMapboxMetricsEnabled"; -static NSString * const MGLMapboxMetricsDebugLoggingEnabledKey = @"MGLMapboxMetricsDebugLoggingEnabled"; -static NSString * const MGLMapboxMetricsEnabledSettingShownInAppKey = @"MGLMapboxMetricsEnabledSettingShownInApp"; -static NSString * const MGLTelemetryAccessTokenKey = @"MGLTelemetryAccessToken"; -static NSString * const MGLTelemetryBaseURLKey = @"MGLTelemetryBaseURL"; -static NSString * const MGLEventsProfileKey = @"MMEEventsProfile"; -static NSString * const MGLVariableGeofenceKey = @"VariableGeofence"; - -static NSString * const MGLAPIClientUserAgentBase = @"mapbox-maps-ios"; - -@interface MGLMapboxEvents () - -@property (nonatomic) MMEEventsManager *eventsManager; -@property (nonatomic) NSURL *baseURL; -@property (nonatomic, copy) NSString *accessToken; - -@end - -@implementation MGLMapboxEvents - -+ (void)initialize { - if (self == [MGLMapboxEvents class]) { - NSBundle *bundle = [NSBundle mainBundle]; - NSNumber *accountTypeNumber = [bundle objectForInfoDictionaryKey:MGLMapboxAccountTypeKey]; - [[NSUserDefaults standardUserDefaults] registerDefaults:@{MGLMapboxAccountTypeKey: accountTypeNumber ?: @0, - MGLMapboxMetricsEnabledKey: @YES, - MGLMapboxMetricsDebugLoggingEnabledKey: @NO}]; - } -} - -+ (nullable instancetype)sharedInstance { - - static dispatch_once_t onceToken; - static MGLMapboxEvents *_sharedInstance; - dispatch_once(&onceToken, ^{ - _sharedInstance = [[self alloc] init]; - }); - return _sharedInstance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _eventsManager = MMEEventsManager.sharedManager; - _eventsManager.debugLoggingEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:MGLMapboxMetricsDebugLoggingEnabledKey]; - _eventsManager.accountType = [[NSUserDefaults standardUserDefaults] integerForKey:MGLMapboxAccountTypeKey]; - _eventsManager.metricsEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:MGLMapboxMetricsEnabledKey]; - - // It is possible for the shared instance of this class to be created because of a call to - // +[MGLAccountManager load] early on in the app lifecycle of the host application. - // If user default values for access token and base URL are available, they are stored here - // on local properties so that they can be applied later once MMEEventsManager is fully initialized - // (once -[MMEEventsManager initializeWithAccessToken:userAgentBase:hostSDKVersion:] is called. - // Normally, the telem access token and base URL are not set this way. However, overriding these values - // with user defaults can be useful for testing with an alternative (test) backend system. - if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:MGLTelemetryAccessTokenKey]) { - self.accessToken = [[NSUserDefaults standardUserDefaults] objectForKey:MGLTelemetryAccessTokenKey]; - } - if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:MGLTelemetryBaseURLKey]) { - self.baseURL = [NSURL URLWithString:[[NSUserDefaults standardUserDefaults] objectForKey:MGLTelemetryBaseURLKey]]; - } - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDefaultsDidChange:) name:NSUserDefaultsDidChangeNotification object:nil]; - } - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)userDefaultsDidChange:(NSNotification *)notification { - dispatch_async(dispatch_get_main_queue(), ^{ - [self updateNonDisablingConfigurationValues]; - [self updateDisablingConfigurationValuesWithNotification:notification]; - }); -} - -- (void)updateNonDisablingConfigurationValues { - self.eventsManager.debugLoggingEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:MGLMapboxMetricsDebugLoggingEnabledKey]; - - // It is possible for the telemetry access token key to have been set yet `userDefaultsDidChange:` - // is called before `setupWithAccessToken:` is called. - // In that case, setting the access token here will have no effect. In practice, that's fine - // because the access token value will be resolved when `setupWithAccessToken:` is called eventually - if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:MGLTelemetryAccessTokenKey]) { - self.eventsManager.accessToken = [[NSUserDefaults standardUserDefaults] objectForKey:MGLTelemetryAccessTokenKey]; - } - - // It is possible for the telemetry base URL key to have been set yet `userDefaultsDidChange:` - // is called before setupWithAccessToken: is called. - // In that case, setting the base URL here will have no effect. In practice, that's fine - // because the base URL value will be resolved when `setupWithAccessToken:` is called eventually - if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:MGLTelemetryBaseURLKey]) { - NSURL *baseURL = [NSURL URLWithString:[[NSUserDefaults standardUserDefaults] objectForKey:MGLTelemetryBaseURLKey]]; - self.eventsManager.baseURL = baseURL; - } -} - -- (void)updateDisablingConfigurationValuesWithNotification:(NSNotification *)notification { - // Guard against over calling pause / resume if the values this implementation actually - // cares about have not changed. We guard because the pause and resume method checks CoreLocation's - // authorization status and that can drag on the main thread if done too many times (e.g. if the host - // app heavily uses the user defaults API and this method is called very frequently) - if ([[notification object] respondsToSelector:@selector(objectForKey:)]) { - NSUserDefaults *userDefaults = [notification object]; - - NSInteger accountType = [userDefaults integerForKey:MGLMapboxAccountTypeKey]; - BOOL metricsEnabled = [userDefaults boolForKey:MGLMapboxMetricsEnabledKey]; - - if (accountType != self.eventsManager.accountType || metricsEnabled != self.eventsManager.metricsEnabled) { - self.eventsManager.accountType = accountType; - self.eventsManager.metricsEnabled = metricsEnabled; - - [self.eventsManager pauseOrResumeMetricsCollectionIfRequired]; - } - } -} - -+ (void)setupWithAccessToken:(NSString *)accessToken { - int64_t delayTime = 0; - - if ([[[NSBundle mainBundle] objectForInfoDictionaryKey:MGLEventsProfileKey] isEqualToString:MGLVariableGeofenceKey]) { - delayTime = 10; - } - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayTime * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - NSString *semanticVersion = [NSBundle mgl_frameworkInfoDictionary][@"MGLSemanticVersionString"]; - NSString *shortVersion = [NSBundle mgl_frameworkInfoDictionary][@"CFBundleShortVersionString"]; - NSString *sdkVersion = semanticVersion ?: shortVersion; - - // It is possible that an alternative access token was already set on this instance when the class was loaded - // Use it if it exists - NSString *resolvedAccessToken = [MGLMapboxEvents sharedInstance].accessToken ?: accessToken; - - [[[self sharedInstance] eventsManager] initializeWithAccessToken:resolvedAccessToken userAgentBase:MGLAPIClientUserAgentBase hostSDKVersion:sdkVersion]; - - // It is possible that an alternative base URL was set on this instance when the class was loaded - // Use it if it exists - if ([MGLMapboxEvents sharedInstance].baseURL) { - [[MGLMapboxEvents sharedInstance] eventsManager].baseURL = [MGLMapboxEvents sharedInstance].baseURL; - } - - [[self sharedInstance] eventsManager].skuId = MBXAccountsSKUIDMapsUser; - - [self flush]; - }); -} - -+ (void)pushTurnstileEvent { - [[[self sharedInstance] eventsManager] sendTurnstileEvent]; -} - -+ (void)pushEvent:(NSString *)event withAttributes:(MMEMapboxEventAttributes *)attributeDictionary { - [[[self sharedInstance] eventsManager] enqueueEventWithName:event attributes:attributeDictionary]; -} - -+ (void)flush { - [[[self sharedInstance] eventsManager] flush]; -} - -+ (void)ensureMetricsOptoutExists { - NSNumber *shownInAppNumber = [[NSBundle mainBundle] objectForInfoDictionaryKey:MGLMapboxMetricsEnabledSettingShownInAppKey]; - BOOL metricsEnabledSettingShownInAppFlag = [shownInAppNumber boolValue]; - - if (!metricsEnabledSettingShownInAppFlag && - [[NSUserDefaults standardUserDefaults] integerForKey:MGLMapboxAccountTypeKey] == 0) { - // Opt-out is not configured in UI, so check for Settings.bundle - id defaultEnabledValue; - NSString *appSettingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"]; - - if (appSettingsBundle) { - // Dynamic Settings.bundle loading based on http://stackoverflow.com/a/510329/2094275 - NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[appSettingsBundle stringByAppendingPathComponent:@"Root.plist"]]; - NSArray *preferences = settings[@"PreferenceSpecifiers"]; - for (NSDictionary *prefSpecification in preferences) { - if ([prefSpecification[@"Key"] isEqualToString:MGLMapboxMetricsEnabledKey]) { - defaultEnabledValue = prefSpecification[@"DefaultValue"]; - } - } - } - - if (!defaultEnabledValue) { - [NSException raise:@"Telemetry opt-out missing" format: - @"End users must be able to opt out of Mapbox Telemetry in your app, either inside Settings (via Settings.bundle) or inside this app. " - @"By default, this opt-out control is included as a menu item in the attribution action sheet. " - @"If you reimplement the opt-out control inside this app, disable this assertion by setting MGLMapboxMetricsEnabledSettingShownInApp to YES in Info.plist." - @"\n\nSee https://docs.mapbox.com/help/how-mapbox-works/attribution/#mapbox-maps-sdk-for-ios for more information." - @"\n\nAdditionally, by hiding this attribution control you agree to display the required attribution elsewhere in this app."]; - } - } -} - -@end diff --git a/platform/ios/src/MGLSDKUpdateChecker.h b/platform/ios/src/MGLSDKUpdateChecker.h deleted file mode 100644 index 13cef46ad49..00000000000 --- a/platform/ios/src/MGLSDKUpdateChecker.h +++ /dev/null @@ -1,13 +0,0 @@ -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLSDKUpdateChecker : NSObject - -+ (void)checkForUpdates; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLSDKUpdateChecker.mm b/platform/ios/src/MGLSDKUpdateChecker.mm deleted file mode 100644 index cfea139bdb9..00000000000 --- a/platform/ios/src/MGLSDKUpdateChecker.mm +++ /dev/null @@ -1,37 +0,0 @@ -#import "MGLSDKUpdateChecker.h" -#import "NSBundle+MGLAdditions.h" - -@implementation MGLSDKUpdateChecker - -+ (void)checkForUpdates { -#if TARGET_IPHONE_SIMULATOR - // Abort if running in a playground. - if ([[NSBundle mainBundle].bundleIdentifier hasPrefix:@"com.apple.dt.playground."]) { - return; - } - - NSString *currentVersion = [NSBundle mgl_frameworkInfoDictionary][@"MGLSemanticVersionString"]; - - // Skip version check if weʼre doing gl-native development, as the framework - // version is `1` until built for packaging. - if ([currentVersion isEqualToString:@"1.0.0"]) { - return; - } - - NSURL *url = [NSURL URLWithString:@"https://docs.mapbox.com/ios/maps/latest_version.txt"]; - [[NSURLSession.sharedSession dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - if (error || ((NSHTTPURLResponse *)response).statusCode != 200) { - return; - } - - NSString *latestVersion = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - latestVersion = [latestVersion stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - if (![currentVersion isEqualToString:latestVersion]) { - NSString *updateAvailable = [NSString stringWithFormat:NSLocalizedStringWithDefaultValue(@"SDK_UPDATE_AVAILABLE", nil, nil, @"Mapbox Maps SDK for iOS version %@ is now available:", @"Developer-only SDK update notification; {latest version, in format x.x.x}"), latestVersion]; - NSLog(@"%@ https://github.com/mapbox/mapbox-gl-native/releases/tag/ios-v%@", updateAvailable, latestVersion); - } - }] resume]; -#endif -} - -@end diff --git a/platform/ios/src/MGLScaleBar.h b/platform/ios/src/MGLScaleBar.h deleted file mode 100644 index 77fd6736b58..00000000000 --- a/platform/ios/src/MGLScaleBar.h +++ /dev/null @@ -1,9 +0,0 @@ -#import -#import - -@interface MGLScaleBar : UIView - -// Sets the scale and redraws the scale bar -@property (nonatomic, assign) CLLocationDistance metersPerPoint; - -@end diff --git a/platform/ios/src/MGLScaleBar.mm b/platform/ios/src/MGLScaleBar.mm deleted file mode 100644 index 3efa80013fa..00000000000 --- a/platform/ios/src/MGLScaleBar.mm +++ /dev/null @@ -1,556 +0,0 @@ -#import "Mapbox.h" -#import "MGLScaleBar.h" - -static const CGFloat MGLFeetPerMile = 5280; - -struct MGLRow { - CLLocationDistance distance; - NSUInteger numberOfBars; -}; - -static const MGLRow MGLMetricTable[] = { - {.distance = 1, .numberOfBars = 2}, - {.distance = 2, .numberOfBars = 2}, - {.distance = 4, .numberOfBars = 2}, - {.distance = 10, .numberOfBars = 2}, - {.distance = 20, .numberOfBars = 2}, - {.distance = 50, .numberOfBars = 2}, - {.distance = 75, .numberOfBars = 3}, - {.distance = 100, .numberOfBars = 2}, - {.distance = 150, .numberOfBars = 2}, - {.distance = 200, .numberOfBars = 2}, - {.distance = 300, .numberOfBars = 3}, - {.distance = 500, .numberOfBars = 2}, - {.distance = 1000, .numberOfBars = 2}, - {.distance = 1500, .numberOfBars = 2}, - {.distance = 3000, .numberOfBars = 3}, - {.distance = 5000, .numberOfBars = 2}, - {.distance = 10000, .numberOfBars = 2}, - {.distance = 20000, .numberOfBars = 2}, - {.distance = 30000, .numberOfBars = 3}, - {.distance = 50000, .numberOfBars = 2}, - {.distance = 100000, .numberOfBars = 2}, - {.distance = 200000, .numberOfBars = 2}, - {.distance = 300000, .numberOfBars = 3}, - {.distance = 400000, .numberOfBars = 2}, - {.distance = 500000, .numberOfBars = 2}, - {.distance = 600000, .numberOfBars = 3}, - {.distance = 800000, .numberOfBars = 2}, -}; - -static const MGLRow MGLImperialTable[] ={ - {.distance = 4, .numberOfBars = 2}, - {.distance = 6, .numberOfBars = 2}, - {.distance = 10, .numberOfBars = 2}, - {.distance = 20, .numberOfBars = 2}, - {.distance = 30, .numberOfBars = 2}, - {.distance = 50, .numberOfBars = 2}, - {.distance = 75, .numberOfBars = 3}, - {.distance = 100, .numberOfBars = 2}, - {.distance = 200, .numberOfBars = 2}, - {.distance = 300, .numberOfBars = 3}, - {.distance = 400, .numberOfBars = 2}, - {.distance = 600, .numberOfBars = 3}, - {.distance = 800, .numberOfBars = 2}, - {.distance = 1000, .numberOfBars = 2}, - {.distance = 0.25f*MGLFeetPerMile, .numberOfBars = 2}, - {.distance = 0.5f*MGLFeetPerMile, .numberOfBars = 2}, - {.distance = 1*MGLFeetPerMile, .numberOfBars = 2}, - {.distance = 2*MGLFeetPerMile, .numberOfBars = 2}, - {.distance = 3*MGLFeetPerMile, .numberOfBars = 3}, - {.distance = 4*MGLFeetPerMile, .numberOfBars = 2}, - {.distance = 8*MGLFeetPerMile, .numberOfBars = 2}, - {.distance = 12*MGLFeetPerMile, .numberOfBars = 2}, - {.distance = 15*MGLFeetPerMile, .numberOfBars = 3}, - {.distance = 20*MGLFeetPerMile, .numberOfBars = 2}, - {.distance = 30*MGLFeetPerMile, .numberOfBars = 3}, - {.distance = 40*MGLFeetPerMile, .numberOfBars = 2}, - {.distance = 80*MGLFeetPerMile, .numberOfBars = 2}, - {.distance = 120*MGLFeetPerMile, .numberOfBars = 2}, - {.distance = 200*MGLFeetPerMile, .numberOfBars = 2}, - {.distance = 300*MGLFeetPerMile, .numberOfBars = 3}, - {.distance = 400*MGLFeetPerMile, .numberOfBars = 2}, -}; - -@class MGLScaleBarLabel; - -@interface MGLScaleBar() -@property (nonatomic) NSArray *labelViews; -@property (nonatomic) NSArray *bars; -@property (nonatomic) UIView *containerView; -@property (nonatomic) MGLDistanceFormatter *formatter; -@property (nonatomic, assign) MGLRow row; -@property (nonatomic) UIColor *primaryColor; -@property (nonatomic) UIColor *secondaryColor; -@property (nonatomic, assign) CGFloat borderWidth; -@property (nonatomic) NSMutableDictionary* labelImageCache; -@property (nonatomic) MGLScaleBarLabel* prototypeLabel; -@property (nonatomic) CGFloat lastLabelWidth; -@property (nonatomic) CGSize size; -@property (nonatomic) BOOL recalculateSize; -@property (nonatomic) BOOL shouldLayoutBars; -@property (nonatomic) NSNumber *testingRightToLeftOverride; -@end - -static const CGFloat MGLBarHeight = 4; -static const CGFloat MGLFeetPerMeter = 3.28084; -static const CGFloat MGLScaleBarLabelWidthHint = 30.0; -static const CGFloat MGLScaleBarMinimumBarWidth = 30.0; // Arbitrary - -@interface MGLScaleBarLabel : UILabel - -@end - -@implementation MGLScaleBarLabel - -- (void)drawTextInRect:(CGRect)rect { - CGSize shadowOffset = self.shadowOffset; - - CGContextRef context = UIGraphicsGetCurrentContext(); - CGContextSetLineWidth(context, 2); - CGContextSetLineJoin(context, kCGLineJoinRound); - - CGContextSetTextDrawingMode(context, kCGTextStroke); - self.textColor = [UIColor whiteColor]; - [super drawTextInRect:rect]; - - CGContextSetTextDrawingMode(context, kCGTextFill); - self.textColor = [UIColor blackColor]; - self.shadowOffset = CGSizeMake(0, 0); - [super drawTextInRect:rect]; - - self.shadowOffset = shadowOffset; -} - -@end - -@implementation MGLScaleBar - -- (instancetype)initWithCoder:(NSCoder *)decoder { - if (self = [super initWithCoder:decoder]) { - [self commonInit]; - } - return self; -} - -- (instancetype)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]) { - [self commonInit]; - } - return self; -} - -- (void)commonInit { - _size = CGSizeZero; - - _primaryColor = [UIColor colorWithRed:18.0/255.0 green:45.0/255.0 blue:17.0/255.0 alpha:1]; - _secondaryColor = [UIColor colorWithRed:247.0/255.0 green:247.0/255.0 blue:247.0/255.0 alpha:1]; - _borderWidth = 1.0f; - - self.clipsToBounds = NO; - self.hidden = YES; - - _containerView = [[UIView alloc] init]; - _containerView.clipsToBounds = YES; - _containerView.backgroundColor = _secondaryColor; - _containerView.layer.borderColor = _primaryColor.CGColor; - _containerView.layer.borderWidth = _borderWidth / [[UIScreen mainScreen] scale]; - - _containerView.layer.cornerRadius = MGLBarHeight / 2.0; - _containerView.layer.masksToBounds = YES; - - [self addSubview:_containerView]; - - _formatter = [[MGLDistanceFormatter alloc] init]; - - // Image labels are now images - _labelImageCache = [[NSMutableDictionary alloc] init]; - _prototypeLabel = [[MGLScaleBarLabel alloc] init]; - _prototypeLabel.font = [UIFont systemFontOfSize:8 weight:UIFontWeightMedium]; - _prototypeLabel.clipsToBounds = NO; - - NSUInteger numberOfLabels = 4; - NSMutableArray *labelViews = [NSMutableArray arrayWithCapacity:numberOfLabels]; - - for (NSUInteger i = 0; i < numberOfLabels; i++) { - UIView *view = [[UIView alloc] init]; - view.bounds = CGRectZero; - view.clipsToBounds = NO; - view.contentMode = UIViewContentModeCenter; - view.hidden = YES; - [labelViews addObject:view]; - [self addSubview:view]; - } - _labelViews = [labelViews copy]; - _lastLabelWidth = MGLScaleBarLabelWidthHint; - - // Zero is a special case (no formatting) - [self addZeroLabel]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetLabelImageCache) name:NSCurrentLocaleDidChangeNotification object:nil]; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)resetLabelImageCache { - self.labelImageCache = [[NSMutableDictionary alloc] init]; - [self addZeroLabel]; -} - -#pragma mark - Dimensions - -- (void)setBorderWidth:(CGFloat)borderWidth { - _borderWidth = borderWidth; - _containerView.layer.borderWidth = borderWidth / [[UIScreen mainScreen] scale]; -} - -// Determines the width of the bars NOT the size of the entire scale bar, -// which includes space for (half) a label. -// Uses the current set `row` -- (CGFloat)actualWidth { - CGFloat unitsPerPoint = [self unitsPerPoint]; - - if (unitsPerPoint == 0.0) { - return 0.0; - } - - CGFloat width = self.row.distance / unitsPerPoint; - - if (width <= MGLScaleBarMinimumBarWidth) { - return 0.0; - } - - // Round, so that each bar section has an integer width - return self.row.numberOfBars * floor(width/self.row.numberOfBars); -} - -- (CGFloat)maximumWidth { - // TODO: Consider taking Scale Bar margins into account here. - CGFloat fullWidth = CGRectGetWidth(self.superview.bounds); - return floorf(fullWidth / 2); -} - -- (CGFloat)unitsPerPoint { - return [self usesMetricSystem] ? self.metersPerPoint : self.metersPerPoint * MGLFeetPerMeter; -} - -#pragma mark - Convenience methods - -- (BOOL)usesRightToLeftLayout { - if (self.testingRightToLeftOverride) { - return [self.testingRightToLeftOverride boolValue]; - } - - return [UIView userInterfaceLayoutDirectionForSemanticContentAttribute:self.superview.semanticContentAttribute] == UIUserInterfaceLayoutDirectionRightToLeft; -} - -- (BOOL)usesMetricSystem { - NSLocale *locale = [NSLocale currentLocale]; - return [[locale objectForKey:NSLocaleUsesMetricSystem] boolValue]; -} - -- (MGLRow)preferredRow { - CLLocationDistance maximumDistance = [self maximumWidth] * [self unitsPerPoint]; - - BOOL useMetric = [self usesMetricSystem]; - - const MGLRow *row; - const MGLRow *table; - NSUInteger count; - - if (useMetric) { - row = table = MGLMetricTable; - count = sizeof(MGLMetricTable) / sizeof(MGLMetricTable[0]); - } - else { - row = table = MGLImperialTable; - count = sizeof(MGLImperialTable) / sizeof(MGLImperialTable[0]); - } - - while (row < table + count) { - if (row->distance > maximumDistance) { - // use the previous row - NSAssert(row != table, @""); - return *(row - 1); - } - ++row; - } - - // Didn't find it, just return the first. - return *table; -} - -#pragma mark - Setters - -- (void)setMetersPerPoint:(CLLocationDistance)metersPerPoint { - if (_metersPerPoint == metersPerPoint) { - return; - } - - _metersPerPoint = metersPerPoint; - - [self updateVisibility]; - - self.recalculateSize = YES; - [self invalidateIntrinsicContentSize]; -} - -- (CGSize)intrinsicContentSize { - // Size is calculated elsewhere - since intrinsicContentSize is part of the - // constraint system, this should be done in updateConstraints - if (self.size.width < 0.0) { - return CGSizeZero; - } - return self.size; -} - -/// updateConstraints -/// -/// The primary job of updateConstraints here is to recalculate the -/// intrinsicContentSize: _metersPerPoint and the maximum width determine the -/// current "row", which in turn determines the "actualWidth". To obtain the full -/// width of the scale bar, we also need to include some space for the "last" -/// label - -- (void)updateConstraints { - if (self.isHidden || !self.recalculateSize) { - [super updateConstraints]; - return; - } - - // TODO: Improve this (and the side-effects) - self.row = [self preferredRow]; - - NSAssert(self.row.numberOfBars > 0, @""); - - CGFloat totalBarWidth = self.actualWidth; - - if (totalBarWidth <= 0.0) { - [super updateConstraints]; - return; - } - - // Determine the "lastLabelWidth". This has changed to take a maximum of each - // label, to ensure that the size does not change in LTR & RTL layouts, and - // also to stop jiggling when the scale bar is on the right hand of the screen - // This will most likely be a constant, as we take a max using a "hint" for - // the initial value - - if (self.shouldLayoutBars) { - [self updateLabels]; - } - - CGFloat halfLabelWidth = ceil(self.lastLabelWidth/2); - - self.size = CGSizeMake(totalBarWidth + halfLabelWidth, 16); - - [self setNeedsLayout]; - [super updateConstraints]; // This calls intrinsicContentSize -} - -- (void)updateVisibility { - BOOL metric = [self usesMetricSystem]; - - NSUInteger count = metric - ? sizeof(MGLMetricTable) / sizeof(MGLMetricTable[0]) - : sizeof(MGLImperialTable) / sizeof(MGLImperialTable[0]); - - CLLocationDistance maximumDistance = [self maximumWidth] * [self unitsPerPoint]; - CLLocationDistance allowedDistance = metric - ? MGLMetricTable[count-1].distance - : MGLImperialTable[count-1].distance; - - CGFloat alpha = maximumDistance > allowedDistance ? .0f : 1.0f; - - if (self.alpha != alpha) { - [UIView animateWithDuration:.2f delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ - self.alpha = alpha; - } completion:nil]; - } -} - -- (void)setRow:(MGLRow)row { - if (_row.distance == row.distance) { - return; - } - - self.shouldLayoutBars = YES; - - _row = row; -} - -#pragma mark - Views - -- (NSArray *)bars { - if (!_bars) { - NSMutableArray *bars = [NSMutableArray array]; - for (NSUInteger i = 0; i < self.row.numberOfBars; i++) { - UIView *bar = [[UIView alloc] init]; - [bars addObject:bar]; - [self.containerView addSubview:bar]; - } - _bars = bars; - } - return _bars; -} - -#pragma mark - Labels - -- (void)addZeroLabel { - NSDecimalNumber *zeroNumber = [NSDecimalNumber decimalNumberWithString:@"0"]; - NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; - NSString *text = [formatter stringFromNumber:zeroNumber]; - - UIImage* image = [self imageForLabelText:text]; - [self.labelImageCache setObject:image forKey:@(0)]; -} - -- (UIImage*)imageForLabelText:(NSString*)text { - self.prototypeLabel.text = text; - [self.prototypeLabel setNeedsDisplay]; - [self.prototypeLabel sizeToFit]; - - // Now render - UIGraphicsBeginImageContextWithOptions(self.prototypeLabel.bounds.size, NO, 0.0); - [self.prototypeLabel.layer renderInContext: UIGraphicsGetCurrentContext()]; - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -- (UIImage*)cachedLabelImageForDistance:(CLLocationDistance)barDistance { - // Make a slightly nicer key, rather than something that's a double. - NSUInteger floorDist = (NSUInteger)(barDistance*100); - - NSNumber *key = @(floorDist); - UIImage *cachedImage = [self.labelImageCache objectForKey:key]; - - if (cachedImage) { - return cachedImage; - } - - // Calc it - NSString *text = [self.formatter stringFromDistance:barDistance]; - UIImage *image = [self imageForLabelText:text]; - - [self.labelImageCache setObject:image forKey:key]; - - return image; -} - -- (void)updateLabels { - NSEnumerator *viewEnumerator = [self.labelViews objectEnumerator]; - NSUInteger i = 0; - CLLocationDistance multiplier = (self.row.distance / self.row.numberOfBars); - - if (![self usesMetricSystem]) { - multiplier /= MGLFeetPerMeter; - } - - for (; i <= self.row.numberOfBars; i++) { - UIView *labelView = [viewEnumerator nextObject]; - labelView.hidden = NO; - - CLLocationDistance barDistance = multiplier * i; - UIImage *image = [self cachedLabelImageForDistance:barDistance]; - - self.lastLabelWidth = MAX(self.lastLabelWidth, image.size.width); - - labelView.layer.contents = (id)image.CGImage; - labelView.layer.contentsScale = image.scale; - } - - // Hide the rest. - for (; i < self.labelViews.count; i++) { - UIView *labelView = [viewEnumerator nextObject]; - labelView.hidden = YES; - } -} - -#pragma mark - Layout - -- (void)layoutSubviews { - [super layoutSubviews]; - - if (!self.recalculateSize) { - return; - } - - self.recalculateSize = NO; - - // If size is 0, then we keep the existing layout (which will fade out) - if (self.size.width <= 0.0) { - return; - } - - CGFloat totalBarWidth = self.actualWidth; - - if (totalBarWidth <= 0.0) { - return; - } - - if (self.shouldLayoutBars) { - self.shouldLayoutBars = NO; - [_bars makeObjectsPerformSelector:@selector(removeFromSuperview)]; - _bars = nil; - } - - // Re-layout the component bars and labels of the scale bar - CGFloat intrinsicContentHeight = self.intrinsicContentSize.height; - CGFloat barWidth = totalBarWidth/self.bars.count; - - BOOL RTL = [self usesRightToLeftLayout]; - CGFloat halfLabelWidth = ceil(self.lastLabelWidth/2); - CGFloat barOffset = RTL ? halfLabelWidth : 0.0; - - self.containerView.frame = CGRectMake(barOffset, - intrinsicContentHeight - MGLBarHeight, - totalBarWidth, - MGLBarHeight); - - [self layoutBarsWithWidth:barWidth]; - - CGFloat yPosition = round(0.5 * ( intrinsicContentHeight - MGLBarHeight)); - CGFloat barDelta = RTL ? -barWidth : barWidth; - [self layoutLabelsWithOffset:barOffset delta:barDelta yPosition:yPosition]; -} - -- (void)layoutBarsWithWidth:(CGFloat)barWidth { - NSUInteger i = 0; - for (UIView *bar in self.bars) { - CGFloat xPosition = barWidth * i; - bar.backgroundColor = (i % 2 == 0) ? self.primaryColor : self.secondaryColor; - bar.frame = CGRectMake(xPosition, 0, barWidth, MGLBarHeight); - i++; - } -} - -- (void)layoutLabelsWithOffset:(CGFloat)barOffset delta:(CGFloat)barDelta yPosition:(CGFloat)yPosition { -#if !defined(NS_BLOCK_ASSERTIONS) - NSUInteger countOfVisibleLabels = 0; - for (UIView *view in self.labelViews) { - if (!view.isHidden) { - countOfVisibleLabels++; - } - } - NSAssert(self.bars.count == countOfVisibleLabels - 1, @""); -#endif - - CGFloat xPosition = barOffset; - - if (barDelta < 0) { - xPosition -= (barDelta*self.bars.count); - } - - for (UIView *label in self.labelViews) { - // Label frames have 0 size - though the layer contents use "center" and do - // not clip to bounds. This way we don't need to worry about positioning the - // label. (Though you won't see the label in the view debugger) - label.frame = CGRectMake(xPosition, yPosition, 0.0, 0.0); - - xPosition += barDelta; - } -} -@end diff --git a/platform/ios/src/MGLTelemetryConfig.h b/platform/ios/src/MGLTelemetryConfig.h deleted file mode 100644 index 96e525c9694..00000000000 --- a/platform/ios/src/MGLTelemetryConfig.h +++ /dev/null @@ -1,18 +0,0 @@ -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLTelemetryConfig : NSObject - -@property (nonatomic) CLLocationDistance MGLLocationManagerHibernationRadius; - -extern NSString *const MGLMapboxMetricsProfile; - -@property (class, nullable, nonatomic, readonly) MGLTelemetryConfig *sharedConfig; - -- (void)configurationFromKey:(NSString *)key; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLTelemetryConfig.m b/platform/ios/src/MGLTelemetryConfig.m deleted file mode 100644 index 828bafb14f7..00000000000 --- a/platform/ios/src/MGLTelemetryConfig.m +++ /dev/null @@ -1,35 +0,0 @@ -#import "MGLTelemetryConfig.h" - -static const CLLocationDistance MGLConfigHibernationRadiusDefault = 300.0; -static const CLLocationDistance MGLConfigHibernationRadiusWide = 600.0; - -NSString *const MGLMapboxMetricsProfile = @"MGLMapboxMetricsProfile"; - -static NSString *const MGLConfigHibernationRadiusWideKey = @"WideGeoFence"; - -@implementation MGLTelemetryConfig - -- (instancetype) init { - self = [super init]; - if (self) { - _MGLLocationManagerHibernationRadius = MGLConfigHibernationRadiusDefault; - } - return self; -} - -+ (nullable instancetype)sharedConfig { - static dispatch_once_t onceToken; - static MGLTelemetryConfig *_sharedConfig; - dispatch_once(&onceToken, ^{ - _sharedConfig = [[self alloc] init]; - }); - return _sharedConfig; -} - -- (void)configurationFromKey:(NSString *)key { - if ([key isEqualToString:MGLConfigHibernationRadiusWideKey]) { - _MGLLocationManagerHibernationRadius = MGLConfigHibernationRadiusWide; - } -} - -@end diff --git a/platform/ios/src/MGLUserLocation.h b/platform/ios/src/MGLUserLocation.h deleted file mode 100644 index d7c8576c471..00000000000 --- a/platform/ios/src/MGLUserLocation.h +++ /dev/null @@ -1,57 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" -#import "MGLAnnotation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The MGLUserLocation class defines a specific type of annotation that identifies - the user’s current location. You do not create instances of this class - directly. Instead, you retrieve an existing `MGLUserLocation` object from the - `userLocation` property of the map view displayed in your application. - - #### Related examples - See the - Customize the user location annotation example to learn how to overide the - default user location annotation. - */ -MGL_EXPORT -@interface MGLUserLocation : NSObject - -#pragma mark Determining the User’s Position - -/** - The current location of the device. (read-only) - - This property returns `nil` if the user’s location has not yet been determined. - */ -@property (nonatomic, readonly, nullable) CLLocation *location; - -/** - A Boolean value indicating whether the user’s location is currently being - updated. (read-only) - */ -@property (nonatomic, readonly, getter=isUpdating) BOOL updating; - -/** - The heading of the user location. (read-only) - - This property is `nil` if the user location tracking mode is not - `MGLUserTrackingModeFollowWithHeading` or if - `MGLMapView.showsUserHeadingIndicator` is disabled. - */ -@property (nonatomic, readonly, nullable) CLHeading *heading; - -#pragma mark Accessing the User Annotation Text - -/** The title to display for the user location annotation. */ -@property (nonatomic, copy) NSString *title; - -/** The subtitle to display for the user location annotation. */ -@property (nonatomic, copy, nullable) NSString *subtitle; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLUserLocation.m b/platform/ios/src/MGLUserLocation.m deleted file mode 100644 index 245cbf43716..00000000000 --- a/platform/ios/src/MGLUserLocation.m +++ /dev/null @@ -1,124 +0,0 @@ -#import "MGLUserLocation_Private.h" - -#import "MGLMapView.h" -#import "NSBundle+MGLAdditions.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLUserLocation () - -@property (nonatomic, weak) MGLMapView *mapView; - -@end - -NS_ASSUME_NONNULL_END - -@implementation MGLUserLocation - -- (instancetype)initWithMapView:(MGLMapView *)mapView -{ - if (self = [super init]) - { - _mapView = mapView; - } - - return self; -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder { - if (self = [super init]) { - _location = [decoder decodeObjectOfClass:[CLLocation class] forKey:@"location"]; - _title = [decoder decodeObjectOfClass:[NSString class] forKey:@"title"]; - _subtitle = [decoder decodeObjectOfClass:[NSString class] forKey:@"subtitle"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:_location forKey:@"location"]; - [coder encodeObject:_title forKey:@"title"]; - [coder encodeObject:_subtitle forKey:@"subtitle"]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) return YES; - if (![other isKindOfClass:[MGLUserLocation class]]) return NO; - - MGLUserLocation *otherUserLocation = other; - return ((!self.location && !otherUserLocation.location) || [self.location distanceFromLocation:otherUserLocation.location] == 0) - && ((!self.title && !otherUserLocation.title) || [self.title isEqualToString:otherUserLocation.title]) - && ((!self.subtitle && !otherUserLocation.subtitle) || [self.subtitle isEqualToString:otherUserLocation.subtitle]); -} - -- (NSUInteger)hash { - NSUInteger hash = [super hash]; - hash += [_location hash]; - hash += [_heading hash]; - hash += [_title hash]; - hash += [_subtitle hash]; - return hash; -} - -+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key -{ - return ! [key isEqualToString:@"location"] && ! [key isEqualToString:@"heading"]; -} - -+ (NSSet *)keyPathsForValuesAffectingCoordinate -{ - return [NSSet setWithObject:@"location"]; -} - -- (void)setLocation:(CLLocation *)newLocation -{ - if ( ! newLocation || ! CLLocationCoordinate2DIsValid(newLocation.coordinate)) return; - if ( _location && CLLocationCoordinate2DIsValid(_location.coordinate) && [newLocation distanceFromLocation:_location] == 0) return; - if (newLocation.coordinate.latitude == 0 && newLocation.coordinate.longitude == 0) return; - - [self willChangeValueForKey:@"location"]; - _location = newLocation; - [self didChangeValueForKey:@"location"]; -} - -- (BOOL)isUpdating -{ - return self.mapView.userTrackingMode != MGLUserTrackingModeNone; -} - -- (void)setHeading:(CLHeading *)newHeading -{ - if (newHeading.trueHeading != _heading.trueHeading) - { - [self willChangeValueForKey:@"heading"]; - _heading = newHeading; - [self didChangeValueForKey:@"heading"]; - } -} - -- (CLLocationCoordinate2D)coordinate -{ - return _location ? _location.coordinate : kCLLocationCoordinate2DInvalid; -} - -- (NSString *)title -{ - return _title ?: NSLocalizedStringWithDefaultValue(@"USER_DOT_TITLE", nil, nil, @"You Are Here", @"Default user location annotation title"); -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p; location = %f, %f; updating = %@; altitude = %.0fm; heading = %.0f°; title = %@; subtitle = %@>", - NSStringFromClass([self class]), (void *)self, - self.location.coordinate.latitude, self.location.coordinate.longitude, - self.updating ? @"yes" : @"no", - self.location.altitude, - self.heading.trueHeading, - self.title ? [NSString stringWithFormat:@"\"%@\"", self.title] : self.title, - self.subtitle ? [NSString stringWithFormat:@"\"%@\"", self.subtitle] : self.subtitle]; -} - -@end diff --git a/platform/ios/src/MGLUserLocationAnnotationView.h b/platform/ios/src/MGLUserLocationAnnotationView.h deleted file mode 100644 index f5197b9f768..00000000000 --- a/platform/ios/src/MGLUserLocationAnnotationView.h +++ /dev/null @@ -1,64 +0,0 @@ -#import -#import - -#import "MGLFoundation.h" -#import "MGLAnnotationView.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MGLMapView; -@class MGLUserLocation; - -/** View representing an `MGLUserLocation` on screen. */ -MGL_EXPORT -@interface MGLUserLocationAnnotationView : MGLAnnotationView - -/** - Returns the associated map view. - - The value of this property is nil during initialization. - */ -@property (nonatomic, readonly, weak, nullable) MGLMapView *mapView; - -/** - Returns the annotation object indicating the user’s current location. - - The value of this property is nil during initialization and while user tracking - is inactive. - - #### Related examples - See the - Customize the user location annotation example to learn how to customize - the default user location annotation object. - */ -@property (nonatomic, readonly, weak, nullable) MGLUserLocation *userLocation; - -/** - Returns the layer that should be used for annotation selection hit testing. - - The default value of this property is the presentation layer of the view’s Core - Animation layer. When subclassing, you may override this property to specify a - different layer to be used for hit testing. This can be useful when you wish to - limit the interactive area of the annotation to a specific sublayer. - */ -@property (nonatomic, readonly, weak) CALayer *hitTestLayer; - -/** - Updates the user location annotation. - - Use this method to update the appearance of the user location annotation. This - method is called by the associated map view when it has determined that the - user location annotation needs to be updated. This can happen in response to - user interaction, a change in the user’s location, when the user tracking mode - changes, or when the viewport changes. - - @note During user interaction with the map, this method may be called many - times to update the user location annotation. Therefore, your implementation of - this method should be as lightweight as possible to avoid negatively affecting - performance. - */ -- (void)update; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLUserLocationAnnotationView.m b/platform/ios/src/MGLUserLocationAnnotationView.m deleted file mode 100644 index 9795565050c..00000000000 --- a/platform/ios/src/MGLUserLocationAnnotationView.m +++ /dev/null @@ -1,100 +0,0 @@ -#import "MGLUserLocationAnnotationView.h" - -#import "MGLUserLocation.h" -#import "MGLUserLocation_Private.h" -#import "MGLAnnotationView_Private.h" -#import "MGLAnnotation.h" -#import "MGLMapView.h" -#import "MGLCoordinateFormatter.h" -#import "NSBundle+MGLAdditions.h" - -@interface MGLUserLocationAnnotationView() -@property (nonatomic, weak, nullable) MGLMapView *mapView; -@property (nonatomic, weak, nullable) MGLUserLocation *userLocation; -@property (nonatomic, weak) CALayer *hitTestLayer; -@end - -@implementation MGLUserLocationAnnotationView { - MGLCoordinateFormatter *_accessibilityCoordinateFormatter; -} - -- (instancetype)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self == nil) return nil; - - self.accessibilityTraits = UIAccessibilityTraitButton | UIAccessibilityTraitAdjustable | UIAccessibilityTraitUpdatesFrequently; - - _accessibilityCoordinateFormatter = [[MGLCoordinateFormatter alloc] init]; - _accessibilityCoordinateFormatter.unitStyle = NSFormattingUnitStyleLong; - - return self; -} - -- (CALayer *)hitTestLayer -{ - return self.layer.presentationLayer; -} - -- (void)update -{ - // Left blank intentionally. Subclasses should usually override this in order to update the annotation’s appearance. -} - -- (BOOL)isAccessibilityElement -{ - return !self.hidden; -} - -- (NSString *)accessibilityLabel -{ - return self.userLocation.title; -} - -- (NSString *)accessibilityValue -{ - if (self.userLocation.subtitle) - { - return self.userLocation.subtitle; - } - - // Each arcminute of longitude is at most about 1 nmi, too small for low zoom levels. - // Each arcsecond of longitude is at most about 30 m, too small for all but the very highest of zoom levels. - double zoomLevel = self.mapView.zoomLevel; - _accessibilityCoordinateFormatter.allowsMinutes = zoomLevel > 8; - _accessibilityCoordinateFormatter.allowsSeconds = zoomLevel > 20; - - return [_accessibilityCoordinateFormatter stringFromCoordinate:self.mapView.centerCoordinate]; -} - -- (CGRect)accessibilityFrame -{ - return CGRectInset(self.frame, -15, -15); -} - -- (UIBezierPath *)accessibilityPath -{ - return [UIBezierPath bezierPathWithOvalInRect:self.frame]; -} - -- (void)accessibilityIncrement -{ - [self.mapView accessibilityIncrement]; -} - -- (void)accessibilityDecrement -{ - [self.mapView accessibilityDecrement]; -} - -- (void)setHidden:(BOOL)hidden -{ - BOOL oldValue = super.hidden; - [super setHidden:hidden]; - if (oldValue != hidden) - { - UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); - } -} - -@end diff --git a/platform/ios/src/MGLUserLocationAnnotationView_Private.h b/platform/ios/src/MGLUserLocationAnnotationView_Private.h deleted file mode 100644 index 3e12beab34e..00000000000 --- a/platform/ios/src/MGLUserLocationAnnotationView_Private.h +++ /dev/null @@ -1,15 +0,0 @@ -#import "MGLUserLocationAnnotationView.h" -#import "MGLUserLocation.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MGLMapView; - -@interface MGLUserLocationAnnotationView (Private) - -@property (nonatomic, weak, nullable) MGLUserLocation *userLocation; -@property (nonatomic, weak, nullable) MGLMapView *mapView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/MGLUserLocationHeadingArrowLayer.h b/platform/ios/src/MGLUserLocationHeadingArrowLayer.h deleted file mode 100644 index 6c01356944b..00000000000 --- a/platform/ios/src/MGLUserLocationHeadingArrowLayer.h +++ /dev/null @@ -1,11 +0,0 @@ -#import -#import "MGLUserLocationAnnotationView.h" -#import "MGLUserLocationHeadingIndicator.h" - -@interface MGLUserLocationHeadingArrowLayer : CAShapeLayer - -- (instancetype)initWithUserLocationAnnotationView:(MGLUserLocationAnnotationView *)userLocationView; -- (void)updateHeadingAccuracy:(CLLocationDirection)accuracy; -- (void)updateTintColor:(CGColorRef)color; - -@end diff --git a/platform/ios/src/MGLUserLocationHeadingArrowLayer.m b/platform/ios/src/MGLUserLocationHeadingArrowLayer.m deleted file mode 100644 index d81cb5a09aa..00000000000 --- a/platform/ios/src/MGLUserLocationHeadingArrowLayer.m +++ /dev/null @@ -1,59 +0,0 @@ -#import "MGLUserLocationHeadingArrowLayer.h" - -#import "MGLFaux3DUserLocationAnnotationView.h" -#import "MGLGeometry.h" - -const CGFloat MGLUserLocationHeadingArrowSize = 8; - -@implementation MGLUserLocationHeadingArrowLayer - -- (instancetype)initWithUserLocationAnnotationView:(MGLUserLocationAnnotationView *)userLocationView -{ - CGFloat size = userLocationView.bounds.size.width + MGLUserLocationHeadingArrowSize; - - self = [super init]; - self.bounds = CGRectMake(0, 0, size, size); - self.position = CGPointMake(CGRectGetMidX(userLocationView.bounds), CGRectGetMidY(userLocationView.bounds)); - self.path = [self arrowPath]; - self.fillColor = userLocationView.tintColor.CGColor; - self.shouldRasterize = YES; - self.rasterizationScale = UIScreen.mainScreen.scale; - self.drawsAsynchronously = YES; - - self.strokeColor = UIColor.whiteColor.CGColor; - self.lineWidth = 1.0; - self.lineJoin = kCALineJoinRound; - - return self; -} - -- (void)updateHeadingAccuracy:(CLLocationDirection)accuracy -{ - // unimplemented -} - -- (void)updateTintColor:(CGColorRef)color -{ - self.fillColor = color; -} - -- (CGPathRef)arrowPath { - CGFloat center = roundf(CGRectGetMidX(self.bounds)); - CGFloat size = MGLUserLocationHeadingArrowSize; - - CGPoint top = CGPointMake(center, 0); - CGPoint left = CGPointMake(center - size, size); - CGPoint right = CGPointMake(center + size, size); - CGPoint middle = CGPointMake(center, size / M_PI); - - UIBezierPath *bezierPath = [UIBezierPath bezierPath]; - [bezierPath moveToPoint:top]; - [bezierPath addLineToPoint:left]; - [bezierPath addQuadCurveToPoint:right controlPoint:middle]; - [bezierPath addLineToPoint:top]; - [bezierPath closePath]; - - return bezierPath.CGPath; -} - -@end diff --git a/platform/ios/src/MGLUserLocationHeadingBeamLayer.h b/platform/ios/src/MGLUserLocationHeadingBeamLayer.h deleted file mode 100644 index 93f8ea17abb..00000000000 --- a/platform/ios/src/MGLUserLocationHeadingBeamLayer.h +++ /dev/null @@ -1,11 +0,0 @@ -#import -#import "MGLUserLocationAnnotationView.h" -#import "MGLUserLocationHeadingIndicator.h" - -@interface MGLUserLocationHeadingBeamLayer : CALayer - -- (MGLUserLocationHeadingBeamLayer *)initWithUserLocationAnnotationView:(MGLUserLocationAnnotationView *)userLocationView; -- (void)updateHeadingAccuracy:(CLLocationDirection)accuracy; -- (void)updateTintColor:(CGColorRef)color; - -@end diff --git a/platform/ios/src/MGLUserLocationHeadingBeamLayer.m b/platform/ios/src/MGLUserLocationHeadingBeamLayer.m deleted file mode 100644 index efe7e4db937..00000000000 --- a/platform/ios/src/MGLUserLocationHeadingBeamLayer.m +++ /dev/null @@ -1,104 +0,0 @@ -#import "MGLUserLocationHeadingBeamLayer.h" - -#import "MGLFaux3DUserLocationAnnotationView.h" -#import "MGLGeometry.h" - -@implementation MGLUserLocationHeadingBeamLayer -{ - CAShapeLayer *_maskLayer; -} - -- (instancetype)initWithUserLocationAnnotationView:(MGLUserLocationAnnotationView *)userLocationView -{ - CGFloat size = MGLUserLocationAnnotationHaloSize; - - self = [super init]; - self.bounds = CGRectMake(0, 0, size, size); - self.position = CGPointMake(CGRectGetMidX(userLocationView.bounds), CGRectGetMidY(userLocationView.bounds)); - self.contents = (__bridge id)[self gradientImageWithTintColor:userLocationView.tintColor.CGColor]; - self.contentsGravity = kCAGravityBottom; - self.contentsScale = UIScreen.mainScreen.scale; - self.opacity = 0.4; - self.shouldRasterize = YES; - self.rasterizationScale = UIScreen.mainScreen.scale; - self.drawsAsynchronously = YES; - - _maskLayer = [CAShapeLayer layer]; - _maskLayer.frame = self.bounds; - _maskLayer.path = [self clippingMaskForAccuracy:0]; - self.mask = _maskLayer; - - return self; -} - -- (void)updateHeadingAccuracy:(CLLocationDirection)accuracy -{ - // recalculate the clipping mask based on updated accuracy - _maskLayer.path = [self clippingMaskForAccuracy:accuracy]; -} - -- (void)updateTintColor:(CGColorRef)color -{ - // redraw the raw tinted gradient - self.contents = (__bridge id)[self gradientImageWithTintColor:color]; -} - -- (CGImageRef)gradientImageWithTintColor:(CGColorRef)tintColor -{ - UIImage *image; - - CGFloat haloRadius = MGLUserLocationAnnotationHaloSize / 2.0; - - UIGraphicsBeginImageContextWithOptions(CGSizeMake(MGLUserLocationAnnotationHaloSize, haloRadius), NO, 0); - - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGContextRef context = UIGraphicsGetCurrentContext(); - - // gradient from the tint color to no-alpha tint color - CGFloat gradientLocations[] = {0.0, 1.0}; - CGGradientRef gradient = CGGradientCreateWithColors( - colorSpace, - (__bridge CFArrayRef)@[(__bridge id)tintColor, - (id)CFBridgingRelease(CGColorCreateCopyWithAlpha(tintColor, 0))], - gradientLocations); - - // draw the gradient from the center point to the edge (full halo radius) - CGPoint centerPoint = CGPointMake(haloRadius, haloRadius); - CGContextDrawRadialGradient(context, gradient, - centerPoint, 0.0, - centerPoint, haloRadius, - kNilOptions); - - image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - CGGradientRelease(gradient); - CGColorSpaceRelease(colorSpace); - - return image.CGImage; -} - -- (CGPathRef)clippingMaskForAccuracy:(CGFloat)accuracy -{ - // size the mask using accuracy, but keep within a good display range - CGFloat clippingDegrees = 90 - accuracy; - clippingDegrees = fmin(clippingDegrees, 70); // most accurate - clippingDegrees = fmax(clippingDegrees, 10); // least accurate - - CGRect ovalRect = CGRectMake(0, 0, MGLUserLocationAnnotationHaloSize, MGLUserLocationAnnotationHaloSize); - UIBezierPath *ovalPath = UIBezierPath.bezierPath; - - // clip the oval to ± incoming accuracy degrees (converted to radians), from the top - [ovalPath addArcWithCenter:CGPointMake(CGRectGetMidX(ovalRect), CGRectGetMidY(ovalRect)) - radius:CGRectGetWidth(ovalRect) / 2.0 - startAngle:MGLRadiansFromDegrees(-180 + clippingDegrees) - endAngle:MGLRadiansFromDegrees(-clippingDegrees) - clockwise:YES]; - - [ovalPath addLineToPoint:CGPointMake(CGRectGetMidX(ovalRect), CGRectGetMidY(ovalRect))]; - [ovalPath closePath]; - - return ovalPath.CGPath; -} - -@end diff --git a/platform/ios/src/MGLUserLocationHeadingIndicator.h b/platform/ios/src/MGLUserLocationHeadingIndicator.h deleted file mode 100644 index 61476b96a28..00000000000 --- a/platform/ios/src/MGLUserLocationHeadingIndicator.h +++ /dev/null @@ -1,10 +0,0 @@ -#import -#import "MGLUserLocationAnnotationView.h" - -@protocol MGLUserLocationHeadingIndicator - -- (instancetype)initWithUserLocationAnnotationView:(MGLUserLocationAnnotationView *)userLocationView; -- (void)updateHeadingAccuracy:(CLLocationDirection)accuracy; -- (void)updateTintColor:(CGColorRef)color; - -@end diff --git a/platform/ios/src/MGLUserLocation_Private.h b/platform/ios/src/MGLUserLocation_Private.h deleted file mode 100644 index 48f6d40e8c1..00000000000 --- a/platform/ios/src/MGLUserLocation_Private.h +++ /dev/null @@ -1,19 +0,0 @@ -#import "MGLUserLocation.h" - -#import - -@class MGLMapView; - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLUserLocation (Private) - -@property (nonatomic, weak) MGLMapView *mapView; -@property (nonatomic, readwrite, nullable) CLLocation *location; -@property (nonatomic, readwrite, nullable) CLHeading *heading; - -- (instancetype)initWithMapView:(MGLMapView *)mapView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/Mapbox-Prefix.pch b/platform/ios/src/Mapbox-Prefix.pch deleted file mode 100644 index 6754020861c..00000000000 --- a/platform/ios/src/Mapbox-Prefix.pch +++ /dev/null @@ -1 +0,0 @@ -#import "MMENamespacedDependencies.h" diff --git a/platform/ios/src/Mapbox.h b/platform/ios/src/Mapbox.h deleted file mode 100644 index 98e673577c9..00000000000 --- a/platform/ios/src/Mapbox.h +++ /dev/null @@ -1,77 +0,0 @@ -#import - -#import "MGLFoundation.h" - -/// Project version number for Mapbox. -FOUNDATION_EXPORT MGL_EXPORT double MapboxVersionNumber; - -/// Project version string for Mapbox. -FOUNDATION_EXPORT MGL_EXPORT const unsigned char MapboxVersionString[]; - -#import "MGLAnnotationView.h" -#import "MGLAccountManager.h" -#import "MGLAnnotation.h" -#import "MGLAnnotationImage.h" -#import "MGLCalloutView.h" -#import "MGLClockDirectionFormatter.h" -#import "MGLCluster.h" -#import "MGLCompassButton.h" -#import "MGLCompassDirectionFormatter.h" -#import "MGLCoordinateFormatter.h" -#import "MGLDistanceFormatter.h" -#import "MGLFeature.h" -#import "MGLGeometry.h" -#import "MGLLight.h" -#import "MGLMapCamera.h" -#import "MGLMapView.h" -#import "MGLMapView+IBAdditions.h" -#import "MGLMapViewDelegate.h" -#import "MGLMultiPoint.h" -#import "MGLOfflinePack.h" -#import "MGLOfflineRegion.h" -#import "MGLOfflineStorage.h" -#import "MGLOverlay.h" -#import "MGLPointAnnotation.h" -#import "MGLPointCollection.h" -#import "MGLPolygon.h" -#import "MGLPolyline.h" -#import "MGLShape.h" -#import "MGLShapeCollection.h" -#import "MGLStyle.h" -#import "MGLStyleLayer.h" -#import "MGLForegroundStyleLayer.h" -#import "MGLVectorStyleLayer.h" -#import "MGLFillExtrusionStyleLayer.h" -#import "MGLFillStyleLayer.h" -#import "MGLLineStyleLayer.h" -#import "MGLSymbolStyleLayer.h" -#import "MGLRasterStyleLayer.h" -#import "MGLCircleStyleLayer.h" -#import "MGLHeatmapStyleLayer.h" -#import "MGLHillshadeStyleLayer.h" -#import "MGLBackgroundStyleLayer.h" -#import "MGLOpenGLStyleLayer.h" -#import "MGLSource.h" -#import "MGLTileSource.h" -#import "MGLVectorTileSource.h" -#import "MGLShapeSource.h" -#import "MGLComputedShapeSource.h" -#import "MGLRasterTileSource.h" -#import "MGLRasterDEMSource.h" -#import "MGLImageSource.h" -#import "MGLShapeOfflineRegion.h" -#import "MGLTilePyramidOfflineRegion.h" -#import "MGLTypes.h" -#import "MGLUserLocation.h" -#import "MGLUserLocationAnnotationView.h" -#import "NSValue+MGLAdditions.h" -#import "MGLStyleValue.h" -#import "MGLAttributionInfo.h" -#import "MGLMapSnapshotter.h" -#import "NSExpression+MGLAdditions.h" -#import "NSPredicate+MGLAdditions.h" -#import "MGLLocationManager.h" -#import "MGLLoggingConfiguration.h" -#import "MGLNetworkConfiguration.h" -#import "MGLAttributedExpression.h" -#import "MGLSDKMetricsManager.h" diff --git a/platform/ios/src/NSOrthography+MGLAdditions.h b/platform/ios/src/NSOrthography+MGLAdditions.h deleted file mode 100644 index a552fc77742..00000000000 --- a/platform/ios/src/NSOrthography+MGLAdditions.h +++ /dev/null @@ -1,18 +0,0 @@ -#import - -@interface NSOrthography (NSOrthography_MGLAdditions) - -/** - Returns a four-letter ISO 15924 code representing the name of the dominant - script for a given language. - - On iOS 11 or newer, this method wraps - `+[NSOrthography defaultOrthographyForLanguage:]` and supports any language. - On iOS 10 and older, this method only returns values for Mapbox - Streets-supported languages. - - @param language The ISO-639 code representing a language. - */ -+ (NSString *)mgl_dominantScriptForMapboxStreetsLanguage:(NSString *)language; - -@end diff --git a/platform/ios/src/NSOrthography+MGLAdditions.m b/platform/ios/src/NSOrthography+MGLAdditions.m deleted file mode 100644 index f48a2ffcbeb..00000000000 --- a/platform/ios/src/NSOrthography+MGLAdditions.m +++ /dev/null @@ -1,37 +0,0 @@ -#import "NSOrthography+MGLAdditions.h" - -@implementation NSOrthography (MGLAdditions) - -+ (NSString *)mgl_dominantScriptForMapboxStreetsLanguage:(NSString *)language { - if (@available(iOS 11.0, *)) { - NSLocale *locale = [NSLocale localeWithLocaleIdentifier:language]; - NSOrthography *orthography = [NSOrthography defaultOrthographyForLanguage:locale.localeIdentifier]; - - return orthography.dominantScript; - } - - // Manually map Mapbox Streets languages to ISO 15924 script codes. - NSSet *latinLanguages = [NSSet setWithObjects:@"de", @"en", @"es", @"fr", @"pt", nil]; - NSSet *hansLanguages = [NSSet setWithObjects:@"zh", @"zh-Hans", nil]; - - if ([latinLanguages containsObject:language]) { - return @"Latn"; - } else if ([hansLanguages containsObject:language]) { - return @"Hans"; - } else if ([language isEqualToString:@"zh-Hant"]) { - return @"Hant"; - } else if ([language isEqualToString:@"ru"]) { - return @"Cyrl"; - } else if ([language isEqualToString:@"ar"]) { - return @"Arab"; - } else if ([language isEqualToString:@"ja"]) { - return @"Jpan"; - } else if ([language isEqualToString:@"ko"]) { - return @"Kore"; - } else { - // Code for undetermined script - return @"Zyyy"; - } -} - -@end diff --git a/platform/ios/src/UIColor+MGLAdditions.h b/platform/ios/src/UIColor+MGLAdditions.h deleted file mode 100644 index 19702fa105d..00000000000 --- a/platform/ios/src/UIColor+MGLAdditions.h +++ /dev/null @@ -1,22 +0,0 @@ -#import - -#include -#include - -@interface UIColor (MGLAdditions) - -- (mbgl::Color)mgl_color; - -- (mbgl::style::PropertyValue)mgl_colorPropertyValue; - -+ (UIColor *)mgl_colorWithColor:(mbgl::Color)color; - -@end - -@interface NSExpression (MGLColorAdditions) - -+ (NSExpression *)mgl_expressionForRGBComponents:(NSArray *)components; -+ (NSExpression *)mgl_expressionForRGBAComponents:(NSArray *)components; -+ (UIColor *)mgl_colorWithRGBComponents:(NSArray *)components; - -@end diff --git a/platform/ios/src/UIColor+MGLAdditions.mm b/platform/ios/src/UIColor+MGLAdditions.mm deleted file mode 100644 index 68e77f5b101..00000000000 --- a/platform/ios/src/UIColor+MGLAdditions.mm +++ /dev/null @@ -1,86 +0,0 @@ -#import "UIColor+MGLAdditions.h" - -@implementation UIColor (MGLAdditions) - -- (mbgl::Color)mgl_color -{ - CGFloat r, g, b, a; - [self getRed:&r green:&g blue:&b alpha:&a]; - // UIColor provides non-premultiplied color components, so we have to premultiply each - // color component with the alpha value to transform it into a valid - // mbgl::Color which expects premultiplied color components. - return { static_cast(r*a), static_cast(g*a), static_cast(b*a), static_cast(a) }; -} - -- (mbgl::style::PropertyValue)mgl_colorPropertyValue -{ - mbgl::Color color = self.mgl_color; - return {{ color.r, color.g, color.b, color.a }}; -} - -+ (UIColor *)mgl_colorWithColor:(mbgl::Color)color -{ - // If there is no alpha value, return original color values. - if (color.a == 0.0f) { - return [UIColor colorWithRed:color.r green:color.g blue:color.b alpha:color.a]; - } - - // mbgl::Color provides premultiplied color components, so we have to convert color - // components to non-premultiplied values to return a valid UIColor object. - float red = static_cast((color.r / color.a)); - float green = static_cast((color.g / color.a)); - float blue = static_cast((color.b / color.a)); - - return [UIColor colorWithRed:red green:green blue:blue alpha:color.a]; -} - -@end - -@implementation NSExpression (MGLColorAdditions) - -+ (NSExpression *)mgl_expressionForRGBComponents:(NSArray *)components { - if (UIColor *color = [self mgl_colorWithRGBComponents:components]) { - return [NSExpression expressionForConstantValue:color]; - } - - NSExpression *color = [NSExpression expressionForConstantValue:[UIColor class]]; - NSExpression *alpha = [NSExpression expressionForConstantValue:@1.0]; - return [NSExpression expressionForFunction:color - selectorName:@"colorWithRed:green:blue:alpha:" - arguments:[components arrayByAddingObject:alpha]]; -} - -+ (NSExpression *)mgl_expressionForRGBAComponents:(NSArray *)components { - if (UIColor *color = [self mgl_colorWithRGBComponents:components]) { - return [NSExpression expressionForConstantValue:color]; - } - - NSExpression *color = [NSExpression expressionForConstantValue:[UIColor class]]; - return [NSExpression expressionForFunction:color - selectorName:@"colorWithRed:green:blue:alpha:" - arguments:components]; -} - -+ (UIColor *)mgl_colorWithRGBComponents:(NSArray *)components { - if (components.count < 3 || components.count > 4) { - return nil; - } - - for (NSExpression *component in components) { - if (component.expressionType != NSConstantValueExpressionType) { - return nil; - } - - NSNumber *number = (NSNumber *)component.constantValue; - if (![number isKindOfClass:[NSNumber class]]) { - return nil; - } - } - - return [UIColor colorWithRed:[components[0].constantValue doubleValue] / 255.0 - green:[components[1].constantValue doubleValue] / 255.0 - blue:[components[2].constantValue doubleValue] / 255.0 - alpha:components.count == 3 ? 1.0 : [components[3].constantValue doubleValue]]; -} - -@end diff --git a/platform/ios/src/UIDevice+MGLAdditions.h b/platform/ios/src/UIDevice+MGLAdditions.h deleted file mode 100644 index a61aedf2db9..00000000000 --- a/platform/ios/src/UIDevice+MGLAdditions.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -@interface UIDevice (MGLAdditions) - -@property (nonatomic, readonly) BOOL mgl_isLegacyDevice; - -@end diff --git a/platform/ios/src/UIDevice+MGLAdditions.m b/platform/ios/src/UIDevice+MGLAdditions.m deleted file mode 100644 index 3522c074018..00000000000 --- a/platform/ios/src/UIDevice+MGLAdditions.m +++ /dev/null @@ -1,53 +0,0 @@ -#import "UIDevice+MGLAdditions.h" -#include - -@implementation UIDevice (MGLAdditions) - -- (NSString *)modelString { -#if TARGET_OS_SIMULATOR - return [[[NSProcessInfo processInfo] environment] objectForKey:@"SIMULATOR_MODEL_IDENTIFIER"]; -#else - char *typeSpecifier = "hw.machine"; - - size_t size; - sysctlbyname(typeSpecifier, NULL, &size, NULL, 0); - - char *answer = malloc(size); - sysctlbyname(typeSpecifier, answer, &size, NULL, 0); - - NSString *results = [NSString stringWithCString:answer encoding:NSUTF8StringEncoding]; - - free(answer); - return results; -#endif -} - -- (BOOL)mgl_isLegacyDevice { - // This is a list of supported devices that cannot maintain a reasonable frame - // rate under typical load. For brevity, unsupported devices are not included. - NSSet *blacklist = [NSSet setWithObjects: - @"iPhone4", // iPhone 4s - @"iPhone5", // iPhone 5, 5c - @"iPhone6", // iPhone 5s - - @"iPad2", // iPad 2, Mini - @"iPad3", // iPad 3 - @"iPad4", // iPad Air, Mini 2, Mini 3 - - @"iPod5", // iPod Touch 5 - - nil - ]; - - NSString *model = [self modelString]; - - for (NSString *blacklistedModel in blacklist) { - if ([model hasPrefix:[blacklistedModel stringByAppendingString:@","]]) { - return YES; - } - } - - return NO; -} - -@end diff --git a/platform/ios/src/UIImage+MGLAdditions.h b/platform/ios/src/UIImage+MGLAdditions.h deleted file mode 100644 index 23fac9dbebf..00000000000 --- a/platform/ios/src/UIImage+MGLAdditions.h +++ /dev/null @@ -1,25 +0,0 @@ -#import - -#import "MGLTypes.h" - -#include - -NS_ASSUME_NONNULL_BEGIN - -FOUNDATION_EXTERN MGL_EXPORT MGLExceptionName const MGLResourceNotFoundException; - -@interface UIImage (MGLAdditions) - -- (nullable instancetype)initWithMGLStyleImage:(const mbgl::style::Image *)styleImage; - -- (nullable instancetype)initWithMGLPremultipliedImage:(const mbgl::PremultipliedImage&&)mbglImage scale:(CGFloat)scale; - -- (std::unique_ptr)mgl_styleImageWithIdentifier:(NSString *)identifier; - -- (mbgl::PremultipliedImage)mgl_premultipliedImage; - -+ (UIImage *)mgl_resourceImageNamed:(NSString *)imageName; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/UIImage+MGLAdditions.mm b/platform/ios/src/UIImage+MGLAdditions.mm deleted file mode 100644 index 9d05abd6ca3..00000000000 --- a/platform/ios/src/UIImage+MGLAdditions.mm +++ /dev/null @@ -1,64 +0,0 @@ -#import "UIImage+MGLAdditions.h" -#import "NSBundle+MGLAdditions.h" - -#include - -const MGLExceptionName MGLResourceNotFoundException = @"MGLResourceNotFoundException"; - -@implementation UIImage (MGLAdditions) - -- (nullable instancetype)initWithMGLStyleImage:(const mbgl::style::Image *)styleImage -{ - CGImageRef image = CGImageCreateWithMGLPremultipliedImage(styleImage->getImage().clone()); - if (!image) { - return nil; - } - - if (self = [self initWithCGImage:image scale:styleImage->getPixelRatio() orientation:UIImageOrientationUp]) - { - if (styleImage->isSdf()) - { - self = [self imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - } - } - CGImageRelease(image); - return self; -} - -- (nullable instancetype)initWithMGLPremultipliedImage:(const mbgl::PremultipliedImage&&)mbglImage scale:(CGFloat)scale -{ - CGImageRef image = CGImageCreateWithMGLPremultipliedImage(mbglImage.clone()); - if (!image) { - return nil; - } - - self = [self initWithCGImage:image scale:scale orientation:UIImageOrientationUp]; - - CGImageRelease(image); - return self; -} - -- (std::unique_ptr)mgl_styleImageWithIdentifier:(NSString *)identifier { - BOOL isTemplate = self.renderingMode == UIImageRenderingModeAlwaysTemplate; - return std::make_unique([identifier UTF8String], - self.mgl_premultipliedImage, - float(self.scale), isTemplate); -} - -- (mbgl::PremultipliedImage)mgl_premultipliedImage { - return MGLPremultipliedImageFromCGImage(self.CGImage); -} - -+ (UIImage *)mgl_resourceImageNamed:(NSString *)imageName { - UIImage *image = [UIImage imageNamed:imageName - inBundle:[NSBundle mgl_frameworkBundle] - compatibleWithTraitCollection:nil]; - - if (!image) { - [NSException raise:MGLResourceNotFoundException format:@"The resource named “%@” could not be found in the Mapbox framework bundle.", imageName]; - } - - return image; -} - -@end diff --git a/platform/ios/src/UIView+MGLAdditions.h b/platform/ios/src/UIView+MGLAdditions.h deleted file mode 100644 index ef074215b37..00000000000 --- a/platform/ios/src/UIView+MGLAdditions.h +++ /dev/null @@ -1,19 +0,0 @@ -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIView (MGLAdditions) - -- (nullable UIViewController *)mgl_viewControllerForLayoutGuides; - -- (NSLayoutYAxisAnchor *)mgl_safeTopAnchor; - -- (NSLayoutXAxisAnchor *)mgl_safeLeadingAnchor; - -- (NSLayoutYAxisAnchor *)mgl_safeBottomAnchor; - -- (NSLayoutXAxisAnchor *)mgl_safeTrailingAnchor; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/UIView+MGLAdditions.m b/platform/ios/src/UIView+MGLAdditions.m deleted file mode 100644 index 43c54409bd6..00000000000 --- a/platform/ios/src/UIView+MGLAdditions.m +++ /dev/null @@ -1,69 +0,0 @@ -#import "UIView+MGLAdditions.h" - -@implementation UIView (MGLAdditions) - -- (UIViewController *)mgl_viewControllerForLayoutGuides -{ - // Per -[UIResponder nextResponder] documentation, a UIView’s next responder - // is its managing UIViewController if applicable, or otherwise its - // superview. UIWindow’s next responder is UIApplication, which has no next - // responder. - UIResponder *laterResponder = self; - while ([laterResponder isKindOfClass:[UIView class]]) - { - laterResponder = laterResponder.nextResponder; - } - if ([laterResponder isKindOfClass:[UIViewController class]]) - { - return (UIViewController *)laterResponder; - } - return nil; -} - -- (NSLayoutYAxisAnchor *)mgl_safeTopAnchor { - if (@available(iOS 11.0, *)) { - return self.safeAreaLayoutGuide.topAnchor; - } else { - UIViewController *viewController = self.mgl_viewControllerForLayoutGuides; - BOOL useLayoutGuides = viewController.view && viewController.automaticallyAdjustsScrollViewInsets; - if (useLayoutGuides) { - return viewController.topLayoutGuide.bottomAnchor; - } - else { - return self.topAnchor; - } - } -} - -- (NSLayoutXAxisAnchor *)mgl_safeLeadingAnchor { - if (@available(iOS 11.0, *)) { - return self.safeAreaLayoutGuide.leadingAnchor; - } else { - return self.leadingAnchor; - } -} - -- (NSLayoutYAxisAnchor *)mgl_safeBottomAnchor { - if (@available(iOS 11.0, *)) { - return self.safeAreaLayoutGuide.bottomAnchor; - } else { - UIViewController *viewController = self.mgl_viewControllerForLayoutGuides; - BOOL useLayoutGuides = viewController.view && viewController.automaticallyAdjustsScrollViewInsets; - if (useLayoutGuides) { - return viewController.bottomLayoutGuide.topAnchor; - } - else { - return self.bottomAnchor; - } - } -} - -- (NSLayoutXAxisAnchor *)mgl_safeTrailingAnchor { - if (@available(iOS 11.0, *)) { - return self.safeAreaLayoutGuide.trailingAnchor; - } else { - return self.trailingAnchor; - } -} - -@end diff --git a/platform/ios/src/UIViewController+MGLAdditions.h b/platform/ios/src/UIViewController+MGLAdditions.h deleted file mode 100644 index b60375a6f61..00000000000 --- a/platform/ios/src/UIViewController+MGLAdditions.h +++ /dev/null @@ -1,11 +0,0 @@ -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIViewController (MGLAdditions) - -@property (readonly) UIViewController *mgl_topMostViewController; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/src/UIViewController+MGLAdditions.m b/platform/ios/src/UIViewController+MGLAdditions.m deleted file mode 100644 index 746fdd8db85..00000000000 --- a/platform/ios/src/UIViewController+MGLAdditions.m +++ /dev/null @@ -1,22 +0,0 @@ -#import "UIViewController+MGLAdditions.h" - -@implementation UIViewController (MGLAdditions) - -- (UIViewController *)mgl_topMostViewController -{ - if ([self isKindOfClass:[UINavigationController class]]) - { - return [[(UINavigationController *)self visibleViewController] mgl_topMostViewController]; - } - else if ([self isKindOfClass:[UITabBarController class]]) - { - return [[(UITabBarController *)self selectedViewController] mgl_topMostViewController]; - } - else if (self.presentedViewController) - { - return [self.presentedViewController mgl_topMostViewController]; - } - return self; -} - -@end diff --git a/platform/ios/test/Info.plist b/platform/ios/test/Info.plist deleted file mode 100644 index ba72822e872..00000000000 --- a/platform/ios/test/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/platform/ios/test/MGLAccountManagerTests.m b/platform/ios/test/MGLAccountManagerTests.m deleted file mode 100644 index fd59de2fd58..00000000000 --- a/platform/ios/test/MGLAccountManagerTests.m +++ /dev/null @@ -1,25 +0,0 @@ -#import -#import - -@interface MBXAccounts: NSObject -@property (class, nonatomic, readonly) NSString *skuToken; -@end - -@implementation MBXAccounts - -+ (NSString *)skuToken { - return @"foo"; -} - -@end - -@interface MGLAccountManagerTests : XCTestCase -@end - -@implementation MGLAccountManagerTests - -- (void)testSKU { - XCTAssertTrue([[MGLAccountManager valueForKeyPath:@"skuToken"] isEqualToString:@"foo"]); -} - -@end diff --git a/platform/ios/test/MGLAnnotationViewIntegrationTests.swift b/platform/ios/test/MGLAnnotationViewIntegrationTests.swift deleted file mode 100644 index 82a57a40097..00000000000 --- a/platform/ios/test/MGLAnnotationViewIntegrationTests.swift +++ /dev/null @@ -1,23 +0,0 @@ -import XCTest -import Mapbox - -class CustomAnnotationView: MGLAnnotationView { - - override init(reuseIdentifier: String?) { - super.init(reuseIdentifier: reuseIdentifier) - } - - required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - } - -} - -class MGLAnnotationViewIntegrationTests: XCTestCase { - - func testCreatingCustomAnnotationView() { - let customAnnotationView = CustomAnnotationView(reuseIdentifier: "resuse-id") - XCTAssertNotNil(customAnnotationView) - } - -} diff --git a/platform/ios/test/MGLAnnotationViewTests.m b/platform/ios/test/MGLAnnotationViewTests.m deleted file mode 100644 index bb85ea8c8aa..00000000000 --- a/platform/ios/test/MGLAnnotationViewTests.m +++ /dev/null @@ -1,273 +0,0 @@ -#import -#import -#import "MGLTestUtility.h" - -static NSString * const MGLTestAnnotationReuseIdentifer = @"MGLTestAnnotationReuseIdentifer"; - - -@interface MGLMapView (Tests) -@property (nonatomic) MGLCameraChangeReason cameraChangeReasonBitmask; -@end - - - -@interface MGLCustomAnnotationView : MGLAnnotationView - -@end - -@implementation MGLCustomAnnotationView - -- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier { - return [super initWithReuseIdentifier:@"reuse-id"]; -} - -@end - -@interface MGLAnnotationView (Test) - -@property (nonatomic) MGLMapView *mapView; -@property (nonatomic, readwrite) MGLAnnotationViewDragState dragState; -- (void)setDragState:(MGLAnnotationViewDragState)dragState; - -@end - -@interface MGLMapView (Test) -@property (nonatomic) UIView *calloutViewForSelectedAnnotation; -@end - -@interface MGLTestAnnotation : NSObject -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; -@end - -@implementation MGLTestAnnotation -@end - -@interface MGLTestCalloutView: UIView -@property (nonatomic) BOOL didCallDismissCalloutAnimated; -@property (nonatomic, strong) id representedObject; -@property (nonatomic, strong) UIView *leftAccessoryView; -@property (nonatomic, strong) UIView *rightAccessoryView; -@property (nonatomic, weak) id delegate; -@end - -@implementation MGLTestCalloutView - -- (void)dismissCalloutAnimated:(BOOL)animated -{ - _didCallDismissCalloutAnimated = YES; -} - -- (void)presentCalloutFromRect:(CGRect)rect inView:(nonnull UIView *)view constrainedToRect:(CGRect)constrainedRect animated:(BOOL)animated {} - -@end - -@interface MGLAnnotationViewTests : XCTestCase -@property (nonatomic) XCTestExpectation *expectation; -@property (nonatomic) MGLMapView *mapView; -@property (nonatomic, weak) MGLAnnotationView *annotationView; -@property (nonatomic) NSInteger annotationSelectedCount; -@property (nonatomic) void (^prepareAnnotationView)(MGLAnnotationView*); -@end - -@implementation MGLAnnotationViewTests - -- (void)setUp -{ - [super setUp]; - _mapView = [[MGLMapView alloc] initWithFrame:CGRectMake(0, 0, 64, 64)]; - _mapView.delegate = self; -} - -- (void)testAnnotationView -{ - _expectation = [self expectationWithDescription:@"annotation property"]; - - MGLTestAnnotation *annotation = [[MGLTestAnnotation alloc] init]; - [_mapView addAnnotation:annotation]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; - - XCTAssert(_mapView.annotations.count == 1, @"number of annotations should be 1"); - XCTAssertNotNil(_annotationView.annotation, @"annotation property should not be nil"); - XCTAssertNotNil(_annotationView.mapView, @"mapView property should not be nil"); - - MGLTestCalloutView *testCalloutView = [[MGLTestCalloutView alloc] init]; - _mapView.calloutViewForSelectedAnnotation = testCalloutView; - _annotationView.dragState = MGLAnnotationViewDragStateStarting; - XCTAssertTrue(testCalloutView.didCallDismissCalloutAnimated, @"callout view was not dismissed"); - - [_mapView removeAnnotation:_annotationView.annotation]; - - XCTAssert(_mapView.annotations.count == 0, @"number of annotations should be 0"); - XCTAssertNil(_annotationView.annotation, @"annotation property should be nil"); -} - -- (void)testCustomAnnotationView -{ - MGLCustomAnnotationView *customAnnotationView = [[MGLCustomAnnotationView alloc] initWithReuseIdentifier:@"reuse-id"]; - XCTAssertNotNil(customAnnotationView); -} - -- (void)testSelectingOffscreenAnnotation -{ - // Partial test for https://github.com/mapbox/mapbox-gl-native/issues/9790 - - // This isn't quite the same as in updateAnnotationViews, but should be sufficient for this test. - MGLCoordinateBounds coordinateBounds = [_mapView convertRect:_mapView.bounds toCoordinateBoundsFromView:_mapView]; - - // -90 latitude is invalid. TBD. - BOOL anyOffscreen = NO; - NSInteger selectionCount = 0; - - for (NSInteger latitude = -89; latitude <= 90; latitude += 10) - { - for (NSInteger longitude = -180; longitude <= 180; longitude += 10) - { - MGLTestAnnotation *annotation = [[MGLTestAnnotation alloc] init]; - - annotation.coordinate = CLLocationCoordinate2DMake(latitude, longitude); - [_mapView addAnnotation:annotation]; - - if (!(MGLCoordinateInCoordinateBounds(annotation.coordinate, coordinateBounds))) - anyOffscreen = YES; - - XCTAssertNil(_mapView.selectedAnnotations.firstObject, @"There should be no selected annotation"); - - // First selection - [_mapView selectAnnotation:annotation animated:NO completionHandler:nil]; - selectionCount++; - - XCTAssert(_mapView.selectedAnnotations.count == 1, @"There should only be 1 selected annotation"); - XCTAssertEqualObjects(_mapView.selectedAnnotations.firstObject, annotation, @"The annotation should be selected"); - - // Deselect - [_mapView deselectAnnotation:annotation animated:NO]; - XCTAssert(_mapView.selectedAnnotations.count == 0, @"There should be no selected annotations"); - - // Second selection - _mapView.selectedAnnotations = @[annotation]; - selectionCount++; - - XCTAssert(_mapView.selectedAnnotations.count == 1, @"There should be 1 selected annotation"); - XCTAssertEqualObjects(_mapView.selectedAnnotations.firstObject, annotation, @"The annotation should be selected"); - - // Deselect - [_mapView deselectAnnotation:annotation animated:NO]; - XCTAssert(_mapView.selectedAnnotations.count == 0, @"There should be no selected annotations"); - } - } - - XCTAssert(anyOffscreen, @"At least one of these annotations should be offscreen"); - XCTAssertEqual(selectionCount, self.annotationSelectedCount, @"-mapView:didSelectAnnotation: should be called for each selection"); -} - -- (void)testSelectingOnscreenAnnotationThatHasNotBeenAdded { - // See https://github.com/mapbox/mapbox-gl-native/issues/11476 - - // This bug occurs under the following conditions: - // - // - There are content insets (e.g. navigation bar) for the compare against - // CGRectZero (now CGRectNull) - // - annotationView.enabled == NO - Currently this can happen if you use - // `-initWithFrame:` rather than one of the provided initializers - // - - self.prepareAnnotationView = ^(MGLAnnotationView *view) { - view.enabled = NO; - }; - - self.mapView.contentInset = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0); - - MGLCameraChangeReason reasonBefore = self.mapView.cameraChangeReasonBitmask; - XCTAssert(reasonBefore == MGLCameraChangeReasonNone, @"Camera should not have moved at start of test"); - - // Create annotation - MGLPointFeature *point = [[MGLPointFeature alloc] init]; - point.title = NSStringFromSelector(_cmd); - point.coordinate = CLLocationCoordinate2DMake(0.0, 0.0); - - MGLCoordinateBounds coordinateBounds = [self.mapView convertRect:self.mapView.bounds toCoordinateBoundsFromView:self.mapView]; - XCTAssert(MGLCoordinateInCoordinateBounds(point.coordinate, coordinateBounds), @"The test point should be within the visible map view"); - - // Select on screen annotation (DO NOT ADD FIRST). - [self.mapView selectAnnotation:point animated:YES completionHandler:nil]; - - // Expect - the camera NOT to move. - MGLCameraChangeReason reasonAfter = self.mapView.cameraChangeReasonBitmask; - XCTAssert(reasonAfter == MGLCameraChangeReasonNone, @"Camera should not have moved"); -} - -- (void)checkDefaultPropertiesForAnnotationView:(MGLAnnotationView*)view { - XCTAssertNil(view.annotation); - XCTAssertNil(view.reuseIdentifier); - XCTAssertEqual(view.centerOffset.dx, 0.0); - XCTAssertEqual(view.centerOffset.dy, 0.0); - XCTAssertFalse(view.scalesWithViewingDistance); - XCTAssertFalse(view.rotatesToMatchCamera); - XCTAssertFalse(view.isSelected); - XCTAssert(view.isEnabled); - XCTAssertFalse(view.isDraggable); - XCTAssertEqual(view.dragState, MGLAnnotationViewDragStateNone); -} - -- (void)testAnnotationViewInitWithFramePENDING { - MGL_CHECK_IF_PENDING_TEST_SHOULD_RUN(); - CGRect frame = CGRectMake(10.0, 10.0, 100.0, 100.0); - MGLAnnotationView *view = [[MGLAnnotationView alloc] initWithFrame:frame]; - [self checkDefaultPropertiesForAnnotationView:view]; -} - -- (void)testAnnotationViewInitWithReuseIdentifier { - MGLAnnotationView *view = [[MGLAnnotationView alloc] initWithReuseIdentifier:nil]; - [self checkDefaultPropertiesForAnnotationView:view]; -} - -- (void)testSelectingADisabledAnnotationViewPENDING { - MGL_CHECK_IF_PENDING_TEST_SHOULD_RUN(); - self.prepareAnnotationView = ^(MGLAnnotationView *view) { - view.enabled = NO; - }; - - // Create annotation - MGLPointFeature *point = [[MGLPointFeature alloc] init]; - point.title = NSStringFromSelector(_cmd); - point.coordinate = CLLocationCoordinate2DMake(0.0, 0.0); - - XCTAssert(self.mapView.selectedAnnotations.count == 0, @"There should be 0 selected annotations"); - - [self.mapView selectAnnotation:point animated:NO completionHandler:nil]; - - XCTAssert(self.mapView.selectedAnnotations.count == 0, @"There should be 0 selected annotations"); -} - -#pragma mark - MGLMapViewDelegate - - -- (MGLAnnotationView *)mapView:(MGLMapView *)mapView viewForAnnotation:(id)annotation -{ - MGLAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:MGLTestAnnotationReuseIdentifer]; - - if (!annotationView) - { - annotationView = [[MGLAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:MGLTestAnnotationReuseIdentifer]; - } - - if (self.prepareAnnotationView) { - self.prepareAnnotationView(annotationView); - } - - _annotationView = annotationView; - - return annotationView; -} - -- (void)mapView:(MGLMapView *)mapView didAddAnnotationViews:(NSArray *)annotationViews -{ - [_expectation fulfill]; -} - -- (void)mapView:(MGLMapView *)mapView didSelectAnnotation:(id)annotation -{ - self.annotationSelectedCount++; -} - -@end diff --git a/platform/ios/test/MGLMapAccessibilityElementTests.m b/platform/ios/test/MGLMapAccessibilityElementTests.m deleted file mode 100644 index 916461e7088..00000000000 --- a/platform/ios/test/MGLMapAccessibilityElementTests.m +++ /dev/null @@ -1,87 +0,0 @@ -#import -#import - -#import "../../ios/src/MGLMapAccessibilityElement.h" - -@interface MGLMapAccessibilityElementTests : XCTestCase -@end - -@implementation MGLMapAccessibilityElementTests - -- (void)testFeatureLabels { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - feature.attributes = @{ - @"name": @"Local", - @"name_en": @"English", - @"name_es": @"Spanish", - @"name_fr": @"French", - @"name_tlh": @"Klingon", - }; - MGLFeatureAccessibilityElement *element = [[MGLFeatureAccessibilityElement alloc] initWithAccessibilityContainer:self feature:feature]; - XCTAssertEqualObjects(element.accessibilityLabel, @"English", @"Accessibility label should be localized."); - - feature.attributes = @{ - @"name": @"Цинциннати", - @"name_en": @"Цинциннати", - }; - element = [[MGLFeatureAccessibilityElement alloc] initWithAccessibilityContainer:self feature:feature]; - XCTAssertEqualObjects(element.accessibilityLabel, @"Cincinnati", @"Accessibility label should be romanized."); -} - -- (void)testPlaceFeatureValues { - MGLPointFeature *feature = [[MGLPointFeature alloc] init]; - feature.attributes = @{ - @"type": @"village_green", - }; - MGLPlaceFeatureAccessibilityElement *element = [[MGLPlaceFeatureAccessibilityElement alloc] initWithAccessibilityContainer:self feature:feature]; - XCTAssertEqualObjects(element.accessibilityValue, @"village green"); - - feature = [[MGLPointFeature alloc] init]; - feature.attributes = @{ - @"maki": @"cat", - }; - element = [[MGLPlaceFeatureAccessibilityElement alloc] initWithAccessibilityContainer:self feature:feature]; - XCTAssertEqualObjects(element.accessibilityValue, @"cat"); - - feature = [[MGLPointFeature alloc] init]; - feature.attributes = @{ - @"elevation_ft": @31337, - @"elevation_m": @1337, - }; - element = [[MGLPlaceFeatureAccessibilityElement alloc] initWithAccessibilityContainer:self feature:feature]; - XCTAssertEqualObjects(element.accessibilityValue, @"31,337 feet"); -} - -- (void)testRoadFeatureValues { - CLLocationCoordinate2D coordinates[] = { - CLLocationCoordinate2DMake(0, 0), - CLLocationCoordinate2DMake(0, 1), - CLLocationCoordinate2DMake(1, 2), - CLLocationCoordinate2DMake(2, 2), - }; - MGLPolylineFeature *roadFeature = [MGLPolylineFeature polylineWithCoordinates:coordinates count:sizeof(coordinates) / sizeof(coordinates[0])]; - roadFeature.attributes = @{ - @"ref": @"42", - @"oneway": @"true", - }; - MGLRoadFeatureAccessibilityElement *element = [[MGLRoadFeatureAccessibilityElement alloc] initWithAccessibilityContainer:self feature:roadFeature]; - XCTAssertEqualObjects(element.accessibilityValue, @"Route 42, One way, southwest to northeast"); - - CLLocationCoordinate2D opposingCoordinates[] = { - CLLocationCoordinate2DMake(2, 1), - CLLocationCoordinate2DMake(1, 0), - }; - MGLPolylineFeature *opposingRoadFeature = [MGLPolylineFeature polylineWithCoordinates:opposingCoordinates count:sizeof(opposingCoordinates) / sizeof(opposingCoordinates[0])]; - opposingRoadFeature.attributes = @{ - @"ref": @"42", - @"oneway": @"true", - }; - MGLMultiPolylineFeature *dividedRoadFeature = [MGLMultiPolylineFeature multiPolylineWithPolylines:@[roadFeature, opposingRoadFeature]]; - dividedRoadFeature.attributes = @{ - @"ref": @"42", - }; - element = [[MGLRoadFeatureAccessibilityElement alloc] initWithAccessibilityContainer:self feature:dividedRoadFeature]; - XCTAssertEqualObjects(element.accessibilityValue, @"Route 42, Divided road, southwest to northeast"); -} - -@end diff --git a/platform/ios/test/MGLMapViewCompassViewTests.mm b/platform/ios/test/MGLMapViewCompassViewTests.mm deleted file mode 100644 index aaec4b0bf79..00000000000 --- a/platform/ios/test/MGLMapViewCompassViewTests.mm +++ /dev/null @@ -1,98 +0,0 @@ -#import -#import - -#import - -@interface MGLMapView (MGLCompassButtonTests) -- (void)resetNorthAnimated:(BOOL)animated; -@end - -@interface MGLCompassButtonTests : XCTestCase -@property (nonatomic) MGLMapView *mapView; -@end - -@implementation MGLCompassButtonTests - -- (void)setUp { - [super setUp]; - - [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"]; - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - self.mapView = [[MGLMapView alloc] initWithFrame:UIScreen.mainScreen.bounds styleURL:styleURL]; -} - -- (void)tearDown { - self.mapView = nil; - [MGLAccountManager setAccessToken:nil]; - - [super tearDown]; -} - -- (void)testCompassButton { - XCTAssertNotNil(self.mapView.compassView); - XCTAssertTrue([self.mapView.compassView isKindOfClass:[MGLCompassButton class]]); - XCTAssertTrue(self.mapView.compassView.userInteractionEnabled); - XCTAssertEqual(self.mapView.compassView.gestureRecognizers.count, (unsigned long)1); - XCTAssertEqual(self.mapView.compassView.accessibilityTraits, UIAccessibilityTraitButton); - XCTAssertNotNil(self.mapView.compassView.accessibilityLabel); - XCTAssertNotNil(self.mapView.compassView.accessibilityHint); -} - -- (void)testVisibilityAdaptive { - XCTAssertEqual(self.mapView.compassView.compassVisibility, MGLOrnamentVisibilityAdaptive, @"Adaptive should be the default visibility setting."); - XCTAssertEqual(self.mapView.compassView.alpha, 0, @"Compass should not initially be visible."); - - self.mapView.zoomLevel = 15.f; - [self.mapView setDirection:45.f animated:false]; - XCTAssertEqualWithAccuracy(self.mapView.direction, 45, 0.001); - XCTAssertEqual(self.mapView.compassView.alpha, 1, @"Compass should become visible when direction changes."); - - [self.mapView resetNorthAnimated:NO]; - XCTAssertEqual(self.mapView.direction, 0); - XCTAssertEqual(self.mapView.compassView.alpha, 0, @"Compass should hide itself when direction is north."); -} - -- (void)testVisibilityHidden { - self.mapView.compassView.compassVisibility = MGLOrnamentVisibilityHidden; - XCTAssertEqual(self.mapView.compassView.compassVisibility, MGLOrnamentVisibilityHidden); - XCTAssertEqual(self.mapView.compassView.alpha, 0, @"Compass should not initially be visible."); - - self.mapView.zoomLevel = 15.f; - [self.mapView setDirection:45.f animated:false]; - XCTAssertEqualWithAccuracy(self.mapView.direction, 45, 0.001); - XCTAssertEqual(self.mapView.compassView.alpha, 0, @"Compass should stay hidden when direction changes."); -} - -- (void)testVisibilityVisible { - self.mapView.compassView.compassVisibility = MGLOrnamentVisibilityVisible; - XCTAssertEqual(self.mapView.compassView.compassVisibility, MGLOrnamentVisibilityVisible); - XCTAssertEqual(self.mapView.compassView.alpha, 1, @"Compass should initially be visible."); - - self.mapView.zoomLevel = 15.f; - [self.mapView setDirection:45.f animated:false]; - XCTAssertEqualWithAccuracy(self.mapView.direction, 45, 0.001); - XCTAssertEqual(self.mapView.compassView.alpha, 1, @"Compass should continue to be visible when direction changes."); - - [self.mapView resetNorthAnimated:NO]; - XCTAssertEqual(self.mapView.direction, 0); - XCTAssertEqual(self.mapView.compassView.alpha, 1, @"Compass should continue to be visible when direction is north."); -} - -- (void)testCompassRotation { - self.mapView.zoomLevel = 15; - - for (NSNumber *degrees in @[@-999, @-359, @-240, @-180, @-90, @-45, @0, @45, @90, @180, @240, @360, @999]) { - self.mapView.direction = [degrees doubleValue]; - CGFloat wrappedDirection = mbgl::util::wrap(-self.mapView.direction, 0., 360.); - CGAffineTransform rotation = CGAffineTransformMakeRotation(MGLRadiansFromDegrees(wrappedDirection)); - XCTAssertTrue(CGAffineTransformEqualToTransform(self.mapView.compassView.transform, rotation), - @"Compass transform direction %f° should equal wrapped transform direction %f° (~%.f°).", [self degreesFromAffineTransform:self.mapView.compassView.transform], [self degreesFromAffineTransform:rotation], wrappedDirection); - } -} - -- (CGFloat)degreesFromAffineTransform:(CGAffineTransform)transform { - CGFloat angle = atan2f(transform.b, transform.a); - return MGLDegreesFromRadians(angle); -} - -@end diff --git a/platform/ios/test/MGLMapViewContentInsetTests.m b/platform/ios/test/MGLMapViewContentInsetTests.m deleted file mode 100644 index 185baf4a050..00000000000 --- a/platform/ios/test/MGLMapViewContentInsetTests.m +++ /dev/null @@ -1,177 +0,0 @@ -#import -#import - -@interface MGLMapViewContentInsetTests : XCTestCase - -@property (nonatomic) MGLMapView *mapView; -@property (nonatomic) UIWindow *window; -@property (nonatomic) UIViewController *viewController; -@property (nonatomic) XCTestExpectation *styleLoadingExpectation; -@property (assign) CGRect screenBounds; - -@end - -@implementation MGLMapViewContentInsetTests - -- (void)setUp { - [super setUp]; - - [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"]; - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - self.screenBounds = UIScreen.mainScreen.bounds; - self.mapView = [[MGLMapView alloc] initWithFrame:self.screenBounds styleURL:styleURL]; - self.mapView.zoomLevel = 16; - self.mapView.delegate = self; - - self.viewController = [[UIViewController alloc] init]; - self.viewController.view = [[UIView alloc] initWithFrame:self.screenBounds]; - [self.viewController.view addSubview:self.mapView]; - self.window = [[UIWindow alloc] initWithFrame:self.screenBounds]; - [self.window addSubview:self.viewController.view]; - [self.window makeKeyAndVisible]; - - if (!self.mapView.style) { - _styleLoadingExpectation = [self expectationWithDescription:@"Map view should finish loading style."]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - } -} - -- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style { - XCTAssertNotNil(mapView.style); - XCTAssertEqual(mapView.style, style); - - [_styleLoadingExpectation fulfill]; -} - -- (void)tearDown { - self.mapView = nil; - [MGLAccountManager setAccessToken:nil]; - [super tearDown]; -} - -- (void)testContentInsetCenter { - CLLocationCoordinate2D center = CLLocationCoordinate2DMake(1.0, 5.0); - self.mapView.centerCoordinate = center; - XCTAssertEqualWithAccuracy(self.mapView.centerCoordinate.latitude, center.latitude, 0.01); - XCTAssertEqualWithAccuracy(self.mapView.centerCoordinate.longitude, center.longitude, 0.01); - - CGPoint centerPoint = [self.mapView convertCoordinate:center toPointToView:self.mapView]; - - XCTAssertEqualWithAccuracy(centerPoint.x, self.screenBounds.size.width/2, 0.01); - XCTAssertEqualWithAccuracy(centerPoint.y, self.screenBounds.size.height/2, 0.01); - - // shifting contentInset should keep the same centerCoordinate but shift the screen - // center point accordingly - UIEdgeInsets contentInset = UIEdgeInsetsMake(50.0, 10.0, 10.0, 30.0); - self.mapView.contentInset = contentInset; - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - XCTAssertEqualWithAccuracy(self.mapView.centerCoordinate.latitude, center.latitude, 0.01); - XCTAssertEqualWithAccuracy(self.mapView.centerCoordinate.longitude, center.longitude, 0.01); - CGPoint shiftedPoint = [self.mapView convertCoordinate:center toPointToView:self.mapView]; - CGPoint expectedShiftedPoint = CGPointMake((self.screenBounds.size.width/2) + ((contentInset.left - contentInset.right) / 2 ), - (self.screenBounds.size.height/2) + ((contentInset.top - contentInset.bottom) / 2)); - XCTAssertEqualWithAccuracy(shiftedPoint.x, expectedShiftedPoint.x, 0.01); - XCTAssertEqualWithAccuracy(shiftedPoint.y, expectedShiftedPoint.y, 0.01); - - -} - -- (void)testContentInsetOrnaments { - CGFloat margin = 8; - self.mapView.contentInset = UIEdgeInsetsZero; - UIView *scaleBar = self.mapView.scaleBar; - CGPoint expectedScaleBarOrigin = CGPointMake(margin, margin); - XCTAssertTrue(CGPointEqualToPoint(scaleBar.frame.origin, expectedScaleBarOrigin)); - - UIView *compassView = self.mapView.compassView; - CGFloat x = self.screenBounds.size.width - compassView.bounds.size.width - margin; - CGPoint expectedCompassOrigin = CGPointMake(x, margin); - XCTAssertTrue(CGPointEqualToPoint(compassView.frame.origin, expectedCompassOrigin)); - - UIView *logoView = self.mapView.logoView; - CGFloat y = self.screenBounds.size.height - logoView.bounds.size.height - margin; - CGPoint expectedLogoOrigin = CGPointMake(margin, y); - XCTAssertTrue(CGPointEqualToPoint(logoView.frame.origin, expectedLogoOrigin)); - - UIView *attributionView = self.mapView.attributionButton; - x = self.screenBounds.size.width - attributionView.bounds.size.width - margin; - y = self.screenBounds.size.height - attributionView.bounds.size.height - margin; - CGPoint expectedAttributionOrigin = CGPointMake(x, y); - XCTAssertTrue(CGPointEqualToPoint(attributionView.frame.origin, expectedAttributionOrigin)); - - UIEdgeInsets insets = UIEdgeInsetsMake(15, 10, 20, 5); - self.viewController.automaticallyAdjustsScrollViewInsets = NO; - self.mapView.contentInset = insets; - - [self.mapView setNeedsLayout]; - [self.mapView layoutIfNeeded]; - - expectedScaleBarOrigin = CGPointMake(insets.left + self.mapView.scaleBarMargins.x, insets.top + self.mapView.scaleBarMargins.y); - XCTAssertTrue(CGPointEqualToPoint(scaleBar.frame.origin, expectedScaleBarOrigin)); - - x = self.screenBounds.size.width - compassView.bounds.size.width - insets.right - self.mapView.compassViewMargins.x; - expectedCompassOrigin = CGPointMake(x, insets.top + self.mapView.compassViewMargins.y); - XCTAssertTrue(CGPointEqualToPoint(compassView.frame.origin, expectedCompassOrigin)); - - y = self.screenBounds.size.height - logoView.bounds.size.height - insets.bottom - self.mapView.logoViewMargins.y; - expectedLogoOrigin = CGPointMake(insets.left + self.mapView.logoViewMargins.x, y); - XCTAssertTrue(CGPointEqualToPoint(logoView.frame.origin, expectedLogoOrigin)); - - x = self.screenBounds.size.width - attributionView.bounds.size.width - insets.right - self.mapView.attributionButtonMargins.x; - y = self.screenBounds.size.height - attributionView.bounds.size.height - insets.bottom - self.mapView.attributionButtonMargins.y; - expectedAttributionOrigin = CGPointMake(x, y); - XCTAssertTrue(CGPointEqualToPoint(attributionView.frame.origin, expectedAttributionOrigin)); - - // tests that passing negative values result in a 0 inset value - insets = UIEdgeInsetsMake(-100, -100, -100, -100); - self.mapView.contentInset = insets; - - [self.mapView setNeedsLayout]; - [self.mapView layoutIfNeeded]; - - expectedScaleBarOrigin = CGPointMake(margin, margin); - XCTAssertTrue(CGPointEqualToPoint(scaleBar.frame.origin, expectedScaleBarOrigin)); - - x = self.screenBounds.size.width - compassView.bounds.size.width - margin; - expectedCompassOrigin = CGPointMake(x, margin); - XCTAssertTrue(CGPointEqualToPoint(compassView.frame.origin, expectedCompassOrigin)); - - y = self.screenBounds.size.height - logoView.bounds.size.height - margin; - expectedLogoOrigin = CGPointMake(margin, y); - XCTAssertTrue(CGPointEqualToPoint(logoView.frame.origin, expectedLogoOrigin)); - - x = self.screenBounds.size.width - attributionView.bounds.size.width - margin; - y = self.screenBounds.size.height - attributionView.bounds.size.height - margin; - expectedAttributionOrigin = CGPointMake(x, y); - XCTAssertTrue(CGPointEqualToPoint(attributionView.frame.origin, expectedAttributionOrigin)); - - self.mapView.automaticallyAdjustsContentInset = YES; - insets = UIEdgeInsetsMake(100, 100, 100, 100); - self.mapView.contentInset = insets; - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, insets)); - - [self.mapView setNeedsLayout]; - [self.mapView layoutIfNeeded]; - - // when automaticallyAdjustsContentInset = YES the content insets should be overwriten - XCTAssertFalse(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, insets)); - - expectedScaleBarOrigin = CGPointMake(margin, margin); - XCTAssertTrue(CGPointEqualToPoint(scaleBar.frame.origin, expectedScaleBarOrigin)); - - x = self.screenBounds.size.width - compassView.bounds.size.width - margin; - expectedCompassOrigin = CGPointMake(x, margin); - XCTAssertTrue(CGPointEqualToPoint(compassView.frame.origin, expectedCompassOrigin)); - - y = self.screenBounds.size.height - logoView.bounds.size.height - margin; - expectedLogoOrigin = CGPointMake(margin, y); - XCTAssertTrue(CGPointEqualToPoint(logoView.frame.origin, expectedLogoOrigin)); - - x = self.screenBounds.size.width - attributionView.bounds.size.width - margin; - y = self.screenBounds.size.height - attributionView.bounds.size.height - margin; - expectedAttributionOrigin = CGPointMake(x, y); - XCTAssertTrue(CGPointEqualToPoint(attributionView.frame.origin, expectedAttributionOrigin)); - -} - -@end diff --git a/platform/ios/test/MGLMapViewDelegateIntegrationTests.swift b/platform/ios/test/MGLMapViewDelegateIntegrationTests.swift deleted file mode 100644 index 172538c65b7..00000000000 --- a/platform/ios/test/MGLMapViewDelegateIntegrationTests.swift +++ /dev/null @@ -1,103 +0,0 @@ -import XCTest -import Mapbox - -class MGLMapViewDelegateIntegrationTests: XCTestCase { - - func testCoverage() { - MGLSDKTestHelpers.checkTestsContainAllMethods(testClass: MGLMapViewDelegateIntegrationTests.self, in: MGLMapViewDelegate.self) - } - -} - -extension MGLMapViewDelegateIntegrationTests: MGLMapViewDelegate { - - func mapViewRegionIsChanging(_ mapView: MGLMapView) {} - - func mapViewRegionIsChanging(_ mapView: MGLMapView, reason: MGLCameraChangeReason) {} - - func mapView(_ mapView: MGLMapView, regionIsChangingWith reason: MGLCameraChangeReason) {} - - func mapView(_ mapView: MGLMapView, didChange mode: MGLUserTrackingMode, animated: Bool) {} - - func mapViewDidFinishLoadingMap(_ mapView: MGLMapView) {} - - func mapViewDidStopLocatingUser(_ mapView: MGLMapView) {} - - func mapViewWillStartLoadingMap(_ mapView: MGLMapView) {} - - func mapViewWillStartLocatingUser(_ mapView: MGLMapView) {} - - func mapViewWillStartRenderingMap(_ mapView: MGLMapView) {} - - func mapViewWillStartRenderingFrame(_ mapView: MGLMapView) {} - - func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {} - - func mapView(_ mapView: MGLMapView, didSelect annotation: MGLAnnotation) {} - - func mapView(_ mapView: MGLMapView, didDeselect annotation: MGLAnnotation) {} - - func mapView(_ mapView: MGLMapView, didSingleTapAt coordinate: CLLocationCoordinate2D) {} - - func mapView(_ mapView: MGLMapView, regionDidChangeAnimated animated: Bool) {} - - func mapView(_ mapView: MGLMapView, regionDidChangeWith reason: MGLCameraChangeReason, animated: Bool) {} - - func mapView(_ mapView: MGLMapView, regionWillChangeAnimated animated: Bool) {} - - func mapView(_ mapView: MGLMapView, regionWillChangeWith reason: MGLCameraChangeReason, animated: Bool) {} - - func mapViewDidFailLoadingMap(_ mapView: MGLMapView, withError error: Error) {} - - func mapView(_ mapView: MGLMapView, didUpdate userLocation: MGLUserLocation?) {} - - func mapViewDidFinishRenderingMap(_ mapView: MGLMapView, fullyRendered: Bool) {} - - func mapViewDidBecomeIdle(_ mapView: MGLMapView) {} - - func mapView(_ mapView: MGLMapView, didFailToLocateUserWithError error: Error) {} - - func mapView(_ mapView: MGLMapView, tapOnCalloutFor annotation: MGLAnnotation) {} - - func mapViewDidFinishRenderingFrame(_ mapView: MGLMapView, fullyRendered: Bool) {} - - func mapView(_ mapView: MGLMapView, shapeAnnotationIsEnabled annotation: MGLShape) -> Bool { return false } - - func mapView(_ mapView: MGLMapView, didAdd annotationViews: [MGLAnnotationView]) {} - - func mapView(_ mapView: MGLMapView, didSelect annotationView: MGLAnnotationView) {} - - func mapView(_ mapView: MGLMapView, didDeselect annotationView: MGLAnnotationView) {} - - func mapView(_ mapView: MGLMapView, alphaForShapeAnnotation annotation: MGLShape) -> CGFloat { return 0 } - - func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView? { return nil } - - func mapView(_ mapView: MGLMapView, imageFor annotation: MGLAnnotation) -> MGLAnnotationImage? { return nil } - - func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool { return false } - - func mapView(_ mapView: MGLMapView, calloutViewFor annotation: MGLAnnotation) -> MGLCalloutView? { return nil } - - func mapView(_ mapView: MGLMapView, strokeColorForShapeAnnotation annotation: MGLShape) -> UIColor { return .black } - - func mapView(_ mapView: MGLMapView, fillColorForPolygonAnnotation annotation: MGLPolygon) -> UIColor { return .black } - - func mapView(_ mapView: MGLMapView, leftCalloutAccessoryViewFor annotation: MGLAnnotation) -> UIView? { return nil } - - func mapView(_ mapView: MGLMapView, lineWidthForPolylineAnnotation annotation: MGLPolyline) -> CGFloat { return 0 } - - func mapView(_ mapView: MGLMapView, rightCalloutAccessoryViewFor annotation: MGLAnnotation) -> UIView? { return nil } - - func mapView(_ mapView: MGLMapView, annotation: MGLAnnotation, calloutAccessoryControlTapped control: UIControl) {} - - func mapView(_ mapView: MGLMapView, shouldChangeFrom oldCamera: MGLMapCamera, to newCamera: MGLMapCamera) -> Bool { return false } - - func mapView(_ mapView: MGLMapView, shouldChangeFrom oldCamera: MGLMapCamera, to newCamera: MGLMapCamera, reason: MGLCameraChangeReason) -> Bool { return false } - - func mapViewUserLocationAnchorPoint(_ mapView: MGLMapView) -> CGPoint { return CGPoint(x: 100, y: 100) } - - func mapView(_ mapView: MGLMapView, didFailToLoadImage imageName: String) -> UIImage? { return nil } - - func mapView(_ mapView: MGLMapView, shouldRemoveStyleImage imageName: String) -> Bool { return false } -} diff --git a/platform/ios/test/MGLMapViewDirectionTests.mm b/platform/ios/test/MGLMapViewDirectionTests.mm deleted file mode 100644 index 81e169432b3..00000000000 --- a/platform/ios/test/MGLMapViewDirectionTests.mm +++ /dev/null @@ -1,126 +0,0 @@ -#import -#import -#import "MGLMockGestureRecognizers.h" - -#import - -@interface MGLMapView (MGLMapViewDirectionTests) -- (void)handleRotateGesture:(UIRotationGestureRecognizer *)rotate; -- (void)resetNorthAnimated:(BOOL)animated; -@end - - -@interface MGLMapViewDirectionTests : XCTestCase -@property (nonatomic) MGLMapView *mapView; -@end - -@implementation MGLMapViewDirectionTests - -- (void)setUp { - [super setUp]; - - [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"]; - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - self.mapView = [[MGLMapView alloc] initWithFrame:CGRectMake(0, 0, 64, 64) styleURL:styleURL]; -} - -- (void)tearDown { - self.mapView = nil; - [MGLAccountManager setAccessToken:nil]; - [super tearDown]; -} - -- (void)testDirection { - self.mapView.zoomLevel = 0; - self.mapView.direction = 30; - XCTAssertEqual(self.mapView.direction, 0, @"Rotation is not allowed at world-scale zoom levels."); - - self.mapView.zoomLevel = 15; - CLLocationCoordinate2D originalCenterCoordinate = self.mapView.centerCoordinate; - - for (NSNumber *degrees in @[@-999, @-359, @-240, @-180, @-90, @-45, @0, @45, @90, @180, @240, @360, @999]) { - double inputDegrees = [degrees doubleValue]; - double wrappedDegrees = mbgl::util::wrap(inputDegrees, 0., 360.); - self.mapView.direction = inputDegrees; - XCTAssertEqualWithAccuracy(self.mapView.direction, wrappedDegrees, 0.001); - - XCTAssertEqual(originalCenterCoordinate.latitude, self.mapView.centerCoordinate.latitude, "@Map center coordinate latitude should remain constant when direction is set to %@°.", degrees); - XCTAssertEqual(originalCenterCoordinate.longitude, self.mapView.centerCoordinate.longitude, @"Map center coordinate longitude should remain constant when direction is set to %@°.", degrees); - } - - [self.mapView resetNorthAnimated:NO]; - XCTAssertEqual(self.mapView.direction, 0, @"Reset-to-north should set direction to 0°."); - XCTAssertEqual(originalCenterCoordinate.latitude, self.mapView.centerCoordinate.latitude, "@Map center coordinate latitude should remain constant when direction is reset."); - XCTAssertEqual(originalCenterCoordinate.longitude, self.mapView.centerCoordinate.longitude, @"Map center coordinate latitude should remain constant when direction is reset."); -} - -- (void)testRotateEnabled { - self.mapView.zoomLevel = 10; - - UIRotationGestureRecognizerMock *gesture = [[UIRotationGestureRecognizerMock alloc] initWithTarget:nil action:nil]; - gesture.state = UIGestureRecognizerStateBegan; - gesture.rotation = MGLRadiansFromDegrees(30); - CGFloat wrappedRotation = mbgl::util::wrap(-MGLDegreesFromRadians(gesture.rotation), 0., 360.); - - // Disabled - { - self.mapView.rotateEnabled = NO; - XCTAssertEqual(self.mapView.allowsRotating, NO); - - [self.mapView handleRotateGesture:gesture]; - XCTAssertNotEqual(self.mapView.direction, wrappedRotation, @"Gestural rotation should not work when rotation is disabled."); - - self.mapView.direction = 45.f; - XCTAssertEqualWithAccuracy(self.mapView.direction, 45, 0.001, @"Programmatic rotation is allowed when rotateEnabled = NO."); - } - - // Enabled - { - [self.mapView resetNorthAnimated:NO]; - self.mapView.rotateEnabled = YES; - XCTAssertEqual(self.mapView.allowsRotating, YES); - - gesture.state = UIGestureRecognizerStateChanged; - gesture.rotation = MGLRadiansFromDegrees(30); - [self.mapView handleRotateGesture:gesture]; - XCTAssertEqualWithAccuracy(self.mapView.direction, wrappedRotation, 0.001, @"Gestural rotation should work when rotation is enabled."); - } -} - -- (void)testRotationGesture { - self.mapView.zoomLevel = 15; - CLLocationCoordinate2D originalCenterCoordinate = self.mapView.centerCoordinate; - - UIRotationGestureRecognizerMock *gesture = [[UIRotationGestureRecognizerMock alloc] initWithTarget:self.mapView action:nil]; - gesture.state = UIGestureRecognizerStateBegan; - gesture.rotation = 0; - [self.mapView addGestureRecognizer:gesture]; - [self.mapView handleRotateGesture:gesture]; - XCTAssertEqual(self.mapView.direction, gesture.rotation); - - for (NSNumber *degrees in @[@-999, @-360, @-240, @-180, @-90, @-45, @0, @45, @90, @180, @240, @359, @999]) { - gesture.state = UIGestureRecognizerStateChanged; - gesture.rotation = MGLRadiansFromDegrees([degrees doubleValue]); - [self.mapView handleRotateGesture:gesture]; - CGFloat wrappedRotation = mbgl::util::wrap(-MGLDegreesFromRadians(gesture.rotation), 0., 360.); - XCTAssertEqualWithAccuracy(self.mapView.direction, wrappedRotation, 0.001, @"Map direction should match gesture rotation for input of %@°.", degrees); - - // Given a hypothetical rotation around the exact center of the map, the center coordinate should remain the same. - // See above where we override -[UIRotationGestureRecognizer locationInView:] to always return the center of the target view. - XCTAssertEqualWithAccuracy(originalCenterCoordinate.latitude, self.mapView.centerCoordinate.latitude, 0.0000001, "@Map center coordinate latitude should remain constant during rotation of %@°.", degrees); - XCTAssertEqualWithAccuracy(originalCenterCoordinate.longitude, self.mapView.centerCoordinate.longitude, 0.0000001, @"Map center coordinate longitude should remain constant during rotation of %@°.", degrees); - } -} - -- (void)testResetPosition { - [self.mapView resetPosition]; - MGLMapCamera *defaultCamera = [MGLMapCamera cameraLookingAtCenterCoordinate:CLLocationCoordinate2DMake(0, 0) altitude:self.mapView.camera.altitude pitch:0 heading:0]; - XCTAssertTrue([self.mapView.camera isEqualToMapCamera:defaultCamera], @"Map camera %@ should be equal to default camera %@.", self.mapView.camera, defaultCamera); -} - -- (CGFloat)degreesFromAffineTransform:(CGAffineTransform)transform { - CGFloat angle = atan2f(transform.b, transform.a); - return MGLDegreesFromRadians(angle); -} - -@end diff --git a/platform/ios/test/MGLMapViewGestureRecognizerTests.mm b/platform/ios/test/MGLMapViewGestureRecognizerTests.mm deleted file mode 100644 index 58fbf2d03ba..00000000000 --- a/platform/ios/test/MGLMapViewGestureRecognizerTests.mm +++ /dev/null @@ -1,280 +0,0 @@ -#import -#import - -#import "../../darwin/src/MGLGeometry_Private.h" -#import "MGLMockGestureRecognizers.h" - -#include -#include - -@interface MGLMapView (MGLMapViewGestureRecognizerTests) - -- (mbgl::Map &)mbglMap; - -- (void)handlePinchGesture:(UIPinchGestureRecognizer *)pinch; -- (void)handleRotateGesture:(UIRotationGestureRecognizer *)rotate; -- (void)handleDoubleTapGesture:(UITapGestureRecognizer *)doubleTap; -- (void)handleTwoFingerTapGesture:(UITapGestureRecognizer *)twoFingerTap; -- (void)handleQuickZoomGesture:(UILongPressGestureRecognizer *)quickZoom; -- (void)handleTwoFingerDragGesture:(UIPanGestureRecognizer *)twoFingerDrag; - -@end - -@interface MGLMapViewGestureRecognizerTests : XCTestCase - -@property (nonatomic) MGLMapView *mapView; -@property (nonatomic) UIWindow *window; -@property (nonatomic) UIViewController *viewController; -@property (nonatomic) XCTestExpectation *styleLoadingExpectation; -@property (nonatomic) XCTestExpectation *twoFingerExpectation; -@property (nonatomic) XCTestExpectation *quickZoomExpectation; -@property (nonatomic) XCTestExpectation *doubleTapExpectation; -@property (nonatomic) XCTestExpectation *twoFingerDragExpectation; -@property (assign) CGRect screenBounds; - -@end - -@implementation MGLMapViewGestureRecognizerTests - -- (void)setUp { - [super setUp]; - - [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"]; - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - self.screenBounds = UIScreen.mainScreen.bounds; - self.mapView = [[MGLMapView alloc] initWithFrame:self.screenBounds styleURL:styleURL]; - self.mapView.zoomLevel = 16; - self.mapView.delegate = self; - - self.viewController = [[UIViewController alloc] init]; - self.viewController.view = [[UIView alloc] initWithFrame:self.screenBounds]; - [self.viewController.view addSubview:self.mapView]; - self.window = [[UIWindow alloc] initWithFrame:self.screenBounds]; - [self.window addSubview:self.viewController.view]; - [self.window makeKeyAndVisible]; - - if (!self.mapView.style) { - _styleLoadingExpectation = [self expectationWithDescription:@"Map view should finish loading style."]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - } -} - -- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style { - XCTAssertNotNil(mapView.style); - XCTAssertEqual(mapView.style, style); - - [_styleLoadingExpectation fulfill]; -} - -- (void)testHandlePinchGestureContentInset { - UIEdgeInsets contentInset = UIEdgeInsetsZero; - self.mapView.contentInset = contentInset; - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.mapView.contentInset); - auto cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"MGLMapView's contentInset property should match camera's padding."); - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - - contentInset = UIEdgeInsetsMake(20, 20, 20, 20); - [self.mapView setCamera:self.mapView.camera withDuration:0.1 animationTimingFunction:nil edgePadding:contentInset completionHandler:nil]; - XCTAssertFalse(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertNotEqual(padding, cameraPadding); - - UIPinchGestureRecognizerMock *pinchGesture = [[UIPinchGestureRecognizerMock alloc] initWithTarget:nil action:nil]; - pinchGesture.state = UIGestureRecognizerStateBegan; - pinchGesture.scale = 1.0; - [self.mapView handlePinchGesture:pinchGesture]; - XCTAssertNotEqual(padding, cameraPadding); - - pinchGesture.state = UIGestureRecognizerStateChanged; - [self.mapView handlePinchGesture:pinchGesture]; - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"When a gesture recognizer is performed contentInsets and camera padding should match."); - - pinchGesture.state = UIGestureRecognizerStateEnded; - [self.mapView handlePinchGesture:pinchGesture]; - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"When a gesture recognizer is performed contentInsets and camera padding should match."); - -} - -- (void)testHandleRotateGestureContentInset { - UIEdgeInsets contentInset = UIEdgeInsetsZero; - self.mapView.contentInset = contentInset; - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.mapView.contentInset); - auto cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"MGLMapView's contentInset property should match camera's padding."); - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - - contentInset = UIEdgeInsetsMake(20, 20, 20, 20); - [self.mapView setCamera:self.mapView.camera withDuration:0.1 animationTimingFunction:nil edgePadding:contentInset completionHandler:nil]; - XCTAssertFalse(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertNotEqual(padding, cameraPadding); - - UIRotationGestureRecognizerMock *rotateGesture = [[UIRotationGestureRecognizerMock alloc] initWithTarget:nil action:nil]; - rotateGesture.state = UIGestureRecognizerStateBegan; - rotateGesture.rotation = 1; - [self.mapView handleRotateGesture:rotateGesture]; - XCTAssertNotEqual(padding, cameraPadding); - - rotateGesture.state = UIGestureRecognizerStateChanged; - [self.mapView handleRotateGesture:rotateGesture]; - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"When a gesture recognizer is performed contentInsets and camera padding should match."); - - rotateGesture.state = UIGestureRecognizerStateEnded; - [self.mapView handleRotateGesture:rotateGesture]; - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"When a gesture recognizer is performed contentInsets and camera padding should match."); - -} - -- (void)testHandleDoubleTapGestureContentInset { - UIEdgeInsets contentInset = UIEdgeInsetsMake(1, 1, 1, 1); - self.mapView.contentInset = contentInset; - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.mapView.contentInset); - auto cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"MGLMapView's contentInset property should match camera's padding."); - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - - contentInset = UIEdgeInsetsMake(20, 20, 20, 20); - [self.mapView setCamera:self.mapView.camera withDuration:0.1 animationTimingFunction:nil edgePadding:contentInset completionHandler:nil]; - XCTAssertFalse(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertNotEqual(padding, cameraPadding); - - UITapGestureRecognizerMock *doubleTapGesture = [[UITapGestureRecognizerMock alloc] initWithTarget:nil action:nil]; - doubleTapGesture.mockTappedView = self.mapView; - doubleTapGesture.mockTappedPoint = CGPointMake(1.0, 1.0); - - [self.mapView handleDoubleTapGesture:doubleTapGesture]; - _doubleTapExpectation = [self expectationWithDescription:@"Double tap gesture animation."]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self->_doubleTapExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:10 handler:nil]; - - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"When a gesture recognizer is performed contentInsets and camera padding should match."); - -} - -- (void)testHandleTwoFingerTapGesture { - UIEdgeInsets contentInset = UIEdgeInsetsZero; - self.mapView.contentInset = contentInset; - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.mapView.contentInset); - auto cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"MGLMapView's contentInset property should match camera's padding."); - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - - contentInset = UIEdgeInsetsMake(20, 20, 20, 20); - [self.mapView setCamera:self.mapView.camera withDuration:0.1 animationTimingFunction:nil edgePadding:contentInset completionHandler:nil]; - XCTAssertFalse(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertNotEqual(padding, cameraPadding); - - UITapGestureRecognizerMock *twoFingerTap = [[UITapGestureRecognizerMock alloc] initWithTarget:nil action:nil]; - twoFingerTap.mockTappedView = self.mapView; - twoFingerTap.mockTappedPoint = CGPointMake(1.0, 1.0); - - [self.mapView handleTwoFingerTapGesture:twoFingerTap]; - _twoFingerExpectation = [self expectationWithDescription:@"Two Finger tap gesture animation."]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self->_twoFingerExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:10 handler:nil]; - - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"When a gesture recognizer is performed contentInsets and camera padding should match."); -} - -- (void)testHandleQuickZoomGesture { - UIEdgeInsets contentInset = UIEdgeInsetsZero; - self.mapView.contentInset = contentInset; - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.mapView.contentInset); - auto cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"MGLMapView's contentInset property should match camera's padding."); - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - - contentInset = UIEdgeInsetsMake(20, 20, 20, 20); - [self.mapView setCamera:self.mapView.camera withDuration:0.1 animationTimingFunction:nil edgePadding:contentInset completionHandler:nil]; - XCTAssertFalse(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertNotEqual(padding, cameraPadding); - - UILongPressGestureRecognizerMock *quickZoom = [[UILongPressGestureRecognizerMock alloc] initWithTarget:nil action:nil]; - quickZoom.state = UIGestureRecognizerStateBegan; - [self.mapView handleQuickZoomGesture:quickZoom]; - XCTAssertNotEqual(padding, cameraPadding); - - quickZoom.state = UIGestureRecognizerStateChanged; - quickZoom.mockTappedPoint = CGPointMake(self.mapView.frame.size.width / 2, self.mapView.frame.size.height / 2); - [self.mapView handleQuickZoomGesture:quickZoom]; - _quickZoomExpectation = [self expectationWithDescription:@"Quick zoom gesture animation."]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self->_quickZoomExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:10 handler:nil]; - - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"When a gesture recognizer is performed contentInsets and camera padding should match."); - - quickZoom.state = UIGestureRecognizerStateEnded; - [self.mapView handleQuickZoomGesture:quickZoom]; - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"When a gesture recognizer is performed contentInsets and camera padding should match."); -} - -- (void)testHandleTwoFingerDragGesture { - UIEdgeInsets contentInset = UIEdgeInsetsZero; - self.mapView.contentInset = contentInset; - mbgl::EdgeInsets padding = MGLEdgeInsetsFromNSEdgeInsets(self.mapView.contentInset); - auto cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"MGLMapView's contentInset property should match camera's padding."); - XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - - contentInset = UIEdgeInsetsMake(20, 20, 20, 20); - [self.mapView setCamera:self.mapView.camera withDuration:0.1 animationTimingFunction:nil edgePadding:contentInset completionHandler:nil]; - XCTAssertFalse(UIEdgeInsetsEqualToEdgeInsets(self.mapView.contentInset, contentInset)); - - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertNotEqual(padding, cameraPadding); - - UIPanGestureRecognizerMock *twoFingerDrag = [[UIPanGestureRecognizerMock alloc] initWithTarget:nil action:nil]; - twoFingerDrag.state = UIGestureRecognizerStateBegan; - twoFingerDrag.firstFingerPoint = CGPointMake(self.mapView.frame.size.width / 3, self.mapView.frame.size.height/2); - twoFingerDrag.secondFingerPoint = CGPointMake((self.mapView.frame.size.width / 2), self.mapView.frame.size.height/2); - twoFingerDrag.numberOfTouches = 2; - [self.mapView handleTwoFingerDragGesture:twoFingerDrag]; - XCTAssertNotEqual(padding, cameraPadding); - - twoFingerDrag.state = UIGestureRecognizerStateChanged; - twoFingerDrag.firstFingerPoint = CGPointMake(self.mapView.frame.size.width / 3, (self.mapView.frame.size.height/2)-10); - twoFingerDrag.secondFingerPoint = CGPointMake((self.mapView.frame.size.width / 2), (self.mapView.frame.size.height/2)-10); - [self.mapView handleTwoFingerDragGesture:twoFingerDrag]; - _twoFingerDragExpectation = [self expectationWithDescription:@"Quick zoom gesture animation."]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self->_twoFingerDragExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:10 handler:nil]; - - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"When a gesture recognizer is performed contentInsets and camera padding should match."); - - twoFingerDrag.state = UIGestureRecognizerStateEnded; - [self.mapView handleTwoFingerDragGesture:twoFingerDrag]; - cameraPadding = self.mapView.mbglMap.getCameraOptions().padding; - XCTAssertEqual(padding, cameraPadding, @"When a gesture recognizer is performed contentInsets and camera padding should match."); -} - -@end diff --git a/platform/ios/test/MGLMapViewLayoutTests.m b/platform/ios/test/MGLMapViewLayoutTests.m deleted file mode 100644 index 2a9579818a2..00000000000 --- a/platform/ios/test/MGLMapViewLayoutTests.m +++ /dev/null @@ -1,317 +0,0 @@ -#import -#import "MGLMapView.h" -#import "MGLMapViewDelegate.h" -#import "MGLAccountManager.h" - -#import "MGLScaleBar.h" - -@interface MGLOrnamentTestData : NSObject - -@property (nonatomic) MGLOrnamentPosition position; -@property (nonatomic) CGPoint offset; -@property (nonatomic) CGPoint expectedOrigin; - -@end - -@implementation MGLOrnamentTestData - -+ (instancetype)createWithPosition:(MGLOrnamentPosition)position offset:(CGPoint)offset expectedOrigin:(CGPoint)expectedOrigin { - MGLOrnamentTestData *data = [[MGLOrnamentTestData alloc] init]; - data.position = position; - data.offset = offset; - data.expectedOrigin = expectedOrigin; - return data; -} - -@end - -@interface MGLScaleBar (Tests) -@property (nonatomic, readonly) NSArray *labelViews; -@property (nonatomic, readonly) NSArray *bars; -@property (nonatomic, readonly) UIView *containerView; -@property (nonatomic, readonly) CGSize size; -@property (nonatomic) NSNumber *testingRightToLeftOverride; -@end - - -@interface MGLMapViewLayoutTests : XCTestCase - -@property (nonatomic) UIView *superView; -@property (nonatomic) MGLMapView *mapView; -@property (nonatomic) XCTestExpectation *styleLoadingExpectation; - -@end - -@implementation MGLMapViewLayoutTests - -- (void)setUp { - [super setUp]; - - [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"]; - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - - self.superView = [[UIView alloc] initWithFrame:UIScreen.mainScreen.bounds]; - - self.mapView = [[MGLMapView alloc] initWithFrame:UIScreen.mainScreen.bounds styleURL:styleURL]; - self.mapView.delegate = self; - - [self.superView addSubview:self.mapView]; - - UIView *mapView = self.mapView; - NSDictionary *bindings = NSDictionaryOfVariableBindings(mapView); - NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[mapView]-0-|" options:0 metrics:nil views:bindings]; - NSArray *horizonatalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[mapView]-0-|" options:0 metrics:nil views:bindings]; - - [self.superView addConstraints:[verticalConstraints arrayByAddingObjectsFromArray:horizonatalConstraints]]; - - self.styleLoadingExpectation = [self expectationWithDescription:@"Map view should finish loading style."]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - - self.mapView.showsScale = YES; - - //set zoom and heading so that scale bar and compass will be shown - [self.mapView setZoomLevel:10.0 animated:NO]; - [self.mapView.camera setHeading:12.0]; - - //invoke layout - [self.superView setNeedsLayout]; - [self.superView layoutIfNeeded]; -} - -- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style { - XCTAssertNotNil(mapView.style); - XCTAssertEqual(mapView.style, style); - - [self.styleLoadingExpectation fulfill]; -} - -- (void)tearDown { - self.styleLoadingExpectation = nil; - self.mapView = nil; - [MGLAccountManager setAccessToken:nil]; - - [super tearDown]; -} - -- (void)testOrnamentPlacement { - - CGFloat margin = 8.0; - CGFloat bottomSafeAreaInset = 0.0; - double accuracy = 0.01; - - if (@available(iOS 11.0, *)) { - bottomSafeAreaInset = self.mapView.safeAreaInsets.bottom; - } - - //compass - UIImageView *compassView = self.mapView.compassView; - - CGFloat expectedCompassOriginX = CGRectGetMaxX(self.mapView.bounds) - margin - CGRectGetWidth(compassView.frame); - CGFloat expectedCompassOriginY = margin; - - XCTAssertEqualWithAccuracy(CGRectGetMinX(compassView.frame), expectedCompassOriginX, accuracy); - XCTAssertEqualWithAccuracy(CGRectGetMinY(compassView.frame), expectedCompassOriginY, accuracy); - - //scale bar - UIView *scaleBar = self.mapView.scaleBar; - - XCTAssertEqualWithAccuracy(CGRectGetMinX(scaleBar.frame), margin, accuracy); - XCTAssertEqualWithAccuracy(CGRectGetMinY(scaleBar.frame), margin, accuracy); - - //attribution button - UIButton *attributionButton = self.mapView.attributionButton; - - CGFloat expectedButtonOriginX = CGRectGetMaxX(self.mapView.bounds) - margin - CGRectGetWidth(attributionButton.frame); - CGFloat expectedButtonOriginY = CGRectGetMaxY(self.mapView.bounds) - margin - bottomSafeAreaInset - CGRectGetHeight(attributionButton.frame); - - XCTAssertEqualWithAccuracy(CGRectGetMinX(attributionButton.frame), expectedButtonOriginX, accuracy); - XCTAssertEqualWithAccuracy(CGRectGetMinY(attributionButton.frame), expectedButtonOriginY, accuracy); - - //mapbox logo - UIImageView *logoView = self.mapView.logoView; - - CGFloat expectedLogoOriginX = margin; - CGFloat expectedLogoOriginY = CGRectGetMaxY(self.mapView.bounds) - margin - bottomSafeAreaInset - CGRectGetHeight(logoView.frame); - - XCTAssertEqualWithAccuracy(CGRectGetMinX(logoView.frame), expectedLogoOriginX, accuracy); - XCTAssertEqualWithAccuracy(CGRectGetMinY(logoView.frame), expectedLogoOriginY, accuracy); -} - -- (NSArray *)makeTestDataListWithView:(UIView *)view margin:(CGFloat)margin { - CGFloat bottomSafeAreaInset = 0.0; - if (@available(iOS 11.0, *)) { - bottomSafeAreaInset = self.mapView.safeAreaInsets.bottom; - } - - return @[ - [MGLOrnamentTestData createWithPosition:MGLOrnamentPositionTopLeft - offset:CGPointMake(margin, margin) - expectedOrigin:CGPointMake(margin, margin)], - [MGLOrnamentTestData createWithPosition:MGLOrnamentPositionTopRight - offset:CGPointMake(margin, margin) - expectedOrigin:CGPointMake(CGRectGetMaxX(self.mapView.bounds) - margin - CGRectGetWidth(view.frame), margin)], - [MGLOrnamentTestData createWithPosition:MGLOrnamentPositionBottomLeft - offset:CGPointMake(margin, margin) - expectedOrigin:CGPointMake(margin, CGRectGetMaxY(self.mapView.bounds) - margin - bottomSafeAreaInset - CGRectGetHeight(view.frame))], - [MGLOrnamentTestData createWithPosition:MGLOrnamentPositionBottomRight - offset:CGPointMake(margin, margin) - expectedOrigin:CGPointMake(CGRectGetMaxX(self.mapView.bounds) - margin - CGRectGetWidth(view.frame), - CGRectGetMaxY(self.mapView.bounds) - margin - bottomSafeAreaInset - CGRectGetHeight(view.frame))] - ]; -} - -- (void)testCompassPlacement { - double accuracy = 0.01; - CGFloat margin = 4.0; - - UIView *compassView = self.mapView.compassView; - NSArray *testDataList = [self makeTestDataListWithView:compassView margin:margin]; - - for (MGLOrnamentTestData *testData in testDataList) { - self.mapView.compassViewPosition = testData.position; - self.mapView.compassViewMargins = testData.offset; - - //invoke layout - [self.superView setNeedsLayout]; - [self.superView layoutIfNeeded]; - - XCTAssertEqualWithAccuracy(CGRectGetMinX(compassView.frame), testData.expectedOrigin.x, accuracy); - XCTAssertEqualWithAccuracy(CGRectGetMinY(compassView.frame), testData.expectedOrigin.y, accuracy); - } -} - -- (void)testScalebarPlacement { - double accuracy = 0.01; - CGFloat margin = 4.0; - - UIView *scaleBar = self.mapView.scaleBar; - XCTAssertFalse(CGSizeEqualToSize(scaleBar.bounds.size, CGSizeZero)); - - NSArray *testDataList = [self makeTestDataListWithView:scaleBar margin:margin]; - - for (MGLOrnamentTestData *testData in testDataList) { - self.mapView.scaleBarPosition = testData.position; - self.mapView.scaleBarMargins = testData.offset; - - //invoke layout - [self.superView setNeedsLayout]; - [self.superView layoutIfNeeded]; - - XCTAssertEqualWithAccuracy(CGRectGetMinX(scaleBar.frame), testData.expectedOrigin.x, accuracy); - XCTAssertEqualWithAccuracy(CGRectGetMinY(scaleBar.frame), testData.expectedOrigin.y, accuracy); - } -} - -// This test checks the frames of the scalebar's subviews, based on the positions -// as above, but also with forced Right-to-Left reading, and modifying zoom levels. -- (void)testScalebarSubviewPlacement { - double accuracy = 0.01; - CGFloat margin = 20.0; - - MGLScaleBar *scaleBar = (MGLScaleBar*)self.mapView.scaleBar; - XCTAssertFalse(CGSizeEqualToSize(scaleBar.bounds.size, CGSizeZero)); - - for (NSInteger rtl = 0; rtl <= 1; rtl++) { - scaleBar.testingRightToLeftOverride = @((BOOL)rtl); - - NSString *positions[] = { - @"MGLOrnamentPositionTopLeft", - @"MGLOrnamentPositionTopRight", - @"MGLOrnamentPositionBottomLeft", - @"MGLOrnamentPositionBottomRight" - }; - - for (CGFloat zoomLevel = 0; zoomLevel < 20; zoomLevel++) - { - self.mapView.zoomLevel = zoomLevel; - [self.superView setNeedsLayout]; - [self.superView layoutIfNeeded]; - - // Following method assumes scaleBar has an up-to-date frame, based - // on the current zoom level. Modifying the position and margins - // should not affect the overall size of the scalebar. - - NSArray *testDataList = [self makeTestDataListWithView:scaleBar margin:margin]; - - CGSize initialSize = scaleBar.intrinsicContentSize; - XCTAssert(CGSizeEqualToSize(initialSize, scaleBar.bounds.size)); - - for (MGLOrnamentTestData *testData in testDataList) { - self.mapView.scaleBarPosition = testData.position; - self.mapView.scaleBarMargins = testData.offset; - - [self.superView setNeedsLayout]; - [self.superView layoutIfNeeded]; - - XCTAssert(CGSizeEqualToSize(initialSize, scaleBar.bounds.size)); - - NSString *activityName = [NSString stringWithFormat: - @"Scalebar subview tests: RTL=%@, Zoom=%ld, POS=%@, Visible=%@", - (rtl == 0 ? @"NO" : @"YES"), - (long)zoomLevel, - positions[testData.position], - scaleBar.alpha > 0.0 ? @"YES" : @"NO"]; - - [XCTContext runActivityNamed:activityName - block:^(id activity) { - - // Check the subviews - XCTAssertEqualWithAccuracy(CGRectGetMinX(scaleBar.frame), testData.expectedOrigin.x, accuracy); - XCTAssertEqualWithAccuracy(CGRectGetMinY(scaleBar.frame), testData.expectedOrigin.y, accuracy); - - XCTAssertTrue(CGRectContainsRect(scaleBar.bounds, scaleBar.containerView.frame)); - for (UIView *bar in scaleBar.bars) { - XCTAssertTrue(CGRectContainsRect(scaleBar.containerView.bounds, bar.frame)); - } - for (UIView *label in scaleBar.labelViews) { - if (!label.isHidden) { - XCTAssertTrue(CGRectContainsRect(scaleBar.bounds, label.frame)); - } - } - }]; - } - } - } -} - -- (void)testAttributionButtonPlacement { - double accuracy = 0.01; - CGFloat margin = 4.0; - - UIView *attributionButton = self.mapView.attributionButton; - NSArray *testDataList = [self makeTestDataListWithView:attributionButton margin:margin]; - - for (MGLOrnamentTestData *testData in testDataList) { - self.mapView.attributionButtonPosition = testData.position; - self.mapView.attributionButtonMargins = testData.offset; - - //invoke layout - [self.superView setNeedsLayout]; - [self.superView layoutIfNeeded]; - - XCTAssertEqualWithAccuracy(CGRectGetMinX(attributionButton.frame), testData.expectedOrigin.x, accuracy); - XCTAssertEqualWithAccuracy(CGRectGetMinY(attributionButton.frame), testData.expectedOrigin.y, accuracy); - } -} - -- (void)testLogoPlacement { - double accuracy = 0.01; - CGFloat margin = 4.0; - - UIView *logoView = self.mapView.logoView; - NSArray *testDataList = [self makeTestDataListWithView:logoView margin:margin]; - - for (MGLOrnamentTestData *testData in testDataList) { - self.mapView.logoViewPosition = testData.position; - self.mapView.logoViewMargins = testData.offset; - - //invoke layout - [self.superView setNeedsLayout]; - [self.superView layoutIfNeeded]; - - XCTAssertEqualWithAccuracy(CGRectGetMinX(logoView.frame), testData.expectedOrigin.x, accuracy); - XCTAssertEqualWithAccuracy(CGRectGetMinY(logoView.frame), testData.expectedOrigin.y, accuracy); - } -} - -@end diff --git a/platform/ios/test/MGLMapViewPitchTests.m b/platform/ios/test/MGLMapViewPitchTests.m deleted file mode 100644 index fa657eb9943..00000000000 --- a/platform/ios/test/MGLMapViewPitchTests.m +++ /dev/null @@ -1,190 +0,0 @@ -#import -#import - -@interface MockUIPanGestureRecognizer : UIPanGestureRecognizer -@property(nonatomic, readwrite) UIGestureRecognizerState state; -@property NSUInteger mbx_numberOfFingersForGesture; -@property CGPoint mbx_middlePoint; -@property CGPoint mbx_westPoint; -@property CGPoint mbx_eastPoint; -@end - -@implementation MockUIPanGestureRecognizer - -@synthesize state; - -- (instancetype)initWithTarget:(id)target action:(SEL)action { - if (self = [super initWithTarget:target action:action]) { - self.mbx_numberOfFingersForGesture = 2; - self.mbx_westPoint = CGPointMake(100, 0); - self.mbx_eastPoint = CGPointMake(200, 0); - } - return self; -} -- (NSUInteger)numberOfTouches { return self.mbx_numberOfFingersForGesture; } -- (CGPoint)translationInView:(UIView *)view { return self.mbx_middlePoint; } -- (CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView *)view { - if (touchIndex == 0) { - return self.mbx_westPoint; - } - return self.mbx_eastPoint; -} -- (void)setTiltGestureYTranslationForPitchDegrees:(CGFloat)degrees { - // The tilt gesture takes the number of screen points the fingers have moved and then divides them by a "slowdown" factor, which happens to be set to 2.0 in -[MGLMapView handleTwoFingerDragGesture:]. - CGFloat mbx_tiltGestureYTranslation = -(degrees * 2.0); - self.mbx_westPoint = CGPointMake(self.mbx_westPoint.x, mbx_tiltGestureYTranslation); - self.mbx_eastPoint = CGPointMake(self.mbx_eastPoint.x, mbx_tiltGestureYTranslation); - self.mbx_middlePoint = CGPointMake(self.mbx_middlePoint.x, mbx_tiltGestureYTranslation); -} -@end - -// Forward declare relevant private methods -@interface MGLMapView (MGLMapViewPitchTests) -- (void)handleTwoFingerDragGesture:(UIPanGestureRecognizer *)rotate; -- (MGLMapCamera *)cameraByTiltingToPitch:(CGFloat)pitch; -@end - -@interface MGLMapViewPitchTests : XCTestCase -@property (nonatomic) MGLMapView *mapView; -@end - -@implementation MGLMapViewPitchTests - -- (void)setUp { - [super setUp]; - - [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"]; - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - self.mapView = [[MGLMapView alloc] initWithFrame:CGRectMake(0, 0, 400, 400) styleURL:styleURL]; -} - -- (void)tearDown { - self.mapView = nil; - [MGLAccountManager setAccessToken:nil]; - [super tearDown]; -} - -- (void)testPitchEnabled { - self.mapView.pitchEnabled = NO; - self.mapView.camera = [self.mapView cameraByTiltingToPitch:30]; - XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 30, 0.001, @"Tilt should not be set when pitchEnabled = NO."); - - self.mapView.pitchEnabled = YES; - self.mapView.camera = [self.mapView cameraByTiltingToPitch:30]; - XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 30, 0.001, @"Tilt should be set when pitchEnabled = YES."); -} - -- (void)testPitchInValidRange { - for (NSNumber *degrees in @[@0, @5, @20, @40, @60]) { - CGFloat inputDegrees = [degrees floatValue]; - self.mapView.camera = [self.mapView cameraByTiltingToPitch:inputDegrees]; - XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, inputDegrees, 0.001, @"Tilt should be able to be set within range 0-60°."); - } -} - -- (void)testNegativePitchClamping { - for (NSNumber *degrees in @[@CGFLOAT_MIN, @-999, @-60, @-30, @-0]) { - CGFloat inputDegrees = [degrees floatValue]; - self.mapView.camera = [self.mapView cameraByTiltingToPitch:inputDegrees]; - XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 0, 0.001, @"Minimum tilt should be clamped to 0°."); - } -} - -- (void)testPositivePitchClamping { - for (NSNumber *degrees in @[@61, @90, @999, @CGFLOAT_MAX]) { - CGFloat inputDegrees = [degrees floatValue]; - self.mapView.camera = [self.mapView cameraByTiltingToPitch:inputDegrees]; - XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 60, 0.001, @"Maximum tilt should be clamped to 60°."); - } -} - -- (void)testPitchAtVariousZoomLevels { - for (NSNumber *zoomLevel in @[@0, @5, @10, @15, @18, @21, @CGFLOAT_MAX]) { - self.mapView.camera = [self.mapView cameraByTiltingToPitch:0]; - self.mapView.zoomLevel = 0; - - CGFloat inputZoomLevel = [zoomLevel floatValue]; - self.mapView.zoomLevel = inputZoomLevel; - self.mapView.camera = [self.mapView cameraByTiltingToPitch:30]; - XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 30, 0.001, @"Tilting should be allowed at z%.f.", inputZoomLevel); - } -} - -- (void)testTiltGesture { - MockUIPanGestureRecognizer *gesture = [[MockUIPanGestureRecognizer alloc] initWithTarget:self.mapView action:nil]; - gesture.state = UIGestureRecognizerStateBegan; - [self.mapView handleTwoFingerDragGesture:gesture]; - XCTAssertEqual(self.mapView.camera.pitch, 0, @"Pitch should initially be set to 0°."); - - // Use a tilt gesture to tilt the map within its acceptable range (0-60°). - for (NSNumber *degrees in @[@0, @5, @20, @40, @60]) { - self.mapView.camera = [self.mapView cameraByTiltingToPitch:0]; - gesture.state = UIGestureRecognizerStateChanged; - - CGFloat inputDegrees = [degrees floatValue]; - [gesture setTiltGestureYTranslationForPitchDegrees:inputDegrees]; - [self.mapView handleTwoFingerDragGesture:gesture]; - XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, inputDegrees, 0.001, @"Pitch should be set to %.f°.", inputDegrees); - } -} - -- (void)testHorizontalTiltGesture { - MockUIPanGestureRecognizer *gesture = [[MockUIPanGestureRecognizer alloc] initWithTarget:self.mapView action:nil]; - gesture.state = UIGestureRecognizerStateBegan; - [self.mapView handleTwoFingerDragGesture:gesture]; - XCTAssertEqual(self.mapView.camera.pitch, 0, @"Pitch should initially be set to 0°."); - - // Tilt gestures should not be triggered on horizontal dragging. - for (NSInteger deltaX = 0; deltaX < 5; deltaX++) { - gesture.mbx_westPoint = CGPointMake(100 - deltaX, 100); - gesture.mbx_eastPoint = CGPointMake(100 - deltaX, 50); - gesture.mbx_middlePoint = CGPointMake((gesture.mbx_westPoint.x + gesture.mbx_westPoint.x)/2, (gesture.mbx_westPoint.y + gesture.mbx_westPoint.y)/2); - - gesture.state = UIGestureRecognizerStateChanged; - - [self.mapView handleTwoFingerDragGesture:gesture]; - XCTAssertEqual(self.mapView.camera.pitch, 0, @"Horizontal dragging should not tilt the map."); - } -} - -- (void)testTiltGestureFromInitialTilt { - CGFloat initialTilt = 20; - CGFloat additionalTilt = 30; - - // Set the map camera to a pitched state, perhaps from a previous gesture or camera movement. - self.mapView.camera = [self.mapView cameraByTiltingToPitch:initialTilt]; - XCTAssertEqual(self.mapView.camera.pitch, initialTilt, @"Tilt should initially be set to %.f°.", initialTilt); - - // Initialize a tilt gesture. - MockUIPanGestureRecognizer *gesture = [[MockUIPanGestureRecognizer alloc] initWithTarget:self.mapView action:nil]; - gesture.state = UIGestureRecognizerStateBegan; - [self.mapView handleTwoFingerDragGesture:gesture]; - - // Use the gesture to tilt the map even more. - gesture.state = UIGestureRecognizerStateChanged; - [gesture setTiltGestureYTranslationForPitchDegrees:additionalTilt]; - [self.mapView handleTwoFingerDragGesture:gesture]; - XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, initialTilt + additionalTilt, 0.001, @"Tilt should be set to %.f°.", initialTilt + additionalTilt); -} - -- (void)testTiltGestureNumberOfFingersRequired { - // Initialize a tilt gesture with two fingers. - MockUIPanGestureRecognizer *gesture = [[MockUIPanGestureRecognizer alloc] initWithTarget:self.mapView action:nil]; - gesture.state = UIGestureRecognizerStateBegan; - gesture.mbx_numberOfFingersForGesture = 2; - - // Use the gesture to tilt to 30°. - [gesture setTiltGestureYTranslationForPitchDegrees:30]; - [self.mapView handleTwoFingerDragGesture:gesture]; - XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 30, 0.001, @"Tilt gesture should work with two fingers down."); - - // Change the gesture's number of fingers to one and try to update the pitch. - gesture.mbx_numberOfFingersForGesture = 1; - gesture.state = UIGestureRecognizerStateChanged; - [gesture setTiltGestureYTranslationForPitchDegrees:0]; - [self.mapView handleTwoFingerDragGesture:gesture]; - XCTAssertEqual(gesture.state, UIGestureRecognizerStateEnded, @"Gesture should end when the number of fingers is less than two."); - XCTAssertEqualWithAccuracy(self.mapView.camera.pitch, 30, 0.001, @"Pitch should remain unchanged if gesture has ended."); -} - -@end diff --git a/platform/ios/test/MGLMapViewScaleBarTests.m b/platform/ios/test/MGLMapViewScaleBarTests.m deleted file mode 100644 index b4f81ef62b6..00000000000 --- a/platform/ios/test/MGLMapViewScaleBarTests.m +++ /dev/null @@ -1,70 +0,0 @@ -#import -#import - -@interface MGLMapViewScaleBarTests : XCTestCase - -@property (nonatomic) MGLMapView *mapView; - -@end - -@implementation MGLMapViewScaleBarTests - -- (void)setUp { - [super setUp]; - - [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"]; - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - self.mapView = [[MGLMapView alloc] initWithFrame:UIScreen.mainScreen.bounds styleURL:styleURL]; -} - -- (void)tearDown { - self.mapView = nil; - [MGLAccountManager setAccessToken:nil]; - - [super tearDown]; -} - -- (void)testShowsScale { - UIView *scaleBar = self.mapView.scaleBar; - - // Scale bar should not be enabled by default. - XCTAssertFalse(self.mapView.showsScale); - XCTAssertTrue(scaleBar.hidden); - - self.mapView.showsScale = YES; - - XCTAssertFalse(scaleBar.hidden); - - // Scale bar should not be visible at default zoom (~z0), but it should be ready. - // Size is not a measure of readiness here though. - XCTAssertTrue(CGSizeEqualToSize(scaleBar.intrinsicContentSize, CGSizeZero)); - XCTAssertEqual(scaleBar.alpha, 0); - - self.mapView.zoomLevel = 15; - [self.mapView layoutIfNeeded]; - XCTAssertGreaterThan(scaleBar.alpha, 0); - XCTAssertFalse(CGSizeEqualToSize(scaleBar.intrinsicContentSize, CGSizeZero)); -} - -- (void)testDirectlySettingScaleBarViewHiddenProperty { - UIView *scaleBar = self.mapView.scaleBar; - - scaleBar.hidden = NO; - XCTAssertFalse(scaleBar.hidden); - - // Directly setting `.hidden` after the map has finished initializing will not update the scale bar. - XCTAssertTrue(CGSizeEqualToSize(scaleBar.intrinsicContentSize, CGSizeZero)); - - // ... but triggering any camera event will update it. - self.mapView.zoomLevel = 1; - [self.mapView layoutIfNeeded]; - - XCTAssertTrue(CGSizeEqualToSize(scaleBar.intrinsicContentSize, CGSizeZero)); - XCTAssertEqual(scaleBar.alpha, 0); - - self.mapView.zoomLevel = 15; - [self.mapView layoutIfNeeded]; - - XCTAssertGreaterThan(scaleBar.alpha, 0); - XCTAssertFalse(CGSizeEqualToSize(scaleBar.intrinsicContentSize, CGSizeZero)); -}@end diff --git a/platform/ios/test/MGLMapViewZoomTests.mm b/platform/ios/test/MGLMapViewZoomTests.mm deleted file mode 100644 index 360af72d021..00000000000 --- a/platform/ios/test/MGLMapViewZoomTests.mm +++ /dev/null @@ -1,192 +0,0 @@ -#import -#import -#import "MGLMockGestureRecognizers.h" - -#import - -@interface MGLMapView (MGLMapViewZoomTests) -@property (nonatomic) BOOL isZooming; -@property (nonatomic) CGFloat rotationThresholdWhileZooming; -- (void)handlePinchGesture:(UIPinchGestureRecognizer *)pinch; -- (void)handleRotateGesture:(UIRotationGestureRecognizer *)rotate; -@end - -@interface MGLMapViewZoomTests : XCTestCase -@property (nonatomic) MGLMapView *mapView; -@end - -@implementation MGLMapViewZoomTests - -- (void)setUp { - [super setUp]; - - [MGLAccountManager setAccessToken:@"pk.feedcafedeadbeefbadebede"]; - NSURL *styleURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"one-liner" withExtension:@"json"]; - self.mapView = [[MGLMapView alloc] initWithFrame:UIScreen.mainScreen.bounds styleURL:styleURL]; -} - -- (void)tearDown { - self.mapView = nil; - [MGLAccountManager setAccessToken:nil]; - [super tearDown]; -} - -- (void)testZoom { - CLLocationCoordinate2D originalCenterCoordinate = self.mapView.centerCoordinate; - - for (NSNumber *zoom in @[@1, @5, @10, @15, @22]) { - self.mapView.zoomLevel = [zoom doubleValue]; - XCTAssertEqual(self.mapView.zoomLevel, [zoom doubleValue], @"Map zoom should match z%@.", zoom); - - XCTAssertEqualWithAccuracy(originalCenterCoordinate.latitude, self.mapView.centerCoordinate.latitude, 0.0000001, "@Map center coordinate latitude should remain constant during zoom to z%@.", zoom); - XCTAssertEqualWithAccuracy(originalCenterCoordinate.longitude, self.mapView.centerCoordinate.longitude, 0.0000001, @"Map center coordinate longitude should remain constant during zoom to z%@.", zoom); - } -} - -- (void)testZoomEnabled { - UIPinchGestureRecognizerMock *gesture = [[UIPinchGestureRecognizerMock alloc] initWithTarget:nil action:nil]; - gesture.state = UIGestureRecognizerStateBegan; - gesture.scale = 10.f; - [self.mapView handlePinchGesture:gesture]; - gesture.state = UIGestureRecognizerStateChanged; - - // Disabled - { - self.mapView.zoomEnabled = NO; - XCTAssertEqual(self.mapView.allowsZooming, NO); - - [self.mapView handlePinchGesture:gesture]; - XCTAssertNotEqual(self.mapView.zoomLevel, log2(gesture.scale), @"Gestural zoom should not work when zoom is disabled."); - - self.mapView.zoomLevel = 15.f; - XCTAssertEqualWithAccuracy(self.mapView.zoomLevel, 15, 0.001, @"Programmatic zoom is allowed when zoomEnabled = NO."); - } - - // Enabled - { - // No need to reset the map zoom or gesture scale, since gesture scale hasn't been applied yet and the map zoom will be overriden when the gesture is handled. - self.mapView.zoomEnabled = YES; - XCTAssertEqual(self.mapView.allowsZooming, YES); - - [self.mapView handlePinchGesture:gesture]; - XCTAssertEqualWithAccuracy(self.mapView.zoomLevel, log2(gesture.scale), 0.001, @"Gestural zoom should work when zoom is enabled."); - } -} - -- (void)testPinchGesture { - CLLocationCoordinate2D originalCenterCoordinate = self.mapView.centerCoordinate; - - UIPinchGestureRecognizerMock *gesture = [[UIPinchGestureRecognizerMock alloc] initWithTarget:self.mapView action:nil]; - gesture.state = UIGestureRecognizerStateBegan; - gesture.scale = 0; - gesture.locationInViewOverride = self.mapView.center; - [self.mapView handlePinchGesture:gesture]; - XCTAssertEqual(self.mapView.zoomLevel, 0); - - for (NSNumber *zoom in @[@1, @5, @10, @15, @22]) { - gesture.state = UIGestureRecognizerStateChanged; - gesture.scale = MGLScaleFromZoomLevel([zoom doubleValue]); - [self.mapView handlePinchGesture:gesture]; - XCTAssertEqual(self.mapView.zoomLevel, [zoom doubleValue], @"Map zoom should match gesture to z%@.", zoom); - - // Given a hypothetical zoom into the exact center of the map, the center coordinate should remain the same. - XCTAssertEqualWithAccuracy(originalCenterCoordinate.latitude, self.mapView.centerCoordinate.latitude, 0.0000001, "@Map center coordinate latitude should remain constant during zoom to z%@.", zoom); - XCTAssertEqualWithAccuracy(originalCenterCoordinate.longitude, self.mapView.centerCoordinate.longitude, 0.0000001, @"Map center coordinate longitude should remain constant during zoom to z%@.", zoom); - } -} - -// Regression test for: https://github.com/mapbox/mapbox-gl-native/issues/14977 -- (void)testPinchGestureOffCenter { - self.mapView.zoomLevel = 15; - - // Set up pinch gesture at z15 with an origin of 0,0. - UIPinchGestureRecognizerMock *gesture = [[UIPinchGestureRecognizerMock alloc] initWithTarget:self.mapView action:nil]; - gesture.state = UIGestureRecognizerStateBegan; - gesture.scale = 0; - gesture.locationInViewOverride = CGPointMake(0, 0); - [self.mapView handlePinchGesture:gesture]; - XCTAssertEqual(self.mapView.zoomLevel, 15); - - // Set a map rotation so that we can later check if un-rotating happens around the correct center point. - self.mapView.direction = 45; - - // Zoom to z18 at the off-center origin. - gesture.state = UIGestureRecognizerStateChanged; - gesture.scale = MGLScaleFromZoomLevel(3); - [self.mapView handlePinchGesture:gesture]; - XCTAssertEqual(self.mapView.zoomLevel, 18, @"Map zoom should match original zoom plus gesture zoom."); - - // Check that the center coordinate remains the same when direction is reset to north. - CLLocationCoordinate2D centerCoordinateBeforeReset = self.mapView.centerCoordinate; - CLLocationCoordinate2D manuallyDerivedCenterCoordinate = [self.mapView convertPoint:self.mapView.center toCoordinateFromView:nil]; - XCTAssertEqualWithAccuracy(centerCoordinateBeforeReset.latitude, manuallyDerivedCenterCoordinate.latitude, 0.0000001, "@Map center latitude should be equal to manually derived latitude."); - XCTAssertEqualWithAccuracy(centerCoordinateBeforeReset.longitude, manuallyDerivedCenterCoordinate.longitude, 0.0000001, @"Map center longitude should be equal to manually derived longitude."); - - self.mapView.direction = 0; - XCTAssertEqualWithAccuracy(centerCoordinateBeforeReset.latitude, self.mapView.centerCoordinate.latitude, 0.0000001, "@Map center coordinate latitude should remain constant after resetting to north."); - XCTAssertEqualWithAccuracy(centerCoordinateBeforeReset.longitude, self.mapView.centerCoordinate.longitude, 0.0000001, @"Map center coordinate longitude should remain constant after resetting to north."); -} - -- (void)testPinchAndZoom { - - [[NSUserDefaults standardUserDefaults] setObject:@3 forKey:@"MGLRotationThresholdWhileZooming"]; - self.mapView.rotationThresholdWhileZooming = 3; - self.mapView.zoomLevel = 15; - UIPinchGestureRecognizerMock *pinch = [[UIPinchGestureRecognizerMock alloc] initWithTarget:self.mapView action:nil]; - [self.mapView addGestureRecognizer:pinch]; - pinch.state = UIGestureRecognizerStateBegan; - pinch.velocity = 5.0; - pinch.locationInViewOverride = CGPointMake(0, 0); - [self.mapView handlePinchGesture:pinch]; - - XCTAssertTrue(self.mapView.isZooming); - - UIRotationGestureRecognizerMock *rotate = [[UIRotationGestureRecognizerMock alloc] initWithTarget:self.mapView action:nil]; - rotate.state = UIGestureRecognizerStateBegan; - rotate.rotation = MGLRadiansFromDegrees(1); - [self.mapView addGestureRecognizer:rotate]; - [self.mapView handleRotateGesture:rotate]; - - // Both the rotation and direction should be zero since the rotation threshold hasn't been met. - XCTAssertEqual(rotate.rotation, 0); - XCTAssertEqual(self.mapView.direction, 0); - - // The direction should be `0`. The default rotation threshold is `3`. - XCTAssertEqual(self.mapView.direction, 0); - rotate.state = UIGestureRecognizerStateChanged; - rotate.rotation = MGLRadiansFromDegrees(2); - [self.mapView handleRotateGesture:rotate]; - - // The direction should be `0`. The default rotation threshold is `3`. - XCTAssertEqual(self.mapView.direction, 0); - - for (NSNumber *degrees in @[@-90, @-10, @10, @10, @30, @90, @180, @240, @460, @500, @590, @800]) { - rotate.state = UIGestureRecognizerStateChanged; - rotate.rotation = MGLRadiansFromDegrees([degrees doubleValue]); - [self.mapView handleRotateGesture:rotate]; - - CGFloat wrappedRotation = mbgl::util::wrap(-MGLDegreesFromRadians(rotate.rotation), 0., 360.); - - - // Check that the direction property now matches the gesture's rotation. - XCTAssertEqualWithAccuracy(self.mapView.direction, wrappedRotation, 0.001, @"Map direction should match gesture rotation for input of %@°.", degrees); - } - - rotate.state = UIGestureRecognizerStateEnded; - pinch.state = UIGestureRecognizerStateEnded; - - [self.mapView handleRotateGesture:rotate]; - [self.mapView handlePinchGesture:pinch]; - - XCTAssertFalse(self.mapView.isZooming); -} - -NS_INLINE CGFloat MGLScaleFromZoomLevel(double zoom) { - return pow(2, zoom); -} - -__unused NS_INLINE double MGLZoomLevelFromScale(CGFloat scale) { - return log2(scale); -} - -@end diff --git a/platform/ios/test/MGLMockGestureRecognizers.h b/platform/ios/test/MGLMockGestureRecognizers.h deleted file mode 100644 index 29889e39f4e..00000000000 --- a/platform/ios/test/MGLMockGestureRecognizers.h +++ /dev/null @@ -1,29 +0,0 @@ - -#import - -@interface UIPinchGestureRecognizerMock : UIPinchGestureRecognizer -@property (nonatomic, readwrite) CGFloat velocity; -@property (nonatomic) CGPoint locationInViewOverride; -@property(nonatomic, readwrite) UIGestureRecognizerState state; -@end - -@interface UIRotationGestureRecognizerMock : UIRotationGestureRecognizer -@property(nonatomic, readwrite) UIGestureRecognizerState state; -@end - -@interface UITapGestureRecognizerMock : UITapGestureRecognizer -@property (strong, nonatomic) UIView *mockTappedView; -@property (assign) CGPoint mockTappedPoint; -@end - -@interface UILongPressGestureRecognizerMock : UILongPressGestureRecognizer -@property(nonatomic, readwrite) UIGestureRecognizerState state; -@property (assign) CGPoint mockTappedPoint; -@end - -@interface UIPanGestureRecognizerMock : UIPanGestureRecognizer -@property(nonatomic, readwrite) UIGestureRecognizerState state; -@property (assign) CGPoint firstFingerPoint; -@property (assign) CGPoint secondFingerPoint; -@property(nonatomic, readwrite) NSUInteger numberOfTouches; -@end diff --git a/platform/ios/test/MGLMockGestureRecognizers.m b/platform/ios/test/MGLMockGestureRecognizers.m deleted file mode 100644 index c8188051741..00000000000 --- a/platform/ios/test/MGLMockGestureRecognizers.m +++ /dev/null @@ -1,55 +0,0 @@ - -#import "MGLMockGestureRecognizers.h" -#import "objc/runtime.h" - -@implementation UIPinchGestureRecognizerMock -@synthesize velocity; -@synthesize state; -- (CGPoint)locationInView:(nullable UIView *)view { return self.locationInViewOverride; } -@end - -@implementation UIRotationGestureRecognizerMock -- (CGPoint)locationInView:(nullable UIView*)view { return view.center; } -@synthesize state; -@end - -@implementation UITapGestureRecognizerMock - -+ (void)load { - method_exchangeImplementations(class_getInstanceMethod(self, @selector(state)), - class_getInstanceMethod(self, @selector(mockState))); -} - -- (UIGestureRecognizerState)mockState { - return UIGestureRecognizerStateRecognized; -} - -- (UIView *)view { - return self.mockTappedView; -} - -- (CGPoint)locationInView:(UIView *)view { - return self.mockTappedPoint; -} - -@end - -@implementation UILongPressGestureRecognizerMock -@synthesize state; - -- (CGPoint)locationInView:(UIView *)view { - return self.mockTappedPoint; -} -@end - -@implementation UIPanGestureRecognizerMock -@synthesize state; -@synthesize numberOfTouches; - -- (CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView *)view { - if (touchIndex) { - return self.secondFingerPoint; - } - return self.firstFingerPoint; -} -@end diff --git a/platform/ios/test/MGLNSOrthographyAdditionsTests.m b/platform/ios/test/MGLNSOrthographyAdditionsTests.m deleted file mode 100644 index f30553e8f67..00000000000 --- a/platform/ios/test/MGLNSOrthographyAdditionsTests.m +++ /dev/null @@ -1,19 +0,0 @@ -#import - -#import "NSOrthography+MGLAdditions.h" -#import "MGLVectorTileSource_Private.h" - -@interface MGLNSOrthographyAdditionsTests : XCTestCase - -@end - -@implementation MGLNSOrthographyAdditionsTests - -- (void)testStreetsLanguages { - for (NSString *language in [MGLVectorTileSource mapboxStreetsLanguages]) { - NSString *dominantScript = [NSOrthography mgl_dominantScriptForMapboxStreetsLanguage:language]; - XCTAssertNotEqualObjects(dominantScript, @"Zyyy", @"Mapbox Streets languages should have dominant script"); - } -} - -@end diff --git a/platform/ios/test/MGLNetworkConfigurationTests.m b/platform/ios/test/MGLNetworkConfigurationTests.m deleted file mode 100644 index bfb63f57af5..00000000000 --- a/platform/ios/test/MGLNetworkConfigurationTests.m +++ /dev/null @@ -1,43 +0,0 @@ -#import -#import -#import "MGLNetworkConfiguration_Private.h" - -@interface MGLNetworkConfigurationTests : XCTestCase -@end - -@implementation MGLNetworkConfigurationTests - -// Regression test for https://github.com/mapbox/mapbox-gl-native/issues/14982 -- (void)testAccessingEventsFromMultipleThreads { - MGLNetworkConfiguration *configuration = [[MGLNetworkConfiguration alloc] init]; - - // Concurrent - dispatch_queue_t queue = dispatch_queue_create("com.mapbox.testAccessingEventsFromMultipleThreads", DISPATCH_QUEUE_CONCURRENT); - - NSUInteger numberOfConcurrentBlocks = 20; - - XCTestExpectation *expectation = [self expectationWithDescription:@"wait-for-threads"]; - expectation.expectedFulfillmentCount = numberOfConcurrentBlocks; - - for (NSUInteger i = 0; i < numberOfConcurrentBlocks; i++) { - - NSString *event = [NSString stringWithFormat:@"test://event-%ld", i]; - NSString *resourceType = @"test"; - - dispatch_async(queue, ^{ - [configuration startDownloadEvent:event type:resourceType]; - - NSURL *url = [NSURL URLWithString:event]; - NSURLResponse *response = [[NSURLResponse alloc] initWithURL:url MIMEType:nil expectedContentLength:0 textEncodingName:nil]; - - [configuration stopDownloadEventForResponse:response]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [expectation fulfill]; - }); - }); - } - - [self waitForExpectations:@[expectation] timeout:10.0]; -} -@end diff --git a/platform/ios/vendor/SMCalloutView/SMCalloutView.h b/platform/ios/vendor/SMCalloutView/SMCalloutView.h deleted file mode 100755 index 5bb73d4c84a..00000000000 --- a/platform/ios/vendor/SMCalloutView/SMCalloutView.h +++ /dev/null @@ -1,217 +0,0 @@ -#import -#import - -/* - -SMCalloutView -------------- -Created by Nick Farina (nfarina@gmail.com) -Version 2.1.5 - -*/ - -/// options for which directions the callout is allowed to "point" in. -typedef NS_OPTIONS(NSUInteger, MGLSMCalloutArrowDirection) { - MGLSMCalloutArrowDirectionUp = 1 << 0, - MGLSMCalloutArrowDirectionDown = 1 << 1, - MGLSMCalloutArrowDirectionAny = MGLSMCalloutArrowDirectionUp | MGLSMCalloutArrowDirectionDown -}; - -/// options for the callout present/dismiss animation -typedef NS_ENUM(NSInteger, MGLSMCalloutAnimation) { - /// the "bounce" animation we all know and love from @c UIAlertView - MGLSMCalloutAnimationBounce, - /// a simple fade in or out - MGLSMCalloutAnimationFade, - /// grow or shrink linearly, like in the iPad Calendar app - MGLSMCalloutAnimationStretch -}; - -NS_ASSUME_NONNULL_BEGIN - -/// when delaying our popup in order to scroll content into view, you can use this amount to match the -/// animation duration of UIScrollView when using @c -setContentOffset:animated. -extern NSTimeInterval const kMGLSMCalloutViewRepositionDelayForUIScrollView; - -@protocol MGLSMCalloutViewDelegate; -@class MGLSMCalloutBackgroundView; - -// -// Callout view. -// - -// iOS 10+ expects CAAnimationDelegate to be set explicitly. -#if __IPHONE_OS_VERSION_MAX_ALLOWED < 100000 -@interface MGLSMCalloutView : UIView -#else -@interface MGLSMCalloutView : UIView -#endif - -@property (nonatomic, weak, nullable) id delegate; -/// title/titleView relationship mimics UINavigationBar. -@property (nonatomic, copy, nullable) NSString *title; -@property (nonatomic, copy, nullable) NSString *subtitle; - -/// Left accessory view for the call out -@property (nonatomic, strong, nullable) UIView *leftAccessoryView; -/// Right accessoty view for the call out -@property (nonatomic, strong, nullable) UIView *rightAccessoryView; -/// Default @c SMCalloutArrowDirectionDown -@property (nonatomic, assign) MGLSMCalloutArrowDirection permittedArrowDirection; -/// The current arrow direction -@property (nonatomic, readonly) MGLSMCalloutArrowDirection currentArrowDirection; -/// if the @c UIView you're constraining to has portions that are overlapped by nav bar, tab bar, etc. you'll need to tell us those insets. -@property (nonatomic, assign) UIEdgeInsets constrainedInsets; -/// default is @c SMCalloutMaskedBackgroundView, or @c SMCalloutDrawnBackgroundView when using @c SMClassicCalloutView -@property (nonatomic, strong) MGLSMCalloutBackgroundView *backgroundView; - -/** - @brief Custom title view. - - @disucssion Keep in mind that @c SMCalloutView calls @c -sizeThatFits on titleView/subtitleView if defined, so your view - may be resized as a result of that (especially if you're using @c UILabel/UITextField). You may want to subclass and override @c -sizeThatFits, or just wrap your view in a "generic" @c UIView if you do not want it to be auto-sized. - - @warning If this is set, the respective @c title property will be ignored. - */ -@property (nonatomic, strong, nullable) UIView *titleView; - -/** - @brief Custom subtitle view. - - @discussion Keep in mind that @c SMCalloutView calls @c -sizeThatFits on subtitleView if defined, so your view - may be resized as a result of that (especially if you're using @c UILabel/UITextField). You may want to subclass and override @c -sizeThatFits, or just wrap your view in a "generic" @c UIView if you do not want it to be auto-sized. - - @warning If this is set, the respective @c subtitle property will be ignored. - */ -@property (nonatomic, strong, nullable) UIView *subtitleView; - -/// Custom "content" view that can be any width/height. If this is set, title/subtitle/titleView/subtitleView are all ignored. -@property (nonatomic, retain, nullable) UIView *contentView; - -/// Custom content view margin -@property (nonatomic, assign) UIEdgeInsets contentViewInset; - -/// calloutOffset is the offset in screen points from the top-middle of the target view, where the anchor of the callout should be shown. -@property (nonatomic, assign) CGPoint calloutOffset; - -/// default SMCalloutAnimationBounce, SMCalloutAnimationFade respectively -@property (nonatomic, assign) MGLSMCalloutAnimation presentAnimation, dismissAnimation; - -/// Returns a new instance of SMCalloutView if running on iOS 7 or better, otherwise a new instance of SMClassicCalloutView if available. -+ (MGLSMCalloutView *)platformCalloutView; - -/** - @brief Presents a callout view by adding it to "inView" and pointing at the given rect of inView's bounds. - - @discussion Constrains the callout to the bounds of the given view. Optionally scrolls the given rect into view (plus margins) - if @c -delegate is set and responds to @c -delayForRepositionWithSize. - - @param rect @c CGRect to present the view from - @param view view to 'constrain' the @c constrainedView to - @param constrainedView @c UIView to be constrainted in @c view - @param animated @c BOOL if presentation should be animated - */ -- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToView:(UIView *)constrainedView animated:(BOOL)animated; - -/** - @brief Presents a callout view by adding it to "inView" and pointing at the given rect of inView's bounds. - - @discussion Constrains the callout to the rect (in the space of the given view). - - @param rect @c CGRect to present the view from - @param view view to 'constrain' the @c constrainedView to - @param constrainedRect Rect to constrain the callout to - @param animated @c BOOL if presentation should be animated - */ -- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToRect:(CGRect)constrainedRect animated:(BOOL)animated; - -/** - @brief Present a callout layer in the `layer` and pointing at the given rect of the `layer` bounds - - @discussion Same as the view-based presentation, but inserts the callout into a CALayer hierarchy instead. - @note Be aware that you'll have to direct your own touches to any accessory views, since CALayer doesn't relay touch events. - - @param rect @c CGRect to present the view from - @param layer layer to 'constrain' the @c constrainedLayer to - @param constrainedLayer @c CALayer to be constrained in @c layer - @param animated @c BOOL if presentation should be animated - */ -- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated; - -/** - Dismiss the callout view - - @param animated @c BOOL if dismissal should be animated - */ -- (void)dismissCalloutAnimated:(BOOL)animated; - -/// For subclassers. You can override this method to provide your own custom animation for presenting/dismissing the callout. -- (CAAnimation *)animationWithType:(MGLSMCalloutAnimation)type presenting:(BOOL)presenting; - -@end - -// -// Background view - default draws the iOS 7 system background style (translucent white with rounded arrow). -// - -/// Abstract base class -@interface MGLSMCalloutBackgroundView : UIView -/// indicates where the tip of the arrow should be drawn, as a pixel offset -@property (nonatomic, assign) CGPoint arrowPoint; -/// will be set by the callout when the callout is in a highlighted state -@property (nonatomic, assign) BOOL highlighted; -/// returns an optional layer whose contents should mask the callout view's contents (not honored by @c SMClassicCalloutView ) -@property (nonatomic, assign) CALayer *contentMask; -/// height of the callout "arrow" -@property (nonatomic, assign) CGFloat anchorHeight; -/// the smallest possible distance from the edge of our control to the "tip" of the anchor, from either left or right -@property (nonatomic, assign) CGFloat anchorMargin; -@end - -/// Default for iOS 7, this reproduces the "masked" behavior of the iOS 7-style callout view. -/// Accessories are masked by the shape of the callout (including the arrow itself). -@interface MGLSMCalloutMaskedBackgroundView : MGLSMCalloutBackgroundView -@end - -// -// Delegate methods -// - -@protocol MGLSMCalloutViewDelegate -@optional - -/// Controls whether the callout "highlights" when pressed. default YES. You must also respond to @c -calloutViewClicked below. -/// Not honored by @c SMClassicCalloutView. -- (BOOL)calloutViewShouldHighlight:(MGLSMCalloutView *)calloutView; - -/// Called when the callout view is clicked. Not honored by @c SMClassicCalloutView. -- (void)calloutViewClicked:(MGLSMCalloutView *)calloutView; - -/** - Called when the callout view detects that it will be outside the constrained view when it appears, - or if the target rect was already outside the constrained view. You can implement this selector - to respond to this situation by repositioning your content first in order to make everything visible. - The @c CGSize passed is the calculated offset necessary to make everything visible (plus a nice margin). - It expects you to return the amount of time you need to reposition things so the popup can be delayed. - Typically you would return @c kSMCalloutViewRepositionDelayForUIScrollView if you're repositioning by calling @c [UIScrollView @c setContentOffset:animated:]. - - @param calloutView the @c SMCalloutView to reposition - @param offset caluclated offset necessary to make everything visible - @returns @c NSTimeInterval to delay the repositioning - */ -- (NSTimeInterval)calloutView:(MGLSMCalloutView *)calloutView delayForRepositionWithSize:(CGSize)offset; - -/// Called before the callout view appears on screen, or before the appearance animation will start. -- (void)calloutViewWillAppear:(MGLSMCalloutView *)calloutView; - -/// Called after the callout view appears on screen, or after the appearance animation is complete. -- (void)calloutViewDidAppear:(MGLSMCalloutView *)calloutView; - -/// Called before the callout view is removed from the screen, or before the disappearance animation is complete. -- (void)calloutViewWillDisappear:(MGLSMCalloutView *)calloutView; - -/// Called after the callout view is removed from the screen, or after the disappearance animation is complete. -- (void)calloutViewDidDisappear:(MGLSMCalloutView *)calloutView; - -NS_ASSUME_NONNULL_END -@end diff --git a/platform/ios/vendor/SMCalloutView/SMCalloutView.m b/platform/ios/vendor/SMCalloutView/SMCalloutView.m deleted file mode 100755 index 06626f94975..00000000000 --- a/platform/ios/vendor/SMCalloutView/SMCalloutView.m +++ /dev/null @@ -1,939 +0,0 @@ -#import "SMCalloutView.h" - -// -// UIView frame helpers - we do a lot of UIView frame fiddling in this class; these functions help keep things readable. -// - -@interface UIView (SMFrameAdditions) -@property (nonatomic, assign) CGPoint frameOrigin; -@property (nonatomic, assign) CGSize frameSize; -@property (nonatomic, assign) CGFloat frameX, frameY, frameWidth, frameHeight; // normal rect properties -@property (nonatomic, assign) CGFloat frameLeft, frameTop, frameRight, frameBottom; // these will stretch/shrink the rect -@end - -// -// Callout View. -// - -#define CALLOUT_DEFAULT_CONTAINER_HEIGHT 44 // height of just the main portion without arrow -#define CALLOUT_SUB_DEFAULT_CONTAINER_HEIGHT 52 // height of just the main portion without arrow (when subtitle is present) -#define CALLOUT_MIN_WIDTH 61 // minimum width of system callout -#define TITLE_HMARGIN 12 // the title/subtitle view's normal horizontal margin from the edges of our callout view or from the accessories -#define TITLE_TOP 11 // the top of the title view when no subtitle is present -#define TITLE_SUB_TOP 4 // the top of the title view when a subtitle IS present -#define TITLE_HEIGHT 21 // title height, fixed -#define SUBTITLE_TOP 28 // the top of the subtitle, when present -#define SUBTITLE_HEIGHT 15 // subtitle height, fixed -#define BETWEEN_ACCESSORIES_MARGIN 7 // margin between accessories when no title/subtitle is present -#define TOP_ANCHOR_MARGIN 13 // all the above measurements assume a bottom anchor! if we're pointing "up" we'll need to add this top margin to everything. -#define COMFORTABLE_MARGIN 10 // when we try to reposition content to be visible, we'll consider this margin around your target rect - -NSTimeInterval const kMGLSMCalloutViewRepositionDelayForUIScrollView = 1.0/3.0; - -@interface MGLSMCalloutView () -@property (nonatomic, strong) UIButton *containerView; // for masking and interaction -@property (nonatomic, strong) UILabel *titleLabel, *subtitleLabel; -@property (nonatomic, assign) MGLSMCalloutArrowDirection currentArrowDirection; -@property (nonatomic, assign) BOOL popupCancelled; -@end - -@implementation MGLSMCalloutView - -+ (MGLSMCalloutView *)platformCalloutView { - // MGL: Mapbox does not need or include the custom flavor, so this is modified to just use SMCalloutView. - return [MGLSMCalloutView new]; -} - -- (id)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]) { - self.permittedArrowDirection = MGLSMCalloutArrowDirectionDown; - self.presentAnimation = MGLSMCalloutAnimationBounce; - self.dismissAnimation = MGLSMCalloutAnimationFade; - self.backgroundColor = [UIColor clearColor]; - self.containerView = [UIButton new]; - self.containerView.isAccessibilityElement = NO; - self.isAccessibilityElement = NO; - self.contentViewInset = UIEdgeInsetsMake(12, 12, 12, 12); - - [self.containerView addTarget:self action:@selector(highlightIfNecessary) forControlEvents:UIControlEventTouchDown | UIControlEventTouchDragInside]; - [self.containerView addTarget:self action:@selector(unhighlightIfNecessary) forControlEvents:UIControlEventTouchDragOutside | UIControlEventTouchCancel | UIControlEventTouchUpOutside | UIControlEventTouchUpInside]; - [self.containerView addTarget:self action:@selector(calloutClicked) forControlEvents:UIControlEventTouchUpInside]; - } - return self; -} - -- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { - UIView *hitView = [super hitTest:point withEvent:event]; - - // If we tapped on our container (i.e. the UIButton), then ask the background - // view if the point is "inside". MGLSMCalloutMaskedBackgroundView provides a - // custom implementation that checks against the main callout and the down arrow. - // This avoids taps in "blank" space being detected - - if (hitView == self.containerView) { - // Ideally we'd use the background mask to determine whether a tap point - // is valid, but that's overkill in this situation - CGPoint backgroundPoint = [self convertPoint:point toView:self.backgroundView]; - if (![self.backgroundView pointInside:backgroundPoint withEvent:event]) { - return nil; - } - } - - return hitView; -} - -- (BOOL)supportsHighlighting { - if (![self.delegate respondsToSelector:@selector(calloutViewClicked:)]) - return NO; - if ([self.delegate respondsToSelector:@selector(calloutViewShouldHighlight:)]) - return [self.delegate calloutViewShouldHighlight:self]; - return YES; -} - -- (void)highlightIfNecessary { if (self.supportsHighlighting) self.backgroundView.highlighted = YES; } -- (void)unhighlightIfNecessary { if (self.supportsHighlighting) self.backgroundView.highlighted = NO; } - -- (void)calloutClicked { - if ([self.delegate respondsToSelector:@selector(calloutViewClicked:)]) - [self.delegate calloutViewClicked:self]; -} - -- (UIView *)titleViewOrDefault { - if (self.titleView) - // if you have a custom title view defined, return that. - return self.titleView; - else { - if (!self.titleLabel) { - // create a default titleView - self.titleLabel = [UILabel new]; - self.titleLabel.frameHeight = TITLE_HEIGHT; - self.titleLabel.opaque = NO; - self.titleLabel.backgroundColor = [UIColor clearColor]; - self.titleLabel.font = [UIFont systemFontOfSize:17]; - self.titleLabel.textColor = [UIColor blackColor]; - } - return self.titleLabel; - } -} - -- (UIView *)subtitleViewOrDefault { - if (self.subtitleView) - // if you have a custom subtitle view defined, return that. - return self.subtitleView; - else { - if (!self.subtitleLabel) { - // create a default subtitleView - self.subtitleLabel = [UILabel new]; - self.subtitleLabel.frameHeight = SUBTITLE_HEIGHT; - self.subtitleLabel.opaque = NO; - self.subtitleLabel.backgroundColor = [UIColor clearColor]; - self.subtitleLabel.font = [UIFont systemFontOfSize:12]; - self.subtitleLabel.textColor = [UIColor blackColor]; - } - return self.subtitleLabel; - } -} - -- (MGLSMCalloutBackgroundView *)backgroundView { - // create our default background on first access only if it's nil, since you might have set your own background anyway. - return _backgroundView ? _backgroundView : (_backgroundView = [self defaultBackgroundView]); -} - -- (MGLSMCalloutBackgroundView *)defaultBackgroundView { - return [MGLSMCalloutMaskedBackgroundView new]; -} - -- (void)rebuildSubviews { - // remove and re-add our appropriate subviews in the appropriate order - [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; - [self.containerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; - [self setNeedsDisplay]; - - [self addSubview:self.backgroundView]; - [self addSubview:self.containerView]; - - if (self.contentView) { - [self.containerView addSubview:self.contentView]; - } - else { - if (self.titleViewOrDefault) [self.containerView addSubview:self.titleViewOrDefault]; - if (self.subtitleViewOrDefault) [self.containerView addSubview:self.subtitleViewOrDefault]; - } - if (self.leftAccessoryView) [self.containerView addSubview:self.leftAccessoryView]; - if (self.rightAccessoryView) [self.containerView addSubview:self.rightAccessoryView]; -} - -// Accessory margins. Accessories are centered vertically when shorter -// than the callout, otherwise they grow from the upper corner. - -- (CGFloat)leftAccessoryVerticalMargin { - if (self.leftAccessoryView.frameHeight < self.calloutContainerHeight) - return roundf((self.calloutContainerHeight - self.leftAccessoryView.frameHeight) / 2); - else - return 0; -} - -- (CGFloat)leftAccessoryHorizontalMargin { - return fminf(self.leftAccessoryVerticalMargin, TITLE_HMARGIN); -} - -- (CGFloat)rightAccessoryVerticalMargin { - if (self.rightAccessoryView.frameHeight < self.calloutContainerHeight) - return roundf((self.calloutContainerHeight - self.rightAccessoryView.frameHeight) / 2); - else - return 0; -} - -- (CGFloat)rightAccessoryHorizontalMargin { - return fminf(self.rightAccessoryVerticalMargin, TITLE_HMARGIN); -} - -- (CGFloat)innerContentMarginLeft { - if (self.leftAccessoryView) - return self.leftAccessoryHorizontalMargin + self.leftAccessoryView.frameWidth + TITLE_HMARGIN; - else - return self.contentViewInset.left; -} - -- (CGFloat)innerContentMarginRight { - if (self.rightAccessoryView) - return self.rightAccessoryHorizontalMargin + self.rightAccessoryView.frameWidth + TITLE_HMARGIN; - else - return self.contentViewInset.right; -} - -- (CGFloat)calloutHeight { - return self.calloutContainerHeight + self.backgroundView.anchorHeight; -} - -- (CGFloat)calloutContainerHeight { - if (self.contentView) - return self.contentView.frameHeight + self.contentViewInset.bottom + self.contentViewInset.top; - else if (self.subtitleView || self.subtitle.length > 0) - return CALLOUT_SUB_DEFAULT_CONTAINER_HEIGHT; - else - return CALLOUT_DEFAULT_CONTAINER_HEIGHT; -} - -- (CGSize)sizeThatFits:(CGSize)size { - - // calculate how much non-negotiable space we need to reserve for margin and accessories - CGFloat margin = self.innerContentMarginLeft + self.innerContentMarginRight; - - // how much room is left for text? - CGFloat availableWidthForText = size.width - margin - 1; - - // no room for text? then we'll have to squeeze into the given size somehow. - if (availableWidthForText < 0) - availableWidthForText = 0; - - CGSize preferredTitleSize = [self.titleViewOrDefault sizeThatFits:CGSizeMake(availableWidthForText, TITLE_HEIGHT)]; - CGSize preferredSubtitleSize = [self.subtitleViewOrDefault sizeThatFits:CGSizeMake(availableWidthForText, SUBTITLE_HEIGHT)]; - - // total width we'd like - CGFloat preferredWidth; - - if (self.contentView) { - - // if we have a content view, then take our preferred size directly from that - preferredWidth = self.contentView.frameWidth + margin; - } - else if (preferredTitleSize.width >= 0.000001 || preferredSubtitleSize.width >= 0.000001) { - - // if we have a title or subtitle, then our assumed margins are valid, and we can apply them - preferredWidth = fmaxf(preferredTitleSize.width, preferredSubtitleSize.width) + margin; - } - else { - // ok we have no title or subtitle to speak of. In this case, the system callout would actually not display - // at all! But we can handle it. - preferredWidth = self.leftAccessoryView.frameWidth + self.rightAccessoryView.frameWidth + self.leftAccessoryHorizontalMargin + self.rightAccessoryHorizontalMargin; - - if (self.leftAccessoryView && self.rightAccessoryView) - preferredWidth += BETWEEN_ACCESSORIES_MARGIN; - } - - // ensure we're big enough to fit our graphics! - preferredWidth = fmaxf(preferredWidth, CALLOUT_MIN_WIDTH); - - // ask to be smaller if we have space, otherwise we'll fit into what we have by truncating the title/subtitle. - return CGSizeMake(fminf(preferredWidth, size.width), self.calloutHeight); -} - -- (CGSize)offsetToContainRect:(CGRect)innerRect inRect:(CGRect)outerRect { - CGFloat nudgeRight = fmaxf(0, CGRectGetMinX(outerRect) - CGRectGetMinX(innerRect)); - CGFloat nudgeLeft = fminf(0, CGRectGetMaxX(outerRect) - CGRectGetMaxX(innerRect)); - CGFloat nudgeTop = fmaxf(0, CGRectGetMinY(outerRect) - CGRectGetMinY(innerRect)); - CGFloat nudgeBottom = fminf(0, CGRectGetMaxY(outerRect) - CGRectGetMaxY(innerRect)); - return CGSizeMake(nudgeLeft ? nudgeLeft : nudgeRight, nudgeTop ? nudgeTop : nudgeBottom); -} - -- (UIEdgeInsets)marginInsetsHintForPresentationFromRect:(CGRect)rect { - - const CGFloat defaultMargin = 20.0f; - - // form our subviews based on our content set so far - [self rebuildSubviews]; - - // size the callout to fit the width constraint as best as possible - CGFloat height = self.calloutHeight; - CGSize size = [self sizeThatFits:CGSizeMake(0.0f, height)]; - - // Without re-jigging presentCalloutFromRect, let's just make a best-guess with what we have - // right now. - CGFloat horizontalMargin = fmaxf(0, ceilf((CALLOUT_MIN_WIDTH-rect.size.width)/2)); - - UIEdgeInsets insets = { - .top = 0.0f, - .right = -defaultMargin - horizontalMargin, - .bottom = 0.0f, - .left = -defaultMargin - horizontalMargin - }; - - if (self.permittedArrowDirection == MGLSMCalloutArrowDirectionUp) - insets.bottom -= (defaultMargin + size.height); - else - insets.top -= (defaultMargin + size.height); - - return insets; -} - - -- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToView:(UIView *)constrainedView animated:(BOOL)animated { - [self presentCalloutFromRect:rect inLayer:view.layer ofView:view constrainedToLayer:constrainedView.layer animated:animated]; -} - -- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated { - [self presentCalloutFromRect:rect inLayer:layer ofView:nil constrainedToLayer:constrainedLayer animated:animated]; -} - -- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer ofView:(UIView *)view constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated { - // figure out the constrained view's rect in our popup view's coordinate system - CGRect constrainedRect = [constrainedLayer convertRect:constrainedLayer.bounds toLayer:layer]; - [self presentCalloutFromRect:rect inLayer:layer ofView:view constrainedToRect:constrainedRect animated:animated]; -} - -- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToRect:(CGRect)constrainedRect animated:(BOOL)animated { - [self presentCalloutFromRect:rect inLayer:view.layer ofView:view constrainedToRect:constrainedRect animated:animated]; -} - -// this private method handles both CALayer and UIView parents depending on what's passed. -- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer ofView:(UIView *)view constrainedToRect:(CGRect)constrainedRect animated:(BOOL)animated { - - // Sanity check: dismiss this callout immediately if it's displayed somewhere - if (self.layer.superlayer) [self dismissCalloutAnimated:NO]; - - // cancel all animations that may be in progress - [self.layer removeAnimationForKey:@"present"]; - [self.layer removeAnimationForKey:@"dismiss"]; - - - // apply our edge constraints - constrainedRect = UIEdgeInsetsInsetRect(constrainedRect, self.constrainedInsets); - - constrainedRect = CGRectInset(constrainedRect, COMFORTABLE_MARGIN, COMFORTABLE_MARGIN); - - // form our subviews based on our content set so far - [self rebuildSubviews]; - - // apply title/subtitle (if present - self.titleLabel.text = self.title; - self.subtitleLabel.text = self.subtitle; - - // size the callout to fit the width constraint as best as possible - self.frameSize = [self sizeThatFits:CGSizeMake(constrainedRect.size.width, self.calloutHeight)]; - - // how much room do we have in the constraint box, both above and below our target rect? - CGFloat topSpace = CGRectGetMinY(rect) - CGRectGetMinY(constrainedRect); - CGFloat bottomSpace = CGRectGetMaxY(constrainedRect) - CGRectGetMaxY(rect); - - // we prefer to point our arrow down. - MGLSMCalloutArrowDirection bestDirection = MGLSMCalloutArrowDirectionDown; - - // we'll point it up though if that's the only option you gave us. - if (self.permittedArrowDirection == MGLSMCalloutArrowDirectionUp) - bestDirection = MGLSMCalloutArrowDirectionUp; - - // or, if we don't have enough space on the top and have more space on the bottom, and you - // gave us a choice, then pointing up is the better option. - if (self.permittedArrowDirection == MGLSMCalloutArrowDirectionAny && topSpace < self.calloutHeight && bottomSpace > topSpace) - bestDirection = MGLSMCalloutArrowDirectionUp; - - self.currentArrowDirection = bestDirection; - - // we want to point directly at the horizontal center of the given rect. calculate our "anchor point" in terms of our - // target view's coordinate system. make sure to offset the anchor point as requested if necessary. - CGFloat anchorX = self.calloutOffset.x + CGRectGetMidX(rect); - CGFloat anchorY = self.calloutOffset.y + (bestDirection == MGLSMCalloutArrowDirectionDown ? CGRectGetMinY(rect) : CGRectGetMaxY(rect)); - - // we prefer to sit centered directly above our anchor - CGFloat calloutX = roundf(anchorX - self.frameWidth / 2); - - // but not if it's going to get too close to the edge of our constraints - if (calloutX < constrainedRect.origin.x) - calloutX = constrainedRect.origin.x; - - if (calloutX > constrainedRect.origin.x+constrainedRect.size.width-self.frameWidth) - calloutX = constrainedRect.origin.x+constrainedRect.size.width-self.frameWidth; - - // what's the farthest to the left and right that we could point to, given our background image constraints? - CGFloat minPointX = calloutX + self.backgroundView.anchorMargin; - CGFloat maxPointX = calloutX + self.frameWidth - self.backgroundView.anchorMargin; - - // we may need to scoot over to the left or right to point at the correct spot - CGFloat adjustX = 0; - if (anchorX < minPointX) adjustX = anchorX - minPointX; - if (anchorX > maxPointX) adjustX = anchorX - maxPointX; - - // add the callout to the given layer (or view if possible, to receive touch events) - if (view) - [view addSubview:self]; - else - [layer addSublayer:self.layer]; - - CGPoint calloutOrigin = { - .x = calloutX + adjustX, - .y = bestDirection == MGLSMCalloutArrowDirectionDown ? (anchorY - self.calloutHeight) : anchorY - }; - - self.frameOrigin = calloutOrigin; - - // now set the *actual* anchor point for our layer so that our "popup" animation starts from this point. - CGPoint anchorPoint = [layer convertPoint:CGPointMake(anchorX, anchorY) toLayer:self.layer]; - - // pass on the anchor point to our background view so it knows where to draw the arrow - self.backgroundView.arrowPoint = anchorPoint; - - // adjust it to unit coordinates for the actual layer.anchorPoint property - anchorPoint.x /= self.frameWidth; - anchorPoint.y /= self.frameHeight; - self.layer.anchorPoint = anchorPoint; - - // setting the anchor point moves the view a bit, so we need to reset - self.frameOrigin = calloutOrigin; - - // make sure our frame is not on half-pixels or else we may be blurry! - CGFloat scale = [UIScreen mainScreen].scale; - self.frameX = floorf(self.frameX*scale)/scale; - self.frameY = floorf(self.frameY*scale)/scale; - - // layout now so we can immediately start animating to the final position if needed - [self setNeedsLayout]; - [self layoutIfNeeded]; - - // if we're outside the bounds of our constraint rect, we'll give our delegate an opportunity to shift us into position. - // consider both our size and the size of our target rect (which we'll assume to be the size of the content you want to scroll into view. - CGRect contentRect = CGRectUnion(self.frame, rect); - CGSize offset = [self offsetToContainRect:contentRect inRect:constrainedRect]; - - NSTimeInterval delay = 0; - self.popupCancelled = NO; // reset this before calling our delegate below - - if ([self.delegate respondsToSelector:@selector(calloutView:delayForRepositionWithSize:)] && !CGSizeEqualToSize(offset, CGSizeZero)) - delay = [self.delegate calloutView:(id)self delayForRepositionWithSize:offset]; - - // there's a chance that user code in the delegate method may have called -dismissCalloutAnimated to cancel things; if that - // happened then we need to bail! - if (self.popupCancelled) return; - - // now we want to mask our contents to our background view (if requested) to match the iOS 7 style - self.containerView.layer.mask = self.backgroundView.contentMask; - - // if we need to delay, we don't want to be visible while we're delaying, so hide us in preparation for our popup - self.hidden = YES; - - // create the appropriate animation, even if we're not animated - CAAnimation *animation = [self animationWithType:self.presentAnimation presenting:YES]; - - // nuke the duration if no animation requested - we'll still need to "run" the animation to get delays and callbacks - if (!animated) - animation.duration = 0.0000001; // can't be zero or the animation won't "run" - - animation.beginTime = CACurrentMediaTime() + delay; - animation.delegate = self; - - [self.layer addAnimation:animation forKey:@"present"]; -} - -- (void)animationDidStart:(CAAnimation *)anim { - BOOL presenting = [[anim valueForKey:@"presenting"] boolValue]; - - if (presenting) { - if ([_delegate respondsToSelector:@selector(calloutViewWillAppear:)]) - [_delegate calloutViewWillAppear:(id)self]; - - // ok, animation is on, let's make ourselves visible! - self.hidden = NO; - } - else if (!presenting) { - if ([_delegate respondsToSelector:@selector(calloutViewWillDisappear:)]) - [_delegate calloutViewWillDisappear:(id)self]; - } -} - -- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)finished { - BOOL presenting = [[anim valueForKey:@"presenting"] boolValue]; - - if (presenting && finished) { - if ([_delegate respondsToSelector:@selector(calloutViewDidAppear:)]) - [_delegate calloutViewDidAppear:(id)self]; - } - else if (!presenting && finished) { - - [self removeFromParent]; - [self.layer removeAnimationForKey:@"dismiss"]; - - if ([_delegate respondsToSelector:@selector(calloutViewDidDisappear:)]) - [_delegate calloutViewDidDisappear:(id)self]; - } -} - -- (void)dismissCalloutAnimated:(BOOL)animated { - - // cancel all animations that may be in progress - [self.layer removeAnimationForKey:@"present"]; - [self.layer removeAnimationForKey:@"dismiss"]; - - self.popupCancelled = YES; - - if (animated) { - CAAnimation *animation = [self animationWithType:self.dismissAnimation presenting:NO]; - animation.delegate = self; - [self.layer addAnimation:animation forKey:@"dismiss"]; - } - else { - [self removeFromParent]; - } -} - -- (void)removeFromParent { - if (self.superview) - [self removeFromSuperview]; - else { - // removing a layer from a superlayer causes an implicit fade-out animation that we wish to disable. - [CATransaction begin]; - [CATransaction setDisableActions:YES]; - [self.layer removeFromSuperlayer]; - [CATransaction commit]; - } -} - -- (CAAnimation *)animationWithType:(MGLSMCalloutAnimation)type presenting:(BOOL)presenting { - CAAnimation *animation = nil; - - switch (type) - { - case MGLSMCalloutAnimationBounce: - { - CABasicAnimation *fade = [CABasicAnimation animationWithKeyPath:@"opacity"]; - fade.duration = 0.23; - fade.fromValue = presenting ? @0.0 : @1.0; - fade.toValue = presenting ? @1.0 : @0.0; - fade.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; - - CABasicAnimation *bounce = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; - bounce.duration = 0.23; - bounce.fromValue = presenting ? @0.7 : @1.0; - bounce.toValue = presenting ? @1.0 : @0.7; - bounce.timingFunction = [CAMediaTimingFunction functionWithControlPoints:0.59367:0.12066:0.18878:1.5814]; - - CAAnimationGroup *group = [CAAnimationGroup animation]; - group.animations = @[fade, bounce]; - group.duration = 0.23; - - animation = group; - break; - } - - case MGLSMCalloutAnimationFade: - { - CABasicAnimation *fade = [CABasicAnimation animationWithKeyPath:@"opacity"]; - fade.duration = 1.0/3.0; - fade.fromValue = presenting ? @0.0 : @1.0; - fade.toValue = presenting ? @1.0 : @0.0; - animation = fade; - break; - } - - case MGLSMCalloutAnimationStretch: - { - CABasicAnimation *stretch = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; - stretch.duration = 0.1; - stretch.fromValue = presenting ? @0.0 : @1.0; - stretch.toValue = presenting ? @1.0 : @0.0; - animation = stretch; - break; - } - } - - // CAAnimation is KVC compliant, so we can store whether we're presenting for lookup in our delegate methods - [animation setValue:@(presenting) forKey:@"presenting"]; - - animation.fillMode = kCAFillModeForwards; - animation.removedOnCompletion = NO; - - return animation; -} - -- (void)layoutSubviews { - - self.containerView.frame = self.bounds; - self.backgroundView.frame = self.bounds; - - // if we're pointing up, we'll need to push almost everything down a bit - CGFloat dy = self.currentArrowDirection == MGLSMCalloutArrowDirectionUp ? TOP_ANCHOR_MARGIN : 0; - - self.titleViewOrDefault.frameX = self.innerContentMarginLeft; - self.titleViewOrDefault.frameY = (self.subtitleView || self.subtitle.length ? TITLE_SUB_TOP : TITLE_TOP) + dy; - self.titleViewOrDefault.frameWidth = self.frameWidth - self.innerContentMarginLeft - self.innerContentMarginRight; - - self.subtitleViewOrDefault.frameX = self.titleViewOrDefault.frameX; - self.subtitleViewOrDefault.frameY = SUBTITLE_TOP + dy; - self.subtitleViewOrDefault.frameWidth = self.titleViewOrDefault.frameWidth; - - self.leftAccessoryView.frameX = self.leftAccessoryHorizontalMargin; - self.leftAccessoryView.frameY = self.leftAccessoryVerticalMargin + dy; - - self.rightAccessoryView.frameX = self.frameWidth - self.rightAccessoryHorizontalMargin - self.rightAccessoryView.frameWidth; - self.rightAccessoryView.frameY = self.rightAccessoryVerticalMargin + dy; - - if (self.contentView) { - self.contentView.frameX = self.innerContentMarginLeft; - self.contentView.frameY = self.contentViewInset.top + dy; - } -} - -#pragma mark - Accessibility - -- (NSInteger)accessibilityElementCount { - return (!!self.leftAccessoryView + !!self.titleViewOrDefault + - !!self.subtitleViewOrDefault + !!self.rightAccessoryView); -} - -- (id)accessibilityElementAtIndex:(NSInteger)index { - if (index == 0) { - return self.leftAccessoryView ? self.leftAccessoryView : self.titleViewOrDefault; - } - if (index == 1) { - return self.leftAccessoryView ? self.titleViewOrDefault : self.subtitleViewOrDefault; - } - if (index == 2) { - return self.leftAccessoryView ? self.subtitleViewOrDefault : self.rightAccessoryView; - } - if (index == 3) { - return self.leftAccessoryView ? self.rightAccessoryView : nil; - } - return nil; -} - -- (NSInteger)indexOfAccessibilityElement:(id)element { - if (element == nil) return NSNotFound; - if (element == self.leftAccessoryView) return 0; - if (element == self.titleViewOrDefault) { - return self.leftAccessoryView ? 1 : 0; - } - if (element == self.subtitleViewOrDefault) { - return self.leftAccessoryView ? 2 : 1; - } - if (element == self.rightAccessoryView) { - return self.leftAccessoryView ? 3 : 2; - } - return NSNotFound; -} - -@end - -// import this known "private API" from SMCalloutBackgroundView -@interface MGLSMCalloutBackgroundView (EmbeddedImages) -+ (UIImage *)embeddedImageNamed:(NSString *)name; -@end - -// -// Callout Background View. -// - -@interface MGLSMCalloutMaskedBackgroundView () -@property (nonatomic, strong) UIView *containerView, *containerBorderView, *arrowView; -@property (nonatomic, strong) UIImageView *arrowImageView, *arrowHighlightedImageView, *arrowBorderView; -@end - -static UIImage *blackArrowImage = nil, *whiteArrowImage = nil, *grayArrowImage = nil; - -@implementation MGLSMCalloutMaskedBackgroundView - -- (id)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]) { - - // Here we're mimicking the very particular (and odd) structure of the system callout view. - // The hierarchy and view/layer values were discovered by inspecting map kit using Reveal.app - - self.containerView = [UIView new]; - self.containerView.backgroundColor = [UIColor whiteColor]; - self.containerView.alpha = 0.96; - self.containerView.layer.cornerRadius = 8; - self.containerView.layer.shadowRadius = 30; - self.containerView.layer.shadowOpacity = 0.1; - - self.containerBorderView = [UIView new]; - self.containerBorderView.layer.borderColor = [UIColor colorWithWhite:0 alpha:0.1].CGColor; - self.containerBorderView.layer.borderWidth = 0.5; - self.containerBorderView.layer.cornerRadius = 8.5; - - if (!blackArrowImage) { - blackArrowImage = [MGLSMCalloutBackgroundView embeddedImageNamed:@"CalloutArrow"]; - whiteArrowImage = [self image:blackArrowImage withColor:[UIColor whiteColor]]; - grayArrowImage = [self image:blackArrowImage withColor:[UIColor colorWithWhite:0.85 alpha:1]]; - } - - self.anchorHeight = 13; - self.anchorMargin = 27; - - self.arrowView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, blackArrowImage.size.width, blackArrowImage.size.height)]; - self.arrowView.alpha = 0.96; - self.arrowImageView = [[UIImageView alloc] initWithImage:whiteArrowImage]; - self.arrowHighlightedImageView = [[UIImageView alloc] initWithImage:grayArrowImage]; - self.arrowHighlightedImageView.hidden = YES; - self.arrowBorderView = [[UIImageView alloc] initWithImage:blackArrowImage]; - self.arrowBorderView.alpha = 0.1; - self.arrowBorderView.frameY = 0.5; - - [self addSubview:self.containerView]; - [self.containerView addSubview:self.containerBorderView]; - [self addSubview:self.arrowView]; - [self.arrowView addSubview:self.arrowBorderView]; - [self.arrowView addSubview:self.arrowImageView]; - [self.arrowView addSubview:self.arrowHighlightedImageView]; - } - return self; -} - -// Make sure we relayout our images when our arrow point changes! -- (void)setArrowPoint:(CGPoint)arrowPoint { - [super setArrowPoint:arrowPoint]; - [self setNeedsLayout]; -} - -- (void)setHighlighted:(BOOL)highlighted { - [super setHighlighted:highlighted]; - self.containerView.backgroundColor = highlighted ? [UIColor colorWithWhite:0.85 alpha:1] : [UIColor whiteColor]; - self.arrowImageView.hidden = highlighted; - self.arrowHighlightedImageView.hidden = !highlighted; -} - -- (UIImage *)image:(UIImage *)image withColor:(UIColor *)color { - - UIGraphicsBeginImageContextWithOptions(image.size, NO, 0); - CGRect imageRect = (CGRect){.size=image.size}; - CGContextRef c = UIGraphicsGetCurrentContext(); - CGContextTranslateCTM(c, 0, image.size.height); - CGContextScaleCTM(c, 1, -1); - CGContextClipToMask(c, imageRect, image.CGImage); - [color setFill]; - CGContextFillRect(c, imageRect); - UIImage *whiteImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return whiteImage; -} - -- (void)layoutSubviews { - - BOOL pointingUp = self.arrowPoint.y < self.frameHeight/2; - - // if we're pointing up, we'll need to push almost everything down a bit - CGFloat dy = pointingUp ? TOP_ANCHOR_MARGIN : 0; - - self.containerView.frame = CGRectMake(0, dy, self.frameWidth, self.frameHeight - self.arrowView.frameHeight + 0.5); - self.containerBorderView.frame = CGRectInset(self.containerView.bounds, -0.5, -0.5); - - self.arrowView.frameX = roundf(self.arrowPoint.x - self.arrowView.frameWidth / 2); - - if (pointingUp) { - self.arrowView.frameY = 1; - self.arrowView.transform = CGAffineTransformMakeRotation(M_PI); - } - else { - self.arrowView.frameY = self.containerView.frameHeight - 0.5; - self.arrowView.transform = CGAffineTransformIdentity; - } -} - -- (CALayer *)contentMask { - - UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0); - - [self.layer renderInContext:UIGraphicsGetCurrentContext()]; - - UIImage *maskImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - CALayer *layer = [CALayer layer]; - layer.frame = self.bounds; - layer.contents = (id)maskImage.CGImage; - return layer; -} - -- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { - - // Only interested in providing a custom pointInside for touches. - if (event.type != UIEventTypeTouches) { - return [super pointInside:point withEvent:event]; - } - - NSArray *views = @[self.containerView, self.arrowView]; - for (UIView *view in views) { - CGPoint viewPoint = [self convertPoint:point toView:view]; - if (CGRectContainsPoint(view.bounds, viewPoint)) { - return YES; - } - } - - return NO; -} - -@end - -@implementation MGLSMCalloutBackgroundView - -+ (NSData *)dataWithBase64EncodedString:(NSString *)string { - // - // NSData+Base64.m - // - // Version 1.0.2 - // - // Created by Nick Lockwood on 12/01/2012. - // Copyright (C) 2012 Charcoal Design - // - // Distributed under the permissive zlib License - // Get the latest version from here: - // - // https://github.com/nicklockwood/Base64 - // - // 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. - // - const char lookup[] = { - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 62, 99, 99, 99, 63, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 99, 99, 99, 99, 99, 99, - 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 99, 99, 99, 99, 99, - 99, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 99, 99, 99, 99, 99 - }; - - NSData *inputData = [string dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; - long long inputLength = [inputData length]; - const unsigned char *inputBytes = [inputData bytes]; - - long long maxOutputLength = (inputLength / 4 + 1) * 3; - NSMutableData *outputData = [NSMutableData dataWithLength:(NSUInteger)maxOutputLength]; - unsigned char *outputBytes = (unsigned char *)[outputData mutableBytes]; - - int accumulator = 0; - long long outputLength = 0; - unsigned char accumulated[] = {0, 0, 0, 0}; - for (long long i = 0; i < inputLength; i++) { - unsigned char decoded = lookup[inputBytes[i] & 0x7F]; - if (decoded != 99) { - accumulated[accumulator] = decoded; - if (accumulator == 3) { - outputBytes[outputLength++] = (accumulated[0] << 2) | (accumulated[1] >> 4); - outputBytes[outputLength++] = (accumulated[1] << 4) | (accumulated[2] >> 2); - outputBytes[outputLength++] = (accumulated[2] << 6) | accumulated[3]; - } - accumulator = (accumulator + 1) % 4; - } - } - - //handle left-over data - if (accumulator > 0) outputBytes[outputLength] = (accumulated[0] << 2) | (accumulated[1] >> 4); - if (accumulator > 1) outputBytes[++outputLength] = (accumulated[1] << 4) | (accumulated[2] >> 2); - if (accumulator > 2) outputLength++; - - //truncate data to match actual output length - outputData.length = (NSUInteger)outputLength; - return outputLength? outputData: nil; -} - -+ (UIImage *)embeddedImageNamed:(NSString *)name { - CGFloat screenScale = [UIScreen mainScreen].scale; - if (screenScale > 1.0) { - name = [name stringByAppendingString:@"_2x"]; - screenScale = 2.0; - } - - SEL selector = NSSelectorFromString(name); - - if (![(id)self respondsToSelector:selector]) { - NSLog(@"Could not find an embedded image. Ensure that you've added a class-level method named +%@", name); - return nil; - } - - // We need to hush the compiler here - but we know what we're doing! - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Warc-performSelector-leaks" - NSString *base64String = [(id)self performSelector:selector]; - #pragma clang diagnostic pop - - UIImage *rawImage = [UIImage imageWithData:[self dataWithBase64EncodedString:base64String]]; - return [UIImage imageWithCGImage:rawImage.CGImage scale:screenScale orientation:UIImageOrientationUp]; -} - -+ (NSString *)CalloutArrow { return @"iVBORw0KGgoAAAANSUhEUgAAACcAAAANCAYAAAAqlHdlAAAAHGlET1QAAAACAAAAAAAAAAcAAAAoAAAABwAAAAYAAADJEgYpIwAAAJVJREFUOBFiYIAAdn5+fkFOTkE5Dg5eW05O3lJOTr6zQPyfDhhoD28pxF5BOZA7gE5ih7oLN8XJyR8MdNwrGjkQaC5/MG7biZDh4OBXBDruLpUdeBdkLhHWE1bCzs6nAnTcUyo58DnIPMK2kqAC6DALIP5JoQNB+i1IsJZ4pcBEm0iJ40D6ibeNDJVAx00k04ETSbUOAAAA//+SwicfAAAAe0lEQVRjYCAdMHNy8u7l5OT7Tzzm3Qu0hpl0q8jQwcPDIwp02B0iHXeHl5dXhAxryNfCzc2tC3TcJwIO/ARSR74tFOjk4uL1BzruHw4H/gPJU2A85Vq5uPjTgY77g+bAPyBxyk2nggkcHPxOnJz8B4AOfAGiQXwqGMsAACGK1kPPMHNBAAAAAElFTkSuQmCC"; } - -+ (NSString *)CalloutArrow_2x { return @"iVBORw0KGgoAAAANSUhEUgAAAE4AAAAaCAYAAAAZtWr8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAHGlET1QAAAACAAAAAAAAAA0AAAAoAAAADQAAAA0AAAFMRh0LGwAAARhJREFUWAnclbENwjAQRZ0mih2fDYgsQEVDxQZMgKjpWYAJkBANI8AGDIEoM0WkzBDRAf8klB44g0OkU1zE3/+9RIpS7VVY730/y/woTWlsjJ9iPcN9pbXfY85auyvm/qcDNmb0e2Z+sk/ZBTthN0oVttX12mJIWeaWEFf+kbySmZQa0msu3nzaGJprTXV3BVLNDG/if7bNOTeAvFP35NGJu39GL7Abb27bFXncVQBZLgJf3jp+ebSWIxZMgrxdvPJoJ4gqHpXgV36ITR46HUGaiNMKB6YQd4lI3gV8qTBjmDhrbQFxVQTyKu4ShjJQap7nE4hrfiiv4Q6B8MLGat1bQNztB/JwZm8Rli5wujFu821xfGZgLPUAAAD//4wvm4gAAAD7SURBVOWXMQ6CMBiFgaFpi6VyBEedXJy4hMQTeBSvRDgJEySegI3EQWOivkZnqUB/k0LyL7R9L++D9G+DwP0TCZGUqCdRlYgUuY9F4JCmqQa0hgBcY7wIItFZMLZYS5l0ruAZbXhs6BIROgmhcoB7OIAHTZUTRqG3wp9xmhqc0aRPQu8YAlwxIbwCEUL6GH9wfDcLXY2HpyvvmkHf9+BcrwCuHQGvNRp9Pl6OY0PPAO42AB7WqMxLKLahpFR7gLv/AA9zPe+gtvAMCIC7WMC7CqEPtrqzmBfHyy3A1V/g1Th27GYBY0BIxrk6Ap65254/VZp30GID9JwteQEZrVMWXqGn8gAAAABJRU5ErkJggg=="; } - -@end - -// -// Our UIView frame helpers implementation -// - -@implementation UIView (SMFrameAdditions) - -- (CGPoint)frameOrigin { return self.frame.origin; } -- (void)setFrameOrigin:(CGPoint)origin { self.frame = (CGRect){ .origin=origin, .size=self.frame.size }; } - -- (CGFloat)frameX { return self.frame.origin.x; } -- (void)setFrameX:(CGFloat)x { self.frame = (CGRect){ .origin.x=x, .origin.y=self.frame.origin.y, .size=self.frame.size }; } - -- (CGFloat)frameY { return self.frame.origin.y; } -- (void)setFrameY:(CGFloat)y { self.frame = (CGRect){ .origin.x=self.frame.origin.x, .origin.y=y, .size=self.frame.size }; } - -- (CGSize)frameSize { return self.frame.size; } -- (void)setFrameSize:(CGSize)size { self.frame = (CGRect){ .origin=self.frame.origin, .size=size }; } - -- (CGFloat)frameWidth { return self.frame.size.width; } -- (void)setFrameWidth:(CGFloat)width { self.frame = (CGRect){ .origin=self.frame.origin, .size.width=width, .size.height=self.frame.size.height }; } - -- (CGFloat)frameHeight { return self.frame.size.height; } -- (void)setFrameHeight:(CGFloat)height { self.frame = (CGRect){ .origin=self.frame.origin, .size.width=self.frame.size.width, .size.height=height }; } - -- (CGFloat)frameLeft { return self.frame.origin.x; } -- (void)setFrameLeft:(CGFloat)left { self.frame = (CGRect){ .origin.x=left, .origin.y=self.frame.origin.y, .size.width=fmaxf(self.frame.origin.x+self.frame.size.width-left,0), .size.height=self.frame.size.height }; } - -- (CGFloat)frameTop { return self.frame.origin.y; } -- (void)setFrameTop:(CGFloat)top { self.frame = (CGRect){ .origin.x=self.frame.origin.x, .origin.y=top, .size.width=self.frame.size.width, .size.height=fmaxf(self.frame.origin.y+self.frame.size.height-top,0) }; } - -- (CGFloat)frameRight { return self.frame.origin.x + self.frame.size.width; } -- (void)setFrameRight:(CGFloat)right { self.frame = (CGRect){ .origin=self.frame.origin, .size.width=fmaxf(right-self.frame.origin.x,0), .size.height=self.frame.size.height }; } - -- (CGFloat)frameBottom { return self.frame.origin.y + self.frame.size.height; } -- (void)setFrameBottom:(CGFloat)bottom { self.frame = (CGRect){ .origin=self.frame.origin, .size.width=self.frame.size.width, .size.height=fmaxf(bottom-self.frame.origin.y,0) }; } - -@end diff --git a/platform/ios/vendor/mapbox-accounts-ios/MBXSKUToken.h b/platform/ios/vendor/mapbox-accounts-ios/MBXSKUToken.h deleted file mode 100644 index c93b323b065..00000000000 --- a/platform/ios/vendor/mapbox-accounts-ios/MBXSKUToken.h +++ /dev/null @@ -1,36 +0,0 @@ -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *MBXAccountsSKUID NS_TYPED_ENUM; -FOUNDATION_EXTERN const MBXAccountsSKUID MBXAccountsSKUIDMapsUser; -FOUNDATION_EXTERN const MBXAccountsSKUID MBXAccountsSKUIDNavigationUser; -FOUNDATION_EXTERN const MBXAccountsSKUID MBXAccountsSKUIDNavigationSession; - - -@interface MBXSKUToken : NSObject - -/** - Activates a specific SKU identifier. - - Defaults to `MBXAccountsSKUIDMapsUser`. - - See https://www.mapbox.com/pricing/ for more information - */ -+ (void)activateSKUID:(MBXAccountsSKUID)skuId; - -/** - Resets the current session. Calling this method has no effect unless the type - of the SKU id is of kind session. - */ -+ (void)resetSession; - -/** - Returns the current SKU token. `+[MBXSKUToken activateSKUID:]` must be called - before accessing this property unless an `MBXAccountsSKUIDMapsUser` token is preferred. - */ -@property (class, nonatomic, readonly) NSString *skuToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/ios/vendor/mapbox-accounts-ios/libmbxaccounts.a b/platform/ios/vendor/mapbox-accounts-ios/libmbxaccounts.a deleted file mode 100644 index 30d46a4f31ede107c88e4932e47021c7e402c575..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97472 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 diff --git a/platform/ios/vendor/mapbox-events-ios b/platform/ios/vendor/mapbox-events-ios deleted file mode 160000 index 2e6bbd9f3c8..00000000000 --- a/platform/ios/vendor/mapbox-events-ios +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2e6bbd9f3c898f33a49e20fb97eca86eeb6351e4 diff --git a/platform/macos/ExportOptions.plist b/platform/macos/ExportOptions.plist deleted file mode 100644 index 21af10c08aa..00000000000 --- a/platform/macos/ExportOptions.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - method - developer-id - teamID - GJZR2MEM28 - - diff --git a/platform/macos/Mapbox-macOS-SDK-symbols.podspec b/platform/macos/Mapbox-macOS-SDK-symbols.podspec deleted file mode 100644 index 4d21db99fb6..00000000000 --- a/platform/macos/Mapbox-macOS-SDK-symbols.podspec +++ /dev/null @@ -1,30 +0,0 @@ -Pod::Spec.new do |m| - - version = '0.14.0' - - m.name = 'Mapbox-macOS-SDK-symbols' - m.version = "#{version}-symbols" - - m.summary = 'Open-source, interactive, fully customizable vector maps.' - m.description = 'Interactive, fully customizable vector maps with tight platform integration and high-performance OpenGL rendering.' - m.homepage = 'https://mapbox.github.io/mapbox-gl-native/macos/' - m.license = { :type => 'BSD', :file => 'LICENSE.md' } - m.author = { 'Mapbox' => 'mobile@mapbox.com' } - m.screenshot = "https://mapbox.github.io/mapbox-gl-native/macos/#{version}/img/screenshot.jpg" - m.social_media_url = 'https://twitter.com/mapbox' - m.documentation_url = 'https://mapbox.github.io/mapbox-gl-native/macos/' - - m.source = { - :http => "https://github.com/mapbox/mapbox-gl-native/releases/download/macos-v#{version}/mapbox-macos-sdk-#{m.version.to_s}.zip", - :flatten => true - } - - m.platform = :osx - m.osx.deployment_target = '10.11' - - m.requires_arc = true - - m.vendored_frameworks = 'Mapbox.framework' - m.module_name = 'Mapbox' - -end diff --git a/platform/macos/Mapbox-macOS-SDK.podspec b/platform/macos/Mapbox-macOS-SDK.podspec deleted file mode 100644 index 876b354b4ff..00000000000 --- a/platform/macos/Mapbox-macOS-SDK.podspec +++ /dev/null @@ -1,30 +0,0 @@ -Pod::Spec.new do |m| - - version = '0.14.0' - - m.name = 'Mapbox-macOS-SDK' - m.version = version - - m.summary = 'Open-source, interactive, fully customizable vector maps.' - m.description = 'Interactive, fully customizable vector maps with tight platform integration and high-performance OpenGL rendering.' - m.homepage = 'https://mapbox.github.io/mapbox-gl-native/macos/' - m.license = { :type => 'BSD', :file => 'LICENSE.md' } - m.author = { 'Mapbox' => 'mobile@mapbox.com' } - m.screenshot = "https://mapbox.github.io/mapbox-gl-native/macos/#{version}/img/screenshot.jpg" - m.social_media_url = 'https://twitter.com/mapbox' - m.documentation_url = 'https://mapbox.github.io/mapbox-gl-native/macos/' - - m.source = { - :http => "https://github.com/mapbox/mapbox-gl-native/releases/download/macos-v#{version}/mapbox-macos-sdk-#{m.version.to_s}.zip", - :flatten => true - } - - m.platform = :osx - m.osx.deployment_target = '10.11' - - m.requires_arc = true - - m.vendored_frameworks = 'Mapbox.framework' - m.module_name = 'Mapbox' - -end diff --git a/platform/macos/WorkspaceSettings.xcsettings b/platform/macos/WorkspaceSettings.xcsettings deleted file mode 100644 index 88a45c15ce0..00000000000 --- a/platform/macos/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,22 +0,0 @@ - - - - - BuildLocationStyle - CustomLocation - CustomBuildIntermediatesPath - ../../build/macos - CustomBuildLocationType - RelativeToWorkspace - CustomBuildProductsPath - ../../build/macos - DerivedDataCustomLocation - ../../build/macos - DerivedDataLocationStyle - WorkspaceRelativePath - IssueFilterStyle - ShowActiveSchemeOnly - LiveSourceIssuesEnabled - - - diff --git a/platform/macos/app/AppDelegate.h b/platform/macos/app/AppDelegate.h deleted file mode 100644 index 87b75142922..00000000000 --- a/platform/macos/app/AppDelegate.h +++ /dev/null @@ -1,26 +0,0 @@ -#import - -extern NSString * const MGLMapboxAccessTokenDefaultsKey; - -@interface AppDelegate : NSObject - -@property (weak) IBOutlet NSWindow *preferencesWindow; - -// Normally, an application should respect the “Close windows when quitting an -// application” setting in the General pane of System Preferences. But the map -// would only be restored to its last opened location if the user quits the -// application using Quit and Keep Windows. An application that displays only a -// map should restore the last viewed map, like Maps.app does. These properties -// temporarily hold state for the next map window to be opened. - -@property (assign) double pendingZoomLevel; -@property (copy) MGLMapCamera *pendingCamera; -@property (assign) MGLCoordinateBounds pendingVisibleCoordinateBounds; -@property (assign) double pendingMinimumZoomLevel; -@property (assign) double pendingMaximumZoomLevel; -@property (copy) NSURL *pendingStyleURL; -@property (assign) MGLMapDebugMaskOptions pendingDebugMask; - -- (void)watchOfflinePack:(MGLOfflinePack *)pack; - -@end diff --git a/platform/macos/app/AppDelegate.m b/platform/macos/app/AppDelegate.m deleted file mode 100644 index eda989d7f92..00000000000 --- a/platform/macos/app/AppDelegate.m +++ /dev/null @@ -1,332 +0,0 @@ -#import "AppDelegate.h" - -#import "MapDocument.h" - -NSString * const MGLMapboxAccessTokenDefaultsKey = @"MGLMapboxAccessToken"; -NSString * const MGLLastMapCameraDefaultsKey = @"MGLLastMapCamera"; -NSString * const MGLLastMapStyleURLDefaultsKey = @"MGLLastMapStyleURL"; -NSString * const MGLLastMapDebugMaskDefaultsKey = @"MGLLastMapDebugMask"; - -/** - Some convenience methods to make offline pack properties easier to bind to. - */ -@implementation MGLOfflinePack (Additions) - -+ (NSSet *)keyPathsForValuesAffectingStateImage { - return [NSSet setWithObjects:@"state", nil]; -} - -- (NSImage *)stateImage { - switch (self.state) { - case MGLOfflinePackStateComplete: - return [NSImage imageNamed:@"NSMenuOnStateTemplate"]; - - case MGLOfflinePackStateActive: - return [NSImage imageNamed:@"NSFollowLinkFreestandingTemplate"]; - - default: - return nil; - } -} - -+ (NSSet *)keyPathsForValuesAffectingCountOfResourcesCompleted { - return [NSSet setWithObjects:@"progress", nil]; -} - -- (uint64_t)countOfResourcesCompleted { - return self.progress.countOfResourcesCompleted; -} - -+ (NSSet *)keyPathsForValuesAffectingCountOfResourcesExpected { - return [NSSet setWithObjects:@"progress", nil]; -} - -- (uint64_t)countOfResourcesExpected { - return self.progress.countOfResourcesExpected; -} - -+ (NSSet *)keyPathsForValuesAffectingCountOfBytesCompleted { - return [NSSet setWithObjects:@"progress", nil]; -} - -- (uint64_t)countOfBytesCompleted { - return self.progress.countOfBytesCompleted; -} - -+ (NSSet *)keyPathsForValuesAffectingCountOfTilesCompleted { - return [NSSet setWithObjects:@"progress", nil]; -} - -- (uint64_t)countOfTilesCompleted { - return self.progress.countOfTilesCompleted; -} - -+ (NSSet *)keyPathsForValuesAffectingCountOfTileBytesCompleted { - return [NSSet setWithObjects:@"progress", nil]; -} - -- (uint64_t)countOfTileBytesCompleted { - return self.progress.countOfTileBytesCompleted; -} - -@end - -@interface AppDelegate () - -@property (weak) IBOutlet NSArrayController *offlinePacksArrayController; -@property (weak) IBOutlet NSPanel *offlinePacksPanel; - -@end - -@implementation AppDelegate - -#pragma mark Lifecycle - -+ (void)load { - // Set access token, unless MGLAccountManager already read it in from Info.plist. - if (![MGLAccountManager accessToken]) { - NSString *accessToken = [NSProcessInfo processInfo].environment[@"MAPBOX_ACCESS_TOKEN"]; - if (accessToken) { - // Store to preferences so that we can launch the app later on without having to specify - // token. - [[NSUserDefaults standardUserDefaults] setObject:accessToken forKey:MGLMapboxAccessTokenDefaultsKey]; - } else { - // Try to retrieve from preferences, maybe we've stored them there previously and can reuse - // the token. - accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:MGLMapboxAccessTokenDefaultsKey]; - } - [MGLAccountManager setAccessToken:accessToken]; - } -} - -- (void)applicationWillFinishLaunching:(NSNotification *)notification { - [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self - andSelector:@selector(handleGetURLEvent:withReplyEvent:) - forEventClass:kInternetEventClass - andEventID:kAEGetURL]; - - if (![[NSUserDefaults standardUserDefaults] boolForKey:@"NSQuitAlwaysKeepsWindows"]) { - NSData *cameraData = [[NSUserDefaults standardUserDefaults] objectForKey:MGLLastMapCameraDefaultsKey]; - if (cameraData) { - NSKeyedUnarchiver *coder = [[NSKeyedUnarchiver alloc] initForReadingWithData:cameraData]; - self.pendingZoomLevel = -1; - self.pendingCamera = [[MGLMapCamera alloc] initWithCoder:coder]; - } - NSString *styleURLString = [[NSUserDefaults standardUserDefaults] objectForKey:MGLLastMapStyleURLDefaultsKey]; - if (styleURLString) { - self.pendingStyleURL = [NSURL URLWithString:styleURLString]; - } - self.pendingDebugMask = [[NSUserDefaults standardUserDefaults] integerForKey:MGLLastMapDebugMaskDefaultsKey]; - } -} - -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { - // Set access token, unless MGLAccountManager already read it in from Info.plist. - if (![MGLAccountManager accessToken]) { - NSAlert *alert = [[NSAlert alloc] init]; - alert.messageText = @"Access token required"; - alert.informativeText = @"To load Mapbox-hosted tiles and styles, enter your Mapbox access token in Preferences."; - [alert addButtonWithTitle:@"Open Preferences"]; - [alert runModal]; - [self showPreferences:nil]; - } - - [self.offlinePacksArrayController bind:@"content" toObject:[MGLOfflineStorage sharedOfflineStorage] withKeyPath:@"packs" options:nil]; -} - -- (void)applicationWillTerminate:(NSNotification *)notification { - [[NSNotificationCenter defaultCenter] removeObserver:self name:nil object:nil]; - - if (![[NSUserDefaults standardUserDefaults] boolForKey:@"NSQuitAlwaysKeepsWindows"]) { - NSDocument *currentDocument = [NSDocumentController sharedDocumentController].currentDocument; - if ([currentDocument isKindOfClass:[MapDocument class]]) { - MGLMapView *mapView = [(MapDocument *)currentDocument mapView]; - NSMutableData *cameraData = [NSMutableData data]; - NSKeyedArchiver *coder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:cameraData]; - [mapView.camera encodeWithCoder:coder]; - [coder finishEncoding]; - [[NSUserDefaults standardUserDefaults] setObject:cameraData forKey:MGLLastMapCameraDefaultsKey]; - [[NSUserDefaults standardUserDefaults] setObject:mapView.styleURL.absoluteString forKey:MGLLastMapStyleURLDefaultsKey]; - [[NSUserDefaults standardUserDefaults] setInteger:mapView.debugMask forKey:MGLLastMapDebugMaskDefaultsKey]; - } - } - - [self.offlinePacksArrayController unbind:@"content"]; -} - -#pragma mark Services - -- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { - // mapboxgl://?center=29.95,-90.066667&zoom=14&bearing=45&pitch=30 - NSURL *url = [NSURL URLWithString:[event paramDescriptorForKeyword:keyDirectObject].stringValue]; - NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; - for (NSString *param in [url.query componentsSeparatedByString:@"&"]) { - NSArray *parts = [param componentsSeparatedByString:@"="]; - if (parts.count >= 2) { - params[parts[0]] = [parts[1] stringByRemovingPercentEncoding]; - } - } - - MGLMapCamera *camera = [MGLMapCamera camera]; - NSString *zoomLevelString = params[@"zoom"]; - self.pendingZoomLevel = zoomLevelString.length ? zoomLevelString.doubleValue : -1; - - NSString *directionString = params[@"bearing"]; - if (directionString.length) { - camera.heading = directionString.doubleValue; - } - - NSString *centerString = params[@"center"]; - if (centerString) { - NSArray *coordinateValues = [centerString componentsSeparatedByString:@","]; - if (coordinateValues.count == 2) { - camera.centerCoordinate = CLLocationCoordinate2DMake([coordinateValues[0] doubleValue], - [coordinateValues[1] doubleValue]); - } - } - - NSString *pitchString = params[@"pitch"]; - if (pitchString.length) { - camera.pitch = pitchString.doubleValue; - } - - self.pendingCamera = camera; - [[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:NULL]; -} - -#pragma mark Offline pack management - -- (IBAction)showOfflinePacksPanel:(id)sender { - [self.offlinePacksPanel makeKeyAndOrderFront:sender]; - - for (MGLOfflinePack *pack in self.offlinePacksArrayController.arrangedObjects) { - [pack requestProgress]; - } -} - -- (IBAction)delete:(id)sender { - for (MGLOfflinePack *pack in self.offlinePacksArrayController.selectedObjects) { - [self unwatchOfflinePack:pack]; - [[MGLOfflineStorage sharedOfflineStorage] removePack:pack withCompletionHandler:^(NSError * _Nullable error) { - if (error) { - [[NSAlert alertWithError:error] runModal]; - } - }]; - } -} - -- (IBAction)chooseOfflinePack:(id)sender { - for (MGLOfflinePack *pack in self.offlinePacksArrayController.selectedObjects) { - switch (pack.state) { - case MGLOfflinePackStateComplete: - { - if ([pack.region isKindOfClass:[MGLTilePyramidOfflineRegion class]]) { - MGLTilePyramidOfflineRegion *region = (MGLTilePyramidOfflineRegion *)pack.region; - self.pendingVisibleCoordinateBounds = region.bounds; - self.pendingMinimumZoomLevel = region.minimumZoomLevel; - self.pendingMaximumZoomLevel = region.maximumZoomLevel; - [[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:NULL]; - } - break; - } - - case MGLOfflinePackStateInactive: - [self watchOfflinePack:pack]; - [pack resume]; - break; - - case MGLOfflinePackStateActive: - [pack suspend]; - [self unwatchOfflinePack:pack]; - break; - - default: - break; - } - } -} - -- (void)watchOfflinePack:(MGLOfflinePack *)pack { - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(offlinePackDidChangeProgress:) name:MGLOfflinePackProgressChangedNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(offlinePackDidReceiveError:) name:MGLOfflinePackErrorNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(offlinePackDidReceiveError:) name:MGLOfflinePackMaximumMapboxTilesReachedNotification object:nil]; -} - -- (void)unwatchOfflinePack:(MGLOfflinePack *)pack { - [[NSNotificationCenter defaultCenter] removeObserver:self name:nil object:pack]; -} - -- (void)offlinePackDidChangeProgress:(NSNotification *)notification { - MGLOfflinePack *pack = notification.object; - if (pack.state == MGLOfflinePackStateComplete) { - [[NSSound soundNamed:@"Glass"] play]; - } -} - -- (void)offlinePackDidReceiveError:(NSNotification *)notification { - [[NSSound soundNamed:@"Basso"] play]; -} - -#pragma mark Help methods - -- (IBAction)showShortcuts:(id)sender { - NSAlert *alert = [[NSAlert alloc] init]; - alert.messageText = @"Mapbox GL Help"; - alert.informativeText = @"\ -• To scroll, swipe with two fingers on a trackpad, or drag the cursor, or press the arrow keys.\n\ -• To zoom in, pinch two fingers apart on a trackpad, or double-click, or hold down Shift while dragging the cursor down, or hold down Option while pressing the up key.\n\ -• To zoom out, pinch two fingers together on a trackpad, or double-tap with two fingers on a trackpad, or double-tap on a mouse, or hold down Shift while dragging the cursor up, or hold down Option while pressing the down key.\n\ -• To rotate, move two fingers opposite each other in a circle on a trackpad, or hold down Option while dragging the cursor left and right, or hold down Option while pressing the left and right arrow keys.\n\ -• To tilt, hold down Option while dragging the cursor up and down.\n\ -• To drop a pin, click and hold.\ -"; - [alert runModal]; -} - -- (IBAction)showPreferences:(id)sender { - [self.preferencesWindow makeKeyAndOrderFront:sender]; -} - -- (IBAction)print:(id)sender { - NSDocument *currentDocument = [NSDocumentController sharedDocumentController].currentDocument; - if ([currentDocument isKindOfClass:[MapDocument class]]) { - MGLMapView *mapView = [(MapDocument *)currentDocument mapView]; - [mapView print:sender]; - } -} - -- (IBAction)openAccessTokenManager:(id)sender { - [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://www.mapbox.com/studio/account/tokens/"]]; -} - -#pragma mark User interface validation - -- (BOOL)validateMenuItem:(NSMenuItem *)menuItem { - if (menuItem.action == @selector(showShortcuts:)) { - return YES; - } - if (menuItem.action == @selector(showPreferences:)) { - return YES; - } - if (menuItem.action == @selector(showOfflinePacksPanel:)) { - return YES; - } - if (menuItem.action == @selector(print:)) { - return YES; - } - if (menuItem.action == @selector(delete:)) { - return self.offlinePacksArrayController.selectedObjects.count; - } - return NO; -} - -#pragma mark NSWindowDelegate methods - -- (void)windowWillClose:(NSNotification *)notification { - NSWindow *window = notification.object; - if (window == self.preferencesWindow) { - [window makeFirstResponder:nil]; - } -} - -@end diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon128x128.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon128x128.png deleted file mode 100644 index fbf35e5d6122a524d9e784d86eea95732b0ea7ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8183 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 E0MYpwbN~PV diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon16x16.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon16x16.png deleted file mode 100644 index 361198da923819971262b3f61076db85303cefa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 917 zcmV;G18V$1oV1@FA-MZGAN?PBvr@MCL5$3_tm(P7=q($T`|7Eo!35Uj?YAsBN)`W3V- zr)|=BV%~FhQKCoPbN9Zy&yWA}ynllKQ7jg#EiW(s(rh++0YFvNl%gnqw6wHjK731z z2T77VE|+W2COCFJl3vfrGa3Z|e?8TjU3fAW`H&M za`M^Uva%P6M5`!@GZX-vPUoeYBe_MRxp{LoHGJ;%^k2W45E^{5*wv;yAq4uAEckAZ zt}WKo)C>Xujm2WMHo?*Qd$^*xWcJqP=YH&SxLq6UpZpzJNm?wH%9C9#@mQM@2Y}(b z6-{Hx{=!L_QR9^uFV@WpFY79j^ivZrq>oOT&KdBE3cjwna;Wo*f#+H(+M{z zy7Mn7rDZ%%O}~6!Ee7fo>E~}b?(@$o0*gzz8Kx6%y?p{r(_m6nHR-Fz z-V#8t>ILI3T>j44!1J_>F{Ylq%8I3XUp=6zs!Y@A^vI3|Yi((?Vv)SJTqYCn?D^8O zlRxB@Ckeq1036ZTwg$nSOeRAF0MhC7$avK1`E9&XG@Dpqt1myt^V*x`70#TRx4P9L z<&Dte`<2ISE%}tk<2hmifJh{A>Z?PC?!^%ctdcmQv#<9pKkeLSt$y&}es@Pl$9(|0F)tk&8Vaw_vPz*ukD*S*mIi4AaO`S+5|)htCBIK zhQf+AZ54@zXqz&&vNh{EAyo>ZjRqU**oM}!trWCwOS?=<)@^i@AkU183veIk@9)R@`}?u`iGeKFaBOVM z!Z6HNEEdb7G)>o&B)JkrQ4#<^*L7KzWxpT@S5v9fIiBbH>gwuJ_d{$RlarHdC=~js zs;Vht4!W)@JTK0M!kj-8=KMS_&g#0ZWb~@4rh>uXQLoo)TPpsd6$k_Z-*UNJhj1J( zl+#M$;z->8?jS~Any^%82D+g1II3&wYLdR~ExORuP_T+L5jI6pqM=ae#q#p<Oc@gU6O!d7&ymq@3AbqIiBEy&;L+|TM?>wIf-*o=8$HN?MF46l`iHu?gN%(w;~9l zW!s>+PLW9Dmn_R}4oq`5pFDusK523QfI!6TeBuCV3rur2S(bey5{bN?YqNkrAP{)Y z;c#>$5<;-^2w5yhII~m|iqO+6qvq{+Uc{NsBV=(RA%q+b$JeH&ruJs*=O2OJ?=L7R zDeCh@ofu1tOH|+~1=U1VI!r4AY&FqW}ONkB4$PoqHrXojmbpYfZl7 zB%#Yc>q6uL8?&G<{xdDjW-XB|EzY%F9kDC9{>T4ht(MbD(&2DCGcYhf&J%FCT-z}W zV}`GAK0(5%d;|{eP2R8`$F=65KP<{tk}>ds#; z*&6`CEgwrU>K|9_4Q>0xWTq!D3^UtkIhh?tQ&C(L(+P^A$^Zb+;o)Hd!!UD7NGI|o zFLy~Hnl{@rYnQ{so;qf6Y}pVUF$^UI0APSBZeAN5IrS=SD=#q@Wo#vdFy+Qe3339* zacX#Ym_U6#-`rVX zo2sf(dwaWr0)WBu{B4Rd*)Uwc>$U;_U@Z$9DH~=IC4Y6uWG-YEZeK1Tgx@%I_nCrY zx?(mHHlF8i1Au`70K{UkO9+BsO|=X6Z3YCs_}oxhOcrLZV{tzC{1F4hG^qe z5d=YFvDildbGu-AdioszfX_GUVy*)KfRxT(fovFtVSIFTc68SP)Ebx}?|Ga*)?$d+ zIdK4ho}Ql5O-)UF<3nr(ZC1tH)9_Ag@d}8d9J@T82)zDBll@kNeK4OLO{zlUL+mO= zQTV>TzIOq#Zo~2M@sqW+wO=1NAGv(Aw{UH?-~+}?QXvni7Dgewkd+tmq?%K8M*>E`QDJ^Cz-#Tn0%bnuwPnx{cA{;)eQyl_r9)rPJxy(9qD2H*MPV8US$1A)gDXt*y;HIy!n% zQ4~Jw)lB1gDHe`!Q{f0VB?wYX*L5wUPp8wV(b3V9ZEbCC0LVLGEf)v?SXx_KE6$%k zzt8XY|0N!e-&9pq$Rt!0MTp1a-pR?yx6hn8vwQve_2mFyfn}Tx%YHkavnA&~1OVW6 ryB!Arh(@C-0H^?v1^{X9ds+A|nq*;+n>BE;00000NkvXXu0mjfk(9P5 diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256.png deleted file mode 100644 index e60680874a3cef229ce5ef7ef06e326fe6bf57bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17649 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 E0MYpwbN~PV diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256@2x.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon256x256@2x.png deleted file mode 100644 index e7c0271490e03dea3af6c3fee28c4d96e7f76c8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38577 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

    PsMkArFS;WNDx1U7 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 Y1_=7Ymnqb0i~s-t07*qoM6N<$g5#f1e*gdg diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon32x32@2x.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon32x32@2x.png deleted file mode 100644 index 5035f60941fea758ef8bcefb6a383bcbc2289481..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3905 zcmV-H55Dk;P)@dF{l7Ln@AU9mlxXT1?0;mVscfF*e{}1jrCB%T6e43n2*|zz8Ib z(A?6f=jtnej9Lt0PDwzj!dIoz{9gaM-+N!b_dDKu4LraDJixy)i2G0<5%N0}Ldbss z_Xu~J00ICBfT*mj%+ATl8Ldz#iexfb9!ZiZBuOR#0MGL@&-2beAaKLy^EI@zv{aXt zmYNYHg2z21WUxR^o;+D`?b@|@E|=>Azu$jFNDzL%ztQD#l{Ggv&z?MavI0RO|LH-U zJb5zP;c)zcWm$8gosI;CVcKjq+uIct6-EHmU^aNLrU3c*=bxufnl$M*8jWTtNs`KN zN`V05wmE29yM>`U-7M$v2g_A*AXy`!j2W_|v{aQ|CX;Hy-Ouy9r>m>$gQG`}zPVt* z0xN>kV?Y=T0;FcMd6~grc$13hY5nXZTNE>XR%l;8;nNdE&$9x8b1&Mh`oFF8s^QLSC*8NG&}S{Ai#7V zJ7c@L`=~m{;Z~*%q=9M4KKsI%?$%k8^bgBqQg!Gxx7+=fLx&EnSiE?#75y}n{Uv~` zuC5+mR8(|8DwXDmg*?v(4xg~pZ~sfmFt1+{b{g~-N*U`}`R~rAIny$VNs^R_<$*w; zxvs8m{`m3ZFQOkL^oIblwzhUkVPWBC6h$SAg)L^MX~Pz&vdyN*?8h_XhB3{1^Q|?U zCnqbVKrG`p&e7D=^lWi)@i`=D7ZN3atgWq`QdCrQIK;NR8SO^0sw*_aNG7; zFMoDgH!7hX3=-x%X|G$m#4wy72nhgi9Ot}n;llJMo_OLr#5o<}eq($0?#-AoWy%Su zRGI+*f*`PO{Lyyh*xz&``qlbDKx2z4{d%jT@u>-_6oMc~k|dP|gJF7hcJ@a{jvS%m zc}Bb=K-$^axnHZ*KGP!$?|o>gJ$UB+y!pPEU1G0Wx71Kf5Cj1LZnyieR;&FH;&74i z5I{CJH@`S!$dIjKLHVhUi|_7D8{7XT2ceL0zM?#@B}K#f6mkeR?WDZTD%DzDN?oGQ zdS#*g;;cy-y=^j?OfM7^6zo6@dk~X=va&Mc;>C-rB@#&*0GQi5O-p~H%H#TN@C0FY ziL2p1X3FHbS=wB2{)WQUMYn(bZMS8|;iO!LTM-u-6e+Mff9q*6W+p!b04&RPy#N0D zV^*zNWr=oQECM7}tMxs-UjH)y;CY@|_B!oou_`m-X;fbn=eb+o_=QZOOHGQ)RdO8X zJ9@^_@ZLUMF~d``So*mJU;78YQ|U>PlmdX&YTaTm7}f(|Bi$1vLz+xa;q&ddM1A=wab=K+ACD8-zqSz~wn)@x4H_?)ryTP%vKV`r>&qO8;DmhIZL zD{6bA5kO6wHf@dQ?-_=r|L7llS}i6AR8C4c7|6c-N(+YTfT zWf;~202D|2cC?DaK`!9~Z~j6i6X#?kFs#77y-TV&aNOP$O)o1mC4co#Ty@cO0N}%;Dx)9> z0szS6a$|XU`BX%(caaF73Gq!(XX#k-}FFQy^ zd{ZK3PSh8tCHw5rbUIv0eXF_CB+8kYna?7^G>AliM5ED^io)shfw-coP^4)5?x!c~ zW7-Uk6ZnItRA~U<=QTshPdl$h)2Ap(zI-m-8tb`dE(E&8-&(EqNdRF-VORoo@7|rQ zR4Rvv@>drX`fz&Du;}UTW{HGS#M1llb9)01Wv^%W)2FfXn36}eF+It-@8qfCZ>3T> zZ2R`@Vebh?06B8x$g${|GYrFeOzo5^+@+>)XIzuo!=Vm`B&SMau|m7^@zl{apT4yOn<`?pw()NMZw|p zSOp=mw0Ybx_jQ%()*A>#yCu-M_P=gk`pK^ZdDT_Jco34LzB-LLI3qN92L zQF~)J?~t4B>x$L}K>*?G^z=r7J$;Ig0J&V=JN$3jnC>t-Q8BB83ww{7=6q}3>NH{y_S{E`NG{3igwGbwkws&e1z%m9dS4Sf+R_;D0I4c zE>=Z-F{V%%_U&tuD8(n6(~G~Yakp;T+3o6Z=|@J24+z0)pY|BtzHX^uxI#|eVS{Kd z88a7gd-&cEn4%~x!nne)1W**!J1jk3A)$3PnUrVrx}>N!SLl{9^8>QEG=K^OwUO@RR|l^bdUd)Xqk+>ep7J#Pm4k4)+aTAhwHDD{r-(VHg@=mdPR! z;1&g~I`&)(MSd3VPedO8ez{Dc0w4@Ychu+S#Ev-kA7^43K;ZVa_w*?~0^DwQizsC3 zZ{LiFg>+rw+f|Q^(dH&AolU=5p)thL?d8uOk$-9bROc_vt` z)<#j#rK$`B0U_R4Kq2d&4JrFwsxdWL5|wP8=h=;00|7yh#ZiYKq$DeQy@$mLQsZ^rO&+2ZEU11RNnBF}+Vs#z>{{It4Q_Z#8BgaS>mg8xYNT}Yui^|H% zY5;e*^l$|58#Zicp=tVtSTJ#Hz!p!X06-Fhf9OIG1a|8lTf_d7DRB*b0C;M=-y!~{ zX}Wpi#*M8Avp^at8)U3j>)%CT>f`b|!qrId`3Ama9SV21*Y=<9xXcGmrxYe~-&2pt zdq-4HU&1btM|sB2FG!MinG?51+Pi8RZW_>hP?Kr7W^{c ze|vZ8D36awcpY)cY`PsiL66t#wJcx0`~)Hp5GmT?tyZhsWHKEZF=E6@0Qg~P+R$wW zS(^6VnZ1RgV&t}M+rFl#pfx>us-t?--n22%8lY0J-p7mG&AFL8lb*^8N(BU^ zoFoYlg2xB=0s>|40(ZkK5Y6qf&7x7Q+q z4Twen0YKBx(D2^y;lmdJK|j1~BW-QzP$slMa<7n=;b|{>L!C~NqyzvO8yo*zSXlTH zfUr>@5Pe@j0N{Q7_1E7C1Og5KAW2g4)=Pq4LJ1LfTJ9Gpif8}(CBZLtJ`f1lH*Vbc z4gfErY?a44d&lnIzrVS%vhrQAAS*+g|MK&Wm`l_58m}yL)@EfS=ZkV>W#zm3_U*fl zDBEH{e5tPlfWD=rWmis4&WxTi;g5SPwfE~_L|;7fr2XRRr5U}aMa*XNU$e8bp9f$= z3QV;||mOiS|d1+g1ok6!mF0#)af_W{n652bwk+Gab?f&C&i$B3B-dw8pFVBP%gehmZrr%1Ns^Qj1VKy~ ztxnHQwO;yLjWUfFhRi z_VD4uEk>iUe(cz>Kcpy14uB{aqRyE91Nz2=TE^E&C$@f&D00)g+qb^PI>wFA7om6W zg6Z0^W5=qMD_52y=Vx;)^eC$mR0yCQO(xQ7V;c0YIH3PnkDas>n#O z)mAr2)d4p4frdnoq+q(&{@8VS{ZDoITFtG~ryh@|ZPTVrFRWj`{v?1d#4vh&(cie8 z0-%{befrQHJ9hjbJ3D(y=tYKMy(hl1H|;K089Q79Gm?fBuWixOw0ZhO{ZOg&_U-xB z*49(YmMwer%P+sYf&|~Zh=C+7BmgCV^ooj#MUy5?S}T*u`kv(s&P~W`+pU>wwd-m++nKNg82*8SYlA`pB#5&$ak@44rmGtQbdtGJ+`AU`!V)u>P? zv@)4Y2>^jW!0Yq*I-O2u`?YJ=nvWejcKPFvKQ;sKg#57x8o5Co?sxmEF|y}RBt(wj zNexNJH6UofcmzAi0Py2hhsA4m1^4p1L88xJX#IV^8N8?84nDvG{0rkB(dM(GSKR4B P00000NkvXXu0mjf$~T$U diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon512x512.png b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/AppIcon512x512.png deleted file mode 100644 index e7c0271490e03dea3af6c3fee28c4d96e7f76c8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38577 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

    PsMkArFS;WNDx1U7 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%0Dj(Ej^*TAcnnXVjdp3t%dcrEwodPL;O$W^wN`= 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�rV`D4ljiGy9U%{=p4cIsSfNMaGJza{FWpUi)Enk9zAniHs>B}3(NdF6n zqlNDWJ5@9U$dT(n{c;1MC2HiMk$s!#&5q-3Ynm|lsq->Lyc*ZP04nN(WlF1G>TLP` z>+L5;z5#i^7lM)i{&R==u9Ej3ATxJc;2|^`+dI8A2o{$eoXW|!1$?uJ6*)c&70M&$PS%F33rWXrzjS!y zH&x@6uZjqGaOEl<3}PBDmZ*u{LF|1ja}YQ`P;qqJ!r&hH+}PNO`8N?Zt>)s&RSZcd z--7TBQ6dVe-PgBUUITZB{zRGtDmEYp%OhY48XzL0tMUMM&Yszu;_Sye&m=t-S}xrK69Su@!4bG*SWrp1 zSR*5*0Gi~t6huP(3bDo~XHlYSVC-GGfNoekeEd%r4`e7Bjw~cF3~rP@96INuSIptM zfB)j-^W(tLPrX(|dvo*Y_h3@O5hR_(10u+%Hvngj`K*fPfA%+_G+Q;jAtiHQx=(Sl za?XUqccDI3@=>sCk^2L1#jABYW-Clx*Sy}Z9NkyTA2}83Qe;<2@kXo;WY7ZM_`rDp zXCNYeiH{HqC74p+EyyYW^^S##8~ZOd!~(D&SMP$OGFcOm-h99y4;87M87=V_C7asw z+!xX`bod~zA<6_;BI2Qgf}NvqJKIkW8?0dpnEDO|ac`H_A1_*G&2GxtbW1uDVG9ET zNHH*;W{9BW<2WlcH&&CDAVIQwwvw&`^wCqHqTFR7y}#^~k{ zh6P^2BcfU6K>CTBCa0D^@Xny78EeQC6qTjFzTCx`J_B!k4`EcK^8rxQ)#zq-P@t32Pd>UuU{ zl(e33S6l%(v&J$Gi<(hCXk4Gg=2^xe%C8)U|A%@_y=Mm+zLz4 zhT#7tlP63!(N73~C1^nbzVg22oG)<^z&UFnHn%l?xG_EZZF}R9I47T^;+l(e;?P=|!))DIC@2K>AqOel z9oywOkKKN)OW;Dh?Slo00|}YtOeCN<_YI?v1~^CUGH_^SK(d5Bcf_u^J@q6frRTI~ z1F-T4PW}X$ex=P0trE zfYP4dDFXc*##?wG3X(co(x2tPKommKVgw)Zdo1-!I0kC5=813 zXoIBh3_rlpk^>qI0e${mNBqG(lTv-fKK7G;d0%2Fxsz8&GiTO8b8`2Jr|L(Bk3m9@S~XRlFCTat#~hS)ghRjWAe-J1e{ z!4I0`L@)F=jC-OBN9WOW`+>-2 zI5Giu8q4-nO-FTf@<c&n-yv|6*^i!aO;4#tB4~JLoz3cwequn|O zFDx40H#)!0{hs^{1TBPE>Q#6hziqv@6Z*ctM{cXYU3{U#;gOESUK@3{iO=7-hrg>0 zO>B@mw(~o-yZz;Tzzcz3au9SXMA9_ED7Am%br6NhfC8=l#6r<9^)TfDH^kByBhNj~w`l&CaMHkUp9G2eL+iCug~F1`#Mau1!D?VP&jZ z!eo4{s5w3gEF3IrZ-vLphqXJPZ)N=#VfsW_se5^w>fZHl?zoWt$=D^oXDuWhax^a1 zZINbBiZBf%tPpun7jUrFc50?0p)@FSj?Y4v zMVjoH3pW(VZw+TT1T1NmnUlk2jBK2{Ve1LLiNn=b9dEt7vIhW_e>^jbs8M99{uTY+VY{I^$ z*4J9gS7ToXS-O+2^ky*ymFOV2wAPZYKr>-BpWTz+ACL8op48FNx&L;7Ml-9Ie4~RL zK&@DW_%$vsC1T&XkVfMX#*^D{Kxrze=n!1jv@%7d{EWtp#;NVa@w%GgPoFkNnwpyU z-@kv~Q@g`H`Q&zbc>P0d)4e{Of|>3($k*dJP6bYX9(=p>EOkW5PtLtwu+SpWs`AjVn>_nMueMSxPjQ-`#yPdN!oix{k|V63#T)-({-JWKh}eb_;7X+%x($BcWWoB&C|W4*;R?e{7;`e z+W}o=;d=l60~bPDEY+&`toOQqQI-)Ftho(jagnAEJg5&O0XOT}X=rHOmy(jIx)1(^ zwceGxpW++nWz+bcb*V-ziTaiBMPM-rk?MHBbir`k0ZS z;k9d5u3WkMbmE9CRCjCazIY|*X1^DUaeNjPmu=0a2`IWsc+-;rvN4Ft-TC!J>Gvt6 z%#PJm z1nv`-qW=8-t4Ua^zRvv|KfL#|f3Jt3B8%X44WHcz5j?70T0Q1z^5GgObj}xIRLE7F zx_pfK<{I>t={paVWV|$$*Y;*|A0yQ{?95z7O+H=;gm?%sg?Nbbt*{DmLx^L?15JGz z;(3Yls|(%Wy5$0BqKgCV*tf#>>_(Xu?v1)#v(m_XyZrD_M$}liAPWkq{VaN-z2);= zrDdb&WN6RoyE*4`@f$Q09GXF5zc4eiRkfva&o7r^)vk_wz5|1`O_4btv8!i{{fs-X|RAwTYm|GY`VZ8L88)zAvZQE)D@MC-RMs zAd^j^CpHF2GYp5M3I`(x2XdZ_x95#|=67=Iat^uUM_|phe`4encEGyHeer+S)d$vf zk{u4naxj$PC`@B0UbjzaehX=7QS5~L(lU$q{T~!>cRoj{+c|AyS>WS|)_#s0NjD=D z5lGC3d?XN>EMt{c5+^S4N=ZSr=fTCFq4do4ReSS!1{^Yv@>9Z6x1eL88$H#HURZGu zEczD`od1IbXeAqh1WQI_Qm(#%qtF&PeKMYEl?TOH%>;#r1|S?YAVa@ZK-bL>GlDDf z^-UJAg#Nco( z{{%kHc}H9#y&la2;sV8|Cz`Fy`IuC&{spU)$U0R!H^iL=VX3>RY!< zUxM&}0 zy<$UCn(c?32Y&OLD+?0X8#5>jH#dSzPpN^=G6=}&hkBHzgbmlKKfngQFmQPF@@0o; z@AwlBbDi$XA9lOAXqYr;EzH>HN&ol6AlvhP4Ta266LRr()Px1;7w`F;WeP+9GErmM z{8Zua7X$X1<}~YO&Ec`)QgF#A`Dj7W`T8bN%~o!gOQk{Mlo=vRAP1-ba+?PxWg&7s z$xS$gCN!a=A6PG3vVFXr{0H>K2u;+u$=j!#Ha@*X^J4u1tm1_nE@#^uWx9L!ZjBp| zIx#mukZ`tXB1M6*lSJEAyim7)^`!d+gd56zjS4NUrv}{xF41w?qcK^jTTq#0Fsb!f z)0IvU!Y|~}7+pPPE%W$2sl$mQ&-%O5PhJEGQhQyUaS-RA!Cc7SvCMobom}tTInpfB zPcFN5u1&RJ)u&xHXB?g@NF@>JQfLri@_|%%$b)Lpr_}!7aRfK5*a$>8x_}8w;qB?| zRq_qknq+WxFd`;wmrJwxJ=cAFDo&rDoe@#wi4%#eH$s1@=+0!jNn?9lKS$3v!#e2D z!No<82$MKIIf5qtqgZKb(Pf0a+DWQh9*cr72}cIUtrlSnS#$0zG)nh?MEy(|_nx06q!M%Qn72l_%y#vlB)zf4ds;^_rjk@c&@130y zpr4AC7YB+aWS_lXtv~tUn4k;#u%fhzQ0m6CF(RNtN6y~8)6g(E)~nQi=-=B>Ii26p zHxB=Mkei$PXyVZb&>k$04yjKI?lPM!PprLR1e+MdBL9_=DsohY%14#ztIm-JMzNn^ zic(=EjO2LRx3Fb2UW+iEgZ^}^w3+u_X-derpKKL#bD9Ap3ciT$&S_-LXrU|A&!ylE z^6(cE&b1_K+V7JazaCp!{yKYcG)+s@S7Bnq>N})r{;zD>gis-vNnghkvwMc>9vHU@ z`b|fbMo2IK>GEv4AHa@$BPxUus>pB7=tU_*3({wUy-&|0)*wAhiF{TmLYvptr&U?~ zb^CostXH=<)Ph#z+%eubVGGhCklG3}EJ)cq1}r+;454$IDSt6KdMNyx;mXw2FbFMNE;%-N)qKPH}wCFc0{ z>g7HO5Tj0u!QKaF%NHGNc-hDT7MEfa3Im{`}*S5b%DiWJ>rk4fOtmA2Lw4X~} z)L9Jdy^;#mY@g+FklWe=(_u}qW^7`j23B#`UcbmZAnpM?S8#vk$~Ls9FgB%tOApPd zyKp*E$&b#*Z2$M@f$n#-T$_->-b;eM%17|E;oHB_$dMsuLODm2k}a6d`YC)TufW(fqp*y_?2CC-C_50VD|HS5vh%Ssa&$1)lzH zbLGWMC^k+e4f0vz^NS1c1Dek?I+V5MuCG=JbC;Eu$3eeHd!9jo@!cCjso~qUlid}j z7&1XP5q0Ani3_20A8lr+of}W;3X{kH3XFwE~3b?245? zQze4~-DpVu3s7sKp(RIuRLoWT6v{?SoOXceTAv(9Re&j4uaC1zj3%X~D&WbV_@cN| z?{I3Zzxr?_Jwi^OB~@+JjRvEwqISRLnp1wUUDH>-fPuw6^V6XjvhTX?i6kFvq#hnL z@fX$J(F|!PhEkK>_U}G7TM*8ePF=Vh&e3csFYop_$t-l zyd++8xB3nBi~tLWZ^WN01Tor(Ca^}mbH`yYj5^k7y$`zUfqhxodW3WS&?o&s4e0j{j=hu%q5v%MD!yErIS*L>-rjXB_ z@%3cS;|l5^k=77;oT4wO#R)tQ5C0ZJ62*M3EMTrXnt3n(2#2j{53OCq_iyyPMw|A;=9(uSC&2`iDox`FWN9*9; z(>VJ5=flTj7#yv&VtJ>p3Pfa3AQwJ{xO=L(3GuTzIGp#+kmr)&&yeZg_!mte!*<3& z`LaUPHlW_py{DE#G0DHL^i2U10ydgc{A)2c=Dra!gG*6nUG;Mm*jZTF8(RsC-`MQc z5{4XD&7I+Pn{n5nh;Lk;!Q4m(ay88O#_ana_zXDf*o${_YVJM(T{Fc zn$9oeZ_T}FJXGiD4F$fuqB>CKf!s~DyWmr*o!_xuWngSwMIGbx3{!!i`D_h0Ml~4Y z7Kd8B#GDPIg>8Ds?8AELKhyHjLFXctws^HFOh-N5T-twj>fwl>4&V-`82OB2@z*|h zx9`#!h?f7Nw2INa!}Rd-v!vrQPTj-zkWGD+NKJ~{TQcP(M* ztV?Z=JL>DL^pZ~}<}CBsWCktSr7;}wDG9G3o25Tj$+-$L#!zHh^>7KuzRaOrYhMmc zjJY$<5%vnJ)s4b1e*V`5_k(-;6;d34s$F8>e65`Z;dE)Y{K(2%zh$Gu*RT7udiYV6 zS@^;62emDR-aDt?)eA>1_55H8eRZGqym48Et#VO6y>;OOW16kVXYK7OpK%IJfFXa% zF7wDa8NB0x_{4+VJL|$;trqH43aTX3MOtud-?hhILa}dyn;E7-DnDt(jS5C|0`sl=!nPF%$P9B zGk zawW?lWG6*)N@S}OZO%44(j)yTRifIjqQyDj^@+ok>%3cATmPm85QYqZ9>n1Kj@nwC z;BI{SD95Ek1lpAm+$vd74_Ft+B3AK7l$Ys$tnKR;7~^Mv_|p_tT^#fMIqGFrMp+%f zIkb3A?=sjM{Q_Yrj**Pc7gv~8-)g#`3CqLgVjr^#08V&K4U{ zGqN9bSPoq!D|FiewZae>{vj<#k=4pIo{L?S7+}&sIQ@70RB*x?6m^;u*?31hnZeru z66?ei{XC7h^&pImSVF#FEZ)USA=X%3!QjVyZ|v2}fAD*rLD>C9jTc=#qheVFcK6+C zab;YdXK|_RoPB2{=zkZ?<^Z+FF|bQ*1YA<*861 z9B#SbB2y{nP_KfqoZE){nK&WEd)(;SgULqLpW5`bwq-*v&}A-LGs43i3h||j391^K z3Ax#Qapl=m8P=4C&!LgM#y(+T|L;gg-9x&$xV-0@S`jJ{Kb5TcRacLK@%HuI#a;;5 z{22lE-a+onZyAJ;ROxvIohssoYRRM!Hzv% zC^!!^O`9w0>+3vpro1?A{iIGqlL2!J9b0s2;k}`rD_(lH3ZNWt`O46@9w;+XuJJWp z)14|fUUfdRe_85;$BHQo_so61{3^E%!(nsR!UF3FrGX+j;%0AF_{@21aVZgG^XdWv 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 Tc0OT|d?%G#nu>)t?gjlH#+^=& diff --git a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/Contents.json b/platform/macos/app/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 068d0fbd00f..00000000000 --- a/platform/macos/app/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images" : [ - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "AppIcon16x16.png", - "scale" : "1x" - }, - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "AppIcon16x16@2x.png", - "scale" : "2x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "AppIcon32x32.png", - "scale" : "1x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "AppIcon32x32@2x.png", - "scale" : "2x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "AppIcon128x128.png", - "scale" : "1x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "AppIcon128x128@2x.png", - "scale" : "2x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "AppIcon256x256.png", - "scale" : "1x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "AppIcon256x256@2x.png", - "scale" : "2x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "AppIcon512x512.png", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "AppIcon512x512@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Contents.json b/platform/macos/app/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164c918..00000000000 --- a/platform/macos/app/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Layers/Contents.json b/platform/macos/app/Assets.xcassets/Layers/Contents.json deleted file mode 100644 index da4a164c918..00000000000 --- a/platform/macos/app/Assets.xcassets/Layers/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Layers/background.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/background.imageset/Contents.json deleted file mode 100644 index dc14d244482..00000000000 --- a/platform/macos/app/Assets.xcassets/Layers/background.imageset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "background.pdf", - "language-direction" : "left-to-right" - }, - { - "idiom" : "universal", - "language-direction" : "right-to-left" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - }, - "properties" : { - "template-rendering-intent" : "template" - } -} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Layers/background.imageset/background.pdf b/platform/macos/app/Assets.xcassets/Layers/background.imageset/background.pdf deleted file mode 100644 index 95a50c14461e5668a71155a52722b87af91e8fe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1312 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 diff --git a/platform/macos/app/Assets.xcassets/Layers/fill.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/fill.imageset/Contents.json deleted file mode 100644 index ea68330e704..00000000000 --- a/platform/macos/app/Assets.xcassets/Layers/fill.imageset/Contents.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "fill.pdf" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - }, - "properties" : { - "template-rendering-intent" : "template" - } -} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Layers/fill.imageset/fill.pdf b/platform/macos/app/Assets.xcassets/Layers/fill.imageset/fill.pdf deleted file mode 100644 index ca7e4cc505c09a5877c4827bb00ff7fe58f21d18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1046 zcma)6&ubGw6fOx1Wx=3S@#vEhNKyAkl1)-c3TD%UQpJ#X5G3eiGfB3@oiIC*)T0pa z=%GhX9z=>1FCKdIUyurVl^*oqrFav;H@n#+G#7_ucjuco^L^iYZ#P-5RBxG@r6xcA zI{Kq#zyQ|XQ;S8=?^3TP`jADap#p$jbq9iSd=7}973#1KRkyZOUvNsEs^ix;PSf?3 zPj7_sw-TTHZfo&UbIn)m_0oFNQEa>9#~r1WY8@QDdaHc7becFJtDnic-V@jBx8K(j z2WPSGH;;ZiRN|%h!e2m_B!Fz6JX8~dyjTpQf6a#gpdJdS}TON zRuFG9Pv8b0WOc$))HoXr7sQ7Q0UD`nA}=SNKa_0FegyA;;G;l?G;L#4g+6l~+NhOf zNa#dwP@j#sLw%5$Yb^MZs-q5>`|<;!yKcuv57K%ABJCq-b>V>A!T~mRj$j;84skgH zQ!}%g0ja(a!`nJ$AHg0c!@leI8soi^ZUN}e!Iq;Ot*vZ)Siz*F0d_77_;C@i5y;B`09dzNj3FY=ViChkC@DV3q^C0~Mo?VE zgbqXRgX|`5;Ej({*1Gen%G)L`U%#nI3~v>VrHq=;c_G;PV@!RdV&vIZk8Iyt#{Wo8 zdD$7tx^jMZ_S*@l>R|2D!8a z^EBt|H`m)THcuJ0y1G;t(YnRoYiPen83-T0pPk?L#lAspi@=QJLkm7^%5&Bk&Rs0` zj9vM)|Ld048hHBT`%Y)AXOwL@TdhWn4<}ACTsv}HZa8sooNL3mbe7w*iz;{e<>&PcYtFx~?j7Eq+OXXfn=!C}=y;*)438Arw)k1gn4+U9`fo zkfH?>h(}M?(HP%ck`svmHApi_r7_q8Fw%4mRIrOgWy0061ie`qG$g8m^+HwAkOWmg zZ_S&ai878Aezzu7Cpt&=sf0h3?TvHSsLX@|90>=w$OnNH1X3kYMhf7~yv;0t)FO<7 z(^+Bw0sTk}7Ri!oR*--4WIas|Qhb_3KCu7a*6oQiA$^p;OT=Qa;*TCp{877H>E07U zu#n+^z;N*f9Co|a4hlgGb2^DI+CU(V+3dv19vH`y>*;~nEW$sS-9f6jN1R|Ix8DPs z=1AC!kti2Kr2mz2 Bj^Y3S diff --git a/platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/Contents.json deleted file mode 100644 index d4de2d3228f..00000000000 --- a/platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "hillshade.pdf", - "language-direction" : "left-to-right" - }, - { - "idiom" : "universal", - "language-direction" : "right-to-left" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - }, - "properties" : { - "template-rendering-intent" : "template" - } -} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/hillshade.pdf b/platform/macos/app/Assets.xcassets/Layers/hillshade.imageset/hillshade.pdf deleted file mode 100644 index bf409e708c92028ed64df598f6a9501ea0714f79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1070 zcma)4O=uHA6h^R!OFbx9Je2ZO0pNkZ%2emC$C`biG!IPFE^&--P6i@b|f^T-4G*k}`!_Lk(Z{~g9`<^e} z(REPw8;bAQ>eNpq2pX{SgGw|CY9F=JA_GkbB@_TqyR59B9M>!nw1b)~MU~c8#Sxs6 z3rb;v9&1xx9;tq@vfHT{e>3!C?&=5>9@f3OR)1=tZgSf^n_k~}>@_zBkp_{Wi zs&37ln>oBzw>

    2l4Z)4!Jbzun(cOa?xUFHapXZa-dBzdyfwqjh<*ai>D<)H*l( zld7Z?xuO`o$&lxA7bt6XRdyCccT%82h(;xVLnRt+K#jG54ysA;i@Hl^dg)B_>qaON z3c4ZXjTebuoa-5laz;>34Cg4QagwHP_Bi3x7MP$^^rJLok#<&qGYDy*2jo2K#>SW} zFxUa_pDiSBk8;;B#* z)M0sUQU_$!5*3;xV_8jErwvVxOSIQYImlniPL#RlrOb*4LKP3hu%iUyP;U~8Gtm8d zlRpCW86k2lDjI-bnv-0{G95qT>4pY3O`Nk--oy_5|7#nbge%f}{9{CrEK7S&qd(5N zD;swToDL`&L=>$&AY>Rp0|uak84;8%2iRpSU^M@QY5G6ng2-yq-C!8q-h_n=Y>iD= zI9zd8aAIXCcg;y!mnc$}E+-fhAccF)(_;@XkT$r!I)ZTFDvSi06`!y3c$e}AX}B-_ diff --git a/platform/macos/app/Assets.xcassets/Layers/symbol.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Layers/symbol.imageset/Contents.json deleted file mode 100644 index ad4293958f7..00000000000 --- a/platform/macos/app/Assets.xcassets/Layers/symbol.imageset/Contents.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "symbol.pdf" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - }, - "properties" : { - "template-rendering-intent" : "template" - } -} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Layers/symbol.imageset/symbol.pdf b/platform/macos/app/Assets.xcassets/Layers/symbol.imageset/symbol.pdf deleted file mode 100644 index ce4aaa198e613765655bd97fbcfaaa612f1c2cae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1039 zcma)4O=uHA6h`pS4r&h-EGY7d#I}cKcavz!I(ddc=wak<|4oaX^Zbc zFQY}LhLT^wLn|zYMO}t%*OArCas}=K&WaunDJ3ax^^micNsQiZdBsVT-Ohjkc*3a0DgJ;?!f6$?d$*manyiT13+LXnNJ;c#rjy{H!7fOSM_YH)_F s0%4vx!`3+>C`*?ON;yd3{^RMhM=3}fJYQXo8TS-+#A7HBNDZdZKfTi`6#xJL diff --git a/platform/macos/app/Assets.xcassets/Radar/Contents.json b/platform/macos/app/Assets.xcassets/Radar/Contents.json deleted file mode 100644 index da4a164c918..00000000000 --- a/platform/macos/app/Assets.xcassets/Radar/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/Contents.json deleted file mode 100644 index ea096b04b82..00000000000 --- a/platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "southeast_radar_0.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/southeast_radar_0.png b/platform/macos/app/Assets.xcassets/Radar/southeast_0.imageset/southeast_radar_0.png deleted file mode 100644 index c304b619c4c0ccdd3b53c163a12624f7662d7860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172489 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%0ArMtN{7IR0iu8sLs0=~0RfR5HCiM@ zxkcRhc?w)?tw&O2U53sTzL25{cbly}j+%^Hq>nVwx7@A}U z1{HYnO2d8Yg%hZ*aX>IF;a{!G}xKjHPbEX}3=pky~bCrmUZXbN@rBXZrZcbvmZI z5&VOdh)Qcs26}ZFY0C>e%zJ_Je9>(g35eGj*G`xiq;UAtzSJYB-m*D1c zF?jOGa_8bYYVno)tIv=g_FV?wOqK^)K&7BZ-aWJPy=Y%_uG&+c!}eF*B-W%K(!RKL z#9(!5wC31qd^HoEf6pS;DC=_xJXL0z)nQ%g0Q-FtME<4_-pSOUA0`!vD+emPKZ(K+U=1m2WaJg2v%eOCe1Ps~^fM`oczyaBKQK>qE+E!!+UKjZIog zi`&XX2U1ZeM&;8Td2$~^?X7F$as;+sa%P|q7QV-RJr%@daggiwM$Y304=U=ma!sOi zd~>aBWQQXiIBKDXzsy3L!v%+3y@!sE#B$^vu|w`RS_#^_p`(Ms;=AwU%>C+n0!(vc z4n1HM3rqU2kD9Uu)*r4j8V(#X*iYKAj#~aw1%g-vIzu?sag4%~E6Q19Qe~a&vY$6) z)!C3$ujm^(yV2ULs=)3wAJ^Z#${D$$HCXCXK_I(me~E=TNdwa3C)`YSgVE`?l!A91 z=~N*9;*kljO}Lf>6BJ>)k>&p7GMnQnQk3;*u;>Y>r>t}DR-N512f2;b4OU!CkW%!d z(y+(k;1r2ZGJmWewF?q)rS<@_*Y3GLn|z+;iEcc`-qb%&mjb|egz?)i8U)t3NN#+Olo4qYgl{1t=K5{cEy4Y|h zK(j4RaLoN;bE(NK;-6NW;E0RzjSFoo4W#j($aCtldV=Ul;N}m2zl?UrY+R>4<3HgI z!O(GAaIRPX-}95k!UqkwH@tNv*{Wi14uo~`6Fjv|Wo9HD+p=(nK)vb?j1f%b9=WsrA0q*4$$2Dr*=r89gjOU=^eK&9QLYMjCoJyOdxp3iXL~AC=`Ec z?WAldZ1gGU=JKno6<(HWW$_BTxS=j$e*Vtj9|+7{IwE|ayQm&OjLjN8jwJ|96My&h z#}X!PLA$-ze%f(>WF#`C#ujl@)gu&s5^}wk&@{YP({O&Y_A(e+c2XC>r!!Z{AaWDf zAMvYoztK)81$TBWt;$?*5y+B3H9+2(xSk;)DtI+ARhvuxx~8w@TKaC!qNnVB={vcs z34qoh8&h?B#K_g5wlb&?E}C5+W~xYeW#6Ye@nJb++Jy5YZn4G4?UyhoB-)$5?dSaB z|2EWV*wVO<;8iP+3rsn6Uc}qO%pe7&!PxMc%WO}RbT^Ck_*txU1!4SvQBN0h0Vxkp zVYp7`?jFeUEI7dMtYz<&JHyIQws48xKY}cPMlB=A9AY&WeEh)gl<}L2^o2lTss-PS zKY<37=D&Wws%eX5QsY`*3i0PMmyy4m?>^cws-ic|?&;Qgc%kMsv;=sbmQ|f7ahfM4 zU$FzAEiaL93CYf;Y`J3sI$L8NoKW>p<6uFC?;9xjikROv^6^8DE?$6kR<>-6c=NRA zQfj*@nWf0BS0YYX@vXZR?0QNTxIY*wqflP({^;~o_7H*Cv=iNB8pqy5knk%8`Cey@ z&cVth-rmp*N5vErhz-WvL}1oE$pbbA)jaj>D|4~wX1r?6p3}AC8I!}L4C;CJPDgr- zSeTYT^*UuL1W)^N3viVyOOyJ$kLE!5>iz&Kd5`o>R*XY!Z&J;bh*+v zc!PQ*AJ|PNr6EPyF;gO6I`u~eob=#~P<#sOmzy7wo)Uw*|a;Wn6*O+U@gb*8UrJw z7gwFb;i>+YhY>EUB9ZACP%81x`m8i@&aL;~J3bL{Ew=duN*xKmbSi(X*ez*gCqp0E zPHqV3x{?XyYh7)d4ipb}!~6vVl@9TckGnWWnQln}R*8dxP#L^u{x{vd*P&-ZEG9vv zs`Z{+EJ-8sg!&%;V0ZWLk}|?@&blUUHD~KO&m_*V_0P`Q7-$gSF5B-89-^z>y%6k8AldOX+sS64)&MjGCgMsD8+dC$~7$m&P+9B0%+w@^Kab=JJtyNc`a)U)7p47l+6A=?@JlM$U~l z9~lMWz9+0X*d#hxK22s@@@*oe$dsk}O<~FHTf8G7zb+IG_^KaFGB#Eu;_T5CqOp10 zA+UwrbH7C=IH12Kpb7<3h|;wc^ICoPCA2Br=pNiX1$dlLjgf{J=1;O#F={KW-S=ja zH}@A2=)1S7U|$VPT?8-eWT!;uMi({8YOd<Hf2Ov8s3i>oe~ez;<8Nn>+yD!hW12j~6$4oK)Vdt^( zSnbkZOZSpI5Fg(jO8U+m+-2G6#Gc=YW*c;ey7(s`XZCOSsUAtq=M(KoFp1hzGy`2d z^#aZiA_jcN=o0lj+=7Y*qHwc&bW!;w5?^(6W(76>J6{jH7dyPCep*O8xrLg{;WGl_ zJX!;y@bM=O)ryPUANo7Qj@bk-&p8&u+@3f8qi|!2Ao0^*C80YnpLF5l61b67-+=B$ z5UL(w1k>x;~8c5~bP$(yFg`oamxS*aTLjY?~o7iI>UJ%I# zPQSP*gk-DT=wUoh+&ev{KN$M{x)mz*e4qcmdhL#T$;w^L0j=Jnj5XO`6G>qnbhT0O zvZR!ktBdzqfc+~myIz@+RM8!fA%Dq?UvOf8DZn|QMY3)7iV*d-z5Z~K#@p0rJPnTy z8BFmLCf(|^{b^Gl3DqC*ZKaFF>*8~w(?T#t{pX{0K1=_YBBt&W;F^A8k(6CL?CNa$ zn;1HIPy%n((-sh?ZRRZeKB4y0*~cOEym%yV(WyZ2*$cVR0V*vX+;Xs_$xOT3w@n6U zggc~Id_RVxqA^u(QKJfGjA_O%%Nvzsg5mCCb#oQ8B}1F*9XxT=J-Gx!Zip5c0CO{K zqeER2Y$-!>$k#@H=k>G!mPyWgy9_CS6_qoVDqJKl7Xuy6JG+z|JB@?ob=NEOXaBG( zF%C)G0lk!m(_>ANus5W#4Fa+I&q#+peQn zeSfymmNZfEQGlFUPnBiUlr+7W)D~|EqGEn*5A6xdKM97OXbmy%=R@z`_3cA(Z&rr5 z0Dk2Y&5xj|H3c!xi;w`=yf1X06<|*iiGKM^f>@{=b4HN->0_Y2C`!_N_(+BE6~ulB z4(t;Z$%BOt;0K*na_=+Fe2Up1YktHLabiZ&x_+Z`#n@~eYVKoU5N$%@uw zTJS9msLt$=Cqm3EU-qq?QrewA$hUMT50e2*Ev`s(Z^caN|2U#4?qc2P$aZL#IkuZ$ zTMIF5`-@|y?#%rDn(-r0AZHY5E1{k8uZZD&x$v1n;$^#O5Z&Zg$LhpwtiVrINc{L9#~3Mel#@`Lb>A@J2&5UTeF}hGi?cE$z#^%;&BA^4l% zFF?7gtf@v34pd&uUtG|I8l9?i+so3gByGeMYPdvt$){5{r?K_9g|WJ{lB4Tl2IiI? zAkldO-Zw$;%;8ll+CW7nQ$P;^UqRl*!$78;PZ-mBbd2M2C&wz)4nh4&B$L(7kJ2%u zEc!vB5E~I-nc{2&-R5!5jz};0*85|?@eZ1pGd7i!&V2cuU<*+Xk`)-R0rdUpIFtlg z@$plso6>gQVuyd5f!%_j&~La*cWmpC0X@!@al+6V*Tz!?b}LvRV-N!7Z*QbKZzt;M zR;te?cXq7fYv?7~%jf>aD{|*|n;t4$Z0iML@Stkzy~c7dOhZNyh_|)90Xy%A{bv^X zQ16>=UA;C#ql)Jrb*&aI z|NbG!eQqQi4j^XZz#z-LM)U%y!aeQCBmtE6NbjrhQ-=a7DFE@=)(={3BcODn&35R0 zuHL{$WHeYc6Io{b%ix3~l8&K+1-fuaD%H?Tac*qw@?@vgDB&mXw}>~5@T($GAI=+F zK=~eD>Q+qhNSR&8AYm0|#9;M%C7V&m_L!Af!(Kb=T0^Tc0saRTHoRx;dZfUf3d=)> zQ6j)E;S9r<2YNc4-l~G7ja|lr2fu@0=r|?`TFC=0YPiELuQZSt#z=DzsxhSU$8#-! ze&q`~$cc(!^pg*jfuhtdsOLyay@^`VRTP4tOgb#Xg^Pk1YO|9>< zUgtjETrAHL9uN@lbP>*$hNWpIn)-rpN}>1^)cHEPC;K)4b~5lCYL2<2MQ=12#hVhe zKh5kZR`LeQUQd0E$J*u7@)WS~LBDz?D5p=DyM3@@P%)(68f6O$kh=_{(TEeOrcPBd zpS{ELbG4?$Cxr9)49 zA}91|UMCiR4)#6Zda*KfL`HkHbuj9DRt^pRX)Z3trfq6i_!wTMki?c+^OM6iE-L!zTqidN z-qZO~wqkr~DBY4f)Tbw`c0|iz{a6wI`iDAL1O7@p@}MK#(98flc+51=n7wRz{*)CW zqlAD~m_q;C!p8M8!Z?ZwX^|PX@5H${*gaL&TIaXVINo#?4tRO5=nb*$m!{3% zl!F0m`<#TuVb~Z3h0$uM$x_4RdRwxcuaqRr2fqAaZ0ls)1PQ)M0}R- zmKOOz>CR@gw`*3ben6Y=Ycx3r&17vRZYke-zCz$PX?2G-wDdRa%nDSBAVsRHvU_mb zb^T(hb^rEpS|m>JUt^Rxn8~cehs!!eEJq4c+Uq0e;yt%;Jry=Co~cDcwY#(~Y4;|C zT~j!KFSFKUo~Kny+?>rwmW4*NOae*;_a89Q?psJX0P{z%ZKiJF0uG_;{r9a{X9ppm ze|ox7i7Zkdf6G|?zAe7r&H=X*1G4}7;3uUOS}31*=lc zjF+C1FOL6edZ8@t(Fp-j$WUUHu~tIQ?#~^62JM{Y*2uQI8tWnuL|qRjHGuXH-3T=c zjJM=Z;H=~rs}YQxp@#KO#fdoUo==4d0tfZ=%CZdaw7IZ5cP5qEEN-l(gT1ci{}e2e zZ)p|GJh2zxYbVi1)wd10+$ARQ8bRB2+*?e(WA3{oW7Yh`#QVhV?uS|27O?*D;Kg3- z@IjmRL#rB%US-|8X1L&kBQeWuKK%8apLwpCbvanbA&A-GFdK6N=&~t)C}ilnZ?U(@ z>TF-_a@U_A($L5J0i|rZ-63A;7)>dxRMtW$$hbI`K|!?_6b4P51U2ug0VSQ@oD4W~ zY3H7dT^RJn6^X>&RGZms&y?jbxEQ=$;AhnZuZr+v{v_Y?+S0@ME9Rs~LyWvG44BB( z_oJ>yX+ImDa+HQ9;B6UyB&Q}M42&n|LT|G821G(3ZB}2o>MrO>eo2AeeGZR%k^6oy#knh`gWH;^o@o z6Y@&WlW->qDsK_UA9;{SM9QeZ424by+b8<{yXf_k(7!)Qla%Kx3E=|>=fZ>D-nN2C zKnOKi0c`T*&QI6LDXJ#pn6-D3Z{^4m8oeEIkJKx~9a7~E; z$A*uSD6MRxxM4}6XsD`n?Qc3t=gBWki9i=DJ_GeH>oH9fbzUQY@nxYQ5z#fH(r=iS%q zY^f$=&6G1bTopRJ< z05b;qE>6et-QP+_e1C5)jJz65iM6=v>gxUSM1%led|e=8>Aiw;NkL)&dg?X;Ob+20 ziK)IrOHDQ1m+$?Ua3&@?{AEeMzMQGR@7r^_L5^-YH2eNF!Grqantn#UY`r5t@z$=` zU`0kd@@Gp$OpIeh%+2kt$e(44mBX$-EQ3%F@o^5=+d%1S|1)7d5P-Aut^6vo_33^4 zSyQ<}3TM>SA~%_23s_7-gy{T1vjh?L42-AcPA$3jt%xU-%k*rR$}&pToapS;N9U)5 zC@aov6LlbNTlu4#i{g*s0d*oolAIo@YLm5YPxAa8*`(dkebc6#xPg^v_+7iii$R-$ z3a_%X-&716Ss9D-h*kk!n#YCrJLT4?!f{hmrIafLXu3X;U-J$Bn=A~4$R_S{o(nOl zw9ikOKVI>Vfpm*SY7RYNoU6I3V-96$O;`y_Wkaw%K%(*V6){b8e7sJlcxJ7w2k zy!7Q)@KYcRgf1M;l=)hH_ZkMcPr(DpW72qPy<1Lj?f`X@4|Xmej$MmMTQQ z#Otqje70ry%E?tWCh3oo_FT}l0i!toY8Kkj|?`5#WxiUUzn)p%9R-jT=S>8bR zyGjxu;9jF=e9(|%fxr>KYhL7XfZ)TBaeYs(qCC+xCxe`e>_4l#9cdjC;t1(Za4t20 zEXEKy*(p7;VVg-dO)>3!eM(f=rPiCKt(W%>3ja6*4yVZs9n~Z#z)RwXu9+rHI%y!L zD(Ej~yIr@7H{MMZ+K^SVa;X$FAP~kC%6ZP!P^$xeVV8;?k@PcEq(}|Ia|Z9Lu5j$k z|JQU(fGvr}1?!T$^y8&s_Szhw=L7QaQ}D{Gl63mj)uj?4C6_h>(ytzPA$@NC5qwX7 zhCj4=%Lq;(HhEHF`~tHpR_-exH|0CG@{PUe@5YL&U{8hu%n#JBzrsl_%8I-u=hXu8T%Gdmn!}3TJCeh@j zZY;&lN5(84H4SjqV4&a*0!Gf^e8qd+zb2H%P^AB%BT{)HD!1y0C57ij+1y)FQd-B} zimo(m_T;o@{ej`7YEq6p^;r0O`~$eDZ6Z(D<1N#|>$)Z#NHp%q&Zxjhfpf>ye(Trl zVF!5fvR!hC*wfc@1h*%?wy2$^<>lmU`u9|Mp5fUcnNemyX}atE;}P*5*4|E@0e81Y zowPZPT023uuK(pj^r`3E$hvJUm-bUo5eGmh6|PUrb3}hz%4fSV{q{<&D}neEZu-mI z^Q(g>@V=(0gKZ5J>B^f&^9ZOmKvQDs9qK($*-yyw^cizAp(!Bfl4v5@x5)HSjIJ&Yyo%q^&jw(+!R zkE`am^GKq%|BO2duK{+>B>EJZiFmZk8an!TJq?eIWw$v)L=Vb*(Gb2F2_ggYL>#P& z!}e2T3W}6F$}Xc3oaQsQDW{TxG~8(l>AkZt>q91_OfFf!YZufjRjiN6S<<<-MC^ne zzx`i2^p*y3+xi#tE|vCURsf0-vTqQF0G>4K=G6FRq-$yvxS>)lUCQ5od)AhJqN9@y z5B&o5SOD3xXT>Fi-^__V(r;$0o0AMB3?+w}WK9Y!VKuUs%&7#4L71?sN`L(u~+Cgt)x#fM|TIFa3P zjPvjJNR<(^3Pzb4ei#6W9>jLhln*|>D&ln zgK~B>Yo7XvF0|L1u}wE8umtz(d;UGjR8qBYK^W4!aaBoE4Gf&@3CH?jJ4;G42ri`% zaW>G1MqO5o3@V0GK`&7B4GpuBx9oh~+sUcwntKu~U6~5%W5T9)lfM3T@bYF!27A4C zm|%$3Zc{<8Y3ikq3zhGrJ=R5<_Z{S5RWUH&>#d#|1ZzxM@#6nPU@eS1lS*R{vE>2h z6UIyh&iz$g)4S>ZFaoZ8_LoyK06y0vl4!otCwWMKV!4egw2eSM5=qP_>6brS892)5 zssb(9`R|?8VEVD=cX$C$rZ}jOo)r59G>j0lbgRGli19)wr?n+tc6`gR zhs6F@Wr;{Lq$h*Pdgl-f$@+qd7Ya+!J_m9SyuEm0Z*EH%x~2@Y9m>a76s|o71Vd#o z<5C#$qY>_N&ZV5xcBGzyt%38leZyivrnhqt+a)bq4{nz?g^j0oE;>`qCu(`c3s-jp z)`nO}6n54K2o=`KfVmpNen&H9OZcy5jMXJZQYm(WN zmhp(ID}-!_aiCKlRz_?l6GkaaAQmbr^$7!gD%6;Q4XgG0oao%3OH8e)QZ#9F;614)aML9i69T0s6A z_I~kE0=(fPB1_OBB8c zTMB==lqWZ#q+2Hl&&#S!GeVzpIP^Vll%iYO?!aX3Chy+DuYx|$HE`#TbQR0rZ|mxK|3d}v6?lNUM=D0} zGrF;jAmy*ME2{(&_I%chs^9zo8#XAw^{OkS2tu znJMD_cR|HJtzRl2Oe*qK5^cCIvEIlz=O2`LfuzepnI1g|2diHQn z-%2G4HP@SG!?(pCKM^B+LZ~zI0@021UeZlhtLd*3Nx#jf*N~5x(liT9vi&KfegS2y zmSILG#pDn(wa-tym1uTQ{U~)`F`0V zz{VWvr6Gl0tHwj#GOa~LVY8~{X@fsQw$f{tqc!gKtu??zsVFhUNr<7SO*_b%wrj1fx!HO)@~ucG zcT+Jaa#!jl(Aj*xeN(N@sX_GSzwdls60~7ZFzJroKxjwgDltq zRkSm^OG*E=@Ck9|y2E`!(|*C96$khCxP`Ty2fD?wRzpZxrF$f?eymi*O7)k%r28T4 z>%jyL%wJew|2`(O;1FUyr{guhpfXnv-QX*0ujzN*WRBLa)`gUTW|wwr&5zy4gklyB z>rN*&C0U7lTyul!fiL~zNTA%$Rp!faC#}C-JP#s^(?4kj%iL*ARo6Y}>u;pH2#zw&&6$xR#tygTWNazHA1&^=p>#^T^v97Ej=bs=!J%cL zySpNVJ-YPbSJGLc?3p(Oa;Q4Z_WnU2H|`EF#mgWq{^q#zdB9nZew;+kY);ZmnM17e zml*@MxSju5E-ut_a%7KIwbyEmVNDG3ej|t8CAZA-l{$Jca}p7>RG{=vpvrEk)*};; zSXmUOJck#S;?)y`K~!@pbkK(1v!}I|*HDQZ5OJS|KL46OE&91WkfiH3s^vVp&?uZW zx}bwOsNOX6NmY+Ca{Or!D?_urJ^iKrJ|Cbs)xhMcmt;cyj(mSDUJpeI2&~PWG=PV) zr@*=zo#%w2e;cD0sb++O?ApUF4}I45PP_b-%tlT~JFDqboHy>e-MMkD#2;x_7O4@e z$LwJ*-aOiuhoBSc+CFk5zFiM(%DatT>6XdNRe0i0xD~>ZNNHTXE-h5J6tC5ivLsEC>4I)vi-NkqWZ&K5pReIqlU zendsKVtYuV7+7t>cdydNp9Z{{`Xkn=5fX4W^EH~M_m3=jGo9L5I2}Im@M0PZQJP8)}Xhxwu`Hb}nvCKr_aSdYCh_Jr=Q>cC^O!^;JS+LS%1 zcE^RD)f~HX<9})eoNe)(IdvloTn3HDP7Y+={s9%*VPKtMqXrseBniM@mGc%efUv82 zioKml)gwltwSkiEQP6n>$^N*-v|ZSrP^}Z7vhETAhV-D1Y-UOFsp*Dlm>J$^YnG=| z+Wh>z?o)(b`GCc!7A*CJQRld@^q01*EbugUlo_F)jopjat3+oJ#0jlyXA!D${Hs|RBrvM(SM$Su2wR65}g`&q4yvc^ajJDP$!a;FoA1^a} z_lMnB$@8>{vj4O|ebo1kRz~>y&_~Oy82ktRF97wF$^AJ6ZjH9!>W^7W()&Z%CjO50 z2jC z2a{D>mvt?>ML3lMe@KO4R*Uj2(ahIll(Kj`MO@bEPLo*Y0Ou1P!Gh2s>0|ZOU3>;EtJmq=(kB>6i3vMwXN+H{ zO|&b2dKQICaK7i_J#f&OR_59HP#2jt8|#{1C~I@;{B(UEm;d}ucsgn0$;%W9HWO}8 z%#h%G&3?v95t{OyKnKx;&DZakbkJPJyR`tq7=i8+S1*Nqy&L#iLMQl4Ja(ZSP$ zIksA|1VyDGRje4I;*rW}pr}bGGw6(EzuJVzBt5dF4Vh z6{cD=B2rO-z5APHKJqu(Y|?X}?xhjR+>eY1UqCQZJO;SY?**Hp6hvfQ0vH3fM{- z@j`IA@pkLoFR?d%9=Sn#KO(sBGuMCzmVrghB~~y!mPFDuE}g6BZd>p#5lwhCo@(dj zU@v~Li7hm9_nIp4E|H6?B61qneGNOQrP>l9K5sXzzmK-9>1+9`^u>TJ5=`$vf8SDz zo2n@*fH-a6fiyKRbPy;j6SH2%^P=5!f2l87%-^DTzP!b?IX@W${E)U%FC{sr+?@^7>orWtmkO8I0x^-d zuN@74leS8jh`5ZR;n_G;b#7l%_HZN$6HCDYU=K|xbl)I{knXLLR7qMC^DKWqs84I1vp36eC%pmq$@xV@1+vwA6KhC?EXr5io zBrS_80{6S#eqQC%W)~5^7%o{dg%p7{lNvm9u+|?}-S4OrB`cGi*y+A}r&rO?BUb<4 zJ7+GO2+R4|ud+3ixs5dCXnP<-e(awL*-w$~w+tE|x%WX|-ok>SE}M>G-0jSMw{J&U z7~o$=AMIWvTfR@TrB9}$Sf-RcSpt0O`V&s_%shky70@5h-O(vCI89G{Mse)*hL$wa zCP)IvZ>>MvPp$a(`%yInldHJC<|Rm#0d5*xNB72b+l}t^(l;ANE)iokK;PTI&g9LJ z0Rz&FyA$q(D^7>Xsy5PQhXvt*d|CgFBY-5Z;dBajf&BL#}MES~=osgkF0{LbQx4;BZ@ z-NDpvVBTuLj#G=p6|iBnB~i*ZFr@*Dl2q;Pm(u(>rY|9jO&u)ye@DuIx*9epygr~#e7 zcFcny){zktovl(k)Xw$)%1Id5Qedl92b~<7vT%W<#P0qdGg(F;p_4HS!=J?!Ty zi?-Xek2ZLyjme?7F*4uRmy6zOis@(l=kq*p74H;e+xDd$f4*qMbImU4AJd9*w<@{~ z^HKJ)%U!XI-fc4Yu<2FfjHGi0Gw`?n<`1P9p4fJ~@AnQ<4xqV+(ujeix#65Et3!Eo zkiANqLyyzuT(^6|JIJNr(1lR;x(&gLB7v`~FEEz_GG*V)fhJ+kHrFi{T3WsGN$E_7 znX@9$ZBO#PO}K~r-~kTw*@Xc@NA)8}E^Rdmed`Z}upWL_s;5>=!oTpJ{=ur5z}NjK zdN}@&*NP^fKhuOmAj9W#{5PMd?cc6yU&SQ<=l(R0K zxNARR6D6=De1gx#ByLq%Mww zldS38Bq^Br9gr`PXrgJ<-e}g$QKv&euR(uox5j1HO-VX_z;`lgDGVT7r%_KDEqD;K zz*^3rZIx6spb$p;NG~jePq1z4ZYcFuC6$e3hpqE^jm?xxhUsm5b6U^5m34M6*Da0o zY&k+k;eJZ5G8Jk}cY@?E@szbn#$t5Dh-|#z(AY*XzbLCEjZJ^pKQXDj5yP#|{FXxo zO0S7b3Y#Yih(@01B?b7T`Jc1XVqHLPE_`aUxG3p4HQs&9A<+^%T+J@-=G{sp!Fdw4 z*i@bMqxbtMEi$SM4Gggr!wVVgM_` zH!R*3E}ZSbpTFE2O&^|ez=<4GJ$Tq7NZ-UaYEMYj^5D(IQ&(dvCL3tBjfd;a0XTB< z?!*kmQogbE%g1sID%JdOkQr+QPtgV^UbKb!7F20$`J(Of)=|}f7Dbidl!OY4cB;y# z@ng^MHeVBO7*IhrVO{PcS+ide<7W_>cnHXIDBI%8M*ayv>z)e@|M{dUUbLajyar%% zNJpwEg`PcqvP2Vhey>(bN~E`Tu()}29zGi_Q_{Gu-f&^c`g1b9#rC3Kha1zvTBgQCg z8TmtwF{m&*93;^>dSBRC6jjI650kc{S^HW~r_}U2LEP>0E2Hh8s~+*){|pWRbhG*c zO*n~RS=7rCy*DGT_w^I`|33?0ka#axCfvv1?_3QoDPSN5AV1)>V{ACF^GTD;evXhX zA--aCk(G>rz6FB9=kLRn&Ny6aPUnm$SeiJ`J(<9<61)B*xP^`)S0{}l!s`-EQ%-_J zk1DvnMO-JcM~Imy*q&(bQ+-%d-lC~KqPQbNVubvsmXAF2<_efI`D;jaeNw)sR4Dw3 zVCrGJF15+|&)ajp$T6C~1c@tZ9G=O-T#ND2Tzg%#=actkDgDLXt0TUrICB*^=rxvp z-$MnEnq!X+8q<-mE8E%GHLt415uJc@jg&PE1|x0jDbp^T;WS$eNpNDx`J<%fdqF-tw!rUoME~Vt(EYL#Hw7OnrFgcC}oYqwrnm$NZ za7?}rxvYRy$m;8=fGD+?y|O5?^KC7k%Ff1n%D}4(!9uTs zI%W1GI{{ap|KJzLpi@8}r+jLNtji3VFn`2eVN|}hgyYuO*w41x0)IT73$KG@dI}hL z?ta3kcF`DFV!UwcbcPsPryqaF+;2ijFew2PNsV^KYo8Nv_Onu!M)Bwsue;k)+R$P1 zX(%HKK-34PBW554p$7wfk-C-ISDBE<2qv+SJB1kss~J?N18Op-SdR1uP6TSJ+2)&g z?`-J~lx$W})Nkh@!y?WevJv5}*oSF&vnUKK1@?TA{qf>?V>;`{T**+bFb>NR`SWH; zKVt?JVn!zYO1aMH@~n(ONx(lZPERJl0*P#<4`yRTHwYQ-%Sz}<EsC~Af)1&sITWSO`378~V-w`GX5i<|LttOkdnS!ovS6J(Rrd`#2 z?uhfjWdiuxJos?l_iFKfe|+??B_g6=y7xjgb!svcycD-BFsNi)v9uPxb$haK&V2h- znTzci-DGE}Z%fGS89`r)*8Zs-WW2PCAo|yo_}Y%?pv|DoqheSuX`e`fJ)e{B!}aER zPc*0*OLa8NZORgwxF#F&&u zqKlxZs9+PIT-Ndi>j9pe&dM`(nFt`gfB=sxC>XUvkUVqrG^^WihXuhQAE{84{3~Gj=!3{LDKAv?X}x% zIt!0x2U6FfuIG4~zFqvEI^O@C=~wK=#~hLwDg8Gsc`#Kq#@7|1zf_5WE$A&=PAXk4 zsu2)r`qsu)oNu~Yp(~cLLzEZvaBXg~;F48w?hy@3ozZ?ufF(4~16ed2^ zb4atN+SCTj({G(``#2x@=%iRxby~TJTDSgB7+)#yA*LK`wZs8ifxx5J5O*mA<~oiz zzpY`N`XgLQr!#E{jWHGAt^1O9DP^qtR* z%1a~BQEXG<^$!+>A;^Z2l}yzntYneD0JPUun}A|L{TA{wjH8^>yDOeV^$;QZtpy1QYrub1yE? z|2>@c=|w+RKMR}|Q$j=Cc4;Kl*uq~Iw#w@gp4VT$NL%P;cHsNBsRPpOIIp`zF7tHwW_mnz0G%pcJCe5W-QtI z_|?xIe|M4SdTM$bO-mr5x}>F?|1uZHcy|5(|3h5=-QLW43sXy|*N~hU8{Ch0zHfAl zD?UcVY|iUEb`O-UKjV8N?wyliZq2|86i(}!Q(CMnEW%w8G9T#*EN2SL5EwL`tRbr{ zn#t2oc%3|%?Xc}Xk4WUDB7)I2Nel#=wj3u(H@U3|J+eDyb5k4b*?nCcE6d8Zfl@S) z7m7>*t3ge{tWT`1A+$xR%!CK0*BMf0HduAA!qE;-QA;Khqan1@5tls)fgYUFIonjq(c^1S* z$cgCeEkTVMXy(mR=>p+W9qJQ+^AM zTTKayKxFQL+NuP>-2P?rhnr(MM=8wsH)jJPvE)4^g*9neau04VhB5!~pgt&%I_{xq ztwc!P%vip%pt|0)XjF839?`3~A0Tqod%j+)lDV^`?_AJWU!1Sn*;UK0e7(uri=$br zjyqw`T*ZphByE>4ZjM+O$Sy+r0&42{I`{jkRL}Mw9OAB{Yu7qHvW!MIwS(i^MZHCf zJU<4mV-$D%3p?w2%Bg3~bs=(b(U}w#OgMqXH=_?ZazU#s>c$i)+q4V`*N6Y(41O+%h|dOEv?X}3$?ns@$SryD#0l2`u} zQ4BGs(+E&aY^obONrZ0>K2vUMRUK590#)_5E57zuWo^?L?$hFkGms2!YPV#9wo z6xv!G#>@~S1@|my)FU22+wmGk%Rhx2lr)~4r&nyp(${aS{Yw1o3!0~KRw^`1Vy>ah zsgmW>^1dF$P2G;V( z`X-byEoe%_1{{k6kJ!ht2`@|0@YsPw}9+Ucj}kFh*3idz&zl=U>Jpq zSm3Zm`>#52z5HCMnG|(j=Qyt}V8PYwWaetr%Bje1X!pHOPD8#ZZctmI;JEl=N=&xP zyrVfB*lqP`{PagN0q#VubI?43s2i~sJRVe>F!Mll_Gv^a|A^nsDDrG?>3`x@ z>H?HnB!F(fAt#aeVmp0 z(mk$t2j15F+TCbVz~z_OFW#6qb2W*`9j1CzMKEd~gL=Mp+;ET_m|Yfx+;9O--qN~s zLt&Zt@M{9w?p(xb!^2mLK4m{Yi=c(uw?uoS*E?@QW>33FLukb7OqcmKMum=k1paIK z@=u;5u=cC(@Z<18%djEq!i*MpGZH|JUjbL?emhWso=GsG z{+hgG<1sN2Wikq!8#O|gJMI-Le1?Q@$&Z?RqaZC&l7GH*agqKQ9}v%Txz`~#|F`qn zZw%_wp(rJwJ}jGh^6dIsrb}&S#L_WSai;DUfcO%A}!fsX6a`@*3xV?}`;X z78ycrf`Z~dRjq?T#RVeWiDu6#Ke-o@%J+<*1I8x>y)=IjT@4a)eYCX?ul%OS}bedw8N=nJDfJpy`tghj5kId9W*+)>je{x4aIZK>p? zQye4Je~U&HnS`@3=8$Ex_@CBmbo43~(O_GTn^!f;a|G zGurPjDt1T*_C?4P);0iC;|9a^aI0@E!^yXcaiX+6JFI>e+Wi+}XP)L$>1LdO5!2I2aXgkkb=qI7Xt;&(hWbqN&8u)6G z#)98=FIt;}Ognc&-Rb3z zL&2mnPSW}E1i8wbnE63uZ_{xGY2P!{S~5uNM7=U?H|TghdBLm;M~be;>AE!d3hne? zI-ex(1H#3^Y!_E8_*Ns>t+pc#g0LRlY3oGZyjf8?MM1$3YSCFwjuc0?HBE{MaR5oO z4xIN&vQYSKTN~d2s4kNH6kTKqiz|acNN^0sc8tew0bk5y@UpROl4$8{{!o2g8R#eTSdO%XS%YRNBKNEtB&z2E&AvOL%gf;)=N&HYNxJon z-{@@nue70&<=Feg^v7c>+n;{rF6E-s@-a@zRM1}-d06_pkQ)eD$=9;LgSrX%&4K3m zz7B3kFSGg!p|wVx-1+vzEuD{}T%{kGr8b?gFtSnNmyUzk*(G`D6C=#5C*nmfY( zPT7#+wnSi^JAu^Cw~(!kC#5{f$A+3uAey{DL;x0TcdgGC|7({+Z^_~CtEAkCZWa`7 zr|~U~g9Izuw;TKMp5`sNuNn5nzwltVx37+7Ei118JdLiYB@P7P3yj4#o)JVA0ZDftH( z9;Z_`wti67_;Ecj$Jockmn2t!i8lW-4Q7>QtNt+^2;on_ z>?OUZqN}Fr6i6{dfAsQ{expoYOq;i0WVm^ZwP||`<>lD0r-;K8w?6w$N}I;n`As1_ zrcH`N9OEB>cmvA1b6{QQc{SACJSF)nCFZfn+U=j(nwsv1bW{c_^s@0~sfY2F%iN~2 zd+ko7et)}V_?_xYz1l_>U43=bGYV09QF+f7Pp|IH6FDP2Bka!MUL!2EgDf!4EcE8i zFW3FLyvtE?v|PRF)-PUTziBRJXKBq1r{Wp-Z=9F1ohw1>ueN!*qjZ~N)Nj9{?!+j{ zw!Z^n3q;y!h^4x>oV5cs?N&kdiEV!IxPSMpZN$CFJ-&+?QFuAr(3U%hvlYy2LoWsy zdlLT=+57yz$?%tMccqNn8?koXpNCoK`$`JPljYO`pb$YQu%AWt!{Q4Gyy%?R5OgOUxytz=K0~U+fp`1WTJELpSbKJ-SFBK zr!$1eVA}{h@++2r$9ZX};+>4i;~RkQ*u7or#>2tYoi+DMQ7IN72V)T;5QWF2x_{bB zGfg0=HV>c5Y&Plk-VQ^NAg#jjV=tHv;D;(AzP@kMlbRWq9X>|!*^(oHngT8waoXf( z@fWDQzWKkWN2eiw{p!3tby64`9Zv26{S7|LzzNCtrWydL>nwV`WRXB0XnOuRPGJ;F z2(Y<8!rk8cf6D_<5Q@;cOp#Y(@|+vY7{v;^xQrF=q{ex6Pz;GBaY@?W1bi)w93(X- zRU6**m5OO45QH18@OImDAEP{cLb5o^tYVL9hO79dDk3UW+E0W+Va6|I#{vDUO>w=v zfn>_~I_L(#(nnweDB&_QMb#&}y%Zx^gA_3*rd?O&MsKA1I6mFkqihL#%~nwx=o2_Eou*CL%_r9w^ZRUp5_4r&z?bXfnZP_LNf>Ev zoox47J|Sq^`~Mz@z1{>WVDXa)>RFQ)6rH|3M?L+6Nl*9O zZG9M~Z=_Y4a>|qA+|ForXEL`EGqgF-uP0re(t0M;t^M=$$M~v&G5Zh6B6@Ei?}3HvW7sptY{!K0&HAILz2436dUI#eRwvtra$Iz@gtxN_o2Ws+~58 z4m<08SVM6F;ts{iH&;C(R@nE*xh*g=<3nSX89KF>YlnQ5@kiEZ2dXfa644W<3D^I&l8_cgZH8L$QELgrSizg+d-DtGZ z@FTVQ?7RnCmuWOxfIW}bb8XN7z%o7Sagd(1N+l%OnSDMRhO z>=}>DmB8?tAvDj*9tZ+RZF_o<(@wp}qDzCEgF#y1W3qe#Ef#pLCcOd95*}Umh+Rt8 z;J`Br12I@EH}UqJl z>w(|HOp*6ijb2^kv9s?G3j=<-29w;jK^6R7234GC*YXEOGTT-x-{gF$A+4qg?#|zs z@|f8Alp(O4WaDK=u9$W}x>7j$uEVYGrZDW*PQ+)eKFC4UYY8oQ-C9ta+A*JjdzUcC zb=@{3zR~5*?vwg)2s==J#;!1XUSrgy$WH8<+Oi3D~_7nZ(SLI*BYc{p&J;6oDj4JD<}% zs=kh^>+bUo#d>M8kNYffr+4)vbNBxc<%T%0KMU~nb#dbU#lDfVuOm7?1j08Bo(y@Q zd-T=(wa`0qB}t*R=ij-e_zRoo9R_2M8~*Z4I+@ugrWR&}rq1b^n}}6+3qC6GFq$r| z8_?%R`$LuEmxfB-Y~i9PYuGDmvD)!>Rl$F);O;|W$<*!+I5@1O=i#u+{g=#%i|O?85-pvxU~Ke& z)#;9y;@~dj=2sKzN(XS}sX*Gequ7_s@~#e!zUh0faf@1Vk!#$rz58FcRw~8Z&hlER z2RM%J$?^At)V&3CM^X>yE;6g-{z-&5^0-h1(moF;{=>bECoFMx{B5?zp1B(Bkvi$? z<FdMXnTljRt2WvbxC|PJGa?M9(XP)-F#hL>2mR)$|SB zXw$hjqh?K_>YP$iLv5<1i$uG))iuP<^Y0#aptT#kMRF#?_-EvbRaP+O9;IqRTJO=I zo@f>-B>eK^CULcAcBx2wkGX4 z;?UE#QGG~@3wXLcKLeXR$7sd|I8 zw~RSwUBRS-#%;)I$_;_Bx@3kg32D5PHOU!QT1F_GhT>k%#Q_CzA5oTm+kk2gRl z4u^bP@f{}&Rt#2n4jiR!J4)|1wTsI&B0t)h1~p?~&(@KvX>3*`qZ$rTr6ebNT~BU? zB4TI=e2SxQ<0QpPHJ~g{ql$;5uPuWvx=b&)MHk-TMxddHUp5Tm^Ho2*4VcQ3ZyOP# zFeRfm5yd4pJs7;>2o_z4_L9_HYRwnZtLgT$r}qkIzTBZw`Z^=2L{C`#f$jFS<%P_eCRwo9Z>T6JLey01N_|6v$UWZ)M08 z8nQS3w!|;pt+I8Pkiol+%W$L{4<*Nx;$r*(!QfZU36_;;uh8Q>svW3Tu0+0c@LqrD zoylOH|0Wzp?_BUBXGS*4;Wmp2o*^T7E5&$f%Ao0!WXf8kiKEXv;LW#Zg@;wEeFTb5 zwF4Rg@CaKI}G*GHIN< z$zdAXLI-&t)AcyEXrNL$@q<>U7mlt+R=N{cTbSfdBCSA_|8F;^UaOU185V-6o zw_a~SZfh}5;{-+$Y>3@}#(B2G9^|uv{@77^h$-v_sq0LdKk-@=P`Kf%=Y`otdNdS{ z1REA4*hEb=Sm}U7*63#PAQOhkLQvO&fyi6zIU1)+z<_V?O?6g(tawJ&$e4J+frpP$ zPzn>HYYah_w{!(1Z8%1{(%^Lh`n5fovs$j}>#CK5-3R{2nBwJc<%QvE%mXHydNCSj zC&gRrM|JW`4v7%MMDuyoixnanB2nLufjk$!Z}xy|0A*NmA})7->kVMG#vL4`&&cw; zjj~Lv0;@9%i??cD`NPlT7%#2a4sLcTz+@U50Hej>zL@X?kWnlwPu;l^M$el?7JX$g zSf4GD;&zyQajkh6*=kF(sR;(NSnq^w#{d*^c(`<{M>o2uNl~$d#;-vfwaR5rN=8&t zk}AI9dtWU=znUQIJu=^L)g`Y~5>-2SY=&>^5v&k?%WdwRYGzqsJAZdN{v=W`_z{X+ z;{7&G;7WFfZZoknx>n&5;;}a+SXTWGx<{68J>-oq@Y}lVSdrMWw4<1_#iu^c@VuF9B>xCR>bdVfh?%1}T9o;&+WOuHQ)~)9o!zjFeBwjAo4Y%odr@`r zgcS2LQ|o~f;t1b}WZN_W)SXRhBBbEa{73eOX_A*w$z(N`p6I zuhgaL6aC_7?%Z_`)O=%||SmFI>Gh5aEUAqkFCCI7}AnzGBUpUJcY2HIjok z$b(h@{F9~=WR>>F3bCOPPiwJW8WXM%vJCZJY=Lqno2{)aopZqmBy;SOv`jTiYDK|K zh>N)b%z@^U8M`B&y{N!V(t@$!Bgd68u9-gYx1y0oPFx!W4NL3>7&Fa`u)>xz+_s+w zWG6$;Cu*~j%52kg@((1q>wWgxAI`IyWmx-mCpcMM3aUDzR7H`~3E%nT|HZ+2(Zkin zU$CJ4C|~xm5qp6%jI_!vsx&V;Zx9b!@-(*Ep}Nb^MJCCPL0)9p6X4O; zYEJII+tXs(K(raFG4{x#fBGU758tug1cpLpqipYK6BYu%0<)l1-x^a%3Djg^AH@>> zF3gIpk#ICHFU|P*Fvw{}z5j~pFDL!wdi%2J9irKq<$Or+M7CFE$EW7_r((wS{IZ{= zQV@`bMZF1EY?uYBD=PTQHDhP#kG%cV8cDHNl-yGyw%CpaLqB3L_lan@zHCx4W4l*e zwYC*gUR3+f=Ql6eKwDeVB~v7$lm5h=m?A z+d$n;!X8Em6g_&L@h@{^z*onytv8nI?_g&e0?p)gN_lVVK^&s0SVcC;oaa-oEj1fP&)CXw943T zO{dyt(U`PnY+>emmgG)-QAkRbA3FJB!332nf^xD(2GsnxN{E8SE&Samf>OF}&JbTN zR=DZ<0y&pr(US_X!3z22d#S-2i6-H4yqXl%0)+ms?+T;9it0q|xXQU}dVuz3D~pZ5 z@K%B|7zozydYgzl`*Bs~Cl-bc_A&nxn)+=|x-{kNV4k)}vxWQTuY^HlCB|0+U^lR4cYMU(1nLB?*_$n=CV$l81fJ{BYbR{D8OsdbrEOKC+I< z(QUQx2kH!D>a=32lRo(JN)JUX$Pv2MP&snz2PDmte$ktX#2hWCec^ zY94IwO>UDfNA@Sl1?DhPn&(fx3h;v$rXN%Ws7}Blpt?-P{QDp4vwtdvn>tGk9{wIM zR@?I@F1P5Cuodswei=uG3?nEiv@n$KW8qeq=g6mTrXxPvLTm}Liq9eUg%|UM5PER| zAo_XD)rbZ4-X>1UlQ&$^-vCm~@skpBL$P>ula!|L=7*4kvc_wyUF!E4j|B$?W7^Dr zx(Nzh+JtF&EM`bp6va9I5?6(KR{VrW=^!?NC6da-erlU6<+y(NAU_{vo` z+ig$FE+0#raP{_A;4poJWFyAx;2pWQ@`{L!67{^$%$4W2<~+I}Pm^bGjR%J;lnR`H z5W%XxFuVJ={E&xK$=r|Kfrp_Rx)b+fmuP zHSAVS^COk+#S72u%@vdEauD@-TEr+{z8t*oOLv#}N>nMXGLp82x}@jUZp1?R4GY}d z{Ag0U?Kp2isdK1bjXG!gyf{^myFT~^hbuaowsB0~U;kv*JoqWO^h!r)s=`R=n z>?423voI@h_laz;?_IdMZ9BEj&@&&2zq+`6FANP8y-u_q5TS=GzzouZ1Lqq~>7wbx zk7GxRXHIx5WTfo8|5A8}3w|4;A-~^F32u#n>wvY&y|r?>As(%hyD-k!3*`G>2!~@j z39kd2r}7l(Ahc2S6X2q)K5^nCgc|pqy_uhR&eT{3?VuXi2!aGNE3uZ!&CNx{-ifKS zA%{ZrZ2}%{*6_qwZrg+GMQ#@^0uDoUzd4T+QUhYV-@gSZp;_%f*i_4Ffv&$_Kpk?~!F4P>kjkq`Dlkm(f)vr)_{IW` zG?A6;dZK}|&eUZ^XfxlKe=s|C|=M!o3!A+G8 zWaV6)_=4c#7J5R&5;#cNFE8a<(o2FtjS6gozty)bi10JojJ*SRusnT+bIrW{2yKEI z0=yU}J?gx?oOA^>Re@9iM?VFSFnD-a#l%dnc$meQn6^zX>#Aq&d;gqlI?EuPsc-)= zV{#u~jp&x2e6S8b>!TfQqFOU$q)hKMWP)r57@tPtDk8IPg}28@h4od04hO#X^!mv{ zUK4)-cK=~09}-xhQhPMuUa5@{bQGYlPnxmy{m^VTh;6Cja5x7tGA0=KEove6hDxj5 z0-LE?ZQCbEnlGaMp=^5nRdAuBL(#di_^u8JqS3~i%*NhVf-CIg`-N``-{nzo+IBTt zsgNUS%D@;&qoARnMLL!okOfo$u+Q|4MG1L2LjJUp@n6FE);HgB-w4ki_8hgo{q@+B zQCwma;8Lq~_(O?bG1PBVq%b|Eqrds}QSbXVh$^H;>MBaoy+ev~2e@>9o+JER;HcgS z&VI9(d#Ty3C%FqmwT`>;UTsd>CziBGr>Bh%oSUpV2Dcg95yjODqrabp~cCMI}ukyx=GTQRY18pKs>h;B>n8yIP` zo)e)@_Wo8Y!BjG-g&%k#bb<29iiQ0(_^|OOTWT(nn~6Gf&`ucDeWS+*N{UFC6*iwJ z4wAl;8Pz-*@Cq=Ge?=4%gkD={-#LyV74%~bHMhSw+|2p?z$xX{60qWYuGboc0aEWE z#5jC(_Yit5LUC{aV7FeaCoXX0a=-9I-hp=*oO@K$$O_g6?JQvNAI}`2CskK@Fo?>m zt>K=4X7aTxv`Ae!#^{gIdP@~80Ra3FO%ZDOC{=ap5Un<;p#fD?49fx9Jfd1#FjI{p zc#Ywe@TDi|Kh19&N^4PHg?a}kXV^l9Z+WZ$+HV=Sj^`BPBv`-g$`GmTSPMTa6MMkw zia*-7+U%F+=zs4IaF~<0BDKLE*vY%vRk8g1>^|Whm^AOBscg6cKWw?|6X&8^MAQ2z z>`$K9uml&U=1X|i>NG`q%c8UG6q0{;UXi8|>a;2o>sQq|dSIN+4maDQ-62e0TV{fx z^*LOVy-ZSZKh#U)-lGpV6=dB(Z&bC9GhjqelCkCGowch7>It3j)@E_=6+MdYu;}m^ zH8|}A`!1ewt?VlH{CA#`M@2Gs;I^A4JW2Mpz}o-Qc?Wl=`Qt@i3%iuZrg{o2C67V9 zlZU&g<3>%zv&P;ZCO%v)#^?$nsNn9=c5N=mI|bDfb4qKol#@xTI;(oONZo&)c!gSt zvvW3(2%sMeouIvzvt)J(!+%ms_1T&A(1BMZ{Xq-Lw&YMSOJ>Em9EdpoP>S7hVunX! zP!oiX&xP)o-cN4uRB5_z@ll~vZ`X61M!I|#{@FLa1N5g0yi1a<^wc4Yv1oCivJO*6 z3e9$P>1-^}w`o6oY95w!2qCId4XSA)`sQP%io#t>;e0Eqz6;I{0KaXDR~d^eIR70d z&q6k6MdwQKp6et;*HBORr338+w|{Up%Dq+^;2+L=p%KE#mW8?4reBfuXR8D_oi1uO zPr#Q=+UDTeaHe)J*Gc8MHTFH9)DZ#cd(;|91M4?wSb|KD>D%yDGU{1wx7k;`T~4p+ z5^iN@XSlXPv;?+%`C!%N?<_7@hbiLpo}th8W6LB>33uA!4jx(!BajjxIfkm3;@4|x z@7IrwXQCK7v^`y+VgQB*GGhN#mP_@$8zjK58EmkOlNG zsJYGYI_rdcxxQfvI8ds92sa!r{DWp^?6%mY-N!r5D{1mQI_mdO)lgNps)Kafqrn%$ zfAKtwo-4&5Op&56w3|aQG@i_9YBy@M+?n7-md$sy4G|@NH4XB~;<|k;Am~z!rLAdh z1+1x4C-TQJSJSrLA#`+rmqDVbsS2S`E0xR?PIJC!JFXy2^w(#Xcs4&Sr};Ytw_d)~ zoidfRv@WfeQE~H&foAT-s)YM4e(%}r$uIp*(^lKz#wNGx5wpe$flH>{ zcal`NHf|}2xPHXdttubRo8$3&+lF4}Rjt%yfR!erq9J)r61@zI`1`#Sga*rIoI>%V z+SZ~lZ0HFMOUyx2xuh_gprXvCbHT5ats$p%8nz9teyE{MCefyK554#m_b`Yy`iXrr zd0jHWog@L=jZVn1m7!j@XIRwfriEe**;*Vrp^Myo8$X2Qx7kAi>x}ytGXvb$D}z|l zv0-A-ZlRCEJzg2qM-m=k9 zBg+ZCuqd39&p*qwilu?j{?^euy{5VE088o)pMrUhh26l>a`@ObW;%4kc^3B)FtQ{D z;r^>DrJ2U5?bbn>1lnow%<)>@$F|mV8bsPr9rWx=n$ADdzWJMk!WZE`85&2LSq?y1 zs&Mi}YdpU6OppGfYXw#Lh1;Pxk-$AOneELL4hp2VOpg?Xa|~P%`bPd|jl)Hy$>lf*dOD4d-JcX@?Zlh@5C!O;r8 z3J0cYsRp!^m~nQ;tbP7St*ghFSeqPxBkjc0ITV1-ER-x~Ec$GEt=9QR0EKb*>e_tz z)j1WB%)gpg&Y<#jZBprVHOgX}wyEb!4>J?5ViU z>41TPneN9!8_v`P2a}AP9INZE7;o7e!;^i*kH{eL%0(TDZ2B2sj4D7euD;lqxul8{ zjr=@<(!eHj{*ugdwmv!8NK$dH^e0{P$EtI-O-%>Eccio*2z?^NZKLQ8$vhdC1%hGY z-(Dxq5^&oiyNc9cC?MB~-{`fwT1Wc?ZYE+bQ!4Ut?~g)#fLf8f)Qv-3ae$)tq)xu} zxsC}!50zh5y3M<_KvL?q11&{@>1M&^t6HS#5KvFm`bC_X%z|zi6;)a)17vmQD;5%U z702Eqk$1HV?%~kYT!NZWI@OW#vablBAysmItbSkEQ$0rD@45`Yrd}|3tYS@W*{<9t zYBg1W(G{NnU84o@3rZ>Ne`#S}otNPKZ8qIGEWWBQN-;DlOyNTj0RHd#`N4JbiCNA- zjG;g^hrrjFK)UTLIsp^MCfA!Q$43E)YfwZTNKNb+k15o`YNc5NR0S~l6q|Lr|`Ryu)-UgOV6Szfa`YzwTf3Y2Z)b?_6dplYlN!J*bQ z=5UEAwK$9^ZPHJF0N_eB$SzgAS-J=6EJdh6+Vl_Su_ecjeC-hXV5me_(5!U?{-L4w z{m)(n9tOqm8fLLiP6agxu&<4{W$S{*IQP*v0v4po{Ew^(5oRpjEqOylKt-(GtWO4< zVR4%CX14`IHD_h5wT}noUJZJ;TUL|!WK8IimZJliXkxEWp%?)h)LLQ2B75*@$s44k ze-Q<+5SuEBp?}MX^+)U*s@I*2o5Hy$EE$q)Ltl9%jq6}GY#^nXabyN?7OYLLe?n-P z#U8*7k0PP;8z1v2{^)-mFQz}JhQ%|qrqf{UpC+F^MkWc@$MHDRAYRuA_Tf~~OG3`x zeN=+G?i_%ACTwKICIW3g6edw{AR^eL>%hRboLc_n|NXI%lA!8_zEf`80 z>ZI4?KQulRw&Tlao*0XQ*c3EN2|!f~2!u<4T$r?PSrQLb-#e~XT3s$*Q?jWMN|mnk zY0;e8pvFgauoqBXBdF+!D#5<3Cz?A9Y8c|#K;3A=x?W$x(m3LG)raSEBc~ce;Oju3 z0LxUXQex5XBVU|ABxbK`JJU9%9AR#x<$oXLF%pqR&p62%eeo&rBU7jnV!wN3p(un4 z&K4zo-udx7^JUK#WKHL@r)uN>*)=P6&0phZtQY@N^JsLi)AOo)NB+vDhbkaN=t%x* zrr8R_+s~<^lKM2jC@rRd6vR>|(fMKYEu*U`hPdW?(Abk(s~Yy1*_FmZX&UOug>lkz#WIgFW^@ zf&=mlp8vDO?m8Z_4p9C#_F?W9-m?9Ko;sdiev;pAE(9P&PCZEC)IoD4hH#F98dYM$A79}aW7HQU*-yL$p z*{@0;zo&T-fAT?EOBa4;&quTSB5+p@y^`OO+_~jYY`-`|%w1jxgnBsSDd;@=EhDG3 z(Wn7xLBoHudAF&G(Zqydy_|$6f0c7m2mXG_$<+ZcCrM+0K9c0FkrHjy^qfj0E3SAz z!wRW6tT9mjgG>^c5?wJ5P`1Tf=Oi zs`AHS$uqjmDFs|dmu1~k9-TPm*B~3m`wcGC#{BZb#`p;{5=URs`>^BRDy1ocjHjv$ zJYQPGQ~N1(aSOZ*4sUXj`ePT59bvNKHy2k5=y112e%%8RQ;|$=cwY2 z`YbdxVF{7aMfhTCNkS{DGyZ-);x__{1ATMbodSXaH^eoxpu#@>4{2@IHSz073W4Fp zBCIwyZAzOTL5sYFe$P=pDEa~227^G?*wMXJQMn8u#?v_hS8#;;oDTuy{#)(ScII!x zE?!I?x|yo`$D1#!yp=KF5CD-M1>8*(nP4mOPn%r-v_9`Cc6T5nziCLk3vACBo&SjU z%brp%`mUxRcr$>5x=UoSJG2u=#QS$sd>3CMvaHge83f$x8hIM*sU_}e9 zL*`mGIE57P;Rtp}0IT_a}~kvOLPAp{=b>x4;a!dv?$~m9L>eGz?BQI_%%sd6l^WvRPCyljLuN)KPdXHwq?C~FSl~~P+ z%WK3REUpn&g^wFGl0E*2dpF64Mt91#@jnjQfK0luF_Dixteh#AiWsKJz<-!K0RwKe z1tE`X#65QsyhzZSga%B-SQKg7(kDc{8TX&a`5V`ZlNk8dv=+slH2B^7n`zIZtJ`XjTJ|ViEj-bQyy%@(GcOB(z2x=_cpv@tn zOlA)HwNMM(o@DRxbJ;i_FLiXmd2qkYXApX7H~b(6u6A$FmksbVLKj_egrEmN$$aTH0mfTnsnLt5_UuMI9KKu9HMWgNPX zPcJo&%c_Q?%iY9R?Rv;s|7{CP7*H{D@uyLFTJIZ`-ps&*4(5=q_6`_@wM`T{Vo$-s z=ojSQr-z#c%oS-Z>gAAU?@Pq?Eeu!kmyFBUHy|bEH2OzlOW@7h@pMfCc_n6^l&I#; z3k8!W4~HL@zH3~}>$(je%{Bh&Ke1)ka}48`%}~MuoD=VmsJo_dM13#M_s>S^W|ayT zUNvzl_qYK@;Wzm!e;FF3?7%VSsX7NjrebBYPOHsLGrt9CT5D+rpAa82NA4zC8YrN? zp532kH|_FaYZ`llqM7S2!c6-Ae!Chor2!>&8y}2%(|Wy>H_hAFz{hwp!p(i4v8q3= z`4)1Uw(&m94oLD5hd{ni63}|rW8WiZW)2c|C!J;k^0F-~ET~Zp{0MhVlC+)At5j*k>}r_|EcC zkkU*r9O%<(GO2~wVv8SUgGDhe(yq-HXVXvrddO3EX*XHQllR7U2!POFO}iMl!&{Wx z`}92-Bu}7_mt#K?!sW7kAXXIO(bM~3v5GrLl&YNAa|kv&RicEEn*(%5`@3q)F_!bP z81W=&)B1SuAI)V{afVnVv`sqK6swYV*zNB&b<(`mfKrjan=|EfrB8>7LWwkiuVZmK zELZc1$G)suBbTW`lDuU8`tbs&(kg|jypjMTF!?I~PNvWj%!=>VeXBvT=(AWGmp7BA z>zKQ3?0&rnrd4I%>)^I`j;n5srVdhhK>x>Co;$%HTcr*EcJf?FIJ)_&NUT)`Er4iX zb$7bN z_-p@c^-T(g**pSaJB-tK<QF5_B!2UcAkrVs|a1K{?IA0JSWC!4L)_ zN*U6%4=`qpUZi1bFUr@tZn`lHl58notFZB}(_S(D)XUW@Tb22qR(&4c!Za^J?IB=} zw+sQtv8@OH{axbd6hW6!HIr&DD4O4nn=FMI$o1%3T&GU-1}tR61ERBZXiR{qwyQbN z1&ujQa&NTV2;)vn^X#2S8lfqQaKTH`x8NLMZ9`EWH98p*|2t;b3Np4kg(;IAimjIl z?lQPm_+(1-q2V|!!LZ*F$}g5aC<-%H#evch?xiVjV5JTNIG4~pJy5$Gee~OE>emb} zp#jiuS9q*Rur&-lJZwb4+(+6_tHKrjCA^<-rj_D?hr%ylU5#32HL8e>Y9I(%HDg3{ z=7Z2JO)+*Oao`^QNcaBWp5o}MJo#OG-2m-n2b zF-tPbOQ{r9k=7@Ps}R2tlQk@@R~Exn-#lrSZI_ewGi+=4p8KAB!-+ru9iW?1+P-WxcVX*G9;0)P&QfOht(PW+heZNWO5 zKx`)X^qh*J)Y~{ma{j7gcF)&nm8yeN`g@fPP-Tk8IV-@_x3XmF&G1>gUYKwrImWdPv7X?t8PPvjm%DZkxXee=lcBxEW6a8DC^x5*y8@ zRguzqcmWBe49o_p^&K0_UCYuDuXta-spvX}boM^0E}Ow%Wh-`vN(2Eg$&VlG3wFJ6 z55=QB_YN#C1f*&?5HMkee+n@mYReQFz-)-khOC4H>UXD~U!!`YyOadp(y(6{|APGP ztLLES&zXFLy?D_TmPc-b3i1Hk1~W6`HC{N1t)g<5VK8I!)D_)>{m$kl9#06}BTFoKBw z%J{1@5+~&Yaab9uGMrvY6qQ5BgXY|5>hAWI(So^9u zJ1E-~Hqy4xg2O!xbFJg5msIia#un56t#*<%z0r7JDgYwvzAeMQu%}pWMAaNl=9Ws> zb&tPXHeME4aUbm59OEYC-7Cr1g42bq%7|uWK-|k-b}^1o(}#)NmB`>DeKC58rfNw} zKsig9(^_cBN`nqSLk(347R!YRi350RUY$UE!WOBte*Ba!32pEDAudCWNpH}Xsg9p-?*^ioK{hV zQydE<-6HQ`L^x-+RYu9_rgxb|avpvfk4cSy)0{!>K4`$4@fvNW#H00ei#zZ7Uc@?>!>~Z5zEIPgU&0pt3&Qne@JUw?E=WPbwk-NfhFGKLfBq9f&DG|6>m(c5-n_eOq8~W$GkmPUAC%&405J;F zWK~FDFZB7`sJ&;aWgdYAhP2GO$Fky#|@ofN~(t?Y(#y*Km%y*sxp+LK@oxWItfMY&fad zG3eAb9ygTQUZ*=uUpC>00ewk{;tCiH(*B@dDK^S4dEzPqDU-i7LWgFR(u=}HC&wD% zE#jPdtNLU<<$C`u^K!(pq}Edov})+n(H;<10P~FKe`vl# zy8~1}aMJen2He*~*iTQemEY}Z-)6jeetydIF{s7DyVvux`&%<|1Ct7Rv9vpX&F3{IC`2|3guj?S!JzQGXq(|Ugr_)8xgU~t^}&J-^Hh>m|TcqVfb$5Xca z#BLdib4_`ZHEi^zHcJ@fC=ItzjR;U8Ulexv;6L_e%q~dGXn}S{m=ObLz{sJdyh+ZG z)KRi91u+7r^`+R}8zLcMiGE`#EAn*4hf9L5FK?f}R+i*-TiCy`X9h1;1>__M z5fa21iUfLPbCd7h5f`XgVWRv=FOh{LU{ckc{YXAr{4?o+M5f@t2_xPv@!B=fHJA5S zV`-wN35xy*|@ z0J55GepvSBrBTC@=reDVj4_x;4xC1j{S^x2WjS~N ziZ4%r^XLZZ1GbVwfGXj9#MpmzMX}MOtv>rMp~e;3EAz9_o9>6EM13SDHvDUfJPfKD z8BDc}D3vNh#9!%H0V*&(k=#=>!KiXCEhDvzd*K#zYwKG25UrykcqCg4*+*1`XL0?2ZhQOrp;he{ES8r>!-ZXT10NQ#vl*sZ z>^R5qHAVu}I|B%wbxw|nI35aMq}~nph5$+GLlwhF921@r(!mw6vlwAsf}{+MJy;|= zkhT@qg#2Pnf*iX!kP@cp$2p0kxE3Q~w^|K^MVN;2C zm!)kWES3rhvNfYjY&==t6NY_*WveB^tPTA9qPcjQXMT$8laU&QlcE;#cfL#ih!cI6 z|Lq0_j=+})x#+qQcty|39@6m_TczT}fNG0A%X@3|-*zs(e-K^4HF+f4A&rr}-}a?;O~9 zt=%to|CAQ`Nb*USw}RKU{}NV0kMJm-Gb{o@*NcNM3UD$E@hIbtfMghj z>4$5#R-4(igsc(uyM`xwr(t%(Iz7DX9i~)j_#Ap5Y}5kpS>Edaq9uHyb&mGNbaewh zFTc@AadT~X%wX@^lH3lev1JI?E~fXXh2aRs37f5G$A4!TCB8PwjHh;zCs?L#-mHH_ z$g+D+zvNQBY=eLJu1ZK_T#HP8j3eJ#vFCjjEM8(kQ3_7;q%)+~s5o^?^3SvsFkkcV z@>i-aKarij4*3*awWb9F6n+NR@>q|E33(q*E(OC*{>|0T=1}iqJO4*^0LnX(1PRix zn_IhiV=>PiuAcaCfjJCTzCw>(hcm1YAzNG29Z>|XWFwk9K$5<;Fz)<`o4nPNB#rGZ zG%o4>CdBKQhnvTkOK8z)TZ^;@O9_Nsi#$pxdfrY$u~>5A)xb6DHZn$fNcg)gfAO-e zxGx*Q)7(}EQZa(3WI=~mbYg3cvQR2}QT_)vNRX(mbq)Kt)`-WvEwyYl8 z{%Gj6TO6ceVbRc|OQDr%$(l}nJbtZ$jCV5+p?sHYS$72TY=F)x1djTc6aM0$Ru zI+_9#D`+qJhcmU|rsX?B%Yqn3u8KOv-l}5}JUOr+*@f)BosGYOTC!h~Ye|-gO;VzpeDi?(SjOn0LhvVi!Q`;zMNc(f>eQ#)Y&`^)oD)x4@+${W?hGgS_fRQu;K zVe@ydvR&uFS$~oEEY^b{=__Tf^cA^a@UTSiz1zD?#Y#uASdRP=sp| zq^v=0638i7ZTsCvFwe6|DM*>alPU&vGsA~QNRZ0z22%-A0$c(-@1yJjVv{T8F$Zr) z{#_wxO*+N*$4JJ&q_D!+seA@6vg#n5!JNFp8<-t)JI=t~WZT%a;>>SP#9jQl?`Gd8 z;={jQ=CDdKX3FzmSeoMu`W}fD%lJ~`(WH;95@Z~Qc!G{X4K(*DoN1NI8NY+4_2d-z z1gTQ@e;|LGPxTn45u`H4ba9k|4CwjbdLcJaBqqubM%GySv6_e6oZ|5C;KYf6u# zI*VJK)b`9seHps^{(_|w^kn=IP7hY%I&oqoJ$Y}^v*Iacmvs%d?0gk-K}G4q3BX3c zBPHJIH<%`S_`Y-4WP%O520gWZYmRh0*j)_XSD?%&nB(Pf7mnKW$v0F2mgQ*m5STo- z?SG~*KKh%}&FgV`pN`g(3w8DDQ8pBo&&>?)oxQWR{4yuDL@OtNv5Aiz9MQB!eNE!g z^xEYqcr`)fjN6x6b+(lAR-X>0(mga#_coJ3>Z;BcTT~_h>bOCV;LknrNpq$hS}*Ym znwS0ts^RZ^0ri}=?4}WHGrwa@CRD?-NO?d{3co(*eE=2m6F9D9W;fckak^6M1ehwaR_DLf!0KMe3l2H` z7b-A!i$Ls+lqA5m)4$gd1>zS87v#Dipc{?{T;T<7m4_scT|O*Z7n7b$bbqS7rbiB^ z`8oPN8&dtrO&+{my`NpJw(OCe=*SqoJ}C(`G^e>L{-@pu725rSNO^44*`;<5Cg7Sx zY;~jG6wR;r_cD`NaE$x6S5)Y)q=Oq=bLysv5i-(I{wQeK-{z8XiKp-pKjhae@|hn zIUc6+)bsK3e|sT}cQP+_hSTEh_*K?6FVaZd5oaRduOp#-ft-|B?WGVCV^?ZZM!QJB0#hMac*Cj|BIa@R=TnY`9pe0P)WW$XA zd*iOaIP+0PR;WDr@MUS>;s9g5kpYs4mcK`V)S;JLWJrDa2e$G6h6UCmLm^)I7}OG( zX-dOS3QjF|MH6fQcDc>o-pNJv7#0Qo%8Hp=yc(S=>N`tBDvFUvO$erM=zjnAR?`?} z9LR0%*Le%Cy&gR9&Jee=g_$ntbGtl8f+@qMpLYaK^Mv#Z)vV&K@!QwCb_NMo3SdAc zPHlJJHI#`oF2~ypAYckx=Tf>dvJg@usQw)5?*Sn@6RhWFtyUQ)6KH?BX@g*J@$Ur2 za9wZur(Cg)-mkj3yHGT~Ege^Rtx*4R%bUc*uCpddAM376e$FFPORFkxBt=p3S^_tx6GUV@h;v(ZqEjPEN zt`&M!(cq+a2p58OP*)bkzlAN=f6K~w$LxQQxNK+E3qT`I6<=u(b_#rKqeSXzgT##O0?9~_TK!M(3r01GPcx96sP44Z8hV_OG^ZIMfM)`>BfbL4byrc}K1rA2Poa`J91uybX4aa@M@P}J7jMyRhv4MT>p|+#q_IdR(ARZ?Q)=ZDf)6Z)yGX8MAMagB#WBGa-gd z#8b;sG=lK-0YT8JO0rjdKoF99vh|++*d2yi6X{!7U~g*NW`#1yhQtWh8?a)Kc!)9Q zN1zVCN&eq;@WCcOgRdi-ouzc5>Rz@hk}CMG8dIj%n?V*js(+T=!O{ZOs}Ffn#Q+R* zj{!ebX1`1}!fKxq^kc1DHKq?cWp!+xnlx>`&Q_`=xs?$l-44s(Pg`hxY3AZkC{;Q~ zH47iRMC|&UtF)Jtxq59zH!;a9)<-ffyKy8y!5+?~m%qc%3!j<=z3{0gVoX1x7k<8U z%irceBqv7L>io{xs^zj0oq$tIS*~xZR}@(v$m(xq2>3UjAlH5~b7%V+jzp|7C%!!q zyUKiNjB8wUdMqo_OC$@XeS4`&zKLNXnjHXb(e!jbcO=&wa!HrxJ^Vw}QWPrH+|SKL zOhDoRRjJPEi40@scgWB(r@LvRow_-hZ2{_u45_}m;1}yq?f!`y+feW!*Kw**s$%$A z6FVwPomT)n=Rd8r(1QN&+dL1|?ym7Z@T7 zHMZa+;N+GRAM!l)I4OfCb&Ly5lBt#R$LmDzkrW46Zp70PAY7BR3^8Vfv=GPBW*@ie zu%Qm`=G}lh%@1$8=H3RZaHT;8i+nJg=*Q!=@v`Hv$XIgJ)$Ju8?#cu*oAghX9O3u_ z7H@m_;oi@R_tD(-Rj1SM(B-SU&cM$EA1e&`|J)vLJzabd%_4->%ofXa6z>dIoveWA zZWSAY-n08)wX;&*uGGACPp{Yz!t}GRn+r2Cz-%!j!_7&gqsGT`Y(BJlwJDq${@X(e zxzccQ)i?_EzRDqQAcE#@eWx*56k2}bgwo4v(wgjcdFo(mz|bVqu5%NxA^?BT@j8+X z6AxOM#k~#I0~&LM=f13uqXB3DIQczSit5Cf)6QdIlj7hl1Ni|_#K+eLg{@ajOo+?V zv+Mvh?F#n{X8fFrr3J}l{ql*$=>0>W1jCnQSx$vk7s$P$>;aJ@PycB$*aI|7oZ4ig zwp0hsLd9N|Ui+(tb` zsC~1kW8&^IkS4BwyLsjIULv$CyUEs+6Y4Zo@p-4C;lCp(Y$!lB^uI^s4!8cxhPx8&lYw01InH@elg2j`3QqH(MN4X zgEJAZt3l5n_wc8meUX>8t$#KslZsEpJADJN41(gad;$V%Nh$nE`=7WQgin^+Ahv~D zbmo6SNK&uUkaRaQ!N&PRNZmzE5)S__`Sp=<_$*ESwCQK)Z+ZrnQi^AtpJuOdaVe(c zpcTk>2v=!$hSM(#X%b{?$h{*Fwv~-il5^awK%joye0qNPThd9I&Dj4vhIFZmK!;FA zBR6|D?v>fs6EyB(2=pI7TA1^XJp5A)vZE{z58gZv-az+DT`uUh>j;<>WYIDTX5^$K zrKHSA&b8M`{YGb$LU6ezH$5%gM`V1&E+;=b0!%|1VJEsszV&gS&2S&s@ z>OJs1hQ|ZW5>sePZxGPzC2yzfcdo%2eb{ zol-B6;gVhnu!M2MmImLzpzsNH@jsyCuI^5?N3bcR%eyQIaKIQEmf!Nvsk##ZWy(33j~~|z>!~A@LC(0f+%#0LsKU3{@(k zTUsv>Ix-m65K)e#gkO4 z?4AN_0AJ7Nn*a}?$`7E>jmSX$$15T@xn@k0%QNglyIX#i+EnqB8yJA~*>!uG&8=o_ zT0RgO4MMY|K{&gT&01-E=-)MYhQYLWvlrPZyXTXCRPcAUen*)6gTf zT{-F-i=tU7gNtAPa~_f*Qhwqcw!A$z@WSOCmWSgbC2FP2^AzM=Q%8lN502}|q1KxePkpVP{PrH<=?}j>LkC4~`+nS&P4nv$o1x8@%%C$7Jq__(J=qNJg zCAq87t7;NdtlCN~!Feim)cRZTLZ;_0-eFkS%wemZ9ks&L zS+>G+Bs4lw)(_HQgN#cUa*Epb>n&j9=M@#OX2<6RYKBn^_BWK9N}>!n{46GoFAn`! zM}M8q=QqaxdC>gugx}_FrSl~G$G*8wlKm;p{$oTmpPvR6MtsDTi1$gzuo1xtgM6Dh1QO86$vEEyWm|e;9$3c79~h3YRlR ztd&wKAC+@c1@C1tu^e6z9@PKTfUXV2QSO~XhY(4-Ja@n-2jhjAqI8)qu-g`1YS8<> zgehbR#IBv%&1A$*zb%c5DJjIYdR`3jtK>&KnEZy1CDnIBNW2*)fL0%Hs-PiN&Ia2V zR`j_bVFJ{Z{On2#!tNE^w@k&p_;u__&CSCd!GZELl;IJHVjd|sVTxNW2&ycTk453d zTitD~uMWR%O?`ZX$=9u>Uw!e!O@Y+MT-=|@Y)GTK9n01{(=1<+x$GV@pwyCiakJ=` z`Y0;_e*Ctk-3wqE=cegP0U{qaWabFY5nEVh(PuAB8CT;sai7=2k5?Ckp*TleiQcUE za$Bc3{i@L3bTsOj&ic@7PJ&J2QhI)?%X1bPx*GV|N~qz=xfV`!LI9iJIthp=>8%;Ygaf3Tjo+}K@XOKhmO{;@y8O_Tz01*A}8(+BL?(Cm5> z#IR|viDz!JMQhqir%Sw1H9zv&c4KBCr>5~X4qViH$@HQ58z3AX*VfN8yXP4OE7;Km zu5?buBvhk$A~fbtXf7UP)_=o#G3n|U5CYXk*U_40W?Rae^dr=}U1!lB7}*{@AS6O$ z!%M+JnwgZUcowZ#vOEF07&1IU)t-Bx7oS|dP{gWMP$=3Dwn#1|`S1&1z(>wUN-);H z^EYq_F7>@Nqo7Gq4Nr!39YY&1*j(z%b{#i(IEsu#{4Tj$NoQz; zhvJB82P(8;t59+A9Jw`=w(eN1n3TS5Jm2VXqy1{9=I%$`$acat1+nEA_v9y7{jcBZ zTBIbjGxG~?RvtI9{H*KEh&D#F@=AT!Cp=cg`ZsXDsmou{9niYwnWdV`yoJQZ-WCmCMEYocn|BY)!B4y~w6(}dh%FGQvh-Dg z9avrd@^D4dv zuJgZq)`MB(NyX%@I^`g6y!gb0;xGYo6P_0 zJ^Ot1KGgpj1!hLM5&0*9J%M0!`|wh?CrRE_-_*S24@Qi z{B4u?CS=BA--?E2mV%PmaT8bQ^ZXuWZ;znAGf%2qUHm~=o&uRg^8t!XZR`oIdvQ|p zNmef~b`L|{-e>-h4QTG#R-(Pl7jymluj;U7B){|*q9_of^zRx+;<7?p%ac+360B-t zpcnqI9`+M8{^~Qj>iRJ2k80+0E>ob7Djzk!It1=>emY&`+5WKU+Yz4+@Ihcca(X{gX@IVr1fOD1P*Y~AkoOz7 znkm8Dr<6jy$(MQDN_8(MY7$UfDr5i}>H~cIyC#b@cP~ct%*ci1E&$UCpCMxztf<@- zvmXf>Y#RHds1Qt$ajAYen^I@tIm%M&Z;8);Y1UsmyYxB9rhpL|tkIVw?4t?LSqEfXV zu7&@L#PAskrEke3r;ZJSsZ}U8I2N-r%!`eug?zImrM$zDhUu1|#hlG;qm0_lQ`tX4 zr<4eQ1t#4zTl^_#X@1G|F2@AVO4`72lM91t&1iyi1uAYmsl`fmOF{a?$}mBWu4hsY zljb}0_$5%m5RrOS=BecGA6h1wR>CLloz|K2ywLhLLUm$r(%7<5sdcz?hjtznSK<4(ASb zG_kVzxFjUKN$t;)&h!=!j$4`jyq+DtQr4ONw5yF?6g>xVH-A_y=VxihosZ?0cr6HlB_3zJ_k|c>nVI!( zx=F7N(UzjUVK28*s35aRj{(z|GCcPOkH4&L`NwE>b^M(gxhLtmE_L}!b=$)I?hx0q zIL==#Jz!ASvK}4iz)5s$c4+ji`3^iQk&7h&Z)mb%kNCDk^W_}_1jTmH6jYqxgJ6us zU~Cova^2{g{1l&Q)kFq`cX+=dN4U`4PT-~x_Jixi-5f-9WjjyyTM!-3gJR}H&>TF! zF1pI)uQU9i^`QN$#4;#0`&fPoQo?x4L(XTn8xO5%FBxP;lZleohpEu0Mu5tT111(h zq)y;t69(A%^lmyZ&#TH>J7hnbugX{8mb;(Jd;zkcPB*-K99eapv1!&fRR=k6t0tse zp?HDb)blfL5@NgYvria$ddK}g*UsSj%pc8+FS7mF9evIhJia_;>C8O!mij@xqQ-$1 z_*tsHdMBz6oMj0wCu}6XYQ3sppk?+adBogzv1)XDv=~y+(Qw%mLYa{S=y|`w$y<=ivySmta`4|n%PVSg zI};#|Ov6qo{eOv3{k1TzgON0OB#Wib_1lAoo_M@_?@8~dONYVV{=P?N95>%AcVbBLTY3|b*PURHYc<+{FFA78)c9io{Xn zwa@^lNYpu8=}O|x&hPJ&nzZ!G=2e&Z9k)wGrb!pN{u9tbP);+J*aXd|EdN)nXIs1u z@leLgmBZBD4jC&POC$^HN0C{!hko45?8VN%)QzYF8lwpWtuND<0>UnoF=tq%WKAmxg{Nig|;T9sBTzVbPv7-CqIS*<{ zsib{wMv;Dj@Z4$;559if zr~oJq7FNCR7;*-E%_5d#1n6Rjg=ITj7$q^kKP{@d5E2*}wS8cuNOUs!fm{knXNvmZ zeZv(){!odJtB6$nBN^&k9#k3H@V}fI;NN~}DdpqER8i%>T;2(%zpO8UX>sGfSXVcn ztBCrW_X9)mCcj3`^)r3y#V~stHqRKQSBG7TwA~*)-)t`pOu5jsQBNg0#3U6KP^&U9 z{;<{DX1b^@d(1aY0B&aF;#xg|DB>#cwvNO?F%~;JY*yN#%LpA`$Cj^B)ulXCDIdp! zT_wIpBnxE{Kb`eX8B3&REMlZwGp=~8bUPY&e)zHDYE210hHM_%1Haou7ewMwcIJ9_oP%$gJh@qSy82#YLb@cdb4h)W?o=0~@6ZScW zPF}KS!_}}FAP`&*EU9m&z21i3dE(}P_5!30I_$Dv195NR4ec~T#w@zk(4h>UBck>` zAV$9#y=-Y5GR-wBlt1rVHukgEC+lL?@6mFDc&D$&J{=~qD9rr^f@c$;^&p%aBu&ji z(5W-A{YirOE3_2Kq6cgN2UCIo&%bBmu zaw zC@r`F9mu; z;W@=aU@QEvGPRqN+#!=v+@3{J!J3A2b--m4OKn8l;mzb8@zP~8Wj(fr!z{baCf5dv zAs3t+Fc1Pghe&j7@%g00hkPvPMm;8hN=GM7-JTDxA<#==L~@KP?@2^az?=7rl&nmH zay+|L-SGHXduUE^TcF~GHRHP~@d)xi{Gt(ZJJ@PoE0vqHQ)JYe6Yw=^j!fu(ju@+0@5F8G%mRWg%B+K)yJ&fHiUjtSBNcu*LaFvfs@3ZmcqA0VURgtc%3nEo&HDW3ts&1d>w;hQ2 z@v?7HHMS{VcknH6L-VEz)1K73K^{3M*U_@hm2;bNr^vjEF%Ue`CSv)l%#lkV?(wk- zH8s&QQ7^zZY|w{yj?!&SDd%>RjXlsHZ0-wo9igs9Y!~uGywijZ9-YTMTqun4uf{bN z=-}FX@;MYzcjF5(rAJhiMe1I((Pu`K(_IOz)`EA1am7B1VDCG}=I2Vyg4bgXDG?tJ zo@=UocxKlouAUzeE;dMW2CFV!;B8B0?5sSMgFHlm~T9$!zx{Fu;0qrUPHv3rCf-G`NIJVyx>V6$`CS^UN`WN zI|h^iA|?$#hjsHU4-=a~=6~l%`5X>0uMU`NxlHlCx=DHE{w4_Bhd4jz*_~Z3E73(r zEQb!{Mg$#C*QLz+i7MV;vyp4;&yCqt@GVcKP_V%O8h18eXiT<}DpfysB?AZ+NdQyO zCD~t*pwL)rnY5F+5h(z{;lBoXJi$h7^Y=g~S3TD^22jQ2xJ90e>0H9q@;xf`_jvam za&P-y7SI(8d<@>9|xtyn7zSWf12R4z`wyf($fyQyi2M|JZn^2aUi~S zrnH%PaGm-sk-7W!=(S}P+rDe@A&AhC5a(_zmHLEW>g}^0F8frT=?<5*gIH#Ua$5$~CR3{t zC-Vz?$FEE|BApE`89`}(B9hXYuq9kNLg26HFEg5|Dnw33XK=G;t`1uQd8&dcx=%{5 zKx$78oYQ*F?7ujtY0W%1n_49BT40R6iHlW^zL4@8yD)a++c{F3W)+?2JkOcmEAHxl z21Q|?d5eSW#AMtRrNb!fg_%TSVVmDOs5#{3Klu(m7HSX;PUhX#^~SKXzV5GYH}rE8 zE`C0$dC5ZN$h~cMGHX)pQ=srs8tyleE&ntkOSFxT34Zy-fTYO9Z=8zo_4VIL+9#cN zul7YrgoVleoLnfoQ%vcVn#?j0ZxO_Y<%WoQDeP0;0fGsld z6u@kKcN_OxTh6Z??Gq(XxvMCAt~JY%jwoSHN8}u1RtbbiciIPo^io_cTsCbGo{PF85>$Y4zK7Z3EC~=17A)lkSQVJFM zxG(xO^bd~3ppCUB#aPt_z}86b5~94{=*u<>%P)O^KBqj;?PG`*txQwpVtAr}loH*D zO-92f^>iO=AV7V26X>^+P9}Hgy?Z!Utkk=K`6CpiTfhaH)loSvvN0<8;ZJ?gWRVyq zw7fUBy4;X8sM~7e@Nbx0yxR=qL$5BWGD7UzdDlLj1c9P&QV(b&zgYa?#UKLjdjt@o z$E*;=^3TkO6q|1R0v-zE6#is&0o6J*dO|C*6$UdxEwy@74ZP=po zpX}(B1N?0Xz{R4ELoKl22?y;yrJv7EST|`h{?iDYx|gaJJTMAq*?V%2rN8ySo}#^d z-tUl08v+YkbR|~Nu?G5?`mSTGy~Oe>v~d!T!(leyqzdq{twN8&H;fb|Kg1OeKYJ4e zAKz<(e$io(M13j{=w&ahV0qmEHt!)>PjA7HHYDYj`bg&*iFxFX(SLAmOi80#b2X+v zC+T#J9UR?OhYL{o+@q7L?sC1V7qGK8NIg1PZ57a)BqoAnS_Q9Om`?$**05gyGno>C ziU+|b1M3jS1n~svwD~ddd6yUcji1G}eM)WpvZzAiA?>e{W)K{Gi=uF`%FaFTCA4<>VSa&gcw^3KO#9T$t+e9s zC?)QNU|1IuN#J$KtY~h%zSVMLMYzS|ujs#98 zcCUCRdKjnZmf%@hW;@=Xc}~}`xRt@2e9qlxkqv2vAz`IX7e>0=))4XAp%4O>gZ9BE zgt9`_D4w1j1(Sr~Q10-*|Fy}!*Y6I{mT^{$lqf%nk7{{zVJCn;WQpFCM4l09@Lad9 zf1uM?*FP0BGmMlzMqhK70oeJEUYX4+lavUXuIotncjMe)lT2f6<{j|rWc<}u_wii8 z$j305&_=&ZsL*@X_Xwh3x@7WrPKXVCp!OZlmg)yL4sgcxa9 z8l{tBE(B&~awqVwRP7~Sl+EXNpqgzoPb|l&Y6n`C^QViJsi;O6M#64v8G?3xguJS_ zg8B;V5-{;K1p%wM?-ymhDkgzb!q5#$F$erX_Rnty6zICx-P`J4h5EW0e9|`D^-1k6 zn;zRtC=4jCe*wKt?zg^e4y8Bx2|c7KV1Oe}FR0tqH;3swH)*U4w??#*5A+mZxKV!Z zUfI`obqgUC2gNW*G!Jhm3do*1=nX|-IN82fH!}x-m6`Q03#FG*Ykd{7eCDN5qz6Gn6yV0sOZZLKCiBzDN3xW{MQny{Z0Qh< zgegUOxcdUUWf&MG8BoaG%VnH%aXbd6A~Zg5$E9DBI^R4FaAVp#jtI!394xUv+I9cXPEPB>mGhqx`1TKeXG-pR2@2UzG6j6| z0HO2alJC)ZVtahy^%YX=>(OtB`hB3>5m@V+WpeWq3&<#tZ?XB>5~mA61RIx-K>x}4 z`+w8bB32u^{KUP9#+|CftqHGBJl;G8#MVd81YxTjGmgRp?;p&jhQPlgLfk3naie_z zt7P(Z297I{`Cpe}+tkWL)c0ZC8?1czyQQf?JHMiZr!66cHe_Ry88jf1uhC@kt`T7Y z4b=da9sz1bfWw7VBFrbPVgwF9Yz2DU7SK>t{Oz^`VC?AV9ERPEo4wIm zqseS?Jf?fuOYhDR#)|g2{`O3FM_cf8F}y|N&%Y^?7>64sf%fB2)49Agr#W$uRkUMb z*^$)C8|ZzSAfrcii@|e^hG?n zp!^*E1O*+}cE{3;pCuw%`CPXa0c=3?qTJzucpAjV*ZJNLUx7P(Bn^L1Xu~a_~GS+t8SKh#fEXB-j&9teoRG#DHu7}HHG>!s~x;A(3w-H8Du^oe#{-L zs-LL{n}zP4y*aAwQdiB|59?e>odP=QBTn)y7u7S|G9N}14Je9vHeqp>_y4m41oQq)-T&n%vLp3k9=(n%- z90{x==n;}cDNe@2nxWeU?|CgvPita5T5_dPTIX$8Slj^fH!kh9`h99IBAiotu6A0L@!sS-&{8S#N%Gj-O1qo5RB9slCA=%RF*%GBN;?wO z29#T42im#{m4_wn@ini?Cf50rUpun){v7{5SpbJz;hy^m6kNGstiGxa>`UVSl2*OP zmMN`LzMYJ+4x#`D3}u-s39C|;KWRvv_J}%Q>G|f=ncS7&hyML~=LWaC;w*V5KOEJN z23>5d=j|Z4QhQg$$=uedg@U36HG(fDv5QDN!3G%0=jLUg-R6+>h@L!Lr#KGD}}ia|W|wa(*DpZq40-({fg*GQv>UZEg2H!hb_x92a~u zM73+ns1mAj&mN4nf^e$X92$OCFAw^Uihsz<$X`5OdZbn>^@xYQvaiT}hI*SIY>nL z7{>sg4K$%VY@T1hH%cajO6p3_^Z2vz9HB$aUKrTX3TE-uwrg0He|fh7)zaUj-Fx*S z%%BtA^~)<_!H1OSg;k(@H9is_^>C6*0)7dGu`RQbStuScPAQ5@mq1pxSEv?EXC!>k zF%1z;(d<4`U=`JUa16^&MA3g9HZgz4jn|Tdhm&a8m=r2K&wg@wo;2z=>XE-@Lx-_A zQo{c|KT}Q7@{hQ^y4OBKd~spKRt@9K9bUxoCWJr^Mz0PHdo6VCqXx&(o(3#)Py=01 z=m8--7+_9BhqX_5Y+?TE)4Uu`V<+qC5OcW~PC@e!w4K0v5K;IWf)nO_j__ot23V$c zqE~nUXH~mG9w8LE@!>pVj`d~TO}RzU&8VlwKlOf5SieVE0kiHSw{frZY*rJyZ1Oeuev8i=VCM#;LaHu7;&hvRZ7@R1Xuk zm^7QFCe--}0q!qMJ;as^%Hb zw+ope;Iv?Q*&(Ia!Y%=4ba62IL1fWzBILH_qq&S)*b+zEP0?~2Y)}L>+%SLevEH0e z->6WlgDo?=#T-4@I)ooNp*^SDmsr+tVJ9~#N%XlGeE?Q=Gx{Zv4ZnC$B65clk;yBR zi_aggJzsv#b4aBL&4(R$^N`E~I78@7-cFNpgn2T}O+2}Ai2fGL*1Pk>GOOuTlW2@N zk)$$|*d6oeTQ@L5&|+f+o6&G}pyCdLGuc1r z9UF0ryJitdz!`vVu((lhu+5<0zT}n4k7<|I&2KX4z8eb>?C`I$5k;bc=7^w>+|;D85Wr7k?42RulvT{&StSyEK86lr$ zmN$ewJYc$F|Hx&8h%=NtWU$98fQ&+IRWA#Vg9wn)I(J z<^a*@xEH3~s=WeO9_K0n`?&G85=f?6lBk9T8M#aKZlkm<2`hnvQo&0n(0qnA;jD}Q zi5;kxte?FG{TxCYZU&YjFqbLe_51|fD(DSWBC!N&ND8v35a@b4bybo>_6GzsXGXuh zGKyy9A1Y5chx@N{V}4CBZQZ;Qo1JOf<}U52BX6iUoe zJ+ga~QUM)Rl7!=;o&g69*!$2Vt}&C3b@d0B;VJ( z0{W}=e`xTU5k{8{5<0+d3=CX7?40K`^Jt}?8;O5{7$6Ffy`(jkR3Fmw7J&E4UFL-` zKM#OG7mUx;CCQV9tvGG>HB=Iw#;#pC`d|9oAxP{)Ta)+72h zSbR25(^Tj0FJC9E=A|_#r7@?oe~u#fnty+pLFy`(%8KJnn zuTEl0oT6^>ZkIP6`k}n^r9RW{|0#bJ$mC785!CY7O`j~Y%ZKHL0&OCm`+%Pjr2Elm z&6ytj*v zAaq!y(scy8pHeN$p{0w0^2Y3XdkR15vps9@#^hB&!ZDv<082k9!`(^FDp!$kDirey zn46z8R;h?_@AScnghc}P@?+Lg-%l7 z@u0Rd5r!JmhrsVV1Y-cDu4SQ47HbM!Liul2dpcob47i!R_lsj=47Wo4>yN2|f}yYg zvL`$83VE1HLylkg=~6@cSLO(whgh5E>SuxkZ6$*2ECljeFHGJ#sxbSn`{E3DX=E^a z4O)&aFLrOE9~#ppj&C${E zqLt*vPa$c-<>Z%L7Dye)&pKz*_`_ch4=6O1q<^Auv;GaqVc}L|N1zkb?zlP!zP`=* z?*>M1*>bX#7HU{M{;h82xL^fzqy?*hK^xQCV6eKR2U?fCu#IMOYaclqL*2R5$53VV&17Ttl$JDM{KzvA6i&1go% zg!05RCJ0zIoGya)npuSsGidG(S+dG&V`tcdK6{roGB6}ve}NeB%2PZtTiZ(-V|Ae8 zE%L43`N1dgl`XQLv797jETv~qb)~m|ea$I@@*$SwVa#7tdl+-R*bDa49IXVZgmh5D zFYdGvj&!|=Hh9?GR`~$GT|jx}{!B#G^A3RWACe@oLFlGNXJ`{P=uDA3%A zY2Eu&6LXv0@hQcNKkgyhRA{mP^7ac~RnW8Ub`XFg9`%D6!&L;}G1VIQCN$-d6p~{y zjqj-7UYTx6c00t87R}x<@PuEJe&8xYr>Z`{QhGpYZVX?d+^l49t?qQ|C?AlrZ*FrZ zwRvXqoi!uB3Ku}tef=?sV>4~f|Dx(D1ET7-HjJZ$2n-=L5<^Q4-5}jaO4o>jG)T7~ z42`r>(jXlYlF}ueL$`EyeS^N=z3=@$bI#stul20h&syhmNT$s4!pQQ^Uq<_uen1n3 zpM~chiZ5vi_56q5-C%iG)zN2S;)%MuJjeVhw(3ndm!SG74V{+{2!4KcsbpGnt8~h0 zksW^hB-E|#oOmviyK#0gc#$OvvWt4d(3|FMD|=C3>UCAI7;;XPr5_Dy2HmVyRX(nF zOM_DuN*VZ1gQ#UATQ+S4`Ck_T#6!Wd%RY7FCj1)9 zlnVuY{W?1Ta9{FT08SF?G5mFV&;4VW%%#@+$0PSSiLU)L7w%1)S8i-8Z=7%#p0htE z;x^XLcX>$hFiwG?bUyy9NDFrJC?fJsv?p#RALr!s@~ulV3Z^fdEmBG!5aGU%@g(U1 zT@sCIuWHW-X|H+BZQ@%t#mnp}F|^C4=pdOy95oLQ}M+69pYapXW6fz84B{4^iJ__CN354mnW-N;klqb3pKgNR;+-^e{-#!PVp^ z`VGA%Ar_T~jEld?4>}f$#eS!u@uLUmE<8w~>u6`6Ma1oD%^N?6b*=tg6&vKT!w&e; z&HD96)qqRTxjgdQ9TvJ#Gz@sg4cEUqS6iZfHh11yxc{uby>In=?pI!koNarbi)R6q zX;Gc&Up{}Ss4=J#_v+9f0Yyx9@I_cNo!VHY>Gtrp`E$PK&6w&XFV>QzAJ17pM2GWS zS>+zwII>$V4lxf&@A;*z3WfQx`*7p)XroNiw7}l9`XaIt<53A-d8lc*3ymZ zqdwJRjLYf(Re+!;-B3%UF0rl8wy{pV)GrgJR%gG&MYbu zd&k964EkKLF`V=^h1}Y$#(S*WFW2Js!WgxXndTzsA%`7oj|@}it92)q^1etzhqahjiC zEX{k$gNrvJhU^Da;~6?$s)|cbpj-RS*g%P<^ZO}fHxc_(kG!r$Sji!>!P@4G%uns1 z4DI$>&UKHf(p9C!&fWP#j!ELn$JRQ+%T3M)zQ!YRMC+xAa|TlqozWLrDR{0C$ja+6 zSdX?h7O50MdKh`Jw$F`mXsk1QHu>VxI@Ri3^4ZLmFSjqBq(|?M-7!=<#O+}+!s03s ztjjwF`!W|Aa^Y;{nX=#bbR!J5l;+l$B0EbzwHKSs=ITQ!t{!=6e6x2{*ZuyOp&6Zy z2NlDdFS_H*J7X%AZg`^@1p*G|1d|!YXFrL&wYIs8^fe=6IRI@B?jeb)I8`W&!!bzG zmf$P*t52^=q)OZf?0}+|6*8MZc@U*0!Y+%qir)VGVV$+Wh^ghaV-BYffT0yxMAi>M z9)^Lu!W-dxwULPt!=aI)1@g+@)IKW+b#mo0VeQNN5UnzoVxt`THFvi^oaj-WXC^~I zz_%>-6lV?0b>Ds-9SvVCkxO}g*Rp4sklIrDfmAG#8a*)+Vbk1t&COuT7f74ytZd+N zv=5A_UVCZx+NaF$+$l-MveV&Q1kXa&vWYs}m$8FH+Vj_20(Sl!2JI({^#Zk?-U1xEV&H<2SOS1IilIaxv;N$lsZ(v9aw8mp@sMjzvV z{ae&8-wDrzSplxY@**Z{C@;%pKqb!n{i~Yo0r6LJL2gHH*~l3-2ETGuY)QHk z3bx>A?lNS`{91T>VW-w{?v>^Eiq0BmGcb6MVlk3ZyxDi=Au(dm6rwa>6kK&3BSW)g zfNA21<4F=^O;VO=u{C~J28M#klbTf{MLpfWG7LM^_dm;WpPoTid#=qE09rtQXL>o# zvS81=5ENM1Z;!~az6tCUF`egSMb>`)cNY#Ac?{-yU(uuOu7t^A6KLf_J&UKLbE;Qi z#rD}k&wWlF9vwXW&OooVqN(U)`M_8M2>W7f(*p??qxZg!vqd!lTGpWA?rJ?df&^8S ze42m}U)lq6)<{Y&BE(wG(FNQO1~rXeHjmQbTfB$KjC=@n9jkc{Y9k)6;PuNQ_rl_2 zxnbYMmBYWvtxM_n?!=z_qef85z4IdsvU~VUU|@3I!%;IV)C*J{`r__jsx;63sDFBt z&APdAKn*bEH&8xRK6syB*UC`>avhnjVDUu!pXUwu)q)nYk87S6wJ7V?B`sD5!dnyj z32h?ib{@n&vdLyPaS1&W<02P5ngtV@#Om0vwH?Ryug|fWdT7hIoaU)FEP?BM)d_CV z#W$}^X~83aEOa|X>hpYzmL^%U4-?74cAyv0ZiTd%eZ&m%Ow@eUrkth5$MIHBJ0C! zK$+40Sq|Umy$_&UQua|#uDE@3I$T`maIDbxHR~;UKjeD}Czro38Tbw<5VT-Flq$#D z{=GM~%Z!T1$}K*JrJ%a1r(jaEK6jJ4W3u@Py3V}9H3qWv(UDt&y}n3cZmE*Qy5x)8 zc5m(?8%)lNOfJ}H?cUrEZ{V~nWw!a#qbG|&Kr6h>MTJA?>JotuCsC|nRMAD9DXri8-{b$ZD6Nb=7wZlT7-BODrii8%! z8pCR1p3Nz_reLKogzx7sGZ6Ru;SQ~pn8d8`ms%Rg^P0gk0;jn5gl50l_0O9RxPNxy z>iX&l_vh}}Z$AZJpc*<nhN|2wmG;HFwai`DIchjGL zLTW8PQk?VH8&QM#&HFg+$M7C2HrHAKhfymge39>ypy)Oo#=FU9=5dBMSv#Ly1xXHe zm8Eo>DkQb_a%Eigc!H5%EylVi{hL zA&K<}(m>RoHw2ITc;_&Ix0t#Z^<`)tCXa-O9tFIrLQwlP>&qD%xV%~or$4+d&rnY5 z>nZH%>k(BE(@Ms_Tjrk{zUt+LD4PVcLz}pr5S`c~ zKLM0pVp1!0Q+*@7lC@hdK;qKz*#i;E*KI4*fJ zE@s8FYaIo(XQh&@xKq5ICO;JSh41Sra+#-{vdTB_3ZE`V`X&b3iPh7#Ehx>-#H3Zm zD%C48WJg-;wacd{b!sxiU*OaZ`Y_>b@P43#H8YUseBw>E?S(i6Q)3}2Pu(X^OJ`%V zy$**}JW@C|EGOR_1`~~0ZiW5gx0V49J)M^exDNI4zPOU~CUXT@0s1cHj%JNZ5K8mw zqti}(I2aq8^J6ndd*Xfsq#Z$$3!6quRN;s+c`*Q9RI?mzA_axeQp;lTwH#U$R z#MK7yk+KV~LAQkWe4oIq8!Y|2!ye1H=ex8W&pg`}Q^(2RxpLCZWY7+?-Wy)1%Q)h?BEBAEGYRLd3Hg!LgA6lmo-^y(vaL#CD@Sc-hN!@cotum*Nb%Ef z7MRZH)A=|d1>z2-^K~PG^-q^4cERPb5eJpxB)b;$hHVCJxSUm*ur}`bB+s`TZ#UVl zc8d{>t2CvS0L&}{{Ay7QS>ztHKcjR$RIlOIg}#K+>G_kDi8r%P2S9^~7}**MpCpKG z#CU|QA9t%kb~`(yrl9^`j!l}W<9$`TiER!^+os!p5+0yrhdV8~Zs}526G~g_wO&Zd zVvS4-=;wkbdV2zCSK~h>0sFOQ7l{uQr}<70d-}ui;eyLQAGfI~0ruLLJU-BWJXNFH z`EJh?5lxrC%W)kf~Y7-dEBRVW#T3fYpYkaYHg%6&T|a|ly-wVFUk8&3R5&UheVvH zeQ{+$JO`w|n#c%PO@=6ovFlIi^*7V&HqI=ngkZ?u!>6I5?31h<7N17 z$d7l^H>eNMgP0paRa2gv5jPT#d77?_XS=qCvcIu;QAtV17^N*n^+AhGQUYmc=MU1Zm)Qu4Q`soL1!v`=zL z+6rTF0`ctx9lK(v(_yLc!qUm-rP@@5Y+KC|KvGU_=KO9YPx1#`=;m^_b0y5TM}`F= zPK#4#4<*Fcq9~x}XGG8dKGW@h(>fl7gA(9rQuCM(>X}D!gfh}Fe1SCV^if9Ncu#uW z5zEbwPF35will{G3bLfQG;Cj3E}W8QUMxtnE|E|cSbJ!{w*mWb;JfjXbU3zFf_+j) zhTl=NZ{bQfP0EC60#&^i2cq+~sk(`&(TAmhFLr}2ve=%-9G3}Evu@I z)4D5)J@Yx(^D|2iVx^9e^slOh}X%G{$a-3FCA z@clH?B$~KbTH<(g_aJ9ygyn_!en2DTNouSnOORaBC1|;E&9W&MSzEJEp4RzmRO$GW zm3$v$!d}K7Q8lxQB(n&5?4VUpe}UR;y}3+&cNPQ*3@IbS8OplOh)BPp%*Z5O2_XJ? zl5-twpW?AZ+;y;IY%EPP=E6Z(@=_A#EJmewxan-_NOkVjDA_GY&*0)?)0VvVNXPfa z5ZBGQFAcHrWf~=&0DH-X^g;7!dGZ!2L&_!e$d%lbto78IoRid=30ZS-1P$YawUN>g z8Jion2|=W>Uj8%7q<*J1)#6|i8IRU=oirB^ZWz&!{>KxXHy)AS@^*{Uv=c6wBa=^; z;HMa1fe&aoTjb+cSGWGS0zMUjuw?Iu09e`e+p|Na)PbO z)iE|MvF8Nh$0gI6{l{pz$2+@A$({!nEZIB#>rv90D=`%e8=~qIoKp|F7bmk%$>QO!`i zn#&SoJ99t3+&y;sB8N!%er?__=>2t>P%&;MbzN>G#934}W0*@e3`vge@QOI-Af{XK zeYoqG^57{uyy6v{XqB!lFQW7LMsUz_cPiZ}>33;ogVa|MU+F5vDR*ch63iGN2!UgM zqYsm8&lGM<8nWViXJ`Y2A0r>MNxf?(9e|YoRuz>VYJ$=c1p| zGaQOf9_#eJY0?ErTL>Fh9ei*wAH!|6TMu+d3z;Ke4A(vPoE_{ECS7AesPWa00CgI0sTDVFQHF&VZJi5Z8dZyPpsXs z+!3b1PYvPBAKyKsJQ-n~7+n^DT3E~0S(C1UWLs}^#`M%M1C`od=(%hQtacv8Bd3U0 zGsllv9Cch;PiHY7tzX3SI}!4lS(v6W4(zu#DXm|H>H5VsX!0leotmSSs7D|f^SFL( zCp@Q!q2d=vr>ZFCSD6^j|7X#55FkYQ_V{OC0Uqp5^v-4Crgh*AuIU0D+ZhawD+5vh zVOrOsho}3ca5!~q`a~NTm})9>hWfsHh#1VXed2xzKmUoIt0ajBV9Y%kGD0ZKw^<8X zUuIZ#e7cY(#-8qSRpVKGdcvDLoza+(jni3LXw@+mZ;@uuk@hx-A*3c7yR!wqLsIoB zWl>=M88Kz59-CVH#L!c5IX@tVKhRkLxmLZoQ##apA9W^1d1Z(Dh#&69b$U{2M58cs zXsQxOoasDd2V3c&_JuY^sLs2`{ic4zJ3%tw>F+K4eo?+pGVEm)A?X<3UOUOgPNFup zbe$84(Yzs$U?=P&+;4@2smXjdR1$M_`XGBI!a3XyI3^8_zjnj;iU+-!Y;)4$W!-IES+wN+He>xrQZ(j zepKL&-FMAD&UKO+u=BGS6+bYK`y3ue&b;to8B;s2l z3l;`Q28omDB1>E?P7Gm(DW=IJ3c@StKI@?Qv8jBgil>CqRF=$sv!MONz1gxV`ae6V zK?A_kMQ=7u2t_Dv-tqWOq!KMxomEDCfRbfCqdvC)Da^pQI-AXEXW2b>{0m}EeftFpcI2(Dqy^*(=x z+Wy4pL;+Bb0e?>ei;5xgV%|juyWTjt@`bE^NvN?r+!Yzl_HqcfJ@54J(e9Wh>PyEu z@)zh)tE)6&M#Zp7^SxWB8ki)%&jn`zLxR5B&`a>Wi3VtD)%Y+_4rI^qU~6-bBtmmRsGRX!Y^f_HvpGq!eqQ&9+o@M)`fGYFXuS&{*X%gU``is@uHoS8_2%*YLi-&zH}nFbLyL z)s0=s`;NG)SgP>rto8F_u;~l$Hbv9nK)?E`Gxz^C01h&eG$DFqTnuMWWAkAIRdD>#b6=4LdlVWsXV*-dBC#C!!OflLuJ ziORUIDmBuT&~&B4HOJHPwIhW@k|ltgSv+jry<$a$ss8udITvbiH7~2}?q2QM$V6Gg zUCziwup0epaF7`!wqq@hf6yB!4OH_;)~uJD~>%E7v*s zKBocqMF|_!PbRdAd-#P3s?3H;dBBQR|NMFFl?c{XD-*qR7 zosgf(DNWcUbrgc5G9?O%H)7PLcSy4A8Ein}g9!GOt1Uav;VAOO zfFUeKYUxWvat}Q*KowcJRzSR~uyYai{*^I#YM(=ceCv2G8BZffM{1L!6LClVyQXXC zz{k_0hAb@lu~qg!w`Xj~D7b+Vxv$X91-R1^6sGdUw{CW`gU-}IPbMZ0Af zK!K@QD{OdD*0(Q-eWY*dUP@C zM*z$~%VqA@?XyGMXq=;ljrli;#0th~==wKX^SP@0Pyd0d2y_h-%~KYWz9o{DsP?4e zvozsC>gI)_jITx<+~B9;l)Y!B`sz6+BH2$&13(=vdOX%0lQvT5Zbj?xD}*7N7%nJa z{Hv`n8F$4+%wZ8O>8?bEE1_G%q9|D9i{*M;WoZV*C0vGS8TkcVqg$R1N&tp^OjM=o z2U(Tb%3iNx^~lOgMUP0zjj-UdY^C908$q684D`(BHa#vh3PY~+hwMW7mF>c0qJI*=tw9F+K&Zi{)L2Cl&jcpQ2kSSdoW+%dqOUF zgf|Xu28|(wKqNzOH41gj6A*cp=D|?4gfL(g^cY$%7i!Y&Bra@Hq~kCVk{L#27Ch|@ z?V<*ESxUX^P`dQop4!tG?r6g{o3>M8I8i|9ww+!RnS&NjL%(MP2(8UW@B-+=x(2vc zr`bD-e+_V(LILrW$3b@T&6cvVK06$WSht%d%=4c;RTv(J3Qf1`gqyenQCA@^O=ma}M0Y%Q_Fg>ahKiMde0RE#x0z2Q>|^Vz?v7;)>#6jq_jOIg zNvR-=u+;2+tZV%dZ(n(Wvwd}dE_FSq(jcRFtgtH^ z+G%e7+HoH9bFAf-os#dbnO4$dGlN#pCd!!SBCwt1=6xbl!psAQ-Cck8 zUBjkb74h!lV`RJ;{CVOf`>(BXmwX`{NxXrLdLasNrs!`!4O69Vyp8)3%AAUPnJfaF z<%q8=46k%}!=nm48IJcj%jB*=X7GSrjL)6;w|z}XhhEDvADfDyEUByh6n7KHiKj+I zP_IyO2Bb**MEHVO{^TH`7%K}OiSCZCvSHtEKN!uGNi^@L#g>V(tTJ+9K@T^G9vy`B^%9nyhpoCaxG-#d zw_;n6?H%Tp1iMA2|HS0=dV@?6 zl`w%sY_Q8C9BD&r0iixW?{9-7@DMO2ZaVJrr>b)&k#u(l2lXX5PBcP&l;PD!dA7B# z67rZ^+S+<}Ec?w?>+`3&Pz}yUKBni9ah9C~LxCuA?!&`0jzx0?EkE3Ug%F{xjnGG~ zwd6W5puLvlt1`_MiJ1$H;Tch`q4gp@O5QXqPF2BjO|{k@rtf8SB;a0#P)2MTX8u&r zzfji1k!SO?G>IpTZ>~_Ln4O+ThH>8w-f56ed5oz9?mg=j2%3{?vxu(X9VSQ5ET_6s#$n1T68fi)pi!uUd~MbwjD@E3L_l&Xd53|{mjcGt2ZW`r0=VP}&H z<>s&sJ+=}*Q&2oyWa>_waxcR*5)v(|kOn=?T}=^&e~9!kI3z70FvC}C8qaQsKCmYt zq1vJH{>=n|^H_>e9&do++n71)t_?xpJ;E1l3htrwIfdGVR7>pk6MNksIGZM`AiX^1+c}Xg^`=1V5xO-*0*62ccC>%#* zBuU5Kd3RfGElI)A7>+WmfYPZ_TT1ZXa*7uwaFh%zlWmeLtczNk&n@xIH3(?cM7=tO#oM|b>yLmm>9Tynp?|7YxDfJ<=YK!6iG|f4R73g7zUUW2?OcE&`zd5Fra|Z zwy@*w$HjZCP~`feT;`4WC?tB5JT_aHU}$WwBroYeVe0N|ern@GP_8S{7g}3uQn#Xo zJi?x|%?)uH!U5TUhi*{uPG#(Z-sun`>Og^2>gY|5+*{fLNBhZ8@}6H3K9k~!&B2xk zy4U1cw2{aAG%2SQ+w6vk?AB7Cmh4$F!bJ&>R@_L{Byv{kq?MS|Ly#OZBi2YIsBF|d z4+3%fWC_&nsfG?LX4;Bu^C7-8HzuLC)&?C+&N*=k{22?7z3JEPosRy-yFO?X4AYUC+lD(rl&N1Lw@fN@* zZhiFPK^_2U9;g$dJS*FiuX3lQo{(o$iJzDi6S@{du{X?7g64%x{y5hmOYpbBXwm#K zlp}K-pW<$@`2+0*JE49W!g(_9>o2H8**d*>k(Wkw2NhL+g05{cKR>Y$W0S+gno$LX4C^~LDrIccpXT(MSaLMz)o;N<&kG?9_6M$4!aHO7En_k2AWmejb zB*==imm3MKKo-^pJ+HU*Id75S;cC}yI^L#QK{=3}N<4=<&rwOSc6?Boe53md;344Dng_SC6tf}4UN z=;Fu5#*QI|^~5BPP3e~lmon!iM%+Iwafi@{Ie-k&v$Z6@E384>A*GOrVP2R?lUAE% zPYlHX-ds!{Q}0$+q*wtOo1Lh(^LPljC-PxWo8$YK-+4=w8`J|rsaff=Jzkc5IKuLo z;`u^)bG#=#(-k+;VS-C6jx`pAj4oF8sV^ouo7Bzhtp>&~?r-VtFI4ORKwawHs*!d| z{p^&>UV%U-Hy><;%EO;zKSk(8Vi!||mR81Gb}4HvF9$>tze~6uzPs|5V`m*6;W1OM z?pUSGJ-WO}tWlW{gXyHLj8!S{Z)UR$a|XG6=7{*YA3s;z@?PhG_08!Q0ro|Fk=g-A zS@13FhW*v%r-aksBa#9~d5c9{o?I@Mb@yc8G3B#$M<=bn3sV8I*WBH%T44~86UXN+ zT39p?7A3%G-E}^6M)5<#Z(a;M3ZktXF$pG{V-Ql+aSwWhHlS87KC|v6Hkz&60a8(o z2S@wtWQk%sF$D3Ia+MgcYIk-I|2VwOaQ%`;wx=ef>?AiAZ59T9A|y~$jk^5hs;#n) z8LL;S`DN~jp=$Ao{A#L05pS?Zi(N4BsvHFw)5aqV*@bg-hNy_W&jQqc3xphg#J`B= zilEBXt`OI^AX6&SY=hf)%bwc}|AMo%O13#kV@coA`U2r1?1NZm>i6bMS7D7OnNte7 z6*Q4T04HPyS`<=ws5Z9EBJb6+mZGSSALtQ}aQ=-3O^~1<_Bhpj(*DQ_vKfdb(C7Z; z<|ErxRN%=pN9&duAfJ#oKjBc~6W2E9fcvw9c#-@1Wh>2BF@e7IwLIGUTG&D=dYh}t z*|vK$fS0TuAxk@Qv!ZvKo7sg2jWleApBL*QAyK%bU{M1jT?EBc$`2#Alg&Zk zsj=DK$hKJpX9?~cb(`u|en_V|Up$-~F>uSc);IhEy>PUA}TVI@+L7wjPR!x3Q#gn=HkilvOoY*UH|#P`J!mwobG$O~dj9#HG=QII*gw95n7^#F!=rG6gpXdvP#bWOy_vTJiLULZVrl zZflZmbBxv|ektcaX6jibO+Q-dZq-dV)@=RO!muM%x%v`q7$n0PIXre%s=FAE47TnK z>t6czHYTQmGVq|qAE)Cwk^V!*%E8ZOY@wbdr*1!V{uxT>ss*pvu=H?urZ7TouJrE9 zJh&#R3U5RjTc?H?Jj1TChht*CHClG&_*R4jZDQs75lzt(r?49nZ14)MGt5aAW&?Ax zPD-lppFy}5-WWt!6yA9$ST-pLO?V!9E`Hu)v_IdS76M29cRkII(2bebEAsfUT6l0; zLDU@LG-v3bVJIX<8tl&jy|EYO5*U#=9C>szXcM4}NEdPAUoB>lnO*rbAiRnkk7J)E z(z#@p4nDbfJ+s5T+OetbtU9NCQJ3>wpF?GM7qMG55kxp2=jnr3Pgzf1S2h$W7e2M^ zSRAmmCOTbInIickm1Z8~D$G8Q@*qS*crM}^Fr3^BYS-V_7OWanWE*bJ8(+MdvyT;4 zvgZFny6gAN0-g1+N6uwi5K{Vj@8{iR34+er5gl+9gYHD3>O(Av{n}M4et8vGcX#TO zHg*`BEqaxcxQF&ILIhuJ1v(o~&U)1)Ue3EPsPFr6CW~5=gWKC4O1BepD*j><)1COi(`ANFhX%su`PUqUR z;jVtm+jxj|)0Subu?Lcw=)LZB<|XYrgyywsU%f-i0(JYWu19}S7xsC8^-8d^@u?RP z!mT;V;ez$Mo8h0E+`qcaO!e}~S+q}&G~)-#42G6R_V~6~7f>$si26<1=j55_Agp0e zhI!Jw8JVt?FP_7ueRwf4K5_-7*~d~-i!d5CnB`RnJ1ne{vyj(0&D(;0nUtxzpt9^@ z_uC$9lYZbRacxCEB0-FQdE_6%sqq2$+#T8z%4~=8kJ-6-^Yi{~Es)pmqLQ1>bAvbcDhw#+~4D+Fj*iM}tqYm_^!KtOuzc7Mc`73Epd-Gey@!}`T#2Z3@;^`|* za)mYt%j@csL>x0jrDjRc$?peHuE;A1LP%8L>a=&)vj2X!wq;o9CXS)3yIy2vp9yml zi^qu5B;JVDlD=cwKzZ%V=zzfyiHb;^PHoe`!Hkp0c*1{iiH{vX+zzJ>8#H*FMfDtO z*#uF3753R3Jx(Cu#m6KBxBx$0Owp@m(3?FCg|vFWU2A+P$I9sE5NzXobtn1`nQ29-izC@JLdrrFCMlU<+QB``?+pZ zLrPiKYP>z)rCIsDhidAI-gclK_yyBp}nZMlyNE^)g_C>-QIT%4|N~I%wBO_Lvr`l(3}j z4U)DnE0CJ()Zt1bkN&Z4bY9Xx60~%*loE83T~_b;)E>wSSTg?%ul+^5Ab5S&AN9(t zyPZU5^;?_P>lR>Igk4`f6|Mff>^1&r%4@jV7GpcY7hvI1xFh!mK_Whi@xvGI>b<-; z?)EFDyz1pt?gpKh8zjIWy7{D0VcDt705~KIJW*1w79ZYlHkI-b&zj|Nkm+xV9=?P! z9whYh2_e&@R*yFke=%uSmNJOR&b;Nv2jJdNs83y^FulSKu@(?7H65ObMf6G19LKWj zHVe+!V`W*J@_|~V<^F%orU0C$Z$DH24NLe80sL+@J0$VhcC$@F#bdZ)AmNcCi?i*z zSLEqG3X5H%$|uYxDO$qRr}}&Ht-y1GA^Gkol5$N#O*6l7KC|ZQU0LWMISG6(0Ax2f zdl-j~J@>Z5BaRZ;krTccjdCjh1^*a~$8tf%s?)+s^Aqt?%(1dqbp#%y#-WMDRt>@X$E^LfkahV9H&=S(vW?e)o6z?5 zn%#ZHSau;(*YyYGtz;Ob8aqgmqtWxASLg?A(76-bpr0Iqb1_`{!>`hOEHG^G_O9i+ zIO?y2ezL%z_s_JG2kM);$g51({$*QAqld9*7F>C3_DVG6k;Tq22sivDA4piph6TLj zAG9HN2so~+I}~dV)rfTQaWQGVw(U7fuw`a2tKt&-!I$&SUhLy;-K!*axd%MwC47!o75QZJ5`?D`MWM< z7;s&5_sr|&#Kc7vTRt&9W*K5diF*+3`s_LX`%JH#+O=AhG@);E>BkZj)f;b9pgLNA zG}MM}f$9k_XL-Oqt`y-nvv(Lrpf;Rf?<|m_3JJn9f!NZNeGjc_4bS$mQa2_IX%Vy~ z)@12bdCaSwE#;@3JxPCy&i`>~#Y{sMlKylPxWa~6x zf_W=0CTLMR;{Sc9u@Aa23hZlV#m@%mgIggA8OT2&_+S699VG@-+nSm*IkR;7Zn0Rk zaXS7b?Bm}o={1IH-&wbaJ3T8Z1{i>TST+@0s-hw@T4NV8p@etd31e{%?x>NmmJKBqdpD)6OU;L>% zssi8{mmDK1n7+u7Fp@gpo=T9jYa=VRS@SaGiTOR{H$SO#X_+DnKkibxA_F*_fK$c@({HQC~{s0Gnki-r<6o z>22yCP2J{2O_)v#+@j<=alBJ3I%S!;X>ojMq(2ZNe4mr%9r9 zaH-6@bEq?u^_L;_PaGMAoGKzo38Ib;q!=cYb)hHkF9@MYZEa6@m2t95UHb5kENXB7 ztYvjLo2QIODK20GU3u~RZdjd2Cbv%!^BXa<&p5pb6|NRMhlG={62_$1X|Y{T8NF7= z1~x(4a-9DTK#+VtS(Hqn)F(nu^&PX`*UQ$DlkVw()jEk0r;(cMW)Y<+6%@%YDphv;8+CZ|QSZA6hv(huKg$hpX;j4lA-*7iSGP-p~^2vL`9i96AZ6SON z0OEO1NCf-<-0l%@;606DF&P;Xit^5}RXC$EB-FS=qVbeCN z0k&fnwKpnwuLg1lejwFrC^IjC=e@*QKG}^Mnr3M5joeHH&Nk9d&mLEg*c`@mKD%n- zX}470sa!tQ{jc4L0b~?V9(+-$mz!qKvpCWaR#>dteynl9b=4d=U`jUdddju$-x}K7 zjb|Rdcj_J^X6~YAZR?PHHl-CWgm={KAXsc`>Y{$@)!*CrpN#7s`0Rk}rLfrLhRI`~ zd7ZVoe`B`&jlclJkY&{>(yMpO2OAlj zB1-2smTqPnU=}I%yAo5SsRX+u13FVN?>{AdI?s9gUj0@!hVI{}E(SQz6$6w=dH4_s zSTOC(Wf#G|dBnU$H)-{B!|vp=UB3sIg-Hz8kl8X(lXawzN*3}KlCN<1*Kb zUG;#OQ~sH%xgqa^l*D^XXTclvuav6cxxWZQ-rmoQb&0&*Q$2-&R2oI|=SrPYpY*P3 ztyUN6$IoWl23Qs2M~+d9E9k)f`!3`kk$ETdnZJM`P1x>pV8|=R3&s%*;r!lGIjl@C zQwQd`+L%ira7yYx5+gU%G5FN+hai-*gX(^QgIy=&ax@7sVQ~N0ym%+mV z$%XZ7^-cA}^yYx`zb%8(FI9{w0#^CZ8|YT7NeCU_EqhJDqUy|Bm=x4t9q?NQ5qGdDnhpft~K??xe(5=9^zq zs(YwQ-eb;cq8V`h{*exWXIVvvfv*THn==b$z0Y66|2Q>qKqJ})I>k5j`xs>qujV(o z@~&y#{HfQAFq6XuIb`yYg}uIXBlEaHbjQ`v>tLk9=CaP>M*ntAm6!j{s_4>UU1Yhg zv~IwDy82#Q)#>&ZV(Is0?)M4i@Y}F0Dan)Yogu)LXRIzth*4%EZ{osg`*l29tT4|; zXpV>bKIW_^{W15>qEK$*!b$fQ=XY)uuM5-5l{eUI6C6^1Pnw$Q`w!4 zZyN}~ket*fq49{>_Bt-f2~0{!)p{8?833lA-?S&Rnd6fZOkMx-p1!j=N02B8*vfHO z`$ylNBHeT)JZ$4$6;2aT<|u$FC*M4^1BO%#PZ5=^X^&$evFB!m?rx3h*e}laj~qJR zI;Ojay0Z-*Hw?UMC1K;0z`^;DZxGVqojoqt!667}3F21~xv0iJh=C&8B;$j%r6B9ox{V3#+S01-m+hUJq9Wag@( zpb_cjBwHnf0&aJzl3>{D`qnCrTrGBM%m2-kktc+L+J?IHA#niW*QUYHnM)|EFH`#R ztTCsL7}o=yj-CZR`c*Fr+uk{cL=m5{m$0mV|7%Fb&j94ZrPwUJ_ewOW4mc4Da9{xV zHSl=`c6z*}7)Iu5ZkWjMMB{FU}DetG> zXal4FOxEJBPcQoar~e~7yA|M)l+M~i`OmHvx+=dCgWgPZEuoT~lHp9SH#8V!E9%Wz z{twD6v|&(2;Zkj{=X*r;prW^d6m@#E5`OG}3d}NWBLg>H{;`?`S@fE=U0L$1kw3;m z1Yox89YRpt6j_}xdid=Q&t?3mJ~&RkJ3n$iZ_D6O`ls$<73~YKh~ctUK%Q)~AE?VP z>yl&q)=NThamuAP*mZRfST7I%qU2_etU1587I#9@Z`Hp$OELYU3N|mq{N6t{*ZOpC zuyEiv`W*1eKBCFxq!lc3dtxR`>}M$nI>P{e*}rz<$6Ab>&tuDI2tNy|Lb!wJ7K0tB ztdLY$11k@0J!N;~x4*G&RYg`mk+X9uEBsWe1po06SW?p^}>_DZxy+A}5lf*pVX zc)fdk+%|;v_>t;8$hN=D#g7?x$vLmc&i++ZzQ=UEkmJ``lbT{eoJanF_!|n8?D2 z57sx#60%*t!Q8#@KPd5^B8m9;9YTfCw*!wRouytv^7{i=NKs58MaR8oG1ow$?*K)V zl_q;{Y*=AJR9n<&fy4%xpIPvW`@4CGkM;rV+b6F52_9ISkPj1SL-eF<&X@HYqdA<6 zQrCNVI%Jz{!#c^he+TYC&a|DTG}pCWJw<qlMU}0I1T0CNmw2jRF7FYR5fojCzdGj&J@6r;a=kfV_>Y3XK#OPvP2!DMi&R+ z-V_@rfCw3_ZMxR~eKK*YADcwSTVpBacRu}f1ZT>7Dh|(`gZ`h;GM4VCEUe+qzw=sSTrkK3PryT>WKpU3G2Tq7x~o zu8WU?;G<^ci%5*Amexvu1;}sjCw#&rpbuRd!aNUQ%!YXjapPS2e9?10v%!PZMCxlc zOEoKvNgJ`HE39%90``6yN9>=>JJY7KDsVA4e@94~B8c0*0dG%{zXgBD2HIfuqQp0) zKf3RpgVY?U!hgX$zUVs5Il)Xrn)LgXzY1&*<4@}Fpb)Ug0sP&`D7&T`bd(OfF8AY8 z1Qy$}W!ZF3&ox5Jpw)%-pbTv8ARAf7;uY?PDq2liLfx+2X)bKW%!nE=-D%!05IkXc z5(0*pLJCH6H1-VL#M|4~)!ug8-P}LAa4W~Mv(a_gAj3`){U0}@j z(xnD;Uej~>_(L7&6cC0a`IN_UZ}*+*Qt9>XZgTRy@epHunW~ZDxP7LzaErb0=I&=h zhG+}3-Q0AmDg=6?J|hP!iBI6-UN!i6*w+TS%@4xX;4yA%Qiq}i{Je`6T)a$qHKf%F|4p8nZ+wPBDs=2yhQoUVI)L`&^KuW1=PtrOTA6S-( zak}I zFN7D?LnAy$TI5-%FCtc{Qz9~bALx3U60~dFaSD?BT6LrXlG+0)wZx&|q964gY`f)c zDQ#XnC8!#MY>?*TO6IE9xz}MQ1co_TaY;Vkjr;w6P)e`Yrx7|#G_7a0l|mw2VEMD{ zQY!b%LWX=`pOf$iUV<+nXwcqpiLd-9%2ik&IdTZ0Iw`Zgwudb~qaz`+&u4$YgYFJh!b6K3!H- zn0;%@OA4%zaS6+t-hYR> zw6-nsSLvbJ(HzAx=i)`ieFwMbcr@5(QPsu2khw7zA~&RvUfNqU&ELvY?!z4j4b(HF zG#);9*1bcD*0PdM={o$?Y5m3#5T1|4c8a?aW3py0Z`zcBF)M}gduM_`@SQ4ie02Hy z;)=Gn^4wAj(8HSPRj-1OdZ0K;HbYARMznui;<+9m0DXm%Rgxc$3WN?k3rIXYBBDQ9 zKkXcLl-T?n__RUQ(?z4l3?-S>D5AccEC%bMm7PLQg;7L8e1jgct3h6@bq6>ey1N6``w?rf( zi4_}j!ih0nm-hblq^%JGu)QRGBvGa>of4)jK~>;Oas~q(U=jTvdUAv27E-;EIoo+* za48H7n<_+9avMZot`JVHjC!nSNjg`CoF*{d)pikVmkVar3^nf`WK3C30!JFuv1j;FUYuhr0kasq!xr^V~_0a-P z52@tF*G1?*{<~i%{mr$-)O^@<>TnJE%B1P)o~*Yq+5U~smM;w6 zJ1?1lP&+X{nJ+AlbLt$9{jlX!=R+M4|Hd#ccm3^ORQ_MU;E59id|ZIUs!M3K$|V-8 zSO7{X@gByX$*U8;cA@^@O^k(@ll_lRcCewr7*`HVIG|o zR9Zvu z zUfGMEH?1+%Q?9AClA*&59@Tcs#q1V-{FB2ugTn7B`d8lAdpi<;Yra8@bRy1AZ5uk; z{-gaaI!*aEF9c>wZAxB#5Pk@OMZzOR45Yr8X>Fc7+iG@Dx9f@3d9%7Jt2b!xQ&Ky2 zcIT>CLAxQ84W20uPE(xMCRJM^ZtrZ@@()*?Owlli>Lz_3K6aHFl$=SX%WQS3|Gfc{ z7lIq@5Q;Af6j7NIh#Bpdk6}9<%WyK^9W_te#mOjLYdqJ21$PJ}Di`7Qxjr&cw*K96 zFgsTkBZcAJ-gupdxe-dY?*k1?!)*cHF z5*E?^uJ?0XxLd$1au#YI42mn7rl&N06&ZXf0 E05ToYaR2}S diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/Contents.json deleted file mode 100644 index a6a031ae2b3..00000000000 --- a/platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "southeast_radar_1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/southeast_radar_1.png b/platform/macos/app/Assets.xcassets/Radar/southeast_1.imageset/southeast_radar_1.png deleted file mode 100644 index ed09fffbe180536c3a4465ec2c8e52c8dc37644a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177163 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

    h-t=%&<~2Z)tzbrwW;nJoa#EyR(q}r` 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 z zgC*4w&rvb3?lOl#$o3@Ta_lNP4E<6#Q2m)I%Ziq^U!<1);LWLA_U~#nHz(5kWLY8M zRvVqZ&>)(WOXS`7wAtrg79@ErO@Tx+3l#%BwgU{LOf{=nNAxY$8gcMiW<>2o?{1^( zzJdSbR6qPAQ$n3Zg`+u49zSH-nRCjEX4fgRD0h1EA`n*#=unQO_idisT-OB-D(F1| zm{7@r*eu`xIbfDl+}~sgnBgYLneg(u@o>d<3| z2D3xvSuMNjlGu@B6r65~Zky%%$|z4oPv@Ke`p!Gf=n0tP(?l;W5WQr8Xh9Bpdrn89 zcAl+01UI$BJ)z7+WPj_R6j0TpohTsDa^mHKFPSy z7+WH87j)~4)|_`sq%ZLlRFQTXP($<|OfW#jDY_mgzR#GyoTBoTK<_+v8F7geZtHJ> z);OFWe^w?vT||ef5{C5W=+FLPjl_>Y^^xCIi#l%6XSi82&1X0mli?pS;daG?~l%%=7nZO0yaXv6f;Jz;3tam#foEzfy3Tq)CXM)4hIWk-51itJA-=RASzd_7^Jl}BNJp;n=dH~PAdxydT&*%3DyponaI zrObzFtu+;sAHe)G$i5S|o+jGghl%dFQge3in@y@g)qxar46T$@7` zDDY8m%}C87CAyk{=r13x=9h)w>Kv1W_IjH{1J*Lp*-bGO)al8a!}kBUP{ohsl6Exi2v5Ht2hV)hL+N1=044S;UgaF{gP-5 zY4kuzioY^b{~Mw-sma4VPp*IK5gNKjsJtD*<1<%YW-1c@cTWpCR{cC?$Ft?KEPCr@ zF;Cl{_k1N9AwU4Gaa?G9<;p?qm@Qsu-5utHCk&o9E37@7e88++^rQDnb^DSrFx`4L z2B0vN;N?bw*$v(YZnXmTxo|GevOOZ0xC~jCg*w;xdC1SWy~whDK?H_fo{<+*yAzJH zq~7Dmj+KrPt~@K8bDEJ?mh^SLH72g|r!$1|y=)m>(xLm#)y>n*yUf{Fdh#!!ji9OR z=h(kDx$={I!j+yv;gKhOxD>GvZv;WZZymYW2NnOj37A?ZJyfQX-hR`)yvDFUqfgesH|A~x0Eb|{6xEt% zIb9=_9lC9U?~ujXEsD5A%tnQ@5jf#-;p3dUB_gC5B=WsfdO@&$OO)dW?rRBAsU6zd zh2kcA+&?UYK>s^`8NqsF1Tgc)GLuFC|b{F=u(&H`!P z_KU)55N~g=ZdF_juIJs~ILZn}Rq%Lbn+F8At8`D zn5Q_K_PUdl{Tt`&T|jTiYfW2sg=+Gatk}}`Uix~ypnuBz7NX<-P*ykv+Yjp zYTcx`%OnRv?bFQdam*f=n;4P|mFPSqI$f+d-@8FLnS(>TKp`N@2zg+nxVZef z;`{Jxah9-O3xs;-+8U}O^!iA%)RqwjuPY7M{Dz?{Ki528Zu&U6Y?zh)HW-!HhtPDx zuGHNe*Q`u?87=y!>()~O-}lMN=E{#Npr`89K~31Q!g-kc3f$v#Q)?yjUxC^CVM+Rv z*hGo#?1=%Qn-aNjfa4#p7LL41^x9NvRmpb}Up{MB$a!IGCT63~o)H!fs_|;oKR_@W z-`)hS!I?ML2%GT5A58YTB7Kp|(QKJslp%KO93Rg{b=!zqNb4N|sg*o%=FCrFl4wp) zQwl*3o21+8?gN{5r$21^cUjEI21>27pgx{36FFR{toypYQ`OxlOyOwA9{LFn9A0*a zEryJsweV)AzNa4*xBr{(%Q4h*SlY%x!dH5WduzhRZ8Pvr-K`82UKRy?2Jv0%J{+YJ zUf3=hLtMcN4p3>Ps)!!J-9xWo8BPqGbEZTh5=#`6Z9#ucAMke zlufUXcK_RSUUY89@FT2?+cH<_&gSLG{N~Gs_Q0m2-&oRH-oJy$rrOIBPk%t&Hv1&S zo=NWfgr*Cc+w`7u7xS;gCt!z|*8}6ZTL#$x}>eZ_Lp~I-!*q+^C7uLXk^V?FXG*x{6;AM^wdSh+)bva9> z$>y?xYTqL}0jh@)>xQG8w?7<(7N`IP!i#ySD-=$fzPBtIFg;rqB&{M^vpa5N=m$7; z_xS4ZPz_RB*AS4)p*|vn(eoSqi*x^NVVbI~==_B+2 zWXl7%jETi9KGGc`J`|Qa2CE#UbZOl2KR9Ecg`+!Fy0FWIjCi5J76vGWxp3cC@F?IQ z?18O}P+pfH;;SOV$ug-7Zcrvmz;=`E8dvMer;?>rMRjpqvb$_{m)xv(1}_hUUhDUw zjVGQW=0L4-j!0+{JcLq#GB;N)5Eu2rd&odW&dz7Lvm$2s`1736?}dDZG_b-x>4y!4 z@cE}cxy3p@-TfHznJ)7kOun7W5oXu3lFMs)+|VJabqPeXr+B!C-;Ez~nvH-~Ztq(9 z97od)X-JkNd{8(HwWO<#%?+vYb454^Ide2j#oDOqTii3<9ZL*Q_<1SvwI_@;wqNnI z{t3AL(P@$PVp{o3n=ZsB%jac|vJD}25%kj7Ws8&Sr&3Qi`3;@Z17GVTe7LGJFDr%n z1?6Ve1bJdG7y(nmZ1GgqlR1awh+&3gr2ya?5SAu}os*SEUfmy^*@bT~eg2WqTTrQr z7O;@5((S$JoG5(s`dpBiwUGmYDC-dvby3RP8$bEiV`v`{TaRNFPBp>aNqQ<*~`MsNPAoW);((drTfvN3d0UYWJ{YZ3g@H`VK#!lh@W zoSBPn@|m8N{n^ZD>S+i5yU7I<^+PY)HX%BLhH9{S!26Pdu!T{w)?eie-)o-xN7%1jWg_{)-hE_XNygx*oO|tuX5T z*Y9je!4rr!N27so(YvVzs5VxXWpG$*6{QHLa)d(*wdbHiMpM_AIDZTmclJdtT@89- zR9g2oV20)I*uM$n+cd{y(yI`9dabz{*c;iSqPls6DpsFmiCVOGo1Y2M;VCsur4r zYk})d;6p*BS|A#5qI8{K76Cx;Uf2EaqA>rUspSdj?xg^J70AzGJv8@Cvc0Q6Us6@jUftpt*jn>mDBmlN#2u~epn()FtH{0XPhjGp${ESS z_wp9&Dx4rgu{H7%xcE~Z#3Vo@k43m{hrQKft<60e$P?EB3qp+?a9_P$_XlT3$MC`- zc8fJrpPh6A_c!ai<-jD=)}cIo|eeQu`VVI4Qd6CP~+d+&~dR2@y*m z-5TZO9W}{G387u)>en_)M?1E^oA;o|nvp^l5j%cnIM|xlcw*%0H=CDHf(f{o3c=z$ zWd6C9xHA))xc5~z*YEd}7G}Tf8}K+f9WoVpJPwN}Y(~llj%4I77Wg9Q1y5J%7hmbG zNiSB6+? z&usVR64KW$^l6p@7bn)*^xFW$_S1>_W=ij;d8=_oj(LD({@CFb*4y z`cA^WX3FXl*V}88WhAwvTtxZz-d?|P2kJruksNihLW2t)7U-Qhc-l#H=FY>LvJYquuoWC9WCGd@Nn16^z{)7vJ3`p;aWCl)F5UPRuFQFf-l;-!~4sb zQwg;P??jTv=f?0N#1f)rvwFi0%NIMbO(zTpUsz?GXT;vl4-c$r8-sDHjF5x;)1zX!lOh-W<({aYM7mV@Wi1-some9Z* zC1aPLDvbps-%;bfF}0!3G1S`3+~q%@3%!7Yjcd*IAOxeF#Lna zk7e1U0mg`8n4)a>#ilCnyd+7SBTFE9O~u{94IN4@YM> ze|2^A2yuIKtXjwElTy&Ga8h2f94n(r%h72;!WH16FJChaJ5Hd75j{|)@%F|6Zs>I? zB-r9$daRBac6FKC+~O26_83g7n_XI@-RLmO$SY|e?j_-9+{Q#Qq4-mOAyJSJF4xtA z^GK!&72g-RBwkwt7<)o}Mp^H@u*JN* z{^ZL=O`8)`NT#au!M(Va)b}-iM@@$EAPU%}V2z9Y$WRo zJNVrDL2@RP5Oww5kX+-^==?)phq&Q4$>-(VJ(G2Pf*-dJ@U;-90}JX|nA1I)aM5{`(;;%dR5~;v$WIJ**qu!7=1EL9 z97R&*8>X2=LK5J09>u1(|KSt4UAaM+^@D4tz-x0ey{$whCt&4KMhk0f$b&viJ|wBK z@yI41yi0TFmdS5NFV~^rurC0J#Uj0)=oTtG{ZMB5!T7rCwoiBJr<_Ai`6YnH4IP~{ zf~N@Zkgi=+qKLXu&*L3+Wl(|Wr7$-Nbe0!+;Wu2_@Rar>w03L5v@szFAr`RGBHfq} zSdzOvoh~?*R~IN1u;8&+;MfNH(@z0`w&-%;&*q=w8G^)rTYh6pyu4ymBB0#(ei^Lr zG3*!fGN)Bfb$b(JcbU`}!AwET1JjdU6oFk$87^sMaVZ!AC^YE(ob+nrQ@j)LG;IH) zsh;?HUi~)AJWRa;5w)Y|?JO{46aJAjgMXhyNkCkOxoF5A5km0_Q`hOPU}NO^aBbcm zxTTHh#v_dS4`t#(m@`^&Dk<08b^^Y=FHU-det}L+;xgq?vj^xN<)5f6jDKd>M!0I zV99tXsG({DyjROsbE;nx%CrFs5>k{8stFMwq3&-@05v8H;XWrq`TqW^A>V_XEAU3c zx)UjNBy9Ru&HriRcNa(Nu>b$S|FawrFF*%DIh#MfmU(FpkO4nhYI>>#%2p5m4@0W7 Af&c&j diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/Contents.json b/platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/Contents.json deleted file mode 100644 index 9a110068a18..00000000000 --- a/platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "southeast_radar_3.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/southeast_radar_3.png b/platform/macos/app/Assets.xcassets/Radar/southeast_3.imageset/southeast_radar_3.png deleted file mode 100644 index c4c7146afa6f0fe78d79bfe404cc123464e8a7ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177074 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�S~t5 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 diff --git a/platform/macos/app/Base.lproj/Localizable.strings b/platform/macos/app/Base.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/Base.lproj/MainMenu.xib b/platform/macos/app/Base.lproj/MainMenu.xib deleted file mode 100644 index 6f8f24ce999..00000000000 --- a/platform/macos/app/Base.lproj/MainMenu.xib +++ /dev/null @@ -1,982 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -CA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OfflinePackNameValueTransformer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - context - countOfResourcesCompleted - countOfResourcesExpected - countOfTilesCompleted - countOfTileBytesCompleted - countOfBytesCompleted - stateImage - - - - - - - - - diff --git a/platform/macos/app/Base.lproj/MapDocument.xib b/platform/macos/app/Base.lproj/MapDocument.xib deleted file mode 100644 index 084bb76adf3..00000000000 --- a/platform/macos/app/Base.lproj/MapDocument.xib +++ /dev/null @@ -1,497 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - style - - - - - - - - layers - name - reversedLayers - - - - - - - - identifier - visible - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - StyleLayerIconTransformer - - - - - - - - - - - - - - - - - - - - - - - - - NSNegateBoolean - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %{title1}@ @ %{title2}@ - LocationCoordinate2DTransformer - - - - - %{title1}@ @ %{title2}@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/macos/app/Credits.rtf b/platform/macos/app/Credits.rtf deleted file mode 100644 index 6b17eb34b27..00000000000 --- a/platform/macos/app/Credits.rtf +++ /dev/null @@ -1,9 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf130 -{\fonttbl\f0\fnil\fcharset0 SFUIText-Regular;} -{\colortbl;\red255\green255\blue255;} -\margl1440\margr1440\vieww10800\viewh8400\viewkind0 -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\qc\partightenfactor0 - -\f0\fs20 \cf0 Copyright \'a9 {\field{\*\fldinst{HYPERLINK "https://www.mapbox.com/about/maps/"}}{\fldrslt Mapbox}}.\ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\qc\partightenfactor0 -\cf0 Copyright \'a9 {\field{\*\fldinst{HYPERLINK "http://www.openstreetmap.org/about/"}}{\fldrslt OpenStreetMap contributors}}.} \ No newline at end of file diff --git a/platform/macos/app/DroppedPinAnnotation.h b/platform/macos/app/DroppedPinAnnotation.h deleted file mode 100644 index 0897219b13d..00000000000 --- a/platform/macos/app/DroppedPinAnnotation.h +++ /dev/null @@ -1,15 +0,0 @@ -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DroppedPinAnnotation : MGLPointAnnotation - -@property (nonatomic, copy, nullable) NSString *note; -@property (nonatomic, readonly) NSTimeInterval elapsedShownTime; - -- (void)resume; -- (void)pause; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/macos/app/DroppedPinAnnotation.m b/platform/macos/app/DroppedPinAnnotation.m deleted file mode 100644 index b601405095d..00000000000 --- a/platform/macos/app/DroppedPinAnnotation.m +++ /dev/null @@ -1,73 +0,0 @@ -#import "DroppedPinAnnotation.h" - -#import "LocationCoordinate2DTransformer.h" -#import "TimeIntervalTransformer.h" - -#import - -static MGLCoordinateFormatter *DroppedPinCoordinateFormatter; - -@implementation DroppedPinAnnotation { - NSTimer *_timer; - NSTimeInterval _priorShownTimeInterval; - NSDate *_dateShown; - - NSValueTransformer *_timeIntervalTransformer; -} - -+ (void)initialize { - if (self == [DroppedPinAnnotation class]) { - DroppedPinCoordinateFormatter = [[MGLCoordinateFormatter alloc] init]; - } -} - -- (instancetype)init { - if (self = [super init]) { - _timeIntervalTransformer = [NSValueTransformer valueTransformerForName: - NSStringFromClass([TimeIntervalTransformer class])]; - [self update:nil]; - } - return self; -} - -- (void)dealloc { - [self pause]; -} - -- (void)setCoordinate:(CLLocationCoordinate2D)coordinate { - super.coordinate = coordinate; - [self update:nil]; -} - -- (NSTimeInterval)elapsedShownTime { - return _priorShownTimeInterval - _dateShown.timeIntervalSinceNow; -} - -- (void)resume { - _dateShown = [NSDate date]; - _timer = [NSTimer scheduledTimerWithTimeInterval:1 - target:self - selector:@selector(update:) - userInfo:nil - repeats:YES]; -} - -- (void)pause { - [_timer invalidate]; - _timer = nil; - _priorShownTimeInterval -= _dateShown.timeIntervalSinceNow; - _dateShown = nil; -} - -- (void)update:(NSTimer *)timer { - NSString *coordinate = [DroppedPinCoordinateFormatter stringFromCoordinate:self.coordinate]; - if (self.note) { - self.subtitle = [@[self.note, coordinate] componentsJoinedByString:@"\n"]; - } else { - NSString *elapsedTime = [_timeIntervalTransformer transformedValue:@(self.elapsedShownTime)]; - NSString *elapsedString = [NSString stringWithFormat:@"Selected for %@", elapsedTime]; - self.subtitle = [@[coordinate, elapsedString] componentsJoinedByString:@"\n"]; - } -} - -@end diff --git a/platform/macos/app/Info.plist b/platform/macos/app/Info.plist deleted file mode 100644 index 21b86bfc751..00000000000 --- a/platform/macos/app/Info.plist +++ /dev/null @@ -1,58 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - mbx - - CFBundleTypeName - Mapbox GL Map - CFBundleTypeRole - Editor - NSDocumentClass - MapDocument - - - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 0.1.0 - CFBundleSignature - MBGL - CFBundleURLTypes - - - CFBundleURLName - ${PRODUCT_NAME} - CFBundleURLSchemes - - mapboxgl - - - - CFBundleVersion - 1 - LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - NSSupportsAutomaticGraphicsSwitching - - - diff --git a/platform/macos/app/LocationCoordinate2DTransformer.h b/platform/macos/app/LocationCoordinate2DTransformer.h deleted file mode 100644 index 162325fbad1..00000000000 --- a/platform/macos/app/LocationCoordinate2DTransformer.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface LocationCoordinate2DTransformer : NSValueTransformer - -@end diff --git a/platform/macos/app/LocationCoordinate2DTransformer.m b/platform/macos/app/LocationCoordinate2DTransformer.m deleted file mode 100644 index 59654f16762..00000000000 --- a/platform/macos/app/LocationCoordinate2DTransformer.m +++ /dev/null @@ -1,31 +0,0 @@ -#import "LocationCoordinate2DTransformer.h" - -#import - -@implementation LocationCoordinate2DTransformer { - MGLCoordinateFormatter *_coordinateFormatter; -} - -+ (Class)transformedValueClass { - return [NSString class]; -} - -+ (BOOL)allowsReverseTransformation { - return NO; -} - -- (instancetype)init { - if (self = [super init]) { - _coordinateFormatter = [[MGLCoordinateFormatter alloc] init]; - } - return self; -} - -- (id)transformedValue:(id)value { - if (![value isKindOfClass:[NSValue class]]) { - return nil; - } - return [_coordinateFormatter stringForObjectValue:value].capitalizedString; -} - -@end diff --git a/platform/macos/app/MGLStyle+MBXAdditions.h b/platform/macos/app/MGLStyle+MBXAdditions.h deleted file mode 100644 index 29c2cda867d..00000000000 --- a/platform/macos/app/MGLStyle+MBXAdditions.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -@interface MGLStyle (MBXAdditions) - -@property (nonatomic, strong) NSArray<__kindof MGLStyleLayer *> *reversedLayers; - -@end diff --git a/platform/macos/app/MGLStyle+MBXAdditions.m b/platform/macos/app/MGLStyle+MBXAdditions.m deleted file mode 100644 index a0773cc2c05..00000000000 --- a/platform/macos/app/MGLStyle+MBXAdditions.m +++ /dev/null @@ -1,42 +0,0 @@ -#import "MGLStyle+MBXAdditions.h" - -@implementation MGLStyle (MBXAdditions) - -+ (NSSet *)keyPathsForValuesAffectingReversedLayers { - return [NSSet setWithObject:@"layers"]; -} - -- (NSArray<__kindof MGLStyleLayer *> *)reversedLayers { - return self.layers.reverseObjectEnumerator.allObjects; -} - -- (void)setReversedLayers:(NSArray<__kindof MGLStyleLayer *> *)reversedLayers { - self.layers = reversedLayers.reverseObjectEnumerator.allObjects; -} - -- (NSUInteger)countOfReversedLayers { - return self.layers.count; -} - -- (id)objectInReversedLayersAtIndex:(NSUInteger)index { - NSArray *layers = self.layers; - return layers[layers.count - 1 - index]; -} - -- (void)getReversedLayers:(__kindof MGLStyleLayer **)buffer range:(NSRange)inRange { - NSArray *layers = self.layers; - for (NSUInteger i = inRange.location; i < NSMaxRange(inRange); i++) { - MGLStyleLayer *styleLayer = layers[layers.count - 1 - i]; - buffer[i] = styleLayer; - } -} - -- (void)insertObject:(__kindof MGLStyleLayer *)object inReversedLayersAtIndex:(NSUInteger)index { - [self insertLayer:object atIndex:self.layers.count - index]; -} - -- (void)removeObjectFromReversedLayersAtIndex:(NSUInteger)index { - [self removeLayer:[self objectInReversedLayersAtIndex:index]]; -} - -@end diff --git a/platform/macos/app/MapDocument.h b/platform/macos/app/MapDocument.h deleted file mode 100644 index fa70212cf8c..00000000000 --- a/platform/macos/app/MapDocument.h +++ /dev/null @@ -1,14 +0,0 @@ -#import - -@class MGLMapView; - -@interface MapDocument : NSDocument - -@property (weak) IBOutlet MGLMapView *mapView; - -- (IBAction)showStyle:(id)sender; -- (IBAction)chooseCustomStyle:(id)sender; - -- (IBAction)reload:(id)sender; - -@end diff --git a/platform/macos/app/MapDocument.m b/platform/macos/app/MapDocument.m deleted file mode 100644 index 1ab8b690b91..00000000000 --- a/platform/macos/app/MapDocument.m +++ /dev/null @@ -1,1507 +0,0 @@ -#import "MapDocument.h" - -#import "AppDelegate.h" -#import "LimeGreenStyleLayer.h" -#import "DroppedPinAnnotation.h" -#import "MGLMapsnapshotter.h" - -#import "MGLStyle+MBXAdditions.h" -#import "MGLVectorTileSource_Private.h" - -#import - -static NSString * const MGLDroppedPinAnnotationImageIdentifier = @"dropped"; - -static const CLLocationCoordinate2D WorldTourDestinations[] = { - { .latitude = 38.8999418, .longitude = -77.033996 }, - { .latitude = 37.7884307, .longitude = -122.3998631 }, - { .latitude = 52.5003103, .longitude = 13.4197763 }, - { .latitude = 60.1712627, .longitude = 24.9378866 }, - { .latitude = 53.8948782, .longitude = 27.5558476 }, -}; - -NSArray> *MBXFlattenedShapes(NSArray> *shapes) { - NSMutableArray *flattenedShapes = [NSMutableArray arrayWithCapacity:shapes.count]; - for (id shape in shapes) { - NSArray *subshapes; - if ([shape isKindOfClass:[MGLMultiPolyline class]]) { - subshapes = [(MGLMultiPolyline *)shape polylines]; - } else if ([shape isKindOfClass:[MGLMultiPolygon class]]) { - subshapes = [(MGLMultiPolygon *)shape polygons]; - } else if ([shape isKindOfClass:[MGLPointCollection class]]) { - NSUInteger pointCount = [(MGLPointCollection *)shape pointCount]; - CLLocationCoordinate2D *coordinates = [(MGLPointCollection *)shape coordinates]; - NSMutableArray *pointAnnotations = [NSMutableArray arrayWithCapacity:pointCount]; - for (NSUInteger i = 0; i < pointCount; i++) { - MGLPointAnnotation *pointAnnotation = [[MGLPointAnnotation alloc] init]; - pointAnnotation.coordinate = coordinates[i]; - [pointAnnotations addObject:pointAnnotation]; - } - subshapes = pointAnnotations; - } else if ([shape isKindOfClass:[MGLShapeCollection class]]) { - subshapes = MBXFlattenedShapes([(MGLShapeCollection *)shape shapes]); - } - - if (subshapes) { - [flattenedShapes addObjectsFromArray:subshapes]; - } else { - [flattenedShapes addObject:shape]; - } - } - return flattenedShapes; -} - -@interface MGLVectorTileSource (MBXAdditions) - -@property (nonatomic, readonly, getter=isMapboxTerrain) BOOL mapboxTerrain; - -@end - -@implementation MGLVectorTileSource (MBXAdditions) - -- (BOOL)isMapboxTerrain { - NSURL *url = self.configurationURL; - if (![url.scheme isEqualToString:@"mapbox"]) { - return NO; - } - NSArray *identifiers = [url.host componentsSeparatedByString:@","]; - return [identifiers containsObject:@"mapbox.mapbox-terrain-v2"] || [identifiers containsObject:@"mapbox.mapbox-terrain-v1"]; -} - -@end - -@interface MapDocument () - -@property (weak) IBOutlet NSArrayController *styleLayersArrayController; -@property (weak) IBOutlet NSTableView *styleLayersTableView; -@property (weak) IBOutlet NSMenu *mapViewContextMenu; -@property (weak) IBOutlet NSSplitView *splitView; -@property (weak) IBOutlet NSWindow *addOfflinePackWindow; -@property (weak) IBOutlet NSTextField *offlinePackNameField; -@property (weak) IBOutlet NSTextField *minimumOfflinePackZoomLevelField; -@property (weak) IBOutlet NSNumberFormatter *minimumOfflinePackZoomLevelFormatter; -@property (weak) IBOutlet NSTextField *maximumOfflinePackZoomLevelField; -@property (weak) IBOutlet NSNumberFormatter *maximumOfflinePackZoomLevelFormatter; -@property (weak) IBOutlet NSButton *includesIdeographicGlyphsBox; - -@end - -@implementation MapDocument { - /// Style URL inherited from an existing document at the time this document - /// was created. - NSURL *_inheritedStyleURL; - - NSPoint _mouseLocationForMapViewContextMenu; - NSUInteger _droppedPinCounter; - NSNumberFormatter *_spellOutNumberFormatter; - - BOOL _isLocalizingLabels; - BOOL _showsToolTipsOnDroppedPins; - BOOL _randomizesCursorsOnDroppedPins; - BOOL _isTouringWorld; - BOOL _isShowingPolygonAndPolylineAnnotations; - BOOL _isShowingAnimatedAnnotation; - - MGLMapSnapshotter *_snapshotter; -} - -#pragma mark Lifecycle - -- (NSString *)windowNibName { - return @"MapDocument"; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)windowControllerWillLoadNib:(NSWindowController *)windowController { - NSDocument *currentDocument = [NSDocumentController sharedDocumentController].currentDocument; - if ([currentDocument isKindOfClass:[MapDocument class]]) { - _inheritedStyleURL = [(MapDocument *)currentDocument mapView].styleURL; - } -} - -- (void)windowControllerDidLoadNib:(NSWindowController *)controller { - [super windowControllerDidLoadNib:controller]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(userDefaultsDidChange:) - name:NSUserDefaultsDidChangeNotification - object:nil]; - - _spellOutNumberFormatter = [[NSNumberFormatter alloc] init]; - - NSPressGestureRecognizer *pressGestureRecognizer = [[NSPressGestureRecognizer alloc] initWithTarget:self action:@selector(handlePressGesture:)]; - [self.mapView addGestureRecognizer:pressGestureRecognizer]; - - [self.splitView setPosition:0 ofDividerAtIndex:0]; - - [self applyPendingState]; -} - -- (NSWindow *)window { - return self.windowControllers.firstObject.window; -} - -- (void)userDefaultsDidChange:(NSNotification *)notification { - NSUserDefaults *userDefaults = notification.object; - NSString *accessToken = [userDefaults stringForKey:MGLMapboxAccessTokenDefaultsKey]; - if (![accessToken isEqualToString:[MGLAccountManager accessToken]]) { - [MGLAccountManager setAccessToken:accessToken]; - [self reload:self]; - } -} - -#pragma mark NSWindowDelegate methods - -- (void)window:(NSWindow *)window willEncodeRestorableState:(NSCoder *)state { - [state encodeObject:self.mapView.styleURL forKey:@"MBXMapViewStyleURL"]; - [state encodeBool:_isLocalizingLabels forKey:@"MBXLocalizeLabels"]; -} - -- (void)window:(NSWindow *)window didDecodeRestorableState:(NSCoder *)state { - self.mapView.styleURL = [state decodeObjectForKey:@"MBXMapViewStyleURL"]; - _isLocalizingLabels = [state decodeBoolForKey:@"MBXLocalizeLabels"]; -} - -#pragma mark Services - -- (IBAction)showShareMenu:(id)sender { - NSSharingServicePicker *picker = [[NSSharingServicePicker alloc] initWithItems:@[self.shareURL]]; - picker.delegate = self; - [picker showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMinYEdge]; -} - -- (NSURL *)shareURL { - NSArray *components = self.mapView.styleURL.pathComponents; - MGLMapCamera *camera = self.mapView.camera; - return [NSURL URLWithString: - [NSString stringWithFormat:@"https://api.mapbox.com/styles/v1/%@/%@.html?access_token=%@#%.2f/%.5f/%.5f/%.f/%.f", - components[1], components[2], [MGLAccountManager accessToken], - self.mapView.zoomLevel, camera.centerCoordinate.latitude, camera.centerCoordinate.longitude, - camera.heading, camera.pitch]]; -} - -#pragma mark File methods - -- (IBAction)import:(id)sender { - NSOpenPanel *panel = [NSOpenPanel openPanel]; - panel.allowedFileTypes = @[@"public.json", @"json", @"geojson"]; - panel.allowsMultipleSelection = YES; - - __weak __typeof__(self) weakSelf = self; - [panel beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse result) { - if (result != NSFileHandlingPanelOKButton) { - return; - } - - for (NSURL *url in panel.URLs) { - [weakSelf importFromURL:url]; - } - }]; -} - -/** - Adds the contents of the GeoJSON file at the given URL to the map. - - GeoJSON features are styled according to - [simplestyle-spec](https://github.com/mapbox/simplestyle-spec/tree/master/1.1.0/). - */ -- (void)importFromURL:(NSURL *)url { - MGLStyle *style = self.mapView.style; - if (!style) { - return; - } - - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:[NSUUID UUID].UUIDString URL:url options:nil]; - [self.mapView.style addSource:source]; - - NSString *pointIdentifier = [NSString stringWithFormat:@"%@ marker", source.identifier]; - MGLSymbolStyleLayer *pointLayer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:pointIdentifier source:source]; - pointLayer.iconImageName = - [NSExpression expressionWithFormat:@"mgl_join({%K, '-', CAST(TERNARY(%K = 'small', 11, 15), 'NSString')})", - @"marker-symbol", @"marker-size"]; - pointLayer.iconScale = [NSExpression expressionForConstantValue:@1]; - pointLayer.iconColor = [NSExpression expressionWithFormat:@"CAST(mgl_coalesce({%K, '#7e7e7e'}), 'NSColor')", - @"marker-color"]; - pointLayer.iconAllowsOverlap = [NSExpression expressionForConstantValue:@YES]; - [style addLayer:pointLayer]; - - NSString *fillIdentifier = [NSString stringWithFormat:@"%@ fill", source.identifier]; - MGLFillStyleLayer *fillLayer = [[MGLFillStyleLayer alloc] initWithIdentifier:fillIdentifier source:source]; - fillLayer.predicate = [NSPredicate predicateWithFormat:@"fill != nil OR %K != nil", @"fill-opacity"]; - fillLayer.fillColor = [NSExpression expressionWithFormat:@"CAST(mgl_coalesce({fill, '#555555'}), 'NSColor')"]; - fillLayer.fillOpacity = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, 0.5})", @"fill-opacity"]; - [style addLayer:fillLayer]; - - NSString *lineIdentifier = [NSString stringWithFormat:@"%@ stroke", source.identifier]; - MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:lineIdentifier source:source]; - lineLayer.lineColor = [NSExpression expressionWithFormat:@"CAST(mgl_coalesce({stroke, '#555555'}), 'NSColor')"]; - lineLayer.lineOpacity = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, 1.0})", @"stroke-opacity"]; - lineLayer.lineWidth = [NSExpression expressionWithFormat:@"mgl_coalesce({%K, 2})", @"stroke-width"]; - lineLayer.lineCap = [NSExpression expressionForConstantValue:@"round"]; - lineLayer.lineJoin = [NSExpression expressionForConstantValue:@"bevel"]; - [style addLayer:lineLayer]; -} - -- (IBAction)takeSnapshot:(id)sender { - MGLMapCamera *camera = self.mapView.camera; - - MGLMapSnapshotOptions *options = [[MGLMapSnapshotOptions alloc] initWithStyleURL:self.mapView.styleURL camera:camera size:self.mapView.bounds.size]; - options.zoomLevel = self.mapView.zoomLevel; - - // Create and start the snapshotter - __weak __typeof__(self) weakSelf = self; - _snapshotter = [[MGLMapSnapshotter alloc] initWithOptions:options]; - [_snapshotter startWithCompletionHandler:^(MGLMapSnapshot *snapshot, NSError *error) { - __typeof__(self) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - - if (error) { - NSLog(@"Could not load snapshot: %@", error.localizedDescription); - } else { - // Set the default name for the file and show the panel. - NSSavePanel *panel = [NSSavePanel savePanel]; - panel.nameFieldStringValue = [strongSelf.mapView.styleURL.lastPathComponent.stringByDeletingPathExtension stringByAppendingPathExtension:@"png"]; - panel.allowedFileTypes = [@[(NSString *)kUTTypePNG] arrayByAddingObjectsFromArray:[NSBitmapImageRep imageUnfilteredTypes]]; - - [panel beginSheetModalForWindow:strongSelf.window completionHandler:^(NSInteger result) { - if (result == NSFileHandlingPanelOKButton) { - // Write the contents in the new format. - NSURL *fileURL = panel.URL; - - NSBitmapImageRep *bitmapRep; - for (NSImageRep *imageRep in snapshot.image.representations) { - if ([imageRep isKindOfClass:[NSBitmapImageRep class]]) { - bitmapRep = (NSBitmapImageRep *)imageRep; - break; // stop on first bitmap rep we find - } - } - - if (!bitmapRep) { - bitmapRep = [NSBitmapImageRep imageRepWithData:snapshot.image.TIFFRepresentation]; - } - - CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)fileURL.pathExtension, NULL /* inConformingToUTI */); - NSBitmapImageFileType fileType = NSTIFFFileType; - if (UTTypeConformsTo(uti, kUTTypePNG)) { - fileType = NSPNGFileType; - } else if (UTTypeConformsTo(uti, kUTTypeGIF)) { - fileType = NSGIFFileType; - } else if (UTTypeConformsTo(uti, kUTTypeJPEG2000)) { - fileType = NSJPEG2000FileType; - } else if (UTTypeConformsTo(uti, kUTTypeJPEG)) { - fileType = NSJPEGFileType; - } else if (UTTypeConformsTo(uti, kUTTypeBMP)) { - fileType = NSBitmapImageFileTypeBMP; - } - - NSData *imageData = [bitmapRep representationUsingType:fileType properties:@{}]; - [imageData writeToURL:fileURL atomically:NO]; - } - }]; - - } - - strongSelf->_snapshotter = nil; - }]; -} - -#pragma mark View methods - -- (IBAction)showStyle:(id)sender { - NSInteger tag = -1; - if ([sender isKindOfClass:[NSMenuItem class]]) { - tag = [sender tag]; - } else if ([sender isKindOfClass:[NSPopUpButton class]]) { - tag = [sender selectedTag]; - } - NSURL *styleURL; - switch (tag) { - case 1: - styleURL = [MGLStyle streetsStyleURL]; - break; - case 2: - styleURL = [MGLStyle outdoorsStyleURL]; - break; - case 3: - styleURL = [MGLStyle lightStyleURL]; - break; - case 4: - styleURL = [MGLStyle darkStyleURL]; - break; - case 5: - styleURL = [MGLStyle satelliteStyleURL]; - break; - case 6: - styleURL = [MGLStyle satelliteStreetsStyleURL]; - break; - default: - NSAssert(NO, @"Cannot set style from control with tag %li", (long)tag); - break; - } - [self.undoManager removeAllActionsWithTarget:self]; - self.mapView.styleURL = styleURL; - [self.window.toolbar validateVisibleItems]; -} - -- (IBAction)chooseCustomStyle:(id)sender { - NSAlert *alert = [[NSAlert alloc] init]; - alert.messageText = @"Apply custom style"; - alert.informativeText = @"Enter the URL to a JSON file that conforms to the Mapbox Style Specification, such as a style designed in Mapbox Studio:"; - NSTextField *textField = [[NSTextField alloc] initWithFrame:NSZeroRect]; - [textField sizeToFit]; - NSRect textFieldFrame = textField.frame; - textFieldFrame.size.width = 300; - textField.frame = textFieldFrame; - NSURL *savedURL = [[NSUserDefaults standardUserDefaults] URLForKey:@"MBXCustomStyleURL"]; - if (savedURL) { - textField.stringValue = savedURL.absoluteString; - } - alert.accessoryView = textField; - [alert addButtonWithTitle:@"Apply"]; - [alert addButtonWithTitle:@"Cancel"]; - if ([alert runModal] == NSAlertFirstButtonReturn) { - [self.undoManager removeAllActionsWithTarget:self]; - self.mapView.styleURL = [NSURL URLWithString:textField.stringValue]; - [[NSUserDefaults standardUserDefaults] setURL:self.mapView.styleURL forKey:@"MBXCustomStyleURL"]; - [self.window.toolbar validateVisibleItems]; - } -} - -- (IBAction)zoomIn:(id)sender { - [self.mapView setZoomLevel:round(self.mapView.zoomLevel) + 1 animated:YES]; -} - -- (IBAction)zoomOut:(id)sender { - [self.mapView setZoomLevel:round(self.mapView.zoomLevel) - 1 animated:YES]; -} - -- (IBAction)snapToNorth:(id)sender { - [self.mapView setDirection:0 animated:YES]; -} - -- (IBAction)reload:(id)sender { - [self.undoManager removeAllActionsWithTarget:self]; - [self.mapView reloadStyle:sender]; -} - -/** - Show or hide the Layers sidebar. - */ -- (IBAction)toggleLayers:(id)sender { - BOOL isShown = ![self.splitView isSubviewCollapsed:self.splitView.arrangedSubviews.firstObject]; - [NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull context) { - context.allowsImplicitAnimation = YES; - [self.splitView setPosition:isShown ? 0 : 100 ofDividerAtIndex:0]; - [self.window.toolbar validateVisibleItems]; - } completionHandler:nil]; -} - -/** - Show or hide the selected layers. - */ -- (IBAction)toggleStyleLayers:(id)sender { - NSInteger clickedRow = self.styleLayersTableView.clickedRow; - NSIndexSet *indices = self.styleLayersTableView.selectedRowIndexes; - if (clickedRow >= 0 && ![indices containsIndex:clickedRow]) { - indices = [NSIndexSet indexSetWithIndex:clickedRow]; - } - [self toggleStyleLayersAtArrangedObjectIndexes:indices]; -} - -- (void)toggleStyleLayersAtArrangedObjectIndexes:(NSIndexSet *)indices { - NSArray *layers = [self.mapView.style.reversedLayers objectsAtIndexes:indices]; - BOOL isVisible = layers.firstObject.visible; - [self.undoManager registerUndoWithTarget:self handler:^(MapDocument * _Nonnull target) { - [target toggleStyleLayersAtArrangedObjectIndexes:indices]; - }]; - - if (!self.undoManager.undoing) { - NSString *actionName; - if (indices.count == 1) { - actionName = [NSString stringWithFormat:@"%@ Layer “%@”", isVisible ? @"Hide" : @"Show", layers.firstObject.identifier]; - } else { - actionName = [NSString stringWithFormat:@"%@ %@ Layers", isVisible ? @"Hide" : @"Show", - [NSNumberFormatter localizedStringFromNumber:@(indices.count) - numberStyle:NSNumberFormatterDecimalStyle]]; - } - [self.undoManager setActionIsDiscardable:YES]; - [self.undoManager setActionName:actionName]; - } - - for (MGLStyleLayer *layer in layers) { - layer.visible = !isVisible; - } - - NSIndexSet *columnIndices = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)]; - [self.styleLayersTableView reloadDataForRowIndexes:indices columnIndexes:columnIndices]; -} - -- (IBAction)deleteStyleLayers:(id)sender { - NSInteger clickedRow = self.styleLayersTableView.clickedRow; - NSIndexSet *indices = self.styleLayersTableView.selectedRowIndexes; - if (clickedRow >= 0 && ![indices containsIndex:clickedRow]) { - indices = [NSIndexSet indexSetWithIndex:clickedRow]; - } - [self deleteStyleLayersAtArrangedObjectIndexes:indices]; -} - -- (void)insertStyleLayers:(NSArray *)layers atArrangedObjectIndexes:(NSIndexSet *)indices { - [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) { - [self deleteStyleLayersAtArrangedObjectIndexes:indices]; - }]; - - if (!self.undoManager.undoing) { - NSString *actionName; - if (indices.count == 1) { - actionName = [NSString stringWithFormat:@"Add Layer “%@”", layers.firstObject.identifier]; - } else { - actionName = [NSString stringWithFormat:@"Add %@ Layers", - [NSNumberFormatter localizedStringFromNumber:@(indices.count) numberStyle:NSNumberFormatterDecimalStyle]]; - } - [self.undoManager setActionName:actionName]; - } - - [self.styleLayersArrayController insertObjects:layers atArrangedObjectIndexes:indices]; -} - -- (void)deleteStyleLayersAtArrangedObjectIndexes:(NSIndexSet *)indices { - NSArray *layers = [self.mapView.style.reversedLayers objectsAtIndexes:indices]; - [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) { - [self insertStyleLayers:layers atArrangedObjectIndexes:indices]; - }]; - - if (!self.undoManager.undoing) { - NSString *actionName; - if (indices.count == 1) { - actionName = [NSString stringWithFormat:@"Delete Layer “%@”", layers.firstObject.identifier]; - } else { - actionName = [NSString stringWithFormat:@"Delete %@ Layers", - [NSNumberFormatter localizedStringFromNumber:@(indices.count) numberStyle:NSNumberFormatterDecimalStyle]]; - } - [self.undoManager setActionName:actionName]; - } - - [self.styleLayersArrayController removeObjectsAtArrangedObjectIndexes:indices]; -} - -- (IBAction)setLabelLanguage:(NSMenuItem *)sender { - _isLocalizingLabels = sender.tag; - [self reload:sender]; -} - -- (void)updateLabels { - [self.mapView.style localizeLabelsIntoLocale:_isLocalizingLabels ? nil : [NSLocale localeWithLocaleIdentifier:@"mul"]]; -} - -- (void)applyPendingState { - if (_inheritedStyleURL) { - self.mapView.styleURL = _inheritedStyleURL; - _inheritedStyleURL = nil; - } - - AppDelegate *appDelegate = (AppDelegate *)NSApp.delegate; - if (appDelegate.pendingStyleURL) { - self.mapView.styleURL = appDelegate.pendingStyleURL; - } - if (appDelegate.pendingCamera) { - if (appDelegate.pendingZoomLevel >= 0) { - self.mapView.zoomLevel = appDelegate.pendingZoomLevel; - appDelegate.pendingCamera.altitude = self.mapView.camera.altitude; - } - self.mapView.camera = appDelegate.pendingCamera; - appDelegate.pendingZoomLevel = -1; - appDelegate.pendingCamera = nil; - } - if (!MGLCoordinateBoundsIsEmpty(appDelegate.pendingVisibleCoordinateBounds)) { - self.mapView.visibleCoordinateBounds = appDelegate.pendingVisibleCoordinateBounds; - appDelegate.pendingVisibleCoordinateBounds = (MGLCoordinateBounds){ { 0, 0 }, { 0, 0 } }; - } - if (appDelegate.pendingDebugMask) { - self.mapView.debugMask = appDelegate.pendingDebugMask; - } - if (appDelegate.pendingMinimumZoomLevel >= 0) { - self.mapView.zoomLevel = MAX(appDelegate.pendingMinimumZoomLevel, self.mapView.zoomLevel); - appDelegate.pendingMaximumZoomLevel = -1; - } - if (appDelegate.pendingMaximumZoomLevel >= 0) { - self.mapView.zoomLevel = MIN(appDelegate.pendingMaximumZoomLevel, self.mapView.zoomLevel); - appDelegate.pendingMaximumZoomLevel = -1; - } - - // Temporarily set the display name to the default center coordinate instead - // of “Untitled” until the binding kicks in. - NSValue *coordinateValue = [NSValue valueWithMGLCoordinate:self.mapView.centerCoordinate]; - NSString *coordinateString = [[NSValueTransformer valueTransformerForName:@"LocationCoordinate2DTransformer"] - transformedValue:coordinateValue]; - - - self.displayName = [NSString stringWithFormat:@"%@ @ %f", coordinateString, _mapView.zoomLevel]; -} - -#pragma mark Debug methods - -- (IBAction)toggleTileBoundaries:(id)sender { - self.mapView.debugMask ^= MGLMapDebugTileBoundariesMask; -} - -- (IBAction)toggleTileInfo:(id)sender { - self.mapView.debugMask ^= MGLMapDebugTileInfoMask; -} - -- (IBAction)toggleTileTimestamps:(id)sender { - self.mapView.debugMask ^= MGLMapDebugTimestampsMask; -} - -- (IBAction)toggleCollisionBoxes:(id)sender { - self.mapView.debugMask ^= MGLMapDebugCollisionBoxesMask; -} - -- (IBAction)toggleOverdrawVisualization:(id)sender { - self.mapView.debugMask ^= MGLMapDebugOverdrawVisualizationMask; -} - -- (IBAction)showColorBuffer:(id)sender { - self.mapView.debugMask &= ~MGLMapDebugStencilBufferMask; - self.mapView.debugMask &= ~MGLMapDebugDepthBufferMask; -} - -- (IBAction)showStencilBuffer:(id)sender { - self.mapView.debugMask &= ~MGLMapDebugDepthBufferMask; - self.mapView.debugMask |= MGLMapDebugStencilBufferMask; -} - -- (IBAction)showDepthBuffer:(id)sender { - self.mapView.debugMask &= ~MGLMapDebugStencilBufferMask; - self.mapView.debugMask |= MGLMapDebugDepthBufferMask; -} - -- (IBAction)toggleShowsToolTipsOnDroppedPins:(id)sender { - _showsToolTipsOnDroppedPins = !_showsToolTipsOnDroppedPins; -} - -- (IBAction)toggleRandomizesCursorsOnDroppedPins:(id)sender { - _randomizesCursorsOnDroppedPins = !_randomizesCursorsOnDroppedPins; -} - -- (IBAction)dropManyPins:(id)sender { - [self removeAllAnnotations:sender]; - - NSRect bounds = self.mapView.bounds; - NSMutableArray *annotations = [NSMutableArray array]; - for (CGFloat x = NSMinX(bounds); x < NSMaxX(bounds); x += arc4random_uniform(50)) { - for (CGFloat y = NSMaxY(bounds); y >= NSMinY(bounds); y -= arc4random_uniform(100)) { - [annotations addObject:[self pinAtPoint:NSMakePoint(x, y)]]; - } - } - - [NSTimer scheduledTimerWithTimeInterval:1.0/60.0 - target:self - selector:@selector(dropOneOfManyPins:) - userInfo:annotations - repeats:YES]; -} - -- (void)dropOneOfManyPins:(NSTimer *)timer { - NSMutableArray *annotations = timer.userInfo; - NSUInteger numberOfAnnotationsToAdd = 50; - if (annotations.count < numberOfAnnotationsToAdd) { - numberOfAnnotationsToAdd = annotations.count; - } - NSArray *annotationsToAdd = [annotations subarrayWithRange: - NSMakeRange(0, numberOfAnnotationsToAdd)]; - [self.mapView addAnnotations:annotationsToAdd]; - [annotations removeObjectsInRange:NSMakeRange(0, numberOfAnnotationsToAdd)]; - if (!annotations.count) { - [timer invalidate]; - } -} - -- (IBAction)showAllAnnotations:(id)sender { - [self.mapView showAnnotations:self.mapView.annotations animated:YES]; -} - -- (IBAction)removeAllAnnotations:(id)sender { - [self.mapView removeAnnotations:self.mapView.annotations]; - _isShowingPolygonAndPolylineAnnotations = NO; - _isShowingAnimatedAnnotation = NO; -} - -- (IBAction)startWorldTour:(id)sender { - _isTouringWorld = YES; - - [self removeAllAnnotations:sender]; - NSUInteger numberOfAnnotations = sizeof(WorldTourDestinations) / sizeof(WorldTourDestinations[0]); - NSMutableArray *annotations = [NSMutableArray arrayWithCapacity:numberOfAnnotations]; - for (NSUInteger i = 0; i < numberOfAnnotations; i++) { - MGLPointAnnotation *annotation = [[MGLPointAnnotation alloc] init]; - annotation.coordinate = WorldTourDestinations[i]; - [annotations addObject:annotation]; - } - [self.mapView addAnnotations:annotations]; - [self continueWorldTourWithRemainingAnnotations:annotations]; -} - -- (void)continueWorldTourWithRemainingAnnotations:(NSMutableArray *)annotations { - MGLPointAnnotation *nextAnnotation = annotations.firstObject; - if (!nextAnnotation || !_isTouringWorld) { - _isTouringWorld = NO; - return; - } - - [annotations removeObjectAtIndex:0]; - MGLMapCamera *camera = [MGLMapCamera cameraLookingAtCenterCoordinate:nextAnnotation.coordinate - acrossDistance:0 - pitch:arc4random_uniform(60) - heading:arc4random_uniform(360)]; - __weak MapDocument *weakSelf = self; - [self.mapView flyToCamera:camera completionHandler:^{ - MapDocument *strongSelf = weakSelf; - [strongSelf performSelector:@selector(continueWorldTourWithRemainingAnnotations:) - withObject:annotations - afterDelay:2]; - }]; -} - -- (IBAction)stopWorldTour:(id)sender { - _isTouringWorld = NO; - // Any programmatic viewpoint change cancels outstanding animations. - self.mapView.camera = self.mapView.camera; -} - -- (IBAction)drawPolygonAndPolyLineAnnotations:(id)sender { - - if (_isShowingPolygonAndPolylineAnnotations) { - [self removeAllAnnotations:sender]; - return; - } - - _isShowingPolygonAndPolylineAnnotations = YES; - - // Pacific Northwest triangle - CLLocationCoordinate2D triangleCoordinates[3] = { - CLLocationCoordinate2DMake(44, -122), - CLLocationCoordinate2DMake(46, -122), - CLLocationCoordinate2DMake(46, -121) - }; - MGLPolygon *triangle = [MGLPolygon polygonWithCoordinates:triangleCoordinates count:3]; - [self.mapView addAnnotation:triangle]; - - // West coast line - CLLocationCoordinate2D lineCoordinates[4] = { - CLLocationCoordinate2DMake(47.6025, -122.3327), - CLLocationCoordinate2DMake(45.5189, -122.6726), - CLLocationCoordinate2DMake(37.7790, -122.4177), - CLLocationCoordinate2DMake(34.0532, -118.2349) - }; - MGLPolyline *line = [MGLPolyline polylineWithCoordinates:lineCoordinates count:4]; - [self.mapView addAnnotation:line]; -} - -- (IBAction)drawAnimatedAnnotation:(id)sender { - DroppedPinAnnotation *annotation = [[DroppedPinAnnotation alloc] init]; - [self.mapView addAnnotation:annotation]; - - _isShowingAnimatedAnnotation = YES; - - [NSTimer scheduledTimerWithTimeInterval:1.0/60.0 - target:self - selector:@selector(updateAnimatedAnnotation:) - userInfo:annotation - repeats:YES]; -} - - -- (id)randomOffscreenPointAnnotation { - - NSPredicate *pointAnnotationPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary * _Nullable bindings) { - return [evaluatedObject isKindOfClass:[MGLPointAnnotation class]]; - }]; - - NSArray *annotations = [self.mapView.annotations filteredArrayUsingPredicate:pointAnnotationPredicate]; - - if (annotations.count == 0) { - return nil; - } - - // NOTE: self.mapView.visibleAnnotations occasionally returns nil - see - // https://github.com/mapbox/mapbox-gl-native/issues/11296 - NSArray *visibleAnnotations = [self.mapView.visibleAnnotations filteredArrayUsingPredicate:pointAnnotationPredicate]; - - NSLog(@"Number of visible point annotations = %ld", visibleAnnotations.count); - - if (visibleAnnotations.count == annotations.count) { - return nil; - } - - NSMutableArray *invisibleAnnotations = [annotations mutableCopy]; - - if (visibleAnnotations.count > 0) { - [invisibleAnnotations removeObjectsInArray:visibleAnnotations]; - } - - // Now pick a random offscreen annotation. - uint32_t index = arc4random_uniform((uint32_t)invisibleAnnotations.count); - return invisibleAnnotations[index]; -} - -- (IBAction)selectOffscreenPointAnnotation:(id)sender { - id annotation = [self randomOffscreenPointAnnotation]; - if (annotation) { - [self.mapView selectAnnotation:annotation]; - - // Alternative method to select the annotation. These two should do the same thing. - // self.mapView.selectedAnnotations = @[annotation]; - NSAssert(self.mapView.selectedAnnotations.firstObject, @"The annotation was not selected"); - } -} - -- (void)updateAnimatedAnnotation:(NSTimer *)timer { - DroppedPinAnnotation *annotation = timer.userInfo; - double angle = timer.fireDate.timeIntervalSinceReferenceDate; - annotation.coordinate = CLLocationCoordinate2DMake( - sin(angle) * 20, - cos(angle) * 20); -} - -- (IBAction) addAnimatedImageSource:(id)sender { - - MGLImage *image = [[NSBundle bundleForClass:[self class]] imageForResource:@"southeast_0"]; - - MGLCoordinateBounds bounds = { {22.551103322318994, -90.24006072802854}, {36.928147474567794, -75.1441643681673} }; - MGLImageSource *imageSource = [[MGLImageSource alloc] initWithIdentifier:@"animated-radar-source" coordinateQuad:MGLCoordinateQuadFromCoordinateBounds(bounds) image:image]; - [self.mapView.style addSource:imageSource]; - - MGLRasterStyleLayer * imageLayer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"animated-radar-layer" source:imageSource]; - [self.mapView.style addLayer:imageLayer]; - - [NSTimer scheduledTimerWithTimeInterval:1.0 - target:self - selector:@selector(updateAnimatedImageSource:) - userInfo:imageSource - repeats:YES]; -} - - -- (void)updateAnimatedImageSource:(NSTimer *)timer { - static int radarSuffix = 0; - MGLImageSource *imageSource = (MGLImageSource *)timer.userInfo; - - MGLImage *image = [[NSBundle bundleForClass:[self class]] imageForResource:[NSString stringWithFormat:@"southeast_%d", radarSuffix++]]; - [imageSource setValue:image forKey:@"image"]; - - if(radarSuffix > 3) { - radarSuffix = 0 ; - } -} - -- (IBAction)insertCustomStyleLayer:(id)sender { - [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) { - [self removeCustomStyleLayer:sender]; - }]; - - if (!self.undoManager.isUndoing) { - [self.undoManager setActionName:@"Add Lime Green Layer"]; - } - - LimeGreenStyleLayer *layer = [[LimeGreenStyleLayer alloc] initWithIdentifier:@"mbx-custom"]; - MGLStyleLayer *houseNumberLayer = [self.mapView.style layerWithIdentifier:@"housenum-label"]; - if (houseNumberLayer) { - [self.mapView.style insertLayer:layer belowLayer:houseNumberLayer]; - } else { - [self.mapView.style addLayer:layer]; - } -} - -- (IBAction)removeCustomStyleLayer:(id)sender { - [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) { - [self insertCustomStyleLayer:sender]; - }]; - - if (!self.undoManager.isUndoing) { - [self.undoManager setActionName:@"Delete Lime Green Layer"]; - } - - MGLStyleLayer *layer = [self.mapView.style layerWithIdentifier:@"mbx-custom"]; - [self.mapView.style removeLayer:layer]; -} - -- (IBAction)insertGraticuleLayer:(id)sender { - [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) { - [self removeGraticuleLayer:sender]; - }]; - - if (!self.undoManager.isUndoing) { - [self.undoManager setActionName:@"Add Graticule"]; - } - - NSDictionary *sourceOptions = @{ - MGLShapeSourceOptionMaximumZoomLevel:@14, - MGLShapeSourceOptionWrapsCoordinates: @YES, - MGLShapeSourceOptionClipsCoordinates: @YES, - }; - MGLComputedShapeSource *source = [[MGLComputedShapeSource alloc] initWithIdentifier:@"graticule" - options:sourceOptions]; - - source.dataSource = self; - [self.mapView.style addSource:source]; - MGLLineStyleLayer *lineLayer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"graticule.lines" - source:source]; - [self.mapView.style addLayer:lineLayer]; - MGLSymbolStyleLayer *labelLayer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"graticule.labels" - source:source]; - labelLayer.text = [NSExpression expressionWithFormat:@"value"]; - [self.mapView.style addLayer:labelLayer]; -} - -- (IBAction)removeGraticuleLayer:(id)sender { - [self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) { - [self insertGraticuleLayer:sender]; - }]; - - if (!self.undoManager.isUndoing) { - [self.undoManager setActionName:@"Delete Graticule"]; - } - - MGLStyleLayer *layer = [self.mapView.style layerWithIdentifier:@"graticule.lines"]; - [self.mapView.style removeLayer:layer]; - - layer = [self.mapView.style layerWithIdentifier:@"graticule.labels"]; - [self.mapView.style removeLayer:layer]; - - MGLSource *source = [self.mapView.style sourceWithIdentifier:@"graticule"]; - [self.mapView.style removeSource:source]; -} - -- (IBAction)enhanceTerrain:(id)sender { - // Find all the identifiers of Mapbox Terrain sources used in the style. - NSMutableSet *terrainSourceIdentifiers = [NSMutableSet set]; - for (MGLVectorTileSource *source in self.mapView.style.sources) { - if (![source isKindOfClass:[MGLVectorTileSource class]]) { - continue; - } - - if (source.mapboxTerrain) { - [terrainSourceIdentifiers addObject:source.identifier]; - } - } - - // Find and remove all the style layers using those sources. - NSUInteger hillshadeIndex = NSNotFound; - NSEnumerator *layerEnumerator = self.mapView.style.layers.objectEnumerator; - MGLVectorStyleLayer *layer; - for (NSUInteger i = 0; (layer = layerEnumerator.nextObject); i++) { - if (![layer isKindOfClass:[MGLVectorStyleLayer class]]) { - continue; - } - - if ([terrainSourceIdentifiers containsObject:layer.sourceIdentifier] - && [layer.sourceLayerIdentifier isEqualToString:@"hillshade"]) { - hillshadeIndex = i; - [self.mapView.style removeLayer:layer]; - } - } - - if (hillshadeIndex == NSNotFound) { - return; - } - - // Add a Mapbox Terrain-RGB source. - NSURL *terrainRGBURL = [NSURL URLWithString:@"mapbox://mapbox.terrain-rgb"]; - MGLRasterDEMSource *terrainRGBSource = [[MGLRasterDEMSource alloc] initWithIdentifier:@"terrain" configurationURL:terrainRGBURL]; - [self.mapView.style addSource:terrainRGBSource]; - - // Insert a hillshade layer where the Mapbox Terrain–based layers were. - MGLHillshadeStyleLayer *hillshadeLayer = [[MGLHillshadeStyleLayer alloc] initWithIdentifier:@"hillshade" source:terrainRGBSource]; - [self.mapView.style insertLayer:hillshadeLayer atIndex:hillshadeIndex]; -} - -#pragma mark Offline packs - -- (IBAction)addOfflinePack:(id)sender { - self.offlinePackNameField.stringValue = @""; - self.offlinePackNameField.placeholderString = MGLStringFromCoordinateBounds(self.mapView.visibleCoordinateBounds); - self.minimumOfflinePackZoomLevelField.doubleValue = floor(self.mapView.zoomLevel); - self.maximumOfflinePackZoomLevelField.doubleValue = ceil(self.mapView.maximumZoomLevel); - self.minimumOfflinePackZoomLevelFormatter.minimum = @(floor(self.mapView.minimumZoomLevel)); - self.maximumOfflinePackZoomLevelFormatter.minimum = @(floor(self.mapView.minimumZoomLevel)); - self.minimumOfflinePackZoomLevelFormatter.maximum = @(ceil(self.mapView.maximumZoomLevel)); - self.maximumOfflinePackZoomLevelFormatter.maximum = @(ceil(self.mapView.maximumZoomLevel)); - - id ideographicFontFamilyName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"MGLIdeographicFontFamilyName"]; - self.includesIdeographicGlyphsBox.state = ([ideographicFontFamilyName isKindOfClass:[NSNumber class]] && ![ideographicFontFamilyName boolValue]) ? NSOffState : NSOnState; - [self.addOfflinePackWindow makeFirstResponder:self.offlinePackNameField]; - - __weak __typeof__(self) weakSelf = self; - [self.window beginSheet:self.addOfflinePackWindow completionHandler:^(NSModalResponse returnCode) { - __typeof__(self) strongSelf = weakSelf; - if (!strongSelf || returnCode != NSModalResponseOK) { - return; - } - - id region = - [[MGLTilePyramidOfflineRegion alloc] initWithStyleURL:strongSelf.mapView.styleURL - bounds:strongSelf.mapView.visibleCoordinateBounds - fromZoomLevel:strongSelf.minimumOfflinePackZoomLevelField.integerValue - toZoomLevel:strongSelf.maximumOfflinePackZoomLevelField.integerValue]; - region.includesIdeographicGlyphs = strongSelf.includesIdeographicGlyphsBox.state == NSOnState; - NSString *name = strongSelf.offlinePackNameField.stringValue; - if (!name.length) { - name = strongSelf.offlinePackNameField.placeholderString; - } - NSData *context = [[NSValueTransformer valueTransformerForName:@"OfflinePackNameValueTransformer"] reverseTransformedValue:name]; - [[MGLOfflineStorage sharedOfflineStorage] addPackForRegion:region withContext:context completionHandler:^(MGLOfflinePack * _Nullable pack, NSError * _Nullable error) { - if (error) { - [[NSAlert alertWithError:error] runModal]; - } else { - [(AppDelegate *)NSApp.delegate watchOfflinePack:pack]; - [pack resume]; - } - }]; - }]; -} - -- (IBAction)confirmAddingOfflinePack:(id)sender { - [self.window endSheet:self.addOfflinePackWindow returnCode:[sender tag] ? NSModalResponseOK : NSModalResponseCancel]; -} - -#pragma mark Mouse events - -- (void)handlePressGesture:(NSPressGestureRecognizer *)gestureRecognizer { - if (gestureRecognizer.state == NSGestureRecognizerStateBegan) { - NSPoint location = [gestureRecognizer locationInView:self.mapView]; - if (!NSPointInRect([gestureRecognizer locationInView:self.mapView.compass], self.mapView.compass.bounds) - && !NSPointInRect([gestureRecognizer locationInView:self.mapView.zoomControls], self.mapView.zoomControls.bounds) - && !NSPointInRect([gestureRecognizer locationInView:self.mapView.attributionView], self.mapView.attributionView.bounds)) { - [self dropPinAtPoint:location]; - } - } -} - -- (IBAction)manipulateStyle:(id)sender { - MGLTransition transition = { .duration = 5, .delay = 1 }; - self.mapView.style.transition = transition; - - MGLStyleLayer *waterLayer = [self.mapView.style layerWithIdentifier:@"water"]; - NSExpression *colorExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{ - @0.0: [NSColor redColor], - @10.0: [NSColor yellowColor], - @20.0: [NSColor blackColor], - }]; - - if ([waterLayer respondsToSelector:@selector(fillColor)]) { - [waterLayer setValue:colorExpression forKey:@"fillColor"]; - } else if ([waterLayer respondsToSelector:@selector(lineColor)]) { - [waterLayer setValue:colorExpression forKey:@"lineColor"]; - } - - NSString *filePath = [[NSBundle bundleForClass:self.class] pathForResource:@"amsterdam" ofType:@"geojson"]; - NSURL *geoJSONURL = [NSURL fileURLWithPath:filePath]; - MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"ams" URL:geoJSONURL options:nil]; - [self.mapView.style addSource:source]; - - MGLCircleStyleLayer *circleLayer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"test" source:source]; - circleLayer.circleColor = [NSExpression expressionForConstantValue:[NSColor greenColor]]; - circleLayer.circleRadius = [NSExpression expressionForConstantValue:@40]; -// fillLayer.predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"type", @"park"]; - [self.mapView.style addLayer:circleLayer]; - - MGLSource *streetsSource = [self.mapView.style sourceWithIdentifier:@"composite"]; - if (streetsSource) { - NSImage *image = [NSImage imageNamed:NSImageNameIChatTheaterTemplate]; - [self.mapView.style setImage:image forName:NSImageNameIChatTheaterTemplate]; - - MGLSymbolStyleLayer *theaterLayer = [[MGLSymbolStyleLayer alloc] initWithIdentifier:@"theaters" source:streetsSource]; - theaterLayer.sourceLayerIdentifier = @"poi_label"; - theaterLayer.predicate = [NSPredicate predicateWithFormat:@"maki == 'theatre'"]; - theaterLayer.iconImageName = [NSExpression expressionForConstantValue:NSImageNameIChatTheaterTemplate]; - theaterLayer.iconScale = [NSExpression expressionForConstantValue:@2]; - theaterLayer.iconColor = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{ - @16.0: [NSColor redColor], - @18.0: [NSColor yellowColor], - @20.0: [NSColor blackColor], - }]; - [self.mapView.style addLayer:theaterLayer]; - } - - NSURL *imageURL = [NSURL URLWithString:@"https://www.mapbox.com/mapbox-gl-js/assets/radar.gif"]; - MGLCoordinateQuad quad = { {46.437, -80.425}, - {37.936, -80.425}, - {37.936, -71.516}, - {46.437, -71.516} }; - MGLImageSource *imageSource = [[MGLImageSource alloc] initWithIdentifier:@"radar-source" coordinateQuad:quad URL:imageURL]; - [self.mapView.style addSource:imageSource]; - - MGLRasterStyleLayer * imageLayer = [[MGLRasterStyleLayer alloc] initWithIdentifier:@"radar-layer" source:imageSource]; - [self.mapView.style addLayer:imageLayer]; -} - -- (IBAction)dropPin:(NSMenuItem *)sender { - [self dropPinAtPoint:_mouseLocationForMapViewContextMenu]; -} - -- (void)dropPinAtPoint:(NSPoint)point { - DroppedPinAnnotation *annotation = [self pinAtPoint:point]; - [self.mapView addAnnotation:annotation]; - [self.mapView selectAnnotation:annotation]; -} - -- (DroppedPinAnnotation *)pinAtPoint:(NSPoint)point { - NSArray *features = [self.mapView visibleFeaturesAtPoint:point]; - NSString *title; - NSString *description; - for (id feature in features) { - if (!title) { - title = [feature attributeForKey:@"title"] ?: [feature attributeForKey:@"name_en"] ?: [feature attributeForKey:@"name"]; - - // simplestyle-spec defines a “description” attribute in HTML format. - NSString *featureDescription = [feature attributeForKey:@"description"]; - if (featureDescription) { - // Convert HTML to plain text, because the default popover is - // bound to an NSString-typed property. - NSData *data = [featureDescription dataUsingEncoding:NSUTF8StringEncoding]; - description = [[NSAttributedString alloc] initWithHTML:data options:@{} documentAttributes:nil].string; - } - - if (title) { - break; - } - } - } - - DroppedPinAnnotation *annotation = [[DroppedPinAnnotation alloc] init]; - annotation.coordinate = [self.mapView convertPoint:point toCoordinateFromView:self.mapView]; - annotation.title = title ?: @"Dropped Pin"; - annotation.note = description; - _spellOutNumberFormatter.numberStyle = NSNumberFormatterSpellOutStyle; - if (_showsToolTipsOnDroppedPins) { - NSString *formattedNumber = [_spellOutNumberFormatter stringFromNumber:@(++_droppedPinCounter)]; - annotation.toolTip = formattedNumber; - } - return annotation; -} - -- (IBAction)removePin:(NSMenuItem *)sender { - [self removePinAtPoint:_mouseLocationForMapViewContextMenu]; -} - -- (void)removePinAtPoint:(NSPoint)point { - [self.mapView removeAnnotation:[self.mapView annotationAtPoint:point]]; -} - -- (IBAction)selectFeatures:(id)sender { - [self selectFeaturesAtPoint:_mouseLocationForMapViewContextMenu]; -} - -- (void)selectFeaturesAtPoint:(NSPoint)point { - NSArray *features = [self.mapView visibleFeaturesAtPoint:point]; - NSArray *flattenedFeatures = MBXFlattenedShapes(features); - [self.mapView addAnnotations:flattenedFeatures]; -} - -#pragma mark User interface validation - -- (BOOL)validateMenuItem:(NSMenuItem *)menuItem { - if (menuItem.action == @selector(showStyle:)) { - NSURL *styleURL = self.mapView.styleURL; - NSCellStateValue state; - switch (menuItem.tag) { - case 1: - state = [styleURL isEqual:[MGLStyle streetsStyleURL]]; - break; - case 2: - state = [styleURL isEqual:[MGLStyle outdoorsStyleURL]]; - break; - case 3: - state = [styleURL isEqual:[MGLStyle lightStyleURL]]; - break; - case 4: - state = [styleURL isEqual:[MGLStyle darkStyleURL]]; - break; - case 5: - state = [styleURL isEqual:[MGLStyle satelliteStyleURL]]; - break; - case 6: - state = [styleURL isEqual:[MGLStyle satelliteStreetsStyleURL]]; - break; - default: - return NO; - } - menuItem.state = state; - return YES; - } - if (menuItem.action == @selector(chooseCustomStyle:)) { - menuItem.state = self.indexOfStyleInToolbarItem == NSNotFound; - return YES; - } - if (menuItem.action == @selector(zoomIn:)) { - return self.mapView.zoomLevel < self.mapView.maximumZoomLevel; - } - if (menuItem.action == @selector(zoomOut:)) { - return self.mapView.zoomLevel > self.mapView.minimumZoomLevel; - } - if (menuItem.action == @selector(snapToNorth:)) { - return self.mapView.direction != 0; - } - if (menuItem.action == @selector(reload:)) { - return YES; - } - if (menuItem.action == @selector(toggleLayers:)) { - BOOL isShown = ![self.splitView isSubviewCollapsed:self.splitView.arrangedSubviews.firstObject]; - menuItem.title = isShown ? @"Hide Layers" : @"Show Layers"; - return YES; - } - if (menuItem.action == @selector(toggleStyleLayers:)) { - NSInteger row = self.styleLayersTableView.clickedRow; - if (row == -1) { - row = self.styleLayersTableView.selectedRow; - } - if (row == -1) { - menuItem.title = @"Show"; - } else { - BOOL isVisible = self.mapView.style.reversedLayers[row].visible; - menuItem.title = isVisible ? @"Hide" : @"Show"; - } - return row != -1; - } - if (menuItem.action == @selector(deleteStyleLayers:)) { - return self.styleLayersTableView.clickedRow >= 0 || self.styleLayersTableView.selectedRow >= 0; - } - if (menuItem.action == @selector(setLabelLanguage:)) { - menuItem.state = menuItem.tag == _isLocalizingLabels ? NSOnState: NSOffState; - if (menuItem.tag) { - NSLocale *locale = [NSLocale localeWithLocaleIdentifier:[NSBundle mainBundle].developmentLocalization]; - NSString *preferredLanguage = [MGLVectorTileSource preferredMapboxStreetsLanguage] ?: @"en"; - menuItem.title = [locale displayNameForKey:NSLocaleIdentifier value:preferredLanguage]; - } - return YES; - } - if (menuItem.action == @selector(manipulateStyle:)) { - return YES; - } - if (menuItem.action == @selector(dropPin:)) { - id annotationUnderCursor = [self.mapView annotationAtPoint:_mouseLocationForMapViewContextMenu]; - menuItem.hidden = annotationUnderCursor != nil; - return YES; - } - if (menuItem.action == @selector(removePin:)) { - id annotationUnderCursor = [self.mapView annotationAtPoint:_mouseLocationForMapViewContextMenu]; - menuItem.hidden = annotationUnderCursor == nil; - return YES; - } - if (menuItem.action == @selector(selectFeatures:)) { - return YES; - } - if (menuItem.action == @selector(toggleTileBoundaries:)) { - BOOL isShown = self.mapView.debugMask & MGLMapDebugTileBoundariesMask; - menuItem.title = isShown ? @"Hide Tile Boundaries" : @"Show Tile Boundaries"; - return YES; - } - if (menuItem.action == @selector(toggleTileInfo:)) { - BOOL isShown = self.mapView.debugMask & MGLMapDebugTileInfoMask; - menuItem.title = isShown ? @"Hide Tile Info" : @"Show Tile Info"; - return YES; - } - if (menuItem.action == @selector(toggleTileTimestamps:)) { - BOOL isShown = self.mapView.debugMask & MGLMapDebugTimestampsMask; - menuItem.title = isShown ? @"Hide Tile Timestamps" : @"Show Tile Timestamps"; - return YES; - } - if (menuItem.action == @selector(toggleCollisionBoxes:)) { - BOOL isShown = self.mapView.debugMask & MGLMapDebugCollisionBoxesMask; - menuItem.title = isShown ? @"Hide Collision Boxes" : @"Show Collision Boxes"; - return YES; - } - if (menuItem.action == @selector(toggleOverdrawVisualization:)) { - BOOL isShown = self.mapView.debugMask & MGLMapDebugOverdrawVisualizationMask; - menuItem.title = isShown ? @"Hide Overdraw Visualization" : @"Show Overdraw Visualization"; - return YES; - } - if (menuItem.action == @selector(showColorBuffer:)) { - BOOL enabled = self.mapView.debugMask & (MGLMapDebugStencilBufferMask | MGLMapDebugDepthBufferMask); - menuItem.state = enabled ? NSOffState : NSOnState; - return YES; - } - if (menuItem.action == @selector(showStencilBuffer:)) { - BOOL enabled = self.mapView.debugMask & MGLMapDebugStencilBufferMask; - menuItem.state = enabled ? NSOnState : NSOffState; - return YES; - } - if (menuItem.action == @selector(showDepthBuffer:)) { - BOOL enabled = self.mapView.debugMask & MGLMapDebugDepthBufferMask; - menuItem.state = enabled ? NSOnState : NSOffState; - return YES; - } - if (menuItem.action == @selector(toggleShowsToolTipsOnDroppedPins:)) { - BOOL isShown = _showsToolTipsOnDroppedPins; - menuItem.title = isShown ? @"Hide Tooltips on Dropped Pins" : @"Show Tooltips on Dropped Pins"; - return YES; - } - if (menuItem.action == @selector(toggleRandomizesCursorsOnDroppedPins:)) { - BOOL isRandom = _randomizesCursorsOnDroppedPins; - menuItem.title = isRandom ? @"Use Default Cursor for Dropped Pins" : @"Use Random Cursors for Dropped Pins"; - return _showsToolTipsOnDroppedPins; - } - if (menuItem.action == @selector(dropManyPins:)) { - return YES; - } - if (menuItem.action == @selector(drawPolygonAndPolyLineAnnotations:)) { - return !_isShowingPolygonAndPolylineAnnotations; - } - if (menuItem.action == @selector(drawAnimatedAnnotation:)) { - return !_isShowingAnimatedAnnotation; - } - if (menuItem.action == @selector(addAnimatedImageSource:)) { - return YES; - } - if (menuItem.action == @selector(insertCustomStyleLayer:)) { - return ![self.mapView.style layerWithIdentifier:@"mbx-custom"]; - } - if (menuItem.action == @selector(insertGraticuleLayer:)) { - return ![self.mapView.style sourceWithIdentifier:@"graticule"]; - } - if (menuItem.action == @selector(selectOffscreenPointAnnotation:)) { - return YES; - } - if (menuItem.action == @selector(showAllAnnotations:) || menuItem.action == @selector(removeAllAnnotations:)) { - return self.mapView.annotations.count > 0; - } - if (menuItem.action == @selector(enhanceTerrain:)) { - return YES; - } - if (menuItem.action == @selector(startWorldTour:)) { - return !_isTouringWorld; - } - if (menuItem.action == @selector(stopWorldTour:)) { - return _isTouringWorld; - } - if (menuItem.action == @selector(addOfflinePack:)) { - NSURL *styleURL = self.mapView.styleURL; - return !styleURL.isFileURL; - } - if (menuItem.action == @selector(giveFeedback:)) { - return YES; - } - if (menuItem.action == @selector(import:)) { - return YES; - } - if (menuItem.action == @selector(takeSnapshot:)) { - return !(_snapshotter && [_snapshotter isLoading]); - } - return NO; -} - -- (NSUInteger)indexOfStyleInToolbarItem { - if (![MGLAccountManager accessToken]) { - return NSNotFound; - } - - NSArray *styleURLs = @[ - [MGLStyle streetsStyleURL], - [MGLStyle outdoorsStyleURL], - [MGLStyle lightStyleURL], - [MGLStyle darkStyleURL], - [MGLStyle satelliteStyleURL], - [MGLStyle satelliteStreetsStyleURL], - ]; - return [styleURLs indexOfObject:self.mapView.styleURL]; -} - -- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem { - if (!self.mapView) { - return NO; - } - - SEL action = toolbarItem.action; - if (action == @selector(showShareMenu:)) { - [(NSButton *)toolbarItem.view sendActionOn:NSLeftMouseDownMask]; - if (![MGLAccountManager accessToken]) { - return NO; - } - NSURL *styleURL = self.mapView.styleURL; - return ([styleURL.scheme isEqualToString:@"mapbox"] - && [styleURL.pathComponents.firstObject isEqualToString:@"styles"]); - } - if (action == @selector(showStyle:)) { - NSPopUpButton *popUpButton = (NSPopUpButton *)toolbarItem.view; - NSInteger index = self.indexOfStyleInToolbarItem; - if (index == NSNotFound) { - index = -1; - } - [popUpButton selectItemAtIndex:index]; - if (index == -1) { - NSString *name = self.mapView.style.name; - popUpButton.title = name ?: @"Custom"; - } - } - if (action == @selector(toggleLayers:)) { - BOOL isShown = ![self.splitView isSubviewCollapsed:self.splitView.arrangedSubviews.firstObject]; - [(NSButton *)toolbarItem.view setState:isShown ? NSOnState : NSOffState]; - } - return NO; -} - -#pragma mark NSSharingServicePickerDelegate methods - -- (NSArray *)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker sharingServicesForItems:(NSArray *)items proposedSharingServices:(NSArray *)proposedServices { - NSURL *shareURL = self.shareURL; - NSURL *browserURL = [[NSWorkspace sharedWorkspace] URLForApplicationToOpenURL:shareURL]; - NSImage *browserIcon = [[NSWorkspace sharedWorkspace] iconForFile:browserURL.path]; - NSString *browserName = [[NSFileManager defaultManager] displayNameAtPath:browserURL.path]; - NSString *browserServiceName = [NSString stringWithFormat:@"Open in %@", browserName]; - - NSSharingService *browserService = [[NSSharingService alloc] initWithTitle:browserServiceName - image:browserIcon - alternateImage:nil - handler:^{ - [[NSWorkspace sharedWorkspace] openURL:self.shareURL]; - }]; - - NSMutableArray *sharingServices = [proposedServices mutableCopy]; - [sharingServices insertObject:browserService atIndex:0]; - return sharingServices; -} - -#pragma mark NSMenuDelegate methods - -- (void)menuWillOpen:(NSMenu *)menu { - if (menu == self.mapViewContextMenu) { - _mouseLocationForMapViewContextMenu = [self.window.contentView convertPoint:self.window.mouseLocationOutsideOfEventStream - toView:self.mapView]; - } -} - -#pragma mark NSSplitViewDelegate methods - -- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview { - return subview != self.mapView; -} - -- (BOOL)splitView:(NSSplitView *)splitView shouldCollapseSubview:(NSView *)subview forDoubleClickOnDividerAtIndex:(NSInteger)dividerIndex { - return YES; -} - -#pragma mark MGLMapViewDelegate methods - -- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style { - [self updateLabels]; -} - -- (BOOL)mapView:(MGLMapView *)mapView annotationCanShowCallout:(id )annotation { - return YES; -} - -- (MGLAnnotationImage *)mapView:(MGLMapView *)mapView imageForAnnotation:(id )annotation { - MGLAnnotationImage *annotationImage = [self.mapView dequeueReusableAnnotationImageWithIdentifier:MGLDroppedPinAnnotationImageIdentifier]; - if (!annotationImage) { - NSString *imagePath = [[NSBundle bundleForClass:[MGLMapView class]] - pathForResource:@"default_marker" ofType:@"pdf"]; - NSImage *image = [[NSImage alloc] initWithContentsOfFile:imagePath]; - NSRect alignmentRect = image.alignmentRect; - alignmentRect.origin.y = NSMidY(alignmentRect); - alignmentRect.size.height /= 2; - image.alignmentRect = alignmentRect; - annotationImage = [MGLAnnotationImage annotationImageWithImage:image - reuseIdentifier:MGLDroppedPinAnnotationImageIdentifier]; - } - if (_randomizesCursorsOnDroppedPins) { - NSArray *cursors = @[ - [NSCursor IBeamCursor], - [NSCursor crosshairCursor], - [NSCursor pointingHandCursor], - [NSCursor disappearingItemCursor], - [NSCursor IBeamCursorForVerticalLayout], - [NSCursor operationNotAllowedCursor], - [NSCursor dragLinkCursor], - [NSCursor dragCopyCursor], - [NSCursor contextualMenuCursor], - ]; - annotationImage.cursor = cursors[arc4random_uniform((uint32_t)cursors.count) % cursors.count]; - } else { - annotationImage.cursor = nil; - } - return annotationImage; -} - -- (void)mapView:(MGLMapView *)mapView didSelectAnnotation:(id )annotation { - if ([annotation isKindOfClass:[DroppedPinAnnotation class]]) { - DroppedPinAnnotation *droppedPin = (DroppedPinAnnotation *)annotation; - [droppedPin resume]; - } -} - -- (void)mapView:(MGLMapView *)mapView didDeselectAnnotation:(id )annotation { - if ([annotation isKindOfClass:[DroppedPinAnnotation class]]) { - DroppedPinAnnotation *droppedPin = (DroppedPinAnnotation *)annotation; - [droppedPin pause]; - } -} - -- (CGFloat)mapView:(MGLMapView *)mapView alphaForShapeAnnotation:(MGLShape *)annotation { - return 0.8; -} - -#pragma mark - MGLComputedShapeSourceDataSource -- (NSArray>*)featuresInCoordinateBounds:(MGLCoordinateBounds)bounds zoomLevel:(NSUInteger)zoom { - double gridSpacing; - if(zoom >= 13) { - gridSpacing = 0.01; - } else if(zoom >= 11) { - gridSpacing = 0.05; - } else if(zoom == 10) { - gridSpacing = .1; - } else if(zoom == 9) { - gridSpacing = 0.25; - } else if(zoom == 8) { - gridSpacing = 0.5; - } else if (zoom >= 6) { - gridSpacing = 1; - } else if(zoom == 5) { - gridSpacing = 2; - } else if(zoom >= 4) { - gridSpacing = 5; - } else if(zoom == 2) { - gridSpacing = 10; - } else { - gridSpacing = 20; - } - - NSMutableArray > * features = [NSMutableArray array]; - CLLocationCoordinate2D coords[2]; - - for (double y = ceil(bounds.ne.latitude / gridSpacing) * gridSpacing; y >= floor(bounds.sw.latitude / gridSpacing) * gridSpacing; y -= gridSpacing) { - coords[0] = CLLocationCoordinate2DMake(y, bounds.sw.longitude); - coords[1] = CLLocationCoordinate2DMake(y, bounds.ne.longitude); - MGLPolylineFeature *feature = [MGLPolylineFeature polylineWithCoordinates:coords count:2]; - feature.attributes = @{@"value": @(y)}; - [features addObject:feature]; - } - - for (double x = floor(bounds.sw.longitude / gridSpacing) * gridSpacing; x <= ceil(bounds.ne.longitude / gridSpacing) * gridSpacing; x += gridSpacing) { - coords[0] = CLLocationCoordinate2DMake(bounds.sw.latitude, x); - coords[1] = CLLocationCoordinate2DMake(bounds.ne.latitude, x); - MGLPolylineFeature *feature = [MGLPolylineFeature polylineWithCoordinates:coords count:2]; - feature.attributes = @{@"value": @(x)}; - [features addObject:feature]; - } - - return features; -} - -@end - -@interface ValidatedToolbarItem : NSToolbarItem - -@end - -@implementation ValidatedToolbarItem - -- (void)validate { - [(MapDocument *)self.toolbar.delegate validateToolbarItem:self]; -} - -@end diff --git a/platform/macos/app/OfflinePackNameValueTransformer.h b/platform/macos/app/OfflinePackNameValueTransformer.h deleted file mode 100644 index 11fe3ff441b..00000000000 --- a/platform/macos/app/OfflinePackNameValueTransformer.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface OfflinePackNameValueTransformer : NSValueTransformer - -@end diff --git a/platform/macos/app/OfflinePackNameValueTransformer.m b/platform/macos/app/OfflinePackNameValueTransformer.m deleted file mode 100644 index d1b3c20ac1c..00000000000 --- a/platform/macos/app/OfflinePackNameValueTransformer.m +++ /dev/null @@ -1,33 +0,0 @@ -#import "OfflinePackNameValueTransformer.h" - -static NSString * const MBXOfflinePackContextNameKey = @"Name"; - -@implementation OfflinePackNameValueTransformer - -+ (Class)transformedValueClass { - return [NSString class]; -} - -+ (BOOL)allowsReverseTransformation { - return YES; -} - -- (NSString *)transformedValue:(NSData *)context { - NSAssert([context isKindOfClass:[NSData class]], @"Context should be NSData."); - - NSDictionary *userInfo = [NSKeyedUnarchiver unarchiveObjectWithData:context]; - NSAssert([userInfo isKindOfClass:[NSDictionary class]], @"Context of offline pack isn’t a dictionary."); - NSString *name = userInfo[MBXOfflinePackContextNameKey]; - NSAssert([name isKindOfClass:[NSString class]], @"Name of offline pack isn’t a string."); - return name; -} - -- (NSData *)reverseTransformedValue:(NSString *)name { - NSAssert([name isKindOfClass:[NSString class]], @"Name should be a string."); - - return [NSKeyedArchiver archivedDataWithRootObject:@{ - MBXOfflinePackContextNameKey: name, - }]; -} - -@end diff --git a/platform/macos/app/StyleLayerIconTransformer.h b/platform/macos/app/StyleLayerIconTransformer.h deleted file mode 100644 index 1af1d512d68..00000000000 --- a/platform/macos/app/StyleLayerIconTransformer.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface StyleLayerIconTransformer : NSValueTransformer - -@end diff --git a/platform/macos/app/StyleLayerIconTransformer.m b/platform/macos/app/StyleLayerIconTransformer.m deleted file mode 100644 index c0891659248..00000000000 --- a/platform/macos/app/StyleLayerIconTransformer.m +++ /dev/null @@ -1,47 +0,0 @@ -#import "StyleLayerIconTransformer.h" - -#import - -@implementation StyleLayerIconTransformer - -+ (Class)transformedValueClass { - return [NSString class]; -} - -+ (BOOL)allowsReverseTransformation { - return NO; -} - -- (id)transformedValue:(MGLStyleLayer *)layer { - if ([layer isKindOfClass:[MGLBackgroundStyleLayer class]]) { - return [NSImage imageNamed:@"background"]; - } - if ([layer isKindOfClass:[MGLCircleStyleLayer class]]) { - return [NSImage imageNamed:@"circle"]; - } - if ([layer isKindOfClass:[MGLFillStyleLayer class]]) { - return [NSImage imageNamed:@"fill"]; - } - if ([layer isKindOfClass:[MGLFillExtrusionStyleLayer class]]) { - return [NSImage imageNamed:@"fill-extrusion"]; - } - if ([layer isKindOfClass:[MGLLineStyleLayer class]]) { - return [NSImage imageNamed:@"NSListViewTemplate"]; - } - if ([layer isKindOfClass:[MGLRasterStyleLayer class]]) { - return [[NSWorkspace sharedWorkspace] iconForFileType:@"jpg"]; - } - if ([layer isKindOfClass:[MGLSymbolStyleLayer class]]) { - return [NSImage imageNamed:@"symbol"]; - } - if ([layer isKindOfClass:[MGLHeatmapStyleLayer class]]) { - return [NSImage imageNamed:@"heatmap"]; - } - if ([layer isKindOfClass:[MGLHillshadeStyleLayer class]]) { - return [NSImage imageNamed:@"hillshade"]; - } - - return nil; -} - -@end diff --git a/platform/macos/app/TimeIntervalTransformer.h b/platform/macos/app/TimeIntervalTransformer.h deleted file mode 100644 index ca88ad2cd15..00000000000 --- a/platform/macos/app/TimeIntervalTransformer.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface TimeIntervalTransformer : NSValueTransformer - -@end diff --git a/platform/macos/app/TimeIntervalTransformer.m b/platform/macos/app/TimeIntervalTransformer.m deleted file mode 100644 index 2c9cb6fc748..00000000000 --- a/platform/macos/app/TimeIntervalTransformer.m +++ /dev/null @@ -1,53 +0,0 @@ -#import "TimeIntervalTransformer.h" - -@implementation TimeIntervalTransformer - -+ (Class)transformedValueClass { - return [NSString class]; -} - -+ (BOOL)allowsReverseTransformation { - return NO; -} - -NSString *NumberAndUnitString(NSInteger quantity, NSString *singular, NSString *plural) { - return [NSString stringWithFormat:@"%ld %@", quantity, quantity == 1 ? singular : plural]; -} - -- (id)transformedValue:(id)value { - if (![value isKindOfClass:[NSValue class]]) { - return nil; - } - - NSTimeInterval timeInterval = [value doubleValue]; - NSInteger seconds = floor(timeInterval); - NSInteger minutes = floor(seconds / 60); - seconds -= minutes * 60; - NSInteger hours = floor(minutes / 60); - minutes -= hours * 60; - NSInteger days = floor(hours / 24); - hours -= days * 24; - NSInteger weeks = floor(days) / 7; - days -= weeks * 7; - - NSMutableArray *components = [NSMutableArray array]; - if (seconds || timeInterval < 60) { - [components addObject:NumberAndUnitString(seconds, @"second", @"seconds")]; - } - if (minutes) { - [components insertObject:NumberAndUnitString(minutes, @"minute", @"minutes") atIndex:0]; - } - if (hours) { - [components insertObject:NumberAndUnitString(hours, @"hour", @"hours") atIndex:0]; - } - if (days) { - [components insertObject:NumberAndUnitString(days, @"day", @"days") atIndex:0]; - } - if (weeks) { - [components insertObject:NumberAndUnitString(weeks, @"week", @"weeks") atIndex:0]; - } - - return [components componentsJoinedByString:@", "]; -} - -@end diff --git a/platform/macos/app/ar.lproj/Localizable.strings b/platform/macos/app/ar.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/bg.lproj/Localizable.strings b/platform/macos/app/bg.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/ca.lproj/Localizable.strings b/platform/macos/app/ca.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/cs.lproj/Localizable.strings b/platform/macos/app/cs.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/da.lproj/Localizable.strings b/platform/macos/app/da.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/de.lproj/Localizable.strings b/platform/macos/app/de.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/es.lproj/Localizable.strings b/platform/macos/app/es.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/fi.lproj/Localizable.strings b/platform/macos/app/fi.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/fr.lproj/Localizable.strings b/platform/macos/app/fr.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/gl.lproj/Localizable.strings b/platform/macos/app/gl.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/he.lproj/Localizable.strings b/platform/macos/app/he.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/heatmap.json b/platform/macos/app/heatmap.json deleted file mode 100644 index 6469e570222..00000000000 --- a/platform/macos/app/heatmap.json +++ /dev/null @@ -1,809 +0,0 @@ -{ - "version": 8, - "name": "Basic Heatmap", - "center": [ - 30.49860107152665, - 50.459868549177486 - ], - "zoom": 14.033276876197775, - "bearing": 0, - "pitch": 0, - "sources": { - "mapbox": { - "url": "mapbox://mapbox.mapbox-streets-v7", - "type": "vector" - } - }, - "sprite": "mapbox://sprites/mourner/cjcgg2bl16cf42snvcbbaf09z", - "glyphs": "mapbox://fonts/mourner/{fontstack}/{range}.pbf", - "layers": [ - { - "id": "background", - "type": "background", - "paint": { - "background-color": "#dedede" - } - }, - { - "id": "landuse_overlay_national_park", - "type": "fill", - "source": "mapbox", - "source-layer": "landuse_overlay", - "filter": [ - "==", - "class", - "national_park" - ], - "paint": { - "fill-color": "#d2edae", - "fill-opacity": 0.75 - } - }, - { - "id": "landuse_park", - "type": "fill", - "source": "mapbox", - "source-layer": "landuse", - "filter": [ - "==", - "class", - "park" - ], - "paint": { - "fill-color": "#d2edae" - } - }, - { - "id": "waterway", - "type": "line", - "source": "mapbox", - "source-layer": "waterway", - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "in", - "class", - "canal", - "river" - ] - ], - "paint": { - "line-color": "#a0cfdf", - "line-width": { - "base": 1.4, - "stops": [ - [ - 8, - 0.5 - ], - [ - 20, - 15 - ] - ] - } - } - }, - { - "id": "water", - "type": "fill", - "source": "mapbox", - "source-layer": "water", - "paint": { - "fill-color": "#a0cfdf" - } - }, - { - "id": "building", - "type": "fill", - "source": "mapbox", - "source-layer": "building", - "paint": { - "fill-color": "#d6d6d6" - } - }, - { - "id": "tunnel_minor", - "type": "line", - "source": "mapbox", - "source-layer": "road", - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "structure", - "tunnel" - ], - [ - "in", - "class", - "link", - "motorway_link", - "path", - "pedestrian", - "service", - "street", - "street_limited", - "track" - ] - ] - ], - "layout": { - "line-cap": "butt", - "line-join": "miter" - }, - "paint": { - "line-color": "#efefef", - "line-width": { - "base": 1.55, - "stops": [ - [ - 4, - 0.25 - ], - [ - 20, - 30 - ] - ] - }, - "line-dasharray": [ - 0.36, - 0.18 - ] - } - }, - { - "id": "tunnel_major", - "type": "line", - "source": "mapbox", - "source-layer": "road", - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "structure", - "tunnel" - ], - [ - "in", - "class", - "motorway", - "primary", - "secondary", - "tertiary", - "trunk" - ] - ] - ], - "layout": { - "line-cap": "butt", - "line-join": "miter" - }, - "paint": { - "line-color": "#fff", - "line-width": { - "base": 1.4, - "stops": [ - [ - 6, - 0.5 - ], - [ - 20, - 30 - ] - ] - }, - "line-dasharray": [ - 0.28, - 0.14 - ] - } - }, - { - "id": "road_minor", - "type": "line", - "source": "mapbox", - "source-layer": "road", - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "in", - "class", - "link", - "motorway_link", - "path", - "pedestrian", - "service", - "street", - "street_limited", - "track" - ], - [ - "in", - "structure", - "ford", - "none" - ] - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-color": "#efefef", - "line-width": { - "base": 1.55, - "stops": [ - [ - 4, - 0.25 - ], - [ - 20, - 30 - ] - ] - } - } - }, - { - "id": "road_major", - "type": "line", - "source": "mapbox", - "source-layer": "road", - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "in", - "class", - "motorway", - "primary", - "secondary", - "tertiary", - "trunk" - ], - [ - "in", - "structure", - "ford", - "none" - ] - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-color": "#fff", - "line-width": { - "base": 1.4, - "stops": [ - [ - 6, - 0.5 - ], - [ - 20, - 30 - ] - ] - } - } - }, - { - "id": "bridge_minor case", - "type": "line", - "source": "mapbox", - "source-layer": "road", - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "link", - "motorway_link", - "path", - "pedestrian", - "service", - "street", - "street_limited", - "track" - ] - ] - ], - "layout": { - "line-cap": "butt", - "line-join": "miter" - }, - "paint": { - "line-color": "#dedede", - "line-width": { - "base": 1.6, - "stops": [ - [ - 12, - 0.5 - ], - [ - 20, - 10 - ] - ] - }, - "line-gap-width": { - "base": 1.55, - "stops": [ - [ - 4, - 0.25 - ], - [ - 20, - 30 - ] - ] - } - } - }, - { - "id": "bridge_major case", - "type": "line", - "source": "mapbox", - "source-layer": "road", - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "motorway", - "primary", - "secondary", - "tertiary", - "trunk" - ] - ] - ], - "layout": { - "line-cap": "butt", - "line-join": "miter" - }, - "paint": { - "line-color": "#dedede", - "line-width": { - "base": 1.6, - "stops": [ - [ - 12, - 0.5 - ], - [ - 20, - 10 - ] - ] - }, - "line-gap-width": { - "base": 1.55, - "stops": [ - [ - 4, - 0.25 - ], - [ - 20, - 30 - ] - ] - } - } - }, - { - "id": "bridge_minor", - "type": "line", - "source": "mapbox", - "source-layer": "road", - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "link", - "motorway_link", - "path", - "pedestrian", - "service", - "street", - "street_limited", - "track" - ] - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-color": "#efefef", - "line-width": { - "base": 1.55, - "stops": [ - [ - 4, - 0.25 - ], - [ - 20, - 30 - ] - ] - } - } - }, - { - "id": "bridge_major", - "type": "line", - "source": "mapbox", - "source-layer": "road", - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "==", - "structure", - "bridge" - ], - [ - "in", - "class", - "motorway", - "primary", - "secondary", - "tertiary", - "trunk" - ] - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-color": "#fff", - "line-width": { - "base": 1.4, - "stops": [ - [ - 6, - 0.5 - ], - [ - 20, - 30 - ] - ] - } - } - }, - { - "id": "admin_country", - "type": "line", - "source": "mapbox", - "source-layer": "admin", - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "all", - [ - "<=", - "admin_level", - 2 - ], - [ - "==", - "maritime", - 0 - ] - ] - ], - "layout": { - "line-cap": "round", - "line-join": "round" - }, - "paint": { - "line-color": "#8b8a8a", - "line-width": { - "base": 1.3, - "stops": [ - [ - 3, - 0.5 - ], - [ - 22, - 15 - ] - ] - } - } - }, - { - "id": "road_major_label", - "type": "symbol", - "source": "mapbox", - "source-layer": "road_label", - "filter": [ - "all", - [ - "==", - "$type", - "LineString" - ], - [ - "in", - "class", - "motorway", - "primary", - "secondary", - "tertiary", - "trunk" - ] - ], - "layout": { - "symbol-placement": "line", - "text-field": "{name_en}", - "text-font": [ - "Open Sans Semibold", - "Arial Unicode MS Bold" - ], - "text-transform": "uppercase", - "text-letter-spacing": 0.1, - "text-size": { - "base": 1.4, - "stops": [ - [ - 10, - 8 - ], - [ - 20, - 14 - ] - ] - } - }, - "paint": { - "text-color": "#666", - "text-halo-color": "rgba(255,255,255,0.75)", - "text-halo-width": 2 - } - }, - { - "id": "place_label_other", - "type": "symbol", - "source": "mapbox", - "source-layer": "place_label", - "minzoom": 8, - "filter": [ - "all", - [ - "==", - "$type", - "Point" - ], - [ - "in", - "type", - "hamlet", - "island", - "neighbourhood", - "suburb", - "town", - "village" - ] - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "Open Sans Semibold", - "Arial Unicode MS Bold" - ], - "text-max-width": 6, - "text-size": { - "stops": [ - [ - 6, - 12 - ], - [ - 12, - 16 - ] - ] - } - }, - "paint": { - "text-color": "#666", - "text-halo-color": "rgba(255,255,255,0.75)", - "text-halo-width": 1, - "text-halo-blur": 1 - } - }, - { - "id": "place_label_city", - "type": "symbol", - "source": "mapbox", - "source-layer": "place_label", - "maxzoom": 16, - "filter": [ - "all", - [ - "==", - "$type", - "Point" - ], - [ - "==", - "type", - "city" - ] - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "Open Sans Bold", - "Arial Unicode MS Bold" - ], - "text-max-width": 10, - "text-size": { - "stops": [ - [ - 3, - 12 - ], - [ - 8, - 16 - ] - ] - } - }, - "paint": { - "text-color": "#666", - "text-halo-color": "rgba(255,255,255,0.75)", - "text-halo-width": 1, - "text-halo-blur": 1 - } - }, - { - "id": "country_label", - "type": "symbol", - "source": "mapbox", - "source-layer": "country_label", - "maxzoom": 12, - "filter": [ - "==", - "$type", - "Point" - ], - "layout": { - "text-field": "{name_en}", - "text-font": [ - "Open Sans Regular", - "Arial Unicode MS Regular" - ], - "text-max-width": 10, - "text-size": { - "stops": [ - [ - 3, - 14 - ], - [ - 8, - 22 - ] - ] - } - }, - "paint": { - "text-color": "#666", - "text-halo-color": "rgba(255,255,255,0.75)", - "text-halo-width": 1, - "text-halo-blur": 1 - } - }, - { - "id": "road-heatmap", - "type": "heatmap", - "source": "mapbox", - "source-layer": "road", - "paint": { - "heatmap-intensity": 1 - } - } - ] -} diff --git a/platform/macos/app/hu.lproj/Localizable.strings b/platform/macos/app/hu.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/ja.lproj/Localizable.strings b/platform/macos/app/ja.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/ko.lproj/Localizable.strings b/platform/macos/app/ko.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/lt.lproj/Localizable.strings b/platform/macos/app/lt.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/main.m b/platform/macos/app/main.m deleted file mode 100644 index 8a6799b4146..00000000000 --- a/platform/macos/app/main.m +++ /dev/null @@ -1,5 +0,0 @@ -#import - -int main(int argc, const char * argv[]) { - return NSApplicationMain(argc, argv); -} diff --git a/platform/macos/app/nl.lproj/Localizable.strings b/platform/macos/app/nl.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/pl.lproj/Localizable.strings b/platform/macos/app/pl.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/pt-BR.lproj/Localizable.strings b/platform/macos/app/pt-BR.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/pt-PT.lproj/Localizable.strings b/platform/macos/app/pt-PT.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/resources/background.svg b/platform/macos/app/resources/background.svg deleted file mode 100644 index 39451e8b130..00000000000 --- a/platform/macos/app/resources/background.svg +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/platform/macos/app/resources/circle.svg b/platform/macos/app/resources/circle.svg deleted file mode 100644 index 91e0b11990c..00000000000 --- a/platform/macos/app/resources/circle.svg +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/platform/macos/app/resources/fill-extrusion.svg b/platform/macos/app/resources/fill-extrusion.svg deleted file mode 100644 index 4052ba5253d..00000000000 --- a/platform/macos/app/resources/fill-extrusion.svg +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/platform/macos/app/resources/fill.svg b/platform/macos/app/resources/fill.svg deleted file mode 100644 index 7860a5fddb5..00000000000 --- a/platform/macos/app/resources/fill.svg +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/platform/macos/app/resources/heatmap.svg b/platform/macos/app/resources/heatmap.svg deleted file mode 100644 index fa2a46590a5..00000000000 --- a/platform/macos/app/resources/heatmap.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/platform/macos/app/resources/hillshade.svg b/platform/macos/app/resources/hillshade.svg deleted file mode 100644 index d3f0d72999e..00000000000 --- a/platform/macos/app/resources/hillshade.svg +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/platform/macos/app/resources/symbol.svg b/platform/macos/app/resources/symbol.svg deleted file mode 100644 index 68847cb50f8..00000000000 --- a/platform/macos/app/resources/symbol.svg +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/platform/macos/app/ru.lproj/Localizable.strings b/platform/macos/app/ru.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/sv.lproj/Localizable.strings b/platform/macos/app/sv.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/uk.lproj/Localizable.strings b/platform/macos/app/uk.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/vi.lproj/Localizable.strings b/platform/macos/app/vi.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/wms.json b/platform/macos/app/wms.json deleted file mode 100644 index e5fb2362593..00000000000 --- a/platform/macos/app/wms.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "version": 8, - "name": "WMS Test", - "sources": { - "wms-test": { - "type": "raster", - "tiles": [ - "https://geodata.state.nj.us/imagerywms/Natural2015?bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&width=256&height=256&layers=Natural2015" - ], - "tileSize": 256 - } - }, - "layers": [{ - "id": "wms-test-layer", - "type": "raster", - "source": "wms-test", - "paint": { - "raster-fade-duration": 100 - } - }] -} diff --git a/platform/macos/app/zh-Hans.lproj/Localizable.strings b/platform/macos/app/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/app/zh-Hant.lproj/Localizable.strings b/platform/macos/app/zh-Hant.lproj/Localizable.strings deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/platform/macos/docs/doc-README.md b/platform/macos/docs/doc-README.md deleted file mode 100644 index 8ce2df39a4f..00000000000 --- a/platform/macos/docs/doc-README.md +++ /dev/null @@ -1,9 +0,0 @@ -# [Mapbox Maps SDK for macOS](https://github.com/mapbox/mapbox-gl-native/tree/master/platform/macos/) - -The Mapbox Maps SDK for macOS is an open-source framework for embedding interactive map views with scalable, customizable vector maps into Cocoa applications on macOS 10.11.0 and above using Objective-C, Swift, Interface Builder, or AppleScript. The SDK takes stylesheets that conform to the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/), applies them to vector tiles that conform to the [Mapbox Vector Tile Specification](https://www.mapbox.com/developers/vector-tiles/), and renders them using OpenGL. - -![](img/screenshot.jpg) - -For setup information, consult the README.md that comes with this documentation. For further instructions, consult the [Mapbox Maps SDK for macOS documentation](https://mapbox.github.io/mapbox-gl-native/macos/). The [Mapbox Maps SDK for iOS](https://www.mapbox.com/ios-sdk/) has [API documentation](https://www.mapbox.com/ios-sdk/api/) and [online examples](https://www.mapbox.com/ios-sdk/examples/) that apply to the macOS SDK with few differences, mostly around unimplemented features like user location tracking. A [full changelog](https://github.com/mapbox/mapbox-gl-native/blob/master/platform/macos/CHANGELOG.md) is also available. - -Mapbox does not officially support the macOS SDK to the same extent as the iOS SDK; however, [bug reports and pull requests](https://github.com/mapbox/mapbox-gl-native/issues/) are certainly welcome. diff --git a/platform/macos/docs/guides/For Style Authors.md b/platform/macos/docs/guides/For Style Authors.md deleted file mode 100644 index 399ba6804bd..00000000000 --- a/platform/macos/docs/guides/For Style Authors.md +++ /dev/null @@ -1,427 +0,0 @@ - -# Information for Style Authors - -A _style_ defines a map view’s content and appearance. If you’ve authored a -style using -[Mapbox Studio’s Styles editor](https://www.mapbox.com/studio/styles/) or as -JSON in a text editor, you can use that style in this SDK and manipulate it -afterwards in code. This document provides information you can use to ensure a -seamless transition from Mapbox Studio to your application. - -## Designing for macOS - -When designing your style, consider the context in which your application shows -the style. There are a number of considerations specific to macOS that may -not be obvious when designing your style in Mapbox Studio on the Web. A map view -is essentially a graphical user interface element, so many of same issues in -user interface design also apply when designing a map style. - -### Color - -Ensure sufficient contrast in your application’s user interface when your map -style is present. Standard user interface elements such as toolbars, sidebars, -and sheets often overlap the map view with a translucent, blurred background, so -make sure the contents of these elements remain legible with the map view -underneath. -If you intend your style to be used in the dark, consider the impact that Night -Shift may have on your style’s colors. - -### Typography and graphics - - -Design sprite images and choose font weights that look crisp on both -standard-resolution displays and Retina displays. This SDK supports the same -resolutions as macOS. -Standard-resolution displays are often found on external monitors. Even with -built-in screens, some of your users may use the Larger Text option in Display -Preferences, which is essentially standard resolution, to make text easier to -read. - -Icon and text labels should be legible regardless of the map’s orientation. -By default, this SDK makes it easy for your users to rotate or tilt the map -using multitouch trackpad gestures or keyboard shortcuts. -If you do not intend your design to accommodate rotation and tilting, disable -these gestures using the `MGLMapView.rotateEnabled` and -`MGLMapView.pitchEnabled` properties, respectively, or the corresponding -inspectables in Interface Builder. - -### Interactivity - -Pay attention to whether elements of your style appear to be interactive. -An icon with a shadow or shading effect may appear to be clickable. -You can make an icon or text label interactive by installing a gesture -recognizer and performing feature querying (e.g., -`-[MGLMapView visibleFeaturesAtPoint:]`) to get details about the selected -feature. -You can install cursor or tooltip tracking rectangles to indicate interactive -features as an alternative to prominent hover effects. - -Make sure your users can easily distinguish any interactive elements from the -surrounding map, such as pins or a route line. If your application supports -printing, consider using the -[runtime styling API](#manipulating-the-style-at-runtime) to optimize your style -for ink economy before printing the map view. - -For more information about user interface design, consult Apple’s -[_macOS Human Interface Guidelines_](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/OSXHIGuidelines/). - -## Applying your style - -You set an `MGLMapView` object’s style either in code, by setting the -`MGLMapView.styleURL` property, or in Interface Builder, by setting the “Style -URL” inspectable. The URL must point to a local or remote style JSON file. The -style JSON file format is defined by the -[Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/). This -SDK supports the functionality defined by version 8 of the specification unless -otherwise noted in the -[style specification documentation](https://www.mapbox.com/mapbox-gl-style-spec/). - -## Manipulating the style at runtime - -The _runtime styling API_ enables you to modify every aspect of a style -dynamically as a user interacts with your application. The style itself is -represented at runtime by an `MGLStyle` object, which provides access to various -`MGLSource` and `MGLStyleLayer` objects that represent content sources and style -layers, respectively. - -The names of runtime styling classes and properties on macOS are generally -consistent with the style specification and Mapbox Studio’s Styles editor. Any -exceptions are listed in this document. - -To avoid conflicts with Objective-C keywords or Cocoa terminology, this SDK uses -the following terms for concepts defined in the style specification: - -In the style specification | In the SDK ----------------------------|--------- -bounds | coordinate bounds -filter | predicate -function type | interpolation mode -id | identifier -image | style image -layer | style layer -property | attribute -SDF icon | template image -source | content source - -## Specifying the map’s content - -Each source defined by a style JSON file is represented at runtime by a content -source object that you can use to initialize new style layers. The content -source object is a member of one of the following subclasses of `MGLSource`: - -In style JSON | In the SDK ---------------|----------- -`vector` | `MGLVectorTileSource` -`raster` | `MGLRasterTileSource` -`raster-dem` | `MGLRasterDEMSource` -`geojson` | `MGLShapeSource` -`image` | `MGLImageSource` - -`canvas` and `video` sources are not supported. - -### Tile sources - -Raster and vector tile sources may be defined in TileJSON configuration files. -This SDK supports the properties defined in the style specification, which are a -subset of the keys defined in version 2.1.0 of the -[TileJSON](https://github.com/mapbox/tilejson-spec/tree/master/2.1.0) -specification. As an alternative to authoring a custom TileJSON file, you may -supply various tile source options when creating a raster or vector tile source. -These options are detailed in the `MGLTileSourceOption` documentation: - -In style JSON | In TileJSON | In the SDK ---------------|---------------|----------- -`url` | — | `configurationURL` parameter in `-[MGLTileSource initWithIdentifier:configurationURL:]` -`tiles` | `tiles` | `tileURLTemplates` parameter in `-[MGLTileSource initWithIdentifier:tileURLTemplates:options:]` -`minzoom` | `minzoom` | `MGLTileSourceOptionMinimumZoomLevel` -`maxzoom` | `maxzoom` | `MGLTileSourceOptionMaximumZoomLevel` -`bounds` | `bounds` | `MGLTileSourceOptionCoordinateBounds` -`tileSize` | — | `MGLTileSourceOptionTileSize` -`attribution` | `attribution` | `MGLTileSourceOptionAttributionHTMLString` (but consider specifying `MGLTileSourceOptionAttributionInfos` instead for improved security) -`scheme` | `scheme` | `MGLTileSourceOptionTileCoordinateSystem` -`encoding` | – | `MGLTileSourceOptionDEMEncoding` - -### Shape sources - -Shape sources also accept various options. These options are detailed in the -`MGLShapeSourceOption` documentation: - -In style JSON | In the SDK ------------------|----------- -`data` | `url` parameter in `-[MGLShapeSource initWithIdentifier:URL:options:]` -`maxzoom` | `MGLShapeSourceOptionMaximumZoomLevel` -`buffer` | `MGLShapeSourceOptionBuffer` -`tolerance` | `MGLShapeSourceOptionSimplificationTolerance` -`cluster` | `MGLShapeSourceOptionClustered` -`clusterRadius` | `MGLShapeSourceOptionClusterRadius` -`clusterMaxZoom` | `MGLShapeSourceOptionMaximumZoomLevelForClustering` -`lineMetrics` | `MGLShapeSourceOptionLineDistanceMetrics` - -To create a shape source from local GeoJSON data, first -[convert the GeoJSON data into a shape](working-with-geojson-data.html#converting-geojson-data-into-shape-objects), -then use the `-[MGLShapeSource initWithIdentifier:shape:options:]` method. - -### Image sources - -Image sources accept a non-axis aligned quadrilateral as their geographic coordinates. -These coordinates, in `MGLCoordinateQuad`, are described in counterclockwise order, -in contrast to the clockwise order defined in the style specification. - -## Configuring the map content’s appearance - -Each layer defined by the style JSON file is represented at runtime by a style -layer object, which you can use to refine the map’s appearance. The style layer -object is a member of one of the following subclasses of `MGLStyleLayer`: - -In style JSON | In the SDK ---------------|----------- -`background` | `MGLBackgroundStyleLayer` -`circle` | `MGLCircleStyleLayer` -`fill` | `MGLFillStyleLayer` -`fill-extrusion` | `MGLFillExtrusionStyleLayer` -`heatmap` | `MGLHeatmapStyleLayer` -`hillshade` | `MGLHillshadeStyleLayer` -`line` | `MGLLineStyleLayer` -`raster` | `MGLRasterStyleLayer` -`symbol` | `MGLSymbolStyleLayer` - -You configure layout and paint attributes by setting properties on these style -layer objects. The property names generally correspond to the style JSON -properties, except for the use of camelCase instead of kebab-case. Properties -whose names differ from the style specification are listed below: - -### Circle style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -`circle-pitch-scale` | `MGLCircleStyleLayer.circleScaleAlignment` | `MGLCircleStyleLayer.circleScaleAlignment` -`circle-translate` | `MGLCircleStyleLayer.circleTranslation` | `MGLCircleStyleLayer.circleTranslation` -`circle-translate-anchor` | `MGLCircleStyleLayer.circleTranslationAnchor` | `MGLCircleStyleLayer.circleTranslationAnchor` - -### Fill style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -`fill-antialias` | `MGLFillStyleLayer.fillAntialiased` | `MGLFillStyleLayer.isFillAntialiased` -`fill-translate` | `MGLFillStyleLayer.fillTranslation` | `MGLFillStyleLayer.fillTranslation` -`fill-translate-anchor` | `MGLFillStyleLayer.fillTranslationAnchor` | `MGLFillStyleLayer.fillTranslationAnchor` - -### Fill extrusion style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -`fill-extrusion-vertical-gradient` | `MGLFillExtrusionStyleLayer.fillExtrusionHasVerticalGradient` | `MGLFillExtrusionStyleLayer.fillExtrusionHasVerticalGradient` -`fill-extrusion-translate` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation` -`fill-extrusion-translate-anchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor` - -### Line style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -`line-dasharray` | `MGLLineStyleLayer.lineDashPattern` | `MGLLineStyleLayer.lineDashPattern` -`line-translate` | `MGLLineStyleLayer.lineTranslation` | `MGLLineStyleLayer.lineTranslation` -`line-translate-anchor` | `MGLLineStyleLayer.lineTranslationAnchor` | `MGLLineStyleLayer.lineTranslationAnchor` - -### Raster style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -`raster-brightness-max` | `MGLRasterStyleLayer.maximumRasterBrightness` | `MGLRasterStyleLayer.maximumRasterBrightness` -`raster-brightness-min` | `MGLRasterStyleLayer.minimumRasterBrightness` | `MGLRasterStyleLayer.minimumRasterBrightness` -`raster-hue-rotate` | `MGLRasterStyleLayer.rasterHueRotation` | `MGLRasterStyleLayer.rasterHueRotation` -`raster-resampling` | `MGLRasterStyleLayer.rasterResamplingMode` | `MGLRasterStyleLayer.rasterResamplingMode` - -### Symbol style layers - -In style JSON | In Objective-C | In Swift ---------------|----------------|--------- -`icon-allow-overlap` | `MGLSymbolStyleLayer.iconAllowsOverlap` | `MGLSymbolStyleLayer.iconAllowsOverlap` -`icon-ignore-placement` | `MGLSymbolStyleLayer.iconIgnoresPlacement` | `MGLSymbolStyleLayer.iconIgnoresPlacement` -`icon-image` | `MGLSymbolStyleLayer.iconImageName` | `MGLSymbolStyleLayer.iconImageName` -`icon-optional` | `MGLSymbolStyleLayer.iconOptional` | `MGLSymbolStyleLayer.isIconOptional` -`icon-rotate` | `MGLSymbolStyleLayer.iconRotation` | `MGLSymbolStyleLayer.iconRotation` -`icon-size` | `MGLSymbolStyleLayer.iconScale` | `MGLSymbolStyleLayer.iconScale` -`icon-keep-upright` | `MGLSymbolStyleLayer.keepsIconUpright` | `MGLSymbolStyleLayer.keepsIconUpright` -`text-keep-upright` | `MGLSymbolStyleLayer.keepsTextUpright` | `MGLSymbolStyleLayer.keepsTextUpright` -`text-max-angle` | `MGLSymbolStyleLayer.maximumTextAngle` | `MGLSymbolStyleLayer.maximumTextAngle` -`text-max-width` | `MGLSymbolStyleLayer.maximumTextWidth` | `MGLSymbolStyleLayer.maximumTextWidth` -`symbol-avoid-edges` | `MGLSymbolStyleLayer.symbolAvoidsEdges` | `MGLSymbolStyleLayer.symbolAvoidsEdges` -`text-field` | `MGLSymbolStyleLayer.text` | `MGLSymbolStyleLayer.text` -`text-allow-overlap` | `MGLSymbolStyleLayer.textAllowsOverlap` | `MGLSymbolStyleLayer.textAllowsOverlap` -`text-font` | `MGLSymbolStyleLayer.textFontNames` | `MGLSymbolStyleLayer.textFontNames` -`text-size` | `MGLSymbolStyleLayer.textFontSize` | `MGLSymbolStyleLayer.textFontSize` -`text-ignore-placement` | `MGLSymbolStyleLayer.textIgnoresPlacement` | `MGLSymbolStyleLayer.textIgnoresPlacement` -`text-justify` | `MGLSymbolStyleLayer.textJustification` | `MGLSymbolStyleLayer.textJustification` -`text-optional` | `MGLSymbolStyleLayer.textOptional` | `MGLSymbolStyleLayer.isTextOptional` -`text-rotate` | `MGLSymbolStyleLayer.textRotation` | `MGLSymbolStyleLayer.textRotation` -`text-writing-mode` | `MGLSymbolStyleLayer.textWritingModes` | `MGLSymbolStyleLayer.textWritingModes` -`icon-translate` | `MGLSymbolStyleLayer.iconTranslation` | `MGLSymbolStyleLayer.iconTranslation` -`icon-translate-anchor` | `MGLSymbolStyleLayer.iconTranslationAnchor` | `MGLSymbolStyleLayer.iconTranslationAnchor` -`text-translate` | `MGLSymbolStyleLayer.textTranslation` | `MGLSymbolStyleLayer.textTranslation` -`text-translate-anchor` | `MGLSymbolStyleLayer.textTranslationAnchor` | `MGLSymbolStyleLayer.textTranslationAnchor` - -## Setting attribute values - -Each property representing a layout or paint attribute is set to an -`NSExpression` object. `NSExpression` objects play the same role as -[expressions in the Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions), -but you create the former using a very different syntax. `NSExpression`’s format -string syntax is reminiscent of a spreadsheet formula or an expression in a -database query. See the -“[Predicates and Expressions](predicates-and-expressions.html)” guide for an -overview of the expression support in this SDK. This SDK no longer supports -style functions; use expressions instead. - -### Constant values in expressions - -In contrast to the JSON type that the style specification defines for each -layout or paint property, the style value object often contains a more specific -Foundation or Cocoa type. General rules for attribute types are listed below. -Pay close attention to the SDK documentation for the attribute you want to get -or set. - -In style JSON | In Objective-C | In Swift ---------------|-----------------------|--------- -Color | `NSColor` | `NSColor` -Enum | `NSString` | `String` -String | `NSString` | `String` -Boolean | `NSNumber.boolValue` | `NSNumber.boolValue` -Number | `NSNumber.floatValue` | `NSNumber.floatValue` -Array (`-dasharray`) | `NSArray` | `[Float]` -Array (`-font`) | `NSArray` | `[String]` -Array (`-offset`, `-translate`) | `NSValue` containing `CGVector` | `NSValue` containing `CGVector` -Array (`-padding`) | `NSValue.edgeInsetsValue` | `NSValue.edgeInsetsValue` - -For padding attributes, note that the arguments to -`NSEdgeInsetsMake()` in Objective-C and `EdgeInsets(top:left:bottom:right:)` in -Swift -are specified in counterclockwise order, in contrast to the clockwise order -defined by the style specification. - -Additionally, on macOS, a screen coordinate of (0, 0) is located at the -lower-left corner of the screen. Therefore, a positive `CGVector.dy` means an -offset or translation upward, while a negative `CGVector.dy` means an offset or -translation downward. This is the reverse of how `CGVector` is interpreted on -iOS. - -### Expression operators - -Many expression operators defined in the style specification have corresponding -symbols to be used with the `+[NSExpression expressionWithFormat:]`, -`+[NSExpression expressionForFunction:arguments:]`, or -`+[NSExpression expressionForFunction:selectorName:arguments:]` method: - -In style specification | Method, function, or predicate type | Format string syntax ------------------------|-------------------------------------|--------------------- -`array` | | -`boolean` | | -`collator` | `NSComparisonPredicateOptions` | `'Québec' =[cd] 'QUEBEC'` -`literal` | `+[NSExpression expressionForConstantValue:]` | `%@` representing `NSArray` or `NSDictionary` -`number` | | -`string` | | -`to-boolean` | `boolValue` | -`to-color` | | `CAST(var, 'NSColor')` -`to-number` | `mgl_numberWithFallbackValues:` | `CAST(zipCode, 'NSNumber')` -`to-string` | `stringValue` | `CAST(ele, 'NSString')` -`typeof` | | -`geometry-type` | `NSExpression.geometryTypeVariableExpression` | `$geometryType` -`id` | `NSExpression.featureIdentifierVariableExpression` | `$featureIdentifier` -`properties` | `NSExpression.featureAttributesVariableExpression` | `$featureAttributes` -`at` | `objectFrom:withIndex:` | `array[n]` -`get` | `+[NSExpression expressionForKeyPath:]` | Key path -`has` | `mgl_does:have:` | `mgl_does:have:(self, 'key')` -`length` | `count:` | `count({1, 2, 2, 3, 4, 7, 9})` -`!` | `NSNotPredicateType` | `NOT (p0 OR … OR pn)` -`!=` | `NSNotEqualToPredicateOperatorType` | `key != value` -`<` | `NSLessThanPredicateOperatorType` | `key < value` -`<=` | `NSLessThanOrEqualToPredicateOperatorType` | `key <= value` -`==` | `NSEqualToPredicateOperatorType` | `key == value` -`>` | `NSGreaterThanPredicateOperatorType` | `key > value` -`>=` | `NSGreaterThanOrEqualToPredicateOperatorType` | `key >= value` -`all` | `NSAndPredicateType` | `p0 AND … AND pn` -`any` | `NSOrPredicateType` | `p0 OR … OR pn` -`case` | `+[NSExpression expressionForConditional:trueExpression:falseExpression:]` or `MGL_IF` or `+[NSExpression mgl_expressionForConditional:trueExpression:falseExpresssion:]` | `TERNARY(1 = 2, YES, NO)` or `MGL_IF(1 = 2, YES, 2 = 2, YES, NO)` -`coalesce` | `mgl_coalesce:` | `mgl_coalesce({x, y, z})` -`match` | `MGL_MATCH` or `+[NSExpression mgl_expressionForMatchingExpression:inDictionary:defaultExpression:]` | `MGL_MATCH(x, 0, 'zero match', 1, 'one match', 'two match', 'default')` -`interpolate` | `mgl_interpolate:withCurveType:parameters:stops:` or `+[NSExpression mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` | -`step` | `mgl_step:from:stops:` or `+[NSExpression mgl_expressionForSteppingExpression:fromExpression:stops:]` | -`let` | `mgl_expressionWithContext:` | `MGL_LET('ios', 11, 'macos', 10.13, $ios + $macos)` -`var` | `+[NSExpression expressionForVariable:]` | `$variable` -`concat` | `mgl_join:` or `-[NSExpression mgl_expressionByAppendingExpression:]` | `mgl_join({'Old', ' ', 'MacDonald'})` -`downcase` | `lowercase:` | `lowercase('DOWNTOWN')` -`upcase` | `uppercase:` | `uppercase('Elysian Fields')` -`rgb` | `+[NSColor colorWithCalibratedRed:green:blue:alpha:]` | -`rgba` | `+[NSColor colorWithCalibratedRed:green:blue:alpha:]` | -`to-rgba` | | `CAST(noindex(var), 'NSArray')` -`-` | `from:subtract:` | `2 - 1` -`*` | `multiply:by:` | `1 * 2` -`/` | `divide:by:` | `1 / 2` -`%` | `modulus:by:` | -`^` | `raise:toPower:` | `2 ** 2` -`+` | `add:to:` | `1 + 2` -`abs` | `abs:` | `abs(-1)` -`acos` | `mgl_acos:` | `mgl_acos(1)` -`asin` | `mgl_asin:` | `mgl_asin(0)` -`atan` | `mgl_atan:` | `mgl_atan(20)` -`ceil` | `ceiling:` | `ceiling(0.99999)` -`cos` | `mgl_cos:` | `mgl_cos(0)` -`e` | | `%@` representing `NSNumber` containing `M_E` -`floor` | `floor:` | `floor(-0.99999)` -`ln` | `ln:` | `ln(2)` -`ln2` | | `%@` representing `NSNumber` containing `M_LN2` -`log10` | `log:` | `log(1)` -`log2` | `mgl_log2:` | `mgl_log2(1024)` -`max` | `max:` | `max({1, 2, 2, 3, 4, 7, 9})` -`min` | `min:` | `min({1, 2, 2, 3, 4, 7, 9})` -`pi` | | `%@` representing `NSNumber` containing `M_PI` -`round` | `mgl_round:` | `mgl_round(1.5)` -`sin` | `mgl_sin:` | `mgl_sin(0)` -`sqrt` | `sqrt:` | `sqrt(2)` -`tan` | `mgl_tan:` | `mgl_tan(0)` -`zoom` | `NSExpression.zoomLevelVariableExpression` | `$zoomLevel` -`heatmap-density` | `NSExpression.heatmapDensityVariableExpression` | `$heatmapDensity` -`line-progress` | `NSExpression.lineProgressVariableExpression` | `$lineProgress` -`format` | `+[NSExpression mgl_expressionForAttributedExpressions:]` or `mgl_attributed:` | `mgl_attributed({x, y, z})` - -For operators that have no corresponding `NSExpression` symbol, use the -`MGL_FUNCTION()` format string syntax. - -## Filtering sources - -You can filter a shape or vector tile source by setting the -`MGLVectorStyleLayer.predicate` property to an `NSPredicate` object. Below is a -table of style JSON operators and the corresponding operators used in the -predicate format string: - -In style JSON | In the format string ---------------------------|--------------------- -`["has", key]` | `key != nil` -`["!has", key]` | `key == nil` -`["==", key, value]` | `key == value` -`["!=", key, value]` | `key != value` -`[">", key, value]` | `key > value` -`[">=", key, value]` | `key >= value` -`["<", key, value]` | `key < value` -`["<=", key, value]` | `key <= value` -`["in", key, v0, …, vn]` | `key IN {v0, …, vn}` -`["!in", key, v0, …, vn]` | `NOT key IN {v0, …, vn}` -`["all", f0, …, fn]` | `p0 AND … AND pn` -`["any", f0, …, fn]` | `p0 OR … OR pn` -`["none", f0, …, fn]` | `NOT (p0 OR … OR pn)` - -## Specifying the text format - -The following format attributes are defined as `NSString` constans that you -can use to update the formatting of `MGLSymbolStyleLayer.text` property. - -In style JSON | In Objective-C | In Swift ---------------|-----------------------|--------- -`text-font` | `MGLFontNamesAttribute` | `.fontNamesAttribute` -`font-scale` | `MGLFontScaleAttribute` | `.fontScaleAttribute` -`text-color` | `MGLFontColorAttribute` | `.fontColorAttribute` - -See the “[Predicates and Expressions](predicates-and-expressions.html)” guide for -a full description of the supported operators and operand types. diff --git a/platform/macos/docs/guides/Info.plist Keys.md b/platform/macos/docs/guides/Info.plist Keys.md deleted file mode 100644 index 35ecf67e360..00000000000 --- a/platform/macos/docs/guides/Info.plist Keys.md +++ /dev/null @@ -1,35 +0,0 @@ -# Info.plist Keys - -The Mapbox Maps SDK for macOS supports custom `Info.plist` keys in your application in order to configure various settings. - -## MGLMapboxAccessToken - -Set the [Mapbox access token](https://www.mapbox.com/help/define-access-token/) to be used by all instances of `MGLMapView` in the current application. - -Mapbox-hosted vector tiles and styles require an API access token, which you can obtain from the [Mapbox account page](https://www.mapbox.com/studio/account/tokens/). Access tokens associate requests to Mapbox’s vector tile and style APIs with your Mapbox account. They also deter other developers from using your styles without your permission. - -As an alternative, you can use `MGLAccountManager.accessToken` to set a token in code. See [our guide](https://www.mapbox.com/help/ios-private-access-token/) for some tips on keeping access tokens in open source code private. - -## MGLMapboxAPIBaseURL - -Use this key if you need to customize the API base URL used throughout the SDK. If unset, the default Mapbox API is used. - -The default value is `https://api.mapbox.com`. - -## MGLIdeographicFontFamilyName - -The name of the font family to use for client-side text rendering of CJK ideographs. - -Set `MGLIdeographicFontFamilyName` in your containing application's Info.plist to font family name(s) that will be available at run time, such as “PingFang TC” or “Marker Felt”. This plist key accepts: - -- A string value of a single font family name. - -- An array of font family names. Fonts will be used in the defined order, eventually falling back to default system font if none are available. - -- A boolean value `NO` to disable client-side rendering of CJK glyphs — remote fonts specified in your style will be used instead. - -## MGLCollisionBehaviorPre4_0 - -If this key is set to YES (`true`), collision detection is performed only between symbol style layers based on the same source, as in versions 0.1–0.7 of the Mapbox Maps SDK for iOS. In other words, symbols in an `MGLSymbolStyleLayer` based on one source (for example, an `MGLShapeSource`) may overlap with symbols in another layer that is based on a different source (such as the Mapbox Streets source). This is the case regardless of the `MGLSymbolStyleLayer.iconAllowsOverlap`, `MGLSymbolStyleLayer.iconIgnoresPlacement`, `MGLSymbolStyleLayer.textAllowsOverlap`, and `MGLSymbolStyleLayer.textIgnoresPlacement` properties. - -Beginning in version 0.7, the SDK also performs collision detection between style layers based on different sources by default. For the default behavior, omit the `MGLCollisionBehaviorPre4_0` key or set it to NO (`false`). This property is so named because version 0.7 of the Mapbox Maps SDK for macOS corresponds to version 4.0 of the Mapbox Maps SDK for iOS. diff --git a/platform/macos/docs/guides/Migrating to Expressions.md b/platform/macos/docs/guides/Migrating to Expressions.md deleted file mode 100644 index 44e14a6eec4..00000000000 --- a/platform/macos/docs/guides/Migrating to Expressions.md +++ /dev/null @@ -1,267 +0,0 @@ - - -# Migrating from Style Functions to Expressions - -[Runtime Styling](https://www.mapbox.com/ios-sdk/maps/overview/runtime-styling/) enables you to modify every aspect of the map’s appearance dynamically as a user interacts with your application. Developers can specify in advance how a layout or paint attribute will vary as the zoom level changes or how the appearance of individual features vary based on metadata provided by a content source. - -With Mapbox Maps SDK for macOS v0.7.0, style functions have been replaced with expressions. These provide even more tools for developers who want to style their maps dynamically. This guide outlines some tips for migrating from style functions to expressions, and offers an overview of some things that developers can do with expressions. - -An expression is represented at runtime by the `NSExpression` class. Expressions can be used to style paint and layout properties based on zoom level, data attributes, or a combination of the two. - -A constant expression can also be assigned to a style property. For example, the opacity of a fill style layer can be set to a constant value between 0 and 1. - -The documentation for each individual style layer property notes which non-constant expressions are enabled for that property. Style functions supported four interpolation modes: exponential, interval, categorical, and identity. - -This guide uses earthquake data from the [U.S. Geological Survey](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php). Under each interpolation mode, the style function implementation will be shown, followed by the current syntax. - -For more information about how to work with GeoJSON data in our macOS SDK, please see our [working with GeoJSON data](working-with-geojson-data.html) guide. To learn more about supported expressions, see our ["Predicates and Expressions"](predicates-and-expressions.html) guide. The "Predicates and Expressions" guide also outlines Mapbox custom functions that can be used to dynamically style a map. - -## Stops -Stops are dictionary keys that are associated with layer attribute values. Constant values no longer need to be wrapped as style values when they are values in a stops dictionary. - - -Style function syntax: - -```swift -let stops = [ - 0: MGLStyleValue(rawValue: .yellow), - 2.5: MGLStyleValue(rawValue: .orange), - 5: MGLStyleValue(rawValue: .red), - 7.5: MGLStyleValue(rawValue: .blue), - 10: MGLStyleValue(rawValue: .white), -] -``` - -Current syntax: -```swift -let stops: [NSNumber: NSColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, -] -``` - - -## Interpolation mode - -Style functions supported four interpolation modes: exponential/linear, interval, categorical, and identity. For more information about supported custom expressions, please see the "Predicates and Expressions" guide. - -### Linear - -`+[NSExpression(MGLAdditions) mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` takes the interpolation type as a parameter. If you previously used the default interpolation base, use the curve type `MGLExpressionInterpolationMode.linear`. See the [`mgl_interpolate:withCurveType:parameters:stops:`](predicates-and-expressions.html#code-mgl_interpolate-withcurvetype-parameters-stops-code) documentation for more details. - -The stops dictionary below, shows colors that continuously shift from yellow to orange to red to blue to white based on the attribute value. - -Style function syntax: - -```swift -let url = URL(string: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson")! -let symbolSource = MGLSource(identifier: "source") -let symbolLayer = MGLSymbolStyleLayer(identifier: "place-city-sm", source: symbolSource) - -let source = MGLShapeSource(identifier: "earthquakes", url: url, options: nil) -mapView.style?.addSource(source) - -let stops = [ - 0: MGLStyleValue(rawValue: .yellow), - 2.5: MGLStyleValue(rawValue: .orange), - 5: MGLStyleValue(rawValue: .red), - 7.5: MGLStyleValue(rawValue: .blue), - 10: MGLStyleValue(rawValue: .white), -] - -let layer = MGLCircleStyleLayer(identifier: "circles", source: source) -layer.circleColor = MGLStyleValue(interpolationMode: .exponential, - sourceStops: stops, - attributeName: "mag", - options: [.defaultValue: MGLStyleValue(rawValue: .green)]) -layer.circleRadius = MGLStyleValue(rawValue: 10) -mapView.style?.insertLayer(layer, below: symbolLayer) -``` - -Current syntax: - -```swift -let url = URL(string: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson")! -let symbolSource = MGLSource(identifier: "source") -let symbolLayer = MGLSymbolStyleLayer(identifier: "place-city-sm", source: symbolSource) - -let source = MGLShapeSource(identifier: "earthquakes", url: url, options: nil) -mapView.style?.addSource(source) - -let stops: [NSNumber: NSColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, -] - -let layer = MGLCircleStyleLayer(identifier: "circles", source: source) -layer.circleColor = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:(mag, 'linear', nil, %@)", - stops) -layer.circleRadius = NSExpression(forConstantValue: 10) -mapView.style?.insertLayer(layer, below: symbolLayer) -``` - -### Exponential - -If you previously used an interpolation base greater than `0` (other than `1`), you can use `MGLExpressionInterpolationMode.exponential` as the curve type for `+[NSExpression(MGLAdditions) mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:]` or `'exponential'` as the curve type for [`mgl_interpolate:withCurveType:parameters:stops:`](predicates-and-expressions.html#code-mgl_interpolate-withcurvetype-parameters-stops-code). The `parameters` argument takes that interpolation base. This interpolates between values exponentially, creating an accelerated ramp effect. - -Here’s a visualization from Mapbox Studio (see [Mapbox Studio and iOS](https://www.mapbox.com/ios-sdk/maps/overview/mapbox-studio/)) comparing interpolation base values of `1.5` and `0.5` based on zoom. In order to convert camera style functions, use `$zoomLevel` or `MGL_FUNCTION('zoomLevel')` as the attribute key. - - - - -The example below increases a layer’s `circleRadius` exponentially based on a map’s zoom level. The interpolation base is `1.5`. - -Style function syntax: - -```swift -let stops = [ - 12: MGLStyleValue(rawValue: 0.5), - 14: MGLStyleValue(rawValue: 2), - 18: MGLStyleValue(rawValue: 18), -] - -layer.circleRadius = MGLStyleValue(interpolationMode: .exponential, - cameraStops: stops, - options: [.interpolationBase: 1.5]) -``` - -Current syntax: - -```swift -let stops = [ - 12: 0.5, - 14: 2, - 18: 18, -] - -layer.circleRadius = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.5, %@)", - stops) -``` - -### Interval - -Steps, or intervals, create a range using the keys from the stops dictionary. The range is from the given key to just less than the next key. The attribute values that fall into that range are then styled using the layout or paint value assigned to that key. You can use the `+[NSExpression(MGLAdditions) mgl_expressionForSteppingExpression:fromExpression:stops:]` method or the custom function [`mgl_step:from:stops:`](predicates-and-expressions.html#code-mgl_step-from-stops-code) for cases where you previously used interval interpolation mode. The first parameter takes the feature attribute name and the second parameter (`from:`) optionally takes the default or fallback value for that function. The final parameter takes a stops dictionary as an argument. - -When we use the stops dictionary given above with an `'mgl_step:from:stops:'`, we create ranges where earthquakes with a magnitude of 0 to just less than 2.5 would be yellow, 2.5 to just less than 5 would be orange, and so on. - -Style function syntax: - -```swift -let stops = [ - 0: MGLStyleValue(rawValue: .yellow), - 2.5: MGLStyleValue(rawValue: .orange), - 5: MGLStyleValue(rawValue: .red), - 7.5: MGLStyleValue(rawValue: .blue), - 10: MGLStyleValue(rawValue: .white), -] - -layer.circleColor = MGLStyleValue(interpolationMode: .interval, - sourceStops: stops, - attributeName: "mag", - options: [.defaultValue: MGLStyleValue(rawValue: .green)]) -```` - -Current syntax: - -```swift -let stops: [NSNumber: NSColor] = [ - 0: .yellow, - 2.5: .orange, - 5: .red, - 7.5: .blue, - 10: .white, -] - -layer.circleColor = NSExpression(format: "mgl_step:from:stops:(mag, %@, %@)", - NSColor.green, stops) -``` - -### Categorical - -Categorical interpolation mode took a stops dictionary. If the value for a specified feature attribute name matched one in that stops dictionary, the style value for that attribute value would be used. Categorical style functions can now be replaced with `MGL_MATCH`. - -`MGL_MATCH` takes an initial condition, which in this case is an attribute key. This is followed by possible matches for that key and the value to assign to the layer property if there is a match. The final argument can be a default style value that is to be used if none of the specified values match. - -There are three main types of events in the USGS dataset: earthquakes, explosions, and quarry blasts. In this case, the color of the circle layer will be determined by the type of event, with a default value of blue to catch any events that do not fall into any of those categories. - -Style function syntax: - -```swift -let categoricalStops = [ - "earthquake": MGLStyleValue(rawValue: .orange), - "explosion": MGLStyleValue(rawValue: .red), - "quarry blast": MGLStyleValue(rawValue: .yellow), -] - -layer.circleColor = MGLStyleValue(interpolationMode: .categorical, - sourceStops: categoricalStops, - attributeName: "type", - options: [.defaultValue: MGLStyleValue(rawValue: .blue)]) -``` - -Current syntax: -```swift -let defaultColor = NSColor.blue -layer.circleColor = NSExpression( -format: "MGL_MATCH(type, 'earthquake', %@, 'explosion', %@, 'quarry blast', %@, %@)", - NSColor.orange, NSColor.red, NSColor.yellow, defaultColor) -``` - -If your use case does not require a default value, you can either apply a predicate to your layer prior to styling it, or use the format string `"valueForKeyPath:"`. - -### Identity - -Identity interpolation mode used the attribute’s value as the style layer property value. In this example, you might set the `circleRadius` to the earthquake’s magnitude. In order to use a feature attribute value to style a layer property, set the property value to `[NSExpression expressionForKeyPath:]`, which take the feature attribute name as an argument. - -Style function syntax: - -```swift -layer.circleRadius = MGLStyleValue(interpolationMode: .identity, - sourceStops: nil, - attributeName: "mag", - options: [.defaultValue: MGLStyleValue(rawValue: 0)]) -``` - -Current syntax: -```swift -layer.circleRadius = NSExpression(forKeyPath: "mag") -``` - -![identity mode](img/data-driven-styling/identity.png) - -Some built-in functions can be applied to attribute values to style layer property values. To set the circle radius to three times the earthquake’s magnitude, create a `multiply:by:` function that takes the attribute value and the multiplier as arguments, or use a format string. - -```swift -layer.circleRadius = NSExpression(forFunction: "multiply:by:", arguments: [NSExpression(forKeyPath: "mag"), 3]) -``` - -![multiply magnitude](img/data-driven-styling/multiply.png) - -You can also cast attribute values in order to use them. One example is to cast an integer as an `NSString` and use it as a text value. - -```swift -let magnitudeLayer = MGLSymbolStyleLayer(identifier: "mag-layer", source: source) -magnitudeLayer.text = NSExpression(format: "CAST(mag, 'NSString')") -mapView.style?.addLayer(magnitudeLayer) -``` - -![cast a value](img/data-driven-styling/cast.png) - -### Constant Values - -For constant values that do not necessarily change based on camera or attribute values, use `[NSExpression expressionForConstantValue:]` (previously `[MGLStyleValue valueWithRawValue:]`). - -## Resources - -* [USGS Earthquake Feed](https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php) -* [For Style Authors](for-style-authors.html) -* [Predicates and Expressions](predicates-and-expressions.html) diff --git a/platform/macos/docs/guides/Tile URL Templates.md b/platform/macos/docs/guides/Tile URL Templates.md deleted file mode 100644 index e71bcab0a43..00000000000 --- a/platform/macos/docs/guides/Tile URL Templates.md +++ /dev/null @@ -1,98 +0,0 @@ - -# Tile URL Templates - -`MGLTileSource` objects, specifically `MGLRasterTileSource` and -`MGLVectorTileSource` objects, can be created using an initializer that accepts -an array of tile URL templates. Tile URL templates are strings that specify the -URLs of the vector tiles or raster tile images to load. A template resembles an -absolute URL, but with any number of placeholder strings that the source -evaluates based on the tile it needs to load. For example: - -* `http://www.example.com/tiles/{z}/{x}/{y}.pbf` could be - evaluated as `http://www.example.com/tiles/14/6/9.pbf`. -* `http://www.example.com/tiles/{z}/{x}/{y}{ratio}.png` could be - evaluated as `http://www.example.com/tiles/14/6/9@2x.png`. - -Tile URL templates are also used to define tilesets in TileJSON manifests or -[`raster`](https://www.mapbox.com/mapbox-gl-js/style-spec/#sources-raster-tiles) -and -[`vector`](https://www.mapbox.com/mapbox-gl-js/style-spec/#sources-vector-tiles) -sources in style JSON files. See the -[TileJSON specification](https://github.com/mapbox/tilejson-spec/tree/master/2.2.0) -for information about tile URL templates in the context of a TileJSON or style -JSON file. - -Tile sources support the following placeholder strings in tile URL templates, -all of which are optional: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Placeholder stringDescription
    {x}The index of the tile along the map’s x axis according to Spherical - Mercator projection. If the value is 0, the tile’s left edge corresponds - to the 180th meridian west. If the value is 2z−1, - the tile’s right edge corresponds to the 180th meridian east.
    {y}The index of the tile along the map’s y axis according to Spherical - Mercator projection. If the value is 0, the tile’s tile edge corresponds - to arctan(sinh(π)), or approximately 85.0511 degrees north. If the value - is 2z−1, the tile’s bottom edge corresponds to - −arctan(sinh(π)), or approximately 85.0511 degrees south. The y axis is - inverted if the options parameter contains - MGLTileSourceOptionTileCoordinateSystem with a value of - MGLTileCoordinateSystemTMS.
    {z}The tile’s zoom level. At zoom level 0, each tile covers the entire - world map; at zoom level 1, it covers ¼ of the world; at zoom level 2, - 1⁄16 of the world, and so on. For tiles loaded by - a MGLRasterTileSource object, whether the tile zoom level - matches the map’s current zoom level depends on the value of the - source’s tile size as specified in the - MGLTileSourceOptionTileSize key of the options - parameter.
    {bbox-epsg-3857}The tile’s bounding box, expressed as a comma-separated list of the - tile’s western, southern, eastern, and northern extents according to - Spherical Mercator (EPSG:3857) projection. The bounding box is typically - used with map services conforming to the - Web Map Service - protocol.
    {quadkey}A quadkey indicating both the tile’s location and its zoom level. The - quadkey is typically used with - Bing Maps. -
    {ratio}A suffix indicating the resolution of the tile image. The suffix is the - empty string for standard resolution displays and @2x for - Retina displays. -
    {prefix}Two hexadecimal digits chosen such that each visible tile has a - different prefix. The prefix is typically used for domain sharding.
    - -For more information about the `{x}`, `{y}`, and `{z}` placeholder strings, -consult the -[OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames). diff --git a/platform/macos/docs/img/screenshot.jpg b/platform/macos/docs/img/screenshot.jpg deleted file mode 100644 index 4af752b299c77b2d61fcb3c5019ff379b2b37e83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 411181 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 *yjf5a0 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%0A+37wZ*WF;S)y9iq5-hf3SuRk~CJ1 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�Ag$YVqWia5uu@UP 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 H2ab9Hkq5MV~EObvgCqX+8)k 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 S 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
  2. p5;k1 z_f^11;q9;Rk7l3Q?ml=I5=F&a6Lr@Reb3KCVnq2UiFmv&5Qj}g%76oe{7h!8S||sM zb@}RF3edKr!Anhwmn%<1lpBPOtqEj-ilj=%(jgFm*EkCKsw}wblFDRZlcm``sn*kb zs))Q>5Djy_0{oeHF;M{*cmc^prywnQQz%C*3elLEM>k}}CBau15tWPvu&IRioBtNw z6%8tGb&eKS`{E&6H#GT#us10E_UUB}GK6fydNCJ zSJ!s9Fua*LS``@?Z_}ey>p5iblgZfGxx2c#{JBrY24s2TRdY9S`$H|_ z;^yh-Vk`Jo{sIND|2L=}2=vFBf3tD${Ef}p(c$g*Q*%0TUN!)b3kU>q0(dxp96)9O zH!T1_OaFiHLQIV8j}4hVor1BcwS$|ZtCc=IJ*$GF+20U>0027&+h2(P(@QTGa|=`e z87BZ0@K<3ccU^41^RfA0@Y5C@R$|B=|U0oXx* z9|v##@%&x(Hg!1OK0y3a{ykoRT%do9T{ZwW*I%*vYdo_7IN9Fj>wnm?0l3)z!NL7@ z-2313fZSZ5f6N6QHuitYxc+2<|KND@?;o)Ta&dtEK9AmH-2e0s#Pya7{{!zW8G!yC z12zB%_;+4502{~O`>nfC2k zT#sLbhl7iq4agw^;^JYK5ar~N5EtW+WE0_$?*R diff --git a/platform/macos/sdk/nl.lproj/Localizable.strings b/platform/macos/sdk/nl.lproj/Localizable.strings deleted file mode 100644 index 8e7b0ae45f8..00000000000 --- a/platform/macos/sdk/nl.lproj/Localizable.strings +++ /dev/null @@ -1,15 +0,0 @@ -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Inzoomen"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Uitzoomen"; - diff --git a/platform/macos/sdk/pl.lproj/Localizable.strings b/platform/macos/sdk/pl.lproj/Localizable.strings deleted file mode 100644 index d86155cbde4..00000000000 --- a/platform/macos/sdk/pl.lproj/Localizable.strings +++ /dev/null @@ -1,15 +0,0 @@ -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Powiększ"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Pomniejsz"; - diff --git a/platform/macos/sdk/pt-BR.lproj/Localizable.strings b/platform/macos/sdk/pt-BR.lproj/Localizable.strings deleted file mode 100644 index 72fa43b657b..00000000000 --- a/platform/macos/sdk/pt-BR.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Falha ao carregar mapa devido a um erro desconhecido."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Falha ao carregar mapa porque o estilo não pode ser carregado."; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Falha ao carregar mapa porque o estilo está corrompido."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Falha ao carregar mapa porque o estilo não pode ser encontrado ou é incompatível."; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Aumentar Zoom"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Reduzir Zoom"; - diff --git a/platform/macos/sdk/pt-PT.lproj/Localizable.strings b/platform/macos/sdk/pt-PT.lproj/Localizable.strings deleted file mode 100644 index 13851939898..00000000000 --- a/platform/macos/sdk/pt-PT.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Não foi possível carregar o mapa porque ocorreu um erro."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Não foi possível carregar o mapa porque o estilo não foi carregado."; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Não foi possível carregar o mapa porque o estilo está corrompido."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Não foi possível carregar o mapa porque o estilo não foi encontrado ou não é compatível."; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Apromixar"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Afastar"; - diff --git a/platform/macos/sdk/ru.lproj/Localizable.strings b/platform/macos/sdk/ru.lproj/Localizable.strings deleted file mode 100644 index 8554c9ebd1a..00000000000 --- a/platform/macos/sdk/ru.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Не удалось загрузить карту из-за неизвестной ошибки."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Не удалось загрузить карту из-за ошибки загрузки стиля."; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Не удалось загрузить карту из-за ошибки в стиле."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Не удалось загрузить карту так как стиль не найден или несовместим."; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Приблизить"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Отдалить"; - diff --git a/platform/macos/sdk/sv.lproj/Localizable.strings b/platform/macos/sdk/sv.lproj/Localizable.strings deleted file mode 100644 index 0612033f3d8..00000000000 --- a/platform/macos/sdk/sv.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Misslyckades med att ladda kartan på grund av ett okänt fel."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Misslyckades med att ladda kartan för att kartstilen kunde inte laddas."; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Kunde inte ladda kartan för att kartstilen är korrupt."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Kunde inte ladda kartan för att kartstilen kunde inte hittas eller är den inkompatibel."; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Zooma In"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Zooma Ut"; - diff --git a/platform/macos/sdk/uk.lproj/Localizable.strings b/platform/macos/sdk/uk.lproj/Localizable.strings deleted file mode 100644 index 74ec8ebaeec..00000000000 --- a/platform/macos/sdk/uk.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Неможливо завантажити мапу через невідому помилку."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Неможливо завантажити мапу, бо неможливо завантажити стиль."; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Неможливо завантажити мапу, через помилки в стилі."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Неможливо завантажити мапу, бо неможливо знайти стиль або він несумісний."; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Збільшити"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Зменшити"; - diff --git a/platform/macos/sdk/vi.lproj/Localizable.strings b/platform/macos/sdk/vi.lproj/Localizable.strings deleted file mode 100644 index 11256ca5e98..00000000000 --- a/platform/macos/sdk/vi.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Bản đồ bị thất bại khi tải vì lỗi không rõ."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Bản đồ bị thất bại khi tải vì không thể tải bảng kiểu."; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Bản đồ bị thất bại khi tải vì bảng kiểu bị hỏng."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Bản đồ bị thất bại khi tải vì không tìm thấy bảng kiểu hoặc bảng kiểu không tương thích."; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Phóng to"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Thu nhỏ"; - diff --git a/platform/macos/sdk/zh-Hans.lproj/Localizable.strings b/platform/macos/sdk/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index 40b61a2dba5..00000000000 --- a/platform/macos/sdk/zh-Hans.lproj/Localizable.strings +++ /dev/null @@ -1,15 +0,0 @@ -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "放大"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "缩小"; - diff --git a/platform/macos/sdk/zh-Hant.lproj/Localizable.strings b/platform/macos/sdk/zh-Hant.lproj/Localizable.strings deleted file mode 100644 index e5cf4b7695f..00000000000 --- a/platform/macos/sdk/zh-Hant.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "發生不知名錯誤,無法載入地圖。"; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "載入樣式表時發生錯誤,無法載入地圖。"; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "樣式表有毀損,無法載入地圖。"; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "找不到樣式表或樣式表不兼容,無法載入地圖。"; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "放大"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "縮小"; - diff --git a/platform/macos/src/MGLAnnotationImage.h b/platform/macos/src/MGLAnnotationImage.h deleted file mode 100644 index d7336133d13..00000000000 --- a/platform/macos/src/MGLAnnotationImage.h +++ /dev/null @@ -1,65 +0,0 @@ -#import - -#import "MGLFoundation.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The `MGLAnnotationImage` class is responsible for presenting point-based - annotations visually on an `MGLMapView` instance. Annotation image objects pair - `NSImage` objects with annotation-related metadata. They may be recycled later - and put into a reuse queue that is maintained by the map view. - */ -MGL_EXPORT -@interface MGLAnnotationImage : NSObject - -#pragma mark Initializing and Preparing the Image Object - -/** - Initializes and returns a new annotation image object. - - @param image The image to display for the annotation. - @param reuseIdentifier The string that identifies this annotation image in the - reuse queue. - @return The initialized annotation image object or `nil` if there was a problem - initializing the object. - */ -+ (instancetype)annotationImageWithImage:(NSImage *)image reuseIdentifier:(NSString *)reuseIdentifier; - -#pragma mark Getting and Setting Attributes - -/** The image to display for the annotation. */ -@property (nonatomic, readonly) NSImage *image; - -/** - The string that identifies this annotation image in the reuse queue. - (read-only) - - You specify the reuse identifier when you create the image object. You use this - type later to retrieve an annotation image object that was created previously - but which is currently unused because its annotation is not on-screen. - - If you define distinctly different types of annotations (with distinctly - different annotation images to go with them), you can differentiate between the - annotation types by specifying different reuse identifiers for each one. - */ -@property (nonatomic, readonly) NSString *reuseIdentifier; - -/** - A Boolean value indicating whether the annotation is selectable. - - The default value of this property is `YES`. If the value of this property is - `NO`, the annotation image ignores click events and cannot be selected. - */ -@property (nonatomic, getter=isSelectable) BOOL selectable; - -/** - The cursor that appears above any annotation using this annotation image. - - By default, this property is set to `nil`, representing the current cursor. - */ -@property (nonatomic, nullable) NSCursor *cursor; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/macos/src/MGLAnnotationImage.m b/platform/macos/src/MGLAnnotationImage.m deleted file mode 100644 index 8d715b427b9..00000000000 --- a/platform/macos/src/MGLAnnotationImage.m +++ /dev/null @@ -1,63 +0,0 @@ -#import "MGLAnnotationImage_Private.h" - -@interface MGLAnnotationImage () - -@property (nonatomic) NSImage *image; -@property (nonatomic) NSString *reuseIdentifier; -@property (nonatomic, strong, nullable) NSString *styleIconIdentifier; - -@end - -@implementation MGLAnnotationImage - -+ (instancetype)annotationImageWithImage:(NSImage *)image reuseIdentifier:(NSString *)reuseIdentifier { - return [[self alloc] initWithImage:image reuseIdentifier:reuseIdentifier]; -} - -- (instancetype)initWithImage:(NSImage *)image reuseIdentifier:(NSString *)reuseIdentifier { - if (self = [super init]) { - _image = image; - _reuseIdentifier = [reuseIdentifier copy]; - _selectable = YES; - } - return self; -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder { - if (self = [super init]) { - _image = [decoder decodeObjectOfClass:[NSImage class] forKey:@"image"]; - _reuseIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@"reuseIdentifier"]; - _cursor = [decoder decodeObjectOfClass:[NSCursor class] forKey:@"cursor"]; - _selectable = [decoder decodeBoolForKey:@"selectable"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:_image forKey:@"image"]; - [coder encodeObject:_reuseIdentifier forKey:@"reuseIdentifier"]; - [coder encodeObject:_cursor forKey:@"cursor"]; - [coder encodeBool:_selectable forKey:@"selectable"]; -} - -- (BOOL)isEqual:(id)other { - if (self == other) return YES; - if (![other isKindOfClass:[MGLAnnotationImage class]]) return NO; - - MGLAnnotationImage *otherAnnotationImage = other; - - return ((!_reuseIdentifier && !otherAnnotationImage.reuseIdentifier) || [_reuseIdentifier isEqualToString:otherAnnotationImage.reuseIdentifier]) - && _selectable == otherAnnotationImage.selectable - && ((!_cursor && !otherAnnotationImage.cursor) || [_cursor isEqual:otherAnnotationImage.cursor]) - && (_image == otherAnnotationImage.image || [[_image TIFFRepresentation] isEqualToData:[otherAnnotationImage.image TIFFRepresentation]]); -} - -- (NSUInteger)hash { - return _reuseIdentifier.hash + @(_selectable).hash + _image.hash; -} - -@end diff --git a/platform/macos/src/MGLAnnotationImage_Private.h b/platform/macos/src/MGLAnnotationImage_Private.h deleted file mode 100644 index 428f1db5d97..00000000000 --- a/platform/macos/src/MGLAnnotationImage_Private.h +++ /dev/null @@ -1,8 +0,0 @@ -#import "Mapbox.h" - -@interface MGLAnnotationImage (Private) - -/// Unique identifier of the sprite image used by the style to represent the receiver’s `image`. -@property (nonatomic, strong, nullable) NSString *styleIconIdentifier; - -@end diff --git a/platform/macos/src/MGLAttributionButton.h b/platform/macos/src/MGLAttributionButton.h deleted file mode 100644 index 3e0b53a6d04..00000000000 --- a/platform/macos/src/MGLAttributionButton.h +++ /dev/null @@ -1,25 +0,0 @@ -#import - -#import "MGLFoundation.h" -#import "MGLTypes.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MGLAttributionInfo; - -/// Button that looks like a hyperlink and opens a URL. -MGL_EXPORT -@interface MGLAttributionButton : NSButton - -/// Returns an `MGLAttributionButton` instance with the given info. -- (instancetype)initWithAttributionInfo:(MGLAttributionInfo *)info; - -/// The URL to open and display as a tooltip. -@property (nonatomic, readonly, nullable) NSURL *URL; - -/// Opens the URL. -- (IBAction)openURL:(nullable id)sender; - -@end - -NS_ASSUME_NONNULL_END diff --git a/platform/macos/src/MGLAttributionButton.mm b/platform/macos/src/MGLAttributionButton.mm deleted file mode 100644 index 3df415f60d9..00000000000 --- a/platform/macos/src/MGLAttributionButton.mm +++ /dev/null @@ -1,55 +0,0 @@ -#import "MGLAttributionButton.h" -#import "MGLAttributionInfo.h" - -#import "NSBundle+MGLAdditions.h" -#import "NSString+MGLAdditions.h" - -@implementation MGLAttributionButton - -- (instancetype)initWithAttributionInfo:(MGLAttributionInfo *)info { - if (self = [super initWithFrame:NSZeroRect]) { - self.bordered = NO; - self.bezelStyle = NSRegularSquareBezelStyle; - - // Extract any prefix consisting of intellectual property symbols. - NSScanner *scanner = [NSScanner scannerWithString:info.title.string]; - NSCharacterSet *symbolSet = [NSCharacterSet characterSetWithCharactersInString:@"©℗®℠™ &"]; - NSString *symbol; - [scanner scanCharactersFromSet:symbolSet intoString:&symbol]; - - // Remove the underline from the symbol for aesthetic reasons. - NSMutableAttributedString *title = info.title.mutableCopy; - [title removeAttribute:NSUnderlineStyleAttributeName range:NSMakeRange(0, symbol.length)]; - - self.attributedTitle = title; - [self sizeToFit]; - - _URL = info.URL; - if (_URL) { - self.toolTip = _URL.absoluteString; - } - - self.target = self; - self.action = @selector(openURL:); - } - return self; -} - -- (BOOL)wantsLayer { - return YES; -} - -- (void)resetCursorRects { - if (self.URL) { - // The whole button gets a pointing hand cursor, just like a hyperlink. - [self addCursorRect:self.bounds cursor:[NSCursor pointingHandCursor]]; - } -} - -- (IBAction)openURL:(__unused id)sender { - if (self.URL) { - [[NSWorkspace sharedWorkspace] openURL:self.URL]; - } -} - -@end diff --git a/platform/macos/src/MGLCompassCell.h b/platform/macos/src/MGLCompassCell.h deleted file mode 100644 index 5ed70dcb06d..00000000000 --- a/platform/macos/src/MGLCompassCell.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -/// Circular slider with an arrow pointing north. -@interface MGLCompassCell : NSSliderCell -@end diff --git a/platform/macos/src/MGLCompassCell.m b/platform/macos/src/MGLCompassCell.m deleted file mode 100644 index b3a4ad45442..00000000000 --- a/platform/macos/src/MGLCompassCell.m +++ /dev/null @@ -1,34 +0,0 @@ -#import "MGLCompassCell.h" - -@implementation MGLCompassCell - -- (instancetype)init { - if (self = [super init]) { - self.sliderType = NSCircularSlider; - // A tick mark for each cardinal direction. - self.numberOfTickMarks = 4; - // This slider goes backwards! - self.minValue = -360; - self.maxValue = 0; - } - return self; -} - -- (void)drawKnob:(NSRect)knobRect { - // Draw a red triangle pointing whichever way the slider is facing. - NSBezierPath *trianglePath = [NSBezierPath bezierPath]; - [trianglePath moveToPoint:NSMakePoint(NSMinX(knobRect), NSMaxY(knobRect))]; - [trianglePath lineToPoint:NSMakePoint(NSMaxX(knobRect), NSMaxY(knobRect))]; - [trianglePath lineToPoint:NSMakePoint(NSMidX(knobRect), NSMinY(knobRect))]; - [trianglePath closePath]; - NSAffineTransform *transform = [NSAffineTransform transform]; - [transform translateXBy:NSMidX(knobRect) yBy:NSMidY(knobRect)]; - [transform scaleBy:0.8]; - [transform rotateByDegrees:self.doubleValue]; - [transform translateXBy:-NSMidX(knobRect) yBy:-NSMidY(knobRect)]; - [trianglePath transformUsingAffineTransform:transform]; - [[NSColor redColor] setFill]; - [trianglePath fill]; -} - -@end diff --git a/platform/macos/src/MGLMapView+IBAdditions.h b/platform/macos/src/MGLMapView+IBAdditions.h deleted file mode 100644 index 29d914a7d95..00000000000 --- a/platform/macos/src/MGLMapView+IBAdditions.h +++ /dev/null @@ -1,68 +0,0 @@ -#import - -#import "MGLMapView.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MGLMapView (IBAdditions) - -#if TARGET_INTERFACE_BUILDER - -// Core properties that can be manipulated in the Attributes inspector in -// Interface Builder. These redeclarations merely add the IBInspectable keyword. -// They appear here to ensure that they appear above the convenience properties; -// inspectables declared in MGLMapView.h are always sorted before those in -// MGLMapView+IBAdditions.h, due to ASCII sort order. - -// We want this property to look like a URL bar in the Attributes inspector, but -// just calling it styleURL would violate Cocoa naming conventions and conflict -// with the existing NSURL property. Fortunately, IB strips out the two -// underscores for display. - -/** URL of the style currently displayed in the receiver. - - The URL may be a full HTTP or HTTPS URL, a Mapbox - style URL (`mapbox://styles//
  3. 0Sd@N@8J+DBa$eoJosA@^DY!-sj`nx>VL2j9}L+ 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 z zCnkSrQuKw*L_Wy0M@qayS=5^ip_w&@Q*!=4LzG$Rw$1IZ^5R|E^wm==GiY=PGU9ZtUA^P!mMu#1t#H=~)rZY^PKEi;yyEEo!=3Wm<6 z#Qdi_4m>>{@)+^}TLT$qyAJVA2ND0)xj$@6TXF@PkT&O0F@IHAWqCjPc`MdT;Ewu# zfdAWLwqIKNk-&%a|Ct1N_C}@~U99)nl%EHjny`xtPzi~KP$V+vrb z&S(MTqMmN$%3xS703)@M$FAL%H^2{-7Vqo-J;o7~wL6Px>SuHzWRqzd=gm%7RqEM_ zOq^p^DfHWeEIXP4rzJI_b<-TZGxv3c*Lv-~1i$SUx~+R}UAdNF+woUHdC|IR zDx+`8ssh`)Y<@{z1Tf9LsOtUOvh2ZZ=>iRyrL_N~7Z#U3S@s5x6PzE)Lb9f0`qZZf zemlao?jZ`BHn~2!K6;%UWkCGh(r%J=FYKhem97=lAFSr-@`vaNUEKzt=07$@{uOq)xm| zwwIhwNHO6@(rvBArBF+{kQp>z!zJ%@08w?H97@GJ*M$Xh9Sos?v7OqNM!2>5x(>Oq z4-t$c9X8p)aRY7L2g0R3g|s0b^&g+DM)yVvjZyksNWa&kEL*nh&KI4+1zhHxq z4B)=BHwX_=rBk3GbX0sPT9#)%^a6EwyjAy_e_&-_KYfODAXH{;a}VwxQ_< zY%tPB>-Zg8eRwY~6*|Z}VwZYg3OKe?2;837Li&SgGa&ctf!N=E)-az?*jPhQ6&M}a!tk184HndZ>BoT1oj)qlM2pL>)4R(TX%hP9zWD+uH$|w!mA*PNoNp!E zVr)mLj2&vWis}aBqSL>;u2mBNGkp3{zB@Yn(e^Cw`!#nPY>UGE^vmWj|4c48Vx-RV;Em5A69A(+tPh1`MC93V zJkIyP`2F{^v__)~dp}!gN962jDhG^!y6G6n?`&o#}?X(sDR1cp)HnTcsGeZhERuWfzBaYc7q4s3Zk^d*9mULXGn9~*CaE$^Yx zTR{kkRn5X(;Zf{=ijPLwM~t9ZwVYyJ12bz)0Z8Ym>UR7(k%J+oYg2RI`w7xR-Glbqlh0fDl0$Yo;x-k7Ney$yPP9-hqN z$A;wziLvKcxM`7umTMRd1+ROY-szK`;i5QvT| zBj<#TE9SeCmT54W#}JYRl_o5DnQ+6qd`pvHk!*SV%yOT{)RfT``G#ds=phC@MM2|K zwdcc&fzJ04li0T|27BJ)^a*z(cAbHVlN;^7o{K&r>pY8lh#WMX@iXnBK5)cPG$0S_ z+1$U0BKBisl53nz+#e~qaN8C5c0M?3-v);0|$+P{RY zwGxClZF_x%h`XDzmlc)a6dG=Kpxw|()hON_uRus{Yjq2oIB=G<BTqx+PHx$#9x*w8nh#t0*yvO`{+B^PN%^-=e z!Mexh)D0PZ|J7XzDc4O9QR=XDh$pzpjUw``sG zh|L}Dftl+IvOn`am!RZW9CA}C9|sLsHzwA|b;UY6848jlW8uD_Mxa*C_@O@e4)ne? z^_w(U=n}4A@6vV<`XE@}$z+wp%S98~KykiawMy|mjaB)lzg7Vow355FN*)$K#ch?< za?k7xGW;2tG=gOyPc$d=Mt=CyH>Di~`Vjuv(Va?H{$KHLT2&04`|W?P*X^^`W7NJC zwxx$sz`(uo-dkZW)K@RrRNcGJA^Q`Zr72;WsEzo|WcGBEQ7E*U#*ArGekjmcD)S?= z*Yj%UnH8-+#XUS-1rU>YheL_oHft#bU5BX_Y3|(Upm~2^|vpnGb+RT3tP%!3xYcOAR#~ z>;4U&$h6u|QujW|%b!*5kv*dCFb+KQ(AXK>w>_F7mW^-{r_fFY=Tgumr4gt3O=>DC-B0obVt7Yu5PeH!v(mwC;qN#ikra>^u!wq*cgW4*Gv!0 zKl|=u;!-qm4^gP`w7eG+P}0-U^5y`%7=(U_f=v$l@+EaT2FL!pG5!XjOreo<<~VG8=)^U;N1R(q@N@bi4QL=mWbYHqlAI6%8yO@uWNH zed!N+r7ahT&TfPrAo;<;)i=I7@&)B55+ZZXw_AkAkDYRXjvmg%(N1TESquyogo>}m zRS62O{p*%RgPC1w5Z!$|dvVtcF?r{_F?{=#LT%2L)3~YE1n9I1VzQUy$VzwU-@F}{Xcy)ao_+|S^T;Z?i>`zs z(-`=eD`kY7!W-mT4`%;}hcs`$@WNq*_ODT|x__w&uUBy_I{di9#8rHR^6%#}{bl3R zO$)rY#Sg6}v^=E0MVc^X`UT3vIFp;}c$QZt;-@AUH@{N(Q9yH+xjMS?qbfE`b7J(C zx(q8dYEC)Am43cl@ZncIzECGhAo}f{QBwO(*LCtXq0E1~>?MFRK_uEfFnT*Yu zbcvr)9zV&DCLz7MTab!)CFfp##k;Phh6^06fbwkPfk6Q?M^^Y=F@m|qx_TQwv}&*= z%)ke#I57c7ufsxF=Sni$EgP1O%YIB+G`6ci#?B5>7XVNxK zx4nk^Y_SlcF~3m_Bn7}eY0Edzh z$ZcTd;l6@!L_3&a|9rN_rp7-|kjB(MF5V!gAW+icc+~NHUa$tbqnN}nFOs{zqc*yC zrdZvAV8vUKqg^8HZ&}RWz<*Y)Z`wD|U_~Xo-g_|#X;!tDU|X!icRo8z9F_f|F8S&@ zZW7FqkYqhypx_sxmSTtRB3ndeAjDRw!pVs`KmE?xT49w?SY-m)!2yTRnpyp@lbu{sJ6lU zWh{Voxs`1vwRRBlaciX%r#Ul@h2=&j~ z;Xva4Bk)RR6H;Ez4pyJNI6Rq+`wvuv_5zU=qe{9RAj)y?O| zOxI>_m2rHu!Q>R|5bsW;W(76w2Mhu!K6G8zQk0D0HGacqalOnmf+TgjoiZ&GCOP}t8+7zZ!I%<+RP zVFb{Tg7?;Gffyyat>GuytSpRD?^CLTg`nxV`bWdH=|rFmAA$NR8Io7JQm+(t%%Vk_ zSv>bkt1nkihL$23CUFcE)UKuk{>KZfe62X~b9k;L(c1B{?+3=Sbb%{jy*sq3RTC`V z5ATIo;QivBri7a746_;I2VwsdU(Vg<2i1-{c}nGty_wCxq4RD1>+TUIrl;n=VoMrK zvygnVJ4sNfc(A9b`FHwkPU1;a)K@9cqRX7otf3EcrZT~meL9>IHyp21f5!f%7uN5C} z%YJ>{Mk&IY)%eU>0m~3kZ@70Zj-Y>sJ@7Em(Y}!>F&Zwa&kU+9VlTnNBFVw7=2VS1 zUs|y?p%g6x!RJ{Je<)3Iq}yJ?eZ@0Mg4x8F4&Ny0K31 ziOU{=b9dj@6CcnOVh5ua)v6!?T8@-cZUOmgdQAk(gow*MeqU3#RGQH$*>0Ni6 z>~bBPvqZsle8B0v0W)VpDEA;U*JkZ^FfLVn^yo8LLlqIiRY<5}7y|yKVkkhn9f-sm zF~_f@mP(frhr2ZB_qIi`lYjM~^N&<0r+bV1ta71(UF(6ah{s_;k1f9!)L+qIO2{M| zH3$BdD>ZIi`)WZaOp8ttxN>qC^FjidwLLtYuenyap&VR+ARMWO%&~%m65bh(j0K=+ zMx4iie|Y+PjI~)_oXw71Ql6#*2iRRb-~2WkrU)~Pb74vx{Q6|s?e`<^s(Q#wbcG#y zg|L;8Zch_f*1i7s zvLE-?YsB7Nt?#Fnuki~qW~Kx!?o7xwh2keui{OwQMy5@?-(BL6w#zMMF+PbVMuKxhtp0>%crI+ozYkW`4`Rx5N*h%jF)XK|E5#zrs z5&)nZCd%X>eWd%ICRjeM$b@EWMB?kI;mUl~n=W;dpjz?jp#$f&Tw+^Fm>z1xHWK`@ zj4y`!>e5j*Ix+yo0<4T8eVHw)R5J9pt5S%3J(K{rBJa)TdWV(p5G<~wDSoba4nHMg z&KC4<`c8Rf+4BZ2jT7U{=?O$~p=rgWbaX>((Y3YaYCQS79zhJV+t!weD;zzbu0S4c|I+?kP#ZVV`;=od%>yZP8Rs`p!$OAetT1kpuXT46?2XTuV=5A zVv#2DI|zX4J6=m~aw?z=v~qA8$Il*0YccHn-aX?uCXP$kqHLJ9zD-+2EMVvG#YBWVPGfQ73&9?o&Myc~0#Zb|#ysgbj_ADup^&%1VP2bM;AM&c-t5vVx1BqT1dYc53yqJTycW1wY z4~k0GIkVjD%9f{07$w;j3?b6Il}D3ZtYOjEZ_$T{bcr+px?hNNHb)TEhs9p_OH5Jfm0uq6?Q*ao2v*hT5R4BTtU@RhS+r zszt;Y%?eA95=#omffuQvm3$(Lgje=4o)to0a*+9|{ASDIgQrOMpmg3&;?zwAC+j_* z)EP81!*NSw!&k`WnOS5114QnDJASp}Z84;i-NH)lBGJIJUB|m6Z1CGNl)Kkhb z7p#5}x2r!Qy3}A4kpx_Zo+8AnXrX!xD`ysjr2W50@2NSBg2qCY#b+*ZDf{|t0A7Gx zeas$Sy%BaPHXdF^bA(UJg_zoJxw820r8z1aUErUjpOLgx4}B4}YJr2^B*!5?A$+ZU5EaXMl>eRB}$?-qH>LNQLfbsM0BtT$! zsw?6@K+s=-R^rwe&$*UlX=R>XugphxlXtLo7UMHhQUBiOL>gGTkmR@R+viK<^A&jT zoN*5eU4fUa2f&fU%jW}RMX{Cq0*ciC034DJNC{tkIcMTO?}q;W0JX@QDf-Wg)-T7| z2MM;cb5h)Gq_)X3$Ijf5r99|ExNits*SN>}Zg_L=kjBWR_PeAPgT|wFfE(~HU^Ai$IM-9nThYroU5O&upNpcYcucxjgwH*>+ z;j5jEoD8$JcpEDe7TettO&P%xYbV)!AU+9*+2rRRW$i0wTNAI>g)^)Ghu2Ttc7Ab= z^26slj_XH0$R^NBJ?s7AHWgKCKk#(%G*U#&ItA*u!K3X{CXuC`qFFnq#%FlLi#&Lk z?yolYo^1*|OT}IjBXNs9NpmAX2` zhwd8D*l(5M*?&_Zu!`@s)?Hu5^rxC%8IwqSJqjr3gmfFWuTX&*Qw#OLof&M|>%7Sq zS4{Wy7k1UsXVcL}QE7jg{sRz{m6IvC;(C($ym^o}tMYpe&|w@(vgXFpObwfA6Uznq zHcL8^uc|kFNc=U-!b|xLNiE03D$`QYSX|-+EV1%2X6OzT@cRa8sO2k zKtErBDX)Bk>JJ3{!15FQFho1wk;MEyPwVA3JuEurQN>A|(R`e*NdB-S@gHAThgipC$8u>)tj&kg`QGo603Tt<`V~tYyy%yxGdd;EA368t&!KbK zdf`4!NB?vAaKsRS$vc8IDSGT|sna`(r@se(F|oTG6CoZHDe62@4*^k!x2H-gaT_tM zF&>9mS`UHSqrzeFmSTh{q3Ytg^>DI-*;uzHxmKsc|J}QaU24}VF9|3@t0d#|8k&i{ z!+ngom?4{#!*_AP)4d$Y9DmATjOm}|o!b?$$)`r7k4M0?Fq$7~(Qh;|lT`EiW+X1P z7h;Tf??GxTtfmY_&#N@=4)<+Q(Pq}& zA)Cq0_<;ezGZAN=9IEkqVI#*45sbOGJQ{Okm>);pDbib8e5vAzMBVSP8IeBY?mzfb zx`pS&8BOYIMd3AzPI*EEqvNxYb`aW27NqJuyMvYr8ZiVKn5_s*H_0AO zYCP>}-rMya<^Z=o))Nm!rMtC|$M%`?(jz60O^dtVFzePrEFu5X7xpak7N^qQf+5qy zh@1cKw$a%4XCM!YK{QAskls>wMyPsF7q>kTe@ur#CU-wnXg|;v^>M*_x0S*{?kL;w zY#um^l%4j-QQO47_?JIlvy!>u|FklguJu3z`j3gjM{lZ$$JB4$4&bPq(tT2Ufovy z($-*CrL|5S%=^Bc7()RYMQ2PBKMuB`9LZtx_x@GGWGbR3{z~;JaghHT&gZ~bi)c|d zGcOJ_gr&WOG(B#JmO@2Mbv68sB!NCM*`XT9iRT#-#V%o?CGHx%ROZM4^IQr81k%glGLy`(wFeAlCRp{p=V23U&dNk8&Oc zLZ7&F9+O?Rw_h@gc(KT3-0DA?n3lkJ-{RgIVpx0R5r@ii3EG0Y9>j$;XR4feS6&Dm zQp)N%Bj~A|wEfc!L@6huNUdhw-g0oyYJ$54M+J=%x4v6F8TYWS6@?3;GtmmsRA}B1 z_`Xm6MVD(y7Qk?x742Ps<$%Kz{=Lye0{Rq{%kx@Y2+~%6`^E7@g9J`K_#$@oJp7XF z*sABZmrt4+EAfrVvuzuXL)U~`n67??dBkP>k9}L4w*+NF%gx@ko59YKg?nB}?!R;C zmdNRMO7E&IQpZPI)%_5sGJ`k79~FOmG!sUGc4{Z2P$7~#6p74OyOr;=Y_Q@IL#+Lx z{{DgV@jkJCptOM8<0IzgjpR)EkME(c~oK z8IC7>O6CG_it^x%+S|+ZdR)RGOvcU<`j)z5*y-Yu7aXt<>D@@pzcI!K zuPtrPzR37$?8(!^BNFPl(%W8<3%GXP@wEsDE4ZqD*ExzEE`f!Je6pC|N6(QJUaa^x?6I7M|9P*&m2`whU-F8^gEd6Fj>*{0 zTFY`wmORrW_`-vC$#X<>*_$pTJRxUwB{Ke3+MvB+|HjB!`eM>yH{GX128jQNU=H^_ z#n*|bez5e6u<)pf_W6Z#&3P(evWWci1u%xHR~@Oc(hA%+q_?BnJPWaB>|90jr^-Kvfp<;t-9BTOFhU;7unM%$jk*p67D9_3#!H4eFUBo`uJ(-5+Ep`H+A`6>EA z%tE>F5jPv9S%IgQ`7ddUW0Nm9x}GYrtnZlKn9RE+-EmXVIB{s()@=_qin833e}nL> zG2jT>2EI0f$LqAFULH!5w6w&2WNk-0#mN2mEDeyaAvp|L4-av{2ill57dOqT)zis0 zyYkZ~Bpfc)&q{|SSRgB7_)(AM{EHA1td_~xUJA&jUgcBu62xht6zaeSKE!#vVxp$^xx|wdJJMf8exD)@$p7=Yevs<|U2bku!yNwRB69Q(_1F{9xo0=`NA z?(pzFqT{jih<}ZtenLnmAFr}QcB31?48oOo{-SN2zh_|~!ajZ@+T{KOXcq-%8|&yG;@ zwBK9QxD&2#tCE=DDg&#iKyK^rfaePC+sXJ4LpYDP#+Su9K8U|u-bjR}L(jKKl24>! zODuHq!V{@dbzr&#T z=Xa%&8>7@9kLPb5HM@HSCX?-QJnf(=}Evfdcyy4#~>CRuwvcbxeIoRhb& zMkM3W4`vyO4pzuiD%eCRpd@vrUetK@ImzF>aKwvwASUJz1yVgPJ)a^RdEq<}6tTM^Bxd z-N}8ol7Ydy9o9Qw{Lm#1lSI}`{ucY8()B>lIYBukxV>)SSsSWeZEr77fGroXuO}<2 zAucTTqI<c_DVqx zl=-t}qFKdNBk4d!hV2sKei{^tChbuOS5!i}YpA^@ii; zmZrZh9C{o0SxcD$pQOex!11uJFy>xw-o(U))Q;{{Uo~ z?e*<}kBD>$Gz+9dI3pPx zf;k4AZQ;3e=wi{Qw+(D0;Nv`+^1I&`&!u>VYn>Wom_8e7_RdG;kVblO?OIpg6FhT0 zjDV~Ws*vH-Wykcc$k0(r+dY14-BU>}$EWL_3^H3R)~V$fl(L+Db;oG>74pB6exD$0 ztA8rSwf&*5VAESq)geo(f�?FvsiKv6JG4r>ny2Z3^4mV}Qq#U36)3MX4Lphbn2F zh2pD7ygQ(3J|I{`bHf8iZp3w(U{!xCllWJ|$48J_$jm=^HhyLvwe@9=v*JG(=}+N* z5!l>ByZrl0vl|FqfIlRRMgTv;-80vU%hUV|4c4I?nz}MuLO$VB$@*7a1e2Hbp}jPd zXOw(4@V1quqg?7CWSZhZ8mC@8Ytg({;1s%t8hI`sotWf%Rk`$AfvBXATS}3_`9)aH zK2yhP^}9VrB)Wn}wU_si;f}-dKffGTotaXp8T(pp=O!)^Qs;^AH;L>e@YLoFMivse z+JI*udkW$v(j(NSP|&hOpE1u;f1eflL9KWr!+s{4&(tBqfOffGn6^{u`aK^0i^0NW054bk|L5msttIN_K|+_Jmt)ur=IxA zTXkzs3+UD+dzUI&L4c?|&3pENYjqx*bai(0`Tl~0| zcv>)V*cJmd^tHa2sThqDf$do1C(4yI>P2~4&_)HdnlKDjtj%QZ>WDFu*1AY^>B8Y- zZ_2MOn=k-~+dj%`&TZV}Z&N16O4z_Y4;=ee{{Y!UYzV7%_Va`c(KsXhlUD`2qyl4M zpK8zExf0h zt&4i2Ax0-G>9Mnr*vLNBV2gQPK*|Q=pT?~`Cxjr8^s15C?wq3op42q=6S*uqValir zlbqGfq{+TPykj4Mrp;vPyVxC_DSY^}){53-W@%G+Bc~^&bWy-ps}6WX)}9um*ECU? zCYuMIUfnPsuoxMu@mrfk#EMLP+O=Z4($oca@|nNBF`uPm_=@)8*2!MgqjYY$JP}@v z47#F{RaK74SV<<7)rt$H$EjVGh4!pRE9yY&U6syN9@-({{U);pPf^c9QDP0ej1G^MMeu_ z-K7XcS}6L}NY-Hy2t13pK@vv&Mm-7b>0T$}uMJ&G=D{ks2b^SpN3rR}bSvX~o2lT` zB2V5TfWUVc=Z|q+l%62dJVj#G^2SzSf}y$&J9{5W>*q?w{K)y=!I%2qh37hOV|8ZF zyX^9Oz!Tk1RVUiIPl)>bUL3l$)HX1R<{k3FIc09yZ$=-DN#aWxZKIOr&=~F_$x^+* z>CJgRiacFmuF0oe-p>?MOs^H}GPc!OA|MC(xB-;s*n?bnin5HCB(2=Sq}qP#Jda%Q z=BaUiaJCS%G2C*w9gn?d&UG0+&1Z2V5pac_PpSU^Ijf%#Ja6#+&Lo1@Rk4!h-NNlj zRPN7UM_Q+QuGrmP*}aY?N$ulxb?7$_<~!F+Dk_mmMzNBTS2+Dj*w~{(aye6w!?>?^ z_#bd5xDNwH3}+3VrGLh}(_PUuYs5ns45dh9J#k&H!Ye&9!}md-IFXLwyO7n-j>Eap ze7l)qDLFyd`82E{AZ!_t#EY|UZgOA>0=y>A3An=Zjb03NA z{55G|b#Z_8k22;}Ohf}Vc|8I3uh`q$c(3R}$L$yJo8qsI;!QI^@aDC9WigUL zBo=ctYvuqmot)%X=q{fE{{U-g&^Qen-rB1v-__y_iY(KL&dKM#CO z_Nn%S-=yL5iUsdGeHS_MjWpQ`njcyxO z!4jjQ4$>H7Y>%lYKDnF2qMzfsaR9dpN&g?BEPA^0M*ZlDPqT!YgkN*G= zW3fplmR}NTFCf}*rKAN%1JHw?e|qt`ZnZmURv95ikf?4C@V_AQp1rH>Ux}U>(Bb&s z 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 x.y' -end -``` - -where _x.y_ is the current version. In Terminal, run `pod install`. - -## Usage - -Mapbox vector tiles require a Mapbox account and API access token. In the project editor, select the application target, then go to the Info tab. Under the “Custom macOS Application Target Properties” section, set `MGLMapboxAccessToken` to your access token. You can obtain an access token from the [Mapbox account page](https://www.mapbox.com/studio/account/tokens/). - -Then, in a storyboard or XIB: - -1. Add a view to your view controller or window. (Drag Custom View from the Object library to the View Controller scene on the Interface Builder canvas. In a XIB, drag it instead to the window on the canvas.) -2. In the Identity inspector, set the view’s custom class to `MGLMapView`. -3. MGLMapView needs to be layer-backed: - * You can make the window layer-backed by selecting the window and checking Full Size Content View in the Attributes inspector. This allows the map view to underlap the title bar and toolbar. - * Alternatively, if you don’t want the entire window to be layer-backed, you can make just the map view layer-backed by selecting it and checking its entry under the View Effects inspector’s Core Animation Layer section. -4. Add a map feedback item to your Help menu. (Drag Menu Item from the Object library into Main Menu ‣ Help ‣ Menu.) Title it “Improve This Map” or similar, and connect it to the `giveFeedback:` action of First Responder. - -If you need to manipulate the map view programmatically: - -1. Switch to the Assistant Editor. -1. Import the `Mapbox` module. -1. Connect the map view to a new outlet in your view controller class. (Control-drag from the map view in Interface Builder to a valid location in your view controller implementation.) The resulting outlet declaration should look something like this: - -```objc -// ViewController.m -@import Mapbox; - -@interface ViewController : NSViewController - -@property (strong) IBOutlet MGLMapView *mapView; - -@end -``` - -```swift -// ViewController.swift -import Mapbox - -class ViewController: NSViewController { - @IBOutlet var mapView: MGLMapView! -} -``` - -```applescript --- AppDelegate.applescript -script AppDelegate - property parent : class "NSObject" - property theMapView : missing value -end script -``` - -Full API documentation is included in this package, within the `documentation` folder, and [online](https://mapbox.github.io/mapbox-gl-native/macos/). The [Mapbox Maps SDK for iOS](https://docs.mapbox.com/ios/maps/) has [API documentation](https://docs.mapbox.com/ios/api/maps/) and [online examples](https://docs.mapbox.com/ios/maps/examples/) that apply to the Mapbox Maps SDK for macOS with few differences, mostly around unimplemented features like user location tracking. - -Mapbox does not officially support the macOS SDK to the same extent as the iOS SDK; however, [bug reports and pull requests](https://github.com/mapbox/mapbox-gl-native/issues/) are certainly welcome. diff --git a/platform/macos/jazzy.yml b/platform/macos/jazzy.yml deleted file mode 100644 index 381e6f8b335..00000000000 --- a/platform/macos/jazzy.yml +++ /dev/null @@ -1,118 +0,0 @@ -module: Mapbox -author: Mapbox -author_url: https://www.mapbox.com/ -github_url: https://github.com/mapbox/mapbox-gl-native -dash_url: https://mapbox.github.io/mapbox-gl-native/macos/docsets/Mapbox.xml -copyright: '© 2014–2019 [Mapbox](https://www.mapbox.com/). See [license](https://github.com/mapbox/mapbox-gl-native/blob/master/LICENSE.md) for more details.' - -head: | - - -objc: Yes -skip_undocumented: Yes -hide_documentation_coverage: Yes -umbrella_header: src/Mapbox.h -framework_root: ../darwin/src - -custom_categories: - - name: Appendices - children: - - Working with GeoJSON Data - - Predicates and Expressions - - For Style Authors - - Migrating to Expressions - - Tile URL Templates - - Info.plist Keys - - name: Maps - children: - - MGLAccountManager - - MGLMapCamera - - MGLMapView - - MGLMapViewDelegate - - MGLMapSnapshot - - MGLMapSnapshotOptions - - MGLMapSnapshotter - - name: Shapes and Annotations - children: - - MGLAnnotation - - MGLAnnotationImage - - MGLOverlay - - MGLShape - - MGLMultiPoint - - MGLPointAnnotation - - MGLPointCollection - - MGLPolygon - - MGLPolyline - - MGLMultiPolygon - - MGLMultiPolyline - - MGLShapeCollection - - name: Styling the Map - children: - - MGLStyle - - MGLLight - - name: Content Primitives - children: - - MGLFeature - - MGLPointFeature - - MGLPolygonFeature - - MGLPolylineFeature - - MGLMultiPolygonFeature - - MGLMultiPolylineFeature - - MGLPointCollectionFeature - - MGLShapeCollectionFeature - - name: Content Sources - children: - - MGLSource - - MGLShapeSource - - MGLComputedShapeSource - - MGLTileSource - - MGLRasterTileSource - - MGLRasterDEMSource - - MGLVectorTileSource - - MGLImageSource - - name: Style Layers - children: - - MGLStyleLayer - - MGLForegroundStyleLayer - - MGLBackgroundStyleLayer - - MGLRasterStyleLayer - - MGLVectorStyleLayer - - MGLCircleStyleLayer - - MGLFillStyleLayer - - MGLFillExtrusionStyleLayer - - MGLHeatmapStyleLayer - - MGLHillshadeStyleLayer - - MGLLineStyleLayer - - MGLSymbolStyleLayer - - name: Offline Maps - children: - - MGLOfflineRegion - - MGLOfflineStorage - - MGLOfflinePack - - MGLOfflinePackProgress - - MGLOfflinePackState - - MGLTilePyramidOfflineRegion - - MGLShapeOfflineRegion - - name: Geometry - children: - - MGLCoordinateBounds - - MGLCoordinateBoundsEqualToCoordinateBounds - - MGLCoordinateBoundsGetCoordinateSpan - - MGLCoordinateBoundsIntersectsCoordinateBounds - - MGLCoordinateBoundsIsEmpty - - MGLCoordinateBoundsMake - - MGLCoordinateBoundsOffset - - MGLCoordinateInCoordinateBounds - - MGLCoordinateSpan - - MGLCoordinateSpanEqualToCoordinateSpan - - MGLCoordinateSpanMake - - MGLCoordinateSpanZero - - MGLDegreesFromRadians - - MGLRadiansFromDegrees - - MGLStringFromCoordinateBounds - - name: Formatters - children: - - MGLClockDirectionFormatter - - MGLCompassDirectionFormatter - - MGLCoordinateFormatter - - MGLDistanceFormatter diff --git a/platform/macos/macos.cmake b/platform/macos/macos.cmake index 61b6a33be9f..3e23b8d5be6 100644 --- a/platform/macos/macos.cmake +++ b/platform/macos/macos.cmake @@ -35,7 +35,6 @@ target_sources( ${PROJECT_SOURCE_DIR}/platform/darwin/src/native_apple_interface.m ${PROJECT_SOURCE_DIR}/platform/darwin/src/nsthread.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/number_format.mm - ${PROJECT_SOURCE_DIR}/platform/darwin/src/reachability.m ${PROJECT_SOURCE_DIR}/platform/darwin/src/run_loop.cpp ${PROJECT_SOURCE_DIR}/platform/darwin/src/string_nsstring.mm ${PROJECT_SOURCE_DIR}/platform/darwin/src/timer.cpp diff --git a/platform/macos/macos.xcodeproj/project.pbxproj b/platform/macos/macos.xcodeproj/project.pbxproj deleted file mode 100644 index 7dcd72b47dc..00000000000 --- a/platform/macos/macos.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2332 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 0721493F1EE200E900085505 /* MGLImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A019EB1ED662D800ACD43E /* MGLImageSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 076171C5213A0DC200668A35 /* MGLMapViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 076171C4213A0DC200668A35 /* MGLMapViewTests.m */; }; - 07A019EF1ED665CD00ACD43E /* MGLImageSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07A019EC1ED662D800ACD43E /* MGLImageSource.mm */; }; - 07A240941F675674002C8210 /* MGLComputedShapeSourceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07A240921F67566F002C8210 /* MGLComputedShapeSourceTests.m */; }; - 07BA4CAC1EE21887004528F5 /* MGLImageSourceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07BA4CAB1EE21887004528F5 /* MGLImageSourceTests.m */; }; - 07D9474D1F67441B00E37934 /* MGLComputedShapeSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D947471F6741F500E37934 /* MGLComputedShapeSource_Private.h */; }; - 07F8E2F71F674C8800F794BB /* MGLComputedShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 07F8E2F41F674C8000F794BB /* MGLComputedShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 07F8E2F81F674C9000F794BB /* MGLComputedShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07F8E2F51F674C8000F794BB /* MGLComputedShapeSource.mm */; }; - 170A82BF201BDD1B00943087 /* MGLHeatmapStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 170A82BE201BDD1B00943087 /* MGLHeatmapStyleLayerTests.mm */; }; - 170A82C4201FB6EC00943087 /* MGLHeatmapColorTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 170A82C2201FAFF800943087 /* MGLHeatmapColorTests.mm */; }; - 1753ED401E53CE6100A9FD90 /* MGLConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 1753ED3F1E53CE5200A9FD90 /* MGLConversion.h */; }; - 1F2B94C3221E22E600210640 /* MGLNetworkConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F2B94C2221E22E500210640 /* MGLNetworkConfiguration_Private.h */; }; - 1F7454A31ECFB00300021D39 /* MGLLight_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F7454A01ECFB00300021D39 /* MGLLight_Private.h */; }; - 1F7454A41ECFB00300021D39 /* MGLLight.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F7454A11ECFB00300021D39 /* MGLLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F7454A51ECFB00300021D39 /* MGLLight.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F7454A21ECFB00300021D39 /* MGLLight.mm */; }; - 1F7454AB1ED1DDBD00021D39 /* MGLLightTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F7454AA1ED1DDBD00021D39 /* MGLLightTest.mm */; }; - 1F8A59FA21653483004DFE75 /* sideload_sat.db in Resources */ = {isa = PBXBuildFile; fileRef = 1F8A59F921653483004DFE75 /* sideload_sat.db */; }; - 1F8A5A04216D4696004DFE75 /* MGLLoggingConfiguration_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F8A5A01216D4695004DFE75 /* MGLLoggingConfiguration_Private.h */; }; - 1F8A5A06216D4696004DFE75 /* MGLLoggingConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F8A5A03216D4696004DFE75 /* MGLLoggingConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F95931B1E6DE2B600D5B294 /* MGLNSDateAdditionsTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F95931A1E6DE2B600D5B294 /* MGLNSDateAdditionsTests.mm */; }; - 1F9EF4061FBA1B0E0063FBB0 /* mapbox_helmet.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 1F9EF4051FBA1B0D0063FBB0 /* mapbox_helmet.pdf */; }; - 1FC481852098F323000D09B4 /* NSPredicate+MGLPrivateAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FC481842098F323000D09B4 /* NSPredicate+MGLPrivateAdditions.h */; }; - 1FCCEC53222EF9FE00302E3B /* MGLSDKMetricsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCCEC50222EF9FC00302E3B /* MGLSDKMetricsManager.m */; }; - 1FCCEC54222EF9FE00302E3B /* MGLSDKMetricsManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCCEC51222EF9FD00302E3B /* MGLSDKMetricsManager_Private.h */; }; - 1FCCEC55222EF9FE00302E3B /* MGLSDKMetricsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCCEC52222EF9FE00302E3B /* MGLSDKMetricsManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FF4858D2237235300F19727 /* MGLAttributedExpression.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF4858B2237235200F19727 /* MGLAttributedExpression.m */; }; - 1FF4858E2237235300F19727 /* MGLAttributedExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF4858C2237235200F19727 /* MGLAttributedExpression.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3508EC641D749D39009B0EE4 /* NSExpression+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3508EC621D749D39009B0EE4 /* NSExpression+MGLAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3508EC651D749D39009B0EE4 /* NSExpression+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3508EC631D749D39009B0EE4 /* NSExpression+MGLAdditions.mm */; }; - 3526EABD1DF9B19800006B43 /* MGLCodingTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3526EABC1DF9B19800006B43 /* MGLCodingTests.mm */; }; - 352742781D4C220900A1ECE6 /* MGLStyleValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 352742771D4C220900A1ECE6 /* MGLStyleValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 352742811D4C243B00A1ECE6 /* MGLSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3527427F1D4C243B00A1ECE6 /* MGLSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 352742821D4C243B00A1ECE6 /* MGLSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 352742801D4C243B00A1ECE6 /* MGLSource.mm */; }; - 352742851D4C244700A1ECE6 /* MGLRasterTileSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 352742831D4C244700A1ECE6 /* MGLRasterTileSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 352742861D4C244700A1ECE6 /* MGLRasterTileSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 352742841D4C244700A1ECE6 /* MGLRasterTileSource.mm */; }; - 352742891D4C245800A1ECE6 /* MGLShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 352742871D4C245800A1ECE6 /* MGLShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3527428A1D4C245800A1ECE6 /* MGLShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 352742881D4C245800A1ECE6 /* MGLShapeSource.mm */; }; - 3527428D1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3527428B1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3527428E1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3527428C1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.mm */; }; - 352742A11D4C25BD00A1ECE6 /* MGLStyleValue.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3527429E1D4C25BD00A1ECE6 /* MGLStyleValue.mm */; }; - 3529039B1D6C63B80002C7DF /* NSPredicate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 352903991D6C63B80002C7DF /* NSPredicate+MGLAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3529039C1D6C63B80002C7DF /* NSPredicate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3529039A1D6C63B80002C7DF /* NSPredicate+MGLAdditions.mm */; }; - 3537CA741D3F93A600380318 /* MGLStyle_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3537CA731D3F93A600380318 /* MGLStyle_Private.h */; }; - 3538AA231D542685008EC33D /* MGLStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3538AA211D542685008EC33D /* MGLStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3538AA241D542685008EC33D /* MGLStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3538AA221D542685008EC33D /* MGLStyleLayer.mm */; }; - 353BAEF81D6463B8009A8DA9 /* amsterdam.geojson in Resources */ = {isa = PBXBuildFile; fileRef = 358EB3AE1D61F0DB00E46D9C /* amsterdam.geojson */; }; - 355BA4ED1D41633E00CCC6D5 /* NSColor+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 355BA4EB1D41633E00CCC6D5 /* NSColor+MGLAdditions.h */; }; - 355BA4EE1D41633E00CCC6D5 /* NSColor+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 355BA4EC1D41633E00CCC6D5 /* NSColor+MGLAdditions.mm */; }; - 35602BFA1D3EA99F0050646F /* MGLFillStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 35602BF81D3EA99F0050646F /* MGLFillStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35602BFB1D3EA99F0050646F /* MGLFillStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35602BF91D3EA99F0050646F /* MGLFillStyleLayer.mm */; }; - 35602BFF1D3EA9B40050646F /* MGLStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 35602BFC1D3EA9B40050646F /* MGLStyleLayer_Private.h */; }; - 35602C001D3EA9B40050646F /* MGLForegroundStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 35602BFD1D3EA9B40050646F /* MGLForegroundStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35602C011D3EA9B40050646F /* MGLForegroundStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35602BFE1D3EA9B40050646F /* MGLForegroundStyleLayer.mm */; }; - 35724FC41D630502002A4AB4 /* amsterdam.geojson in Resources */ = {isa = PBXBuildFile; fileRef = 358EB3AE1D61F0DB00E46D9C /* amsterdam.geojson */; }; - 359819591E02F611008FC139 /* NSCoder+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 359819571E02F611008FC139 /* NSCoder+MGLAdditions.h */; }; - 3598195A1E02F611008FC139 /* NSCoder+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 359819581E02F611008FC139 /* NSCoder+MGLAdditions.mm */; }; - 35C5D8471D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35C5D8431D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.h */; }; - 35C5D8481D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35C5D8441D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.mm */; }; - 35C5D8491D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35C5D8451D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.h */; }; - 35C5D84A1D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35C5D8461D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.mm */; }; - 35C6DF841E214C0400ACA483 /* MGLDistanceFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 35C6DF821E214C0400ACA483 /* MGLDistanceFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35C6DF851E214C0400ACA483 /* MGLDistanceFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 35C6DF831E214C0400ACA483 /* MGLDistanceFormatter.m */; }; - 35C6DF871E214C1800ACA483 /* MGLDistanceFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 35C6DF861E214C1800ACA483 /* MGLDistanceFormatterTests.m */; }; - 35D65C5A1D65AD5500722C23 /* NSDate+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35D65C581D65AD5500722C23 /* NSDate+MGLAdditions.h */; }; - 35D65C5B1D65AD5500722C23 /* NSDate+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35D65C591D65AD5500722C23 /* NSDate+MGLAdditions.mm */; }; - 3E6465D9206576A900685536 /* LimeGreenStyleLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E6465D7206576A800685536 /* LimeGreenStyleLayer.m */; }; - 3EA9317388DC9A0BF46B7674 /* MGLRendererConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EA9369A4C46957566058822 /* MGLRendererConfiguration.h */; }; - 3EA93BA38DBB4B814B6C1FCC /* MGLRendererConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3EA93B1B0864609938506E12 /* MGLRendererConfiguration.mm */; }; - 4031ACFC1E9EB3C100A3EA26 /* MGLMapViewDelegateIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4031ACFB1E9EB3C100A3EA26 /* MGLMapViewDelegateIntegrationTests.swift */; }; - 4031AD031E9FD6AA00A3EA26 /* MGLSDKTestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4031AD011E9FD6A300A3EA26 /* MGLSDKTestHelpers.swift */; }; - 4049C2A51DB6CE7F00B3F799 /* MGLPointCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 4049C2A11DB6CE7800B3F799 /* MGLPointCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4049C2AD1DB8020600B3F799 /* MGLPointCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4049C2A71DB6D09B00B3F799 /* MGLPointCollection.mm */; }; - 408AA85B1DAEECFE00022900 /* MGLShape_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 408AA85A1DAEECF100022900 /* MGLShape_Private.h */; }; - 408AA8671DAEEE3900022900 /* NSDictionary+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 408AA85F1DAEED3300022900 /* NSDictionary+MGLAdditions.h */; }; - 408AA86A1DAEEE5D00022900 /* NSDictionary+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 408AA85E1DAEED3300022900 /* NSDictionary+MGLAdditions.mm */; }; - 40ABDB561DB0022100372083 /* NSImage+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 405C03971DB0004E001AC280 /* NSImage+MGLAdditions.mm */; }; - 40B77E451DB11BC9003DA2FE /* NSArray+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 40B77E431DB11BB0003DA2FE /* NSArray+MGLAdditions.h */; }; - 40B77E461DB11BCD003DA2FE /* NSArray+MGLAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 40B77E421DB11BB0003DA2FE /* NSArray+MGLAdditions.mm */; }; - 40E1601D1DF217D6005EA6D9 /* MGLStyleLayerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40E1601B1DF216E6005EA6D9 /* MGLStyleLayerTests.m */; }; - 52B5D17F1E5E26DF00BBCB48 /* libmbgl-loop-darwin.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5548BE7B1D0ACBBD005DDE81 /* libmbgl-loop-darwin.a */; }; - 52B5D1801E5E26DF00BBCB48 /* libmbgl-loop-darwin.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5548BE7B1D0ACBBD005DDE81 /* libmbgl-loop-darwin.a */; }; - 55335DF9212EC542000CE5F8 /* NSImage+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 405C03961DB0004E001AC280 /* NSImage+MGLAdditions.h */; }; - 5548BE781D09E718005DDE81 /* libmbgl-core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAE6C3451CC31D1200DB3429 /* libmbgl-core.a */; }; - 556660C61E1BEA0100E2C41B /* MGLFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 556660C51E1BEA0100E2C41B /* MGLFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 556660D61E1D07E400E2C41B /* MGLVersionNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 556660D51E1D07E400E2C41B /* MGLVersionNumber.m */; }; - 558DE7A61E56161C00C7916D /* MGLFoundation_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 558DE7A41E56161C00C7916D /* MGLFoundation_Private.h */; }; - 558DE7A71E56161C00C7916D /* MGLFoundation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 558DE7A51E56161C00C7916D /* MGLFoundation.mm */; }; - 5591AC6A2298361600FF9ADF /* MGLMapView+Impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5591AC682298361600FF9ADF /* MGLMapView+Impl.h */; }; - 5591AC6B2298361600FF9ADF /* MGLMapView+Impl.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5591AC692298361600FF9ADF /* MGLMapView+Impl.mm */; }; - 55CAF6322294407F00F17770 /* MGLMapView+OpenGL.h in Headers */ = {isa = PBXBuildFile; fileRef = 55CAF6312294407F00F17770 /* MGLMapView+OpenGL.h */; }; - 55CAF6342294409B00F17770 /* MGLMapView+OpenGL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55CAF6332294409B00F17770 /* MGLMapView+OpenGL.mm */; }; - 55CF7533213EDADF00ED86C4 /* libmbgl-vendor-icu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55CF7532213EDADF00ED86C4 /* libmbgl-vendor-icu.a */; }; - 55D120A31F7906E6004B6D81 /* libmbgl-filesource.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55D120A41F7906E6004B6D81 /* libmbgl-filesource.a */; }; - 55D120A51F790A0C004B6D81 /* libmbgl-filesource.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55D120A41F7906E6004B6D81 /* libmbgl-filesource.a */; }; - 55E2AD111E5B0A6900E8C587 /* MGLOfflineStorageTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55E2AD101E5B0A6900E8C587 /* MGLOfflineStorageTests.mm */; }; - 747ABE59219B2BDB00523B67 /* MGLFillExtrusionStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE54219B2BDA00523B67 /* MGLFillExtrusionStyleLayer_Private.h */; }; - 747ABE5A219B2BDB00523B67 /* MGLCircleStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE55219B2BDA00523B67 /* MGLCircleStyleLayer_Private.h */; }; - 747ABE5B219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE56219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h */; }; - 747ABE5C219B2BDB00523B67 /* MGLFillStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE57219B2BDB00523B67 /* MGLFillStyleLayer_Private.h */; }; - 747ABE5D219B2BDB00523B67 /* MGLHeatmapStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE58219B2BDB00523B67 /* MGLHeatmapStyleLayer_Private.h */; }; - 747ABE5F219B2BED00523B67 /* MGLHillshadeStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE5E219B2BED00523B67 /* MGLHillshadeStyleLayer_Private.h */; }; - 747ABE61219B2C0000523B67 /* MGLLineStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE60219B2C0000523B67 /* MGLLineStyleLayer_Private.h */; }; - 747ABE64219B2C1800523B67 /* MGLOpenGLStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE62219B2C1700523B67 /* MGLOpenGLStyleLayer_Private.h */; }; - 747ABE65219B2C1800523B67 /* MGLRasterStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE63219B2C1700523B67 /* MGLRasterStyleLayer_Private.h */; }; - 747ABE67219B2C3200523B67 /* MGLSymbolStyleLayer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 747ABE66219B2C3200523B67 /* MGLSymbolStyleLayer_Private.h */; }; - 749EC8912199CCB9005608D7 /* MGLStyleLayerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 749EC88F2199CCB8005608D7 /* MGLStyleLayerManager.h */; }; - 749EC8932199CCB9005608D7 /* MGLStyleLayerManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 749EC8902199CCB9005608D7 /* MGLStyleLayerManager.mm */; }; - 89462399200D199100DA8EF2 /* heatmap.json in Resources */ = {isa = PBXBuildFile; fileRef = 89462398200D199100DA8EF2 /* heatmap.json */; }; - 8946239D200E744800DA8EF2 /* MGLHeatmapStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8946239A200E73CA00DA8EF2 /* MGLHeatmapStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 894623A0200E748000DA8EF2 /* MGLHeatmapStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8946239B200E73CA00DA8EF2 /* MGLHeatmapStyleLayer.mm */; }; - 92092EF01F5EB10E00AF5130 /* MGLMapSnapshotter.h in Headers */ = {isa = PBXBuildFile; fileRef = 92092EEE1F5EB10E00AF5130 /* MGLMapSnapshotter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 92092EF11F5EB10E00AF5130 /* MGLMapSnapshotter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 92092EEF1F5EB10E00AF5130 /* MGLMapSnapshotter.mm */; }; - 920A3E591E6F859D00C16EFC /* MGLSourceQueryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 920A3E581E6F859D00C16EFC /* MGLSourceQueryTests.m */; }; - 9221BAAF20699CBB0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9221BAAE20699CBA0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h */; }; - 9250B8C32073C69100EF338C /* MGLShapeOfflineRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = 9250B8C22073C69000EF338C /* MGLShapeOfflineRegion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 92F2C3EB1F0E3A1900268EC0 /* MGLRendererFrontend.h in Headers */ = {isa = PBXBuildFile; fileRef = 92F2C3EA1F0E3A1900268EC0 /* MGLRendererFrontend.h */; }; - 92FC0AE4207CC8DA007B6B54 /* MGLShapeOfflineRegion_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 92FC0AE3207CC8DA007B6B54 /* MGLShapeOfflineRegion_Private.h */; }; - 92FC0AE6207CDD8D007B6B54 /* MGLShapeOfflineRegion.mm in Sources */ = {isa = PBXBuildFile; fileRef = 92FC0AE5207CDD8D007B6B54 /* MGLShapeOfflineRegion.mm */; }; - 9654C12B1FFC38E000DB6A19 /* MGLPolyline_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9654C12A1FFC38E000DB6A19 /* MGLPolyline_Private.h */; }; - 9654C12D1FFC394700DB6A19 /* MGLPolygon_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9654C12C1FFC394700DB6A19 /* MGLPolygon_Private.h */; }; - 96E027311E57C9A7004B8E66 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 96E027331E57C9A7004B8E66 /* Localizable.strings */; }; - CA0B3C072329F7E700E4B493 /* MGLTestAssertionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = CA0B3C052329F7E600E4B493 /* MGLTestAssertionHandler.m */; }; - CA0B3C092329FB4800E4B493 /* MGLOfflinePackTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = CA0B3C082329FB4800E4B493 /* MGLOfflinePackTests.mm */; }; - CA4045C7216720D700B356E1 /* MGLCluster.h in Headers */ = {isa = PBXBuildFile; fileRef = CA4045C4216720D700B356E1 /* MGLCluster.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA8FBC0D21A4A74300D1203C /* MGLRendererConfigurationTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = CA8FBC0C21A4A74300D1203C /* MGLRendererConfigurationTests.mm */; }; - CA9461A620884CCB0015EB12 /* MGLAnnotationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA9461A520884CCB0015EB12 /* MGLAnnotationTests.m */; }; - CAD9D0AC22A88A32001B25EE /* MGLResourceTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = CAD9D0AB22A88A32001B25EE /* MGLResourceTests.mm */; }; - CF762DEF22DC7EFF00338472 /* MGLLoggingConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = CF762DEE22DC7EFF00338472 /* MGLLoggingConfiguration.mm */; }; - CFF9F98D23A2505700B0DE92 /* MGLNetworkIntegrationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CFF9F98B23A2505700B0DE92 /* MGLNetworkIntegrationManager.m */; }; - CFF9F98E23A2505700B0DE92 /* MGLNetworkIntegrationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF9F98C23A2505700B0DE92 /* MGLNetworkIntegrationManager.h */; }; - DA00FC8A1D5EEAC3009AABC8 /* MGLAttributionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DA00FC881D5EEAC3009AABC8 /* MGLAttributionInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA00FC8B1D5EEAC3009AABC8 /* MGLAttributionInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA00FC891D5EEAC3009AABC8 /* MGLAttributionInfo.mm */; }; - DA0CD58E1CF56F5800A5F5A5 /* MGLFeatureTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA0CD58D1CF56F5800A5F5A5 /* MGLFeatureTests.mm */; }; - DA2784FE1DF03060001D5B8D /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DA2784FD1DF03060001D5B8D /* Media.xcassets */; }; - DA29875A1E1A4290002299F5 /* MGLDocumentationExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA2987591E1A4290002299F5 /* MGLDocumentationExampleTests.swift */; }; - DA35A2A41CC9EB1A00E826B2 /* MGLCoordinateFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2A31CC9EB1A00E826B2 /* MGLCoordinateFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA35A2A61CC9EB2700E826B2 /* MGLCoordinateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2A51CC9EB2700E826B2 /* MGLCoordinateFormatter.m */; }; - DA35A2A81CC9F41600E826B2 /* MGLCoordinateFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2A71CC9F41600E826B2 /* MGLCoordinateFormatterTests.m */; }; - DA35A2AD1CCA091800E826B2 /* MGLCompassDirectionFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2AB1CCA091800E826B2 /* MGLCompassDirectionFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA35A2AE1CCA091800E826B2 /* MGLCompassDirectionFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2AC1CCA091800E826B2 /* MGLCompassDirectionFormatter.m */; }; - DA35A2B61CCA14D700E826B2 /* MGLCompassDirectionFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2B51CCA14D700E826B2 /* MGLCompassDirectionFormatterTests.m */; }; - DA35A2BF1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2BD1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA35A2C01CCA9B1A00E826B2 /* MGLClockDirectionFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2BE1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.m */; }; - DA35A2C21CCA9F4A00E826B2 /* MGLClockDirectionFormatterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2C11CCA9F4A00E826B2 /* MGLClockDirectionFormatterTests.m */; }; - DA35A2CF1CCAAED300E826B2 /* NSValue+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA35A2CD1CCAAED300E826B2 /* NSValue+MGLAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA35A2D01CCAAED300E826B2 /* NSValue+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DA35A2CE1CCAAED300E826B2 /* NSValue+MGLAdditions.m */; }; - DA35D08A1E1A631B007DED41 /* one-liner.json in Resources */ = {isa = PBXBuildFile; fileRef = DA35D0891E1A631B007DED41 /* one-liner.json */; }; - DA551B821DB496AC0009AFAF /* MGLTileSource.h in Headers */ = {isa = PBXBuildFile; fileRef = DA551B7F1DB496AC0009AFAF /* MGLTileSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA551B831DB496AC0009AFAF /* MGLTileSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA551B801DB496AC0009AFAF /* MGLTileSource_Private.h */; }; - DA551B841DB496AC0009AFAF /* MGLTileSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA551B811DB496AC0009AFAF /* MGLTileSource.mm */; }; - DA5589771D320C41006B7F64 /* wms.json in Resources */ = {isa = PBXBuildFile; fileRef = DA5589761D320C41006B7F64 /* wms.json */; }; - DA57D4B11EBC699800793288 /* MGLDocumentationGuideTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA57D4B01EBC699800793288 /* MGLDocumentationGuideTests.swift */; }; - DA6408D71DA4E5DA00908C90 /* MGLVectorStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA6408D51DA4E5DA00908C90 /* MGLVectorStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA6408D81DA4E5DA00908C90 /* MGLVectorStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA6408D61DA4E5DA00908C90 /* MGLVectorStyleLayer.mm */; }; - DA695424215B1E6C002041A4 /* MGLMapCameraTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA695423215B1E6C002041A4 /* MGLMapCameraTests.m */; }; - DA7262071DEEDD460043BB89 /* MGLOpenGLStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7262051DEEDD460043BB89 /* MGLOpenGLStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA7262081DEEDD460043BB89 /* MGLOpenGLStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA7262061DEEDD460043BB89 /* MGLOpenGLStyleLayer.mm */; }; - DA7DC9811DED5F5C0027472F /* MGLVectorTileSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7DC9801DED5F5C0027472F /* MGLVectorTileSource_Private.h */; }; - DA7DC9831DED647F0027472F /* MGLRasterTileSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7DC9821DED647F0027472F /* MGLRasterTileSource_Private.h */; }; - DA839E971CC2E3400062CAFB /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DA839E961CC2E3400062CAFB /* AppDelegate.m */; }; - DA839E9A1CC2E3400062CAFB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DA839E991CC2E3400062CAFB /* main.m */; }; - DA839E9D1CC2E3400062CAFB /* MapDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = DA839E9C1CC2E3400062CAFB /* MapDocument.m */; }; - DA839EA01CC2E3400062CAFB /* MapDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA839E9E1CC2E3400062CAFB /* MapDocument.xib */; }; - DA839EA21CC2E3400062CAFB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DA839EA11CC2E3400062CAFB /* Assets.xcassets */; }; - DA839EA51CC2E3400062CAFB /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA839EA31CC2E3400062CAFB /* MainMenu.xib */; }; - DA87A9981DC9D88400810D09 /* MGLShapeSourceTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA87A9961DC9D88400810D09 /* MGLShapeSourceTests.mm */; }; - DA87A9991DC9D88400810D09 /* MGLTileSetTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA87A9971DC9D88400810D09 /* MGLTileSetTests.mm */; }; - DA87A99C1DC9D8DD00810D09 /* MGLShapeSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA87A99B1DC9D8DD00810D09 /* MGLShapeSource_Private.h */; }; - DA87A99E1DC9DC2100810D09 /* MGLPredicateTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 35C5D84B1D6DD75B00E95907 /* MGLPredicateTests.mm */; }; - DA87A9A01DC9DC6200810D09 /* MGLValueEvaluator.h in Headers */ = {isa = PBXBuildFile; fileRef = DA87A99F1DC9DC6200810D09 /* MGLValueEvaluator.h */; }; - DA87A9A21DC9DCF100810D09 /* MGLFillStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25741D51C5F40010E6B5 /* MGLFillStyleLayerTests.mm */; }; - DA87A9A31DCACC5000810D09 /* MGLRasterStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25751D51C5F40010E6B5 /* MGLRasterStyleLayerTests.mm */; }; - DA87A9A41DCACC5000810D09 /* MGLSymbolStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25761D51C5F40010E6B5 /* MGLSymbolStyleLayerTests.mm */; }; - DA87A9A51DCACC5000810D09 /* MGLLineStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25771D51C5F40010E6B5 /* MGLLineStyleLayerTests.mm */; }; - DA87A9A61DCACC5000810D09 /* MGLCircleStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25781D51C5F40010E6B5 /* MGLCircleStyleLayerTests.mm */; }; - DA87A9A71DCACC5000810D09 /* MGLBackgroundStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25791D51C5F40010E6B5 /* MGLBackgroundStyleLayerTests.mm */; }; - DA8933A51CCD287300E68420 /* MGLAnnotationCallout.xib in Resources */ = {isa = PBXBuildFile; fileRef = DA8933A71CCD287300E68420 /* MGLAnnotationCallout.xib */; }; - DA8933AE1CCD290700E68420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA8933AB1CCD290700E68420 /* Localizable.strings */; }; - DA8933B51CCD2C2500E68420 /* Foundation.strings in Resources */ = {isa = PBXBuildFile; fileRef = DA8933B31CCD2C2500E68420 /* Foundation.strings */; }; - DA8933B81CCD2C2D00E68420 /* Foundation.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = DA8933B61CCD2C2D00E68420 /* Foundation.stringsdict */; }; - DA8F25871D51C9E10010E6B5 /* MGLBackgroundStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25851D51C9E10010E6B5 /* MGLBackgroundStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8F25881D51C9E10010E6B5 /* MGLBackgroundStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25861D51C9E10010E6B5 /* MGLBackgroundStyleLayer.mm */; }; - DA8F258B1D51CA540010E6B5 /* MGLLineStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25891D51CA540010E6B5 /* MGLLineStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8F258C1D51CA540010E6B5 /* MGLLineStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F258A1D51CA540010E6B5 /* MGLLineStyleLayer.mm */; }; - DA8F258F1D51CA600010E6B5 /* MGLRasterStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F258D1D51CA600010E6B5 /* MGLRasterStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8F25901D51CA600010E6B5 /* MGLRasterStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F258E1D51CA600010E6B5 /* MGLRasterStyleLayer.mm */; }; - DA8F25931D51CA750010E6B5 /* MGLSymbolStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25911D51CA750010E6B5 /* MGLSymbolStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8F25941D51CA750010E6B5 /* MGLSymbolStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25921D51CA750010E6B5 /* MGLSymbolStyleLayer.mm */; }; - DA8F25971D51CAC70010E6B5 /* MGLVectorTileSource.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25951D51CAC70010E6B5 /* MGLVectorTileSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8F25981D51CAC70010E6B5 /* MGLVectorTileSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25961D51CAC70010E6B5 /* MGLVectorTileSource.mm */; }; - DA8F259A1D51CAD00010E6B5 /* MGLSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25991D51CAD00010E6B5 /* MGLSource_Private.h */; }; - DA8F259C1D51CB000010E6B5 /* MGLStyleValue_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F259B1D51CB000010E6B5 /* MGLStyleValue_Private.h */; }; - DA8F25B21D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DA8F25A61D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h */; }; - DA8F25B31D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA8F25A71D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.mm */; }; - DAA48EFD1D6A4731006A7E36 /* StyleLayerIconTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA48EFC1D6A4731006A7E36 /* StyleLayerIconTransformer.m */; }; - DAA998FB1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA998F91E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAA998FC1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAA998FA1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.mm */; }; - DAA999011E9F5EC5002E6EA6 /* MGLFillExtrusionStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAA999001E9F5EC5002E6EA6 /* MGLFillExtrusionStyleLayerTests.mm */; }; - DAC25FCA200FD5E2009BE98E /* NSExpression+MGLPrivateAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC25FC9200FD5E2009BE98E /* NSExpression+MGLPrivateAdditions.h */; }; - DAC2ABC51CC6D343006D18C4 /* MGLAnnotationImage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC2ABC41CC6D343006D18C4 /* MGLAnnotationImage_Private.h */; }; - DACA8622201920BE00E9693A /* MGLRasterDEMSource.h in Headers */ = {isa = PBXBuildFile; fileRef = DACA8620201920BE00E9693A /* MGLRasterDEMSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DACA8623201920BE00E9693A /* MGLRasterDEMSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = DACA8621201920BE00E9693A /* MGLRasterDEMSource.mm */; }; - DACB0C391E18DFFD005DDBEA /* MGLStyle+MBXAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DACB0C381E18DFFD005DDBEA /* MGLStyle+MBXAdditions.m */; }; - DACC22141CF3D3E200D220D9 /* MGLFeature.h in Headers */ = {isa = PBXBuildFile; fileRef = DACC22121CF3D3E200D220D9 /* MGLFeature.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DACC22151CF3D3E200D220D9 /* MGLFeature.mm in Sources */ = {isa = PBXBuildFile; fileRef = DACC22131CF3D3E200D220D9 /* MGLFeature.mm */; }; - DACC22181CF3D4F700D220D9 /* MGLFeature_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DACC22171CF3D4F700D220D9 /* MGLFeature_Private.h */; }; - DAD165741CF4CD7A001FF4B9 /* MGLShapeCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD165721CF4CD7A001FF4B9 /* MGLShapeCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAD165751CF4CD7A001FF4B9 /* MGLShapeCollection.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAD165731CF4CD7A001FF4B9 /* MGLShapeCollection.mm */; }; - DAE0DD7A1D5F015A005A6BB1 /* libmbgl-core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAE6C3451CC31D1200DB3429 /* libmbgl-core.a */; }; - DAE6C2E21CC304F900DB3429 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = DAE6C2E11CC304F900DB3429 /* Credits.rtf */; }; - DAE6C2ED1CC3050F00DB3429 /* DroppedPinAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C2E41CC3050F00DB3429 /* DroppedPinAnnotation.m */; }; - DAE6C2EE1CC3050F00DB3429 /* LocationCoordinate2DTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C2E61CC3050F00DB3429 /* LocationCoordinate2DTransformer.m */; }; - DAE6C2F01CC3050F00DB3429 /* OfflinePackNameValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C2EA1CC3050F00DB3429 /* OfflinePackNameValueTransformer.m */; }; - DAE6C2F11CC3050F00DB3429 /* TimeIntervalTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C2EC1CC3050F00DB3429 /* TimeIntervalTransformer.m */; }; - DAE6C3321CC30DB200DB3429 /* Mapbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAE6C3281CC30DB200DB3429 /* Mapbox.framework */; }; - DAE6C33D1CC30DB200DB3429 /* Mapbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAE6C3281CC30DB200DB3429 /* Mapbox.framework */; }; - DAE6C33E1CC30DB200DB3429 /* Mapbox.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DAE6C3281CC30DB200DB3429 /* Mapbox.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - DAE6C35A1CC31E0400DB3429 /* MGLAccountManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C34A1CC31E0400DB3429 /* MGLAccountManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C35B1CC31E0400DB3429 /* MGLAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C34B1CC31E0400DB3429 /* MGLAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C35C1CC31E0400DB3429 /* MGLGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C34C1CC31E0400DB3429 /* MGLGeometry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C35D1CC31E0400DB3429 /* MGLMapCamera.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C34D1CC31E0400DB3429 /* MGLMapCamera.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C35E1CC31E0400DB3429 /* MGLMultiPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C34E1CC31E0400DB3429 /* MGLMultiPoint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C35F1CC31E0400DB3429 /* MGLOfflinePack.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C34F1CC31E0400DB3429 /* MGLOfflinePack.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3601CC31E0400DB3429 /* MGLOfflineRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3501CC31E0400DB3429 /* MGLOfflineRegion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3611CC31E0400DB3429 /* MGLOfflineStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3511CC31E0400DB3429 /* MGLOfflineStorage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3621CC31E0400DB3429 /* MGLOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3521CC31E0400DB3429 /* MGLOverlay.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3631CC31E0400DB3429 /* MGLPointAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3531CC31E0400DB3429 /* MGLPointAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3641CC31E0400DB3429 /* MGLPolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3541CC31E0400DB3429 /* MGLPolygon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3651CC31E0400DB3429 /* MGLPolyline.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3551CC31E0400DB3429 /* MGLPolyline.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3661CC31E0400DB3429 /* MGLShape.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3561CC31E0400DB3429 /* MGLShape.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3671CC31E0400DB3429 /* MGLStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3571CC31E0400DB3429 /* MGLStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3681CC31E0400DB3429 /* MGLTilePyramidOfflineRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3581CC31E0400DB3429 /* MGLTilePyramidOfflineRegion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3691CC31E0400DB3429 /* MGLTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3591CC31E0400DB3429 /* MGLTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3841CC31E2A00DB3429 /* MGLAccountManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C36A1CC31E2A00DB3429 /* MGLAccountManager_Private.h */; }; - DAE6C3851CC31E2A00DB3429 /* MGLAccountManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C36B1CC31E2A00DB3429 /* MGLAccountManager.m */; }; - DAE6C3861CC31E2A00DB3429 /* MGLGeometry_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C36C1CC31E2A00DB3429 /* MGLGeometry_Private.h */; }; - DAE6C3871CC31E2A00DB3429 /* MGLGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C36D1CC31E2A00DB3429 /* MGLGeometry.mm */; }; - DAE6C3881CC31E2A00DB3429 /* MGLMapCamera.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C36E1CC31E2A00DB3429 /* MGLMapCamera.mm */; }; - DAE6C3891CC31E2A00DB3429 /* MGLMultiPoint_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C36F1CC31E2A00DB3429 /* MGLMultiPoint_Private.h */; }; - DAE6C38A1CC31E2A00DB3429 /* MGLMultiPoint.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3701CC31E2A00DB3429 /* MGLMultiPoint.mm */; }; - DAE6C38B1CC31E2A00DB3429 /* MGLOfflinePack_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3711CC31E2A00DB3429 /* MGLOfflinePack_Private.h */; }; - DAE6C38C1CC31E2A00DB3429 /* MGLOfflinePack.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3721CC31E2A00DB3429 /* MGLOfflinePack.mm */; }; - DAE6C38D1CC31E2A00DB3429 /* MGLOfflineRegion_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3731CC31E2A00DB3429 /* MGLOfflineRegion_Private.h */; }; - DAE6C38E1CC31E2A00DB3429 /* MGLOfflineStorage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3741CC31E2A00DB3429 /* MGLOfflineStorage_Private.h */; }; - DAE6C38F1CC31E2A00DB3429 /* MGLOfflineStorage.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3751CC31E2A00DB3429 /* MGLOfflineStorage.mm */; }; - DAE6C3901CC31E2A00DB3429 /* MGLPointAnnotation.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3761CC31E2A00DB3429 /* MGLPointAnnotation.mm */; }; - DAE6C3911CC31E2A00DB3429 /* MGLPolygon.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3771CC31E2A00DB3429 /* MGLPolygon.mm */; }; - DAE6C3921CC31E2A00DB3429 /* MGLPolyline.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3781CC31E2A00DB3429 /* MGLPolyline.mm */; }; - DAE6C3931CC31E2A00DB3429 /* MGLShape.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3791CC31E2A00DB3429 /* MGLShape.mm */; }; - DAE6C3941CC31E2A00DB3429 /* MGLStyle.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C37A1CC31E2A00DB3429 /* MGLStyle.mm */; }; - DAE6C3951CC31E2A00DB3429 /* MGLTilePyramidOfflineRegion.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C37B1CC31E2A00DB3429 /* MGLTilePyramidOfflineRegion.mm */; }; - DAE6C3961CC31E2A00DB3429 /* MGLTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C37C1CC31E2A00DB3429 /* MGLTypes.m */; }; - DAE6C3971CC31E2A00DB3429 /* NSBundle+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C37D1CC31E2A00DB3429 /* NSBundle+MGLAdditions.h */; }; - DAE6C3981CC31E2A00DB3429 /* NSBundle+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C37E1CC31E2A00DB3429 /* NSBundle+MGLAdditions.m */; }; - DAE6C3991CC31E2A00DB3429 /* NSException+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C37F1CC31E2A00DB3429 /* NSException+MGLAdditions.h */; }; - DAE6C39A1CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3801CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.h */; }; - DAE6C39B1CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3811CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.m */; }; - DAE6C39C1CC31E2A00DB3429 /* NSString+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3821CC31E2A00DB3429 /* NSString+MGLAdditions.h */; }; - DAE6C39D1CC31E2A00DB3429 /* NSString+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3831CC31E2A00DB3429 /* NSString+MGLAdditions.m */; }; - DAE6C3A31CC31E9400DB3429 /* MGLAnnotationImage.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C39F1CC31E9400DB3429 /* MGLAnnotationImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3A41CC31E9400DB3429 /* MGLMapView.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3A01CC31E9400DB3429 /* MGLMapView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3A51CC31E9400DB3429 /* MGLMapView+IBAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3A11CC31E9400DB3429 /* MGLMapView+IBAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3A61CC31E9400DB3429 /* MGLMapViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3A21CC31E9400DB3429 /* MGLMapViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3B11CC31EF300DB3429 /* MGLAnnotationImage.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3A71CC31EF300DB3429 /* MGLAnnotationImage.m */; }; - DAE6C3B21CC31EF300DB3429 /* MGLAttributionButton.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3A81CC31EF300DB3429 /* MGLAttributionButton.h */; }; - DAE6C3B31CC31EF300DB3429 /* MGLAttributionButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3A91CC31EF300DB3429 /* MGLAttributionButton.mm */; }; - DAE6C3B41CC31EF300DB3429 /* MGLCompassCell.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3AA1CC31EF300DB3429 /* MGLCompassCell.h */; }; - DAE6C3B51CC31EF300DB3429 /* MGLCompassCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3AB1CC31EF300DB3429 /* MGLCompassCell.m */; }; - DAE6C3B61CC31EF300DB3429 /* MGLMapView_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3AC1CC31EF300DB3429 /* MGLMapView_Private.h */; }; - DAE6C3B71CC31EF300DB3429 /* MGLMapView.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3AD1CC31EF300DB3429 /* MGLMapView.mm */; }; - DAE6C3B81CC31EF300DB3429 /* MGLMapView+IBAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3AE1CC31EF300DB3429 /* MGLMapView+IBAdditions.mm */; }; - DAE6C3B91CC31EF300DB3429 /* MGLOpenGLLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3AF1CC31EF300DB3429 /* MGLOpenGLLayer.h */; }; - DAE6C3BA1CC31EF300DB3429 /* MGLOpenGLLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3B01CC31EF300DB3429 /* MGLOpenGLLayer.mm */; }; - DAE6C3BE1CC31F2E00DB3429 /* default_marker.pdf in Resources */ = {isa = PBXBuildFile; fileRef = DAE6C3BB1CC31F2E00DB3429 /* default_marker.pdf */; }; - DAE6C3BF1CC31F2E00DB3429 /* mapbox.pdf in Resources */ = {isa = PBXBuildFile; fileRef = DAE6C3BC1CC31F2E00DB3429 /* mapbox.pdf */; }; - DAE6C3C21CC31F4500DB3429 /* Mapbox.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE6C3C11CC31F4500DB3429 /* Mapbox.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE6C3D21CC34C9900DB3429 /* MGLGeometryTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3C81CC34BD800DB3429 /* MGLGeometryTests.mm */; }; - DAE6C3D41CC34C9900DB3429 /* MGLOfflineRegionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3CA1CC34BD800DB3429 /* MGLOfflineRegionTests.m */; }; - DAE6C3D61CC34C9900DB3429 /* MGLStyleTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE6C3CC1CC34BD800DB3429 /* MGLStyleTests.mm */; }; - DAE7DEC41E24549F007505A6 /* MGLNSStringAdditionsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE7DEC31E24549F007505A6 /* MGLNSStringAdditionsTests.m */; }; - DAED385F1D62CED700D7640F /* NSURL+MGLAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED385D1D62CED700D7640F /* NSURL+MGLAdditions.h */; }; - DAED38601D62CED700D7640F /* NSURL+MGLAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = DAED385E1D62CED700D7640F /* NSURL+MGLAdditions.m */; }; - DAEDC4321D6033F1000224FF /* MGLAttributionInfoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DAEDC4311D6033F1000224FF /* MGLAttributionInfoTests.m */; }; - DAEDC4371D606291000224FF /* MGLAttributionButtonTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DAEDC4361D606291000224FF /* MGLAttributionButtonTests.m */; }; - DAF0D80E1DFE0E5D00B28378 /* MGLPointCollection_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF0D80D1DFE0E5D00B28378 /* MGLPointCollection_Private.h */; }; - DAF0D8161DFE6B1800B28378 /* MGLAttributionInfo_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF0D8151DFE6B1800B28378 /* MGLAttributionInfo_Private.h */; }; - DAF25715201901C200367EF5 /* MGLHillshadeStyleLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAF25713201901C100367EF5 /* MGLHillshadeStyleLayer.mm */; }; - DAF25716201901C200367EF5 /* MGLHillshadeStyleLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF25714201901C200367EF5 /* MGLHillshadeStyleLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAF25721201902C100367EF5 /* MGLHillshadeStyleLayerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAF2571D201902A500367EF5 /* MGLHillshadeStyleLayerTests.mm */; }; - DD0902B21DB1AC6400C5BDCE /* MGLNetworkConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DD0902AF1DB1AC6400C5BDCE /* MGLNetworkConfiguration.m */; }; - DD0902B31DB1AC6400C5BDCE /* MGLNetworkConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DD0902B01DB1AC6400C5BDCE /* MGLNetworkConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD58A4C91D822C6700E1F038 /* MGLExpressionTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD58A4C71D822C6200E1F038 /* MGLExpressionTests.mm */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - DAE6C3331CC30DB200DB3429 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DA839E8A1CC2E3400062CAFB /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAE6C3271CC30DB200DB3429; - remoteInfo = dynamic; - }; - DAE6C33B1CC30DB200DB3429 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DA839E8A1CC2E3400062CAFB /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAE6C3271CC30DB200DB3429; - remoteInfo = dynamic; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - DAE6C3221CC30B3C00DB3429 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - DAE6C33E1CC30DB200DB3429 /* Mapbox.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 076171C4213A0DC200668A35 /* MGLMapViewTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MGLMapViewTests.m; path = ../../darwin/test/MGLMapViewTests.m; sourceTree = ""; }; - 07A019EB1ED662D800ACD43E /* MGLImageSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLImageSource.h; sourceTree = ""; }; - 07A019EC1ED662D800ACD43E /* MGLImageSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLImageSource.mm; sourceTree = ""; }; - 07A240921F67566F002C8210 /* MGLComputedShapeSourceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLComputedShapeSourceTests.m; sourceTree = ""; }; - 07BA4CAB1EE21887004528F5 /* MGLImageSourceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLImageSourceTests.m; sourceTree = ""; }; - 07D947471F6741F500E37934 /* MGLComputedShapeSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLComputedShapeSource_Private.h; sourceTree = ""; }; - 07F8E2F41F674C8000F794BB /* MGLComputedShapeSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLComputedShapeSource.h; sourceTree = ""; }; - 07F8E2F51F674C8000F794BB /* MGLComputedShapeSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLComputedShapeSource.mm; sourceTree = ""; }; - 170A82BE201BDD1B00943087 /* MGLHeatmapStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHeatmapStyleLayerTests.mm; sourceTree = ""; }; - 170A82C2201FAFF800943087 /* MGLHeatmapColorTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHeatmapColorTests.mm; sourceTree = ""; }; - 1753ED3F1E53CE5200A9FD90 /* MGLConversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLConversion.h; sourceTree = ""; }; - 1F2B94C2221E22E500210640 /* MGLNetworkConfiguration_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLNetworkConfiguration_Private.h; sourceTree = ""; }; - 1F7454A01ECFB00300021D39 /* MGLLight_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLight_Private.h; sourceTree = ""; }; - 1F7454A11ECFB00300021D39 /* MGLLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLight.h; sourceTree = ""; }; - 1F7454A21ECFB00300021D39 /* MGLLight.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLight.mm; sourceTree = ""; }; - 1F7454AA1ED1DDBD00021D39 /* MGLLightTest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLightTest.mm; sourceTree = ""; }; - 1F8A59F921653483004DFE75 /* sideload_sat.db */ = {isa = PBXFileReference; lastKnownFileType = file; name = sideload_sat.db; path = ../../../test/fixtures/offline_database/sideload_sat.db; sourceTree = ""; }; - 1F8A5A01216D4695004DFE75 /* MGLLoggingConfiguration_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLoggingConfiguration_Private.h; sourceTree = ""; }; - 1F8A5A03216D4696004DFE75 /* MGLLoggingConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLoggingConfiguration.h; sourceTree = ""; }; - 1F95931A1E6DE2B600D5B294 /* MGLNSDateAdditionsTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLNSDateAdditionsTests.mm; path = ../../darwin/test/MGLNSDateAdditionsTests.mm; sourceTree = ""; }; - 1F9EF4051FBA1B0D0063FBB0 /* mapbox_helmet.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = mapbox_helmet.pdf; sourceTree = ""; }; - 1FC481842098F323000D09B4 /* NSPredicate+MGLPrivateAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSPredicate+MGLPrivateAdditions.h"; sourceTree = ""; }; - 1FCCEC50222EF9FC00302E3B /* MGLSDKMetricsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLSDKMetricsManager.m; sourceTree = ""; }; - 1FCCEC51222EF9FD00302E3B /* MGLSDKMetricsManager_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSDKMetricsManager_Private.h; sourceTree = ""; }; - 1FCCEC52222EF9FE00302E3B /* MGLSDKMetricsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSDKMetricsManager.h; sourceTree = ""; }; - 1FDB00CC21F8F1FD00D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; - 1FDB00CD21F8F1FF00D21389 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; - 1FF4858B2237235200F19727 /* MGLAttributedExpression.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAttributedExpression.m; sourceTree = ""; }; - 1FF4858C2237235200F19727 /* MGLAttributedExpression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAttributedExpression.h; sourceTree = ""; }; - 3508EC621D749D39009B0EE4 /* NSExpression+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSExpression+MGLAdditions.h"; sourceTree = ""; }; - 3508EC631D749D39009B0EE4 /* NSExpression+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSExpression+MGLAdditions.mm"; sourceTree = ""; }; - 3526EABC1DF9B19800006B43 /* MGLCodingTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLCodingTests.mm; path = ../../darwin/test/MGLCodingTests.mm; sourceTree = ""; }; - 352742771D4C220900A1ECE6 /* MGLStyleValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleValue.h; sourceTree = ""; }; - 3527427F1D4C243B00A1ECE6 /* MGLSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSource.h; sourceTree = ""; }; - 352742801D4C243B00A1ECE6 /* MGLSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLSource.mm; sourceTree = ""; }; - 352742831D4C244700A1ECE6 /* MGLRasterTileSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterTileSource.h; sourceTree = ""; }; - 352742841D4C244700A1ECE6 /* MGLRasterTileSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRasterTileSource.mm; sourceTree = ""; }; - 352742871D4C245800A1ECE6 /* MGLShapeSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeSource.h; sourceTree = ""; }; - 352742881D4C245800A1ECE6 /* MGLShapeSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShapeSource.mm; sourceTree = ""; }; - 3527428B1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCircleStyleLayer.h; sourceTree = ""; }; - 3527428C1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLCircleStyleLayer.mm; sourceTree = ""; }; - 3527429E1D4C25BD00A1ECE6 /* MGLStyleValue.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLStyleValue.mm; sourceTree = ""; }; - 352903991D6C63B80002C7DF /* NSPredicate+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSPredicate+MGLAdditions.h"; sourceTree = ""; }; - 3529039A1D6C63B80002C7DF /* NSPredicate+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSPredicate+MGLAdditions.mm"; sourceTree = ""; }; - 3537CA731D3F93A600380318 /* MGLStyle_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyle_Private.h; sourceTree = ""; }; - 3538AA211D542685008EC33D /* MGLStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleLayer.h; sourceTree = ""; }; - 3538AA221D542685008EC33D /* MGLStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLStyleLayer.mm; sourceTree = ""; }; - 355BA4EB1D41633E00CCC6D5 /* NSColor+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSColor+MGLAdditions.h"; sourceTree = ""; }; - 355BA4EC1D41633E00CCC6D5 /* NSColor+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSColor+MGLAdditions.mm"; sourceTree = ""; }; - 35602BF81D3EA99F0050646F /* MGLFillStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillStyleLayer.h; sourceTree = ""; }; - 35602BF91D3EA99F0050646F /* MGLFillStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFillStyleLayer.mm; sourceTree = ""; }; - 35602BFC1D3EA9B40050646F /* MGLStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleLayer_Private.h; sourceTree = ""; }; - 35602BFD1D3EA9B40050646F /* MGLForegroundStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLForegroundStyleLayer.h; sourceTree = ""; }; - 35602BFE1D3EA9B40050646F /* MGLForegroundStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLForegroundStyleLayer.mm; sourceTree = ""; }; - 358EB3AE1D61F0DB00E46D9C /* amsterdam.geojson */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = amsterdam.geojson; path = ../../darwin/test/amsterdam.geojson; sourceTree = ""; }; - 359819571E02F611008FC139 /* NSCoder+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSCoder+MGLAdditions.h"; sourceTree = ""; }; - 359819581E02F611008FC139 /* NSCoder+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSCoder+MGLAdditions.mm"; sourceTree = ""; }; - 35C5D8431D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSComparisonPredicate+MGLAdditions.h"; sourceTree = ""; }; - 35C5D8441D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSComparisonPredicate+MGLAdditions.mm"; sourceTree = ""; }; - 35C5D8451D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSCompoundPredicate+MGLAdditions.h"; sourceTree = ""; }; - 35C5D8461D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSCompoundPredicate+MGLAdditions.mm"; sourceTree = ""; }; - 35C5D84B1D6DD75B00E95907 /* MGLPredicateTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLPredicateTests.mm; path = ../../darwin/test/MGLPredicateTests.mm; sourceTree = ""; }; - 35C6DF821E214C0400ACA483 /* MGLDistanceFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLDistanceFormatter.h; sourceTree = ""; }; - 35C6DF831E214C0400ACA483 /* MGLDistanceFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLDistanceFormatter.m; sourceTree = ""; }; - 35C6DF861E214C1800ACA483 /* MGLDistanceFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLDistanceFormatterTests.m; path = ../../darwin/test/MGLDistanceFormatterTests.m; sourceTree = ""; }; - 35D65C581D65AD5500722C23 /* NSDate+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate+MGLAdditions.h"; sourceTree = ""; }; - 35D65C591D65AD5500722C23 /* NSDate+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSDate+MGLAdditions.mm"; sourceTree = ""; }; - 3E6465D7206576A800685536 /* LimeGreenStyleLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = LimeGreenStyleLayer.m; path = ../../darwin/app/LimeGreenStyleLayer.m; sourceTree = ""; }; - 3E6465D8206576A900685536 /* LimeGreenStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LimeGreenStyleLayer.h; path = ../../darwin/app/LimeGreenStyleLayer.h; sourceTree = ""; }; - 3EA9369A4C46957566058822 /* MGLRendererConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRendererConfiguration.h; sourceTree = ""; }; - 3EA93B1B0864609938506E12 /* MGLRendererConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRendererConfiguration.mm; sourceTree = ""; }; - 4031ACFB1E9EB3C100A3EA26 /* MGLMapViewDelegateIntegrationTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MGLMapViewDelegateIntegrationTests.swift; sourceTree = ""; }; - 4031AD011E9FD6A300A3EA26 /* MGLSDKTestHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MGLSDKTestHelpers.swift; path = ../../darwin/test/MGLSDKTestHelpers.swift; sourceTree = ""; }; - 4049C2A11DB6CE7800B3F799 /* MGLPointCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPointCollection.h; sourceTree = ""; }; - 4049C2A71DB6D09B00B3F799 /* MGLPointCollection.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLPointCollection.mm; sourceTree = ""; }; - 405C03961DB0004E001AC280 /* NSImage+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSImage+MGLAdditions.h"; sourceTree = ""; }; - 405C03971DB0004E001AC280 /* NSImage+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSImage+MGLAdditions.mm"; sourceTree = ""; }; - 408AA85A1DAEECF100022900 /* MGLShape_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShape_Private.h; sourceTree = ""; }; - 408AA85E1DAEED3300022900 /* NSDictionary+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSDictionary+MGLAdditions.mm"; sourceTree = ""; }; - 408AA85F1DAEED3300022900 /* NSDictionary+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+MGLAdditions.h"; sourceTree = ""; }; - 40B77E421DB11BB0003DA2FE /* NSArray+MGLAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSArray+MGLAdditions.mm"; sourceTree = ""; }; - 40B77E431DB11BB0003DA2FE /* NSArray+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MGLAdditions.h"; sourceTree = ""; }; - 40E1601A1DF216E6005EA6D9 /* MGLStyleLayerTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleLayerTests.h; sourceTree = ""; }; - 40E1601B1DF216E6005EA6D9 /* MGLStyleLayerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLStyleLayerTests.m; sourceTree = ""; }; - 52BECB091CC5A26F009CD791 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - 5548BE7B1D0ACBBD005DDE81 /* libmbgl-loop-darwin.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libmbgl-loop-darwin.a"; path = "cmake/Debug/libmbgl-loop-darwin.a"; sourceTree = ""; }; - 556660C51E1BEA0100E2C41B /* MGLFoundation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLFoundation.h; sourceTree = ""; }; - 556660D51E1D07E400E2C41B /* MGLVersionNumber.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MGLVersionNumber.m; path = ../../darwin/test/MGLVersionNumber.m; sourceTree = ""; }; - 558DE7A41E56161C00C7916D /* MGLFoundation_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFoundation_Private.h; sourceTree = ""; }; - 558DE7A51E56161C00C7916D /* MGLFoundation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFoundation.mm; sourceTree = ""; }; - 5591AC682298361600FF9ADF /* MGLMapView+Impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MGLMapView+Impl.h"; sourceTree = ""; }; - 5591AC692298361600FF9ADF /* MGLMapView+Impl.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "MGLMapView+Impl.mm"; sourceTree = ""; }; - 55CAF6312294407F00F17770 /* MGLMapView+OpenGL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MGLMapView+OpenGL.h"; sourceTree = ""; }; - 55CAF6332294409B00F17770 /* MGLMapView+OpenGL.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "MGLMapView+OpenGL.mm"; sourceTree = ""; }; - 55CF7532213EDADF00ED86C4 /* libmbgl-vendor-icu.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-vendor-icu.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 55D120A41F7906E6004B6D81 /* libmbgl-filesource.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libmbgl-filesource.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 55D9B4B01D005D3900C1CCE2 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - 55E2AD101E5B0A6900E8C587 /* MGLOfflineStorageTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLOfflineStorageTests.mm; path = ../../darwin/test/MGLOfflineStorageTests.mm; sourceTree = ""; }; - 55FE0E8D1D100A0900FD240B /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = config.xcconfig; path = ../../build/macos/config.xcconfig; sourceTree = ""; }; - 747ABE54219B2BDA00523B67 /* MGLFillExtrusionStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillExtrusionStyleLayer_Private.h; sourceTree = ""; }; - 747ABE55219B2BDA00523B67 /* MGLCircleStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCircleStyleLayer_Private.h; sourceTree = ""; }; - 747ABE56219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLBackgroundStyleLayer_Private.h; sourceTree = ""; }; - 747ABE57219B2BDB00523B67 /* MGLFillStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillStyleLayer_Private.h; sourceTree = ""; }; - 747ABE58219B2BDB00523B67 /* MGLHeatmapStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLHeatmapStyleLayer_Private.h; sourceTree = ""; }; - 747ABE5E219B2BED00523B67 /* MGLHillshadeStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLHillshadeStyleLayer_Private.h; sourceTree = ""; }; - 747ABE60219B2C0000523B67 /* MGLLineStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLineStyleLayer_Private.h; sourceTree = ""; }; - 747ABE62219B2C1700523B67 /* MGLOpenGLStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOpenGLStyleLayer_Private.h; sourceTree = ""; }; - 747ABE63219B2C1700523B67 /* MGLRasterStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterStyleLayer_Private.h; sourceTree = ""; }; - 747ABE66219B2C3200523B67 /* MGLSymbolStyleLayer_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSymbolStyleLayer_Private.h; sourceTree = ""; }; - 749EC88F2199CCB8005608D7 /* MGLStyleLayerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleLayerManager.h; sourceTree = ""; }; - 749EC8902199CCB9005608D7 /* MGLStyleLayerManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLStyleLayerManager.mm; sourceTree = ""; }; - 89462398200D199100DA8EF2 /* heatmap.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = heatmap.json; sourceTree = ""; }; - 8946239A200E73CA00DA8EF2 /* MGLHeatmapStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLHeatmapStyleLayer.h; sourceTree = ""; }; - 8946239B200E73CA00DA8EF2 /* MGLHeatmapStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHeatmapStyleLayer.mm; sourceTree = ""; }; - 92092EEE1F5EB10E00AF5130 /* MGLMapSnapshotter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapSnapshotter.h; sourceTree = ""; }; - 92092EEF1F5EB10E00AF5130 /* MGLMapSnapshotter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapSnapshotter.mm; sourceTree = ""; }; - 920A3E581E6F859D00C16EFC /* MGLSourceQueryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLSourceQueryTests.m; sourceTree = ""; }; - 9221BAAE20699CBA0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTilePyramidOfflineRegion_Private.h; sourceTree = ""; }; - 9250B8C22073C69000EF338C /* MGLShapeOfflineRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeOfflineRegion.h; sourceTree = ""; }; - 92F2C3EA1F0E3A1900268EC0 /* MGLRendererFrontend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRendererFrontend.h; sourceTree = ""; }; - 92FC0AE3207CC8DA007B6B54 /* MGLShapeOfflineRegion_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeOfflineRegion_Private.h; sourceTree = ""; }; - 92FC0AE5207CDD8D007B6B54 /* MGLShapeOfflineRegion.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShapeOfflineRegion.mm; sourceTree = ""; }; - 9654C12A1FFC38E000DB6A19 /* MGLPolyline_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPolyline_Private.h; sourceTree = ""; }; - 9654C12C1FFC394700DB6A19 /* MGLPolygon_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPolygon_Private.h; sourceTree = ""; }; - 966091701E5BBFF700A9A03B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - 966091711E5BBFF900A9A03B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - 966091721E5BBFFA00A9A03B /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = ""; }; - 966091731E5BBFFA00A9A03B /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Localizable.strings; sourceTree = ""; }; - 96E027321E57C9A7004B8E66 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; - 96E027341E57C9A9004B8E66 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - 96E027351E57C9AB004B8E66 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; - 96E027361E57C9AC004B8E66 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - 96E027371E57C9B5004B8E66 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - 96E027381E57C9B7004B8E66 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - 96E027391E57C9B9004B8E66 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - 96E0273A1E57C9BB004B8E66 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - 96E0273B1E57C9BC004B8E66 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - CA0B3C042329F7E600E4B493 /* MGLTestAssertionHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MGLTestAssertionHandler.h; path = ../../darwin/test/MGLTestAssertionHandler.h; sourceTree = ""; }; - CA0B3C052329F7E600E4B493 /* MGLTestAssertionHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLTestAssertionHandler.m; path = ../../darwin/test/MGLTestAssertionHandler.m; sourceTree = ""; }; - CA0B3C082329FB4800E4B493 /* MGLOfflinePackTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLOfflinePackTests.mm; path = ../../darwin/test/MGLOfflinePackTests.mm; sourceTree = ""; }; - CA4045C4216720D700B356E1 /* MGLCluster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCluster.h; sourceTree = ""; }; - CA8FBC0C21A4A74300D1203C /* MGLRendererConfigurationTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLRendererConfigurationTests.mm; path = ../../darwin/test/MGLRendererConfigurationTests.mm; sourceTree = ""; }; - CA9461A520884CCB0015EB12 /* MGLAnnotationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLAnnotationTests.m; path = test/MGLAnnotationTests.m; sourceTree = SOURCE_ROOT; }; - CAD9D0AB22A88A32001B25EE /* MGLResourceTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLResourceTests.mm; path = ../../darwin/test/MGLResourceTests.mm; sourceTree = ""; }; - CF762DEE22DC7EFF00338472 /* MGLLoggingConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLoggingConfiguration.mm; sourceTree = ""; }; - CFF9F98B23A2505700B0DE92 /* MGLNetworkIntegrationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLNetworkIntegrationManager.m; path = ../../darwin/src/MGLNetworkIntegrationManager.m; sourceTree = ""; }; - CFF9F98C23A2505700B0DE92 /* MGLNetworkIntegrationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MGLNetworkIntegrationManager.h; path = ../../darwin/src/MGLNetworkIntegrationManager.h; sourceTree = ""; }; - DA00FC881D5EEAC3009AABC8 /* MGLAttributionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAttributionInfo.h; sourceTree = ""; }; - DA00FC891D5EEAC3009AABC8 /* MGLAttributionInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLAttributionInfo.mm; sourceTree = ""; }; - DA0CD58D1CF56F5800A5F5A5 /* MGLFeatureTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLFeatureTests.mm; path = ../../darwin/test/MGLFeatureTests.mm; sourceTree = ""; }; - DA1AC01E1E5B8826006DF1D6 /* lt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Localizable.strings; sourceTree = ""; }; - DA1AC01F1E5B8904006DF1D6 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = uk; path = uk.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA2207BA1DC076930002F84D /* test-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "test-Bridging-Header.h"; sourceTree = ""; }; - DA2784FD1DF03060001D5B8D /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Media.xcassets; path = ../../darwin/test/Media.xcassets; sourceTree = ""; }; - DA2987591E1A4290002299F5 /* MGLDocumentationExampleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MGLDocumentationExampleTests.swift; path = ../../darwin/test/MGLDocumentationExampleTests.swift; sourceTree = ""; }; - DA3389601FA3EAC4001EA329 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Foundation.strings"; sourceTree = ""; }; - DA3389611FA3EDCE001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; - DA3389621FA3EDEF001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Foundation.strings; sourceTree = ""; }; - DA3389631FA3EDF5001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = bg; path = bg.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA3389641FA3EE00001EA329 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; - DA33896C1FA3EF51001EA329 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = hu; path = hu.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA35A2A31CC9EB1A00E826B2 /* MGLCoordinateFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCoordinateFormatter.h; sourceTree = ""; }; - DA35A2A51CC9EB2700E826B2 /* MGLCoordinateFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLCoordinateFormatter.m; sourceTree = ""; }; - DA35A2A71CC9F41600E826B2 /* MGLCoordinateFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLCoordinateFormatterTests.m; path = ../../darwin/test/MGLCoordinateFormatterTests.m; sourceTree = ""; }; - DA35A2AB1CCA091800E826B2 /* MGLCompassDirectionFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCompassDirectionFormatter.h; sourceTree = ""; }; - DA35A2AC1CCA091800E826B2 /* MGLCompassDirectionFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLCompassDirectionFormatter.m; sourceTree = ""; }; - DA35A2B51CCA14D700E826B2 /* MGLCompassDirectionFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLCompassDirectionFormatterTests.m; path = ../../darwin/test/MGLCompassDirectionFormatterTests.m; sourceTree = ""; }; - DA35A2BD1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLClockDirectionFormatter.h; sourceTree = ""; }; - DA35A2BE1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLClockDirectionFormatter.m; sourceTree = ""; }; - DA35A2C11CCA9F4A00E826B2 /* MGLClockDirectionFormatterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLClockDirectionFormatterTests.m; path = ../../darwin/test/MGLClockDirectionFormatterTests.m; sourceTree = ""; }; - DA35A2CD1CCAAED300E826B2 /* NSValue+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSValue+MGLAdditions.h"; sourceTree = ""; }; - DA35A2CE1CCAAED300E826B2 /* NSValue+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSValue+MGLAdditions.m"; sourceTree = ""; }; - DA35D0891E1A631B007DED41 /* one-liner.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "one-liner.json"; path = "../../darwin/test/one-liner.json"; sourceTree = ""; }; - DA551B7F1DB496AC0009AFAF /* MGLTileSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTileSource.h; sourceTree = ""; }; - DA551B801DB496AC0009AFAF /* MGLTileSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTileSource_Private.h; sourceTree = ""; }; - DA551B811DB496AC0009AFAF /* MGLTileSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLTileSource.mm; sourceTree = ""; }; - DA5589761D320C41006B7F64 /* wms.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = wms.json; sourceTree = ""; }; - DA57D4B01EBC699800793288 /* MGLDocumentationGuideTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MGLDocumentationGuideTests.swift; path = ../../darwin/test/MGLDocumentationGuideTests.swift; sourceTree = ""; }; - DA6023EF1E4CE8E500DBFF23 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Foundation.strings; sourceTree = ""; }; - DA6023F01E4CE8FF00DBFF23 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = sv; path = sv.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA618B131E68850300CB7F44 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - DA618B141E68852C00CB7F44 /* ru */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - DA618B151E6886DF00CB7F44 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ca; path = ca.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA618B161E6886E000CB7F44 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; - DA618B171E68876C00CB7F44 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Foundation.strings; sourceTree = ""; }; - DA618B181E6887C600CB7F44 /* ca */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; - DA618B231E6891ED00CB7F44 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Foundation.strings; sourceTree = ""; }; - DA618B241E6891F300CB7F44 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = lt; path = lt.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA618B271E68926E00CB7F44 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - DA618B2A1E6892B500CB7F44 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - DA6408D51DA4E5DA00908C90 /* MGLVectorStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLVectorStyleLayer.h; sourceTree = ""; }; - DA6408D61DA4E5DA00908C90 /* MGLVectorStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLVectorStyleLayer.mm; sourceTree = ""; }; - DA695423215B1E6C002041A4 /* MGLMapCameraTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MGLMapCameraTests.m; path = ../../darwin/test/MGLMapCameraTests.m; sourceTree = ""; }; - DA704CBA1F6372E8004B3F28 /* ru */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Foundation.strings; sourceTree = ""; }; - DA704CBE1F637531004B3F28 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = ""; }; - DA704CBF1F637548004B3F28 /* hu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = ""; }; - DA704CC61F666385004B3F28 /* uk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Foundation.strings; sourceTree = ""; }; - DA7262051DEEDD460043BB89 /* MGLOpenGLStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOpenGLStyleLayer.h; sourceTree = ""; }; - DA7262061DEEDD460043BB89 /* MGLOpenGLStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLOpenGLStyleLayer.mm; sourceTree = ""; }; - DA737ADE1E5914AD00AD2CDE /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = es; path = es.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA737ADF1E5914D300AD2CDE /* es */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - DA737AE31E5915A500AD2CDE /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = pl; path = pl.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA737AE41E5915B000AD2CDE /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - DA737AEC1E59180E00AD2CDE /* uk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = ""; }; - DA7DC9801DED5F5C0027472F /* MGLVectorTileSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLVectorTileSource_Private.h; sourceTree = ""; }; - DA7DC9821DED647F0027472F /* MGLRasterTileSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterTileSource_Private.h; sourceTree = ""; }; - DA80E95D1FE84A300065FC9B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; - DA80E95F1FE84A540065FC9B /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ar; path = ar.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA839E921CC2E3400062CAFB /* Mapbox GL.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Mapbox GL.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - DA839E951CC2E3400062CAFB /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - DA839E961CC2E3400062CAFB /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - DA839E991CC2E3400062CAFB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - DA839E9B1CC2E3400062CAFB /* MapDocument.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MapDocument.h; sourceTree = ""; }; - DA839E9C1CC2E3400062CAFB /* MapDocument.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MapDocument.m; sourceTree = ""; }; - DA839E9F1CC2E3400062CAFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MapDocument.xib; sourceTree = ""; }; - DA839EA11CC2E3400062CAFB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - DA839EA41CC2E3400062CAFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; - DA839EA61CC2E3400062CAFB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DA87A9961DC9D88400810D09 /* MGLShapeSourceTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShapeSourceTests.mm; sourceTree = ""; }; - DA87A9971DC9D88400810D09 /* MGLTileSetTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLTileSetTests.mm; sourceTree = ""; }; - DA87A99B1DC9D8DD00810D09 /* MGLShapeSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeSource_Private.h; sourceTree = ""; }; - DA87A99F1DC9DC6200810D09 /* MGLValueEvaluator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLValueEvaluator.h; sourceTree = ""; }; - DA88520F1E0A4D0D009D7AD6 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - DA8852101E0A4D3A009D7AD6 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Foundation.strings"; sourceTree = ""; }; - DA8933A61CCD287300E68420 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MGLAnnotationCallout.xib; sourceTree = ""; }; - DA8933AC1CCD290700E68420 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; - DA8933B41CCD2C2500E68420 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Foundation.strings; sourceTree = ""; }; - DA8933B71CCD2C2D00E68420 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Foundation.stringsdict; sourceTree = ""; }; - DA8F25741D51C5F40010E6B5 /* MGLFillStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFillStyleLayerTests.mm; sourceTree = ""; }; - DA8F25751D51C5F40010E6B5 /* MGLRasterStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRasterStyleLayerTests.mm; sourceTree = ""; }; - DA8F25761D51C5F40010E6B5 /* MGLSymbolStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLSymbolStyleLayerTests.mm; sourceTree = ""; }; - DA8F25771D51C5F40010E6B5 /* MGLLineStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLineStyleLayerTests.mm; sourceTree = ""; }; - DA8F25781D51C5F40010E6B5 /* MGLCircleStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLCircleStyleLayerTests.mm; sourceTree = ""; }; - DA8F25791D51C5F40010E6B5 /* MGLBackgroundStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLBackgroundStyleLayerTests.mm; sourceTree = ""; }; - DA8F25851D51C9E10010E6B5 /* MGLBackgroundStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLBackgroundStyleLayer.h; sourceTree = ""; }; - DA8F25861D51C9E10010E6B5 /* MGLBackgroundStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLBackgroundStyleLayer.mm; sourceTree = ""; }; - DA8F25891D51CA540010E6B5 /* MGLLineStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLLineStyleLayer.h; sourceTree = ""; }; - DA8F258A1D51CA540010E6B5 /* MGLLineStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLLineStyleLayer.mm; sourceTree = ""; }; - DA8F258D1D51CA600010E6B5 /* MGLRasterStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLRasterStyleLayer.h; sourceTree = ""; }; - DA8F258E1D51CA600010E6B5 /* MGLRasterStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRasterStyleLayer.mm; sourceTree = ""; }; - DA8F25911D51CA750010E6B5 /* MGLSymbolStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSymbolStyleLayer.h; sourceTree = ""; }; - DA8F25921D51CA750010E6B5 /* MGLSymbolStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLSymbolStyleLayer.mm; sourceTree = ""; }; - DA8F25951D51CAC70010E6B5 /* MGLVectorTileSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLVectorTileSource.h; sourceTree = ""; }; - DA8F25961D51CAC70010E6B5 /* MGLVectorTileSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLVectorTileSource.mm; sourceTree = ""; }; - DA8F25991D51CAD00010E6B5 /* MGLSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLSource_Private.h; sourceTree = ""; }; - DA8F259B1D51CB000010E6B5 /* MGLStyleValue_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyleValue_Private.h; sourceTree = ""; }; - DA8F25A61D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSValue+MGLStyleAttributeAdditions.h"; sourceTree = ""; }; - DA8F25A71D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSValue+MGLStyleAttributeAdditions.mm"; sourceTree = ""; }; - DA8F25B51D51D2240010E6B5 /* MGLStyleLayerTests.mm.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; name = MGLStyleLayerTests.mm.ejs; path = ../test/MGLStyleLayerTests.mm.ejs; sourceTree = ""; }; - DA8F25B61D51D2240010E6B5 /* MGLStyleLayer.h.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; path = MGLStyleLayer.h.ejs; sourceTree = ""; }; - DA8F25B71D51D2240010E6B5 /* MGLStyleLayer.mm.ejs */ = {isa = PBXFileReference; lastKnownFileType = text; path = MGLStyleLayer.mm.ejs; sourceTree = ""; }; - DA934097208562590059919A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; - DA934098208562870059919A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-PT"; path = "pt-PT.lproj/Foundation.stringsdict"; sourceTree = ""; }; - DA9340992085629E0059919A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; - DA9340A0208565870059919A /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; - DA9C01301E4C7B9300C4742A /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-BR"; path = "pt-BR.lproj/Foundation.stringsdict"; sourceTree = ""; }; - DA9C01311E4C7B9F00C4742A /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - DAA32CA61E4C4849006F8D24 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - DAA32CA71E4C486D006F8D24 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Foundation.strings; sourceTree = ""; }; - DAA32CA81E4C48B9006F8D24 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = de; path = de.lproj/Foundation.stringsdict; sourceTree = ""; }; - DAA32CAE1E4C4B03006F8D24 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = fr; path = fr.lproj/Foundation.stringsdict; sourceTree = ""; }; - DAA32CAF1E4C4B0D006F8D24 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - DAA32CB21E4C4CB7006F8D24 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Foundation.strings; sourceTree = ""; }; - DAA32CB31E4C4CC3006F8D24 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - DAA32CBA1E4C4F10006F8D24 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - DAA32CC01E4C4F89006F8D24 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Foundation.strings; sourceTree = ""; }; - DAA32CC11E4C4F93006F8D24 /* vi */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - DAA48EFB1D6A4731006A7E36 /* StyleLayerIconTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleLayerIconTransformer.h; sourceTree = ""; }; - DAA48EFC1D6A4731006A7E36 /* StyleLayerIconTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StyleLayerIconTransformer.m; sourceTree = ""; }; - DAA998F91E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFillExtrusionStyleLayer.h; sourceTree = ""; }; - DAA998FA1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFillExtrusionStyleLayer.mm; sourceTree = ""; }; - DAA999001E9F5EC5002E6EA6 /* MGLFillExtrusionStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFillExtrusionStyleLayerTests.mm; sourceTree = ""; }; - DAC25FC9200FD5E2009BE98E /* NSExpression+MGLPrivateAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSExpression+MGLPrivateAdditions.h"; sourceTree = ""; }; - DAC2ABC41CC6D343006D18C4 /* MGLAnnotationImage_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationImage_Private.h; sourceTree = ""; }; - DACA8620201920BE00E9693A /* MGLRasterDEMSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLRasterDEMSource.h; sourceTree = ""; }; - DACA8621201920BE00E9693A /* MGLRasterDEMSource.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLRasterDEMSource.mm; sourceTree = ""; }; - DACB0C371E18DFFD005DDBEA /* MGLStyle+MBXAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MGLStyle+MBXAdditions.h"; sourceTree = ""; }; - DACB0C381E18DFFD005DDBEA /* MGLStyle+MBXAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MGLStyle+MBXAdditions.m"; sourceTree = ""; }; - DACBC6082011885800C4D7E2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - DACBC6092011888C00C4D7E2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Foundation.strings; sourceTree = ""; }; - DACBC60A2011889E00C4D7E2 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - DACC22121CF3D3E200D220D9 /* MGLFeature.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFeature.h; sourceTree = ""; }; - DACC22131CF3D3E200D220D9 /* MGLFeature.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLFeature.mm; sourceTree = ""; }; - DACC22171CF3D4F700D220D9 /* MGLFeature_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLFeature_Private.h; sourceTree = ""; }; - DACCD9C71F1F443B00BB09A1 /* fr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Foundation.strings; sourceTree = ""; }; - DACFE7971F66EA0C00630DA8 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = vi; path = vi.lproj/Foundation.stringsdict; sourceTree = ""; }; - DAD165721CF4CD7A001FF4B9 /* MGLShapeCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShapeCollection.h; sourceTree = ""; }; - DAD165731CF4CD7A001FF4B9 /* MGLShapeCollection.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShapeCollection.mm; sourceTree = ""; }; - DAD88E03202ACF5900AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - DAD88E04202ACF7C00AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Foundation.strings; sourceTree = ""; }; - DAD88E05202ACF8200AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = da; path = da.lproj/Foundation.stringsdict; sourceTree = ""; }; - DAD88E06202ACF9200AAA536 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - DAE6C2E11CC304F900DB3429 /* Credits.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; }; - DAE6C2E31CC3050F00DB3429 /* DroppedPinAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DroppedPinAnnotation.h; sourceTree = ""; }; - DAE6C2E41CC3050F00DB3429 /* DroppedPinAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DroppedPinAnnotation.m; sourceTree = ""; }; - DAE6C2E51CC3050F00DB3429 /* LocationCoordinate2DTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocationCoordinate2DTransformer.h; sourceTree = ""; }; - DAE6C2E61CC3050F00DB3429 /* LocationCoordinate2DTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocationCoordinate2DTransformer.m; sourceTree = ""; }; - DAE6C2E91CC3050F00DB3429 /* OfflinePackNameValueTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OfflinePackNameValueTransformer.h; sourceTree = ""; }; - DAE6C2EA1CC3050F00DB3429 /* OfflinePackNameValueTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OfflinePackNameValueTransformer.m; sourceTree = ""; }; - DAE6C2EB1CC3050F00DB3429 /* TimeIntervalTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimeIntervalTransformer.h; sourceTree = ""; }; - DAE6C2EC1CC3050F00DB3429 /* TimeIntervalTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TimeIntervalTransformer.m; sourceTree = ""; }; - DAE6C3281CC30DB200DB3429 /* Mapbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Mapbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DAE6C32C1CC30DB200DB3429 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DAE6C3311CC30DB200DB3429 /* test.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = test.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - DAE6C33A1CC30DB200DB3429 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DAE6C3451CC31D1200DB3429 /* libmbgl-core.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libmbgl-core.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - DAE6C3461CC31D1200DB3429 /* libmbgl-platform-macos.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libmbgl-platform-macos.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - DAE6C34A1CC31E0400DB3429 /* MGLAccountManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAccountManager.h; sourceTree = ""; }; - DAE6C34B1CC31E0400DB3429 /* MGLAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotation.h; sourceTree = ""; }; - DAE6C34C1CC31E0400DB3429 /* MGLGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLGeometry.h; sourceTree = ""; }; - DAE6C34D1CC31E0400DB3429 /* MGLMapCamera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapCamera.h; sourceTree = ""; }; - DAE6C34E1CC31E0400DB3429 /* MGLMultiPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMultiPoint.h; sourceTree = ""; }; - DAE6C34F1CC31E0400DB3429 /* MGLOfflinePack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflinePack.h; sourceTree = ""; }; - DAE6C3501CC31E0400DB3429 /* MGLOfflineRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflineRegion.h; sourceTree = ""; }; - DAE6C3511CC31E0400DB3429 /* MGLOfflineStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflineStorage.h; sourceTree = ""; }; - DAE6C3521CC31E0400DB3429 /* MGLOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOverlay.h; sourceTree = ""; }; - DAE6C3531CC31E0400DB3429 /* MGLPointAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPointAnnotation.h; sourceTree = ""; }; - DAE6C3541CC31E0400DB3429 /* MGLPolygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPolygon.h; sourceTree = ""; }; - DAE6C3551CC31E0400DB3429 /* MGLPolyline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPolyline.h; sourceTree = ""; }; - DAE6C3561CC31E0400DB3429 /* MGLShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLShape.h; sourceTree = ""; }; - DAE6C3571CC31E0400DB3429 /* MGLStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLStyle.h; sourceTree = ""; }; - DAE6C3581CC31E0400DB3429 /* MGLTilePyramidOfflineRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTilePyramidOfflineRegion.h; sourceTree = ""; }; - DAE6C3591CC31E0400DB3429 /* MGLTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLTypes.h; sourceTree = ""; }; - DAE6C36A1CC31E2A00DB3429 /* MGLAccountManager_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAccountManager_Private.h; sourceTree = ""; }; - DAE6C36B1CC31E2A00DB3429 /* MGLAccountManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAccountManager.m; sourceTree = ""; }; - DAE6C36C1CC31E2A00DB3429 /* MGLGeometry_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLGeometry_Private.h; sourceTree = ""; }; - DAE6C36D1CC31E2A00DB3429 /* MGLGeometry.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLGeometry.mm; sourceTree = ""; }; - DAE6C36E1CC31E2A00DB3429 /* MGLMapCamera.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapCamera.mm; sourceTree = ""; }; - DAE6C36F1CC31E2A00DB3429 /* MGLMultiPoint_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMultiPoint_Private.h; sourceTree = ""; }; - DAE6C3701CC31E2A00DB3429 /* MGLMultiPoint.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMultiPoint.mm; sourceTree = ""; }; - DAE6C3711CC31E2A00DB3429 /* MGLOfflinePack_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflinePack_Private.h; sourceTree = ""; }; - DAE6C3721CC31E2A00DB3429 /* MGLOfflinePack.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLOfflinePack.mm; sourceTree = ""; }; - DAE6C3731CC31E2A00DB3429 /* MGLOfflineRegion_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflineRegion_Private.h; sourceTree = ""; }; - DAE6C3741CC31E2A00DB3429 /* MGLOfflineStorage_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOfflineStorage_Private.h; sourceTree = ""; }; - DAE6C3751CC31E2A00DB3429 /* MGLOfflineStorage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLOfflineStorage.mm; sourceTree = ""; }; - DAE6C3761CC31E2A00DB3429 /* MGLPointAnnotation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLPointAnnotation.mm; sourceTree = ""; }; - DAE6C3771CC31E2A00DB3429 /* MGLPolygon.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLPolygon.mm; sourceTree = ""; }; - DAE6C3781CC31E2A00DB3429 /* MGLPolyline.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLPolyline.mm; sourceTree = ""; }; - DAE6C3791CC31E2A00DB3429 /* MGLShape.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLShape.mm; sourceTree = ""; }; - DAE6C37A1CC31E2A00DB3429 /* MGLStyle.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLStyle.mm; sourceTree = ""; }; - DAE6C37B1CC31E2A00DB3429 /* MGLTilePyramidOfflineRegion.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLTilePyramidOfflineRegion.mm; sourceTree = ""; }; - DAE6C37C1CC31E2A00DB3429 /* MGLTypes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLTypes.m; sourceTree = ""; }; - DAE6C37D1CC31E2A00DB3429 /* NSBundle+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+MGLAdditions.h"; sourceTree = ""; }; - DAE6C37E1CC31E2A00DB3429 /* NSBundle+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+MGLAdditions.m"; sourceTree = ""; }; - DAE6C37F1CC31E2A00DB3429 /* NSException+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSException+MGLAdditions.h"; sourceTree = ""; }; - DAE6C3801CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSProcessInfo+MGLAdditions.h"; sourceTree = ""; }; - DAE6C3811CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSProcessInfo+MGLAdditions.m"; sourceTree = ""; }; - DAE6C3821CC31E2A00DB3429 /* NSString+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MGLAdditions.h"; sourceTree = ""; }; - DAE6C3831CC31E2A00DB3429 /* NSString+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MGLAdditions.m"; sourceTree = ""; }; - DAE6C39F1CC31E9400DB3429 /* MGLAnnotationImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAnnotationImage.h; sourceTree = ""; }; - DAE6C3A01CC31E9400DB3429 /* MGLMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapView.h; sourceTree = ""; }; - DAE6C3A11CC31E9400DB3429 /* MGLMapView+IBAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MGLMapView+IBAdditions.h"; sourceTree = ""; }; - DAE6C3A21CC31E9400DB3429 /* MGLMapViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapViewDelegate.h; sourceTree = ""; }; - DAE6C3A71CC31EF300DB3429 /* MGLAnnotationImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAnnotationImage.m; sourceTree = ""; }; - DAE6C3A81CC31EF300DB3429 /* MGLAttributionButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAttributionButton.h; sourceTree = ""; }; - DAE6C3A91CC31EF300DB3429 /* MGLAttributionButton.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLAttributionButton.mm; sourceTree = ""; }; - DAE6C3AA1CC31EF300DB3429 /* MGLCompassCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLCompassCell.h; sourceTree = ""; }; - DAE6C3AB1CC31EF300DB3429 /* MGLCompassCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLCompassCell.m; sourceTree = ""; }; - DAE6C3AC1CC31EF300DB3429 /* MGLMapView_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLMapView_Private.h; sourceTree = ""; }; - DAE6C3AD1CC31EF300DB3429 /* MGLMapView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLMapView.mm; sourceTree = ""; }; - DAE6C3AE1CC31EF300DB3429 /* MGLMapView+IBAdditions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "MGLMapView+IBAdditions.mm"; sourceTree = ""; }; - DAE6C3AF1CC31EF300DB3429 /* MGLOpenGLLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLOpenGLLayer.h; sourceTree = ""; }; - DAE6C3B01CC31EF300DB3429 /* MGLOpenGLLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLOpenGLLayer.mm; sourceTree = ""; }; - DAE6C3BB1CC31F2E00DB3429 /* default_marker.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = default_marker.pdf; sourceTree = ""; }; - DAE6C3BC1CC31F2E00DB3429 /* mapbox.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = mapbox.pdf; sourceTree = ""; }; - DAE6C3C11CC31F4500DB3429 /* Mapbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Mapbox.h; path = src/Mapbox.h; sourceTree = SOURCE_ROOT; }; - DAE6C3C61CC3499100DB3429 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; - DAE6C3C81CC34BD800DB3429 /* MGLGeometryTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLGeometryTests.mm; path = ../../darwin/test/MGLGeometryTests.mm; sourceTree = ""; }; - DAE6C3CA1CC34BD800DB3429 /* MGLOfflineRegionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLOfflineRegionTests.m; path = ../../darwin/test/MGLOfflineRegionTests.m; sourceTree = ""; }; - DAE6C3CC1CC34BD800DB3429 /* MGLStyleTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLStyleTests.mm; path = ../../darwin/test/MGLStyleTests.mm; sourceTree = ""; }; - DAE7DEC31E24549F007505A6 /* MGLNSStringAdditionsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLNSStringAdditionsTests.m; path = ../../darwin/test/MGLNSStringAdditionsTests.m; sourceTree = ""; }; - DAE8CCAA1E6E8605009B5CB0 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Foundation.stringsdict; sourceTree = ""; }; - DAE8CCAB1E6E8B72009B5CB0 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - DAE8CCAC1E6E8B8D009B5CB0 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - DAE9E0F21EB7BF39001E8E8B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Foundation.strings; sourceTree = ""; }; - DAE9ED53223897C400C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Localizable.strings; sourceTree = ""; }; - DAE9ED54223897ED00C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Foundation.strings; sourceTree = ""; }; - DAE9ED55223898B200C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = gl; path = gl.lproj/Foundation.stringsdict; sourceTree = ""; }; - DAE9ED56223898CF00C01291 /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Localizable.strings; sourceTree = ""; }; - DAED385D1D62CED700D7640F /* NSURL+MGLAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURL+MGLAdditions.h"; sourceTree = ""; }; - DAED385E1D62CED700D7640F /* NSURL+MGLAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURL+MGLAdditions.m"; sourceTree = ""; }; - DAEDC4311D6033F1000224FF /* MGLAttributionInfoTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLAttributionInfoTests.m; path = ../../darwin/test/MGLAttributionInfoTests.m; sourceTree = ""; }; - DAEDC4361D606291000224FF /* MGLAttributionButtonTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLAttributionButtonTests.m; sourceTree = ""; }; - DAF0D80D1DFE0E5D00B28378 /* MGLPointCollection_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLPointCollection_Private.h; sourceTree = ""; }; - DAF0D8151DFE6B1800B28378 /* MGLAttributionInfo_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLAttributionInfo_Private.h; sourceTree = ""; }; - DAF25713201901C100367EF5 /* MGLHillshadeStyleLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHillshadeStyleLayer.mm; sourceTree = ""; }; - DAF25714201901C200367EF5 /* MGLHillshadeStyleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLHillshadeStyleLayer.h; sourceTree = ""; }; - DAF2571D201902A500367EF5 /* MGLHillshadeStyleLayerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLHillshadeStyleLayerTests.mm; sourceTree = ""; }; - DAFBD0D51E3FA969000CD6BF /* zh-Hant */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; - DAFBD0D61E3FA983000CD6BF /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Foundation.strings"; sourceTree = ""; }; - DAFEB3702093ACBF00A86A83 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; - DAFEB3722093ACDA00A86A83 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Foundation.strings; sourceTree = ""; }; - DAFEB3732093ACE400A86A83 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ko; path = ko.lproj/Foundation.stringsdict; sourceTree = ""; }; - DD0902AF1DB1AC6400C5BDCE /* MGLNetworkConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGLNetworkConfiguration.m; sourceTree = ""; }; - DD0902B01DB1AC6400C5BDCE /* MGLNetworkConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLNetworkConfiguration.h; sourceTree = ""; }; - DD58A4C71D822C6200E1F038 /* MGLExpressionTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MGLExpressionTests.mm; path = ../../darwin/test/MGLExpressionTests.mm; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - DA839E8F1CC2E3400062CAFB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DAE6C33D1CC30DB200DB3429 /* Mapbox.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAE6C3241CC30DB200DB3429 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5548BE781D09E718005DDE81 /* libmbgl-core.a in Frameworks */, - 55D120A31F7906E6004B6D81 /* libmbgl-filesource.a in Frameworks */, - 52B5D17F1E5E26DF00BBCB48 /* libmbgl-loop-darwin.a in Frameworks */, - 55CF7533213EDADF00ED86C4 /* libmbgl-vendor-icu.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAE6C32E1CC30DB200DB3429 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DAE0DD7A1D5F015A005A6BB1 /* libmbgl-core.a in Frameworks */, - 55D120A51F790A0C004B6D81 /* libmbgl-filesource.a in Frameworks */, - DAE6C3321CC30DB200DB3429 /* Mapbox.framework in Frameworks */, - 52B5D1801E5E26DF00BBCB48 /* libmbgl-loop-darwin.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 35136D471D42295400C20EFD /* Layers */ = { - isa = PBXGroup; - children = ( - 747ABE66219B2C3200523B67 /* MGLSymbolStyleLayer_Private.h */, - 747ABE62219B2C1700523B67 /* MGLOpenGLStyleLayer_Private.h */, - 747ABE63219B2C1700523B67 /* MGLRasterStyleLayer_Private.h */, - 747ABE60219B2C0000523B67 /* MGLLineStyleLayer_Private.h */, - 747ABE5E219B2BED00523B67 /* MGLHillshadeStyleLayer_Private.h */, - 747ABE56219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h */, - 747ABE55219B2BDA00523B67 /* MGLCircleStyleLayer_Private.h */, - 747ABE54219B2BDA00523B67 /* MGLFillExtrusionStyleLayer_Private.h */, - 747ABE57219B2BDB00523B67 /* MGLFillStyleLayer_Private.h */, - 747ABE58219B2BDB00523B67 /* MGLHeatmapStyleLayer_Private.h */, - 749EC88F2199CCB8005608D7 /* MGLStyleLayerManager.h */, - 749EC8902199CCB9005608D7 /* MGLStyleLayerManager.mm */, - DA8F25851D51C9E10010E6B5 /* MGLBackgroundStyleLayer.h */, - DA8F25861D51C9E10010E6B5 /* MGLBackgroundStyleLayer.mm */, - 3527428B1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.h */, - 3527428C1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.mm */, - DAA998F91E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.h */, - DAA998FA1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.mm */, - 35602BF81D3EA99F0050646F /* MGLFillStyleLayer.h */, - 35602BF91D3EA99F0050646F /* MGLFillStyleLayer.mm */, - 35602BFD1D3EA9B40050646F /* MGLForegroundStyleLayer.h */, - 35602BFE1D3EA9B40050646F /* MGLForegroundStyleLayer.mm */, - 8946239A200E73CA00DA8EF2 /* MGLHeatmapStyleLayer.h */, - 8946239B200E73CA00DA8EF2 /* MGLHeatmapStyleLayer.mm */, - DAF25714201901C200367EF5 /* MGLHillshadeStyleLayer.h */, - DAF25713201901C100367EF5 /* MGLHillshadeStyleLayer.mm */, - DA8F25891D51CA540010E6B5 /* MGLLineStyleLayer.h */, - DA8F258A1D51CA540010E6B5 /* MGLLineStyleLayer.mm */, - DA7262051DEEDD460043BB89 /* MGLOpenGLStyleLayer.h */, - DA7262061DEEDD460043BB89 /* MGLOpenGLStyleLayer.mm */, - DA8F258D1D51CA600010E6B5 /* MGLRasterStyleLayer.h */, - DA8F258E1D51CA600010E6B5 /* MGLRasterStyleLayer.mm */, - 3538AA211D542685008EC33D /* MGLStyleLayer.h */, - 35602BFC1D3EA9B40050646F /* MGLStyleLayer_Private.h */, - 3538AA221D542685008EC33D /* MGLStyleLayer.mm */, - DA8F25911D51CA750010E6B5 /* MGLSymbolStyleLayer.h */, - DA8F25921D51CA750010E6B5 /* MGLSymbolStyleLayer.mm */, - DA6408D51DA4E5DA00908C90 /* MGLVectorStyleLayer.h */, - DA6408D61DA4E5DA00908C90 /* MGLVectorStyleLayer.mm */, - ); - name = Layers; - sourceTree = ""; - }; - 352742791D4C235C00A1ECE6 /* Categories */ = { - isa = PBXGroup; - children = ( - DA8F25A61D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h */, - DA8F25A71D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.mm */, - ); - name = Categories; - sourceTree = ""; - }; - 3527427E1D4C242B00A1ECE6 /* Sources */ = { - isa = PBXGroup; - children = ( - 07F8E2F41F674C8000F794BB /* MGLComputedShapeSource.h */, - 07D947471F6741F500E37934 /* MGLComputedShapeSource_Private.h */, - 07F8E2F51F674C8000F794BB /* MGLComputedShapeSource.mm */, - 352742831D4C244700A1ECE6 /* MGLRasterTileSource.h */, - DA7DC9821DED647F0027472F /* MGLRasterTileSource_Private.h */, - 352742841D4C244700A1ECE6 /* MGLRasterTileSource.mm */, - DACA8620201920BE00E9693A /* MGLRasterDEMSource.h */, - DACA8621201920BE00E9693A /* MGLRasterDEMSource.mm */, - 352742871D4C245800A1ECE6 /* MGLShapeSource.h */, - DA87A99B1DC9D8DD00810D09 /* MGLShapeSource_Private.h */, - 352742881D4C245800A1ECE6 /* MGLShapeSource.mm */, - 3527427F1D4C243B00A1ECE6 /* MGLSource.h */, - DA8F25991D51CAD00010E6B5 /* MGLSource_Private.h */, - 352742801D4C243B00A1ECE6 /* MGLSource.mm */, - DA551B7F1DB496AC0009AFAF /* MGLTileSource.h */, - DA551B801DB496AC0009AFAF /* MGLTileSource_Private.h */, - DA551B811DB496AC0009AFAF /* MGLTileSource.mm */, - DA8F25951D51CAC70010E6B5 /* MGLVectorTileSource.h */, - DA7DC9801DED5F5C0027472F /* MGLVectorTileSource_Private.h */, - DA8F25961D51CAC70010E6B5 /* MGLVectorTileSource.mm */, - 07A019EB1ED662D800ACD43E /* MGLImageSource.h */, - 07A019EC1ED662D800ACD43E /* MGLImageSource.mm */, - ); - name = Sources; - sourceTree = ""; - }; - 3527429B1D4C259500A1ECE6 /* Styling */ = { - isa = PBXGroup; - children = ( - 1753ED3F1E53CE5200A9FD90 /* MGLConversion.h */, - 352742791D4C235C00A1ECE6 /* Categories */, - 35136D471D42295400C20EFD /* Layers */, - 3527427E1D4C242B00A1ECE6 /* Sources */, - 352742771D4C220900A1ECE6 /* MGLStyleValue.h */, - DA8F259B1D51CB000010E6B5 /* MGLStyleValue_Private.h */, - 3527429E1D4C25BD00A1ECE6 /* MGLStyleValue.mm */, - 1F7454A11ECFB00300021D39 /* MGLLight.h */, - 1F7454A21ECFB00300021D39 /* MGLLight.mm */, - 1F7454A01ECFB00300021D39 /* MGLLight_Private.h */, - ); - name = Styling; - sourceTree = ""; - }; - 4031ACFA1E9EB39A00A3EA26 /* Swift Integration */ = { - isa = PBXGroup; - children = ( - 4031ACFB1E9EB3C100A3EA26 /* MGLMapViewDelegateIntegrationTests.swift */, - ); - name = "Swift Integration"; - sourceTree = ""; - }; - 4031AD001E9FD61000A3EA26 /* Test Helpers */ = { - isa = PBXGroup; - children = ( - CA0B3C042329F7E600E4B493 /* MGLTestAssertionHandler.h */, - CA0B3C052329F7E600E4B493 /* MGLTestAssertionHandler.m */, - 4031AD011E9FD6A300A3EA26 /* MGLSDKTestHelpers.swift */, - ); - name = "Test Helpers"; - sourceTree = ""; - }; - CFF9F98A23A2503300B0DE92 /* Interface */ = { - isa = PBXGroup; - children = ( - CFF9F98C23A2505700B0DE92 /* MGLNetworkIntegrationManager.h */, - CFF9F98B23A2505700B0DE92 /* MGLNetworkIntegrationManager.m */, - ); - name = Interface; - sourceTree = ""; - }; - DA33895E1FA3E997001EA329 /* Recovered References */ = { - isa = PBXGroup; - children = ( - ); - name = "Recovered References"; - sourceTree = ""; - }; - DA839E891CC2E3400062CAFB = { - isa = PBXGroup; - children = ( - DA839E941CC2E3400062CAFB /* Demo App */, - DAE6C3291CC30DB200DB3429 /* SDK */, - DAE6C3371CC30DB200DB3429 /* SDK Tests */, - DAE6C31E1CC308BC00DB3429 /* Frameworks */, - DAE6C3C41CC31F7800DB3429 /* Configuration */, - DA839E931CC2E3400062CAFB /* Products */, - DA33895E1FA3E997001EA329 /* Recovered References */, - ); - sourceTree = ""; - }; - DA839E931CC2E3400062CAFB /* Products */ = { - isa = PBXGroup; - children = ( - DA839E921CC2E3400062CAFB /* Mapbox GL.app */, - DAE6C3281CC30DB200DB3429 /* Mapbox.framework */, - DAE6C3311CC30DB200DB3429 /* test.xctest */, - ); - name = Products; - sourceTree = ""; - }; - DA839E941CC2E3400062CAFB /* Demo App */ = { - isa = PBXGroup; - children = ( - DA839E951CC2E3400062CAFB /* AppDelegate.h */, - DA839E961CC2E3400062CAFB /* AppDelegate.m */, - DAE6C2E31CC3050F00DB3429 /* DroppedPinAnnotation.h */, - DAE6C2E41CC3050F00DB3429 /* DroppedPinAnnotation.m */, - 3E6465D8206576A900685536 /* LimeGreenStyleLayer.h */, - 3E6465D7206576A800685536 /* LimeGreenStyleLayer.m */, - DAE6C2E51CC3050F00DB3429 /* LocationCoordinate2DTransformer.h */, - DAE6C2E61CC3050F00DB3429 /* LocationCoordinate2DTransformer.m */, - DA839E9B1CC2E3400062CAFB /* MapDocument.h */, - DA839E9C1CC2E3400062CAFB /* MapDocument.m */, - DA839E9E1CC2E3400062CAFB /* MapDocument.xib */, - DACB0C371E18DFFD005DDBEA /* MGLStyle+MBXAdditions.h */, - DACB0C381E18DFFD005DDBEA /* MGLStyle+MBXAdditions.m */, - DAE6C2E91CC3050F00DB3429 /* OfflinePackNameValueTransformer.h */, - DAE6C2EA1CC3050F00DB3429 /* OfflinePackNameValueTransformer.m */, - DAA48EFB1D6A4731006A7E36 /* StyleLayerIconTransformer.h */, - DAA48EFC1D6A4731006A7E36 /* StyleLayerIconTransformer.m */, - DAE6C2EB1CC3050F00DB3429 /* TimeIntervalTransformer.h */, - DAE6C2EC1CC3050F00DB3429 /* TimeIntervalTransformer.m */, - DA839EA11CC2E3400062CAFB /* Assets.xcassets */, - DA839EA31CC2E3400062CAFB /* MainMenu.xib */, - 358EB3AE1D61F0DB00E46D9C /* amsterdam.geojson */, - DA5589761D320C41006B7F64 /* wms.json */, - DAE6C2E11CC304F900DB3429 /* Credits.rtf */, - DA839EA61CC2E3400062CAFB /* Info.plist */, - 96E027331E57C9A7004B8E66 /* Localizable.strings */, - DA839E981CC2E3400062CAFB /* Supporting Files */, - 89462398200D199100DA8EF2 /* heatmap.json */, - ); - name = "Demo App"; - path = app; - sourceTree = ""; - }; - DA839E981CC2E3400062CAFB /* Supporting Files */ = { - isa = PBXGroup; - children = ( - DA839E991CC2E3400062CAFB /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - DA87A99A1DC9D88800810D09 /* Sources */ = { - isa = PBXGroup; - children = ( - 07A240921F67566F002C8210 /* MGLComputedShapeSourceTests.m */, - DA87A9961DC9D88400810D09 /* MGLShapeSourceTests.mm */, - DA87A9971DC9D88400810D09 /* MGLTileSetTests.mm */, - 920A3E581E6F859D00C16EFC /* MGLSourceQueryTests.m */, - 07BA4CAB1EE21887004528F5 /* MGLImageSourceTests.m */, - ); - name = Sources; - sourceTree = ""; - }; - DA8933A81CCD28D100E68420 /* Kit Resources */ = { - isa = PBXGroup; - children = ( - DA8933AB1CCD290700E68420 /* Localizable.strings */, - DAE6C3BB1CC31F2E00DB3429 /* default_marker.pdf */, - DAE6C3BC1CC31F2E00DB3429 /* mapbox.pdf */, - 1F9EF4051FBA1B0D0063FBB0 /* mapbox_helmet.pdf */, - DA8933A71CCD287300E68420 /* MGLAnnotationCallout.xib */, - ); - name = "Kit Resources"; - sourceTree = ""; - }; - DA8933B21CCD2C0700E68420 /* Foundation Resources */ = { - isa = PBXGroup; - children = ( - DA8933B31CCD2C2500E68420 /* Foundation.strings */, - DA8933B61CCD2C2D00E68420 /* Foundation.stringsdict */, - ); - name = "Foundation Resources"; - path = ../../darwin/resources; - sourceTree = ""; - }; - DA8F257C1D51C5F40010E6B5 /* Layers */ = { - isa = PBXGroup; - children = ( - 170A82C2201FAFF800943087 /* MGLHeatmapColorTests.mm */, - 170A82BE201BDD1B00943087 /* MGLHeatmapStyleLayerTests.mm */, - 40E1601A1DF216E6005EA6D9 /* MGLStyleLayerTests.h */, - 40E1601B1DF216E6005EA6D9 /* MGLStyleLayerTests.m */, - DA2207BA1DC076930002F84D /* test-Bridging-Header.h */, - DAA999001E9F5EC5002E6EA6 /* MGLFillExtrusionStyleLayerTests.mm */, - DA8F25741D51C5F40010E6B5 /* MGLFillStyleLayerTests.mm */, - DAF2571D201902A500367EF5 /* MGLHillshadeStyleLayerTests.mm */, - DA8F25751D51C5F40010E6B5 /* MGLRasterStyleLayerTests.mm */, - DA8F25761D51C5F40010E6B5 /* MGLSymbolStyleLayerTests.mm */, - DA8F25771D51C5F40010E6B5 /* MGLLineStyleLayerTests.mm */, - DA8F25781D51C5F40010E6B5 /* MGLCircleStyleLayerTests.mm */, - DA8F25791D51C5F40010E6B5 /* MGLBackgroundStyleLayerTests.mm */, - ); - name = Layers; - sourceTree = ""; - }; - DA8F257D1D51C5F40010E6B5 /* Styling */ = { - isa = PBXGroup; - children = ( - DA8F257C1D51C5F40010E6B5 /* Layers */, - DA87A99A1DC9D88800810D09 /* Sources */, - 1F7454AA1ED1DDBD00021D39 /* MGLLightTest.mm */, - ); - name = Styling; - path = ../../darwin/test; - sourceTree = ""; - }; - DA8F25B81D51D2280010E6B5 /* Foundation Templates */ = { - isa = PBXGroup; - children = ( - DA8F25B61D51D2240010E6B5 /* MGLStyleLayer.h.ejs */, - DA8F25B71D51D2240010E6B5 /* MGLStyleLayer.mm.ejs */, - DA8F25B51D51D2240010E6B5 /* MGLStyleLayerTests.mm.ejs */, - ); - name = "Foundation Templates"; - path = ../../darwin/src; - sourceTree = ""; - }; - DA90B12C1DB43B180073CF55 /* Categories */ = { - isa = PBXGroup; - children = ( - 355BA4EB1D41633E00CCC6D5 /* NSColor+MGLAdditions.h */, - 355BA4EC1D41633E00CCC6D5 /* NSColor+MGLAdditions.mm */, - 405C03961DB0004E001AC280 /* NSImage+MGLAdditions.h */, - 405C03971DB0004E001AC280 /* NSImage+MGLAdditions.mm */, - DAE6C3801CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.h */, - DAE6C3811CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.m */, - ); - name = Categories; - sourceTree = ""; - }; - DAD1657C1CF4CE6B001FF4B9 /* Formatters */ = { - isa = PBXGroup; - children = ( - DA35A2BD1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.h */, - DA35A2BE1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.m */, - DA35A2AB1CCA091800E826B2 /* MGLCompassDirectionFormatter.h */, - DA35A2AC1CCA091800E826B2 /* MGLCompassDirectionFormatter.m */, - DA35A2A31CC9EB1A00E826B2 /* MGLCoordinateFormatter.h */, - DA35A2A51CC9EB2700E826B2 /* MGLCoordinateFormatter.m */, - 35C6DF821E214C0400ACA483 /* MGLDistanceFormatter.h */, - 35C6DF831E214C0400ACA483 /* MGLDistanceFormatter.m */, - ); - name = Formatters; - sourceTree = ""; - }; - DAD1657D1CF4CECB001FF4B9 /* Geometry */ = { - isa = PBXGroup; - children = ( - DAE6C34B1CC31E0400DB3429 /* MGLAnnotation.h */, - CA4045C4216720D700B356E1 /* MGLCluster.h */, - DACC22171CF3D4F700D220D9 /* MGLFeature_Private.h */, - DACC22121CF3D3E200D220D9 /* MGLFeature.h */, - DACC22131CF3D3E200D220D9 /* MGLFeature.mm */, - DAE6C36C1CC31E2A00DB3429 /* MGLGeometry_Private.h */, - DAE6C34C1CC31E0400DB3429 /* MGLGeometry.h */, - DAE6C36D1CC31E2A00DB3429 /* MGLGeometry.mm */, - DAE6C36F1CC31E2A00DB3429 /* MGLMultiPoint_Private.h */, - DAE6C34E1CC31E0400DB3429 /* MGLMultiPoint.h */, - DAE6C3701CC31E2A00DB3429 /* MGLMultiPoint.mm */, - DAE6C3521CC31E0400DB3429 /* MGLOverlay.h */, - DAE6C3531CC31E0400DB3429 /* MGLPointAnnotation.h */, - DAE6C3761CC31E2A00DB3429 /* MGLPointAnnotation.mm */, - DAF0D80D1DFE0E5D00B28378 /* MGLPointCollection_Private.h */, - 4049C2A11DB6CE7800B3F799 /* MGLPointCollection.h */, - 4049C2A71DB6D09B00B3F799 /* MGLPointCollection.mm */, - 9654C12C1FFC394700DB6A19 /* MGLPolygon_Private.h */, - DAE6C3541CC31E0400DB3429 /* MGLPolygon.h */, - DAE6C3771CC31E2A00DB3429 /* MGLPolygon.mm */, - 9654C12A1FFC38E000DB6A19 /* MGLPolyline_Private.h */, - DAE6C3551CC31E0400DB3429 /* MGLPolyline.h */, - DAE6C3781CC31E2A00DB3429 /* MGLPolyline.mm */, - 408AA85A1DAEECF100022900 /* MGLShape_Private.h */, - DAE6C3561CC31E0400DB3429 /* MGLShape.h */, - DAE6C3791CC31E2A00DB3429 /* MGLShape.mm */, - DAD165721CF4CD7A001FF4B9 /* MGLShapeCollection.h */, - DAD165731CF4CD7A001FF4B9 /* MGLShapeCollection.mm */, - ); - name = Geometry; - sourceTree = ""; - }; - DAD1657E1CF4CF04001FF4B9 /* Offline Maps */ = { - isa = PBXGroup; - children = ( - DAE6C34F1CC31E0400DB3429 /* MGLOfflinePack.h */, - DAE6C3711CC31E2A00DB3429 /* MGLOfflinePack_Private.h */, - DAE6C3721CC31E2A00DB3429 /* MGLOfflinePack.mm */, - DAE6C3501CC31E0400DB3429 /* MGLOfflineRegion.h */, - DAE6C3731CC31E2A00DB3429 /* MGLOfflineRegion_Private.h */, - DAE6C3511CC31E0400DB3429 /* MGLOfflineStorage.h */, - DAE6C3741CC31E2A00DB3429 /* MGLOfflineStorage_Private.h */, - DAE6C3751CC31E2A00DB3429 /* MGLOfflineStorage.mm */, - 9250B8C22073C69000EF338C /* MGLShapeOfflineRegion.h */, - 92FC0AE3207CC8DA007B6B54 /* MGLShapeOfflineRegion_Private.h */, - 92FC0AE5207CDD8D007B6B54 /* MGLShapeOfflineRegion.mm */, - DAE6C3581CC31E0400DB3429 /* MGLTilePyramidOfflineRegion.h */, - 9221BAAE20699CBA0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h */, - DAE6C37B1CC31E2A00DB3429 /* MGLTilePyramidOfflineRegion.mm */, - ); - name = "Offline Maps"; - sourceTree = ""; - }; - DAD1657F1CF4CF50001FF4B9 /* Categories */ = { - isa = PBXGroup; - children = ( - 40B77E431DB11BB0003DA2FE /* NSArray+MGLAdditions.h */, - 40B77E421DB11BB0003DA2FE /* NSArray+MGLAdditions.mm */, - DAE6C37D1CC31E2A00DB3429 /* NSBundle+MGLAdditions.h */, - DAE6C37E1CC31E2A00DB3429 /* NSBundle+MGLAdditions.m */, - 359819571E02F611008FC139 /* NSCoder+MGLAdditions.h */, - 359819581E02F611008FC139 /* NSCoder+MGLAdditions.mm */, - 35C5D8431D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.h */, - 35C5D8441D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.mm */, - 35C5D8451D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.h */, - 35C5D8461D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.mm */, - 35D65C581D65AD5500722C23 /* NSDate+MGLAdditions.h */, - 35D65C591D65AD5500722C23 /* NSDate+MGLAdditions.mm */, - 408AA85F1DAEED3300022900 /* NSDictionary+MGLAdditions.h */, - 408AA85E1DAEED3300022900 /* NSDictionary+MGLAdditions.mm */, - DAE6C37F1CC31E2A00DB3429 /* NSException+MGLAdditions.h */, - 3508EC621D749D39009B0EE4 /* NSExpression+MGLAdditions.h */, - DAC25FC9200FD5E2009BE98E /* NSExpression+MGLPrivateAdditions.h */, - 3508EC631D749D39009B0EE4 /* NSExpression+MGLAdditions.mm */, - 352903991D6C63B80002C7DF /* NSPredicate+MGLAdditions.h */, - 3529039A1D6C63B80002C7DF /* NSPredicate+MGLAdditions.mm */, - 1FC481842098F323000D09B4 /* NSPredicate+MGLPrivateAdditions.h */, - DAE6C3821CC31E2A00DB3429 /* NSString+MGLAdditions.h */, - DAE6C3831CC31E2A00DB3429 /* NSString+MGLAdditions.m */, - DAED385D1D62CED700D7640F /* NSURL+MGLAdditions.h */, - DAED385E1D62CED700D7640F /* NSURL+MGLAdditions.m */, - DA35A2CD1CCAAED300E826B2 /* NSValue+MGLAdditions.h */, - DA35A2CE1CCAAED300E826B2 /* NSValue+MGLAdditions.m */, - ); - name = Categories; - sourceTree = ""; - }; - DAE6C31E1CC308BC00DB3429 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 55CF7532213EDADF00ED86C4 /* libmbgl-vendor-icu.a */, - 55D120A41F7906E6004B6D81 /* libmbgl-filesource.a */, - 5548BE7B1D0ACBBD005DDE81 /* libmbgl-loop-darwin.a */, - 55D9B4B01D005D3900C1CCE2 /* libz.tbd */, - 52BECB091CC5A26F009CD791 /* SystemConfiguration.framework */, - DAE6C3451CC31D1200DB3429 /* libmbgl-core.a */, - DAE6C3461CC31D1200DB3429 /* libmbgl-platform-macos.a */, - DAE6C3C61CC3499100DB3429 /* libsqlite3.tbd */, - ); - name = Frameworks; - sourceTree = ""; - }; - DAE6C3291CC30DB200DB3429 /* SDK */ = { - isa = PBXGroup; - children = ( - DAE6C3C11CC31F4500DB3429 /* Mapbox.h */, - DAE6C3491CC31DF500DB3429 /* Foundation */, - DA8F25B81D51D2280010E6B5 /* Foundation Templates */, - DA8933B21CCD2C0700E68420 /* Foundation Resources */, - DAE6C39E1CC31E7C00DB3429 /* Kit */, - DA8933A81CCD28D100E68420 /* Kit Resources */, - DAE6C32C1CC30DB200DB3429 /* Info.plist */, - ); - name = SDK; - path = sdk; - sourceTree = ""; - }; - DAE6C3371CC30DB200DB3429 /* SDK Tests */ = { - isa = PBXGroup; - children = ( - DAE6C33A1CC30DB200DB3429 /* Info.plist */, - DA2784FD1DF03060001D5B8D /* Media.xcassets */, - CA9461A520884CCB0015EB12 /* MGLAnnotationTests.m */, - DAEDC4361D606291000224FF /* MGLAttributionButtonTests.m */, - DAEDC4311D6033F1000224FF /* MGLAttributionInfoTests.m */, - DA35A2C11CCA9F4A00E826B2 /* MGLClockDirectionFormatterTests.m */, - 3526EABC1DF9B19800006B43 /* MGLCodingTests.mm */, - DA35A2B51CCA14D700E826B2 /* MGLCompassDirectionFormatterTests.m */, - DA35A2A71CC9F41600E826B2 /* MGLCoordinateFormatterTests.m */, - 35C6DF861E214C1800ACA483 /* MGLDistanceFormatterTests.m */, - DA2987591E1A4290002299F5 /* MGLDocumentationExampleTests.swift */, - DA57D4B01EBC699800793288 /* MGLDocumentationGuideTests.swift */, - DD58A4C71D822C6200E1F038 /* MGLExpressionTests.mm */, - DA0CD58D1CF56F5800A5F5A5 /* MGLFeatureTests.mm */, - DAE6C3C81CC34BD800DB3429 /* MGLGeometryTests.mm */, - DA695423215B1E6C002041A4 /* MGLMapCameraTests.m */, - 076171C4213A0DC200668A35 /* MGLMapViewTests.m */, - 1F95931A1E6DE2B600D5B294 /* MGLNSDateAdditionsTests.mm */, - DAE7DEC31E24549F007505A6 /* MGLNSStringAdditionsTests.m */, - CA0B3C082329FB4800E4B493 /* MGLOfflinePackTests.mm */, - DAE6C3CA1CC34BD800DB3429 /* MGLOfflineRegionTests.m */, - 55E2AD101E5B0A6900E8C587 /* MGLOfflineStorageTests.mm */, - 35C5D84B1D6DD75B00E95907 /* MGLPredicateTests.mm */, - CA8FBC0C21A4A74300D1203C /* MGLRendererConfigurationTests.mm */, - CAD9D0AB22A88A32001B25EE /* MGLResourceTests.mm */, - DAE6C3CC1CC34BD800DB3429 /* MGLStyleTests.mm */, - 556660D51E1D07E400E2C41B /* MGLVersionNumber.m */, - DA35D0891E1A631B007DED41 /* one-liner.json */, - 1F8A59F921653483004DFE75 /* sideload_sat.db */, - DA8F257D1D51C5F40010E6B5 /* Styling */, - 4031ACFA1E9EB39A00A3EA26 /* Swift Integration */, - 4031AD001E9FD61000A3EA26 /* Test Helpers */, - ); - name = "SDK Tests"; - path = test; - sourceTree = ""; - }; - DAE6C3491CC31DF500DB3429 /* Foundation */ = { - isa = PBXGroup; - children = ( - 3527429B1D4C259500A1ECE6 /* Styling */, - DAD1657F1CF4CF50001FF4B9 /* Categories */, - DAD1657C1CF4CE6B001FF4B9 /* Formatters */, - DAD1657D1CF4CECB001FF4B9 /* Geometry */, - DAD1657E1CF4CF04001FF4B9 /* Offline Maps */, - DAE6C34A1CC31E0400DB3429 /* MGLAccountManager.h */, - DAE6C36A1CC31E2A00DB3429 /* MGLAccountManager_Private.h */, - DAE6C36B1CC31E2A00DB3429 /* MGLAccountManager.m */, - DA00FC881D5EEAC3009AABC8 /* MGLAttributionInfo.h */, - DAF0D8151DFE6B1800B28378 /* MGLAttributionInfo_Private.h */, - DA00FC891D5EEAC3009AABC8 /* MGLAttributionInfo.mm */, - 1FF4858C2237235200F19727 /* MGLAttributedExpression.h */, - 1FF4858B2237235200F19727 /* MGLAttributedExpression.m */, - 556660C51E1BEA0100E2C41B /* MGLFoundation.h */, - 558DE7A41E56161C00C7916D /* MGLFoundation_Private.h */, - 558DE7A51E56161C00C7916D /* MGLFoundation.mm */, - DAE6C34D1CC31E0400DB3429 /* MGLMapCamera.h */, - DAE6C36E1CC31E2A00DB3429 /* MGLMapCamera.mm */, - 92092EEE1F5EB10E00AF5130 /* MGLMapSnapshotter.h */, - 92092EEF1F5EB10E00AF5130 /* MGLMapSnapshotter.mm */, - 1FCCEC52222EF9FE00302E3B /* MGLSDKMetricsManager.h */, - 1FCCEC51222EF9FD00302E3B /* MGLSDKMetricsManager_Private.h */, - 1FCCEC50222EF9FC00302E3B /* MGLSDKMetricsManager.m */, - DD0902B01DB1AC6400C5BDCE /* MGLNetworkConfiguration.h */, - 1F2B94C2221E22E500210640 /* MGLNetworkConfiguration_Private.h */, - DD0902AF1DB1AC6400C5BDCE /* MGLNetworkConfiguration.m */, - 3EA9369A4C46957566058822 /* MGLRendererConfiguration.h */, - 3EA93B1B0864609938506E12 /* MGLRendererConfiguration.mm */, - 92F2C3EA1F0E3A1900268EC0 /* MGLRendererFrontend.h */, - DAE6C3571CC31E0400DB3429 /* MGLStyle.h */, - 3537CA731D3F93A600380318 /* MGLStyle_Private.h */, - DAE6C37A1CC31E2A00DB3429 /* MGLStyle.mm */, - DAE6C3591CC31E0400DB3429 /* MGLTypes.h */, - DAE6C37C1CC31E2A00DB3429 /* MGLTypes.m */, - DA87A99F1DC9DC6200810D09 /* MGLValueEvaluator.h */, - 1F8A5A03216D4696004DFE75 /* MGLLoggingConfiguration.h */, - 1F8A5A01216D4695004DFE75 /* MGLLoggingConfiguration_Private.h */, - CF762DEE22DC7EFF00338472 /* MGLLoggingConfiguration.mm */, - ); - name = Foundation; - path = ../darwin/src; - sourceTree = SOURCE_ROOT; - }; - DAE6C39E1CC31E7C00DB3429 /* Kit */ = { - isa = PBXGroup; - children = ( - CFF9F98A23A2503300B0DE92 /* Interface */, - DA90B12C1DB43B180073CF55 /* Categories */, - DAE6C39F1CC31E9400DB3429 /* MGLAnnotationImage.h */, - DAC2ABC41CC6D343006D18C4 /* MGLAnnotationImage_Private.h */, - DAE6C3A71CC31EF300DB3429 /* MGLAnnotationImage.m */, - DAE6C3A81CC31EF300DB3429 /* MGLAttributionButton.h */, - DAE6C3A91CC31EF300DB3429 /* MGLAttributionButton.mm */, - DAE6C3AA1CC31EF300DB3429 /* MGLCompassCell.h */, - DAE6C3AB1CC31EF300DB3429 /* MGLCompassCell.m */, - DAE6C3A01CC31E9400DB3429 /* MGLMapView.h */, - DAE6C3AC1CC31EF300DB3429 /* MGLMapView_Private.h */, - DAE6C3AD1CC31EF300DB3429 /* MGLMapView.mm */, - 5591AC682298361600FF9ADF /* MGLMapView+Impl.h */, - 5591AC692298361600FF9ADF /* MGLMapView+Impl.mm */, - 55CAF6332294409B00F17770 /* MGLMapView+OpenGL.mm */, - 55CAF6312294407F00F17770 /* MGLMapView+OpenGL.h */, - DAE6C3A11CC31E9400DB3429 /* MGLMapView+IBAdditions.h */, - DAE6C3AE1CC31EF300DB3429 /* MGLMapView+IBAdditions.mm */, - DAE6C3A21CC31E9400DB3429 /* MGLMapViewDelegate.h */, - DAE6C3AF1CC31EF300DB3429 /* MGLOpenGLLayer.h */, - DAE6C3B01CC31EF300DB3429 /* MGLOpenGLLayer.mm */, - ); - name = Kit; - path = src; - sourceTree = SOURCE_ROOT; - }; - DAE6C3C41CC31F7800DB3429 /* Configuration */ = { - isa = PBXGroup; - children = ( - 55FE0E8D1D100A0900FD240B /* config.xcconfig */, - ); - name = Configuration; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - DAE6C3251CC30DB200DB3429 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 556660C61E1BEA0100E2C41B /* MGLFoundation.h in Headers */, - 07F8E2F71F674C8800F794BB /* MGLComputedShapeSource.h in Headers */, - DA8F258F1D51CA600010E6B5 /* MGLRasterStyleLayer.h in Headers */, - 3508EC641D749D39009B0EE4 /* NSExpression+MGLAdditions.h in Headers */, - DAE6C38D1CC31E2A00DB3429 /* MGLOfflineRegion_Private.h in Headers */, - DA7DC9831DED647F0027472F /* MGLRasterTileSource_Private.h in Headers */, - 747ABE5B219B2BDB00523B67 /* MGLBackgroundStyleLayer_Private.h in Headers */, - 1FF4858E2237235300F19727 /* MGLAttributedExpression.h in Headers */, - 1753ED401E53CE6100A9FD90 /* MGLConversion.h in Headers */, - 747ABE59219B2BDB00523B67 /* MGLFillExtrusionStyleLayer_Private.h in Headers */, - DA8F259C1D51CB000010E6B5 /* MGLStyleValue_Private.h in Headers */, - DAE6C35B1CC31E0400DB3429 /* MGLAnnotation.h in Headers */, - DAE6C3B61CC31EF300DB3429 /* MGLMapView_Private.h in Headers */, - 747ABE65219B2C1800523B67 /* MGLRasterStyleLayer_Private.h in Headers */, - 747ABE5D219B2BDB00523B67 /* MGLHeatmapStyleLayer_Private.h in Headers */, - DAF25716201901C200367EF5 /* MGLHillshadeStyleLayer.h in Headers */, - 92092EF01F5EB10E00AF5130 /* MGLMapSnapshotter.h in Headers */, - 3527428D1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.h in Headers */, - DA00FC8A1D5EEAC3009AABC8 /* MGLAttributionInfo.h in Headers */, - DAE6C3B21CC31EF300DB3429 /* MGLAttributionButton.h in Headers */, - DAA998FB1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.h in Headers */, - 40B77E451DB11BC9003DA2FE /* NSArray+MGLAdditions.h in Headers */, - 35C5D8471D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.h in Headers */, - DAE6C3A31CC31E9400DB3429 /* MGLAnnotationImage.h in Headers */, - DAE6C3A41CC31E9400DB3429 /* MGLMapView.h in Headers */, - DAE6C3611CC31E0400DB3429 /* MGLOfflineStorage.h in Headers */, - 749EC8912199CCB9005608D7 /* MGLStyleLayerManager.h in Headers */, - 352742781D4C220900A1ECE6 /* MGLStyleValue.h in Headers */, - 1FCCEC55222EF9FE00302E3B /* MGLSDKMetricsManager.h in Headers */, - DAE6C35E1CC31E0400DB3429 /* MGLMultiPoint.h in Headers */, - 35602BFF1D3EA9B40050646F /* MGLStyleLayer_Private.h in Headers */, - 92FC0AE4207CC8DA007B6B54 /* MGLShapeOfflineRegion_Private.h in Headers */, - DAF0D8161DFE6B1800B28378 /* MGLAttributionInfo_Private.h in Headers */, - DAE6C3971CC31E2A00DB3429 /* NSBundle+MGLAdditions.h in Headers */, - DAED385F1D62CED700D7640F /* NSURL+MGLAdditions.h in Headers */, - DAD165741CF4CD7A001FF4B9 /* MGLShapeCollection.h in Headers */, - DAE6C3631CC31E0400DB3429 /* MGLPointAnnotation.h in Headers */, - DAC2ABC51CC6D343006D18C4 /* MGLAnnotationImage_Private.h in Headers */, - DAE6C35F1CC31E0400DB3429 /* MGLOfflinePack.h in Headers */, - 1F8A5A04216D4696004DFE75 /* MGLLoggingConfiguration_Private.h in Headers */, - 1FC481852098F323000D09B4 /* NSPredicate+MGLPrivateAdditions.h in Headers */, - DAE6C39C1CC31E2A00DB3429 /* NSString+MGLAdditions.h in Headers */, - 1F8A5A06216D4696004DFE75 /* MGLLoggingConfiguration.h in Headers */, - 3529039B1D6C63B80002C7DF /* NSPredicate+MGLAdditions.h in Headers */, - 747ABE5A219B2BDB00523B67 /* MGLCircleStyleLayer_Private.h in Headers */, - DA8F25971D51CAC70010E6B5 /* MGLVectorTileSource.h in Headers */, - DA7DC9811DED5F5C0027472F /* MGLVectorTileSource_Private.h in Headers */, - DAE6C3861CC31E2A00DB3429 /* MGLGeometry_Private.h in Headers */, - DAE6C3841CC31E2A00DB3429 /* MGLAccountManager_Private.h in Headers */, - CFF9F98E23A2505700B0DE92 /* MGLNetworkIntegrationManager.h in Headers */, - DACA8622201920BE00E9693A /* MGLRasterDEMSource.h in Headers */, - DAE6C3691CC31E0400DB3429 /* MGLTypes.h in Headers */, - 07D9474D1F67441B00E37934 /* MGLComputedShapeSource_Private.h in Headers */, - DAE6C3991CC31E2A00DB3429 /* NSException+MGLAdditions.h in Headers */, - DA8F25871D51C9E10010E6B5 /* MGLBackgroundStyleLayer.h in Headers */, - 4049C2A51DB6CE7F00B3F799 /* MGLPointCollection.h in Headers */, - DAE6C3661CC31E0400DB3429 /* MGLShape.h in Headers */, - DA551B831DB496AC0009AFAF /* MGLTileSource_Private.h in Headers */, - DAC25FCA200FD5E2009BE98E /* NSExpression+MGLPrivateAdditions.h in Headers */, - DA7262071DEEDD460043BB89 /* MGLOpenGLStyleLayer.h in Headers */, - 352742811D4C243B00A1ECE6 /* MGLSource.h in Headers */, - 1FCCEC54222EF9FE00302E3B /* MGLSDKMetricsManager_Private.h in Headers */, - DAE6C3C21CC31F4500DB3429 /* Mapbox.h in Headers */, - DAE6C3641CC31E0400DB3429 /* MGLPolygon.h in Headers */, - DA35A2BF1CCA9B1A00E826B2 /* MGLClockDirectionFormatter.h in Headers */, - 1F2B94C3221E22E600210640 /* MGLNetworkConfiguration_Private.h in Headers */, - 35602BFA1D3EA99F0050646F /* MGLFillStyleLayer.h in Headers */, - DA35A2A41CC9EB1A00E826B2 /* MGLCoordinateFormatter.h in Headers */, - 35C5D8491D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.h in Headers */, - 9250B8C32073C69100EF338C /* MGLShapeOfflineRegion.h in Headers */, - 747ABE67219B2C3200523B67 /* MGLSymbolStyleLayer_Private.h in Headers */, - 55CAF6322294407F00F17770 /* MGLMapView+OpenGL.h in Headers */, - DD0902B31DB1AC6400C5BDCE /* MGLNetworkConfiguration.h in Headers */, - DAE6C3621CC31E0400DB3429 /* MGLOverlay.h in Headers */, - DAE6C3651CC31E0400DB3429 /* MGLPolyline.h in Headers */, - DAE6C39A1CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.h in Headers */, - 92F2C3EB1F0E3A1900268EC0 /* MGLRendererFrontend.h in Headers */, - DA8F258B1D51CA540010E6B5 /* MGLLineStyleLayer.h in Headers */, - 35C6DF841E214C0400ACA483 /* MGLDistanceFormatter.h in Headers */, - DA8F25B21D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.h in Headers */, - 55335DF9212EC542000CE5F8 /* NSImage+MGLAdditions.h in Headers */, - 1F7454A31ECFB00300021D39 /* MGLLight_Private.h in Headers */, - 5591AC6A2298361600FF9ADF /* MGLMapView+Impl.h in Headers */, - 359819591E02F611008FC139 /* NSCoder+MGLAdditions.h in Headers */, - DAE6C38E1CC31E2A00DB3429 /* MGLOfflineStorage_Private.h in Headers */, - 747ABE61219B2C0000523B67 /* MGLLineStyleLayer_Private.h in Headers */, - 747ABE5F219B2BED00523B67 /* MGLHillshadeStyleLayer_Private.h in Headers */, - DA87A9A01DC9DC6200810D09 /* MGLValueEvaluator.h in Headers */, - 8946239D200E744800DA8EF2 /* MGLHeatmapStyleLayer.h in Headers */, - DAE6C3601CC31E0400DB3429 /* MGLOfflineRegion.h in Headers */, - DAE6C3681CC31E0400DB3429 /* MGLTilePyramidOfflineRegion.h in Headers */, - DA35A2CF1CCAAED300E826B2 /* NSValue+MGLAdditions.h in Headers */, - DAE6C3A61CC31E9400DB3429 /* MGLMapViewDelegate.h in Headers */, - DAE6C38B1CC31E2A00DB3429 /* MGLOfflinePack_Private.h in Headers */, - 558DE7A61E56161C00C7916D /* MGLFoundation_Private.h in Headers */, - CA4045C7216720D700B356E1 /* MGLCluster.h in Headers */, - DACC22141CF3D3E200D220D9 /* MGLFeature.h in Headers */, - 3538AA231D542685008EC33D /* MGLStyleLayer.h in Headers */, - DAE6C35C1CC31E0400DB3429 /* MGLGeometry.h in Headers */, - DAE6C35A1CC31E0400DB3429 /* MGLAccountManager.h in Headers */, - DA551B821DB496AC0009AFAF /* MGLTileSource.h in Headers */, - 35602C001D3EA9B40050646F /* MGLForegroundStyleLayer.h in Headers */, - DAE6C35D1CC31E0400DB3429 /* MGLMapCamera.h in Headers */, - DAE6C3B41CC31EF300DB3429 /* MGLCompassCell.h in Headers */, - DA87A99C1DC9D8DD00810D09 /* MGLShapeSource_Private.h in Headers */, - 3537CA741D3F93A600380318 /* MGLStyle_Private.h in Headers */, - 0721493F1EE200E900085505 /* MGLImageSource.h in Headers */, - DA8F259A1D51CAD00010E6B5 /* MGLSource_Private.h in Headers */, - DA8F25931D51CA750010E6B5 /* MGLSymbolStyleLayer.h in Headers */, - DAE6C3B91CC31EF300DB3429 /* MGLOpenGLLayer.h in Headers */, - DAF0D80E1DFE0E5D00B28378 /* MGLPointCollection_Private.h in Headers */, - 35D65C5A1D65AD5500722C23 /* NSDate+MGLAdditions.h in Headers */, - 355BA4ED1D41633E00CCC6D5 /* NSColor+MGLAdditions.h in Headers */, - DAE6C3891CC31E2A00DB3429 /* MGLMultiPoint_Private.h in Headers */, - 747ABE64219B2C1800523B67 /* MGLOpenGLStyleLayer_Private.h in Headers */, - DAE6C3A51CC31E9400DB3429 /* MGLMapView+IBAdditions.h in Headers */, - DA35A2AD1CCA091800E826B2 /* MGLCompassDirectionFormatter.h in Headers */, - 352742851D4C244700A1ECE6 /* MGLRasterTileSource.h in Headers */, - 9654C12D1FFC394700DB6A19 /* MGLPolygon_Private.h in Headers */, - 408AA85B1DAEECFE00022900 /* MGLShape_Private.h in Headers */, - 9221BAAF20699CBB0054BDF4 /* MGLTilePyramidOfflineRegion_Private.h in Headers */, - DACC22181CF3D4F700D220D9 /* MGLFeature_Private.h in Headers */, - 9654C12B1FFC38E000DB6A19 /* MGLPolyline_Private.h in Headers */, - DA6408D71DA4E5DA00908C90 /* MGLVectorStyleLayer.h in Headers */, - 352742891D4C245800A1ECE6 /* MGLShapeSource.h in Headers */, - 1F7454A41ECFB00300021D39 /* MGLLight.h in Headers */, - 747ABE5C219B2BDB00523B67 /* MGLFillStyleLayer_Private.h in Headers */, - 408AA8671DAEEE3900022900 /* NSDictionary+MGLAdditions.h in Headers */, - DAE6C3671CC31E0400DB3429 /* MGLStyle.h in Headers */, - 3EA9317388DC9A0BF46B7674 /* MGLRendererConfiguration.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXLegacyTarget section */ - DAAA17961CE13BAE00731EFE /* docs */ = { - isa = PBXLegacyTarget; - buildArgumentsString = "xdocument OUTPUT=build/macos/pkg/documentation"; - buildConfigurationList = DAAA17991CE13BAE00731EFE /* Build configuration list for PBXLegacyTarget "docs" */; - buildPhases = ( - ); - buildToolPath = /usr/bin/make; - buildWorkingDirectory = ../../; - dependencies = ( - ); - name = docs; - passBuildSettingsInEnvironment = 1; - productName = docs; - }; -/* End PBXLegacyTarget section */ - -/* Begin PBXNativeTarget section */ - DA839E911CC2E3400062CAFB /* macosapp */ = { - isa = PBXNativeTarget; - buildConfigurationList = DA839EA91CC2E3400062CAFB /* Build configuration list for PBXNativeTarget "macosapp" */; - buildPhases = ( - DA839E8E1CC2E3400062CAFB /* Sources */, - DA839E8F1CC2E3400062CAFB /* Frameworks */, - DA839E901CC2E3400062CAFB /* Resources */, - DAE6C3221CC30B3C00DB3429 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - DAE6C33C1CC30DB200DB3429 /* PBXTargetDependency */, - ); - name = macosapp; - productName = macosapp; - productReference = DA839E921CC2E3400062CAFB /* Mapbox GL.app */; - productType = "com.apple.product-type.application"; - }; - DAE6C3271CC30DB200DB3429 /* dynamic */ = { - isa = PBXNativeTarget; - buildConfigurationList = DAE6C3431CC30DB200DB3429 /* Build configuration list for PBXNativeTarget "dynamic" */; - buildPhases = ( - DAE6C3231CC30DB200DB3429 /* Sources */, - DAE6C3241CC30DB200DB3429 /* Frameworks */, - DAE6C3251CC30DB200DB3429 /* Headers */, - DAE6C3261CC30DB200DB3429 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = dynamic; - productName = dynamic; - productReference = DAE6C3281CC30DB200DB3429 /* Mapbox.framework */; - productType = "com.apple.product-type.framework"; - }; - DAE6C3301CC30DB200DB3429 /* test */ = { - isa = PBXNativeTarget; - buildConfigurationList = DAE6C3441CC30DB200DB3429 /* Build configuration list for PBXNativeTarget "test" */; - buildPhases = ( - DAE6C32D1CC30DB200DB3429 /* Sources */, - DAE6C32E1CC30DB200DB3429 /* Frameworks */, - DAE6C32F1CC30DB200DB3429 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - DAE6C3341CC30DB200DB3429 /* PBXTargetDependency */, - ); - name = test; - productName = dynamicTests; - productReference = DAE6C3311CC30DB200DB3429 /* test.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - DA839E8A1CC2E3400062CAFB /* Project object */ = { - isa = PBXProject; - attributes = { - CLASSPREFIX = MBX; - LastUpgradeCheck = 0930; - ORGANIZATIONNAME = Mapbox; - TargetAttributes = { - DA839E911CC2E3400062CAFB = { - CreatedOnToolsVersion = 7.3; - LastSwiftMigration = 0920; - }; - DAAA17961CE13BAE00731EFE = { - CreatedOnToolsVersion = 7.3.1; - }; - DAE6C3271CC30DB200DB3429 = { - CreatedOnToolsVersion = 7.3; - }; - DAE6C3301CC30DB200DB3429 = { - CreatedOnToolsVersion = 7.3; - LastSwiftMigration = 0920; - }; - }; - }; - buildConfigurationList = DA839E8D1CC2E3400062CAFB /* Build configuration list for PBXProject "macos" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - Base, - "zh-Hans", - "zh-Hant", - de, - fr, - ja, - sv, - vi, - "pt-BR", - es, - pl, - uk, - lt, - ru, - ca, - fi, - nl, - hu, - bg, - ar, - he, - da, - "pt-PT", - ko, - cs, - gl, - ); - mainGroup = DA839E891CC2E3400062CAFB; - productRefGroup = DA839E931CC2E3400062CAFB /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - DA839E911CC2E3400062CAFB /* macosapp */, - DAE6C3271CC30DB200DB3429 /* dynamic */, - DAE6C3301CC30DB200DB3429 /* test */, - DAAA17961CE13BAE00731EFE /* docs */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - DA839E901CC2E3400062CAFB /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DA839EA21CC2E3400062CAFB /* Assets.xcassets in Resources */, - DA839EA01CC2E3400062CAFB /* MapDocument.xib in Resources */, - 353BAEF81D6463B8009A8DA9 /* amsterdam.geojson in Resources */, - 96E027311E57C9A7004B8E66 /* Localizable.strings in Resources */, - 89462399200D199100DA8EF2 /* heatmap.json in Resources */, - DA839EA51CC2E3400062CAFB /* MainMenu.xib in Resources */, - DA5589771D320C41006B7F64 /* wms.json in Resources */, - DAE6C2E21CC304F900DB3429 /* Credits.rtf in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAE6C3261CC30DB200DB3429 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DA8933AE1CCD290700E68420 /* Localizable.strings in Resources */, - DAE6C3BE1CC31F2E00DB3429 /* default_marker.pdf in Resources */, - DAE6C3BF1CC31F2E00DB3429 /* mapbox.pdf in Resources */, - DA8933A51CCD287300E68420 /* MGLAnnotationCallout.xib in Resources */, - DA8933B51CCD2C2500E68420 /* Foundation.strings in Resources */, - DA8933B81CCD2C2D00E68420 /* Foundation.stringsdict in Resources */, - 1F9EF4061FBA1B0E0063FBB0 /* mapbox_helmet.pdf in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAE6C32F1CC30DB200DB3429 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 35724FC41D630502002A4AB4 /* amsterdam.geojson in Resources */, - DA2784FE1DF03060001D5B8D /* Media.xcassets in Resources */, - DA35D08A1E1A631B007DED41 /* one-liner.json in Resources */, - 1F8A59FA21653483004DFE75 /* sideload_sat.db in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - DA839E8E1CC2E3400062CAFB /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DAA48EFD1D6A4731006A7E36 /* StyleLayerIconTransformer.m in Sources */, - DA839E9D1CC2E3400062CAFB /* MapDocument.m in Sources */, - DAE6C2ED1CC3050F00DB3429 /* DroppedPinAnnotation.m in Sources */, - DAE6C2EE1CC3050F00DB3429 /* LocationCoordinate2DTransformer.m in Sources */, - DAE6C2F11CC3050F00DB3429 /* TimeIntervalTransformer.m in Sources */, - DACB0C391E18DFFD005DDBEA /* MGLStyle+MBXAdditions.m in Sources */, - DA839E9A1CC2E3400062CAFB /* main.m in Sources */, - DA839E971CC2E3400062CAFB /* AppDelegate.m in Sources */, - 3E6465D9206576A900685536 /* LimeGreenStyleLayer.m in Sources */, - DAE6C2F01CC3050F00DB3429 /* OfflinePackNameValueTransformer.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAE6C3231CC30DB200DB3429 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 07A019EF1ED665CD00ACD43E /* MGLImageSource.mm in Sources */, - 92092EF11F5EB10E00AF5130 /* MGLMapSnapshotter.mm in Sources */, - 40ABDB561DB0022100372083 /* NSImage+MGLAdditions.mm in Sources */, - DAF25715201901C200367EF5 /* MGLHillshadeStyleLayer.mm in Sources */, - DAE6C3901CC31E2A00DB3429 /* MGLPointAnnotation.mm in Sources */, - 1FCCEC53222EF9FE00302E3B /* MGLSDKMetricsManager.m in Sources */, - DAE6C3981CC31E2A00DB3429 /* NSBundle+MGLAdditions.m in Sources */, - DAE6C3B71CC31EF300DB3429 /* MGLMapView.mm in Sources */, - 55CAF6342294409B00F17770 /* MGLMapView+OpenGL.mm in Sources */, - 40B77E461DB11BCD003DA2FE /* NSArray+MGLAdditions.mm in Sources */, - DAE6C38C1CC31E2A00DB3429 /* MGLOfflinePack.mm in Sources */, - 35D65C5B1D65AD5500722C23 /* NSDate+MGLAdditions.mm in Sources */, - CF762DEF22DC7EFF00338472 /* MGLLoggingConfiguration.mm in Sources */, - DD0902B21DB1AC6400C5BDCE /* MGLNetworkConfiguration.m in Sources */, - 1F7454A51ECFB00300021D39 /* MGLLight.mm in Sources */, - DAE6C3B11CC31EF300DB3429 /* MGLAnnotationImage.m in Sources */, - 3508EC651D749D39009B0EE4 /* NSExpression+MGLAdditions.mm in Sources */, - DACC22151CF3D3E200D220D9 /* MGLFeature.mm in Sources */, - DA7262081DEEDD460043BB89 /* MGLOpenGLStyleLayer.mm in Sources */, - 355BA4EE1D41633E00CCC6D5 /* NSColor+MGLAdditions.mm in Sources */, - DAE6C3B31CC31EF300DB3429 /* MGLAttributionButton.mm in Sources */, - 35602BFB1D3EA99F0050646F /* MGLFillStyleLayer.mm in Sources */, - DAE6C3931CC31E2A00DB3429 /* MGLShape.mm in Sources */, - 352742861D4C244700A1ECE6 /* MGLRasterTileSource.mm in Sources */, - 558DE7A71E56161C00C7916D /* MGLFoundation.mm in Sources */, - DAE6C39D1CC31E2A00DB3429 /* NSString+MGLAdditions.m in Sources */, - 3598195A1E02F611008FC139 /* NSCoder+MGLAdditions.mm in Sources */, - 749EC8932199CCB9005608D7 /* MGLStyleLayerManager.mm in Sources */, - DAE6C3941CC31E2A00DB3429 /* MGLStyle.mm in Sources */, - DAE6C3871CC31E2A00DB3429 /* MGLGeometry.mm in Sources */, - 894623A0200E748000DA8EF2 /* MGLHeatmapStyleLayer.mm in Sources */, - 3527428E1D4C24AB00A1ECE6 /* MGLCircleStyleLayer.mm in Sources */, - 35602C011D3EA9B40050646F /* MGLForegroundStyleLayer.mm in Sources */, - 408AA86A1DAEEE5D00022900 /* NSDictionary+MGLAdditions.mm in Sources */, - DA8F25881D51C9E10010E6B5 /* MGLBackgroundStyleLayer.mm in Sources */, - DA551B841DB496AC0009AFAF /* MGLTileSource.mm in Sources */, - CFF9F98D23A2505700B0DE92 /* MGLNetworkIntegrationManager.m in Sources */, - DAE6C3B81CC31EF300DB3429 /* MGLMapView+IBAdditions.mm in Sources */, - DA35A2D01CCAAED300E826B2 /* NSValue+MGLAdditions.m in Sources */, - 3538AA241D542685008EC33D /* MGLStyleLayer.mm in Sources */, - DA35A2C01CCA9B1A00E826B2 /* MGLClockDirectionFormatter.m in Sources */, - 07F8E2F81F674C9000F794BB /* MGLComputedShapeSource.mm in Sources */, - DAE6C3BA1CC31EF300DB3429 /* MGLOpenGLLayer.mm in Sources */, - DAE6C38A1CC31E2A00DB3429 /* MGLMultiPoint.mm in Sources */, - DAE6C3961CC31E2A00DB3429 /* MGLTypes.m in Sources */, - 4049C2AD1DB8020600B3F799 /* MGLPointCollection.mm in Sources */, - DA35A2A61CC9EB2700E826B2 /* MGLCoordinateFormatter.m in Sources */, - 352742821D4C243B00A1ECE6 /* MGLSource.mm in Sources */, - DAE6C3881CC31E2A00DB3429 /* MGLMapCamera.mm in Sources */, - DA6408D81DA4E5DA00908C90 /* MGLVectorStyleLayer.mm in Sources */, - 1FF4858D2237235300F19727 /* MGLAttributedExpression.m in Sources */, - DA8F25B31D51CB270010E6B5 /* NSValue+MGLStyleAttributeAdditions.mm in Sources */, - DAE6C3911CC31E2A00DB3429 /* MGLPolygon.mm in Sources */, - 35C6DF851E214C0400ACA483 /* MGLDistanceFormatter.m in Sources */, - DAE6C39B1CC31E2A00DB3429 /* NSProcessInfo+MGLAdditions.m in Sources */, - DAA998FC1E9F545C002E6EA6 /* MGLFillExtrusionStyleLayer.mm in Sources */, - DAE6C38F1CC31E2A00DB3429 /* MGLOfflineStorage.mm in Sources */, - DAED38601D62CED700D7640F /* NSURL+MGLAdditions.m in Sources */, - 35C5D84A1D6DD66D00E95907 /* NSCompoundPredicate+MGLAdditions.mm in Sources */, - DAE6C3951CC31E2A00DB3429 /* MGLTilePyramidOfflineRegion.mm in Sources */, - DAE6C3851CC31E2A00DB3429 /* MGLAccountManager.m in Sources */, - DA00FC8B1D5EEAC3009AABC8 /* MGLAttributionInfo.mm in Sources */, - DAE6C3921CC31E2A00DB3429 /* MGLPolyline.mm in Sources */, - 3527428A1D4C245800A1ECE6 /* MGLShapeSource.mm in Sources */, - DAE6C3B51CC31EF300DB3429 /* MGLCompassCell.m in Sources */, - DA8F25901D51CA600010E6B5 /* MGLRasterStyleLayer.mm in Sources */, - DAD165751CF4CD7A001FF4B9 /* MGLShapeCollection.mm in Sources */, - 92FC0AE6207CDD8D007B6B54 /* MGLShapeOfflineRegion.mm in Sources */, - 35C5D8481D6DD66D00E95907 /* NSComparisonPredicate+MGLAdditions.mm in Sources */, - 5591AC6B2298361600FF9ADF /* MGLMapView+Impl.mm in Sources */, - DA35A2AE1CCA091800E826B2 /* MGLCompassDirectionFormatter.m in Sources */, - DACA8623201920BE00E9693A /* MGLRasterDEMSource.mm in Sources */, - DA8F258C1D51CA540010E6B5 /* MGLLineStyleLayer.mm in Sources */, - DA8F25941D51CA750010E6B5 /* MGLSymbolStyleLayer.mm in Sources */, - 3529039C1D6C63B80002C7DF /* NSPredicate+MGLAdditions.mm in Sources */, - DA8F25981D51CAC70010E6B5 /* MGLVectorTileSource.mm in Sources */, - 352742A11D4C25BD00A1ECE6 /* MGLStyleValue.mm in Sources */, - 3EA93BA38DBB4B814B6C1FCC /* MGLRendererConfiguration.mm in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAE6C32D1CC30DB200DB3429 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DA35A2C21CCA9F4A00E826B2 /* MGLClockDirectionFormatterTests.m in Sources */, - DAE6C3D41CC34C9900DB3429 /* MGLOfflineRegionTests.m in Sources */, - DAE6C3D61CC34C9900DB3429 /* MGLStyleTests.mm in Sources */, - 1F7454AB1ED1DDBD00021D39 /* MGLLightTest.mm in Sources */, - 07A240941F675674002C8210 /* MGLComputedShapeSourceTests.m in Sources */, - DAEDC4371D606291000224FF /* MGLAttributionButtonTests.m in Sources */, - CA0B3C072329F7E700E4B493 /* MGLTestAssertionHandler.m in Sources */, - DA695424215B1E6C002041A4 /* MGLMapCameraTests.m in Sources */, - 920A3E591E6F859D00C16EFC /* MGLSourceQueryTests.m in Sources */, - DA35A2B61CCA14D700E826B2 /* MGLCompassDirectionFormatterTests.m in Sources */, - 35C6DF871E214C1800ACA483 /* MGLDistanceFormatterTests.m in Sources */, - CAD9D0AC22A88A32001B25EE /* MGLResourceTests.mm in Sources */, - DAE6C3D21CC34C9900DB3429 /* MGLGeometryTests.mm in Sources */, - DA87A9A41DCACC5000810D09 /* MGLSymbolStyleLayerTests.mm in Sources */, - 40E1601D1DF217D6005EA6D9 /* MGLStyleLayerTests.m in Sources */, - 076171C5213A0DC200668A35 /* MGLMapViewTests.m in Sources */, - 170A82BF201BDD1B00943087 /* MGLHeatmapStyleLayerTests.mm in Sources */, - 1F95931B1E6DE2B600D5B294 /* MGLNSDateAdditionsTests.mm in Sources */, - DAF25721201902C100367EF5 /* MGLHillshadeStyleLayerTests.mm in Sources */, - DA87A9A61DCACC5000810D09 /* MGLCircleStyleLayerTests.mm in Sources */, - DA87A99E1DC9DC2100810D09 /* MGLPredicateTests.mm in Sources */, - DD58A4C91D822C6700E1F038 /* MGLExpressionTests.mm in Sources */, - CA0B3C092329FB4800E4B493 /* MGLOfflinePackTests.mm in Sources */, - 170A82C4201FB6EC00943087 /* MGLHeatmapColorTests.mm in Sources */, - 4031ACFC1E9EB3C100A3EA26 /* MGLMapViewDelegateIntegrationTests.swift in Sources */, - CA8FBC0D21A4A74300D1203C /* MGLRendererConfigurationTests.mm in Sources */, - 4031AD031E9FD6AA00A3EA26 /* MGLSDKTestHelpers.swift in Sources */, - DA87A9A71DCACC5000810D09 /* MGLBackgroundStyleLayerTests.mm in Sources */, - DAA999011E9F5EC5002E6EA6 /* MGLFillExtrusionStyleLayerTests.mm in Sources */, - DA29875A1E1A4290002299F5 /* MGLDocumentationExampleTests.swift in Sources */, - 07BA4CAC1EE21887004528F5 /* MGLImageSourceTests.m in Sources */, - DA87A9A51DCACC5000810D09 /* MGLLineStyleLayerTests.mm in Sources */, - DA87A9A31DCACC5000810D09 /* MGLRasterStyleLayerTests.mm in Sources */, - CA9461A620884CCB0015EB12 /* MGLAnnotationTests.m in Sources */, - DA87A9991DC9D88400810D09 /* MGLTileSetTests.mm in Sources */, - DA35A2A81CC9F41600E826B2 /* MGLCoordinateFormatterTests.m in Sources */, - DAE7DEC41E24549F007505A6 /* MGLNSStringAdditionsTests.m in Sources */, - DA87A9981DC9D88400810D09 /* MGLShapeSourceTests.mm in Sources */, - 55E2AD111E5B0A6900E8C587 /* MGLOfflineStorageTests.mm in Sources */, - 3526EABD1DF9B19800006B43 /* MGLCodingTests.mm in Sources */, - DA87A9A21DC9DCF100810D09 /* MGLFillStyleLayerTests.mm in Sources */, - DA57D4B11EBC699800793288 /* MGLDocumentationGuideTests.swift in Sources */, - DAEDC4321D6033F1000224FF /* MGLAttributionInfoTests.m in Sources */, - DA0CD58E1CF56F5800A5F5A5 /* MGLFeatureTests.mm in Sources */, - 556660D61E1D07E400E2C41B /* MGLVersionNumber.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - DAE6C3341CC30DB200DB3429 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAE6C3271CC30DB200DB3429 /* dynamic */; - targetProxy = DAE6C3331CC30DB200DB3429 /* PBXContainerItemProxy */; - }; - DAE6C33C1CC30DB200DB3429 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAE6C3271CC30DB200DB3429 /* dynamic */; - targetProxy = DAE6C33B1CC30DB200DB3429 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 96E027331E57C9A7004B8E66 /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 96E027321E57C9A7004B8E66 /* Base */, - 96E027341E57C9A9004B8E66 /* zh-Hans */, - 96E027351E57C9AB004B8E66 /* zh-Hant */, - 96E027361E57C9AC004B8E66 /* de */, - 96E027371E57C9B5004B8E66 /* fr */, - 96E027381E57C9B7004B8E66 /* ja */, - 96E027391E57C9B9004B8E66 /* sv */, - 96E0273A1E57C9BB004B8E66 /* vi */, - 96E0273B1E57C9BC004B8E66 /* pt-BR */, - 966091701E5BBFF700A9A03B /* es */, - 966091711E5BBFF900A9A03B /* pl */, - 966091721E5BBFFA00A9A03B /* uk */, - 966091731E5BBFFA00A9A03B /* lt */, - DA618B131E68850300CB7F44 /* ru */, - DA618B161E6886E000CB7F44 /* ca */, - DA618B271E68926E00CB7F44 /* fi */, - DAE8CCAB1E6E8B72009B5CB0 /* nl */, - DA704CBE1F637531004B3F28 /* hu */, - DA3389611FA3EDCE001EA329 /* bg */, - DA80E95D1FE84A300065FC9B /* ar */, - DACBC6082011885800C4D7E2 /* he */, - DAD88E03202ACF5900AAA536 /* da */, - DA934097208562590059919A /* pt-PT */, - DAFEB3702093ACBF00A86A83 /* ko */, - 1FDB00CC21F8F1FD00D21389 /* cs */, - DAE9ED53223897C400C01291 /* gl */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - DA839E9E1CC2E3400062CAFB /* MapDocument.xib */ = { - isa = PBXVariantGroup; - children = ( - DA839E9F1CC2E3400062CAFB /* Base */, - ); - name = MapDocument.xib; - sourceTree = ""; - }; - DA839EA31CC2E3400062CAFB /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - DA839EA41CC2E3400062CAFB /* Base */, - ); - name = MainMenu.xib; - sourceTree = ""; - }; - DA8933A71CCD287300E68420 /* MGLAnnotationCallout.xib */ = { - isa = PBXVariantGroup; - children = ( - DA8933A61CCD287300E68420 /* Base */, - ); - name = MGLAnnotationCallout.xib; - sourceTree = ""; - }; - DA8933AB1CCD290700E68420 /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - DA8933AC1CCD290700E68420 /* Base */, - DA88520F1E0A4D0D009D7AD6 /* zh-Hans */, - DAFBD0D51E3FA969000CD6BF /* zh-Hant */, - DAA32CA61E4C4849006F8D24 /* de */, - DAA32CAF1E4C4B0D006F8D24 /* fr */, - DAA32CB31E4C4CC3006F8D24 /* ja */, - DAA32CBA1E4C4F10006F8D24 /* sv */, - DAA32CC11E4C4F93006F8D24 /* vi */, - DA9C01311E4C7B9F00C4742A /* pt-BR */, - DA737ADF1E5914D300AD2CDE /* es */, - DA737AE41E5915B000AD2CDE /* pl */, - DA737AEC1E59180E00AD2CDE /* uk */, - DA1AC01E1E5B8826006DF1D6 /* lt */, - DA618B141E68852C00CB7F44 /* ru */, - DA618B181E6887C600CB7F44 /* ca */, - DA618B2A1E6892B500CB7F44 /* fi */, - DAE8CCAC1E6E8B8D009B5CB0 /* nl */, - DA704CBF1F637548004B3F28 /* hu */, - DA3389641FA3EE00001EA329 /* bg */, - DACBC60A2011889E00C4D7E2 /* he */, - DAD88E06202ACF9200AAA536 /* da */, - DA9340992085629E0059919A /* pt-PT */, - DA9340A0208565870059919A /* ar */, - 1FDB00CD21F8F1FF00D21389 /* cs */, - DAE9ED56223898CF00C01291 /* gl */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - DA8933B31CCD2C2500E68420 /* Foundation.strings */ = { - isa = PBXVariantGroup; - children = ( - DA8933B41CCD2C2500E68420 /* Base */, - DA8852101E0A4D3A009D7AD6 /* zh-Hans */, - DAFBD0D61E3FA983000CD6BF /* zh-Hant */, - DAA32CA71E4C486D006F8D24 /* de */, - DAA32CB21E4C4CB7006F8D24 /* ja */, - DAA32CC01E4C4F89006F8D24 /* vi */, - DA6023EF1E4CE8E500DBFF23 /* sv */, - DA618B171E68876C00CB7F44 /* ca */, - DA618B231E6891ED00CB7F44 /* lt */, - DAE9E0F21EB7BF39001E8E8B /* es */, - DACCD9C71F1F443B00BB09A1 /* fr */, - DA704CBA1F6372E8004B3F28 /* ru */, - DA704CC61F666385004B3F28 /* uk */, - DA3389601FA3EAC4001EA329 /* pt-BR */, - DA3389621FA3EDEF001EA329 /* bg */, - DACBC6092011888C00C4D7E2 /* he */, - DAD88E04202ACF7C00AAA536 /* da */, - DAFEB3722093ACDA00A86A83 /* ko */, - DAE9ED54223897ED00C01291 /* gl */, - ); - name = Foundation.strings; - sourceTree = ""; - }; - DA8933B61CCD2C2D00E68420 /* Foundation.stringsdict */ = { - isa = PBXVariantGroup; - children = ( - DA8933B71CCD2C2D00E68420 /* en */, - DAA32CA81E4C48B9006F8D24 /* de */, - DAA32CAE1E4C4B03006F8D24 /* fr */, - DA9C01301E4C7B9300C4742A /* pt-BR */, - DA6023F01E4CE8FF00DBFF23 /* sv */, - DA737ADE1E5914AD00AD2CDE /* es */, - DA737AE31E5915A500AD2CDE /* pl */, - DA1AC01F1E5B8904006DF1D6 /* uk */, - DAE8CCAA1E6E8605009B5CB0 /* ru */, - DA618B151E6886DF00CB7F44 /* ca */, - DA618B241E6891F300CB7F44 /* lt */, - DACFE7971F66EA0C00630DA8 /* vi */, - DA3389631FA3EDF5001EA329 /* bg */, - DA33896C1FA3EF51001EA329 /* hu */, - DA80E95F1FE84A540065FC9B /* ar */, - DAD88E05202ACF8200AAA536 /* da */, - DA934098208562870059919A /* pt-PT */, - DAFEB3732093ACE400A86A83 /* ko */, - DAE9ED55223898B200C01291 /* gl */, - ); - name = Foundation.stringsdict; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - DA839EA71CC2E3400062CAFB /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - CURRENT_COMMIT_HASH = deadbeef; - CURRENT_SEMANTIC_VERSION = 1.0.0; - CURRENT_SHORT_VERSION = 1.0; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_CPP_RTTI = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SYMROOT = "$(PROJECT_DIR)/cmake"; - }; - name = Debug; - }; - DA839EA81CC2E3400062CAFB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - CURRENT_COMMIT_HASH = deadbeef; - CURRENT_SEMANTIC_VERSION = 1.0.0; - CURRENT_SHORT_VERSION = 1.0; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_CPP_RTTI = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = "NDEBUG=1"; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SYMROOT = "$(PROJECT_DIR)/cmake"; - }; - name = Release; - }; - DA839EAA1CC2E3400062CAFB /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = "$(SRCROOT)/app/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - OTHER_CFLAGS = "-fvisibility=hidden"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxGL; - PRODUCT_NAME = "Mapbox GL"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.0; - }; - name = Debug; - }; - DA839EAB1CC2E3400062CAFB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = "$(SRCROOT)/app/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - OTHER_CFLAGS = "-fvisibility=hidden"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.MapboxGL; - PRODUCT_NAME = "Mapbox GL"; - SWIFT_VERSION = 4.0; - }; - name = Release; - }; - DAAA17971CE13BAE00731EFE /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - DEBUGGING_SYMBOLS = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - DAAA17981CE13BAE00731EFE /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - DAE6C33F1CC30DB200DB3429 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55FE0E8D1D100A0900FD240B /* config.xcconfig */; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - INFOPLIST_FILE = "$(SRCROOT)/sdk/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_LDFLAGS = ( - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.Mapbox; - PRODUCT_NAME = Mapbox; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = "__attribute__((visibility (\"default\"))) "; - }; - name = Debug; - }; - DAE6C3401CC30DB200DB3429 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55FE0E8D1D100A0900FD240B /* config.xcconfig */; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEAD_CODE_STRIPPING = YES; - DEFINES_MODULE = YES; - DEPLOYMENT_POSTPROCESSING = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - INFOPLIST_FILE = "$(SRCROOT)/sdk/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - LLVM_LTO = YES; - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_LDFLAGS = ( - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.Mapbox; - PRODUCT_NAME = Mapbox; - SKIP_INSTALL = YES; - STRIP_STYLE = "non-global"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = "__attribute__((visibility (\"default\"))) "; - }; - name = Release; - }; - DAE6C3411CC30DB200DB3429 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55FE0E8D1D100A0900FD240B /* config.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - INFOPLIST_FILE = test/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/cmake/Debug", - ); - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "$(variant_cflags)", - "$(geometry_cflags)", - "$(geojson_cflags)", - ); - OTHER_LDFLAGS = ( - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - OTHER_SWIFT_FLAGS = "-warnings-as-errors"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.test; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "../darwin/test/test-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.0; - }; - name = Debug; - }; - DAE6C3421CC30DB200DB3429 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55FE0E8D1D100A0900FD240B /* config.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - HEADER_SEARCH_PATHS = ( - "$(mbgl_core_INCLUDE_DIRECTORIES)", - "$(mbgl_filesource_INCLUDE_DIRECTORIES)", - ); - INFOPLIST_FILE = test/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - OTHER_CFLAGS = "-fvisibility=hidden"; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "$(variant_cflags)", - "$(geometry_cflags)", - "$(geojson_cflags)", - ); - OTHER_LDFLAGS = ( - "$(mbgl_core_LINK_LIBRARIES)", - "$(mbgl_filesource_LINK_LIBRARIES)", - ); - OTHER_SWIFT_FLAGS = "-warnings-as-errors"; - PRODUCT_BUNDLE_IDENTIFIER = com.mapbox.test; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "../darwin/test/test-Bridging-Header.h"; - SWIFT_VERSION = 4.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - DA839E8D1CC2E3400062CAFB /* Build configuration list for PBXProject "macos" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DA839EA71CC2E3400062CAFB /* Debug */, - DA839EA81CC2E3400062CAFB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DA839EA91CC2E3400062CAFB /* Build configuration list for PBXNativeTarget "macosapp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DA839EAA1CC2E3400062CAFB /* Debug */, - DA839EAB1CC2E3400062CAFB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DAAA17991CE13BAE00731EFE /* Build configuration list for PBXLegacyTarget "docs" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DAAA17971CE13BAE00731EFE /* Debug */, - DAAA17981CE13BAE00731EFE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DAE6C3431CC30DB200DB3429 /* Build configuration list for PBXNativeTarget "dynamic" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DAE6C33F1CC30DB200DB3429 /* Debug */, - DAE6C3401CC30DB200DB3429 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DAE6C3441CC30DB200DB3429 /* Build configuration list for PBXNativeTarget "test" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DAE6C3411CC30DB200DB3429 /* Debug */, - DAE6C3421CC30DB200DB3429 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = DA839E8A1CC2E3400062CAFB /* Project object */; -} diff --git a/platform/macos/macos.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/platform/macos/macos.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index f2c779de46b..00000000000 --- a/platform/macos/macos.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/CI.xcscheme b/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/CI.xcscheme deleted file mode 100644 index cfb1eca382d..00000000000 --- a/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/CI.xcscheme +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme b/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme deleted file mode 100644 index 55a36344d55..00000000000 --- a/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/dynamic.xcscheme +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/macosapp.xcscheme b/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/macosapp.xcscheme deleted file mode 100644 index 98e6c54a33a..00000000000 --- a/platform/macos/macos.xcodeproj/xcshareddata/xcschemes/macosapp.xcscheme +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/macos/macos.xcworkspace/contents.xcworkspacedata b/platform/macos/macos.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 65341f19fa3..00000000000 --- a/platform/macos/macos.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/platform/macos/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/platform/macos/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d6..00000000000 --- a/platform/macos/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/platform/macos/macos.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist b/platform/macos/macos.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index cb6ecad738b..00000000000 --- a/platform/macos/macos.xcworkspace/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/platform/macos/scripts/deploy-packages.sh b/platform/macos/scripts/deploy-packages.sh deleted file mode 100755 index bb90f3a8b03..00000000000 --- a/platform/macos/scripts/deploy-packages.sh +++ /dev/null @@ -1,144 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -o pipefail -set -u - -# dynamic environment variables: -# VERSION_TAG={determined automatically}: Version tag in format macos-vX.X.X-pre.X -# GITHUB_RELEASE=true: Upload to github -# BINARY_DIRECTORY=build/macos/deploy: Directory in which to save test packages - -# environment variables and dependencies: -# - You must run "mbx auth ..." before running -# - Set GITHUB_TOKEN to a GitHub API access token in your environment to use GITHUB_RELEASE -# - "wget" is required for downloading the zip files from s3 -# - The "github-release" command is required to use GITHUB_RELEASE - -function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; } -function finish { >&2 echo -en "\033[0m"; } -trap finish EXIT - -publish() { - OPTRESET=1 - OPTIND= - local arg - local rule= - local suffix= - local app= - while getopts 'r:s:a:' arg; do - case ${arg} in - r) rule=${OPTARG};; - s) suffix=${OPTARG};; - a) app=${OPTARG};; - *) "Usage: [-r rule] [-s suffix] [-a app]"; return - esac - done - - step "Building: make ${rule} ${suffix}" - make ${rule} - step "Publishing ${rule} with ${suffix}" - local file_name="" - if [ -z ${suffix} ] - then - file_name=mapbox-macos-sdk-${PUBLISH_VERSION}.zip - else - file_name=mapbox-macos-sdk-${PUBLISH_VERSION}-${suffix}.zip - fi - step "Compressing ${file_name}…" - cd build/macos/pkg - rm -f ../deploy/${file_name} - zip -yr ../deploy/${file_name} * - cd - - if [[ "${GITHUB_RELEASE}" == true ]]; then - echo "Uploading ${file_name} to GitHub" - github-release upload \ - --tag "macos-v${PUBLISH_VERSION}" \ - --name ${file_name} \ - --file "${BINARY_DIRECTORY}/${file_name}" > /dev/null - fi - if [ ${app} ]; then - file_name="Mapbox GL.app.zip" - step "Compressing ${file_name}…" - cd build/macos/app - rm -f "${file_name}" - zip -yr "../deploy/${file_name}" 'Mapbox GL.app' - cd - - if [[ "${GITHUB_RELEASE}" == true ]]; then - echo "Uploading ${file_name} to GitHub" - github-release upload \ - --tag "macos-v${PUBLISH_VERSION}" \ - --name "${file_name}" \ - --file "${BINARY_DIRECTORY}/${file_name}" > /dev/null - fi - fi -} - -export GITHUB_USER=mapbox -export GITHUB_REPO=mapbox-gl-native -export BUILDTYPE=Release - -VERSION_TAG=${VERSION_TAG:-''} -PUBLISH_VERSION= -BINARY_DIRECTORY=${BINARY_DIRECTORY:-build/macos/deploy} -GITHUB_RELEASE=${GITHUB_RELEASE:-true} -PUBLISH_PRE_FLAG='' - -if [[ ${GITHUB_RELEASE} = "true" ]]; then - GITHUB_RELEASE=true # Assign bool, not just a string - - if [[ -z `which github-release` ]]; then - step "Installing github-release…" - brew install github-release - if [ -z `which github-release` ]; then - echo "Unable to install github-release. See: https://github.com/aktau/github-release" - exit 1 - fi - fi -fi - -if [[ -z ${VERSION_TAG} ]]; then - step "Determining version number from most recent relevant git tag…" - VERSION_TAG=$( git describe --tags --match=macos-v*.*.* --abbrev=0 ) - echo "Found tag: ${VERSION_TAG}" -fi - -if [[ $( echo ${VERSION_TAG} | grep --invert-match macos-v ) ]]; then - echo "Error: ${VERSION_TAG} is not a valid macOS version tag" - echo "VERSION_TAG should be in format: macos-vX.X.X-pre.X" - exit 1 -fi - -if [[ $( wget --spider -O- https://api.github.com/repos/${GITHUB_USER}/${GITHUB_REPO}/releases/tags/${VERSION_TAG} 2>&1 | grep -c "404 Not Found" ) == 0 ]]; then - echo "Error: ${VERSION_TAG} has already been published on GitHub" - echo "See: https://github.com/${GITHUB_USER}/${GITHUB_REPO}/releases/tag/${VERSION_TAG}" - exit 1 -fi - -PUBLISH_VERSION=$( echo ${VERSION_TAG} | sed 's/^macos-v//' ) -git checkout ${VERSION_TAG} - -step "Deploying version ${PUBLISH_VERSION}…" - -if [[ ${#} -eq 3 && $3 == "-g" ]]; then - GITHUB_RELEASE=true -fi - -make clean && make distclean -mkdir -p ${BINARY_DIRECTORY} - -if [[ "${GITHUB_RELEASE}" == true ]]; then - step "Create GitHub release…" - if [[ $( echo ${PUBLISH_VERSION} | awk '/[0-9]-/' ) ]]; then - PUBLISH_PRE_FLAG='--pre-release' - fi - github-release release \ - --tag "macos-v${PUBLISH_VERSION}" \ - --name "macos-v${PUBLISH_VERSION}" \ - --draft ${PUBLISH_PRE_FLAG} -fi - -publish -r xpackage -s symbols -publish -r "xpackage SYMBOLS=NO" -a true - -step "Finished deploying ${PUBLISH_VERSION} in $(($SECONDS / 60)) minutes and $(($SECONDS % 60)) seconds" diff --git a/platform/macos/scripts/document.sh b/platform/macos/scripts/document.sh deleted file mode 100755 index 8d8d1c7bf23..00000000000 --- a/platform/macos/scripts/document.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -o pipefail -set -u - -if [ -z `which jazzy` ]; then - echo "Installing jazzy…" - gem install jazzy - if [ -z `which jazzy` ]; then - echo "Unable to install jazzy. See https://github.com/mapbox/mapbox-gl-native/blob/master/platform/macos/INSTALL.md" - exit 1 - fi -fi - -OUTPUT=${OUTPUT:-documentation} - -BRANCH=$( git describe --tags --match=macos-v*.*.* --abbrev=0 ) -SHORT_VERSION=$( echo ${BRANCH} | sed 's/^macos-v//' ) -RELEASE_VERSION=$( echo ${SHORT_VERSION} | sed -e 's/^macos-v//' -e 's/-.*//' ) - -rm -rf /tmp/mbgl -mkdir -p /tmp/mbgl/ -README=/tmp/mbgl/README.md -if [[ ${STANDALONE:-} ]]; then - cp platform/macos/docs/pod-README.md "${README}" - perl -pi -e 's|https://raw.githubusercontent.com/mapbox/mapbox-gl-native/master/platform/macos/docs/||' \ - "${README}" -else - cp platform/macos/docs/doc-README.md "${README}" -fi -# http://stackoverflow.com/a/4858011/4585461 -echo "## Changes in [version ${RELEASE_VERSION}](https://github.com/mapbox/mapbox-gl-native/releases/tag/${BRANCH})" >> "${README}" -sed -n -e '/^## /{' -e ':a' -e 'n' -e '/^## /q' -e 'p' -e 'ba' -e '}' platform/macos/CHANGELOG.md >> "${README}" - -rm -rf ${OUTPUT} -mkdir -p ${OUTPUT} - -cp -r platform/darwin/docs/img "${OUTPUT}" -cp -r platform/macos/docs/img "${OUTPUT}" - -jazzy \ - --config platform/macos/jazzy.yml \ - --sdk macosx \ - --github-file-prefix https://github.com/mapbox/mapbox-gl-native/tree/${BRANCH} \ - --module-version ${SHORT_VERSION} \ - --readme ${README} \ - --documentation="platform/{darwin,macos}/docs/guides/*.md" \ - --theme platform/darwin/docs/theme \ - --output ${OUTPUT} \ - --title "Maps SDK for macOS" \ - --module-version ${SHORT_VERSION} diff --git a/platform/macos/scripts/metrics.sh b/platform/macos/scripts/metrics.sh deleted file mode 100755 index 91dfc60358b..00000000000 --- a/platform/macos/scripts/metrics.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -o pipefail - -# Track individual architectures -scripts/check_binary_size.js "build/macos/pkg/Mapbox.framework/Versions/Current/Mapbox" "macOS x86_64" diff --git a/platform/macos/scripts/package.sh b/platform/macos/scripts/package.sh deleted file mode 100755 index 407b116b06e..00000000000 --- a/platform/macos/scripts/package.sh +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -o pipefail -set -u - -NAME=Mapbox -OUTPUT=build/macos/pkg -APP_OUTPUT=build/macos/app -DERIVED_DATA=build/macos - -BUILDTYPE=${BUILDTYPE:-Release} -SYMBOLS=${SYMBOLS:-YES} -PRODUCTS=${DERIVED_DATA}/${BUILDTYPE} - -function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; } -function finish { >&2 echo -en "\033[0m"; } -trap finish EXIT - -rm -rf ${OUTPUT} ${APP_OUTPUT} - -HASH=`git log | head -1 | awk '{ print $2 }' | cut -c 1-10` && true -PROJ_VERSION=$(git rev-list --count HEAD) -SEM_VERSION=$( git describe --tags --match=macos-v*.*.* --abbrev=0 | sed 's/^macos-v//' ) -SHORT_VERSION=${SEM_VERSION%-*} - -CI_XCCONFIG='' -if [[ ! -z "${CI:=}" ]]; then - xcconfig='platform/darwin/ci.xcconfig' - echo "CI environment, using ${xcconfig}" - CI_XCCONFIG="-xcconfig ./${xcconfig}" -fi - -step "Building dynamic framework (build ${PROJ_VERSION}, version ${SEM_VERSION})…" -xcodebuild \ - CURRENT_PROJECT_VERSION=${PROJ_VERSION} \ - CURRENT_SHORT_VERSION=${SHORT_VERSION} \ - CURRENT_SEMANTIC_VERSION=${SEM_VERSION} \ - CURRENT_COMMIT_HASH=${HASH} \ - ${CI_XCCONFIG} \ - -derivedDataPath ${DERIVED_DATA} \ - -archivePath "${APP_OUTPUT}/macosapp.xcarchive" \ - -workspace ./platform/macos/macos.xcworkspace \ - -scheme dynamic \ - -configuration ${BUILDTYPE} \ - -jobs ${JOBS} \ - build | xcpretty - -step "Copying dynamic framework into place" -mkdir -p "${OUTPUT}/${NAME}.framework" -ditto ${PRODUCTS}/${NAME}.framework "${OUTPUT}/${NAME}.framework" -if [[ -e ${PRODUCTS}/${NAME}.framework.dSYM ]]; then - cp -r ${PRODUCTS}/${NAME}.framework.dSYM "${OUTPUT}" -fi - -step "Building and archiving Mapbox GL.app (build ${PROJ_VERSION}, version ${SEM_VERSION})…" -if [[ ${BUILDTYPE} == Release ]]; then - mkdir -p ${APP_OUTPUT} - xcodebuild \ - CURRENT_PROJECT_VERSION=${PROJ_VERSION} \ - CURRENT_SHORT_VERSION=${SHORT_VERSION} \ - CURRENT_SEMANTIC_VERSION=${SEM_VERSION} \ - CURRENT_COMMIT_HASH=${HASH} \ - ${CI_XCCONFIG} \ - -derivedDataPath ${DERIVED_DATA} \ - -archivePath "${APP_OUTPUT}/macosapp.xcarchive" \ - -workspace ./platform/macos/macos.xcworkspace \ - -scheme macosapp \ - -configuration ${BUILDTYPE} \ - -jobs ${JOBS} \ - archive | xcpretty -fi - -if [[ ${SYMBOLS} = NO ]]; then - step "Stripping symbols from binaries" - strip -Sx "${OUTPUT}/${NAME}.framework/${NAME}" -fi - -function get_comparable_uuid { - echo $(dwarfdump --uuid ${1} | sed -n 's/.*UUID:\([^\"]*\) .*/\1/p' | sort) -} - -function validate_dsym { - step "Validating dSYM and framework UUIDs…" - DSYM_UUID=$(get_comparable_uuid "${1}") - FRAMEWORK_UUID=$(get_comparable_uuid "${2}") - echo -e "${1}\n ${DSYM_UUID}\n${2}\n ${FRAMEWORK_UUID}" - if [[ ${DSYM_UUID} != ${FRAMEWORK_UUID} ]]; then - echo "Error: dSYM and framework UUIDs do not match." - exit 1 - fi -} - -if [[ ${BUILDTYPE} == Release ]]; then - validate_dsym \ - "${OUTPUT}/${NAME}.framework.dSYM/Contents/Resources/DWARF/${NAME}" \ - "${OUTPUT}/${NAME}.framework/${NAME}" - - step "Exporting Mapbox GL.app" - xcodebuild \ - ${CI_XCCONFIG} \ - -exportArchive \ - -archivePath "${APP_OUTPUT}/macosapp.xcarchive" \ - -exportPath "${APP_OUTPUT}" \ - -exportOptionsPlist platform/macos/ExportOptions.plist -fi - -function create_podspec { - step "Creating local podspec…" - [[ $SYMBOLS = YES ]] && POD_SUFFIX="-symbols" || POD_SUFFIX="" - POD_SOURCE_PATH=' :path => ".",' - POD_FRAMEWORKS=" m.vendored_frameworks = '"${NAME}".framework'" - INPUT_PODSPEC=platform/macos/${NAME}-macOS-SDK${POD_SUFFIX}.podspec - OUTPUT_PODSPEC=${OUTPUT}/${NAME}-macOS-SDK${POD_SUFFIX}.podspec - sed "s/.*:http.*/${POD_SOURCE_PATH}/" ${INPUT_PODSPEC} > ${OUTPUT_PODSPEC} - sed -i '' "s/.*vendored_frameworks.*/${POD_FRAMEWORKS}/" ${OUTPUT_PODSPEC} -} - -create_podspec - -step "Copying library resources…" -cp -pv LICENSE.md "${OUTPUT}" -cp -pv platform/macos/docs/pod-README.md "${OUTPUT}/README.md" -sed -n -e '/^## /,$p' platform/macos/CHANGELOG.md > "${OUTPUT}/CHANGELOG.md" - -step "Generating API documentation…" -make xdocument OUTPUT="${OUTPUT}/documentation" - -step "Checking that all public symbols are exported…" -node platform/darwin/scripts/check-public-symbols.js macOS diff --git a/platform/macos/sdk/Base.lproj/Localizable.strings b/platform/macos/sdk/Base.lproj/Localizable.strings deleted file mode 100644 index 68360320eb3..00000000000 --- a/platform/macos/sdk/Base.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "The map failed to load because an unknown error occurred."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "The map failed to load because the style can't be loaded."; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "The map failed to load because the style is corrupted."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "The map failed to load because the style can’t be found or is incompatible."; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Zoom In"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Zoom Out"; - diff --git a/platform/macos/sdk/Base.lproj/MGLAnnotationCallout.xib b/platform/macos/sdk/Base.lproj/MGLAnnotationCallout.xib deleted file mode 100644 index c8e29bc29ed..00000000000 --- a/platform/macos/sdk/Base.lproj/MGLAnnotationCallout.xib +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/macos/sdk/Info.plist b/platform/macos/sdk/Info.plist deleted file mode 100644 index a3a7d6b902d..00000000000 --- a/platform/macos/sdk/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleShortVersionString - $(CURRENT_SHORT_VERSION) - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - MGLCommitHash - $(CURRENT_COMMIT_HASH) - MGLSemanticVersionString - $(CURRENT_SEMANTIC_VERSION) - - diff --git a/platform/macos/sdk/ar.lproj/Localizable.strings b/platform/macos/sdk/ar.lproj/Localizable.strings deleted file mode 100644 index fb0b0a2a462..00000000000 --- a/platform/macos/sdk/ar.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "فشل تحميل الخريطة بسبب حدوث خطأ مجهول."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "فشل تحميل الخريطة بسبب تعذر تحميل النمط."; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "فشل تحميل الخريطة لأن النمط تالف."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "فشل تحميل الخريطة بسبب تعذر العثور على النمط أو أنه غير متوافق"; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "قرّب"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "بعّد"; - diff --git a/platform/macos/sdk/bg.lproj/Localizable.strings b/platform/macos/sdk/bg.lproj/Localizable.strings deleted file mode 100644 index 5c713900763..00000000000 --- a/platform/macos/sdk/bg.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Картата не се зареди поради неизвестна грешка."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Картата не се зареди, поради незареждане на стила."; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Картата не се зареди поради повреден стил."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Картата не се зареди поради неоткрит или несъвместим стил."; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Приближи"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Отдалечи"; - diff --git a/platform/macos/sdk/ca.lproj/Localizable.strings b/platform/macos/sdk/ca.lproj/Localizable.strings deleted file mode 100644 index cd3073a8cb6..00000000000 --- a/platform/macos/sdk/ca.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "El mapa no s’ha carregat a causa d’un error desconegut."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "El mapa no s’ha carregat perquè l’estil no es pot carregar."; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "El mapa no s’ha carregat perquè s’ha corromput l’estil."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "El mapa no s’ha carregat perquè no es troba l’estil o bé és incompatible."; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Apropar"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Allunyar"; - diff --git a/platform/macos/sdk/cs.lproj/Localizable.strings b/platform/macos/sdk/cs.lproj/Localizable.strings deleted file mode 100644 index f3c3ef1839e..00000000000 --- a/platform/macos/sdk/cs.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Mapa selhala, protože došlo k neznámé chybě."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Mapa selhala, protože styl nelze načíst."; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Mapa selhala, protože styl je poškozen."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Mapa selhala, protože styl nelze nalézt nebo je nekompatibilní."; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Přiblížit"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Oddálit"; - diff --git a/platform/macos/sdk/da.lproj/Localizable.strings b/platform/macos/sdk/da.lproj/Localizable.strings deleted file mode 100644 index 1c9dcaa68d8..00000000000 --- a/platform/macos/sdk/da.lproj/Localizable.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* User-friendly error description */ -"LOAD_MAP_FAILED_DESC" = "Kortet kunne ikke indlæses, fordi der opstod en ukendt fejl."; - -/* User-friendly error description */ -"LOAD_STYLE_FAILED_DESC" = "Kortet kunne ikke indlæses, fordi benævnelsen ikke kan indlæses."; - -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* User-friendly error description */ -"PARSE_STYLE_FAILED_DESC" = "Kortet kunne ikke indlæses, fordi benævnelsen er beskadiget."; - -/* User-friendly error description */ -"STYLE_NOT_FOUND_DESC" = "Kortet kunne ikke indlæses, fordi benævnelsen ikke kan findes eller er uforenelig."; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Zoom Ind"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Zoom Ud"; - diff --git a/platform/macos/sdk/de.lproj/Localizable.strings b/platform/macos/sdk/de.lproj/Localizable.strings deleted file mode 100644 index fe3d979a318..00000000000 --- a/platform/macos/sdk/de.lproj/Localizable.strings +++ /dev/null @@ -1,15 +0,0 @@ -/* Accessibility title */ -"MAP_A11Y_TITLE" = "Mapbox"; - -/* Label of Zoom In button */ -"ZOOM_IN_LABEL" = "+"; - -/* Tooltip of Zoom In button */ -"ZOOM_IN_TOOLTIP" = "Vergrößern"; - -/* Label of Zoom Out button; U+2212 MINUS SIGN */ -"ZOOM_OUT_LABEL" = "−"; - -/* Tooltip of Zoom Out button */ -"ZOOM_OUT_TOOLTIP" = "Verkleinern"; - diff --git a/platform/macos/sdk/default_marker.pdf b/platform/macos/sdk/default_marker.pdf deleted file mode 100644 index d3e0e2ce12c5acbd096f4fc8a84f2ac5855a07bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4354 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�kjU<>H?L0gPKZHg@;JHyt01g&wwv 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≻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

-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 z%0DIS#+{WOFr!;A^3W*d5y$`P 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